From a986c589caffaf245ac77a7e9b1b1ffb05f4b078 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 7 Nov 2019 17:56:26 -0500 Subject: [PATCH] Add encodeData as a standalone function to ERC20 createTX --- .../src/transactions/erc20/index.ts | 19 ++++++++++++++----- .../crypto-wallet-core/test/transactions.ts | 10 ++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/packages/crypto-wallet-core/src/transactions/erc20/index.ts b/packages/crypto-wallet-core/src/transactions/erc20/index.ts index fa5aed89b4f..f6b4802b954 100644 --- a/packages/crypto-wallet-core/src/transactions/erc20/index.ts +++ b/packages/crypto-wallet-core/src/transactions/erc20/index.ts @@ -10,7 +10,6 @@ export class ERC20TxProvider extends ETHTxProvider { create(params: { recipients: Array<{ address: string; amount: string }>; - from: string; nonce: number; gasPrice: number; data: string; @@ -20,12 +19,22 @@ export class ERC20TxProvider extends ETHTxProvider { chainId?: number; }) { const { tokenAddress } = params; - const [{ address, amount }] = params.recipients; - const data = this.getERC20Contract(tokenAddress) - .methods.transfer(address, amount) - .encodeABI(); + const data = this.encodeData(params); const recipients = [{ address: tokenAddress, amount: '0' }]; const newParams = { ...params, recipients, data }; return super.create(newParams); } + + encodeData(params: { + recipients: Array<{ address: string; amount: string }>; + tokenAddress: string; + }) { + const { tokenAddress } = params; + const [{ address, amount }] = params.recipients; + const amountStr = Number(amount).toLocaleString('en', {useGrouping: false}); + const data = this.getERC20Contract(tokenAddress) + .methods.transfer(address, amountStr) + .encodeABI(); + return data; + } } diff --git a/packages/crypto-wallet-core/test/transactions.ts b/packages/crypto-wallet-core/test/transactions.ts index 1fea913f8c4..591e9393f29 100644 --- a/packages/crypto-wallet-core/test/transactions.ts +++ b/packages/crypto-wallet-core/test/transactions.ts @@ -143,6 +143,16 @@ describe('Transaction Creation', () => { expect(cryptoTx).to.equal(expectedTx); }); + it('should be able to encode Data in ERC20 tx', () => { + const recipients = [{ address: '0x37d7B3bBD88EFdE6a93cF74D2F5b0385D3E3B08A', amount: 3896000000000000 }]; + const tokenAddress = '0x692a70d2e424a56d2c6c27aa97d1a86395877b3a'; + const data = Transactions.get({chain: 'ERC20'}).encodeData({recipients, tokenAddress}); + const expectedData = + '0xa9059cbb00000000000000000000000037d7b3bbd88efde6a93cf74d2f5b0385d3e3b08a000000000000000000000000000000000000000000000000000dd764300b8000'; + + expect(data).to.equal(expectedData); + }); + it('should be only create a mainnet ETH tx with one recipient', () => { const rawEthTx = { network: 'mainnet',