From 9e3ab6dcd7255f20f9aadfabc030af98589d0b56 Mon Sep 17 00:00:00 2001 From: Benjamin Levesque <14175665+benjlevesque@users.noreply.github.com> Date: Tue, 1 Jun 2021 17:45:53 +0200 Subject: [PATCH] fix: any-to-erc20 token validation (#517) --- .../payment-network/any-to-erc20-proxy.ts | 7 +++- .../any-to-erc20-proxy.test.ts | 33 +++++++++++++++---- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts index a603872b22..34a2a42cf0 100644 --- a/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts +++ b/packages/advanced-logic/src/extensions/payment-network/any-to-erc20-proxy.ts @@ -176,7 +176,12 @@ export default class AnyToErc20ProxyPaymentNetwork extends Erc20FeeProxyPaymentN ); } - if (!supportedCurrencies[network][request.currency.type].includes(request.currency.value)) { + const currency = + request.currency.type === RequestLogicTypes.CURRENCY.ERC20 + ? request.currency.value.toLowerCase() + : request.currency.value; + + if (!supportedCurrencies[network][request.currency.type].includes(currency)) { throw new Error( `The currency (${request.currency.value}) of the request is not supported for this payment network.`, ); diff --git a/packages/advanced-logic/test/extensions/payment-network/any-to-erc20-proxy.test.ts b/packages/advanced-logic/test/extensions/payment-network/any-to-erc20-proxy.test.ts index 78726f39a9..6f4bdc0ef5 100644 --- a/packages/advanced-logic/test/extensions/payment-network/any-to-erc20-proxy.test.ts +++ b/packages/advanced-logic/test/extensions/payment-network/any-to-erc20-proxy.test.ts @@ -358,6 +358,25 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ).toEqual(DataConversionERC20FeeCreate.extensionFullState); }); + it('can applyActionToExtensions of creation when address is checksumed', () => { + const request = Utils.deepCopy(DataConversionERC20FeeCreate.requestStateNoExtensions); + request.currency = { + type: RequestLogicTypes.CURRENCY.ERC20, + value: '0x4E15361FD6b4BB609Fa63C81A2be19d873717870', // FTM + network: 'mainnet', + }; + + expect( + anyToErc20Proxy.applyActionToExtension( + request.extensions, + DataConversionERC20FeeCreate.actionCreationFull, + request, + TestData.otherIdRaw.identity, + TestData.arbitraryTimestamp, + ), + ).toEqual(DataConversionERC20FeeCreate.extensionFullState); + }); + it('cannot applyActionToExtensions of creation with a previous state', () => { // 'must throw' expect(() => { @@ -653,7 +672,7 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ), ).toEqual(DataConversionERC20FeeAddData.extensionStateWithFeeAfterCreation); }); - + it('cannot applyActionToExtensions of addFee without a previous state', () => { expect(() => { anyToErc20Proxy.applyActionToExtension( @@ -665,7 +684,7 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ); }).toThrowError(`The extension should be created before receiving any other action`); }); - + it('cannot applyActionToExtensions of addFee without a payee', () => { const previousState = Utils.deepCopy(DataConversionERC20FeeCreate.requestStateCreatedEmpty); previousState.payee = undefined; @@ -679,7 +698,7 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ); }).toThrowError(`The request must have a payee`); }); - + it('cannot applyActionToExtensions of addFee signed by someone else than the payee', () => { const previousState = Utils.deepCopy(DataConversionERC20FeeCreate.requestStateCreatedEmpty); expect(() => { @@ -692,7 +711,7 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ); }).toThrowError(`The signer must be the payee`); }); - + it('cannot applyActionToExtensions of addFee with fee data already given', () => { expect(() => { anyToErc20Proxy.applyActionToExtension( @@ -704,7 +723,7 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ); }).toThrowError(`Fee address already given`); }); - + it('cannot applyActionToExtensions of addFee with fee address not valid', () => { const testnetPaymentAddress = Utils.deepCopy(DataConversionERC20FeeAddData.actionAddFee); testnetPaymentAddress.parameters.feeAddress = DataConversionERC20FeeAddData.invalidAddress; @@ -718,10 +737,10 @@ describe('extensions/payment-network/erc20/any-to-erc20-fee-proxy-contract', () ); }).toThrowError('feeAddress is not a valid address'); }); - + it('cannot applyActionToExtensions of addFee with fee amount not valid', () => { const testnetPaymentAddress = Utils.deepCopy(DataConversionERC20FeeAddData.actionAddFee); - testnetPaymentAddress.parameters.feeAmount = "invalid amount"; + testnetPaymentAddress.parameters.feeAmount = 'invalid amount'; expect(() => { anyToErc20Proxy.applyActionToExtension( DataConversionERC20FeeCreate.requestStateCreatedEmpty.extensions,