diff --git a/contracts/asset-proxy/CHANGELOG.json b/contracts/asset-proxy/CHANGELOG.json index 2bb182dc61..bacae283f3 100644 --- a/contracts/asset-proxy/CHANGELOG.json +++ b/contracts/asset-proxy/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "2.2.4", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "2.2.3", diff --git a/contracts/asset-proxy/test/authorizable.ts b/contracts/asset-proxy/test/authorizable.ts index ccceb0862a..d86c5d9579 100644 --- a/contracts/asset-proxy/test/authorizable.ts +++ b/contracts/asset-proxy/test/authorizable.ts @@ -37,6 +37,7 @@ describe('Authorizable', () => { artifacts.MixinAuthorizable, provider, txDefaults, + artifacts, ); }); beforeEach(async () => { diff --git a/contracts/asset-proxy/test/erc1155_proxy.ts b/contracts/asset-proxy/test/erc1155_proxy.ts index 5048af635c..4e1730af32 100644 --- a/contracts/asset-proxy/test/erc1155_proxy.ts +++ b/contracts/asset-proxy/test/erc1155_proxy.ts @@ -23,7 +23,7 @@ import { LogWithDecodedArgs } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; -import { ERC1155ProxyContract, ERC1155ProxyWrapper } from '../src'; +import { artifacts, ERC1155ProxyContract, ERC1155ProxyWrapper } from '../src'; chaiSetup.configure(); const expect = chai.expect; @@ -89,6 +89,7 @@ describe('ERC1155Proxy', () => { erc1155Artifacts.DummyERC1155Receiver, provider, txDefaults, + artifacts, ); receiverContract = erc1155Receiver.address; await erc1155ProxyWrapper.setBalancesAndAllowancesAsync(); diff --git a/contracts/asset-proxy/test/proxies.ts b/contracts/asset-proxy/test/proxies.ts index f6c21e7699..aba9e08071 100644 --- a/contracts/asset-proxy/test/proxies.ts +++ b/contracts/asset-proxy/test/proxies.ts @@ -101,6 +101,7 @@ describe('Asset Transfer Proxies', () => { artifacts.MultiAssetProxy, provider, txDefaults, + artifacts, ); // Configure ERC20Proxy @@ -173,6 +174,7 @@ describe('Asset Transfer Proxies', () => { erc20Artifacts.DummyNoReturnERC20Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, constants.DUMMY_TOKEN_DECIMALS, @@ -182,6 +184,7 @@ describe('Asset Transfer Proxies', () => { erc20Artifacts.DummyMultipleReturnERC20Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, constants.DUMMY_TOKEN_DECIMALS, @@ -224,6 +227,7 @@ describe('Asset Transfer Proxies', () => { erc721Artifacts.DummyERC721Receiver, provider, txDefaults, + artifacts, ); await erc721Wrapper.setBalancesAndAllowancesAsync(); diff --git a/contracts/asset-proxy/test/static_call_proxy.ts b/contracts/asset-proxy/test/static_call_proxy.ts index 36f38785a2..a1cf95a4d3 100644 --- a/contracts/asset-proxy/test/static_call_proxy.ts +++ b/contracts/asset-proxy/test/static_call_proxy.ts @@ -41,12 +41,14 @@ describe('StaticCallProxy', () => { artifacts.StaticCallProxy, provider, txDefaults, + artifacts, ); staticCallProxy = new IAssetProxyContract(staticCallProxyWithoutTransferFrom.address, provider, txDefaults); staticCallTarget = await TestStaticCallTargetContract.deployFrom0xArtifactAsync( artifacts.TestStaticCallTarget, provider, txDefaults, + artifacts, ); }); beforeEach(async () => { diff --git a/contracts/asset-proxy/test/utils/erc1155_proxy_wrapper.ts b/contracts/asset-proxy/test/utils/erc1155_proxy_wrapper.ts index 294fbada5b..d770027f5c 100644 --- a/contracts/asset-proxy/test/utils/erc1155_proxy_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc1155_proxy_wrapper.ts @@ -54,6 +54,7 @@ export class ERC1155ProxyWrapper { erc1155Artifacts.ERC1155Mintable, this._provider, txDefaults, + artifacts, ); const erc1155Wrapper = new Erc1155Wrapper(erc1155Contract, this._provider, this._contractOwnerAddress); this._dummyTokenWrappers.push(erc1155Wrapper); @@ -69,6 +70,7 @@ export class ERC1155ProxyWrapper { artifacts.ERC1155Proxy, this._provider, txDefaults, + artifacts, ); this._proxyIdIfExists = await this._proxyContract.getProxyId.callAsync(); return this._proxyContract; diff --git a/contracts/asset-proxy/test/utils/erc20_wrapper.ts b/contracts/asset-proxy/test/utils/erc20_wrapper.ts index 2bb1702222..8fdd210b24 100644 --- a/contracts/asset-proxy/test/utils/erc20_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc20_wrapper.ts @@ -37,6 +37,7 @@ export class ERC20Wrapper { erc20Artifacts.DummyERC20Token, this._provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, decimals, @@ -51,6 +52,7 @@ export class ERC20Wrapper { artifacts.ERC20Proxy, this._provider, txDefaults, + artifacts, ); this._proxyIdIfExists = await this._proxyContract.getProxyId.callAsync(); return this._proxyContract; diff --git a/contracts/asset-proxy/test/utils/erc721_wrapper.ts b/contracts/asset-proxy/test/utils/erc721_wrapper.ts index b52d54d7d7..4f34db29d3 100644 --- a/contracts/asset-proxy/test/utils/erc721_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc721_wrapper.ts @@ -29,6 +29,7 @@ export class ERC721Wrapper { erc721Artifacts.DummyERC721Token, this._provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ), @@ -41,6 +42,7 @@ export class ERC721Wrapper { artifacts.ERC721Proxy, this._provider, txDefaults, + artifacts, ); this._proxyIdIfExists = await this._proxyContract.getProxyId.callAsync(); return this._proxyContract; diff --git a/contracts/coordinator/CHANGELOG.json b/contracts/coordinator/CHANGELOG.json index 35cf589758..e0b850a28b 100644 --- a/contracts/coordinator/CHANGELOG.json +++ b/contracts/coordinator/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "2.0.9", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "2.0.8", diff --git a/contracts/coordinator/test/coordinator.ts b/contracts/coordinator/test/coordinator.ts index 912d48d922..a76fa574f5 100644 --- a/contracts/coordinator/test/coordinator.ts +++ b/contracts/coordinator/test/coordinator.ts @@ -74,6 +74,7 @@ describe('Coordinator tests', () => { exchangeArtifacts.Exchange, provider, txDefaults, + artifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); @@ -91,6 +92,7 @@ describe('Coordinator tests', () => { artifacts.Coordinator, provider, txDefaults, + artifacts, exchange.address, ); diff --git a/contracts/coordinator/test/libs.ts b/contracts/coordinator/test/libs.ts index 8c08f0ec59..df1dbbf8c3 100644 --- a/contracts/coordinator/test/libs.ts +++ b/contracts/coordinator/test/libs.ts @@ -25,6 +25,7 @@ describe('Libs tests', () => { artifacts.Coordinator, provider, txDefaults, + artifacts, exchangeAddress, ); }); diff --git a/contracts/coordinator/test/mixins.ts b/contracts/coordinator/test/mixins.ts index a500333048..9ccf2d28f8 100644 --- a/contracts/coordinator/test/mixins.ts +++ b/contracts/coordinator/test/mixins.ts @@ -44,6 +44,7 @@ describe('Mixins tests', () => { artifacts.Coordinator, provider, txDefaults, + artifacts, exchangeAddress, ); const accounts = await web3Wrapper.getAvailableAddressesAsync(); diff --git a/contracts/coordinator/test/utils/coordinator_registry_wrapper.ts b/contracts/coordinator/test/utils/coordinator_registry_wrapper.ts index 3c80714225..3d7a2999ef 100644 --- a/contracts/coordinator/test/utils/coordinator_registry_wrapper.ts +++ b/contracts/coordinator/test/utils/coordinator_registry_wrapper.ts @@ -24,6 +24,7 @@ export class CoordinatorRegistryWrapper { artifacts.CoordinatorRegistry, this._provider, txDefaults, + artifacts, ); if (this._coordinatorRegistryContract === undefined) { throw new Error(`Failed to deploy Coordinator Registry contract.`); diff --git a/contracts/dev-utils/CHANGELOG.json b/contracts/dev-utils/CHANGELOG.json index 571e851bd5..5008c1e250 100644 --- a/contracts/dev-utils/CHANGELOG.json +++ b/contracts/dev-utils/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "0.0.6", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "0.0.5", diff --git a/contracts/dev-utils/test/lib_asset_data.ts b/contracts/dev-utils/test/lib_asset_data.ts index 0276fb5f75..7c7d0deb6f 100644 --- a/contracts/dev-utils/test/lib_asset_data.ts +++ b/contracts/dev-utils/test/lib_asset_data.ts @@ -92,6 +92,7 @@ describe('LibAssetData', () => { exchangeArtifacts.Exchange, provider, txDefaults, + artifacts, constants.NULL_BYTES, ); @@ -99,26 +100,31 @@ describe('LibAssetData', () => { proxyArtifacts.ERC20Proxy, provider, txDefaults, + artifacts, ); erc721Proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync( proxyArtifacts.ERC721Proxy, provider, txDefaults, + artifacts, ); erc1155Proxy = await ERC1155ProxyContract.deployFrom0xArtifactAsync( proxyArtifacts.ERC1155Proxy, provider, txDefaults, + artifacts, ); multiAssetProxy = await MultiAssetProxyContract.deployFrom0xArtifactAsync( proxyArtifacts.MultiAssetProxy, provider, txDefaults, + artifacts, ); staticCallProxy = await StaticCallProxyContract.deployFrom0xArtifactAsync( proxyArtifacts.StaticCallProxy, provider, txDefaults, + artifacts, ); await exchange.registerAssetProxy.awaitTransactionSuccessAsync(erc20Proxy.address); @@ -131,6 +137,7 @@ describe('LibAssetData', () => { artifacts.LibAssetData, provider, txDefaults, + artifacts, exchange.address, ); @@ -138,6 +145,7 @@ describe('LibAssetData', () => { proxyArtifacts.TestStaticCallTarget, provider, txDefaults, + artifacts, ); [tokenOwnerAddress] = await web3Wrapper.getAvailableAddressesAsync(); @@ -146,6 +154,7 @@ describe('LibAssetData', () => { erc20Artifacts.DummyERC20Token, provider, txDefaults, + artifacts, 'Dummy', 'DUM', new BigNumber(1), @@ -156,6 +165,7 @@ describe('LibAssetData', () => { erc721Artifacts.DummyERC721Token, provider, txDefaults, + artifacts, 'Dummy', 'DUM', ); @@ -172,6 +182,7 @@ describe('LibAssetData', () => { erc1155Artifacts.ERC1155Mintable, provider, txDefaults, + artifacts, ); const logDecoder = new LogDecoder(web3Wrapper, erc1155Artifacts); diff --git a/contracts/dev-utils/test/lib_transaction_decoder.ts b/contracts/dev-utils/test/lib_transaction_decoder.ts index 3719574aa3..9cde98881a 100644 --- a/contracts/dev-utils/test/lib_transaction_decoder.ts +++ b/contracts/dev-utils/test/lib_transaction_decoder.ts @@ -37,6 +37,7 @@ describe('LibTransactionDecoder', () => { artifacts.LibTransactionDecoder, provider, txDefaults, + artifacts, ); }); after(async () => { diff --git a/contracts/dev-utils/test/order_validation_utils.ts b/contracts/dev-utils/test/order_validation_utils.ts index d03cefc18e..28ac3196a0 100644 --- a/contracts/dev-utils/test/order_validation_utils.ts +++ b/contracts/dev-utils/test/order_validation_utils.ts @@ -83,6 +83,7 @@ describe('OrderValidationUtils', () => { exchangeArtifacts.Exchange, provider, txDefaults, + artifacts, zrxAssetData, ); @@ -90,6 +91,7 @@ describe('OrderValidationUtils', () => { proxyArtifacts.MultiAssetProxy, provider, txDefaults, + artifacts, ); const exchangeWrapper = new ExchangeWrapper(exchange, provider); await exchangeWrapper.registerAssetProxyAsync(erc20Proxy.address, owner); @@ -102,6 +104,7 @@ describe('OrderValidationUtils', () => { artifacts.DevUtils, provider, txDefaults, + artifacts, exchange.address, zrxAssetData, ); diff --git a/contracts/erc1155/CHANGELOG.json b/contracts/erc1155/CHANGELOG.json index fcea4be201..2467578051 100644 --- a/contracts/erc1155/CHANGELOG.json +++ b/contracts/erc1155/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "1.1.11", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "1.1.10", diff --git a/contracts/erc1155/test/erc1155_token.ts b/contracts/erc1155/test/erc1155_token.ts index d948c6c86c..858eb17548 100644 --- a/contracts/erc1155/test/erc1155_token.ts +++ b/contracts/erc1155/test/erc1155_token.ts @@ -60,11 +60,13 @@ describe('ERC1155Token', () => { artifacts.ERC1155Mintable, provider, txDefaults, + artifacts, ); erc1155Receiver = await DummyERC1155ReceiverContract.deployFrom0xArtifactAsync( artifacts.DummyERC1155Receiver, provider, txDefaults, + artifacts, ); receiver = erc1155Receiver.address; // create wrapper & mint erc1155 tokens diff --git a/contracts/erc20/CHANGELOG.json b/contracts/erc20/CHANGELOG.json index 747f40cc48..c6eb414b52 100644 --- a/contracts/erc20/CHANGELOG.json +++ b/contracts/erc20/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "2.2.10", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "2.2.9", diff --git a/contracts/erc20/test/unlimited_allowance_token.ts b/contracts/erc20/test/unlimited_allowance_token.ts index f0b8e53a46..b9d4bd4296 100644 --- a/contracts/erc20/test/unlimited_allowance_token.ts +++ b/contracts/erc20/test/unlimited_allowance_token.ts @@ -37,6 +37,7 @@ describe('UnlimitedAllowanceToken', () => { artifacts.DummyERC20Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, constants.DUMMY_TOKEN_DECIMALS, diff --git a/contracts/erc20/test/weth9.ts b/contracts/erc20/test/weth9.ts index 6a3948e2c3..1fc73e5294 100644 --- a/contracts/erc20/test/weth9.ts +++ b/contracts/erc20/test/weth9.ts @@ -33,10 +33,15 @@ describe('EtherToken', () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); account = accounts[0]; - etherToken = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, { - gasPrice, - ...txDefaults, - }); + etherToken = await WETH9Contract.deployFrom0xArtifactAsync( + artifacts.WETH9, + provider, + { + gasPrice, + ...txDefaults, + }, + artifacts, + ); }); beforeEach(async () => { await blockchainLifecycle.startAsync(); diff --git a/contracts/erc20/test/zrx_token.ts b/contracts/erc20/test/zrx_token.ts index 820b054e6b..a148fc0d85 100644 --- a/contracts/erc20/test/zrx_token.ts +++ b/contracts/erc20/test/zrx_token.ts @@ -26,7 +26,12 @@ describe('ZRXToken', () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); owner = accounts[0]; spender = accounts[1]; - zrxToken = await ZRXTokenContract.deployFrom0xArtifactAsync(artifacts.ZRXToken, provider, txDefaults); + zrxToken = await ZRXTokenContract.deployFrom0xArtifactAsync( + artifacts.ZRXToken, + provider, + txDefaults, + artifacts, + ); MAX_UINT = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS; }); beforeEach(async () => { diff --git a/contracts/erc721/CHANGELOG.json b/contracts/erc721/CHANGELOG.json index fd81866b54..c4b04e2b33 100644 --- a/contracts/erc721/CHANGELOG.json +++ b/contracts/erc721/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "2.1.11", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "2.1.10", diff --git a/contracts/erc721/test/erc721_token.ts b/contracts/erc721/test/erc721_token.ts index 13332cd35c..b3c0ba4141 100644 --- a/contracts/erc721/test/erc721_token.ts +++ b/contracts/erc721/test/erc721_token.ts @@ -48,6 +48,7 @@ describe('ERC721Token', () => { artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); @@ -55,6 +56,7 @@ describe('ERC721Token', () => { artifacts.DummyERC721Receiver, provider, txDefaults, + artifacts, ); logDecoder = new LogDecoder(web3Wrapper, artifacts); await web3Wrapper.awaitTransactionSuccessAsync( @@ -176,6 +178,7 @@ describe('ERC721Token', () => { artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); @@ -190,6 +193,7 @@ describe('ERC721Token', () => { artifacts.InvalidERC721Receiver, provider, txDefaults, + artifacts, ); const from = owner; const to = invalidErc721Receiver.address; @@ -237,6 +241,7 @@ describe('ERC721Token', () => { artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); @@ -251,6 +256,7 @@ describe('ERC721Token', () => { artifacts.InvalidERC721Receiver, provider, txDefaults, + artifacts, ); const from = owner; const to = invalidErc721Receiver.address; diff --git a/contracts/exchange-forwarder/CHANGELOG.json b/contracts/exchange-forwarder/CHANGELOG.json index 18d8efdbe0..0ab43b00e5 100644 --- a/contracts/exchange-forwarder/CHANGELOG.json +++ b/contracts/exchange-forwarder/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.0.8", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "3.0.7", diff --git a/contracts/exchange-forwarder/test/forwarder.ts b/contracts/exchange-forwarder/test/forwarder.ts index 1c518c141b..7f418c0770 100644 --- a/contracts/exchange-forwarder/test/forwarder.ts +++ b/contracts/exchange-forwarder/test/forwarder.ts @@ -32,6 +32,7 @@ const DECIMALS_DEFAULT = 18; const MAX_WETH_FILL_PERCENTAGE = 95; describe(ContractName.Forwarder, () => { + const dependencyArtifacts = { ...artifacts, ...erc20Artifacts, ...exchangeArtifacts }; let makerAddress: string; let owner: string; let takerAddress: string; @@ -88,7 +89,12 @@ describe(ContractName.Forwarder, () => { const erc721Balances = await erc721Wrapper.getBalancesAsync(); erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address]; - wethContract = await WETH9Contract.deployFrom0xArtifactAsync(erc20Artifacts.WETH9, provider, txDefaults); + wethContract = await WETH9Contract.deployFrom0xArtifactAsync( + erc20Artifacts.WETH9, + provider, + txDefaults, + dependencyArtifacts, + ); weth = new DummyERC20TokenContract(wethContract.address, provider); erc20Wrapper.addDummyTokenContract(weth); @@ -98,6 +104,7 @@ describe(ContractName.Forwarder, () => { exchangeArtifacts.Exchange, provider, txDefaults, + dependencyArtifacts, zrxAssetData, ); exchangeWrapper = new ExchangeWrapper(exchangeInstance, provider); @@ -131,6 +138,7 @@ describe(ContractName.Forwarder, () => { artifacts.Forwarder, provider, txDefaults, + dependencyArtifacts, exchangeInstance.address, zrxAssetData, wethAssetData, @@ -169,6 +177,7 @@ describe(ContractName.Forwarder, () => { exchangeArtifacts.Exchange, provider, txDefaults, + dependencyArtifacts, zrxAssetData, ); return expectContractCreationFailedAsync( @@ -176,6 +185,7 @@ describe(ContractName.Forwarder, () => { artifacts.Forwarder, provider, txDefaults, + dependencyArtifacts, exchangeInstance.address, zrxAssetData, wethAssetData, diff --git a/contracts/exchange-libs/CHANGELOG.json b/contracts/exchange-libs/CHANGELOG.json index 12596d4cfc..6b10657a53 100644 --- a/contracts/exchange-libs/CHANGELOG.json +++ b/contracts/exchange-libs/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.0.4", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "3.0.3", diff --git a/contracts/exchange-libs/test/exchange_libs.ts b/contracts/exchange-libs/test/exchange_libs.ts index b613231895..5716b32f56 100644 --- a/contracts/exchange-libs/test/exchange_libs.ts +++ b/contracts/exchange-libs/test/exchange_libs.ts @@ -35,7 +35,7 @@ describe('Exchange libs', () => { before(async () => { const accounts = await web3Wrapper.getAvailableAddressesAsync(); const makerAddress = accounts[0]; - libs = await TestLibsContract.deployFrom0xArtifactAsync(artifacts.TestLibs, provider, txDefaults); + libs = await TestLibsContract.deployFrom0xArtifactAsync(artifacts.TestLibs, provider, txDefaults, artifacts); const defaultOrderParams = { ...constants.STATIC_ORDER_PARAMS, diff --git a/contracts/exchange/CHANGELOG.json b/contracts/exchange/CHANGELOG.json index 24ef8ca438..aec0453f09 100644 --- a/contracts/exchange/CHANGELOG.json +++ b/contracts/exchange/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "2.1.10", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "2.1.9", diff --git a/contracts/exchange/test/core.ts b/contracts/exchange/test/core.ts index ab77c8eb54..f34af68f7b 100644 --- a/contracts/exchange/test/core.ts +++ b/contracts/exchange/test/core.ts @@ -51,6 +51,8 @@ import { TestStaticCallReceiverContract, } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); @@ -117,11 +119,13 @@ describe('Exchange core', () => { proxyArtifacts.MultiAssetProxy, provider, txDefaults, + dependencyArtifacts, ); staticCallProxy = await StaticCallProxyContract.deployFrom0xArtifactAsync( proxyArtifacts.StaticCallProxy, provider, txDefaults, + dependencyArtifacts, ); const numDummyErc20ToDeploy = 3; [erc20TokenA, erc20TokenB, zrxToken] = await erc20Wrapper.deployDummyTokensAsync( @@ -136,17 +140,20 @@ describe('Exchange core', () => { artifacts.Exchange, provider, txDefaults, + dependencyArtifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); maliciousWallet = maliciousValidator = await TestStaticCallReceiverContract.deployFrom0xArtifactAsync( artifacts.TestStaticCallReceiver, provider, txDefaults, + dependencyArtifacts, ); reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync( artifacts.ReentrantERC20Token, provider, txDefaults, + dependencyArtifacts, exchange.address, ); @@ -349,6 +356,7 @@ describe('Exchange core', () => { erc20Artifacts.DummyNoReturnERC20Token, provider, txDefaults, + dependencyArtifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, constants.DUMMY_TOKEN_DECIMALS, @@ -1474,6 +1482,7 @@ describe('Exchange core', () => { proxyArtifacts.TestStaticCallTarget, provider, txDefaults, + dependencyArtifacts, ); }); it('should revert if the staticcall is unsuccessful', async () => { diff --git a/contracts/exchange/test/dispatcher.ts b/contracts/exchange/test/dispatcher.ts index a257559365..18192b7e8c 100644 --- a/contracts/exchange/test/dispatcher.ts +++ b/contracts/exchange/test/dispatcher.ts @@ -29,6 +29,8 @@ import { TestAssetProxyDispatcherContract, } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); @@ -72,6 +74,7 @@ describe('AssetProxyDispatcher', () => { artifacts.TestAssetProxyDispatcher, provider, txDefaults, + dependencyArtifacts, ); await web3Wrapper.awaitTransactionSuccessAsync( await erc20Proxy.addAuthorizedAddress.sendTransactionAsync(assetProxyDispatcher.address, { @@ -134,6 +137,7 @@ describe('AssetProxyDispatcher', () => { proxyArtifacts.ERC20Proxy, provider, txDefaults, + dependencyArtifacts, ); // Register new ERC20 Transfer Proxy contract return expectTransactionFailedAsync( diff --git a/contracts/exchange/test/internal.ts b/contracts/exchange/test/internal.ts index 7a1e12a7a1..23ee456d41 100644 --- a/contracts/exchange/test/internal.ts +++ b/contracts/exchange/test/internal.ts @@ -18,6 +18,8 @@ import * as _ from 'lodash'; import { artifacts, TestExchangeInternalsContract } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; @@ -65,6 +67,7 @@ describe('Exchange core internal functions', () => { artifacts.TestExchangeInternals, provider, txDefaults, + dependencyArtifacts, ); overflowErrorForSendTransaction = new Error( await getRevertReasonOrErrorMessageForSendTransactionAsync(RevertReason.Uint256Overflow), diff --git a/contracts/exchange/test/match_orders.ts b/contracts/exchange/test/match_orders.ts index b749805379..05d7a3985b 100644 --- a/contracts/exchange/test/match_orders.ts +++ b/contracts/exchange/test/match_orders.ts @@ -29,6 +29,8 @@ import { TestExchangeInternalsContract, } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); chaiSetup.configure(); const expect = chai.expect; @@ -118,6 +120,7 @@ describe('matchOrders', () => { artifacts.Exchange, provider, txDefaults, + dependencyArtifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); exchangeWrapper = new ExchangeWrapper(exchange, provider); @@ -141,6 +144,7 @@ describe('matchOrders', () => { artifacts.ReentrantERC20Token, provider, txDefaults, + dependencyArtifacts, exchange.address, ); @@ -175,6 +179,7 @@ describe('matchOrders', () => { artifacts.TestExchangeInternals, provider, txDefaults, + dependencyArtifacts, ); }); beforeEach(async () => { diff --git a/contracts/exchange/test/signature_validator.ts b/contracts/exchange/test/signature_validator.ts index 33510e50c0..df41d2952f 100644 --- a/contracts/exchange/test/signature_validator.ts +++ b/contracts/exchange/test/signature_validator.ts @@ -25,6 +25,8 @@ import { WalletContract, } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; @@ -59,23 +61,27 @@ describe('MixinSignatureValidator', () => { artifacts.TestSignatureValidator, provider, txDefaults, + dependencyArtifacts, ); testWallet = await WalletContract.deployFrom0xArtifactAsync( artifacts.Wallet, provider, txDefaults, + dependencyArtifacts, signerAddress, ); testValidator = await ValidatorContract.deployFrom0xArtifactAsync( artifacts.Validator, provider, txDefaults, + dependencyArtifacts, signerAddress, ); maliciousWallet = maliciousValidator = await TestStaticCallReceiverContract.deployFrom0xArtifactAsync( artifacts.TestStaticCallReceiver, provider, txDefaults, + dependencyArtifacts, ); signatureValidatorLogDecoder = new LogDecoder(web3Wrapper, artifacts); await web3Wrapper.awaitTransactionSuccessAsync( diff --git a/contracts/exchange/test/transactions.ts b/contracts/exchange/test/transactions.ts index 4f8c075794..ee1b92ee74 100644 --- a/contracts/exchange/test/transactions.ts +++ b/contracts/exchange/test/transactions.ts @@ -21,6 +21,8 @@ import * as _ from 'lodash'; import { artifacts, ExchangeContract, ExchangeWrapper, ExchangeWrapperContract, WhitelistContract } from '../src/'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); @@ -87,6 +89,7 @@ describe('Exchange transactions', () => { artifacts.Exchange, provider, txDefaults, + dependencyArtifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); exchangeWrapper = new ExchangeWrapper(exchange, provider); @@ -219,6 +222,7 @@ describe('Exchange transactions', () => { artifacts.ExchangeWrapper, provider, txDefaults, + dependencyArtifacts, exchange.address, ); }); @@ -333,6 +337,7 @@ describe('Exchange transactions', () => { artifacts.Whitelist, provider, txDefaults, + dependencyArtifacts, exchange.address, ); const isApproved = true; diff --git a/contracts/exchange/test/utils/dependency_artifacts.ts b/contracts/exchange/test/utils/dependency_artifacts.ts new file mode 100644 index 0000000000..3e0eb253da --- /dev/null +++ b/contracts/exchange/test/utils/dependency_artifacts.ts @@ -0,0 +1,9 @@ +import { artifacts as erc1155Artifacts } from '@0x/contracts-erc1155'; +import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; +import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; + +export const dependencyArtifacts = { + ...erc20Artifacts, + ...erc721Artifacts, + ...erc1155Artifacts, +}; diff --git a/contracts/exchange/test/utils/exchange_wrapper.ts b/contracts/exchange/test/utils/exchange_wrapper.ts index a06e35a462..97005606b5 100644 --- a/contracts/exchange/test/utils/exchange_wrapper.ts +++ b/contracts/exchange/test/utils/exchange_wrapper.ts @@ -1,37 +1,21 @@ -import { artifacts as erc1155Artifacts } from '@0x/contracts-erc1155'; -import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; -import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; -import { - FillResults, - formatters, - LogDecoder, - OrderInfo, - orderUtils, - Web3ProviderEngine, -} from '@0x/contracts-test-utils'; +import { FillResults, formatters, OrderInfo, orderUtils, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { SignedOrder, SignedZeroExTransaction } from '@0x/types'; import { AbiEncoder, BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import { MethodAbi, TransactionReceiptWithDecodedLogs, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; -import { artifacts, ExchangeContract } from '../../src'; +import { ExchangeContract } from '../../src'; import { AbiDecodedFillOrderData } from './types'; export class ExchangeWrapper { private readonly _exchange: ExchangeContract; + // tslint:disable no-unused-variable private readonly _web3Wrapper: Web3Wrapper; - private readonly _logDecoder: LogDecoder; constructor(exchangeContract: ExchangeContract, provider: Web3ProviderEngine | ZeroExProvider) { this._exchange = exchangeContract; this._web3Wrapper = new Web3Wrapper(provider); - this._logDecoder = new LogDecoder(this._web3Wrapper, { - ...artifacts, - ...erc20Artifacts, - ...erc721Artifacts, - ...erc1155Artifacts, - }); } public async fillOrderAsync( signedOrder: SignedOrder, @@ -39,20 +23,18 @@ export class ExchangeWrapper { opts: { takerAssetFillAmount?: BigNumber } = {}, ): Promise { const params = orderUtils.createFill(signedOrder, opts.takerAssetFillAmount); - const txHash = await this._exchange.fillOrder.sendTransactionAsync( + const txReceipt = await this._exchange.fillOrder.awaitTransactionSuccessAsync( params.order, params.takerAssetFillAmount, params.signature, { from }, ); - const txReceipt = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); return txReceipt; } public async cancelOrderAsync(signedOrder: SignedOrder, from: string): Promise { const params = orderUtils.createCancel(signedOrder); - const txHash = await this._exchange.cancelOrder.sendTransactionAsync(params.order, { from }); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + const txReceipt = await this._exchange.cancelOrder.awaitTransactionSuccessAsync(params.order, { from }); + return txReceipt; } public async fillOrKillOrderAsync( signedOrder: SignedOrder, @@ -60,14 +42,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmount?: BigNumber } = {}, ): Promise { const params = orderUtils.createFill(signedOrder, opts.takerAssetFillAmount); - const txHash = await this._exchange.fillOrKillOrder.sendTransactionAsync( + const txReceipt = await this._exchange.fillOrKillOrder.awaitTransactionSuccessAsync( params.order, params.takerAssetFillAmount, params.signature, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async fillOrderNoThrowAsync( signedOrder: SignedOrder, @@ -75,14 +56,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmount?: BigNumber; gas?: number } = {}, ): Promise { const params = orderUtils.createFill(signedOrder, opts.takerAssetFillAmount); - const txHash = await this._exchange.fillOrderNoThrow.sendTransactionAsync( + const txReceipt = await this._exchange.fillOrderNoThrow.awaitTransactionSuccessAsync( params.order, params.takerAssetFillAmount, params.signature, { from, gas: opts.gas }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async batchFillOrdersAsync( orders: SignedOrder[], @@ -90,14 +70,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmounts?: BigNumber[] } = {}, ): Promise { const params = formatters.createBatchFill(orders, opts.takerAssetFillAmounts); - const txHash = await this._exchange.batchFillOrders.sendTransactionAsync( + const txReceipt = await this._exchange.batchFillOrders.awaitTransactionSuccessAsync( params.orders, params.takerAssetFillAmounts, params.signatures, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async batchFillOrKillOrdersAsync( orders: SignedOrder[], @@ -105,14 +84,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmounts?: BigNumber[] } = {}, ): Promise { const params = formatters.createBatchFill(orders, opts.takerAssetFillAmounts); - const txHash = await this._exchange.batchFillOrKillOrders.sendTransactionAsync( + const txReceipt = await this._exchange.batchFillOrKillOrders.awaitTransactionSuccessAsync( params.orders, params.takerAssetFillAmounts, params.signatures, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async batchFillOrdersNoThrowAsync( orders: SignedOrder[], @@ -120,14 +98,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmounts?: BigNumber[]; gas?: number } = {}, ): Promise { const params = formatters.createBatchFill(orders, opts.takerAssetFillAmounts); - const txHash = await this._exchange.batchFillOrdersNoThrow.sendTransactionAsync( + const txReceipt = await this._exchange.batchFillOrdersNoThrow.awaitTransactionSuccessAsync( params.orders, params.takerAssetFillAmounts, params.signatures, { from, gas: opts.gas }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async marketSellOrdersAsync( orders: SignedOrder[], @@ -135,14 +112,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmount: BigNumber }, ): Promise { const params = formatters.createMarketSellOrders(orders, opts.takerAssetFillAmount); - const txHash = await this._exchange.marketSellOrders.sendTransactionAsync( + const txReceipt = await this._exchange.marketSellOrders.awaitTransactionSuccessAsync( params.orders, params.takerAssetFillAmount, params.signatures, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async marketSellOrdersNoThrowAsync( orders: SignedOrder[], @@ -150,14 +126,13 @@ export class ExchangeWrapper { opts: { takerAssetFillAmount: BigNumber; gas?: number }, ): Promise { const params = formatters.createMarketSellOrders(orders, opts.takerAssetFillAmount); - const txHash = await this._exchange.marketSellOrdersNoThrow.sendTransactionAsync( + const txReceipt = await this._exchange.marketSellOrdersNoThrow.awaitTransactionSuccessAsync( params.orders, params.takerAssetFillAmount, params.signatures, { from, gas: opts.gas }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async marketBuyOrdersAsync( orders: SignedOrder[], @@ -165,14 +140,13 @@ export class ExchangeWrapper { opts: { makerAssetFillAmount: BigNumber }, ): Promise { const params = formatters.createMarketBuyOrders(orders, opts.makerAssetFillAmount); - const txHash = await this._exchange.marketBuyOrders.sendTransactionAsync( + const txReceipt = await this._exchange.marketBuyOrders.awaitTransactionSuccessAsync( params.orders, params.makerAssetFillAmount, params.signatures, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async marketBuyOrdersNoThrowAsync( orders: SignedOrder[], @@ -180,50 +154,47 @@ export class ExchangeWrapper { opts: { makerAssetFillAmount: BigNumber; gas?: number }, ): Promise { const params = formatters.createMarketBuyOrders(orders, opts.makerAssetFillAmount); - const txHash = await this._exchange.marketBuyOrdersNoThrow.sendTransactionAsync( + const txReceipt = await this._exchange.marketBuyOrdersNoThrow.awaitTransactionSuccessAsync( params.orders, params.makerAssetFillAmount, params.signatures, { from, gas: opts.gas }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async batchCancelOrdersAsync( orders: SignedOrder[], from: string, ): Promise { const params = formatters.createBatchCancel(orders); - const txHash = await this._exchange.batchCancelOrders.sendTransactionAsync(params.orders, { from }); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + const txReceipt = await this._exchange.batchCancelOrders.awaitTransactionSuccessAsync(params.orders, { from }); + return txReceipt; } public async cancelOrdersUpToAsync(salt: BigNumber, from: string): Promise { - const txHash = await this._exchange.cancelOrdersUpTo.sendTransactionAsync(salt, { from }); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + const txReceipt = await this._exchange.cancelOrdersUpTo.awaitTransactionSuccessAsync(salt, { from }); + return txReceipt; } public async registerAssetProxyAsync( assetProxyAddress: string, from: string, ): Promise { - const txHash = await this._exchange.registerAssetProxy.sendTransactionAsync(assetProxyAddress, { from }); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + const txReceipt = await this._exchange.registerAssetProxy.awaitTransactionSuccessAsync(assetProxyAddress, { + from, + }); + return txReceipt; } public async executeTransactionAsync( signedTx: SignedZeroExTransaction, from: string, ): Promise { - const txHash = await this._exchange.executeTransaction.sendTransactionAsync( + const txReceipt = await this._exchange.executeTransaction.awaitTransactionSuccessAsync( signedTx.salt, signedTx.signerAddress, signedTx.data, signedTx.signature, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async getTakerAssetFilledAmountAsync(orderHashHex: string): Promise { const filledAmount = await this._exchange.filled.callAsync(orderHashHex); @@ -251,15 +222,14 @@ export class ExchangeWrapper { from: string, ): Promise { const params = orderUtils.createMatchOrders(signedOrderLeft, signedOrderRight); - const txHash = await this._exchange.matchOrders.sendTransactionAsync( + const txReceipt = await this._exchange.matchOrders.awaitTransactionSuccessAsync( params.left, params.right, params.leftSignature, params.rightSignature, { from }, ); - const tx = await this._logDecoder.getTxWithDecodedLogsAsync(txHash); - return tx; + return txReceipt; } public async getFillOrderResultsAsync( signedOrder: SignedOrder, diff --git a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts index a15b27e12b..85b411a179 100644 --- a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts +++ b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts @@ -37,6 +37,7 @@ import 'make-promises-safe'; import { artifacts, ExchangeContract, ExchangeFillEventArgs } from '../../src'; import { AssetWrapper } from './asset_wrapper'; +import { dependencyArtifacts } from './dependency_artifacts'; import { ExchangeWrapper } from './exchange_wrapper'; import { OrderFactoryFromScenario } from './order_factory_from_scenario'; import { SimpleAssetBalanceAndProxyAllowanceFetcher } from './simple_asset_balance_and_proxy_allowance_fetcher'; @@ -101,6 +102,7 @@ export async function fillOrderCombinatorialUtilsFactoryAsync( artifacts.Exchange, provider, txDefaults, + dependencyArtifacts, zrxAssetData, ); const exchangeWrapper = new ExchangeWrapper(exchangeContract, provider); @@ -135,6 +137,7 @@ export async function fillOrderCombinatorialUtilsFactoryAsync( libsArtifacts.TestLibs, provider, txDefaults, + dependencyArtifacts, ); const fillOrderCombinatorialUtils = new FillOrderCombinatorialUtils( diff --git a/contracts/exchange/test/wrapper.ts b/contracts/exchange/test/wrapper.ts index 573591b1b5..ab2af0cc76 100644 --- a/contracts/exchange/test/wrapper.ts +++ b/contracts/exchange/test/wrapper.ts @@ -24,6 +24,8 @@ import * as _ from 'lodash'; import { artifacts, ExchangeContract, ExchangeWrapper, ReentrantERC20TokenContract } from '../src'; +import { dependencyArtifacts } from './utils/dependency_artifacts'; + chaiSetup.configure(); const expect = chai.expect; const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); @@ -87,6 +89,7 @@ describe('Exchange wrappers', () => { artifacts.Exchange, provider, txDefaults, + dependencyArtifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); exchangeWrapper = new ExchangeWrapper(exchange, provider); @@ -110,6 +113,7 @@ describe('Exchange wrappers', () => { artifacts.ReentrantERC20Token, provider, txDefaults, + dependencyArtifacts, exchange.address, ); diff --git a/contracts/extensions/CHANGELOG.json b/contracts/extensions/CHANGELOG.json index 5f75e76dd4..88d1b84925 100644 --- a/contracts/extensions/CHANGELOG.json +++ b/contracts/extensions/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "4.0.4", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "4.0.3", diff --git a/contracts/extensions/test/balance_threshold_filter.ts b/contracts/extensions/test/balance_threshold_filter.ts index 530eefd51b..f364a6d2d0 100644 --- a/contracts/extensions/test/balance_threshold_filter.ts +++ b/contracts/extensions/test/balance_threshold_filter.ts @@ -130,6 +130,7 @@ describe(ContractName.BalanceThresholdFilter, () => { artifacts.Exchange, provider, txDefaults, + artifacts, zrxAssetData, ); exchangeWrapper = new ExchangeWrapper(exchangeInstance, provider); @@ -148,6 +149,7 @@ describe(ContractName.BalanceThresholdFilter, () => { artifacts.BalanceThresholdFilter, provider, txDefaults, + artifacts, exchangeInstance.address, erc721BalanceThresholdAsset.address, erc721alanceThreshold, @@ -157,6 +159,7 @@ describe(ContractName.BalanceThresholdFilter, () => { artifacts.BalanceThresholdFilter, provider, txDefaults, + artifacts, exchangeInstance.address, erc20BalanceThresholdAsset.address, erc20BalanceThreshold, diff --git a/contracts/extensions/test/dutch_auction.ts b/contracts/extensions/test/dutch_auction.ts index 639f61999d..01c8e4a25a 100644 --- a/contracts/extensions/test/dutch_auction.ts +++ b/contracts/extensions/test/dutch_auction.ts @@ -82,7 +82,7 @@ describe(ContractName.DutchAuction, () => { const erc721Balances = await erc721Wrapper.getBalancesAsync(); erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address]; - wethContract = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults); + wethContract = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults, artifacts); erc20Wrapper.addDummyTokenContract(wethContract as any); const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); @@ -90,6 +90,7 @@ describe(ContractName.DutchAuction, () => { artifacts.Exchange, provider, txDefaults, + artifacts, zrxAssetData, ); const exchangeWrapper = new ExchangeWrapper(exchangeInstance, provider); @@ -107,6 +108,7 @@ describe(ContractName.DutchAuction, () => { artifacts.DutchAuction, provider, txDefaults, + artifacts, exchangeInstance.address, ); dutchAuctionContract = new DutchAuctionContract(dutchAuctionInstance.address, provider); diff --git a/contracts/extensions/test/order_matcher.ts b/contracts/extensions/test/order_matcher.ts index 99ec0d06d9..6c6c368c07 100644 --- a/contracts/extensions/test/order_matcher.ts +++ b/contracts/extensions/test/order_matcher.ts @@ -103,12 +103,14 @@ describe('OrderMatcher', () => { proxyArtifacts.ERC721Proxy, provider, txDefaults, + artifacts, ); // Depoy exchange exchange = await ExchangeContract.deployFrom0xArtifactAsync( artifacts.Exchange, provider, txDefaults, + artifacts, assetDataUtils.encodeERC20AssetData(zrxToken.address), ); exchangeWrapper = new ExchangeWrapper(exchange, provider); @@ -126,6 +128,7 @@ describe('OrderMatcher', () => { artifacts.OrderMatcher, provider, txDefaults, + artifacts, exchange.address, ); // Set default addresses @@ -198,6 +201,7 @@ describe('OrderMatcher', () => { artifacts.Exchange, provider, txDefaults, + artifacts, constants.NULL_BYTES, ); return expectContractCreationFailedAsync( @@ -205,6 +209,7 @@ describe('OrderMatcher', () => { artifacts.OrderMatcher, provider, txDefaults, + artifacts, exchangeInstance.address, ) as any) as sendTransactionResult, RevertReason.UnregisteredAssetProxy, @@ -727,6 +732,7 @@ describe('OrderMatcher', () => { erc721Artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); @@ -772,6 +778,7 @@ describe('OrderMatcher', () => { erc721Artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); @@ -789,6 +796,7 @@ describe('OrderMatcher', () => { erc721Artifacts.DummyERC721Token, provider, txDefaults, + artifacts, constants.DUMMY_TOKEN_NAME, constants.DUMMY_TOKEN_SYMBOL, ); diff --git a/contracts/multisig/CHANGELOG.json b/contracts/multisig/CHANGELOG.json index 813c863169..f0b0252ff7 100644 --- a/contracts/multisig/CHANGELOG.json +++ b/contracts/multisig/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "3.1.10", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "3.1.9", diff --git a/contracts/multisig/test/asset_proxy_owner.ts b/contracts/multisig/test/asset_proxy_owner.ts index 62081554be..ff9f6b5c50 100644 --- a/contracts/multisig/test/asset_proxy_owner.ts +++ b/contracts/multisig/test/asset_proxy_owner.ts @@ -61,17 +61,20 @@ describe('AssetProxyOwner', () => { proxyArtifacts.MixinAuthorizable, provider, txDefaults, + artifacts, ); erc721Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync( proxyArtifacts.MixinAuthorizable, provider, txDefaults, + artifacts, ); const defaultAssetProxyContractAddresses: string[] = []; testAssetProxyOwner = await TestAssetProxyOwnerContract.deployFrom0xArtifactAsync( artifacts.TestAssetProxyOwner, provider, txDefaults, + artifacts, owners, defaultAssetProxyContractAddresses, REQUIRED_APPROVALS, @@ -105,6 +108,7 @@ describe('AssetProxyOwner', () => { artifacts.AssetProxyOwner, provider, txDefaults, + artifacts, owners, assetProxyContractAddresses, REQUIRED_APPROVALS, @@ -122,6 +126,7 @@ describe('AssetProxyOwner', () => { artifacts.AssetProxyOwner, provider, txDefaults, + artifacts, owners, assetProxyContractAddresses, REQUIRED_APPROVALS, diff --git a/contracts/multisig/test/multi_sig_with_time_lock.ts b/contracts/multisig/test/multi_sig_with_time_lock.ts index 9596271514..6208f23a53 100644 --- a/contracts/multisig/test/multi_sig_with_time_lock.ts +++ b/contracts/multisig/test/multi_sig_with_time_lock.ts @@ -66,6 +66,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.MultiSigWalletWithTimeLock, provider, txDefaults, + artifacts, owners, REQUIRED_APPROVALS, secondsTimeLocked, @@ -81,6 +82,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.MultiSigWalletWithTimeLock, provider, txDefaults, + artifacts, owners, REQUIRED_APPROVALS, secondsTimeLocked, @@ -135,6 +137,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.MultiSigWalletWithTimeLock, provider, txDefaults, + artifacts, owners, REQUIRED_APPROVALS, secondsTimeLocked, @@ -198,6 +201,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.TestRejectEther, provider, txDefaults, + artifacts, ); const data = constants.NULL_BYTES; const value = new BigNumber(10); @@ -234,6 +238,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.MultiSigWalletWithTimeLock, provider, txDefaults, + artifacts, owners, REQUIRED_APPROVALS, secondsTimeLocked, @@ -308,6 +313,7 @@ describe('MultiSigWalletWithTimeLock', () => { artifacts.MultiSigWalletWithTimeLock, provider, txDefaults, + artifacts, owners, REQUIRED_APPROVALS, SECONDS_TIME_LOCKED, diff --git a/contracts/utils/CHANGELOG.json b/contracts/utils/CHANGELOG.json index a91f202bc3..f3b4c95b34 100644 --- a/contracts/utils/CHANGELOG.json +++ b/contracts/utils/CHANGELOG.json @@ -1,4 +1,17 @@ [ + { + "version": "3.2.0", + "changes": [ + { + "note": "Updated calls to .deployFrom0xArtifactAsync to include artifact dependencies.", + "pr": 1995 + }, + { + "note": "Added tests for decoding log arguments when artifact dependencies are included/excluded.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "3.1.10", diff --git a/contracts/utils/compiler.json b/contracts/utils/compiler.json index d132a71268..01ab211056 100644 --- a/contracts/utils/compiler.json +++ b/contracts/utils/compiler.json @@ -32,6 +32,8 @@ "src/interfaces/IOwnable.sol", "test/TestConstants.sol", "test/TestLibAddressArray.sol", - "test/TestLibBytes.sol" + "test/TestLibBytes.sol", + "test/TestLogDecoding.sol", + "test/TestLogDecodingDownstream.sol" ] } diff --git a/contracts/utils/contracts/test/TestLogDecoding.sol b/contracts/utils/contracts/test/TestLogDecoding.sol new file mode 100644 index 0000000000..e692d8b75f --- /dev/null +++ b/contracts/utils/contracts/test/TestLogDecoding.sol @@ -0,0 +1,55 @@ +/* + + Copyright 2018 ZeroEx Intl. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +pragma solidity ^0.5.5; + +import "./TestLogDecodingDownstream.sol"; + + +contract TestLogDecoding { + + /// @dev arbitrary event; fields to not matter. + event TestEvent( + uint256 foo, + bytes bar, + string car + ); + + /// @dev Emits a local event + function emitEvent() + public + { + emit TestEvent(256, hex'1234', "4321"); + } + + /// @dev Emits an event in a downstream contract + function emitEventDownstream() + public + { + TestLogDecodingDownstream testLogDecodingDownstream = new TestLogDecodingDownstream(); + ITestLogDecodingDownstream(testLogDecodingDownstream).emitEvent(); + } + + /// @dev Emits a local event and a downstream event + function emitEventsLocalAndDownstream() + public + { + emitEvent(); + emitEventDownstream(); + } +} \ No newline at end of file diff --git a/contracts/utils/contracts/test/TestLogDecodingDownstream.sol b/contracts/utils/contracts/test/TestLogDecodingDownstream.sol new file mode 100644 index 0000000000..adb2ffe453 --- /dev/null +++ b/contracts/utils/contracts/test/TestLogDecodingDownstream.sol @@ -0,0 +1,48 @@ +/* + + Copyright 2018 ZeroEx Intl. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +pragma solidity ^0.5.5; + + +contract ITestLogDecodingDownstream { + + /// @dev Emits a local event + function emitEvent() external; +} + + +contract TestLogDecodingDownstream is + ITestLogDecodingDownstream +{ + + /// @dev event with fields different than those in `TestLogDecoding.TestEvent` + /// Note: do not include this in the interface + /// For testing, we want to emit an event that is + /// not known by the calling contract. + event TestEvent2( + uint256 lorem, + string ipsum + ); + + /// @dev Emits a local event + function emitEvent() + external + { + emit TestEvent2(256, "4321"); + } +} \ No newline at end of file diff --git a/contracts/utils/package.json b/contracts/utils/package.json index 331a0c14e9..0b11673348 100644 --- a/contracts/utils/package.json +++ b/contracts/utils/package.json @@ -34,7 +34,7 @@ "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol" }, "config": { - "abis": "./generated-artifacts/@(Address|IOwnable|LibBytes|Ownable|ReentrancyGuard|SafeMath|TestConstants|TestLibAddressArray|TestLibBytes).json", + "abis": "./generated-artifacts/@(Address|IOwnable|LibBytes|Ownable|ReentrancyGuard|SafeMath|TestConstants|TestLibAddressArray|TestLibBytes|TestLogDecoding|TestLogDecodingDownstream).json", "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { diff --git a/contracts/utils/src/artifacts.ts b/contracts/utils/src/artifacts.ts index 04ebb5b525..e2b2104257 100644 --- a/contracts/utils/src/artifacts.ts +++ b/contracts/utils/src/artifacts.ts @@ -14,6 +14,8 @@ import * as SafeMath from '../generated-artifacts/SafeMath.json'; import * as TestConstants from '../generated-artifacts/TestConstants.json'; import * as TestLibAddressArray from '../generated-artifacts/TestLibAddressArray.json'; import * as TestLibBytes from '../generated-artifacts/TestLibBytes.json'; +import * as TestLogDecoding from '../generated-artifacts/TestLogDecoding.json'; +import * as TestLogDecodingDownstream from '../generated-artifacts/TestLogDecodingDownstream.json'; export const artifacts = { Address: Address as ContractArtifact, LibBytes: LibBytes as ContractArtifact, @@ -22,6 +24,8 @@ export const artifacts = { SafeMath: SafeMath as ContractArtifact, IOwnable: IOwnable as ContractArtifact, TestConstants: TestConstants as ContractArtifact, - TestLibBytes: TestLibBytes as ContractArtifact, TestLibAddressArray: TestLibAddressArray as ContractArtifact, + TestLibBytes: TestLibBytes as ContractArtifact, + TestLogDecoding: TestLogDecoding as ContractArtifact, + TestLogDecodingDownstream: TestLogDecodingDownstream as ContractArtifact, }; diff --git a/contracts/utils/src/wrappers.ts b/contracts/utils/src/wrappers.ts index 91a90bec6c..be616b060f 100644 --- a/contracts/utils/src/wrappers.ts +++ b/contracts/utils/src/wrappers.ts @@ -12,3 +12,5 @@ export * from '../generated-wrappers/safe_math'; export * from '../generated-wrappers/test_constants'; export * from '../generated-wrappers/test_lib_address_array'; export * from '../generated-wrappers/test_lib_bytes'; +export * from '../generated-wrappers/test_log_decoding'; +export * from '../generated-wrappers/test_log_decoding_downstream'; diff --git a/contracts/utils/test/lib_address_array.ts b/contracts/utils/test/lib_address_array.ts index bb0d441a5c..4b96262a63 100644 --- a/contracts/utils/test/lib_address_array.ts +++ b/contracts/utils/test/lib_address_array.ts @@ -28,6 +28,7 @@ describe('LibAddressArray', () => { artifacts.TestLibAddressArray, provider, txDefaults, + artifacts, ); }); after(async () => { diff --git a/contracts/utils/test/lib_bytes.ts b/contracts/utils/test/lib_bytes.ts index cedcb9d80a..69aa650803 100644 --- a/contracts/utils/test/lib_bytes.ts +++ b/contracts/utils/test/lib_bytes.ts @@ -68,7 +68,12 @@ describe('LibBytes', () => { testAddress = accounts[1]; testAddressB = accounts[2]; // Deploy LibBytes - libBytes = await TestLibBytesContract.deployFrom0xArtifactAsync(artifacts.TestLibBytes, provider, txDefaults); + libBytes = await TestLibBytesContract.deployFrom0xArtifactAsync( + artifacts.TestLibBytes, + provider, + txDefaults, + artifacts, + ); // Verify lengths of test data const byteArrayShorterThan32BytesLength = ethUtil.toBuffer(byteArrayShorterThan32Bytes).byteLength; expect(byteArrayShorterThan32BytesLength).to.be.lessThan(32); diff --git a/contracts/utils/test/libs.ts b/contracts/utils/test/libs.ts index 77dc6e2ba5..6d50ca8fac 100644 --- a/contracts/utils/test/libs.ts +++ b/contracts/utils/test/libs.ts @@ -24,6 +24,7 @@ describe('Libs', () => { artifacts.TestConstants, provider, txDefaults, + artifacts, ); const isValid = await testConstants.assertValidZrxAssetData.callAsync(); expect(isValid).to.be.equal(true); diff --git a/contracts/utils/test/log_decoding.ts b/contracts/utils/test/log_decoding.ts new file mode 100644 index 0000000000..13d9d14971 --- /dev/null +++ b/contracts/utils/test/log_decoding.ts @@ -0,0 +1,95 @@ +import { chaiSetup, provider, txDefaults, web3Wrapper } from '@0x/contracts-test-utils'; +import { BlockchainLifecycle } from '@0x/dev-utils'; +import { BigNumber } from '@0x/utils'; +import * as chai from 'chai'; +import { DecodedLogArgs, LogWithDecodedArgs } from 'ethereum-types'; + +import { artifacts, TestLogDecodingContract } from '../src'; + +chaiSetup.configure(); +const expect = chai.expect; + +const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); + +describe('TestLogDecoding', () => { + let testLogDecodingWithDependencies: TestLogDecodingContract; + let testLogDecodingDeployedWithoutDependencies: TestLogDecodingContract; + const expectedEvent = { + foo: new BigNumber(256), + bar: '0x1234', + car: '4321', + }; + const expectedDownstreamEvent = { + lorem: new BigNumber(256), + ipsum: '4321', + }; + const emptyDependencyList = {}; + + before(async () => { + testLogDecodingDeployedWithoutDependencies = await TestLogDecodingContract.deployFrom0xArtifactAsync( + artifacts.TestLogDecoding, + provider, + txDefaults, + emptyDependencyList, + ); + testLogDecodingWithDependencies = await TestLogDecodingContract.deployFrom0xArtifactAsync( + artifacts.TestLogDecoding, + provider, + txDefaults, + artifacts, + ); + }); + beforeEach(async () => { + await blockchainLifecycle.startAsync(); + }); + afterEach(async () => { + await blockchainLifecycle.revertAsync(); + }); + + describe('Decoding Log Arguments', () => { + it('should decode locally emitted event args when no dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingDeployedWithoutDependencies.emitEvent.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(1); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.deep.equal(expectedEvent); + }); + it('should not decode event args when no dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingDeployedWithoutDependencies.emitEventDownstream.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(1); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.undefined(); + }); + it('should decode args for local but not downstream event when no dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingDeployedWithoutDependencies.emitEventsLocalAndDownstream.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(2); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.deep.equal(expectedEvent); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[1] as LogWithDecodedArgs).args).to.be.undefined(); + }); + it('should decode locally emitted event args when dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingWithDependencies.emitEvent.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(1); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.deep.equal(expectedEvent); + }); + it('should decode downstream event args when dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingWithDependencies.emitEventDownstream.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(1); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.deep.equal( + expectedDownstreamEvent, + ); + }); + it('should decode args for both local and downstream events when dependencies are passed into wrapper', async () => { + const txReceipt = await testLogDecodingWithDependencies.emitEventsLocalAndDownstream.awaitTransactionSuccessAsync(); + expect(txReceipt.logs.length).to.be.equal(2); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[0] as LogWithDecodedArgs).args).to.be.deep.equal(expectedEvent); + // tslint:disable no-unnecessary-type-assertion + expect((txReceipt.logs[1] as LogWithDecodedArgs).args).to.be.deep.equal( + expectedDownstreamEvent, + ); + }); + }); +}); diff --git a/contracts/utils/tsconfig.json b/contracts/utils/tsconfig.json index dce54b101e..bb3f9566be 100644 --- a/contracts/utils/tsconfig.json +++ b/contracts/utils/tsconfig.json @@ -11,7 +11,9 @@ "generated-artifacts/SafeMath.json", "generated-artifacts/TestConstants.json", "generated-artifacts/TestLibAddressArray.json", - "generated-artifacts/TestLibBytes.json" + "generated-artifacts/TestLibBytes.json", + "generated-artifacts/TestLogDecoding.json", + "generated-artifacts/TestLogDecodingDownstream.json" ], "exclude": ["./deploy/solc/solc_bin"] } diff --git a/packages/abi-gen-templates/CHANGELOG.json b/packages/abi-gen-templates/CHANGELOG.json index 42f193d1ea..05a8b3878e 100644 --- a/packages/abi-gen-templates/CHANGELOG.json +++ b/packages/abi-gen-templates/CHANGELOG.json @@ -1,4 +1,17 @@ [ + { + "version": "2.4.0", + "changes": [ + { + "note": "Updated interface to `deployFrom0xArtifactAsync` to include log decode dependencies.", + "pr": 1995 + }, + { + "note": "Updated interface to `deployAsync` to include log decode dependencies.", + "pr": 1995 + } + ] + }, { "version": "2.3.0", "changes": [ diff --git a/packages/abi-gen-templates/contract.handlebars b/packages/abi-gen-templates/contract.handlebars index 78c5e47d89..f30bf50e58 100644 --- a/packages/abi-gen-templates/contract.handlebars +++ b/packages/abi-gen-templates/contract.handlebars @@ -63,6 +63,7 @@ export class {{contractName}}Contract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: (ContractArtifact | SimpleContractArtifact) }, {{> typed_params inputs=ctor.inputs}} ): Promise<{{contractName}}Contract> { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -76,13 +77,18 @@ export class {{contractName}}Contract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return {{contractName}}Contract.deployAsync(bytecode, abi, provider, txDefaults, {{> params inputs=ctor.inputs}}); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return {{contractName}}Contract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly, {{> params inputs=ctor.inputs}}); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, {{> typed_params inputs=ctor.inputs}} ): Promise<{{contractName}}Contract> { assert.isHexString('bytecode', bytecode); @@ -111,7 +117,7 @@ export class {{contractName}}Contract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`{{contractName}} successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new {{contractName}}Contract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new {{contractName}}Contract(txReceipt.contractAddress as string, provider, txDefaults, logDecodeDependencies); contractInstance.constructorArgs = [{{> params inputs=ctor.inputs}}]; return contractInstance; } @@ -213,8 +219,8 @@ export class {{contractName}}Contract extends BaseContract { ); return logs; }{{/if}} - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('{{contractName}}', {{contractName}}Contract.ABI(), address, supportedProvider, txDefaults); + constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial, logDecodeDependencies?: { [contractName: string]: ContractAbi }) { + super('{{contractName}}', {{contractName}}Contract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']);{{#if events}} this._subscriptionManager = new SubscriptionManager<{{contractName}}EventArgs, {{contractName}}Events>( {{contractName}}Contract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts index 45f96008b2..a142985a13 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts @@ -2096,6 +2096,7 @@ export class AssetProxyOwnerContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _owners: string[], _assetProxyContracts: string[], _required: BigNumber, @@ -2112,11 +2113,16 @@ export class AssetProxyOwnerContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } return AssetProxyOwnerContract.deployAsync( bytecode, abi, provider, txDefaults, + logDecodeDependenciesAbiOnly, _owners, _assetProxyContracts, _required, @@ -2128,6 +2134,7 @@ export class AssetProxyOwnerContract extends BaseContract { abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _owners: string[], _assetProxyContracts: string[], _required: BigNumber, @@ -2159,7 +2166,12 @@ export class AssetProxyOwnerContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`AssetProxyOwner successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new AssetProxyOwnerContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new AssetProxyOwnerContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_owners, _assetProxyContracts, _required, _secondsTimeLocked]; return contractInstance; } @@ -2938,8 +2950,20 @@ export class AssetProxyOwnerContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('AssetProxyOwner', AssetProxyOwnerContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'AssetProxyOwner', + AssetProxyOwnerContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( AssetProxyOwnerContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/coordinator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/coordinator.ts index e75aec7ae0..a3f2b2fa94 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/coordinator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/coordinator.ts @@ -615,6 +615,7 @@ export class CoordinatorContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _exchange: string, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -628,13 +629,25 @@ export class CoordinatorContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return CoordinatorContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return CoordinatorContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + _exchange, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _exchange: string, ): Promise { assert.isHexString('bytecode', bytecode); @@ -663,7 +676,12 @@ export class CoordinatorContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`Coordinator successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new CoordinatorContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new CoordinatorContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_exchange]; return contractInstance; } @@ -966,8 +984,13 @@ export class CoordinatorContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('Coordinator', CoordinatorContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('Coordinator', CoordinatorContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/coordinator_registry.ts b/packages/abi-gen-wrappers/src/generated-wrappers/coordinator_registry.ts index 427ea64aed..ce84a8659c 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/coordinator_registry.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/coordinator_registry.ts @@ -205,6 +205,7 @@ export class CoordinatorRegistryContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -217,13 +218,24 @@ export class CoordinatorRegistryContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return CoordinatorRegistryContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return CoordinatorRegistryContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -251,6 +263,7 @@ export class CoordinatorRegistryContract extends BaseContract { txReceipt.contractAddress as string, provider, txDefaults, + logDecodeDependencies, ); contractInstance.constructorArgs = []; return contractInstance; @@ -390,8 +403,20 @@ export class CoordinatorRegistryContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('CoordinatorRegistry', CoordinatorRegistryContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'CoordinatorRegistry', + CoordinatorRegistryContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( CoordinatorRegistryContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts index 7d32562817..ed57e40b1c 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts @@ -1115,6 +1115,7 @@ export class DummyERC20TokenContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _name: string, _symbol: string, _decimals: BigNumber, @@ -1131,11 +1132,16 @@ export class DummyERC20TokenContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } return DummyERC20TokenContract.deployAsync( bytecode, abi, provider, txDefaults, + logDecodeDependenciesAbiOnly, _name, _symbol, _decimals, @@ -1147,6 +1153,7 @@ export class DummyERC20TokenContract extends BaseContract { abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _name: string, _symbol: string, _decimals: BigNumber, @@ -1178,7 +1185,12 @@ export class DummyERC20TokenContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`DummyERC20Token successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new DummyERC20TokenContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new DummyERC20TokenContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_name, _symbol, _decimals, _totalSupply]; return contractInstance; } @@ -1574,8 +1586,20 @@ export class DummyERC20TokenContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('DummyERC20Token', DummyERC20TokenContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'DummyERC20Token', + DummyERC20TokenContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( DummyERC20TokenContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts index ad2c8a15b5..3e07f54492 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts @@ -1445,6 +1445,7 @@ export class DummyERC721TokenContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _name: string, _symbol: string, ): Promise { @@ -1459,13 +1460,26 @@ export class DummyERC721TokenContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return DummyERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults, _name, _symbol); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return DummyERC721TokenContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + _name, + _symbol, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _name: string, _symbol: string, ): Promise { @@ -1499,6 +1513,7 @@ export class DummyERC721TokenContract extends BaseContract { txReceipt.contractAddress as string, provider, txDefaults, + logDecodeDependencies, ); contractInstance.constructorArgs = [_name, _symbol]; return contractInstance; @@ -1943,8 +1958,20 @@ export class DummyERC721TokenContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('DummyERC721Token', DummyERC721TokenContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'DummyERC721Token', + DummyERC721TokenContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( DummyERC721TokenContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts index bb8ef3ad4b..0820789ee1 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts @@ -539,6 +539,7 @@ export class DutchAuctionContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _exchange: string, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -552,13 +553,25 @@ export class DutchAuctionContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return DutchAuctionContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return DutchAuctionContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + _exchange, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _exchange: string, ): Promise { assert.isHexString('bytecode', bytecode); @@ -587,7 +600,12 @@ export class DutchAuctionContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`DutchAuction successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new DutchAuctionContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new DutchAuctionContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_exchange]; return contractInstance; } @@ -888,8 +906,20 @@ export class DutchAuctionContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('DutchAuction', DutchAuctionContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'DutchAuction', + DutchAuctionContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts index e9dbd86a3a..9aaa9a7dbe 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts @@ -704,6 +704,7 @@ export class ERC20ProxyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -716,13 +717,18 @@ export class ERC20ProxyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ERC20ProxyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ERC20ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -746,7 +752,12 @@ export class ERC20ProxyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ERC20Proxy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ERC20ProxyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ERC20ProxyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1010,8 +1021,13 @@ export class ERC20ProxyContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('ERC20Proxy', ERC20ProxyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('ERC20Proxy', ERC20ProxyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ERC20ProxyContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts index d8c303fef3..bb2f97bf46 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts @@ -592,6 +592,7 @@ export class ERC20TokenContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -604,13 +605,18 @@ export class ERC20TokenContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ERC20TokenContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ERC20TokenContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -634,7 +640,12 @@ export class ERC20TokenContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ERC20Token successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ERC20TokenContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ERC20TokenContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -890,8 +901,13 @@ export class ERC20TokenContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('ERC20Token', ERC20TokenContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('ERC20Token', ERC20TokenContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ERC20TokenContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts index d9f18a654e..28b991cb80 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts @@ -704,6 +704,7 @@ export class ERC721ProxyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -716,13 +717,18 @@ export class ERC721ProxyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ERC721ProxyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ERC721ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -746,7 +752,12 @@ export class ERC721ProxyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ERC721Proxy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ERC721ProxyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ERC721ProxyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1010,8 +1021,13 @@ export class ERC721ProxyContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('ERC721Proxy', ERC721ProxyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('ERC721Proxy', ERC721ProxyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ERC721ProxyContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts index 00f849aca6..b1d5938cca 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts @@ -985,6 +985,7 @@ export class ERC721TokenContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -997,13 +998,18 @@ export class ERC721TokenContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -1027,7 +1033,12 @@ export class ERC721TokenContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ERC721Token successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ERC721TokenContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ERC721TokenContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1363,8 +1374,13 @@ export class ERC721TokenContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('ERC721Token', ERC721TokenContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('ERC721Token', ERC721TokenContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ERC721TokenContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/eth_balance_checker.ts b/packages/abi-gen-wrappers/src/generated-wrappers/eth_balance_checker.ts index 786f61b3a5..f0715bcea0 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/eth_balance_checker.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/eth_balance_checker.ts @@ -75,6 +75,7 @@ export class EthBalanceCheckerContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -87,13 +88,18 @@ export class EthBalanceCheckerContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return EthBalanceCheckerContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return EthBalanceCheckerContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -121,6 +127,7 @@ export class EthBalanceCheckerContract extends BaseContract { txReceipt.contractAddress as string, provider, txDefaults, + logDecodeDependencies, ); contractInstance.constructorArgs = []; return contractInstance; @@ -153,8 +160,20 @@ export class EthBalanceCheckerContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('EthBalanceChecker', EthBalanceCheckerContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'EthBalanceChecker', + EthBalanceCheckerContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts index 0cdd34e277..532f3b5fd3 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts @@ -4568,6 +4568,7 @@ export class ExchangeContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _zrxAssetData: string, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -4581,13 +4582,25 @@ export class ExchangeContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ExchangeContract.deployAsync(bytecode, abi, provider, txDefaults, _zrxAssetData); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ExchangeContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + _zrxAssetData, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _zrxAssetData: string, ): Promise { assert.isHexString('bytecode', bytecode); @@ -4616,7 +4629,12 @@ export class ExchangeContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`Exchange successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ExchangeContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ExchangeContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_zrxAssetData]; return contractInstance; } @@ -6668,8 +6686,13 @@ export class ExchangeContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('Exchange', ExchangeContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('Exchange', ExchangeContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ExchangeContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts index d183a2261c..868a0f198a 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts @@ -1041,6 +1041,7 @@ export class ForwarderContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _exchange: string, _zrxAssetData: string, _wethAssetData: string, @@ -1056,11 +1057,16 @@ export class ForwarderContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } return ForwarderContract.deployAsync( bytecode, abi, provider, txDefaults, + logDecodeDependenciesAbiOnly, _exchange, _zrxAssetData, _wethAssetData, @@ -1071,6 +1077,7 @@ export class ForwarderContract extends BaseContract { abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _exchange: string, _zrxAssetData: string, _wethAssetData: string, @@ -1101,7 +1108,12 @@ export class ForwarderContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`Forwarder successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ForwarderContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ForwarderContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_exchange, _zrxAssetData, _wethAssetData]; return contractInstance; } @@ -1549,8 +1561,13 @@ export class ForwarderContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('Forwarder', ForwarderContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('Forwarder', ForwarderContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_asset_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_asset_proxy.ts index 08753c6a21..9ce4a6ead1 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_asset_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_asset_proxy.ts @@ -709,6 +709,7 @@ export class IAssetProxyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -721,13 +722,18 @@ export class IAssetProxyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return IAssetProxyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return IAssetProxyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -751,7 +757,12 @@ export class IAssetProxyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`IAssetProxy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new IAssetProxyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new IAssetProxyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -878,8 +889,13 @@ export class IAssetProxyContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('IAssetProxy', IAssetProxyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('IAssetProxy', IAssetProxyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts index 5f32cf4fea..12c6712511 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts @@ -89,6 +89,7 @@ export class IValidatorContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -101,13 +102,18 @@ export class IValidatorContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return IValidatorContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return IValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -131,7 +137,12 @@ export class IValidatorContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`IValidator successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new IValidatorContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new IValidatorContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -171,8 +182,13 @@ export class IValidatorContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('IValidator', IValidatorContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('IValidator', IValidatorContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts index 3f653ea9c3..6f6152a5f4 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts @@ -81,6 +81,7 @@ export class IWalletContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -93,13 +94,18 @@ export class IWalletContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return IWalletContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return IWalletContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -123,7 +129,12 @@ export class IWalletContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`IWallet successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new IWalletContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new IWalletContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -159,8 +170,13 @@ export class IWalletContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('IWallet', IWalletContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('IWallet', IWalletContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts index 23da203f8b..970bcfb255 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts @@ -901,6 +901,7 @@ export class MultiAssetProxyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -913,13 +914,18 @@ export class MultiAssetProxyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return MultiAssetProxyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return MultiAssetProxyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -943,7 +949,12 @@ export class MultiAssetProxyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`MultiAssetProxy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new MultiAssetProxyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new MultiAssetProxyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1277,8 +1288,20 @@ export class MultiAssetProxyContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('MultiAssetProxy', MultiAssetProxyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'MultiAssetProxy', + MultiAssetProxyContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( MultiAssetProxyContract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts index bf0e009c32..5ea9180f47 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts @@ -618,6 +618,7 @@ export class OrderValidatorContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, _exchange: string, _zrxAssetData: string, ): Promise { @@ -632,13 +633,26 @@ export class OrderValidatorContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return OrderValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange, _zrxAssetData); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return OrderValidatorContract.deployAsync( + bytecode, + abi, + provider, + txDefaults, + logDecodeDependenciesAbiOnly, + _exchange, + _zrxAssetData, + ); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, _exchange: string, _zrxAssetData: string, ): Promise { @@ -668,7 +682,12 @@ export class OrderValidatorContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`OrderValidator successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new OrderValidatorContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new OrderValidatorContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = [_exchange, _zrxAssetData]; return contractInstance; } @@ -1238,8 +1257,20 @@ export class OrderValidatorContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('OrderValidator', OrderValidatorContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'OrderValidator', + OrderValidatorContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts index 51de23f67f..f54f912818 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts @@ -897,6 +897,7 @@ export class WETH9Contract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -909,13 +910,18 @@ export class WETH9Contract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return WETH9Contract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return WETH9Contract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -939,7 +945,12 @@ export class WETH9Contract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`WETH9 successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new WETH9Contract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new WETH9Contract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1303,8 +1314,13 @@ export class WETH9Contract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('WETH9', WETH9Contract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('WETH9', WETH9Contract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( WETH9Contract.ABI(), diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts index b0d5ff3df7..c35927eb5b 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts @@ -706,6 +706,7 @@ export class ZRXTokenContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -718,13 +719,18 @@ export class ZRXTokenContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return ZRXTokenContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return ZRXTokenContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -748,7 +754,12 @@ export class ZRXTokenContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`ZRXToken successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new ZRXTokenContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new ZRXTokenContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1043,8 +1054,13 @@ export class ZRXTokenContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('ZRXToken', ZRXTokenContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('ZRXToken', ZRXTokenContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( ZRXTokenContract.ABI(), diff --git a/packages/abi-gen/test-cli/expected-output/typescript/abi_gen_dummy.ts b/packages/abi-gen/test-cli/expected-output/typescript/abi_gen_dummy.ts index cb741017c4..c9c07b007f 100644 --- a/packages/abi-gen/test-cli/expected-output/typescript/abi_gen_dummy.ts +++ b/packages/abi-gen/test-cli/expected-output/typescript/abi_gen_dummy.ts @@ -1022,6 +1022,7 @@ export class AbiGenDummyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -1034,13 +1035,18 @@ export class AbiGenDummyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return AbiGenDummyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return AbiGenDummyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -1064,7 +1070,12 @@ export class AbiGenDummyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`AbiGenDummy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new AbiGenDummyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new AbiGenDummyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -1538,8 +1549,13 @@ export class AbiGenDummyContract extends BaseContract { ); return logs; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('AbiGenDummy', AbiGenDummyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('AbiGenDummy', AbiGenDummyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); this._subscriptionManager = new SubscriptionManager( AbiGenDummyContract.ABI(), diff --git a/packages/abi-gen/test-cli/expected-output/typescript/lib_dummy.ts b/packages/abi-gen/test-cli/expected-output/typescript/lib_dummy.ts index f613fbb853..4a22ff8143 100644 --- a/packages/abi-gen/test-cli/expected-output/typescript/lib_dummy.ts +++ b/packages/abi-gen/test-cli/expected-output/typescript/lib_dummy.ts @@ -31,6 +31,7 @@ export class LibDummyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -43,13 +44,18 @@ export class LibDummyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return LibDummyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return LibDummyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -73,7 +79,12 @@ export class LibDummyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`LibDummy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new LibDummyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new LibDummyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -85,8 +96,13 @@ export class LibDummyContract extends BaseContract { const abi = [] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('LibDummy', LibDummyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super('LibDummy', LibDummyContract.ABI(), address, supportedProvider, txDefaults, logDecodeDependencies); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen/test-cli/expected-output/typescript/test_lib_dummy.ts b/packages/abi-gen/test-cli/expected-output/typescript/test_lib_dummy.ts index 7c192214a1..a0fc5dea55 100644 --- a/packages/abi-gen/test-cli/expected-output/typescript/test_lib_dummy.ts +++ b/packages/abi-gen/test-cli/expected-output/typescript/test_lib_dummy.ts @@ -111,6 +111,7 @@ export class TestLibDummyContract extends BaseContract { artifact: ContractArtifact | SimpleContractArtifact, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractArtifact | SimpleContractArtifact }, ): Promise { assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ schemas.addressSchema, @@ -123,13 +124,18 @@ export class TestLibDummyContract extends BaseContract { const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; - return TestLibDummyContract.deployAsync(bytecode, abi, provider, txDefaults); + const logDecodeDependenciesAbiOnly: { [contractName: string]: ContractAbi } = {}; + for (const key of Object.keys(logDecodeDependencies)) { + logDecodeDependenciesAbiOnly[key] = logDecodeDependencies[key].compilerOutput.abi; + } + return TestLibDummyContract.deployAsync(bytecode, abi, provider, txDefaults, logDecodeDependenciesAbiOnly); } public static async deployAsync( bytecode: string, abi: ContractAbi, supportedProvider: SupportedProvider, txDefaults: Partial, + logDecodeDependencies: { [contractName: string]: ContractAbi }, ): Promise { assert.isHexString('bytecode', bytecode); assert.doesConformToSchema('txDefaults', txDefaults, schemas.txDataSchema, [ @@ -153,7 +159,12 @@ export class TestLibDummyContract extends BaseContract { logUtils.log(`transactionHash: ${txHash}`); const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); logUtils.log(`TestLibDummy successfully deployed at ${txReceipt.contractAddress}`); - const contractInstance = new TestLibDummyContract(txReceipt.contractAddress as string, provider, txDefaults); + const contractInstance = new TestLibDummyContract( + txReceipt.contractAddress as string, + provider, + txDefaults, + logDecodeDependencies, + ); contractInstance.constructorArgs = []; return contractInstance; } @@ -204,8 +215,20 @@ export class TestLibDummyContract extends BaseContract { ] as ContractAbi; return abi; } - constructor(address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('TestLibDummy', TestLibDummyContract.ABI(), address, supportedProvider, txDefaults); + constructor( + address: string, + supportedProvider: SupportedProvider, + txDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, + ) { + super( + 'TestLibDummy', + TestLibDummyContract.ABI(), + address, + supportedProvider, + txDefaults, + logDecodeDependencies, + ); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', '_web3Wrapper']); } } diff --git a/packages/abi-gen/test-cli/test_typescript/test/abi_gen_dummy_test.ts b/packages/abi-gen/test-cli/test_typescript/test/abi_gen_dummy_test.ts index 6f145a6a4f..b33bb5a57a 100644 --- a/packages/abi-gen/test-cli/test_typescript/test/abi_gen_dummy_test.ts +++ b/packages/abi-gen/test-cli/test_typescript/test/abi_gen_dummy_test.ts @@ -30,7 +30,12 @@ describe('AbiGenDummy Contract', () => { let abiGenDummy: AbiGenDummyContract; before(async () => { providerUtils.startProviderEngine(provider); - abiGenDummy = await AbiGenDummyContract.deployFrom0xArtifactAsync(artifacts.AbiGenDummy, provider, txDefaults); + abiGenDummy = await AbiGenDummyContract.deployFrom0xArtifactAsync( + artifacts.AbiGenDummy, + provider, + txDefaults, + artifacts, + ); await blockchainLifecycle.startAsync(); }); after(async () => { @@ -146,7 +151,12 @@ describe('Lib dummy contract', () => { await blockchainLifecycle.revertAsync(); }); before(async () => { - libDummy = await TestLibDummyContract.deployFrom0xArtifactAsync(artifacts.TestLibDummy, provider, txDefaults); + libDummy = await TestLibDummyContract.deployFrom0xArtifactAsync( + artifacts.TestLibDummy, + provider, + txDefaults, + artifacts, + ); }); beforeEach(async () => { await blockchainLifecycle.startAsync(); diff --git a/packages/base-contract/CHANGELOG.json b/packages/base-contract/CHANGELOG.json index 905177bbe8..19faddc6aa 100644 --- a/packages/base-contract/CHANGELOG.json +++ b/packages/base-contract/CHANGELOG.json @@ -1,4 +1,17 @@ [ + { + "version": "5.3.0", + "changes": [ + { + "note": "Updated interface to `deployFrom0xArtifactAsync` to include log decode dependencies.", + "pr": 1995 + }, + { + "note": "Updated interface to `deployAsync` to include log decode dependencies.", + "pr": 1995 + } + ] + }, { "version": "5.2.0", "changes": [ diff --git a/packages/base-contract/src/index.ts b/packages/base-contract/src/index.ts index cf7dffede3..dddf5a2dcd 100644 --- a/packages/base-contract/src/index.ts +++ b/packages/base-contract/src/index.ts @@ -180,12 +180,20 @@ export class BaseContract { const abiEncodedArguments = abiEncoder.encode(functionArguments); return abiEncodedArguments; } + /// @dev Constructs a contract wrapper. + /// @param contractName Name of contract. + /// @param abi of the contract. + /// @param address of the deployed contract. + /// @param supportedProvider for communicating with an ethereum node. + /// @param logDecodeDependencies the name and ABI of contracts whose event logs are + /// decoded by this wrapper. constructor( contractName: string, abi: ContractAbi, address: string, supportedProvider: SupportedProvider, callAndTxnDefaults?: Partial, + logDecodeDependencies?: { [contractName: string]: ContractAbi }, ) { assert.isString('contractName', contractName); assert.isETHAddressHex('address', address); @@ -209,6 +217,10 @@ export class BaseContract { const abiEncoder = new AbiEncoder.Method(methodAbi); const functionSignature = abiEncoder.getSignature(); this._abiEncoderByFunctionSignature[functionSignature] = abiEncoder; + this._web3Wrapper.abiDecoder.addABI(abi, contractName); + }); + _.each(logDecodeDependencies, (dependencyAbi, dependencyName) => { + this._web3Wrapper.abiDecoder.addABI(dependencyAbi, dependencyName); }); } } diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json index 413273378d..6a9011b151 100644 --- a/packages/contract-wrappers/CHANGELOG.json +++ b/packages/contract-wrappers/CHANGELOG.json @@ -1,4 +1,17 @@ [ + { + "version": "10.1.0", + "changes": [ + { + "note": "Updated interface to `deployFrom0xArtifactAsync` to include log decode dependencies.", + "pr": 1995 + }, + { + "note": "Updated interface to `deployAsync` to include log decode dependencies.", + "pr": 1995 + } + ] + }, { "version": "10.0.0", "changes": [ diff --git a/packages/contract-wrappers/test/exchange_wrapper_test.ts b/packages/contract-wrappers/test/exchange_wrapper_test.ts index 29d3bbfa3c..bcb226e2ff 100644 --- a/packages/contract-wrappers/test/exchange_wrapper_test.ts +++ b/packages/contract-wrappers/test/exchange_wrapper_test.ts @@ -351,10 +351,12 @@ describe('ExchangeWrapper', () => { }); }); it('should throw when the ERC20 token has transfer restrictions', async () => { + const artifactDependencies = {}; const untransferrableToken = await DummyERC20TokenContract.deployFrom0xArtifactAsync( UntransferrableDummyERC20Token, provider, { from: userAddresses[0] }, + artifactDependencies, 'UntransferrableToken', 'UTT', new BigNumber(constants.ZRX_DECIMALS), diff --git a/packages/migrations/CHANGELOG.json b/packages/migrations/CHANGELOG.json index c340d1d50a..138259ab33 100644 --- a/packages/migrations/CHANGELOG.json +++ b/packages/migrations/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "4.1.11", + "changes": [ + { + "note": "Updated calls to .deploy0xArtifactAsync to include log decode dependencies.", + "pr": 1995 + } + ] + }, { "timestamp": 1563957393, "version": "4.1.10", diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts index ecb9fb5b17..f637fb6e7e 100644 --- a/packages/migrations/src/migration.ts +++ b/packages/migrations/src/migration.ts @@ -29,11 +29,13 @@ export async function runMigrationsAsync( artifacts.ERC20Proxy, provider, txDefaults, + artifacts, ); const erc721Proxy = await wrappers.ERC721ProxyContract.deployFrom0xArtifactAsync( artifacts.ERC721Proxy, provider, txDefaults, + artifacts, ); // ZRX @@ -41,10 +43,16 @@ export async function runMigrationsAsync( artifacts.ZRXToken, provider, txDefaults, + artifacts, ); // Ether token - const etherToken = await wrappers.WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults); + const etherToken = await wrappers.WETH9Contract.deployFrom0xArtifactAsync( + artifacts.WETH9, + provider, + txDefaults, + artifacts, + ); // Exchange const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); @@ -52,6 +60,7 @@ export async function runMigrationsAsync( artifacts.Exchange, provider, txDefaults, + artifacts, zrxAssetData, ); @@ -63,6 +72,7 @@ export async function runMigrationsAsync( artifacts.DummyERC20Token, provider, txDefaults, + artifacts, token.name, token.symbol, token.decimals, @@ -76,6 +86,7 @@ export async function runMigrationsAsync( artifacts.DummyERC721Token, provider, txDefaults, + artifacts, erc721TokenInfo[0].name, erc721TokenInfo[0].symbol, ); @@ -84,6 +95,7 @@ export async function runMigrationsAsync( artifacts.MultiAssetProxy, provider, txDefaults, + artifacts, ); await web3Wrapper.awaitTransactionSuccessAsync( @@ -126,6 +138,7 @@ export async function runMigrationsAsync( artifacts.Forwarder, provider, txDefaults, + artifacts, exchange.address, assetDataUtils.encodeERC20AssetData(zrxToken.address), assetDataUtils.encodeERC20AssetData(etherToken.address), @@ -136,6 +149,7 @@ export async function runMigrationsAsync( artifacts.OrderValidator, provider, txDefaults, + artifacts, exchange.address, zrxAssetData, ); @@ -145,6 +159,7 @@ export async function runMigrationsAsync( artifacts.DutchAuction, provider, txDefaults, + artifacts, exchange.address, ); @@ -159,6 +174,7 @@ export async function runMigrationsAsync( artifacts.AssetProxyOwner, provider, txDefaults, + artifacts, owners, [erc20Proxy.address, erc721Proxy.address, multiAssetProxy.address], confirmationsRequired, @@ -188,6 +204,7 @@ export async function runMigrationsAsync( artifacts.CoordinatorRegistry, provider, txDefaults, + artifacts, ); // Coordinator @@ -195,6 +212,7 @@ export async function runMigrationsAsync( artifacts.Coordinator, provider, txDefaults, + artifacts, exchange.address, ); diff --git a/packages/order-utils/CHANGELOG.json b/packages/order-utils/CHANGELOG.json index 2e89288fd2..0497f2ed38 100644 --- a/packages/order-utils/CHANGELOG.json +++ b/packages/order-utils/CHANGELOG.json @@ -1,4 +1,13 @@ [ + { + "version": "8.2.4", + "changes": [ + { + "note": "Updated calls to .deploy0xArtifactAsync to include log decode dependencies.", + "pr": 1995 + } + ] + }, { "version": "8.2.3", "changes": [ diff --git a/packages/order-utils/test/exchange_transfer_simulator_test.ts b/packages/order-utils/test/exchange_transfer_simulator_test.ts index c26eb19078..2f3e18dec2 100644 --- a/packages/order-utils/test/exchange_transfer_simulator_test.ts +++ b/packages/order-utils/test/exchange_transfer_simulator_test.ts @@ -46,6 +46,7 @@ describe('ExchangeTransferSimulator', async () => { artifacts.ERC20Proxy, provider, txDefaults, + artifacts, ); erc20ProxyAddress = erc20Proxy.address; @@ -58,6 +59,7 @@ describe('ExchangeTransferSimulator', async () => { artifacts.DummyERC20Token, provider, txDefaults, + artifacts, name, symbol, decimals,