From ef3c37fd4cc51ddd93bcd9ca8b70800c2015d96f Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 28 Feb 2024 13:53:30 -0300 Subject: [PATCH] Add sign task --- packages/ethernaut-signer/src/tasks/sign.js | 19 +++++++++ .../ethernaut-signer/test/tasks/sign.test.js | 41 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 packages/ethernaut-signer/src/tasks/sign.js create mode 100644 packages/ethernaut-signer/test/tasks/sign.test.js diff --git a/packages/ethernaut-signer/src/tasks/sign.js b/packages/ethernaut-signer/src/tasks/sign.js new file mode 100644 index 00000000..4dbe9289 --- /dev/null +++ b/packages/ethernaut-signer/src/tasks/sign.js @@ -0,0 +1,19 @@ +const output = require('common/src/output') +const storage = require('../internal/storage') +const { getWallet } = require('../internal/signers') + +require('../scopes/sig') + .task('sign', 'Signs a message with a wallet') + .addOptionalPositionalParam('message', 'The message to sign') + .setAction(async ({ message }) => { + try { + const signers = storage.readSigners() + const signer = signers[signers.activeSigner] + + const wallet = getWallet(signer.pk) + + output.resultBox(wallet.signMessageSync(message)) + } catch (err) { + return output.errorBox(err) + } + }) diff --git a/packages/ethernaut-signer/test/tasks/sign.test.js b/packages/ethernaut-signer/test/tasks/sign.test.js new file mode 100644 index 00000000..713c5f01 --- /dev/null +++ b/packages/ethernaut-signer/test/tasks/sign.test.js @@ -0,0 +1,41 @@ +const { Terminal } = require('common/src/terminal') +const storage = require('../../src/internal/storage') +const { getWallet } = require('../../src/internal/signers') + +describe('info', function () { + const terminal = new Terminal() + + const demoSig = { + address: '0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f', + pk: '0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97', + } + + describe('when queryig info about a signer', function () { + before('add test signers', async function () { + const signers = storage.readSigners() + if (!('test__3' in signers)) signers.test__3 = demoSig + signers.activeSigner = 'test__3' + storage.storeSigners(signers) + }) + + after('remove test signers', async function () { + const signers = storage.readSigners() + if ('test__3' in signers) delete signers.test__3 + storage.storeSigners(signers) + }) + + describe('when signing a message', function () { + before('sign', async function () { + await terminal.run('npx hardhat sig sign "hello"') + }) + + it('prints the expected signature', async function () { + terminal.has('Result') + + const wallet = getWallet(demoSig.pk) + const sig = wallet.signMessageSync('hello') + terminal.has(sig.slice(0, 15)) + }) + }) + }) +})