diff --git a/contracts/exchange-forwarder/contracts/src/MixinAssets.sol b/contracts/exchange-forwarder/contracts/src/MixinAssets.sol index cfea0598bc..6fa6f69a8f 100644 --- a/contracts/exchange-forwarder/contracts/src/MixinAssets.sol +++ b/contracts/exchange-forwarder/contracts/src/MixinAssets.sol @@ -146,6 +146,9 @@ contract MixinAssets is ); } + /// @dev Decodes MultiAsset assetData and recursively transfers assets to sender. + /// @param assetData Byte array encoded for the respective asset proxy. + /// @param amount Amount of asset to transfer to sender. function _transferMultiAsset( bytes memory assetData, uint256 amount diff --git a/contracts/exchange-forwarder/test/asset_test.ts b/contracts/exchange-forwarder/test/asset_test.ts index 96f84ba275..51fe246e24 100644 --- a/contracts/exchange-forwarder/test/asset_test.ts +++ b/contracts/exchange-forwarder/test/asset_test.ts @@ -158,10 +158,20 @@ blockchainTests.resets('Supported asset type unit tests', env => { const result = await forwarder.areUnderlyingAssetsEqual(erc20AssetData, multiAssetData).callAsync(); expect(result).to.be.false(); }); - it('returns true if assetData1 == assetData2 are MultiAsset', async () => { + it('returns true if assetData1 == assetData2 are MultiAsset (single nested asset)', async () => { const result = await forwarder.areUnderlyingAssetsEqual(multiAssetData, multiAssetData).callAsync(); expect(result).to.be.true(); }); + it('returns true if assetData1 == assetData2 are MultiAsset (multiple nested assets)', async () => { + const assetData = assetDataEncoder + .MultiAsset( + [getRandomInteger(0, constants.MAX_UINT256), new BigNumber(1)], + [erc20AssetData, erc721AssetData], + ) + .getABIEncodedTransactionData(); + const result = await forwarder.areUnderlyingAssetsEqual(assetData, assetData).callAsync(); + expect(result).to.be.true(); + }); it('returns false if assetData1 != assetData2 are MultiAsset', async () => { const differentMultiAssetData = assetDataEncoder .MultiAsset([getRandomInteger(0, constants.MAX_UINT256)], [erc721AssetData])