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); diff --git a/src/wallet.ts b/src/wallet.ts index 703390ea..c38a7316 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -154,9 +154,10 @@ WalletMiddlewareOptions): JsonRpcMiddleware { throw rpcErrors.invalidInput(); } - const params = req.params as [TransactionParams?]; + const params = req.params[0] as TransactionParams | undefined; const txParams: TransactionParams = { - from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), + ...params, + from: await validateAndNormalizeKeyholder(params?.from || '', req), }; res.result = await processTransaction(txParams, req); } @@ -176,9 +177,10 @@ WalletMiddlewareOptions): JsonRpcMiddleware { throw rpcErrors.invalidInput(); } - const params = req.params as [TransactionParams?]; + const params = req.params[0] as TransactionParams | undefined; const txParams: TransactionParams = { - from: await validateAndNormalizeKeyholder(params[0]?.from || '', req), + ...params, + from: await validateAndNormalizeKeyholder(params?.from || '', req), }; res.result = await processSignTransaction(txParams, req); }