From 39088fcd0c8e60e89c7a7a60e0ed72b48222ad9a Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Thu, 26 Oct 2023 07:29:13 +0000 Subject: [PATCH 1/3] fix(wallet): add back missing txData for signTransaction,sendTransaction --- src/wallet.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/wallet.ts b/src/wallet.ts index 703390ea..34e7130e 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -156,6 +156,7 @@ WalletMiddlewareOptions): JsonRpcMiddleware { const params = req.params as [TransactionParams?]; const txParams: TransactionParams = { + ...params[0], from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), }; res.result = await processTransaction(txParams, req); @@ -178,6 +179,7 @@ WalletMiddlewareOptions): JsonRpcMiddleware { const params = req.params as [TransactionParams?]; const txParams: TransactionParams = { + ...params[0], from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), }; res.result = await processSignTransaction(txParams, req); From bb639eb4ded18f4eafaef1ff70a4b3866fe5ff11 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Thu, 26 Oct 2023 07:37:36 +0000 Subject: [PATCH 2/3] chore: simplify txParams handling --- src/wallet.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/wallet.ts b/src/wallet.ts index 34e7130e..c38a7316 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -154,10 +154,10 @@ WalletMiddlewareOptions): JsonRpcMiddleware { throw rpcErrors.invalidInput(); } - const params = req.params as [TransactionParams?]; + const params = req.params[0] as TransactionParams | undefined; const txParams: TransactionParams = { - ...params[0], - from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), + ...params, + from: await validateAndNormalizeKeyholder(params?.from || '', req), }; res.result = await processTransaction(txParams, req); } @@ -177,10 +177,10 @@ WalletMiddlewareOptions): JsonRpcMiddleware { throw rpcErrors.invalidInput(); } - const params = req.params as [TransactionParams?]; + const params = req.params[0] as TransactionParams | undefined; const txParams: TransactionParams = { - ...params[0], - from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), + ...params, + from: await validateAndNormalizeKeyholder(params?.from || '', req), }; res.result = await processSignTransaction(txParams, req); } From 930018713ff5c01166314dc6a462d8d296f08e83 Mon Sep 17 00:00:00 2001 From: Salah-Eddine Saakoun Date: Mon, 6 Nov 2023 16:01:00 +0100 Subject: [PATCH 3/3] Sign and Send should not override other request params --- src/wallet.test.ts | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/wallet.test.ts b/src/wallet.test.ts index 7c69f872..a81b5865 100644 --- a/src/wallet.test.ts +++ b/src/wallet.test.ts @@ -116,6 +116,26 @@ describe('wallet', () => { 'The requested account and/or method has not been authorized by the user.', ); }); + + it('should not override other request params', async () => { + const { engine } = createTestSetup(); + const getAccounts = async () => testAddresses.slice(0, 2); + const witnessedTxParams: TransactionParams[] = []; + const processTransaction = async (_txParams: TransactionParams) => { + witnessedTxParams.push(_txParams); + return testTxHash; + }; + engine.push(createWalletMiddleware({ getAccounts, processTransaction })); + const txParams = { + from: testAddresses[0], + to: testAddresses[1], + }; + + const payload = { method: 'eth_sendTransaction', params: [txParams] }; + await pify(engine.handle).call(engine, payload); + expect(witnessedTxParams).toHaveLength(1); + expect(witnessedTxParams[0]).toStrictEqual(txParams); + }); }); describe('signTransaction', () => { @@ -144,6 +164,29 @@ describe('wallet', () => { expect(witnessedTxParams[0]).toStrictEqual(txParams); }); + it('should not override other request params', async () => { + const { engine } = createTestSetup(); + const getAccounts = async () => testAddresses.slice(0, 2); + const witnessedTxParams: TransactionParams[] = []; + const processSignTransaction = async (_txParams: TransactionParams) => { + witnessedTxParams.push(_txParams); + return testTxHash; + }; + + engine.push( + createWalletMiddleware({ getAccounts, processSignTransaction }), + ); + const txParams = { + from: testAddresses[0], + to: testAddresses[1], + }; + + const payload = { method: 'eth_signTransaction', params: [txParams] }; + await pify(engine.handle).call(engine, payload); + expect(witnessedTxParams).toHaveLength(1); + expect(witnessedTxParams[0]).toStrictEqual(txParams); + }); + it('should throw when provided invalid address', async () => { const { engine } = createTestSetup(); const getAccounts = async () => testAddresses.slice(0, 2);