aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfragosti <francesco.agosti93@gmail.com>2019-01-25 04:05:44 +0800
committerfragosti <francesco.agosti93@gmail.com>2019-01-25 04:05:44 +0800
commit5b06595a6b6d459d53840d066fb204c0a9e3ed02 (patch)
treea5e9ed5c805cd69bd2f78525ac5b02cb9cdebdbf
parent44aafe4d78059267c9279fdf747fd51e6c3b26e1 (diff)
parent92cbff67d196abc7755e82087dbb1831485485d1 (diff)
downloaddexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar.gz
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar.bz2
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar.lz
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar.xz
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.tar.zst
dexon-0x-contracts-5b06595a6b6d459d53840d066fb204c0a9e3ed02.zip
Merge branch 'development' of https://github.com/0xProject/0x-monorepo into development
-rw-r--r--.circleci/config.yml22
-rw-r--r--.gitignore22
-rw-r--r--.prettierignore22
-rw-r--r--README.md28
-rw-r--r--contracts/asset-proxy/CHANGELOG.json11
-rw-r--r--contracts/asset-proxy/CHANGELOG.md (renamed from contracts/protocol/CHANGELOG.md)4
-rw-r--r--contracts/asset-proxy/DEPLOYS.json47
-rw-r--r--contracts/asset-proxy/README.md (renamed from contracts/protocol/README.md)19
-rw-r--r--contracts/asset-proxy/compiler.json (renamed from contracts/protocol/compiler.json)12
-rw-r--r--contracts/asset-proxy/contracts/src/ERC20Proxy.sol (renamed from contracts/protocol/contracts/protocol/AssetProxy/ERC20Proxy.sol)0
-rw-r--r--contracts/asset-proxy/contracts/src/ERC721Proxy.sol (renamed from contracts/protocol/contracts/protocol/AssetProxy/ERC721Proxy.sol)0
-rw-r--r--contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinAssetProxyDispatcher.sol)4
-rw-r--r--contracts/asset-proxy/contracts/src/MixinAuthorizable.sol (renamed from contracts/protocol/contracts/protocol/AssetProxy/MixinAuthorizable.sol)2
-rw-r--r--contracts/asset-proxy/contracts/src/MultiAssetProxy.sol (renamed from contracts/protocol/contracts/protocol/AssetProxy/MultiAssetProxy.sol)2
-rw-r--r--contracts/asset-proxy/contracts/src/interfaces/IAssetData.sol (renamed from contracts/interfaces/contracts/protocol/AssetProxy/IAssetData.sol)0
-rw-r--r--contracts/asset-proxy/contracts/src/interfaces/IAssetProxy.sol (renamed from contracts/interfaces/contracts/protocol/AssetProxy/IAssetProxy.sol)0
-rw-r--r--contracts/asset-proxy/contracts/src/interfaces/IAssetProxyDispatcher.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IAssetProxyDispatcher.sol)0
-rw-r--r--contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol (renamed from contracts/interfaces/contracts/protocol/AssetProxy/IAuthorizable.sol)2
-rw-r--r--contracts/asset-proxy/contracts/src/mixins/MAssetProxyDispatcher.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MAssetProxyDispatcher.sol)2
-rw-r--r--contracts/asset-proxy/contracts/src/mixins/MAuthorizable.sol (renamed from contracts/protocol/contracts/protocol/AssetProxy/mixins/MAuthorizable.sol)2
-rw-r--r--contracts/asset-proxy/package.json82
-rw-r--r--contracts/asset-proxy/src/artifacts/index.ts19
-rw-r--r--contracts/asset-proxy/src/index.ts (renamed from contracts/protocol/src/index.ts)0
-rw-r--r--contracts/asset-proxy/src/wrappers/index.ts7
-rw-r--r--contracts/asset-proxy/test/authorizable.ts (renamed from contracts/protocol/test/asset_proxy/authorizable.ts)3
-rw-r--r--contracts/asset-proxy/test/global_hooks.ts (renamed from contracts/tokens/test/global_hooks.ts)0
-rw-r--r--contracts/asset-proxy/test/proxies.ts (renamed from contracts/protocol/test/asset_proxy/proxies.ts)76
-rw-r--r--contracts/asset-proxy/test/utils/erc20_wrapper.ts (renamed from contracts/protocol/test/utils/erc20_wrapper.ts)2
-rw-r--r--contracts/asset-proxy/test/utils/erc721_wrapper.ts (renamed from contracts/protocol/test/utils/erc721_wrapper.ts)2
-rw-r--r--contracts/asset-proxy/test/utils/index.ts (renamed from contracts/protocol/test/utils/index.ts)1
-rw-r--r--contracts/asset-proxy/tsconfig.json19
-rw-r--r--contracts/asset-proxy/tslint.json (renamed from contracts/tokens/tslint.json)0
-rw-r--r--contracts/erc20/.solhintignore1
-rw-r--r--contracts/erc20/CHANGELOG.json11
-rw-r--r--contracts/erc20/CHANGELOG.md (renamed from contracts/interfaces/CHANGELOG.md)4
-rw-r--r--contracts/erc20/DEPLOYS.json (renamed from contracts/tokens/DEPLOYS.json)1
-rw-r--r--contracts/erc20/README.md (renamed from contracts/interfaces/README.md)17
-rw-r--r--contracts/erc20/compiler.json (renamed from contracts/tokens/compiler.json)10
-rw-r--r--contracts/erc20/contracts/src/ERC20Token.sol (renamed from contracts/tokens/contracts/tokens/ERC20Token/ERC20Token.sol)2
-rw-r--r--contracts/erc20/contracts/src/MintableERC20Token.sol (renamed from contracts/tokens/contracts/tokens/ERC20Token/MintableERC20Token.sol)2
-rw-r--r--contracts/erc20/contracts/src/UnlimitedAllowanceERC20Token.sol (renamed from contracts/tokens/contracts/tokens/ERC20Token/UnlimitedAllowanceERC20Token.sol)2
-rw-r--r--contracts/erc20/contracts/src/WETH9.sol (renamed from contracts/tokens/contracts/tokens/EtherToken/WETH9.sol)0
-rw-r--r--contracts/erc20/contracts/src/ZRXToken.sol150
-rw-r--r--contracts/erc20/contracts/src/interfaces/IERC20Token.sol (renamed from contracts/tokens/contracts/tokens/ERC20Token/IERC20Token.sol)0
-rw-r--r--contracts/erc20/contracts/src/interfaces/IEtherToken.sol (renamed from contracts/tokens/contracts/tokens/EtherToken/IEtherToken.sol)2
-rw-r--r--contracts/erc20/contracts/test/DummyERC20Token.sol (renamed from contracts/tokens/contracts/test/DummyERC20Token/DummyERC20Token.sol)4
-rw-r--r--contracts/erc20/contracts/test/DummyMultipleReturnERC20Token.sol (renamed from contracts/tokens/contracts/test/DummyERC20Token/DummyMultipleReturnERC20Token.sol)0
-rw-r--r--contracts/erc20/contracts/test/DummyNoReturnERC20Token.sol (renamed from contracts/tokens/contracts/test/DummyERC20Token/DummyNoReturnERC20Token.sol)0
-rw-r--r--contracts/erc20/contracts/test/ReentrantERC20Token.sol (renamed from contracts/tokens/contracts/test/ReentrantERC20Token/ReentrantERC20Token.sol)8
-rw-r--r--contracts/erc20/package.json (renamed from contracts/tokens/package.json)27
-rw-r--r--contracts/erc20/src/artifacts/index.ts (renamed from contracts/tokens/src/artifacts/index.ts)20
-rw-r--r--contracts/erc20/src/index.ts (renamed from contracts/tokens/src/index.ts)0
-rw-r--r--contracts/erc20/src/wrappers/index.ts (renamed from contracts/tokens/src/wrappers/index.ts)10
-rw-r--r--contracts/erc20/test/global_hooks.ts (renamed from contracts/protocol/test/global_hooks.ts)0
-rw-r--r--contracts/erc20/test/unlimited_allowance_token.ts (renamed from contracts/tokens/test/unlimited_allowance_token.ts)2
-rw-r--r--contracts/erc20/test/weth9.ts (renamed from contracts/tokens/test/weth9.ts)0
-rw-r--r--contracts/erc20/test/zrx_token.ts (renamed from contracts/tokens/test/zrx_token.ts)2
-rw-r--r--contracts/erc20/tsconfig.json (renamed from contracts/tokens/tsconfig.json)10
-rw-r--r--contracts/erc20/tslint.json (renamed from contracts/protocol/tslint.json)0
-rw-r--r--contracts/erc721/.solhintignore (renamed from contracts/tokens/.solhintignore)0
-rw-r--r--contracts/erc721/CHANGELOG.json11
-rw-r--r--contracts/erc721/CHANGELOG.md (renamed from contracts/examples/CHANGELOG.md)4
-rw-r--r--contracts/erc721/DEPLOYS.json1
-rw-r--r--contracts/erc721/README.md (renamed from contracts/libs/README.md)23
-rw-r--r--contracts/erc721/compiler.json30
-rw-r--r--contracts/erc721/contracts/src/ERC721Token.sol (renamed from contracts/tokens/contracts/tokens/ERC721Token/ERC721Token.sol)6
-rw-r--r--contracts/erc721/contracts/src/MintableERC721Token.sol (renamed from contracts/tokens/contracts/tokens/ERC721Token/MintableERC721Token.sol)0
-rw-r--r--contracts/erc721/contracts/src/interfaces/IERC721Receiver.sol (renamed from contracts/tokens/contracts/tokens/ERC721Token/IERC721Receiver.sol)0
-rw-r--r--contracts/erc721/contracts/src/interfaces/IERC721Token.sol (renamed from contracts/tokens/contracts/tokens/ERC721Token/IERC721Token.sol)0
-rw-r--r--contracts/erc721/contracts/test/DummyERC721Receiver.sol (renamed from contracts/tokens/contracts/test/DummyERC721Receiver/DummyERC721Receiver.sol)2
-rw-r--r--contracts/erc721/contracts/test/DummyERC721Token.sol (renamed from contracts/tokens/contracts/test/DummyERC721Token/DummyERC721Token.sol)4
-rw-r--r--contracts/erc721/contracts/test/InvalidERC721Receiver.sol (renamed from contracts/tokens/contracts/test/DummyERC721Receiver/InvalidERC721Receiver.sol)2
-rw-r--r--contracts/erc721/package.json (renamed from contracts/examples/package.json)42
-rw-r--r--contracts/erc721/src/artifacts/index.ts20
-rw-r--r--contracts/erc721/src/index.ts (renamed from contracts/interfaces/src/index.ts)2
-rw-r--r--contracts/erc721/src/wrappers/index.ts7
-rw-r--r--contracts/erc721/test/erc721_token.ts (renamed from contracts/tokens/test/erc721_token.ts)0
-rw-r--r--contracts/erc721/test/global_hooks.ts (renamed from contracts/libs/test/global_hooks.ts)0
-rw-r--r--contracts/erc721/tsconfig.json19
-rw-r--r--contracts/erc721/tslint.json (renamed from contracts/libs/tslint.json)0
-rw-r--r--contracts/examples/CHANGELOG.json38
-rw-r--r--contracts/examples/src/artifacts/index.ts13
-rw-r--r--contracts/examples/src/wrappers/index.ts4
-rw-r--r--contracts/exchange-forwarder/CHANGELOG.json11
-rw-r--r--contracts/exchange-forwarder/CHANGELOG.md (renamed from contracts/libs/CHANGELOG.md)16
-rw-r--r--contracts/exchange-forwarder/DEPLOYS.json32
-rw-r--r--contracts/exchange-forwarder/README.md (renamed from contracts/tokens/README.md)19
-rw-r--r--contracts/exchange-forwarder/compiler.json (renamed from contracts/examples/compiler.json)2
-rw-r--r--contracts/exchange-forwarder/contracts/src/Forwarder.sol (renamed from contracts/extensions/contracts/Forwarder/Forwarder.sol)0
-rw-r--r--contracts/exchange-forwarder/contracts/src/MixinAssets.sol (renamed from contracts/extensions/contracts/Forwarder/MixinAssets.sol)8
-rw-r--r--contracts/exchange-forwarder/contracts/src/MixinExchangeWrapper.sol (renamed from contracts/extensions/contracts/Forwarder/MixinExchangeWrapper.sol)8
-rw-r--r--contracts/exchange-forwarder/contracts/src/MixinForwarderCore.sol (renamed from contracts/extensions/contracts/Forwarder/MixinForwarderCore.sol)8
-rw-r--r--contracts/exchange-forwarder/contracts/src/MixinWeth.sol (renamed from contracts/extensions/contracts/Forwarder/MixinWeth.sol)2
-rw-r--r--contracts/exchange-forwarder/contracts/src/interfaces/IAssets.sol (renamed from contracts/extensions/contracts/Forwarder/interfaces/IAssets.sol)0
-rw-r--r--contracts/exchange-forwarder/contracts/src/interfaces/IForwarder.sol (renamed from contracts/extensions/contracts/Forwarder/interfaces/IForwarder.sol)0
-rw-r--r--contracts/exchange-forwarder/contracts/src/interfaces/IForwarderCore.sol (renamed from contracts/extensions/contracts/Forwarder/interfaces/IForwarderCore.sol)4
-rw-r--r--contracts/exchange-forwarder/contracts/src/libs/LibConstants.sol (renamed from contracts/extensions/contracts/Forwarder/libs/LibConstants.sol)8
-rw-r--r--contracts/exchange-forwarder/contracts/src/libs/LibForwarderErrors.sol (renamed from contracts/extensions/contracts/Forwarder/libs/LibForwarderErrors.sol)0
-rw-r--r--contracts/exchange-forwarder/contracts/src/mixins/MAssets.sol (renamed from contracts/extensions/contracts/Forwarder/mixins/MAssets.sol)0
-rw-r--r--contracts/exchange-forwarder/contracts/src/mixins/MExchangeWrapper.sol (renamed from contracts/extensions/contracts/Forwarder/mixins/MExchangeWrapper.sol)4
-rw-r--r--contracts/exchange-forwarder/contracts/src/mixins/MWeth.sol (renamed from contracts/extensions/contracts/Forwarder/mixins/MWeth.sol)0
-rw-r--r--contracts/exchange-forwarder/package.json86
-rw-r--r--contracts/exchange-forwarder/src/artifacts/index.ts7
-rw-r--r--contracts/exchange-forwarder/src/index.ts (renamed from contracts/examples/src/index.ts)1
-rw-r--r--contracts/exchange-forwarder/src/wrappers/index.ts1
-rw-r--r--contracts/exchange-forwarder/test/forwarder.ts (renamed from contracts/extensions/test/extensions/forwarder.ts)28
-rw-r--r--contracts/exchange-forwarder/test/global_hooks.ts17
-rw-r--r--contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts (renamed from contracts/extensions/test/utils/forwarder_wrapper.ts)12
-rw-r--r--contracts/exchange-forwarder/test/utils/index.ts1
-rw-r--r--contracts/exchange-forwarder/tsconfig.json (renamed from contracts/examples/tsconfig.json)7
-rw-r--r--contracts/exchange-forwarder/tslint.json (renamed from contracts/interfaces/tslint.json)0
-rw-r--r--contracts/exchange-libs/CHANGELOG.json15
-rw-r--r--contracts/exchange-libs/CHANGELOG.md (renamed from contracts/tokens/CHANGELOG.md)4
-rw-r--r--contracts/exchange-libs/README.md (renamed from contracts/examples/README.md)27
-rw-r--r--contracts/exchange-libs/compiler.json (renamed from contracts/libs/compiler.json)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibAbiEncoder.sol (renamed from contracts/libs/contracts/libs/LibAbiEncoder.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibAssetProxyErrors.sol (renamed from contracts/libs/contracts/libs/LibAssetProxyErrors.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibConstants.sol (renamed from contracts/libs/contracts/libs/LibConstants.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibEIP712.sol (renamed from contracts/libs/contracts/libs/LibEIP712.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibExchangeErrors.sol (renamed from contracts/libs/contracts/libs/LibExchangeErrors.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibExchangeSelectors.sol (renamed from contracts/libs/contracts/libs/LibExchangeSelectors.sol)0
-rw-r--r--contracts/exchange-libs/contracts/src/LibFillResults.sol (renamed from contracts/libs/contracts/libs/LibFillResults.sol)2
-rw-r--r--contracts/exchange-libs/contracts/src/LibMath.sol (renamed from contracts/libs/contracts/libs/LibMath.sol)2
-rw-r--r--contracts/exchange-libs/contracts/src/LibOrder.sol (renamed from contracts/libs/contracts/libs/LibOrder.sol)0
-rw-r--r--contracts/exchange-libs/contracts/test/TestLibs.sol (renamed from contracts/libs/contracts/test/TestLibs/TestLibs.sol)8
-rw-r--r--contracts/exchange-libs/package.json (renamed from contracts/libs/package.json)21
-rw-r--r--contracts/exchange-libs/src/artifacts/index.ts (renamed from contracts/libs/src/artifacts/index.ts)0
-rw-r--r--contracts/exchange-libs/src/index.ts (renamed from contracts/libs/src/index.ts)0
-rw-r--r--contracts/exchange-libs/src/wrappers/index.ts (renamed from contracts/libs/src/wrappers/index.ts)0
-rw-r--r--contracts/exchange-libs/test/exchange_libs.ts (renamed from contracts/libs/test/exchange/libs.ts)4
-rw-r--r--contracts/exchange-libs/test/global_hooks.ts17
-rw-r--r--contracts/exchange-libs/tsconfig.json (renamed from contracts/libs/tsconfig.json)0
-rw-r--r--contracts/exchange-libs/tslint.json (renamed from contracts/examples/tslint.json)0
-rw-r--r--contracts/exchange/CHANGELOG.json15
-rw-r--r--contracts/exchange/CHANGELOG.md28
-rw-r--r--contracts/exchange/DEPLOYS.json17
-rw-r--r--contracts/exchange/README.md73
-rw-r--r--contracts/exchange/compiler.json (renamed from contracts/interfaces/compiler.json)14
-rw-r--r--contracts/exchange/contracts/examples/ExchangeWrapper.sol (renamed from contracts/examples/contracts/ExchangeWrapper/ExchangeWrapper.sol)4
-rw-r--r--contracts/exchange/contracts/examples/Validator.sol (renamed from contracts/examples/contracts/Validator/Validator.sol)2
-rw-r--r--contracts/exchange/contracts/examples/Wallet.sol (renamed from contracts/examples/contracts/Wallet/Wallet.sol)4
-rw-r--r--contracts/exchange/contracts/examples/Whitelist.sol (renamed from contracts/examples/contracts/Whitelist/Whitelist.sol)6
-rw-r--r--contracts/exchange/contracts/src/Exchange.sol (renamed from contracts/protocol/contracts/protocol/Exchange/Exchange.sol)2
-rw-r--r--contracts/exchange/contracts/src/MixinAssetProxyDispatcher.sol174
-rw-r--r--contracts/exchange/contracts/src/MixinExchangeCore.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinExchangeCore.sol)10
-rw-r--r--contracts/exchange/contracts/src/MixinMatchOrders.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinMatchOrders.sol)10
-rw-r--r--contracts/exchange/contracts/src/MixinSignatureValidator.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinSignatureValidator.sol)8
-rw-r--r--contracts/exchange/contracts/src/MixinTransactions.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinTransactions.sol)4
-rw-r--r--contracts/exchange/contracts/src/MixinWrapperFunctions.sol (renamed from contracts/protocol/contracts/protocol/Exchange/MixinWrapperFunctions.sol)10
-rw-r--r--contracts/exchange/contracts/src/interfaces/IAssetProxyDispatcher.sol37
-rw-r--r--contracts/exchange/contracts/src/interfaces/IExchange.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IExchange.sol)0
-rw-r--r--contracts/exchange/contracts/src/interfaces/IExchangeCore.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IExchangeCore.sol)4
-rw-r--r--contracts/exchange/contracts/src/interfaces/IMatchOrders.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IMatchOrders.sol)4
-rw-r--r--contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/ISignatureValidator.sol)0
-rw-r--r--contracts/exchange/contracts/src/interfaces/ITransactions.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/ITransactions.sol)0
-rw-r--r--contracts/exchange/contracts/src/interfaces/IValidator.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IValidator.sol)0
-rw-r--r--contracts/exchange/contracts/src/interfaces/IWallet.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IWallet.sol)0
-rw-r--r--contracts/exchange/contracts/src/interfaces/IWrapperFunctions.sol (renamed from contracts/interfaces/contracts/protocol/Exchange/IWrapperFunctions.sol)4
-rw-r--r--contracts/exchange/contracts/src/mixins/MAssetProxyDispatcher.sol45
-rw-r--r--contracts/exchange/contracts/src/mixins/MExchangeCore.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MExchangeCore.sol)6
-rw-r--r--contracts/exchange/contracts/src/mixins/MMatchOrders.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MMatchOrders.sol)6
-rw-r--r--contracts/exchange/contracts/src/mixins/MSignatureValidator.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MSignatureValidator.sol)2
-rw-r--r--contracts/exchange/contracts/src/mixins/MTransactions.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MTransactions.sol)2
-rw-r--r--contracts/exchange/contracts/src/mixins/MWrapperFunctions.sol (renamed from contracts/protocol/contracts/protocol/Exchange/mixins/MWrapperFunctions.sol)6
-rw-r--r--contracts/exchange/contracts/test/TestAssetProxyDispatcher.sol (renamed from contracts/protocol/contracts/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol)2
-rw-r--r--contracts/exchange/contracts/test/TestExchangeInternals.sol (renamed from contracts/protocol/contracts/test/TestExchangeInternals/TestExchangeInternals.sol)2
-rw-r--r--contracts/exchange/contracts/test/TestSignatureValidator.sol (renamed from contracts/protocol/contracts/test/TestSignatureValidator/TestSignatureValidator.sol)4
-rw-r--r--contracts/exchange/contracts/test/TestStaticCallReceiver.sol (renamed from contracts/protocol/contracts/test/TestStaticCallReceiver/TestStaticCallReceiver.sol)2
-rw-r--r--contracts/exchange/package.json (renamed from contracts/protocol/package.json)30
-rw-r--r--contracts/exchange/src/artifacts/index.ts (renamed from contracts/interfaces/src/artifacts/index.ts)26
-rw-r--r--contracts/exchange/src/index.ts3
-rw-r--r--contracts/exchange/src/wrappers/index.ts18
-rw-r--r--contracts/exchange/test/core.ts (renamed from contracts/protocol/test/exchange/core.ts)62
-rw-r--r--contracts/exchange/test/dispatcher.ts (renamed from contracts/protocol/test/exchange/dispatcher.ts)21
-rw-r--r--contracts/exchange/test/fill_order.ts (renamed from contracts/protocol/test/exchange/fill_order.ts)5
-rw-r--r--contracts/exchange/test/global_hooks.ts17
-rw-r--r--contracts/exchange/test/internal.ts (renamed from contracts/protocol/test/exchange/internal.ts)57
-rw-r--r--contracts/exchange/test/match_orders.ts (renamed from contracts/protocol/test/exchange/match_orders.ts)21
-rw-r--r--contracts/exchange/test/signature_validator.ts (renamed from contracts/protocol/test/exchange/signature_validator.ts)13
-rw-r--r--contracts/exchange/test/transactions.ts (renamed from contracts/protocol/test/exchange/transactions.ts)36
-rw-r--r--contracts/exchange/test/utils/asset_wrapper.ts (renamed from contracts/protocol/test/utils/asset_wrapper.ts)11
-rw-r--r--contracts/exchange/test/utils/exchange_wrapper.ts (renamed from contracts/protocol/test/utils/exchange_wrapper.ts)8
-rw-r--r--contracts/exchange/test/utils/fill_order_combinatorial_utils.ts (renamed from contracts/protocol/test/utils/fill_order_combinatorial_utils.ts)14
-rw-r--r--contracts/exchange/test/utils/index.ts3
-rw-r--r--contracts/exchange/test/utils/match_order_tester.ts (renamed from contracts/protocol/test/utils/match_order_tester.ts)27
-rw-r--r--contracts/exchange/test/utils/order_factory_from_scenario.ts (renamed from contracts/protocol/test/utils/order_factory_from_scenario.ts)2
-rw-r--r--contracts/exchange/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts (renamed from contracts/protocol/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts)0
-rw-r--r--contracts/exchange/test/utils/simple_order_filled_cancelled_fetcher.ts (renamed from contracts/protocol/test/utils/simple_order_filled_cancelled_fetcher.ts)0
-rw-r--r--contracts/exchange/test/utils/types.ts (renamed from contracts/protocol/test/utils/types.ts)0
-rw-r--r--contracts/exchange/test/wrapper.ts (renamed from contracts/protocol/test/exchange/wrapper.ts)173
-rw-r--r--contracts/exchange/tsconfig.json (renamed from contracts/interfaces/tsconfig.json)16
-rw-r--r--contracts/exchange/tslint.json6
-rw-r--r--contracts/extensions/CHANGELOG.json31
-rw-r--r--contracts/extensions/CHANGELOG.md4
-rw-r--r--contracts/extensions/DEPLOYS.json32
-rw-r--r--contracts/extensions/README.md12
-rw-r--r--contracts/extensions/compiler.json2
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/BalanceThresholdFilter.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/BalanceThresholdFilter.sol)2
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol)4
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/MixinExchangeCalldata.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/MixinExchangeCalldata.sol)2
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol)0
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IThresholdAsset.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IThresholdAsset.sol)0
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol)2
-rw-r--r--contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MExchangeCalldata.sol (renamed from contracts/extensions/contracts/BalanceThresholdFilter/mixins/MExchangeCalldata.sol)0
-rw-r--r--contracts/extensions/contracts/src/DutchAuction/DutchAuction.sol (renamed from contracts/extensions/contracts/DutchAuction/DutchAuction.sol)10
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/MixinAssets.sol (renamed from contracts/extensions/contracts/OrderMatcher/MixinAssets.sol)8
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/MixinMatchOrders.sol (renamed from contracts/extensions/contracts/OrderMatcher/MixinMatchOrders.sol)6
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/OrderMatcher.sol (renamed from contracts/extensions/contracts/OrderMatcher/OrderMatcher.sol)2
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/interfaces/IAssets.sol (renamed from contracts/extensions/contracts/OrderMatcher/interfaces/IAssets.sol)0
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/interfaces/IMatchOrders.sol (renamed from contracts/extensions/contracts/OrderMatcher/interfaces/IMatchOrders.sol)2
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/interfaces/IOrderMatcher.sol (renamed from contracts/extensions/contracts/OrderMatcher/interfaces/IOrderMatcher.sol)2
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/libs/LibConstants.sol (renamed from contracts/extensions/contracts/OrderMatcher/libs/LibConstants.sol)2
-rw-r--r--contracts/extensions/contracts/src/OrderMatcher/mixins/MAssets.sol (renamed from contracts/extensions/contracts/OrderMatcher/mixins/MAssets.sol)0
-rw-r--r--contracts/extensions/contracts/src/OrderValidator/OrderValidator.sol (renamed from contracts/extensions/contracts/OrderValidator/OrderValidator.sol)10
-rw-r--r--contracts/extensions/package.json31
-rw-r--r--contracts/extensions/src/artifacts/index.ts2
-rw-r--r--contracts/extensions/src/index.ts1
-rw-r--r--contracts/extensions/src/wrappers/index.ts1
-rw-r--r--contracts/extensions/test/balance_threshold_filter.ts (renamed from contracts/extensions/test/extensions/balance_threshold_filter.ts)137
-rw-r--r--contracts/extensions/test/dutch_auction.ts (renamed from contracts/extensions/test/extensions/dutch_auction.ts)25
-rw-r--r--contracts/extensions/test/order_matcher.ts (renamed from contracts/extensions/test/extensions/order_matcher.ts)29
-rw-r--r--contracts/extensions/test/order_validator.ts (renamed from contracts/extensions/test/extensions/order_validator.ts)19
-rw-r--r--contracts/extensions/test/utils/balance_threshold_wrapper.ts10
-rw-r--r--contracts/extensions/test/utils/dutch_auction_test_wrapper.ts10
-rw-r--r--contracts/extensions/test/utils/index.ts2
-rw-r--r--contracts/extensions/tsconfig.json1
-rw-r--r--contracts/interfaces/CHANGELOG.json38
-rw-r--r--contracts/interfaces/package.json57
-rw-r--r--contracts/interfaces/src/wrappers/index.ts12
-rw-r--r--contracts/libs/CHANGELOG.json38
-rw-r--r--contracts/multisig/CHANGELOG.json31
-rw-r--r--contracts/multisig/CHANGELOG.md4
-rw-r--r--contracts/multisig/DEPLOYS.json17
-rw-r--r--contracts/multisig/README.md15
-rw-r--r--contracts/multisig/compiler.json8
-rw-r--r--contracts/multisig/contracts/src/AssetProxyOwner.sol (renamed from contracts/protocol/contracts/protocol/AssetProxyOwner/AssetProxyOwner.sol)4
-rw-r--r--contracts/multisig/contracts/src/MultiSigWallet.sol (renamed from contracts/multisig/contracts/multisig/MultiSigWallet.sol)0
-rw-r--r--contracts/multisig/contracts/src/MultiSigWalletWithTimeLock.sol (renamed from contracts/multisig/contracts/multisig/MultiSigWalletWithTimeLock.sol)0
-rw-r--r--contracts/multisig/contracts/test/TestAssetProxyOwner.sol (renamed from contracts/protocol/contracts/test/TestAssetProxyOwner/TestAssetProxyOwner.sol)2
-rw-r--r--contracts/multisig/contracts/test/TestRejectEther.sol (renamed from contracts/multisig/contracts/test/TestRejectEther/TestRejectEther.sol)0
-rw-r--r--contracts/multisig/package.json18
-rw-r--r--contracts/multisig/src/artifacts/index.ts6
-rw-r--r--contracts/multisig/src/index.ts1
-rw-r--r--contracts/multisig/src/wrappers/index.ts3
-rw-r--r--contracts/multisig/test/asset_proxy_owner.ts (renamed from contracts/protocol/test/multisig/asset_proxy_owner.ts)14
-rw-r--r--contracts/multisig/test/multi_sig_with_time_lock.ts9
-rw-r--r--contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts (renamed from contracts/protocol/test/utils/asset_proxy_owner_wrapper.ts)5
-rw-r--r--contracts/multisig/test/utils/index.ts2
-rw-r--r--contracts/multisig/tsconfig.json2
-rw-r--r--contracts/protocol/CHANGELOG.json47
-rw-r--r--contracts/protocol/DEPLOYS.json92
-rw-r--r--contracts/protocol/src/artifacts/index.ts27
-rw-r--r--contracts/protocol/src/wrappers/index.ts10
-rw-r--r--contracts/protocol/tsconfig.json23
-rw-r--r--contracts/test-utils/CHANGELOG.json18
-rw-r--r--contracts/test-utils/CHANGELOG.md4
-rw-r--r--contracts/test-utils/package.json12
-rw-r--r--contracts/test-utils/src/order_factory.ts2
-rw-r--r--contracts/test-utils/src/order_utils.ts4
-rw-r--r--contracts/tokens/CHANGELOG.json38
-rw-r--r--contracts/tokens/contracts/tokens/ZRXToken/ERC20Token_v1.sol44
-rw-r--r--contracts/tokens/contracts/tokens/ZRXToken/Token_v1.sol39
-rw-r--r--contracts/tokens/contracts/tokens/ZRXToken/UnlimitedAllowanceToken_v1.sol52
-rw-r--r--contracts/tokens/contracts/tokens/ZRXToken/ZRXToken.sol41
-rw-r--r--contracts/utils/CHANGELOG.json44
-rw-r--r--contracts/utils/CHANGELOG.md4
-rw-r--r--contracts/utils/README.md13
-rw-r--r--contracts/utils/contracts/src/LibAddressArray.sol (renamed from contracts/libs/contracts/libs/LibAddressArray.sol)2
-rw-r--r--contracts/utils/contracts/src/LibBytes.sol (renamed from contracts/utils/contracts/utils/LibBytes/LibBytes.sol)0
-rw-r--r--contracts/utils/contracts/src/Ownable.sol (renamed from contracts/utils/contracts/utils/Ownable/Ownable.sol)2
-rw-r--r--contracts/utils/contracts/src/ReentrancyGuard.sol (renamed from contracts/utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol)0
-rw-r--r--contracts/utils/contracts/src/SafeMath.sol (renamed from contracts/utils/contracts/utils/SafeMath/SafeMath.sol)0
-rw-r--r--contracts/utils/contracts/src/interfaces/IOwnable.sol (renamed from contracts/utils/contracts/utils/Ownable/IOwnable.sol)0
-rw-r--r--contracts/utils/contracts/test/TestConstants.sol (renamed from contracts/utils/contracts/test/TestConstants/TestConstants.sol)4
-rw-r--r--contracts/utils/contracts/test/TestLibBytes.sol (renamed from contracts/utils/contracts/test/TestLibBytes/TestLibBytes.sol)4
-rw-r--r--contracts/utils/package.json17
-rw-r--r--contracts/utils/test/lib_bytes.ts3
-rw-r--r--contracts/utils/test/libs.ts3
-rw-r--r--package.json3
-rw-r--r--packages/0x.js/CHANGELOG.json18
-rw-r--r--packages/0x.js/CHANGELOG.md4
-rw-r--r--packages/0x.js/package.json8
-rw-r--r--packages/abi-gen-templates/CHANGELOG.json9
-rw-r--r--packages/abi-gen-wrappers/CHANGELOG.json9
-rw-r--r--packages/abi-gen/CHANGELOG.json9
-rw-r--r--packages/assert/CHANGELOG.json9
-rw-r--r--packages/assert/src/index.ts4
-rw-r--r--packages/asset-buyer/CHANGELOG.json27
-rw-r--r--packages/asset-buyer/CHANGELOG.md4
-rw-r--r--packages/asset-buyer/package.json7
-rw-r--r--packages/asset-buyer/src/asset_buyer.ts47
-rw-r--r--packages/asset-buyer/src/index.ts3
-rw-r--r--packages/asset-buyer/src/types.ts19
-rw-r--r--packages/asset-buyer/src/utils/buy_quote_calculator.ts12
-rw-r--r--packages/asset-buyer/src/utils/calculate_liquidity.ts34
-rw-r--r--packages/asset-buyer/src/utils/order_provider_response_processor.ts7
-rw-r--r--packages/asset-buyer/src/utils/order_utils.ts28
-rw-r--r--packages/asset-buyer/test/asset_buyer_test.ts212
-rw-r--r--packages/asset-buyer/test/buy_quote_calculator_test.ts6
-rw-r--r--packages/asset-buyer/test/utils/mocks.ts68
-rw-r--r--packages/base-contract/CHANGELOG.json9
-rw-r--r--packages/base-contract/src/index.ts4
-rw-r--r--packages/connect/CHANGELOG.json9
-rw-r--r--packages/contract-wrappers/CHANGELOG.json18
-rw-r--r--packages/contract-wrappers/CHANGELOG.md4
-rw-r--r--packages/contract-wrappers/package.json6
-rw-r--r--packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts6
-rw-r--r--packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts4
-rw-r--r--packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts4
-rw-r--r--packages/contract-wrappers/src/utils/utils.ts6
-rw-r--r--packages/contract-wrappers/test/ether_token_wrapper_test.ts6
-rw-r--r--packages/dev-tools-pages/.gitignore4
-rw-r--r--packages/dev-tools-pages/assets/crawl.html33
-rw-r--r--packages/dev-tools-pages/assets/fonts/.gitkeep0
-rw-r--r--packages/dev-tools-pages/assets/fonts/MaisonNeue-Bold-subset.woff2bin0 -> 11248 bytes
-rw-r--r--packages/dev-tools-pages/assets/fonts/MaisonNeue-Book-subset.woff2bin0 -> 11232 bytes
-rw-r--r--packages/dev-tools-pages/package.json24
-rw-r--r--packages/dev-tools-pages/pages.js24
-rw-r--r--packages/dev-tools-pages/ts/components/call_to_action.tsx40
-rw-r--r--packages/dev-tools-pages/ts/components/code.tsx3
-rw-r--r--packages/dev-tools-pages/ts/components/compiler.tsx12
-rw-r--r--packages/dev-tools-pages/ts/components/footer.tsx12
-rw-r--r--packages/dev-tools-pages/ts/components/header.tsx2
-rw-r--r--packages/dev-tools-pages/ts/components/hero.tsx6
-rw-r--r--packages/dev-tools-pages/ts/components/trace.tsx13
-rw-r--r--packages/dev-tools-pages/ts/context/compiler.tsx1
-rw-r--r--packages/dev-tools-pages/ts/context/coverage.tsx (renamed from packages/dev-tools-pages/ts/context/cov.tsx)5
-rw-r--r--packages/dev-tools-pages/ts/context/index.tsx1
-rw-r--r--packages/dev-tools-pages/ts/context/profiler.tsx1
-rw-r--r--packages/dev-tools-pages/ts/context/trace.tsx1
-rw-r--r--packages/dev-tools-pages/ts/pages/compiler.tsx30
-rw-r--r--packages/dev-tools-pages/ts/pages/coverage.tsx (renamed from packages/dev-tools-pages/ts/pages/cov.tsx)76
-rw-r--r--packages/dev-tools-pages/ts/pages/profiler.tsx62
-rw-r--r--packages/dev-tools-pages/ts/pages/trace.tsx59
-rw-r--r--packages/dev-tools-pages/webpack.config.js3
-rw-r--r--packages/dev-utils/CHANGELOG.json9
-rw-r--r--packages/devnet/docker-compose.yml8
-rw-r--r--packages/devnet/genesis.json2
-rwxr-xr-xpackages/devnet/run.sh1
-rw-r--r--packages/ethereum-types/CHANGELOG.json9
-rw-r--r--packages/ethereum-types/package.json2
-rw-r--r--packages/fill-scenarios/CHANGELOG.json9
-rw-r--r--packages/instant/CHANGELOG.json9
-rw-r--r--packages/instant/README.md6
-rw-r--r--packages/instant/package.json4
-rw-r--r--packages/instant/src/components/order_details.tsx4
-rw-r--r--packages/instant/src/constants.ts2
-rw-r--r--packages/instant/src/containers/selected_erc20_asset_amount_input.ts2
-rw-r--r--packages/instant/src/index.umd.ts42
-rw-r--r--packages/instant/src/redux/async_data.ts2
-rw-r--r--packages/instant/src/util/asset.ts9
-rw-r--r--packages/instant/src/util/format.ts8
-rw-r--r--packages/instant/src/util/gas_price_estimator.ts2
-rw-r--r--packages/instant/src/util/maybe_big_number.ts2
-rw-r--r--packages/json-schemas/CHANGELOG.json9
-rw-r--r--packages/metacoin/package.json10
-rw-r--r--packages/migrations/CHANGELOG.json9
-rw-r--r--packages/monorepo-scripts/CHANGELOG.json9
-rw-r--r--packages/monorepo-scripts/package.json2
-rw-r--r--packages/monorepo-scripts/src/utils/utils.ts2
-rw-r--r--packages/order-utils/CHANGELOG.json9
-rw-r--r--packages/order-utils/package.json2
-rw-r--r--packages/order-utils/src/crypto.ts3
-rw-r--r--packages/order-utils/src/exchange_transfer_simulator.ts4
-rw-r--r--packages/order-utils/src/market_utils.ts4
-rw-r--r--packages/order-utils/src/order_state_utils.ts12
-rw-r--r--packages/order-utils/src/order_validation_utils.ts8
-rw-r--r--packages/order-utils/src/rate_utils.ts6
-rw-r--r--packages/order-utils/src/remaining_fillable_calculator.ts6
-rw-r--r--packages/order-utils/src/salt.ts2
-rw-r--r--packages/order-utils/src/utils.ts6
-rw-r--r--packages/order-utils/test/remaining_fillable_calculator_test.ts2
-rw-r--r--packages/order-utils/test/signature_utils_test.ts4
-rw-r--r--packages/order-watcher/CHANGELOG.json18
-rw-r--r--packages/order-watcher/CHANGELOG.md4
-rw-r--r--packages/order-watcher/package.json6
-rw-r--r--packages/order-watcher/src/order_watcher/expiration_watcher.ts2
-rw-r--r--packages/order-watcher/src/utils/utils.ts2
-rw-r--r--packages/order-watcher/test/order_watcher_test.ts6
-rw-r--r--packages/pipeline/package.json2
-rw-r--r--packages/pipeline/src/utils/transformers/number_to_bigint.ts2
-rw-r--r--packages/react-docs/CHANGELOG.json9
-rw-r--r--packages/react-shared/CHANGELOG.json9
-rw-r--r--packages/react-shared/package.json2
-rw-r--r--packages/sol-compiler/CHANGELOG.json9
-rw-r--r--packages/sol-compiler/package.json2
-rw-r--r--packages/sol-coverage/CHANGELOG.json18
-rw-r--r--packages/sol-coverage/CHANGELOG.md4
-rw-r--r--packages/sol-coverage/package.json4
-rw-r--r--packages/sol-coverage/src/coverage_subprovider.ts4
-rw-r--r--packages/sol-doc/CHANGELOG.json9
-rw-r--r--packages/sol-doc/package.json2
-rw-r--r--packages/sol-profiler/CHANGELOG.json27
-rw-r--r--packages/sol-profiler/CHANGELOG.md4
-rw-r--r--packages/sol-profiler/package.json4
-rw-r--r--packages/sol-resolver/CHANGELOG.json9
-rw-r--r--packages/sol-trace/CHANGELOG.json18
-rw-r--r--packages/sol-trace/CHANGELOG.md4
-rw-r--r--packages/sol-trace/package.json4
-rw-r--r--packages/sol-trace/src/revert_trace_subprovider.ts17
-rw-r--r--packages/sol-tracing-utils/CHANGELOG.json48
-rw-r--r--packages/sol-tracing-utils/CHANGELOG.md6
-rw-r--r--packages/sol-tracing-utils/package.json3
-rw-r--r--packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts19
-rw-r--r--packages/sol-tracing-utils/src/collect_coverage_entries.ts14
-rw-r--r--packages/sol-tracing-utils/src/get_source_range_snippet.ts175
-rw-r--r--packages/sol-tracing-utils/src/trace_collection_subprovider.ts2
-rw-r--r--packages/sol-tracing-utils/src/trace_info_subprovider.ts2
-rw-r--r--packages/sol-tracing-utils/src/types.ts4
-rw-r--r--packages/sol-tracing-utils/src/utils.ts50
-rw-r--r--packages/sol-tracing-utils/test/collect_coverage_entries_test.ts3
-rw-r--r--packages/sra-spec/CHANGELOG.json9
-rw-r--r--packages/subproviders/CHANGELOG.json13
-rw-r--r--packages/subproviders/package.json4
-rw-r--r--packages/testnet-faucets/package.json4
-rw-r--r--packages/testnet-faucets/src/ts/dispense_asset_tasks.ts4
-rw-r--r--packages/testnet-faucets/src/ts/handler.ts6
-rw-r--r--packages/tslint-config/CHANGELOG.json9
-rw-r--r--packages/types/CHANGELOG.json9
-rw-r--r--packages/types/package.json2
-rw-r--r--packages/typescript-typings/CHANGELOG.json9
-rw-r--r--packages/typescript-typings/package.json2
-rw-r--r--packages/utils/CHANGELOG.json9
-rw-r--r--packages/utils/package.json4
-rw-r--r--packages/utils/src/abi_decoder.ts2
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/bool.ts4
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/int.ts6
-rw-r--r--packages/utils/src/abi_encoder/evm_data_types/uint.ts2
-rw-r--r--packages/utils/src/abi_encoder/utils/math.ts12
-rw-r--r--packages/utils/src/sign_typed_data_utils.ts5
-rw-r--r--packages/utils/test/abi_encoder/evm_data_types_test.ts2
-rw-r--r--packages/web3-wrapper/CHANGELOG.json13
-rw-r--r--packages/web3-wrapper/package.json6
-rw-r--r--packages/web3-wrapper/src/utils.ts8
-rw-r--r--packages/web3-wrapper/test/web3_wrapper_test.ts8
-rw-r--r--packages/website/md/docs/sol_coverage/installation.md2
-rw-r--r--packages/website/md/docs/sol_coverage/introduction.md2
-rw-r--r--packages/website/md/docs/sol_coverage/usage.md34
-rw-r--r--packages/website/md/docs/sol_profiler/installation.md2
-rw-r--r--packages/website/md/docs/sol_profiler/usage.md38
-rw-r--r--packages/website/md/docs/sol_trace/installation.md6
-rw-r--r--packages/website/md/docs/sol_trace/introduction.md2
-rw-r--r--packages/website/md/docs/sol_trace/usage.md44
-rw-r--r--packages/website/package.json6
-rw-r--r--packages/website/ts/blockchain.ts2
-rw-r--r--packages/website/ts/components/fill_order.tsx4
-rw-r--r--packages/website/ts/pages/documentation/docs_home.tsx77
-rw-r--r--packages/website/ts/types.ts5
-rw-r--r--packages/website/ts/utils/utils.ts2
-rw-r--r--tsconfig.json11
-rw-r--r--yarn.lock1134
451 files changed, 4159 insertions, 2786 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index f64017b56..d0115c47b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -43,10 +43,13 @@ jobs:
- repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn wsrun test:circleci @0x/contracts-multisig
- run: yarn wsrun test:circleci @0x/contracts-utils
- - run: yarn wsrun test:circleci @0x/contracts-libs
- - run: yarn wsrun test:circleci @0x/contracts-tokens
+ - run: yarn wsrun test:circleci @0x/contracts-exchange-libs
+ - run: yarn wsrun test:circleci @0x/contracts-erc20
+ - run: yarn wsrun test:circleci @0x/contracts-erc721
- run: yarn wsrun test:circleci @0x/contracts-extensions
- - run: yarn wsrun test:circleci @0x/contracts-protocol
+ - run: yarn wsrun test:circleci @0x/contracts-asset-proxy
+ - run: yarn wsrun test:circleci @0x/contracts-exchange
+ - run: yarn wsrun test:circleci @0x/contracts-exchange-forwarder
test-contracts-geth:
docker:
- image: circleci/node:9-browsers
@@ -59,11 +62,14 @@ jobs:
# HACK(albrow): we need to sleep 10 seconds to ensure the devnet is
# initialized
- run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test @0x/contracts-multisig
- - run: TEST_PROVIDER=geth yarn wsrun test @0x/contracts-utils
- - run: TEST_PROVIDER=geth yarn wsrun test @0x/contracts-libs
- - run: TEST_PROVIDER=geth yarn wsrun test @0x/contracts-tokens
- - run: TEST_PROVIDER=geth yarn wsrun test @0x/contracts-extensions
- - run: TEST_PROVIDER=geth yarn wsrun test @0x/contracts-protocol
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-utils
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange-libs
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-erc20
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-erc721
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-extensions
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-asset-proxy
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange
+ - run: TEST_PROVIDER=geth yarn wsrun test:circleci @0x/contracts-exchange-forwarder
test-publish:
resource_class: medium+
docker:
diff --git a/.gitignore b/.gitignore
index 0210edc4f..f055a9398 100644
--- a/.gitignore
+++ b/.gitignore
@@ -83,27 +83,29 @@ packages/react-docs/example/public/bundle*
packages/testnet-faucets/server/
# generated contract artifacts/
-contracts/protocol/generated-artifacts/
+contracts/exchange/generated-artifacts/
+contracts/asset-proxy/generated-artifacts/
contracts/multisig/generated-artifacts/
contracts/utils/generated-artifacts/
-contracts/libs/generated-artifacts/
-contracts/interfaces/generated-artifacts/
-contracts/tokens/generated-artifacts/
-contracts/examples/generated-artifacts/
+contracts/exchange-libs/generated-artifacts/
+contracts/erc20/generated-artifacts/
+contracts/erc721/generated-artifacts/
contracts/extensions/generated-artifacts/
+contracts/exchange-forwarder/generated-artifacts/
packages/sol-tracing-utils/test/fixtures/artifacts/
packages/metacoin/artifacts/
# generated contract wrappers
packages/abi-gen-wrappers/wrappers
-contracts/protocol/generated-wrappers/
+contracts/exchange/generated-wrappers/
+contracts/asset-proxy/generated-wrappers/
contracts/multisig/generated-wrappers/
contracts/utils/generated-wrappers/
-contracts/libs/generated-wrappers/
-contracts/interfaces/generated-wrappers/
-contracts/tokens/generated-wrappers/
-contracts/examples/generated-wrappers/
+contracts/exchange-libs/generated-wrappers/
+contracts/erc20/generated-wrappers/
+contracts/erc721/generated-wrappers/
contracts/extensions/generated-wrappers/
+contracts/exchange-forwarder/generated-wrappers/
packages/metacoin/src/contract_wrappers
# solc-bin in sol-compiler
diff --git a/.prettierignore b/.prettierignore
index a49091816..a72b5ed2a 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,21 +1,23 @@
lib
.nyc_output
-/contracts/protocol/generated-wrappers
-/contracts/protocol/generated-artifacts
+/contracts/exchange/generated-wrappers
+/contracts/exchange/generated-artifacts
+/contracts/asset-proxy/generated-wrappers
+/contracts/asset-proxy/generated-artifacts
/contracts/multisig/generated-wrappers
/contracts/multisig/generated-artifacts
/contracts/utils/generated-wrappers
/contracts/utils/generated-artifacts
-/contracts/libs/generated-wrappers
-/contracts/libs/generated-artifacts
-/contracts/interfaces/generated-wrappers
-/contracts/interfaces/generated-artifacts
-/contracts/tokens/generated-wrappers
-/contracts/tokens/generated-artifacts
-/contracts/examples/generated-wrappers
-/contracts/examples/generated-artifacts
+/contracts/exchange-libs/generated-wrappers
+/contracts/exchange-libs/generated-artifacts
+/contracts/erc20/generated-wrappers
+/contracts/erc20/generated-artifacts
+/contracts/erc721/generated-wrappers
+/contracts/erc721/generated-artifacts
/contracts/extensions/generated-wrappers
/contracts/extensions/generated-artifacts
+/contracts/exchange-forwarder/generated-wrappers
+/contracts/exchange-forwarder/generated-artifacts
/packages/abi-gen-wrappers/src/generated-wrappers
/packages/contract-artifacts/artifacts
/python-packages/contract_artifacts/src/zero_ex/contract_artifacts/artifacts
diff --git a/README.md b/README.md
index 12f9df7f8..b542124c0 100644
--- a/README.md
+++ b/README.md
@@ -32,6 +32,21 @@ Visit our [developer portal](https://0xproject.com/docs/order-utils) for a compr
| [`0x-order-utils`](/python-packages/order_utils) | [![PyPI](https://img.shields.io/pypi/v/0x-order-utils.svg)](https://pypi.org/project/0x-order-utils/) | A set of utilities for generating, parsing, signing and validating 0x orders |
| [`0x-sra-client`](/python-packages/sra_client) | [![PyPI](https://img.shields.io/pypi/v/0x-sra-client.svg)](https://pypi.org/project/0x-sra-client/) | A Python client for interacting with servers conforming to the Standard Relayer API specification |
+### Solidity Packages
+
+| Package | Version | Description |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [`@0x/contracts-asset-proxy`](/contracts/asset-proxy) | [![npm](https://img.shields.io/npm/v/@0x/contracts-asset-proxy.svg)](https://www.npmjs.com/package/@0x/contracts-asset-proxy) | [`AssetProxy`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxy) contracts used within the protocol |
+| [`@0x/contracts-erc20`](/contracts/erc20) | [![npm](https://img.shields.io/npm/v/@0x/contracts-erc20.svg)](https://www.npmjs.com/package/@0x/contracts-erc20) | Implementations of various ERC20 tokens |
+| [`@0x/contracts-erc721`](/contracts/erc721) | [![npm](https://img.shields.io/npm/v/@0x/contracts-erc721.svg)](https://www.npmjs.com/package/@0x/contracts-erc721) | Implementations of various ERC721 tokens |
+| [`@0x/contracts-exchange`](/contracts/exchange) | [![npm](https://img.shields.io/npm/v/@0x/contracts-exchange.svg)](https://www.npmjs.com/package/@0x/contracts-exchange) | The [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract used for settling trades within the protocol |
+| [`@0x/contracts-exchange-forwarder`](/contracts/exchange-forwarder) | [![npm](https://img.shields.io/npm/v/@0x/contracts-exchange-forwarder.svg)](https://www.npmjs.com/package/@0x/contracts-exchange-forwarder) | A [`Forwarder`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract used to simplify UX for interacting with the protocol |
+| [`@0x/contracts-exchange-libs`](/contracts/exchange-libs) | [![npm](https://img.shields.io/npm/v/@0x/contracts-exchange-libs.svg)](https://www.npmjs.com/package/@0x/contracts-exchange-libs) | Protocol specific Llbraries used within the [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract |
+| [`@0x/contracts-extensions`](/contracts/extensions) | [![npm](https://img.shields.io/npm/v/@0x/contracts-extensions.svg)](https://www.npmjs.com/package/@0x/contracts-extensions) | Contracts that interact with and extend the functionality of the core protocol |
+| [`@0x/contracts-multisig`](/contracts/multisig) | [![npm](https://img.shields.io/npm/v/@0x/contracts-multisig.svg)](https://www.npmjs.com/package/@0x/contracts-multisig) | Various implementations of multisignature wallets, including the [`AssetProxyOwner`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxyowner) contract that has permissions to upgrade the protocol |
+| [`@0x/contracts-test-utils`](/contracts/test-utils) | [![npm](https://img.shields.io/npm/v/@0x/contracts-test-utils.svg)](https://www.npmjs.com/package/@0x/contracts-test-utils) | Typescript/Javascript shared utilities used for testing contracts |
+| [`@0x/contracts-utils`](/contracts/utils) | [![npm](https://img.shields.io/npm/v/@0x/contracts-utils.svg)](https://www.npmjs.com/package/@0x/contracts-utils) | Generic libraries and utilities used throughout all of the contracts |
+
### Typescript/Javascript Packages
#### 0x-specific packages
@@ -84,7 +99,6 @@ Visit our [developer portal](https://0xproject.com/docs/order-utils) for a compr
| Package | Description |
| -------------------------------------------------- | -------------------------------------------------------------------------------- |
-| [`@0x/contracts`](/contracts/core) | 0x protocol solidity smart contracts & tests |
| [`@0x/instant`](/packages/instant) | A free and flexible way to offer simple crypto purchasing in any app or website. |
| [`@0x/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
| [`@0x/website`](/packages/website) | 0x website |
@@ -134,6 +148,12 @@ To build a specific package:
PKG=@0x/web3-wrapper yarn build
```
+To build all contracts packages:
+
+```bash
+yarn build:contracts
+```
+
### Watch
To re-build all packages on change:
@@ -206,3 +226,9 @@ Run a specific package's test:
```bash
PKG=@0x/web3-wrapper yarn test
```
+
+Run all contracts packages tests:
+
+```bash
+yarn test:contracts
+```
diff --git a/contracts/asset-proxy/CHANGELOG.json b/contracts/asset-proxy/CHANGELOG.json
new file mode 100644
index 000000000..9307f7da4
--- /dev/null
+++ b/contracts/asset-proxy/CHANGELOG.json
@@ -0,0 +1,11 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Move all AssetProxy contracts out of contracts-protocol to new package",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/protocol/CHANGELOG.md b/contracts/asset-proxy/CHANGELOG.md
index 05d2ae6e2..779eb68a7 100644
--- a/contracts/protocol/CHANGELOG.md
+++ b/contracts/asset-proxy/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v2.2.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v2.2.2 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/asset-proxy/DEPLOYS.json b/contracts/asset-proxy/DEPLOYS.json
new file mode 100644
index 000000000..0f25da1c3
--- /dev/null
+++ b/contracts/asset-proxy/DEPLOYS.json
@@ -0,0 +1,47 @@
+[
+ {
+ "name": "MultiAssetProxy",
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Add MultiAssetProxy implementation",
+ "pr": 1224,
+ "networks": {
+ "3": "0xab8fbd189c569ccdee3a4d929bb7f557be4028f6",
+ "4": "0xb34cde0ad3a83d04abebc0b66e75196f22216621",
+ "42": "0xf6313a772c222f51c28f2304c0703b8cf5428fd8"
+ }
+ }
+ ]
+ },
+ {
+ "name": "ERC20Proxy",
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "protocol v2 deploy",
+ "networks": {
+ "1": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
+ "3": "0xb1408f4c245a23c31b98d2c626777d4c0d766caa",
+ "4": "0x3e809c563c15a295e832e37053798ddc8d6c8dab",
+ "42": "0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e"
+ }
+ }
+ ]
+ },
+ {
+ "name": "ERC721Proxy",
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "protocol v2 deploy",
+ "networks": {
+ "1": "0x208e41fb445f1bb1b6780d58356e81405f3e6127",
+ "3": "0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4",
+ "4": "0x8e1ff02637cb5e39f2fa36c14706aa348b065b09",
+ "42": "0x2a9127c745688a165106c11cd4d647d2220af821"
+ }
+ }
+ ]
+ }
+]
diff --git a/contracts/protocol/README.md b/contracts/asset-proxy/README.md
index dc1f32c98..48a5b20a5 100644
--- a/contracts/protocol/README.md
+++ b/contracts/asset-proxy/README.md
@@ -1,15 +1,14 @@
-## Contracts
+## AssetProxy
-Smart contracts that implement the 0x protocol. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [CHANGELOG](./CHANGELOG.json) of this package.
+This package contains the implementations of all of the [`AssetProxy`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxy) contracts available within the 0x protocol. These contracts are responsible for decoding the `assetData` sent to them and performing the actual transfer of assets. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contracts that make up and interact with version 2.0.0 of the protocol can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [protocol](./contracts/protocol)
- - This directory contains the contracts that make up version 2.0.0. A full specification can be found [here](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
-- [test](./contracts/test)
- - This directory contains mocks and other contracts that are used solely for testing contracts within the other directories.
+```bash
+npm install @0x/contracts-asset-proxy --save
+```
## Bug bounty
@@ -42,13 +41,13 @@ yarn install
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
```bash
-PKG=@0x/contracts-protocol yarn build
+PKG=@0x/contracts-asset-proxy yarn build
```
Or continuously rebuild on change:
```bash
-PKG=@0x/contracts-protocol yarn watch
+PKG=@0x/contracts-asset-proxy yarn watch
```
### Clean
diff --git a/contracts/protocol/compiler.json b/contracts/asset-proxy/compiler.json
index 10e5bb0a1..6a077e965 100644
--- a/contracts/protocol/compiler.json
+++ b/contracts/asset-proxy/compiler.json
@@ -19,16 +19,12 @@
}
},
"contracts": [
- "AssetProxyOwner",
+ "IAssetData",
+ "IAssetProxy",
+ "IAuthorizable",
"ERC20Proxy",
"ERC721Proxy",
- "Exchange",
"MixinAuthorizable",
- "MultiAssetProxy",
- "TestAssetProxyOwner",
- "TestAssetProxyDispatcher",
- "TestExchangeInternals",
- "TestSignatureValidator",
- "TestStaticCallReceiver"
+ "MultiAssetProxy"
]
}
diff --git a/contracts/protocol/contracts/protocol/AssetProxy/ERC20Proxy.sol b/contracts/asset-proxy/contracts/src/ERC20Proxy.sol
index 258443bca..258443bca 100644
--- a/contracts/protocol/contracts/protocol/AssetProxy/ERC20Proxy.sol
+++ b/contracts/asset-proxy/contracts/src/ERC20Proxy.sol
diff --git a/contracts/protocol/contracts/protocol/AssetProxy/ERC721Proxy.sol b/contracts/asset-proxy/contracts/src/ERC721Proxy.sol
index 65b664b8b..65b664b8b 100644
--- a/contracts/protocol/contracts/protocol/AssetProxy/ERC721Proxy.sol
+++ b/contracts/asset-proxy/contracts/src/ERC721Proxy.sol
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinAssetProxyDispatcher.sol b/contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol
index 2922a8c1a..36c287ea3 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinAssetProxyDispatcher.sol
+++ b/contracts/asset-proxy/contracts/src/MixinAssetProxyDispatcher.sol
@@ -18,9 +18,9 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
import "./mixins/MAssetProxyDispatcher.sol";
-import "@0x/contracts-interfaces/contracts/protocol/AssetProxy/IAssetProxy.sol";
+import "./interfaces/IAssetProxy.sol";
contract MixinAssetProxyDispatcher is
diff --git a/contracts/protocol/contracts/protocol/AssetProxy/MixinAuthorizable.sol b/contracts/asset-proxy/contracts/src/MixinAuthorizable.sol
index b610ef709..ace820625 100644
--- a/contracts/protocol/contracts/protocol/AssetProxy/MixinAuthorizable.sol
+++ b/contracts/asset-proxy/contracts/src/MixinAuthorizable.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
import "./mixins/MAuthorizable.sol";
diff --git a/contracts/protocol/contracts/protocol/AssetProxy/MultiAssetProxy.sol b/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol
index 5f559163c..0b2cb4134 100644
--- a/contracts/protocol/contracts/protocol/AssetProxy/MultiAssetProxy.sol
+++ b/contracts/asset-proxy/contracts/src/MultiAssetProxy.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "../Exchange/MixinAssetProxyDispatcher.sol";
+import "./MixinAssetProxyDispatcher.sol";
import "./MixinAuthorizable.sol";
diff --git a/contracts/interfaces/contracts/protocol/AssetProxy/IAssetData.sol b/contracts/asset-proxy/contracts/src/interfaces/IAssetData.sol
index a130e615f..a130e615f 100644
--- a/contracts/interfaces/contracts/protocol/AssetProxy/IAssetData.sol
+++ b/contracts/asset-proxy/contracts/src/interfaces/IAssetData.sol
diff --git a/contracts/interfaces/contracts/protocol/AssetProxy/IAssetProxy.sol b/contracts/asset-proxy/contracts/src/interfaces/IAssetProxy.sol
index 706412dd0..706412dd0 100644
--- a/contracts/interfaces/contracts/protocol/AssetProxy/IAssetProxy.sol
+++ b/contracts/asset-proxy/contracts/src/interfaces/IAssetProxy.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IAssetProxyDispatcher.sol b/contracts/asset-proxy/contracts/src/interfaces/IAssetProxyDispatcher.sol
index b73881c07..b73881c07 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IAssetProxyDispatcher.sol
+++ b/contracts/asset-proxy/contracts/src/interfaces/IAssetProxyDispatcher.sol
diff --git a/contracts/interfaces/contracts/protocol/AssetProxy/IAuthorizable.sol b/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol
index 202173998..0df654711 100644
--- a/contracts/interfaces/contracts/protocol/AssetProxy/IAuthorizable.sol
+++ b/contracts/asset-proxy/contracts/src/interfaces/IAuthorizable.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/Ownable/IOwnable.sol";
+import "@0x/contracts-utils/contracts/src/interfaces/IOwnable.sol";
contract IAuthorizable is
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MAssetProxyDispatcher.sol b/contracts/asset-proxy/contracts/src/mixins/MAssetProxyDispatcher.sol
index 05c2c4c0b..0ae555dda 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MAssetProxyDispatcher.sol
+++ b/contracts/asset-proxy/contracts/src/mixins/MAssetProxyDispatcher.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IAssetProxyDispatcher.sol";
+import "../interfaces/IAssetProxyDispatcher.sol";
contract MAssetProxyDispatcher is
diff --git a/contracts/protocol/contracts/protocol/AssetProxy/mixins/MAuthorizable.sol b/contracts/asset-proxy/contracts/src/mixins/MAuthorizable.sol
index 6c3f70500..c9c07e788 100644
--- a/contracts/protocol/contracts/protocol/AssetProxy/mixins/MAuthorizable.sol
+++ b/contracts/asset-proxy/contracts/src/mixins/MAuthorizable.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/AssetProxy/IAuthorizable.sol";
+import "../interfaces/IAuthorizable.sol";
contract MAuthorizable is
diff --git a/contracts/asset-proxy/package.json b/contracts/asset-proxy/package.json
new file mode 100644
index 000000000..6d4ba8b8b
--- /dev/null
+++ b/contracts/asset-proxy/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "@0x/contracts-asset-proxy",
+ "version": "1.0.0",
+ "engines": {
+ "node": ">=6.12"
+ },
+ "description": "Smart contract components of 0x protocol",
+ "main": "lib/src/index.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "build": "yarn pre_build && tsc -b",
+ "build:ci": "yarn build",
+ "pre_build": "run-s compile generate_contract_wrappers",
+ "test": "yarn run_mocha",
+ "rebuild_and_test": "run-s build test",
+ "test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
+ "test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
+ "test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
+ "run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
+ "compile": "sol-compiler",
+ "watch": "sol-compiler -w",
+ "clean": "shx rm -rf lib generated-artifacts generated-wrappers",
+ "generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
+ "lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
+ "coverage:report:text": "istanbul report text",
+ "coverage:report:html": "istanbul report html && open coverage/index.html",
+ "profiler:report:html": "istanbul report html && open coverage/index.html",
+ "coverage:report:lcov": "istanbul report lcov",
+ "test:circleci": "yarn test",
+ "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
+ },
+ "config": {
+ "abis": "generated-artifacts/@(ERC20Proxy|ERC721Proxy|IAssetData|IAssetProxy|IAuthorizable|MixinAuthorizable|MultiAssetProxy).json"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/0xProject/0x-monorepo.git"
+ },
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/0xProject/0x-monorepo/issues"
+ },
+ "homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md",
+ "devDependencies": {
+ "@0x/abi-gen": "^1.0.22",
+ "@0x/dev-utils": "^1.0.24",
+ "@0x/sol-compiler": "^2.0.2",
+ "@0x/tslint-config": "^2.0.2",
+ "@types/lodash": "4.14.104",
+ "@types/node": "*",
+ "chai": "^4.0.1",
+ "chai-as-promised": "^7.1.0",
+ "chai-bignumber": "^3.0.0",
+ "dirty-chai": "^2.0.1",
+ "make-promises-safe": "^1.1.0",
+ "mocha": "^4.1.0",
+ "npm-run-all": "^4.1.2",
+ "shx": "^0.2.2",
+ "solhint": "^1.4.1",
+ "tslint": "5.11.0",
+ "typescript": "3.0.1"
+ },
+ "dependencies": {
+ "@0x/base-contract": "^3.0.13",
+ "@0x/contracts-test-utils": "^2.0.1",
+ "@0x/contracts-erc20": "^1.0.0",
+ "@0x/contracts-erc721": "^1.0.0",
+ "@0x/contracts-utils": "^3.0.0",
+ "@0x/order-utils": "^3.1.2",
+ "@0x/types": "^1.5.2",
+ "@0x/typescript-typings": "^3.0.8",
+ "@0x/utils": "^3.0.1",
+ "@0x/web3-wrapper": "^3.2.4",
+ "ethereum-types": "^1.1.6",
+ "lodash": "^4.17.5"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/contracts/asset-proxy/src/artifacts/index.ts b/contracts/asset-proxy/src/artifacts/index.ts
new file mode 100644
index 000000000..7f3060815
--- /dev/null
+++ b/contracts/asset-proxy/src/artifacts/index.ts
@@ -0,0 +1,19 @@
+import { ContractArtifact } from 'ethereum-types';
+
+import * as ERC20Proxy from '../../generated-artifacts/ERC20Proxy.json';
+import * as ERC721Proxy from '../../generated-artifacts/ERC721Proxy.json';
+import * as IAssetData from '../../generated-artifacts/IAssetData.json';
+import * as IAssetProxy from '../../generated-artifacts/IAssetProxy.json';
+import * as IAuthorizable from '../../generated-artifacts/IAuthorizable.json';
+import * as MixinAuthorizable from '../../generated-artifacts/MixinAuthorizable.json';
+import * as MultiAssetProxy from '../../generated-artifacts/MultiAssetProxy.json';
+
+export const artifacts = {
+ IAuthorizable: IAuthorizable as ContractArtifact,
+ IAssetData: IAssetData as ContractArtifact,
+ IAssetProxy: IAssetProxy as ContractArtifact,
+ ERC20Proxy: ERC20Proxy as ContractArtifact,
+ ERC721Proxy: ERC721Proxy as ContractArtifact,
+ MixinAuthorizable: MixinAuthorizable as ContractArtifact,
+ MultiAssetProxy: MultiAssetProxy as ContractArtifact,
+};
diff --git a/contracts/protocol/src/index.ts b/contracts/asset-proxy/src/index.ts
index ba813e7ca..ba813e7ca 100644
--- a/contracts/protocol/src/index.ts
+++ b/contracts/asset-proxy/src/index.ts
diff --git a/contracts/asset-proxy/src/wrappers/index.ts b/contracts/asset-proxy/src/wrappers/index.ts
new file mode 100644
index 000000000..6aecbc086
--- /dev/null
+++ b/contracts/asset-proxy/src/wrappers/index.ts
@@ -0,0 +1,7 @@
+export * from '../../generated-wrappers/i_asset_data';
+export * from '../../generated-wrappers/i_asset_proxy';
+export * from '../../generated-wrappers/erc20_proxy';
+export * from '../../generated-wrappers/erc721_proxy';
+export * from '../../generated-wrappers/mixin_authorizable';
+export * from '../../generated-wrappers/multi_asset_proxy';
+export * from '../../generated-wrappers/i_authorizable';
diff --git a/contracts/protocol/test/asset_proxy/authorizable.ts b/contracts/asset-proxy/test/authorizable.ts
index 853d18be0..087121235 100644
--- a/contracts/protocol/test/asset_proxy/authorizable.ts
+++ b/contracts/asset-proxy/test/authorizable.ts
@@ -12,8 +12,7 @@ import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { MixinAuthorizableContract } from '../../generated-wrappers/mixin_authorizable';
-import { artifacts } from '../../src/artifacts';
+import { artifacts, MixinAuthorizableContract } from '../src';
chaiSetup.configure();
const expect = chai.expect;
diff --git a/contracts/tokens/test/global_hooks.ts b/contracts/asset-proxy/test/global_hooks.ts
index f8ace376a..f8ace376a 100644
--- a/contracts/tokens/test/global_hooks.ts
+++ b/contracts/asset-proxy/test/global_hooks.ts
diff --git a/contracts/protocol/test/asset_proxy/proxies.ts b/contracts/asset-proxy/test/proxies.ts
index bbb44f402..797787135 100644
--- a/contracts/protocol/test/asset_proxy/proxies.ts
+++ b/contracts/asset-proxy/test/proxies.ts
@@ -1,4 +1,15 @@
-import { artifacts as interfacesArtifacts, IAssetDataContract, IAssetProxyContract } from '@0x/contracts-interfaces';
+import {
+ artifacts as erc20Artifacts,
+ DummyERC20TokenContract,
+ DummyERC20TokenTransferEventArgs,
+ DummyMultipleReturnERC20TokenContract,
+ DummyNoReturnERC20TokenContract,
+} from '@0x/contracts-erc20';
+import {
+ artifacts as erc721Artifacts,
+ DummyERC721ReceiverContract,
+ DummyERC721TokenContract,
+} from '@0x/contracts-erc721';
import {
chaiSetup,
constants,
@@ -9,15 +20,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokensArtifacts,
- DummyERC20TokenContract,
- DummyERC20TokenTransferEventArgs,
- DummyERC721ReceiverContract,
- DummyERC721TokenContract,
- DummyMultipleReturnERC20TokenContract,
- DummyNoReturnERC20TokenContract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { RevertReason } from '@0x/types';
@@ -26,23 +28,27 @@ import * as chai from 'chai';
import { LogWithDecodedArgs } from 'ethereum-types';
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
-import { MultiAssetProxyContract } from '../../generated-wrappers/multi_asset_proxy';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ERC721Wrapper } from '../utils/erc721_wrapper';
+import {
+ artifacts,
+ ERC20ProxyContract,
+ ERC20Wrapper,
+ ERC721ProxyContract,
+ ERC721Wrapper,
+ IAssetDataContract,
+ IAssetProxyContract,
+ MultiAssetProxyContract,
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
const assetProxyInterface = new IAssetProxyContract(
- interfacesArtifacts.IAssetProxy.compilerOutput.abi,
+ artifacts.IAssetProxy.compilerOutput.abi,
constants.NULL_ADDRESS,
provider,
);
const assetDataInterface = new IAssetDataContract(
- interfacesArtifacts.IAssetData.compilerOutput.abi,
+ artifacts.IAssetData.compilerOutput.abi,
constants.NULL_ADDRESS,
provider,
);
@@ -148,7 +154,7 @@ describe('Asset Transfer Proxies', () => {
constants.DUMMY_TOKEN_DECIMALS,
);
noReturnErc20Token = await DummyNoReturnERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.DummyNoReturnERC20Token,
+ erc20Artifacts.DummyNoReturnERC20Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
@@ -157,7 +163,7 @@ describe('Asset Transfer Proxies', () => {
constants.DUMMY_TOKEN_TOTAL_SUPPLY,
);
multipleReturnErc20Token = await DummyMultipleReturnERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.DummyMultipleReturnERC20Token,
+ erc20Artifacts.DummyMultipleReturnERC20Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
@@ -198,7 +204,7 @@ describe('Asset Transfer Proxies', () => {
// Deploy and configure ERC721 tokens and receiver
[erc721TokenA, erc721TokenB] = await erc721Wrapper.deployDummyTokensAsync();
erc721Receiver = await DummyERC721ReceiverContract.deployFrom0xArtifactAsync(
- tokensArtifacts.DummyERC721Receiver,
+ erc721Artifacts.DummyERC721Receiver,
provider,
txDefaults,
);
@@ -259,7 +265,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(amount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(amount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(amount),
);
});
@@ -318,7 +324,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(amount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(amount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(amount),
);
});
@@ -562,7 +568,7 @@ describe('Asset Transfer Proxies', () => {
erc721Receiver.address,
amount,
);
- const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...tokensArtifacts });
+ const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc721Artifacts });
const tx = await logDecoder.getTxWithDecodedLogsAsync(
await web3Wrapper.sendTransactionAsync({
to: erc721Proxy.address,
@@ -737,7 +743,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalAmount),
);
});
it('should dispatch an ERC20 transfer when input amount is 0', async () => {
@@ -754,7 +760,7 @@ describe('Asset Transfer Proxies', () => {
inputAmount,
);
const erc20Balances = await erc20Wrapper.getBalancesAsync();
- const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...tokensArtifacts });
+ const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts });
const tx = await logDecoder.getTxWithDecodedLogsAsync(
await web3Wrapper.sendTransactionAsync({
to: multiAssetProxy.address,
@@ -800,7 +806,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalAmount),
);
});
it('should successfully transfer multiple different ERC20 tokens', async () => {
@@ -834,13 +840,13 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalErc20AAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalErc20AAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalErc20AAmount),
);
expect(newBalances[fromAddress][erc20TokenB.address]).to.be.bignumber.equal(
erc20Balances[fromAddress][erc20TokenB.address].minus(totalErc20BAmount),
);
expect(newBalances[toAddress][erc20TokenB.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenB.address].add(totalErc20BAmount),
+ erc20Balances[toAddress][erc20TokenB.address].plus(totalErc20BAmount),
);
});
it('should transfer a single ERC721 token', async () => {
@@ -970,7 +976,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalAmount),
);
const newOwnerFromAsset = await erc721TokenA.ownerOf.callAsync(erc721AFromTokenId);
expect(newOwnerFromAsset).to.be.equal(toAddress);
@@ -1008,7 +1014,7 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalAmount),
);
const newOwnerFromAsset = await erc721TokenA.ownerOf.callAsync(erc721AFromTokenId);
expect(newOwnerFromAsset).to.be.equal(toAddress);
@@ -1044,13 +1050,13 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalErc20AAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalErc20AAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalErc20AAmount),
);
expect(newBalances[fromAddress][erc20TokenB.address]).to.be.bignumber.equal(
erc20Balances[fromAddress][erc20TokenB.address].minus(totalErc20BAmount),
);
expect(newBalances[toAddress][erc20TokenB.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenB.address].add(totalErc20BAmount),
+ erc20Balances[toAddress][erc20TokenB.address].plus(totalErc20BAmount),
);
});
it('should successfully transfer a large amount of tokens', async () => {
@@ -1122,13 +1128,13 @@ describe('Asset Transfer Proxies', () => {
erc20Balances[fromAddress][erc20TokenA.address].minus(totalErc20AAmount),
);
expect(newBalances[toAddress][erc20TokenA.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenA.address].add(totalErc20AAmount),
+ erc20Balances[toAddress][erc20TokenA.address].plus(totalErc20AAmount),
);
expect(newBalances[fromAddress][erc20TokenB.address]).to.be.bignumber.equal(
erc20Balances[fromAddress][erc20TokenB.address].minus(totalErc20BAmount),
);
expect(newBalances[toAddress][erc20TokenB.address]).to.be.bignumber.equal(
- erc20Balances[toAddress][erc20TokenB.address].add(totalErc20BAmount),
+ erc20Balances[toAddress][erc20TokenB.address].plus(totalErc20BAmount),
);
});
it('should revert if a single transfer fails', async () => {
diff --git a/contracts/protocol/test/utils/erc20_wrapper.ts b/contracts/asset-proxy/test/utils/erc20_wrapper.ts
index e5ab0e36c..12cd06ece 100644
--- a/contracts/protocol/test/utils/erc20_wrapper.ts
+++ b/contracts/asset-proxy/test/utils/erc20_wrapper.ts
@@ -1,5 +1,5 @@
+import { artifacts as tokensArtifacts, DummyERC20TokenContract } from '@0x/contracts-erc20';
import { constants, ERC20BalancesByOwner, txDefaults } from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts, DummyERC20TokenContract } from '@0x/contracts-tokens';
import { assetDataUtils } from '@0x/order-utils';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
diff --git a/contracts/protocol/test/utils/erc721_wrapper.ts b/contracts/asset-proxy/test/utils/erc721_wrapper.ts
index 1f658ce86..fc43d8c52 100644
--- a/contracts/protocol/test/utils/erc721_wrapper.ts
+++ b/contracts/asset-proxy/test/utils/erc721_wrapper.ts
@@ -1,5 +1,5 @@
+import { artifacts as tokensArtifacts, DummyERC721TokenContract } from '@0x/contracts-erc721';
import { constants, ERC721TokenIdsByOwner, txDefaults } from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts, DummyERC721TokenContract } from '@0x/contracts-tokens';
import { generatePseudoRandomSalt } from '@0x/order-utils';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
diff --git a/contracts/protocol/test/utils/index.ts b/contracts/asset-proxy/test/utils/index.ts
index 75cd88666..b11f6a45d 100644
--- a/contracts/protocol/test/utils/index.ts
+++ b/contracts/asset-proxy/test/utils/index.ts
@@ -1,3 +1,2 @@
-export * from './exchange_wrapper';
export * from './erc20_wrapper';
export * from './erc721_wrapper';
diff --git a/contracts/asset-proxy/tsconfig.json b/contracts/asset-proxy/tsconfig.json
new file mode 100644
index 000000000..7baa48cbe
--- /dev/null
+++ b/contracts/asset-proxy/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../tsconfig",
+ "compilerOptions": {
+ "outDir": "lib",
+ "rootDir": ".",
+ "resolveJsonModule": true
+ },
+ "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
+ "files": [
+ "./generated-artifacts/IAssetData.json",
+ "./generated-artifacts/IAssetProxy.json",
+ "./generated-artifacts/IAuthorizable.json",
+ "./generated-artifacts/ERC20Proxy.json",
+ "./generated-artifacts/ERC721Proxy.json",
+ "./generated-artifacts/MixinAuthorizable.json",
+ "./generated-artifacts/MultiAssetProxy.json"
+ ],
+ "exclude": ["./deploy/solc/solc_bin"]
+}
diff --git a/contracts/tokens/tslint.json b/contracts/asset-proxy/tslint.json
index 1bb3ac2a2..1bb3ac2a2 100644
--- a/contracts/tokens/tslint.json
+++ b/contracts/asset-proxy/tslint.json
diff --git a/contracts/erc20/.solhintignore b/contracts/erc20/.solhintignore
new file mode 100644
index 000000000..ededa90be
--- /dev/null
+++ b/contracts/erc20/.solhintignore
@@ -0,0 +1 @@
+contracts/src/ZRXToken.sol
diff --git a/contracts/erc20/CHANGELOG.json b/contracts/erc20/CHANGELOG.json
new file mode 100644
index 000000000..93f284234
--- /dev/null
+++ b/contracts/erc20/CHANGELOG.json
@@ -0,0 +1,11 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Move all ERC20 contracts out of contracts-tokens to new package",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/interfaces/CHANGELOG.md b/contracts/erc20/CHANGELOG.md
index 6d53a0b9c..59d0804da 100644
--- a/contracts/interfaces/CHANGELOG.md
+++ b/contracts/erc20/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.6 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.5 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/tokens/DEPLOYS.json b/contracts/erc20/DEPLOYS.json
index 5ff58c035..e165b37b3 100644
--- a/contracts/tokens/DEPLOYS.json
+++ b/contracts/erc20/DEPLOYS.json
@@ -8,6 +8,7 @@
"networks": {
"1": "0xe41d2489571d322189246dafa5ebde1f4699f498",
"3": "0xff67881f8d12f372d91baae9752eb3631ff0ed00",
+ "4": "0x2727e688b8fd40b198cd5fe6e408e00494a06f07",
"42": "0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa"
}
}
diff --git a/contracts/interfaces/README.md b/contracts/erc20/README.md
index 81dd4c3ac..e1214c00c 100644
--- a/contracts/interfaces/README.md
+++ b/contracts/erc20/README.md
@@ -1,13 +1,14 @@
-## Contract interfaces
+## ERC20 Tokens
-Smart contract interfaces of the 0x protocol.
+This package contains implementations of various [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md) tokens, including WETH (Wrapped Ether) and ZRX. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contracts that make up and interact with version 2.0.0 of the protocol can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [protocol](./contracts/protocol)
- - This directory contains the contract interfaces that make up version 2.0.0. A full specification can be found [here](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
+```bash
+npm install @0x/contracts-erc20 --save
+```
## Bug bounty
@@ -40,13 +41,13 @@ yarn install
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
```bash
-PKG=@0x/contracts-interfaces yarn build
+PKG=@0x/contracts-erc20 yarn build
```
Or continuously rebuild on change:
```bash
-PKG=@0x/contracts-interfaces yarn watch
+PKG=@0x/contracts-erc20 yarn watch
```
### Clean
diff --git a/contracts/tokens/compiler.json b/contracts/erc20/compiler.json
index 498c5d826..58fc8ea9b 100644
--- a/contracts/tokens/compiler.json
+++ b/contracts/erc20/compiler.json
@@ -22,23 +22,13 @@
"DummyERC20Token",
"DummyMultipleReturnERC20Token",
"DummyNoReturnERC20Token",
- "DummyERC721Receiver",
- "InvalidERC721Receiver",
- "DummyERC721Token",
"ReentrantERC20Token",
"ERC20Token",
"IERC20Token",
"MintableERC20Token",
"UnlimitedAllowanceERC20Token",
- "ERC721Token",
- "IERC721Receiver",
- "IERC721Token",
- "MintableERC721Token",
"IEtherToken",
"WETH9",
- "ERC20Token_v1",
- "Token_v1",
- "UnlimitedAllowanceToken_v1",
"ZRXToken"
]
}
diff --git a/contracts/tokens/contracts/tokens/ERC20Token/ERC20Token.sol b/contracts/erc20/contracts/src/ERC20Token.sol
index 190eead76..b6e9d0f9f 100644
--- a/contracts/tokens/contracts/tokens/ERC20Token/ERC20Token.sol
+++ b/contracts/erc20/contracts/src/ERC20Token.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "./IERC20Token.sol";
+import "./interfaces/IERC20Token.sol";
contract ERC20Token is
diff --git a/contracts/tokens/contracts/tokens/ERC20Token/MintableERC20Token.sol b/contracts/erc20/contracts/src/MintableERC20Token.sol
index a66031f03..1108db53d 100644
--- a/contracts/tokens/contracts/tokens/ERC20Token/MintableERC20Token.sol
+++ b/contracts/erc20/contracts/src/MintableERC20Token.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/SafeMath/SafeMath.sol";
+import "@0x/contracts-utils/contracts/src/SafeMath.sol";
import "./UnlimitedAllowanceERC20Token.sol";
diff --git a/contracts/tokens/contracts/tokens/ERC20Token/UnlimitedAllowanceERC20Token.sol b/contracts/erc20/contracts/src/UnlimitedAllowanceERC20Token.sol
index 869d16147..3a43c250d 100644
--- a/contracts/tokens/contracts/tokens/ERC20Token/UnlimitedAllowanceERC20Token.sol
+++ b/contracts/erc20/contracts/src/UnlimitedAllowanceERC20Token.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "../ERC20Token/ERC20Token.sol";
+import "./ERC20Token.sol";
contract UnlimitedAllowanceERC20Token is
diff --git a/contracts/tokens/contracts/tokens/EtherToken/WETH9.sol b/contracts/erc20/contracts/src/WETH9.sol
index 17876b86d..17876b86d 100644
--- a/contracts/tokens/contracts/tokens/EtherToken/WETH9.sol
+++ b/contracts/erc20/contracts/src/WETH9.sol
diff --git a/contracts/erc20/contracts/src/ZRXToken.sol b/contracts/erc20/contracts/src/ZRXToken.sol
new file mode 100644
index 000000000..75e4dc0a9
--- /dev/null
+++ b/contracts/erc20/contracts/src/ZRXToken.sol
@@ -0,0 +1,150 @@
+/*
+
+ 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.4.11;
+
+
+contract Token {
+
+ /// @return total amount of tokens
+ function totalSupply() constant returns (uint supply) {}
+
+ /// @param _owner The address from which the balance will be retrieved
+ /// @return The balance
+ function balanceOf(address _owner) constant returns (uint balance) {}
+
+ /// @notice send `_value` token to `_to` from `msg.sender`
+ /// @param _to The address of the recipient
+ /// @param _value The amount of token to be transferred
+ /// @return Whether the transfer was successful or not
+ function transfer(address _to, uint _value) returns (bool success) {}
+
+ /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
+ /// @param _from The address of the sender
+ /// @param _to The address of the recipient
+ /// @param _value The amount of token to be transferred
+ /// @return Whether the transfer was successful or not
+ function transferFrom(address _from, address _to, uint _value) returns (bool success) {}
+
+ /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
+ /// @param _spender The address of the account able to transfer the tokens
+ /// @param _value The amount of wei to be approved for transfer
+ /// @return Whether the approval was successful or not
+ function approve(address _spender, uint _value) returns (bool success) {}
+
+ /// @param _owner The address of the account owning tokens
+ /// @param _spender The address of the account able to transfer the tokens
+ /// @return Amount of remaining tokens allowed to spent
+ function allowance(address _owner, address _spender) constant returns (uint remaining) {}
+
+ event Transfer(address indexed _from, address indexed _to, uint _value);
+ event Approval(address indexed _owner, address indexed _spender, uint _value);
+}
+
+
+contract ERC20Token is Token {
+
+ function transfer(address _to, uint _value) returns (bool) {
+ //Default assumes totalSupply can't be over max (2^256 - 1).
+ if (balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
+ balances[msg.sender] -= _value;
+ balances[_to] += _value;
+ Transfer(msg.sender, _to, _value);
+ return true;
+ } else { return false; }
+ }
+
+ function transferFrom(address _from, address _to, uint _value) returns (bool) {
+ if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
+ balances[_to] += _value;
+ balances[_from] -= _value;
+ allowed[_from][msg.sender] -= _value;
+ Transfer(_from, _to, _value);
+ return true;
+ } else { return false; }
+ }
+
+ function balanceOf(address _owner) constant returns (uint) {
+ return balances[_owner];
+ }
+
+ function approve(address _spender, uint _value) returns (bool) {
+ allowed[msg.sender][_spender] = _value;
+ Approval(msg.sender, _spender, _value);
+ return true;
+ }
+
+ function allowance(address _owner, address _spender) constant returns (uint) {
+ return allowed[_owner][_spender];
+ }
+
+ mapping (address => uint) balances;
+ mapping (address => mapping (address => uint)) allowed;
+ uint public totalSupply;
+}
+
+
+contract UnlimitedAllowanceToken is ERC20Token {
+
+ uint constant MAX_UINT = 2**256 - 1;
+
+ /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.
+ /// @param _from Address to transfer from.
+ /// @param _to Address to transfer to.
+ /// @param _value Amount to transfer.
+ /// @return Success of transfer.
+ function transferFrom(address _from, address _to, uint _value)
+ public
+ returns (bool)
+ {
+ uint allowance = allowed[_from][msg.sender];
+ if (balances[_from] >= _value
+ && allowance >= _value
+ && balances[_to] + _value >= balances[_to]
+ ) {
+ balances[_to] += _value;
+ balances[_from] -= _value;
+ if (allowance < MAX_UINT) {
+ allowed[_from][msg.sender] -= _value;
+ }
+ Transfer(_from, _to, _value);
+ return true;
+ } else {
+ return false;
+ }
+ }
+}
+
+
+contract ZRXToken is
+ UnlimitedAllowanceToken
+{
+
+ // solhint-disable const-name-snakecase
+ uint8 constant public decimals = 18;
+ uint256 public totalSupply = 10**27; // 1 billion tokens, 18 decimal places
+ string constant public name = "0x Protocol Token";
+ string constant public symbol = "ZRX";
+ // solhint-enableconst-name-snakecase
+
+ function ZRXToken()
+ public
+ {
+ balances[msg.sender] = totalSupply;
+ }
+}
diff --git a/contracts/tokens/contracts/tokens/ERC20Token/IERC20Token.sol b/contracts/erc20/contracts/src/interfaces/IERC20Token.sol
index 9f9b89585..9f9b89585 100644
--- a/contracts/tokens/contracts/tokens/ERC20Token/IERC20Token.sol
+++ b/contracts/erc20/contracts/src/interfaces/IERC20Token.sol
diff --git a/contracts/tokens/contracts/tokens/EtherToken/IEtherToken.sol b/contracts/erc20/contracts/src/interfaces/IEtherToken.sol
index 32baa3eb0..cb07cae6f 100644
--- a/contracts/tokens/contracts/tokens/EtherToken/IEtherToken.sol
+++ b/contracts/erc20/contracts/src/interfaces/IEtherToken.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "../ERC20Token/IERC20Token.sol";
+import "./IERC20Token.sol";
contract IEtherToken is
diff --git a/contracts/tokens/contracts/test/DummyERC20Token/DummyERC20Token.sol b/contracts/erc20/contracts/test/DummyERC20Token.sol
index 33028db0c..39e739a91 100644
--- a/contracts/tokens/contracts/test/DummyERC20Token/DummyERC20Token.sol
+++ b/contracts/erc20/contracts/test/DummyERC20Token.sol
@@ -18,8 +18,8 @@
pragma solidity 0.4.24;
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
-import "../../tokens/ERC20Token/MintableERC20Token.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
+import "../src/MintableERC20Token.sol";
contract DummyERC20Token is
diff --git a/contracts/tokens/contracts/test/DummyERC20Token/DummyMultipleReturnERC20Token.sol b/contracts/erc20/contracts/test/DummyMultipleReturnERC20Token.sol
index 733d4437e..733d4437e 100644
--- a/contracts/tokens/contracts/test/DummyERC20Token/DummyMultipleReturnERC20Token.sol
+++ b/contracts/erc20/contracts/test/DummyMultipleReturnERC20Token.sol
diff --git a/contracts/tokens/contracts/test/DummyERC20Token/DummyNoReturnERC20Token.sol b/contracts/erc20/contracts/test/DummyNoReturnERC20Token.sol
index e16825a16..e16825a16 100644
--- a/contracts/tokens/contracts/test/DummyERC20Token/DummyNoReturnERC20Token.sol
+++ b/contracts/erc20/contracts/test/DummyNoReturnERC20Token.sol
diff --git a/contracts/tokens/contracts/test/ReentrantERC20Token/ReentrantERC20Token.sol b/contracts/erc20/contracts/test/ReentrantERC20Token.sol
index d8c65929d..0629754c0 100644
--- a/contracts/tokens/contracts/test/ReentrantERC20Token/ReentrantERC20Token.sol
+++ b/contracts/erc20/contracts/test/ReentrantERC20Token.sol
@@ -19,10 +19,10 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "../../tokens/ERC20Token/ERC20Token.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "../src/ERC20Token.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
// solhint-disable no-unused-vars
diff --git a/contracts/tokens/package.json b/contracts/erc20/package.json
index c896d122d..7616b9ccf 100644
--- a/contracts/tokens/package.json
+++ b/contracts/erc20/package.json
@@ -1,6 +1,6 @@
{
- "name": "@0x/contracts-tokens",
- "version": "1.0.5",
+ "name": "@0x/contracts-erc20",
+ "version": "1.0.0",
"engines": {
"node": ">=6.12"
},
@@ -32,7 +32,7 @@
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
},
"config": {
- "abis": "generated-artifacts/@(DummyERC20Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|DummyERC721Receiver|InvalidERC721Receiver|DummyERC721Token|ReentrantERC20Token|ERC20Token|IERC20Token|MintableERC20Token|UnlimitedAllowanceERC20Token|ERC721Token|IERC721Receiver|IERC721Token|MintableERC721Token|IEtherToken|WETH9|ERC20Token_v1|Token_v1|UnlimitedAllowanceToken_v1|ZRXToken).json"
+ "abis": "generated-artifacts/@(DummyERC20Token|DummyMultipleReturnERC20Token|DummyNoReturnERC20Token|ReentrantERC20Token|ERC20Token|IERC20Token|MintableERC20Token|UnlimitedAllowanceERC20Token|IEtherToken|WETH9|ZRXToken).json"
},
"repository": {
"type": "git",
@@ -45,44 +45,33 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-interfaces": "^1.0.5",
- "@0x/contracts-libs": "^1.0.5",
- "@0x/contracts-multisig": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
- "@0x/order-utils": "^3.1.2",
+ "@0x/contracts-exchange-libs": "^1.0.0",
+ "@0x/contracts-utils": "^3.0.0",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
- "@types/js-combinatorics": "^0.5.29",
- "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
- "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
},
"publishConfig": {
diff --git a/contracts/tokens/src/artifacts/index.ts b/contracts/erc20/src/artifacts/index.ts
index 977d01c3e..ce1ae06ac 100644
--- a/contracts/tokens/src/artifacts/index.ts
+++ b/contracts/erc20/src/artifacts/index.ts
@@ -1,24 +1,14 @@
import { ContractArtifact } from 'ethereum-types';
import * as DummyERC20Token from '../../generated-artifacts/DummyERC20Token.json';
-import * as DummyERC721Receiver from '../../generated-artifacts/DummyERC721Receiver.json';
-import * as DummyERC721Token from '../../generated-artifacts/DummyERC721Token.json';
import * as DummyMultipleReturnERC20Token from '../../generated-artifacts/DummyMultipleReturnERC20Token.json';
import * as DummyNoReturnERC20Token from '../../generated-artifacts/DummyNoReturnERC20Token.json';
import * as ERC20Token from '../../generated-artifacts/ERC20Token.json';
-import * as ERC20Token_v1 from '../../generated-artifacts/ERC20Token_v1.json';
-import * as ERC721Token from '../../generated-artifacts/ERC721Token.json';
import * as IERC20Token from '../../generated-artifacts/IERC20Token.json';
-import * as IERC721Receiver from '../../generated-artifacts/IERC721Receiver.json';
-import * as IERC721Token from '../../generated-artifacts/IERC721Token.json';
import * as IEtherToken from '../../generated-artifacts/IEtherToken.json';
-import * as InvalidERC721Receiver from '../../generated-artifacts/InvalidERC721Receiver.json';
import * as MintableERC20Token from '../../generated-artifacts/MintableERC20Token.json';
-import * as MintableERC721Token from '../../generated-artifacts/MintableERC721Token.json';
import * as ReentrantERC20Token from '../../generated-artifacts/ReentrantERC20Token.json';
-import * as Token_v1 from '../../generated-artifacts/Token_v1.json';
import * as UnlimitedAllowanceERC20Token from '../../generated-artifacts/UnlimitedAllowanceERC20Token.json';
-import * as UnlimitedAllowanceToken_v1 from '../../generated-artifacts/UnlimitedAllowanceToken_v1.json';
import * as WETH9 from '../../generated-artifacts/WETH9.json';
import * as ZRXToken from '../../generated-artifacts/ZRXToken.json';
@@ -27,23 +17,13 @@ export const artifacts = {
DummyERC20Token: DummyERC20Token as ContractArtifact,
DummyMultipleReturnERC20Token: DummyMultipleReturnERC20Token as ContractArtifact,
DummyNoReturnERC20Token: DummyNoReturnERC20Token as ContractArtifact,
- DummyERC721Receiver: DummyERC721Receiver as ContractArtifact,
- InvalidERC721Receiver: InvalidERC721Receiver as ContractArtifact,
- DummyERC721Token: DummyERC721Token as ContractArtifact,
ReentrantERC20Token: ReentrantERC20Token as ContractArtifact,
ERC20Token: ERC20Token as ContractArtifact,
IERC20Token: IERC20Token as ContractArtifact,
MintableERC20Token: MintableERC20Token as ContractArtifact,
UnlimitedAllowanceERC20Token: UnlimitedAllowanceERC20Token as ContractArtifact,
- ERC721Token: ERC721Token as ContractArtifact,
- IERC721Receiver: IERC721Receiver as ContractArtifact,
- IERC721Token: IERC721Token as ContractArtifact,
- MintableERC721Token: MintableERC721Token as ContractArtifact,
IEtherToken: IEtherToken as ContractArtifact,
WETH9: WETH9 as ContractArtifact,
- ERC20Token_v1: ERC20Token_v1 as ContractArtifact,
- Token_v1: Token_v1 as ContractArtifact,
- UnlimitedAllowanceToken_v1: UnlimitedAllowanceToken_v1 as ContractArtifact,
// Note(albrow): "as any" hack still required here because ZRXToken does not
// conform to the v2 artifact type.
ZRXToken: (ZRXToken as any) as ContractArtifact,
diff --git a/contracts/tokens/src/index.ts b/contracts/erc20/src/index.ts
index 91dd7e0e3..91dd7e0e3 100644
--- a/contracts/tokens/src/index.ts
+++ b/contracts/erc20/src/index.ts
diff --git a/contracts/tokens/src/wrappers/index.ts b/contracts/erc20/src/wrappers/index.ts
index 98bf26657..b4e4ef969 100644
--- a/contracts/tokens/src/wrappers/index.ts
+++ b/contracts/erc20/src/wrappers/index.ts
@@ -1,21 +1,11 @@
export * from '../../generated-wrappers/zrx_token';
export * from '../../generated-wrappers/weth9';
-export * from '../../generated-wrappers/unlimitedallowancetoken_v1';
export * from '../../generated-wrappers/unlimited_allowance_erc20_token';
-export * from '../../generated-wrappers/token_v1';
export * from '../../generated-wrappers/reentrant_erc20_token';
-export * from '../../generated-wrappers/mintable_erc721_token';
export * from '../../generated-wrappers/mintable_erc20_token';
-export * from '../../generated-wrappers/invalid_erc721_receiver';
export * from '../../generated-wrappers/i_ether_token';
-export * from '../../generated-wrappers/i_erc721_token';
-export * from '../../generated-wrappers/i_erc721_receiver';
export * from '../../generated-wrappers/i_erc20_token';
-export * from '../../generated-wrappers/erc721_token';
-export * from '../../generated-wrappers/erc20token_v1';
export * from '../../generated-wrappers/erc20_token';
export * from '../../generated-wrappers/dummy_no_return_erc20_token';
export * from '../../generated-wrappers/dummy_multiple_return_erc20_token';
-export * from '../../generated-wrappers/dummy_erc721_token';
-export * from '../../generated-wrappers/dummy_erc721_receiver';
export * from '../../generated-wrappers/dummy_erc20_token';
diff --git a/contracts/protocol/test/global_hooks.ts b/contracts/erc20/test/global_hooks.ts
index f8ace376a..f8ace376a 100644
--- a/contracts/protocol/test/global_hooks.ts
+++ b/contracts/erc20/test/global_hooks.ts
diff --git a/contracts/tokens/test/unlimited_allowance_token.ts b/contracts/erc20/test/unlimited_allowance_token.ts
index 6d5a29b23..f0b8e53a4 100644
--- a/contracts/tokens/test/unlimited_allowance_token.ts
+++ b/contracts/erc20/test/unlimited_allowance_token.ts
@@ -109,7 +109,7 @@ describe('UnlimitedAllowanceToken', () => {
const amountToTransfer = ownerBalance;
const spenderAllowance = await token.allowance.callAsync(owner, spender);
- const isSpenderAllowanceInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
+ const isSpenderAllowanceInsufficient = spenderAllowance.comparedTo(amountToTransfer) < 0;
expect(isSpenderAllowanceInsufficient).to.be.true();
return expectContractCallFailedAsync(
diff --git a/contracts/tokens/test/weth9.ts b/contracts/erc20/test/weth9.ts
index 6a3948e2c..6a3948e2c 100644
--- a/contracts/tokens/test/weth9.ts
+++ b/contracts/erc20/test/weth9.ts
diff --git a/contracts/tokens/test/zrx_token.ts b/contracts/erc20/test/zrx_token.ts
index 5dc8447f6..820b054e6 100644
--- a/contracts/tokens/test/zrx_token.ts
+++ b/contracts/erc20/test/zrx_token.ts
@@ -117,7 +117,7 @@ describe('ZRXToken', () => {
const amountToTransfer = ownerBalance;
const spenderAllowance = await zrxToken.allowance.callAsync(owner, spender);
- const isSpenderAllowanceInsufficient = spenderAllowance.cmp(amountToTransfer) < 0;
+ const isSpenderAllowanceInsufficient = spenderAllowance.comparedTo(amountToTransfer) < 0;
expect(isSpenderAllowanceInsufficient).to.be.true();
const didReturnTrue = await zrxToken.transferFrom.callAsync(owner, spender, amountToTransfer, {
diff --git a/contracts/tokens/tsconfig.json b/contracts/erc20/tsconfig.json
index 0d5f98cb8..4df7424be 100644
--- a/contracts/tokens/tsconfig.json
+++ b/contracts/erc20/tsconfig.json
@@ -10,23 +10,13 @@
"./generated-artifacts/DummyERC20Token.json",
"./generated-artifacts/DummyMultipleReturnERC20Token.json",
"./generated-artifacts/DummyNoReturnERC20Token.json",
- "./generated-artifacts/DummyERC721Receiver.json",
- "./generated-artifacts/InvalidERC721Receiver.json",
- "./generated-artifacts/DummyERC721Token.json",
"./generated-artifacts/ReentrantERC20Token.json",
"./generated-artifacts/ERC20Token.json",
"./generated-artifacts/IERC20Token.json",
"./generated-artifacts/MintableERC20Token.json",
"./generated-artifacts/UnlimitedAllowanceERC20Token.json",
- "./generated-artifacts/ERC721Token.json",
- "./generated-artifacts/IERC721Receiver.json",
- "./generated-artifacts/IERC721Token.json",
- "./generated-artifacts/MintableERC721Token.json",
"./generated-artifacts/IEtherToken.json",
"./generated-artifacts/WETH9.json",
- "./generated-artifacts/ERC20Token_v1.json",
- "./generated-artifacts/Token_v1.json",
- "./generated-artifacts/UnlimitedAllowanceToken_v1.json",
"./generated-artifacts/ZRXToken.json"
],
"exclude": ["./deploy/solc/solc_bin"]
diff --git a/contracts/protocol/tslint.json b/contracts/erc20/tslint.json
index 1bb3ac2a2..1bb3ac2a2 100644
--- a/contracts/protocol/tslint.json
+++ b/contracts/erc20/tslint.json
diff --git a/contracts/tokens/.solhintignore b/contracts/erc721/.solhintignore
index 1e33ec53b..1e33ec53b 100644
--- a/contracts/tokens/.solhintignore
+++ b/contracts/erc721/.solhintignore
diff --git a/contracts/erc721/CHANGELOG.json b/contracts/erc721/CHANGELOG.json
new file mode 100644
index 000000000..caf1e6701
--- /dev/null
+++ b/contracts/erc721/CHANGELOG.json
@@ -0,0 +1,11 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Move all ERC721 contracts out of contracts-tokens to new package",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/examples/CHANGELOG.md b/contracts/erc721/CHANGELOG.md
index 6d53a0b9c..59d0804da 100644
--- a/contracts/examples/CHANGELOG.md
+++ b/contracts/erc721/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.6 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.5 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/erc721/DEPLOYS.json b/contracts/erc721/DEPLOYS.json
new file mode 100644
index 000000000..fe51488c7
--- /dev/null
+++ b/contracts/erc721/DEPLOYS.json
@@ -0,0 +1 @@
+[]
diff --git a/contracts/libs/README.md b/contracts/erc721/README.md
index cfa631679..c14035b9e 100644
--- a/contracts/libs/README.md
+++ b/contracts/erc721/README.md
@@ -1,15 +1,18 @@
-## Contracts libs
+## ERC721 Tokens
-Smart contracts libs used in the 0x protocol.
+This package contains implementations of various [ERC721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md) tokens. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contracts can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [libs](./contracts/protocol)
- - This directory contains the libs.
-- [test](./contracts/test)
- - This directory contains mocks and other contracts that are used solely for testing contracts within the other directories.
+```bash
+npm install @0x/contracts-erc721 --save
+```
+
+## Bug bounty
+
+A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
## Contributing
@@ -38,13 +41,13 @@ yarn install
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
```bash
-PKG=@0x/contracts-libs yarn build
+PKG=@0x/contracts-erc721 yarn build
```
Or continuously rebuild on change:
```bash
-PKG=@0x/contracts-libs yarn watch
+PKG=@0x/contracts-erc721 yarn watch
```
### Clean
diff --git a/contracts/erc721/compiler.json b/contracts/erc721/compiler.json
new file mode 100644
index 000000000..c5f07ddb8
--- /dev/null
+++ b/contracts/erc721/compiler.json
@@ -0,0 +1,30 @@
+{
+ "artifactsDir": "./generated-artifacts",
+ "contractsDir": "./contracts",
+ "compilerSettings": {
+ "optimizer": {
+ "enabled": true,
+ "runs": 1000000
+ },
+ "outputSelection": {
+ "*": {
+ "*": [
+ "abi",
+ "evm.bytecode.object",
+ "evm.bytecode.sourceMap",
+ "evm.deployedBytecode.object",
+ "evm.deployedBytecode.sourceMap"
+ ]
+ }
+ }
+ },
+ "contracts": [
+ "DummyERC721Receiver",
+ "InvalidERC721Receiver",
+ "DummyERC721Token",
+ "ERC721Token",
+ "IERC721Receiver",
+ "IERC721Token",
+ "MintableERC721Token"
+ ]
+}
diff --git a/contracts/tokens/contracts/tokens/ERC721Token/ERC721Token.sol b/contracts/erc721/contracts/src/ERC721Token.sol
index c46bd0af4..32f70ccf8 100644
--- a/contracts/tokens/contracts/tokens/ERC721Token/ERC721Token.sol
+++ b/contracts/erc721/contracts/src/ERC721Token.sol
@@ -18,9 +18,9 @@
pragma solidity ^0.4.24;
-import "./IERC721Token.sol";
-import "./IERC721Receiver.sol";
-import "@0x/contracts-utils/contracts/utils/SafeMath/SafeMath.sol";
+import "./interfaces/IERC721Token.sol";
+import "./interfaces/IERC721Receiver.sol";
+import "@0x/contracts-utils/contracts/src/SafeMath.sol";
contract ERC721Token is
diff --git a/contracts/tokens/contracts/tokens/ERC721Token/MintableERC721Token.sol b/contracts/erc721/contracts/src/MintableERC721Token.sol
index 27326d857..27326d857 100644
--- a/contracts/tokens/contracts/tokens/ERC721Token/MintableERC721Token.sol
+++ b/contracts/erc721/contracts/src/MintableERC721Token.sol
diff --git a/contracts/tokens/contracts/tokens/ERC721Token/IERC721Receiver.sol b/contracts/erc721/contracts/src/interfaces/IERC721Receiver.sol
index c3ad35ede..c3ad35ede 100644
--- a/contracts/tokens/contracts/tokens/ERC721Token/IERC721Receiver.sol
+++ b/contracts/erc721/contracts/src/interfaces/IERC721Receiver.sol
diff --git a/contracts/tokens/contracts/tokens/ERC721Token/IERC721Token.sol b/contracts/erc721/contracts/src/interfaces/IERC721Token.sol
index 56a3314df..56a3314df 100644
--- a/contracts/tokens/contracts/tokens/ERC721Token/IERC721Token.sol
+++ b/contracts/erc721/contracts/src/interfaces/IERC721Token.sol
diff --git a/contracts/tokens/contracts/test/DummyERC721Receiver/DummyERC721Receiver.sol b/contracts/erc721/contracts/test/DummyERC721Receiver.sol
index 6c8371559..b5de01aa5 100644
--- a/contracts/tokens/contracts/test/DummyERC721Receiver/DummyERC721Receiver.sol
+++ b/contracts/erc721/contracts/test/DummyERC721Receiver.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "../../tokens/ERC721Token/IERC721Receiver.sol";
+import "../src/interfaces/IERC721Receiver.sol";
contract DummyERC721Receiver is
diff --git a/contracts/tokens/contracts/test/DummyERC721Token/DummyERC721Token.sol b/contracts/erc721/contracts/test/DummyERC721Token.sol
index 4c978b2df..41dc8ea18 100644
--- a/contracts/tokens/contracts/test/DummyERC721Token/DummyERC721Token.sol
+++ b/contracts/erc721/contracts/test/DummyERC721Token.sol
@@ -18,8 +18,8 @@
pragma solidity 0.4.24;
-import "../../tokens/ERC721Token/MintableERC721Token.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "../src/MintableERC721Token.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
// solhint-disable no-empty-blocks
diff --git a/contracts/tokens/contracts/test/DummyERC721Receiver/InvalidERC721Receiver.sol b/contracts/erc721/contracts/test/InvalidERC721Receiver.sol
index 309633bf5..ea59dedc5 100644
--- a/contracts/tokens/contracts/test/DummyERC721Receiver/InvalidERC721Receiver.sol
+++ b/contracts/erc721/contracts/test/InvalidERC721Receiver.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "../../tokens/ERC721Token/IERC721Receiver.sol";
+import "../src/interfaces/IERC721Receiver.sol";
contract InvalidERC721Receiver is
diff --git a/contracts/examples/package.json b/contracts/erc721/package.json
index 286d0f508..8e83ea4e4 100644
--- a/contracts/examples/package.json
+++ b/contracts/erc721/package.json
@@ -1,10 +1,10 @@
{
- "name": "@0x/contracts-examples",
- "version": "1.0.5",
+ "name": "@0x/contracts-erc721",
+ "version": "1.0.0",
"engines": {
"node": ">=6.12"
},
- "description": "Smart contract examples of 0x protocol",
+ "description": "Token contracts used by 0x protocol",
"main": "lib/src/index.js",
"directories": {
"test": "test"
@@ -13,15 +13,26 @@
"build": "yarn pre_build && tsc -b",
"build:ci": "yarn build",
"pre_build": "run-s compile generate_contract_wrappers",
+ "test": "yarn run_mocha",
+ "rebuild_and_test": "run-s build test",
+ "test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
+ "test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
+ "test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
+ "run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
"compile": "sol-compiler",
"watch": "sol-compiler -w",
"clean": "shx rm -rf lib generated-artifacts generated-wrappers",
"generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
"lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
+ "coverage:report:text": "istanbul report text",
+ "coverage:report:html": "istanbul report html && open coverage/index.html",
+ "profiler:report:html": "istanbul report html && open coverage/index.html",
+ "coverage:report:lcov": "istanbul report lcov",
+ "test:circleci": "yarn test",
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
},
"config": {
- "abis": "generated-artifacts/@(ExchangeWrapper|Validator|Wallet|Whitelist).json"
+ "abis": "generated-artifacts/@(DummyERC721Receiver|InvalidERC721Receiver|DummyERC721Token|ERC721Token|IERC721Receiver|IERC721Token|MintableERC721Token).json"
},
"repository": {
"type": "git",
@@ -31,48 +42,35 @@
"bugs": {
"url": "https://github.com/0xProject/0x-monorepo/issues"
},
- "homepage": "https://github.com/0xProject/0x-monorepo/contracts/examples/README.md",
+ "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-interfaces": "^1.0.5",
- "@0x/contracts-libs": "^1.0.5",
- "@0x/contracts-multisig": "^1.0.5",
- "@0x/contracts-tokens": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
- "@0x/order-utils": "^3.1.2",
+ "@0x/contracts-utils": "^3.0.0",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
- "@types/js-combinatorics": "^0.5.29",
- "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
- "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
},
"publishConfig": {
diff --git a/contracts/erc721/src/artifacts/index.ts b/contracts/erc721/src/artifacts/index.ts
new file mode 100644
index 000000000..8d5ec8a46
--- /dev/null
+++ b/contracts/erc721/src/artifacts/index.ts
@@ -0,0 +1,20 @@
+import { ContractArtifact } from 'ethereum-types';
+
+import * as DummyERC721Receiver from '../../generated-artifacts/DummyERC721Receiver.json';
+import * as DummyERC721Token from '../../generated-artifacts/DummyERC721Token.json';
+import * as ERC721Token from '../../generated-artifacts/ERC721Token.json';
+import * as IERC721Receiver from '../../generated-artifacts/IERC721Receiver.json';
+import * as IERC721Token from '../../generated-artifacts/IERC721Token.json';
+import * as InvalidERC721Receiver from '../../generated-artifacts/InvalidERC721Receiver.json';
+import * as MintableERC721Token from '../../generated-artifacts/MintableERC721Token.json';
+
+// tslint:disable:no-unnecessary-type-assertion
+export const artifacts = {
+ DummyERC721Receiver: DummyERC721Receiver as ContractArtifact,
+ InvalidERC721Receiver: InvalidERC721Receiver as ContractArtifact,
+ DummyERC721Token: DummyERC721Token as ContractArtifact,
+ ERC721Token: ERC721Token as ContractArtifact,
+ IERC721Receiver: IERC721Receiver as ContractArtifact,
+ IERC721Token: IERC721Token as ContractArtifact,
+ MintableERC721Token: MintableERC721Token as ContractArtifact,
+};
diff --git a/contracts/interfaces/src/index.ts b/contracts/erc721/src/index.ts
index d55f08ea2..91dd7e0e3 100644
--- a/contracts/interfaces/src/index.ts
+++ b/contracts/erc721/src/index.ts
@@ -1,2 +1,2 @@
-export * from './artifacts';
export * from './wrappers';
+export * from './artifacts';
diff --git a/contracts/erc721/src/wrappers/index.ts b/contracts/erc721/src/wrappers/index.ts
new file mode 100644
index 000000000..ba6c51885
--- /dev/null
+++ b/contracts/erc721/src/wrappers/index.ts
@@ -0,0 +1,7 @@
+export * from '../../generated-wrappers/mintable_erc721_token';
+export * from '../../generated-wrappers/invalid_erc721_receiver';
+export * from '../../generated-wrappers/i_erc721_token';
+export * from '../../generated-wrappers/i_erc721_receiver';
+export * from '../../generated-wrappers/erc721_token';
+export * from '../../generated-wrappers/dummy_erc721_token';
+export * from '../../generated-wrappers/dummy_erc721_receiver';
diff --git a/contracts/tokens/test/erc721_token.ts b/contracts/erc721/test/erc721_token.ts
index 13332cd35..13332cd35 100644
--- a/contracts/tokens/test/erc721_token.ts
+++ b/contracts/erc721/test/erc721_token.ts
diff --git a/contracts/libs/test/global_hooks.ts b/contracts/erc721/test/global_hooks.ts
index f8ace376a..f8ace376a 100644
--- a/contracts/libs/test/global_hooks.ts
+++ b/contracts/erc721/test/global_hooks.ts
diff --git a/contracts/erc721/tsconfig.json b/contracts/erc721/tsconfig.json
new file mode 100644
index 000000000..098c3a7f3
--- /dev/null
+++ b/contracts/erc721/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../tsconfig",
+ "compilerOptions": {
+ "outDir": "lib",
+ "rootDir": ".",
+ "resolveJsonModule": true
+ },
+ "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
+ "files": [
+ "./generated-artifacts/DummyERC721Receiver.json",
+ "./generated-artifacts/InvalidERC721Receiver.json",
+ "./generated-artifacts/DummyERC721Token.json",
+ "./generated-artifacts/ERC721Token.json",
+ "./generated-artifacts/IERC721Receiver.json",
+ "./generated-artifacts/IERC721Token.json",
+ "./generated-artifacts/MintableERC721Token.json"
+ ],
+ "exclude": ["./deploy/solc/solc_bin"]
+}
diff --git a/contracts/libs/tslint.json b/contracts/erc721/tslint.json
index 1bb3ac2a2..1bb3ac2a2 100644
--- a/contracts/libs/tslint.json
+++ b/contracts/erc721/tslint.json
diff --git a/contracts/examples/CHANGELOG.json b/contracts/examples/CHANGELOG.json
deleted file mode 100644
index ee239b318..000000000
--- a/contracts/examples/CHANGELOG.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
- {
- "timestamp": 1547561734,
- "version": "1.0.5",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547225310,
- "version": "1.0.4",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547040760,
- "version": "1.0.3",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1544741676,
- "version": "1.0.2",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- }
-]
diff --git a/contracts/examples/src/artifacts/index.ts b/contracts/examples/src/artifacts/index.ts
deleted file mode 100644
index c921fbf89..000000000
--- a/contracts/examples/src/artifacts/index.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { ContractArtifact } from 'ethereum-types';
-
-import * as ExchangeWrapper from '../../generated-artifacts/ExchangeWrapper.json';
-import * as Validator from '../../generated-artifacts/Validator.json';
-import * as Wallet from '../../generated-artifacts/Wallet.json';
-import * as Whitelist from '../../generated-artifacts/Whitelist.json';
-
-export const artifacts = {
- ExchangeWrapper: ExchangeWrapper as ContractArtifact,
- Validator: Validator as ContractArtifact,
- Wallet: Wallet as ContractArtifact,
- Whitelist: Whitelist as ContractArtifact,
-};
diff --git a/contracts/examples/src/wrappers/index.ts b/contracts/examples/src/wrappers/index.ts
deleted file mode 100644
index dc67277d7..000000000
--- a/contracts/examples/src/wrappers/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export * from '../../generated-wrappers/exchange_wrapper';
-export * from '../../generated-wrappers/validator';
-export * from '../../generated-wrappers/wallet';
-export * from '../../generated-wrappers/whitelist';
diff --git a/contracts/exchange-forwarder/CHANGELOG.json b/contracts/exchange-forwarder/CHANGELOG.json
new file mode 100644
index 000000000..a9e5fa8da
--- /dev/null
+++ b/contracts/exchange-forwarder/CHANGELOG.json
@@ -0,0 +1,11 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Move Forwarder contract out of contracts-extensions into new package",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/libs/CHANGELOG.md b/contracts/exchange-forwarder/CHANGELOG.md
index 6d53a0b9c..94ffdfb67 100644
--- a/contracts/libs/CHANGELOG.md
+++ b/contracts/exchange-forwarder/CHANGELOG.md
@@ -5,18 +5,28 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
-## v1.0.5 - _January 15, 2019_
+## v1.2.3 - _January 17, 2019_
* Dependencies updated
-## v1.0.4 - _January 11, 2019_
+## v1.2.2 - _January 15, 2019_
* Dependencies updated
-## v1.0.3 - _January 9, 2019_
+## v1.2.1 - _January 11, 2019_
* Dependencies updated
+## v1.2.0 - _January 9, 2019_
+
+ * Added Dutch Auction Wrapper (#1465)
+
+## v1.1.0 - _Invalid date_
+
+ * Added Balance Threshold Filter (#1383)
+ * Add OrderMatcher (#1117)
+ * Add OrderValidator (#1464)
+
## v1.0.2 - _December 13, 2018_
* Dependencies updated
diff --git a/contracts/exchange-forwarder/DEPLOYS.json b/contracts/exchange-forwarder/DEPLOYS.json
new file mode 100644
index 000000000..86bd264c4
--- /dev/null
+++ b/contracts/exchange-forwarder/DEPLOYS.json
@@ -0,0 +1,32 @@
+[
+ {
+ "name": "Forwarder",
+ "version": "1.1.0",
+ "changes": [
+ {
+ "note": "Round up when calculating remaining amounts in marketBuy functions",
+ "pr": 1162,
+ "networks": {
+ "1": "0x5468a1dc173652ee28d249c271fa9933144746b1",
+ "3": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
+ "4": "0xd2dbf3250a764eaaa94fa0c84ed87c0edc8ed04e",
+ "42": "0x17992e4ffb22730138e4b62aaa6367fa9d3699a6"
+ }
+ }
+ ]
+ },
+ {
+ "name": "Forwarder",
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "protocol v2 deploy",
+ "networks": {
+ "1": "0x7afc2d5107af94c462a194d2c21b5bdd238709d6",
+ "3": "0x3983e204b12b3c02fb0638caf2cd406a62e0ead3",
+ "42": "0xd85e2fa7e7e252b27b01bf0d65c946959d2f45b8"
+ }
+ }
+ ]
+ }
+]
diff --git a/contracts/tokens/README.md b/contracts/exchange-forwarder/README.md
index 2d1db92f0..3fc8c006b 100644
--- a/contracts/tokens/README.md
+++ b/contracts/exchange-forwarder/README.md
@@ -1,15 +1,14 @@
-## Token contracts
+## Exchange Forwarder
-Token smart contracts that are used in the 0x protocol. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [CHANGELOG](./CHANGELOG.json) of this package.
+This package contains the implementation of the [`Forwarder`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract. This contract is intended to improve the UX of interacting with the 0x [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract by abstracting user approvals, converting ETH to WETH, and paying fees. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Token contracts that make up and interact with version 2.0.0 of the protocol can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [tokens](./contracts/tokens)
- - This directory contains implementations of different tokens and token standards, including [wETH](https://weth.io/), ZRX, [ERC20](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md), and [ERC721](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md).
-- [test](./contracts/test)
- - This directory contains mocks and other contracts that are used solely for testing contracts within the other directories.
+```bash
+npm install @0x/contracts-exchange-forwarder --save
+```
## Bug bounty
@@ -42,13 +41,13 @@ yarn install
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
```bash
-PKG=@0x/contracts-tokens yarn build
+PKG=@0x/contracts-exchange-forwarder yarn build
```
Or continuously rebuild on change:
```bash
-PKG=@0x/contracts-tokens yarn watch
+PKG=@0x/contracts-exchange-forwarder yarn watch
```
### Clean
diff --git a/contracts/examples/compiler.json b/contracts/exchange-forwarder/compiler.json
index 375fa0c55..b0237a519 100644
--- a/contracts/examples/compiler.json
+++ b/contracts/exchange-forwarder/compiler.json
@@ -18,5 +18,5 @@
}
}
},
- "contracts": ["ExchangeWrapper", "Validator", "Wallet", "Whitelist"]
+ "contracts": ["Forwarder"]
}
diff --git a/contracts/extensions/contracts/Forwarder/Forwarder.sol b/contracts/exchange-forwarder/contracts/src/Forwarder.sol
index 94dec40ed..94dec40ed 100644
--- a/contracts/extensions/contracts/Forwarder/Forwarder.sol
+++ b/contracts/exchange-forwarder/contracts/src/Forwarder.sol
diff --git a/contracts/extensions/contracts/Forwarder/MixinAssets.sol b/contracts/exchange-forwarder/contracts/src/MixinAssets.sol
index 116cdf267..330586ed9 100644
--- a/contracts/extensions/contracts/Forwarder/MixinAssets.sol
+++ b/contracts/exchange-forwarder/contracts/src/MixinAssets.sol
@@ -18,10 +18,10 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC721Token/IERC721Token.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
+import "@0x/contracts-erc721/contracts/src/interfaces/IERC721Token.sol";
import "./libs/LibConstants.sol";
import "./mixins/MAssets.sol";
diff --git a/contracts/extensions/contracts/Forwarder/MixinExchangeWrapper.sol b/contracts/exchange-forwarder/contracts/src/MixinExchangeWrapper.sol
index cab26741d..c970c40cf 100644
--- a/contracts/extensions/contracts/Forwarder/MixinExchangeWrapper.sol
+++ b/contracts/exchange-forwarder/contracts/src/MixinExchangeWrapper.sol
@@ -21,10 +21,10 @@ pragma experimental ABIEncoderV2;
import "./libs/LibConstants.sol";
import "./mixins/MExchangeWrapper.sol";
-import "@0x/contracts-libs/contracts/libs/LibAbiEncoder.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibAbiEncoder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
contract MixinExchangeWrapper is
diff --git a/contracts/extensions/contracts/Forwarder/MixinForwarderCore.sol b/contracts/exchange-forwarder/contracts/src/MixinForwarderCore.sol
index 11c0147a5..b65e1f7ce 100644
--- a/contracts/extensions/contracts/Forwarder/MixinForwarderCore.sol
+++ b/contracts/exchange-forwarder/contracts/src/MixinForwarderCore.sol
@@ -24,10 +24,10 @@ import "./mixins/MWeth.sol";
import "./mixins/MAssets.sol";
import "./mixins/MExchangeWrapper.sol";
import "./interfaces/IForwarderCore.sol";
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
contract MixinForwarderCore is
diff --git a/contracts/extensions/contracts/Forwarder/MixinWeth.sol b/contracts/exchange-forwarder/contracts/src/MixinWeth.sol
index 25a35f47b..029924019 100644
--- a/contracts/extensions/contracts/Forwarder/MixinWeth.sol
+++ b/contracts/exchange-forwarder/contracts/src/MixinWeth.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
import "./libs/LibConstants.sol";
import "./mixins/MWeth.sol";
diff --git a/contracts/extensions/contracts/Forwarder/interfaces/IAssets.sol b/contracts/exchange-forwarder/contracts/src/interfaces/IAssets.sol
index cebfd3706..cebfd3706 100644
--- a/contracts/extensions/contracts/Forwarder/interfaces/IAssets.sol
+++ b/contracts/exchange-forwarder/contracts/src/interfaces/IAssets.sol
diff --git a/contracts/extensions/contracts/Forwarder/interfaces/IForwarder.sol b/contracts/exchange-forwarder/contracts/src/interfaces/IForwarder.sol
index 6ce8a1d31..6ce8a1d31 100644
--- a/contracts/extensions/contracts/Forwarder/interfaces/IForwarder.sol
+++ b/contracts/exchange-forwarder/contracts/src/interfaces/IForwarder.sol
diff --git a/contracts/extensions/contracts/Forwarder/interfaces/IForwarderCore.sol b/contracts/exchange-forwarder/contracts/src/interfaces/IForwarderCore.sol
index 7f62722e7..00009d3d5 100644
--- a/contracts/extensions/contracts/Forwarder/interfaces/IForwarderCore.sol
+++ b/contracts/exchange-forwarder/contracts/src/interfaces/IForwarderCore.sol
@@ -19,8 +19,8 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
contract IForwarderCore {
diff --git a/contracts/extensions/contracts/Forwarder/libs/LibConstants.sol b/contracts/exchange-forwarder/contracts/src/libs/LibConstants.sol
index 0d2f6e36d..3ff2a03e5 100644
--- a/contracts/extensions/contracts/Forwarder/libs/LibConstants.sol
+++ b/contracts/exchange-forwarder/contracts/src/libs/LibConstants.sol
@@ -18,10 +18,10 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-tokens/contracts/tokens/EtherToken/IEtherToken.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IEtherToken.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
contract LibConstants {
diff --git a/contracts/extensions/contracts/Forwarder/libs/LibForwarderErrors.sol b/contracts/exchange-forwarder/contracts/src/libs/LibForwarderErrors.sol
index 7a95b78a0..7a95b78a0 100644
--- a/contracts/extensions/contracts/Forwarder/libs/LibForwarderErrors.sol
+++ b/contracts/exchange-forwarder/contracts/src/libs/LibForwarderErrors.sol
diff --git a/contracts/extensions/contracts/Forwarder/mixins/MAssets.sol b/contracts/exchange-forwarder/contracts/src/mixins/MAssets.sol
index 1757b37fb..1757b37fb 100644
--- a/contracts/extensions/contracts/Forwarder/mixins/MAssets.sol
+++ b/contracts/exchange-forwarder/contracts/src/mixins/MAssets.sol
diff --git a/contracts/extensions/contracts/Forwarder/mixins/MExchangeWrapper.sol b/contracts/exchange-forwarder/contracts/src/mixins/MExchangeWrapper.sol
index 143f888b1..7439e8259 100644
--- a/contracts/extensions/contracts/Forwarder/mixins/MExchangeWrapper.sol
+++ b/contracts/exchange-forwarder/contracts/src/mixins/MExchangeWrapper.sol
@@ -19,8 +19,8 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
contract MExchangeWrapper {
diff --git a/contracts/extensions/contracts/Forwarder/mixins/MWeth.sol b/contracts/exchange-forwarder/contracts/src/mixins/MWeth.sol
index 15d66942f..15d66942f 100644
--- a/contracts/extensions/contracts/Forwarder/mixins/MWeth.sol
+++ b/contracts/exchange-forwarder/contracts/src/mixins/MWeth.sol
diff --git a/contracts/exchange-forwarder/package.json b/contracts/exchange-forwarder/package.json
new file mode 100644
index 000000000..7ec103746
--- /dev/null
+++ b/contracts/exchange-forwarder/package.json
@@ -0,0 +1,86 @@
+{
+ "name": "@0x/contracts-exchange-forwarder",
+ "version": "1.0.0",
+ "engines": {
+ "node": ">=6.12"
+ },
+ "description": "Smart contract extensions of 0x protocol",
+ "main": "lib/src/index.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "build": "yarn pre_build && tsc -b",
+ "build:ci": "yarn build",
+ "pre_build": "run-s compile generate_contract_wrappers",
+ "test": "yarn run_mocha",
+ "rebuild_and_test": "run-s build test",
+ "test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
+ "test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html",
+ "test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha",
+ "run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
+ "compile": "sol-compiler",
+ "watch": "sol-compiler -w",
+ "clean": "shx rm -rf lib generated-artifacts generated-wrappers",
+ "generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
+ "lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
+ "coverage:report:text": "istanbul report text",
+ "coverage:report:html": "istanbul report html && open coverage/index.html",
+ "profiler:report:html": "istanbul report html && open coverage/index.html",
+ "coverage:report:lcov": "istanbul report lcov",
+ "test:circleci": "yarn test",
+ "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
+ },
+ "config": {
+ "abis": "generated-artifacts/@(Forwarder).json"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/0xProject/0x-monorepo.git"
+ },
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/0xProject/0x-monorepo/issues"
+ },
+ "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md",
+ "devDependencies": {
+ "@0x/abi-gen": "^1.0.22",
+ "@0x/contract-wrappers": "^5.0.1",
+ "@0x/contracts-test-utils": "^2.0.1",
+ "@0x/dev-utils": "^1.0.24",
+ "@0x/sol-compiler": "^2.0.2",
+ "@0x/tslint-config": "^2.0.2",
+ "@types/lodash": "4.14.104",
+ "@types/node": "*",
+ "chai": "^4.0.1",
+ "chai-as-promised": "^7.1.0",
+ "chai-bignumber": "^3.0.0",
+ "dirty-chai": "^2.0.1",
+ "make-promises-safe": "^1.1.0",
+ "mocha": "^4.1.0",
+ "npm-run-all": "^4.1.2",
+ "shx": "^0.2.2",
+ "solhint": "^1.4.1",
+ "tslint": "5.11.0",
+ "typescript": "3.0.1"
+ },
+ "dependencies": {
+ "@0x/base-contract": "^3.0.13",
+ "@0x/contracts-asset-proxy": "^1.0.0",
+ "@0x/contracts-exchange-libs": "^1.0.0",
+ "@0x/contracts-exchange": "^1.0.0",
+ "@0x/contracts-erc20": "^1.0.0",
+ "@0x/contracts-erc721": "^1.0.0",
+ "@0x/contracts-utils": "^3.0.0",
+ "@0x/order-utils": "^3.1.2",
+ "@0x/types": "^1.5.2",
+ "@0x/typescript-typings": "^3.0.8",
+ "@0x/utils": "^3.0.1",
+ "@0x/web3-wrapper": "^3.2.4",
+ "ethereum-types": "^1.1.6",
+ "lodash": "^4.17.5"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/contracts/exchange-forwarder/src/artifacts/index.ts b/contracts/exchange-forwarder/src/artifacts/index.ts
new file mode 100644
index 000000000..f15dac49a
--- /dev/null
+++ b/contracts/exchange-forwarder/src/artifacts/index.ts
@@ -0,0 +1,7 @@
+import { ContractArtifact } from 'ethereum-types';
+
+import * as Forwarder from '../../generated-artifacts/Forwarder.json';
+
+export const artifacts = {
+ Forwarder: Forwarder as ContractArtifact,
+};
diff --git a/contracts/examples/src/index.ts b/contracts/exchange-forwarder/src/index.ts
index d55f08ea2..ba813e7ca 100644
--- a/contracts/examples/src/index.ts
+++ b/contracts/exchange-forwarder/src/index.ts
@@ -1,2 +1,3 @@
export * from './artifacts';
export * from './wrappers';
+export * from '../test/utils';
diff --git a/contracts/exchange-forwarder/src/wrappers/index.ts b/contracts/exchange-forwarder/src/wrappers/index.ts
new file mode 100644
index 000000000..89dff9e74
--- /dev/null
+++ b/contracts/exchange-forwarder/src/wrappers/index.ts
@@ -0,0 +1 @@
+export * from '../../generated-wrappers/forwarder';
diff --git a/contracts/extensions/test/extensions/forwarder.ts b/contracts/exchange-forwarder/test/forwarder.ts
index 69939ed04..24c219563 100644
--- a/contracts/extensions/test/extensions/forwarder.ts
+++ b/contracts/exchange-forwarder/test/forwarder.ts
@@ -1,10 +1,7 @@
-import {
- artifacts as protocolArtifacts,
- ERC20Wrapper,
- ERC721Wrapper,
- ExchangeContract,
- ExchangeWrapper,
-} from '@0x/contracts-protocol';
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange';
import {
chaiSetup,
constants,
@@ -18,12 +15,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokenArtifacts,
- DummyERC20TokenContract,
- DummyERC721TokenContract,
- WETH9Contract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { RevertReason, SignedOrder } from '@0x/types';
@@ -32,10 +23,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
-import { ForwarderContract } from '../../generated-wrappers/forwarder';
-import { artifacts } from '../../src/artifacts';
-
-import { ForwarderWrapper } from '../utils/forwarder_wrapper';
+import { artifacts, ForwarderContract, ForwarderWrapper } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -100,14 +88,14 @@ describe(ContractName.Forwarder, () => {
const erc721Balances = await erc721Wrapper.getBalancesAsync();
erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address];
- wethContract = await WETH9Contract.deployFrom0xArtifactAsync(tokenArtifacts.WETH9, provider, txDefaults);
+ wethContract = await WETH9Contract.deployFrom0xArtifactAsync(erc20Artifacts.WETH9, provider, txDefaults);
weth = new DummyERC20TokenContract(wethContract.abi, wethContract.address, provider);
erc20Wrapper.addDummyTokenContract(weth);
wethAssetData = assetDataUtils.encodeERC20AssetData(wethContract.address);
zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
zrxAssetData,
@@ -178,7 +166,7 @@ describe(ContractName.Forwarder, () => {
describe('constructor', () => {
it('should revert if assetProxy is unregistered', async () => {
const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
zrxAssetData,
diff --git a/contracts/exchange-forwarder/test/global_hooks.ts b/contracts/exchange-forwarder/test/global_hooks.ts
new file mode 100644
index 000000000..f8ace376a
--- /dev/null
+++ b/contracts/exchange-forwarder/test/global_hooks.ts
@@ -0,0 +1,17 @@
+import { env, EnvVars } from '@0x/dev-utils';
+
+import { coverage, profiler, provider } from '@0x/contracts-test-utils';
+before('start web3 provider', () => {
+ provider.start();
+});
+after('generate coverage report', async () => {
+ if (env.parseBoolean(EnvVars.SolidityCoverage)) {
+ const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
+ await coverageSubprovider.writeCoverageAsync();
+ }
+ if (env.parseBoolean(EnvVars.SolidityProfiler)) {
+ const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
+ await profilerSubprovider.writeProfilerOutputAsync();
+ }
+ provider.stop();
+});
diff --git a/contracts/extensions/test/utils/forwarder_wrapper.ts b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts
index 9e44ff6b9..207106852 100644
--- a/contracts/extensions/test/utils/forwarder_wrapper.ts
+++ b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts
@@ -1,6 +1,7 @@
-import { artifacts as protocolArtifacts } from '@0x/contracts-protocol';
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
+import { artifacts as erc721Artifacts } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts } from '@0x/contracts-exchange';
import { constants, formatters, LogDecoder, MarketSellOrders } from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { SignedOrder } from '@0x/types';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
@@ -29,7 +30,7 @@ export class ForwarderWrapper {
feeOrder.takerAssetAmount
.times(remainingFeeAmount)
.dividedBy(feeAvailable)
- .ceil(),
+ .integerValue(BigNumber.ROUND_CEIL),
);
remainingFeeAmount = new BigNumber(0);
} else if (!remainingFeeAmount.isZero()) {
@@ -62,8 +63,9 @@ export class ForwarderWrapper {
this._web3Wrapper = new Web3Wrapper(provider);
this._logDecoder = new LogDecoder(this._web3Wrapper, {
...artifacts,
- ...tokensArtifacts,
- ...protocolArtifacts,
+ ...erc20Artifacts,
+ ...erc721Artifacts,
+ ...exchangeArtifacts,
});
}
public async marketSellOrdersWithEthAsync(
diff --git a/contracts/exchange-forwarder/test/utils/index.ts b/contracts/exchange-forwarder/test/utils/index.ts
new file mode 100644
index 000000000..d290ec75d
--- /dev/null
+++ b/contracts/exchange-forwarder/test/utils/index.ts
@@ -0,0 +1 @@
+export * from './forwarder_wrapper';
diff --git a/contracts/examples/tsconfig.json b/contracts/exchange-forwarder/tsconfig.json
index 63245da1e..cd80b5a5f 100644
--- a/contracts/examples/tsconfig.json
+++ b/contracts/exchange-forwarder/tsconfig.json
@@ -6,11 +6,6 @@
"resolveJsonModule": true
},
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
- "files": [
- "./generated-artifacts/ExchangeWrapper.json",
- "./generated-artifacts/Validator.json",
- "./generated-artifacts/Wallet.json",
- "./generated-artifacts/Whitelist.json"
- ],
+ "files": ["./generated-artifacts/Forwarder.json"],
"exclude": ["./deploy/solc/solc_bin"]
}
diff --git a/contracts/interfaces/tslint.json b/contracts/exchange-forwarder/tslint.json
index 1bb3ac2a2..1bb3ac2a2 100644
--- a/contracts/interfaces/tslint.json
+++ b/contracts/exchange-forwarder/tslint.json
diff --git a/contracts/exchange-libs/CHANGELOG.json b/contracts/exchange-libs/CHANGELOG.json
new file mode 100644
index 000000000..cdaac93ea
--- /dev/null
+++ b/contracts/exchange-libs/CHANGELOG.json
@@ -0,0 +1,15 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Rename contracts-libs to contracts-exchange-libs",
+ "pr": 1539
+ },
+ {
+ "note": "Move LibAddressArray contract to contracts-utils",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/tokens/CHANGELOG.md b/contracts/exchange-libs/CHANGELOG.md
index 6d53a0b9c..59d0804da 100644
--- a/contracts/tokens/CHANGELOG.md
+++ b/contracts/exchange-libs/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.6 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.5 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/examples/README.md b/contracts/exchange-libs/README.md
index ca23d0974..696fb7f11 100644
--- a/contracts/examples/README.md
+++ b/contracts/exchange-libs/README.md
@@ -1,11 +1,14 @@
-## Contract examples
+## Exchange Libraries
-Example smart contracts that interact with 0x protocol.
+This package contains the implementations of various libraries and utilities used within the [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange) contract. These libraries may be useful when creating external contracts that interact with the `Exchange` contract. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contracts can be found in the [contracts](./contracts) directory.
-This package contains example implementations of contracts that interact with the protocol but are _not_ intended for use in production. Examples include [filter](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#filter-contracts) contracts, a [Wallet](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#wallet) contract, and a [Validator](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#validator) contract, among others.
+**Install**
+
+```bash
+npm install @0x/contracts-exchange-libs --save
+```
## Contributing
@@ -34,13 +37,13 @@ yarn install
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
```bash
-PKG=@0x/contracts-examples yarn build
+PKG=@0x/contracts-exchange-libs yarn build
```
Or continuously rebuild on change:
```bash
-PKG=@0x/contracts-examples yarn watch
+PKG=@0x/contracts-exchange-libs yarn watch
```
### Clean
@@ -54,3 +57,13 @@ yarn clean
```bash
yarn lint
```
+
+### Run Tests
+
+```bash
+yarn test
+```
+
+#### Testing options
+
+Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
diff --git a/contracts/libs/compiler.json b/contracts/exchange-libs/compiler.json
index 349d3063b..349d3063b 100644
--- a/contracts/libs/compiler.json
+++ b/contracts/exchange-libs/compiler.json
diff --git a/contracts/libs/contracts/libs/LibAbiEncoder.sol b/contracts/exchange-libs/contracts/src/LibAbiEncoder.sol
index 5422bfeec..5422bfeec 100644
--- a/contracts/libs/contracts/libs/LibAbiEncoder.sol
+++ b/contracts/exchange-libs/contracts/src/LibAbiEncoder.sol
diff --git a/contracts/libs/contracts/libs/LibAssetProxyErrors.sol b/contracts/exchange-libs/contracts/src/LibAssetProxyErrors.sol
index 96c48b5e3..96c48b5e3 100644
--- a/contracts/libs/contracts/libs/LibAssetProxyErrors.sol
+++ b/contracts/exchange-libs/contracts/src/LibAssetProxyErrors.sol
diff --git a/contracts/libs/contracts/libs/LibConstants.sol b/contracts/exchange-libs/contracts/src/LibConstants.sol
index 3efa3e1b3..3efa3e1b3 100644
--- a/contracts/libs/contracts/libs/LibConstants.sol
+++ b/contracts/exchange-libs/contracts/src/LibConstants.sol
diff --git a/contracts/libs/contracts/libs/LibEIP712.sol b/contracts/exchange-libs/contracts/src/LibEIP712.sol
index 3a85ab3c0..3a85ab3c0 100644
--- a/contracts/libs/contracts/libs/LibEIP712.sol
+++ b/contracts/exchange-libs/contracts/src/LibEIP712.sol
diff --git a/contracts/libs/contracts/libs/LibExchangeErrors.sol b/contracts/exchange-libs/contracts/src/LibExchangeErrors.sol
index a160242c9..a160242c9 100644
--- a/contracts/libs/contracts/libs/LibExchangeErrors.sol
+++ b/contracts/exchange-libs/contracts/src/LibExchangeErrors.sol
diff --git a/contracts/libs/contracts/libs/LibExchangeSelectors.sol b/contracts/exchange-libs/contracts/src/LibExchangeSelectors.sol
index 71640c609..71640c609 100644
--- a/contracts/libs/contracts/libs/LibExchangeSelectors.sol
+++ b/contracts/exchange-libs/contracts/src/LibExchangeSelectors.sol
diff --git a/contracts/libs/contracts/libs/LibFillResults.sol b/contracts/exchange-libs/contracts/src/LibFillResults.sol
index 74b7f7984..08a1649b8 100644
--- a/contracts/libs/contracts/libs/LibFillResults.sol
+++ b/contracts/exchange-libs/contracts/src/LibFillResults.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/SafeMath/SafeMath.sol";
+import "@0x/contracts-utils/contracts/src/SafeMath.sol";
contract LibFillResults is
diff --git a/contracts/libs/contracts/libs/LibMath.sol b/contracts/exchange-libs/contracts/src/LibMath.sol
index f14b1b34d..24ea90c6b 100644
--- a/contracts/libs/contracts/libs/LibMath.sol
+++ b/contracts/exchange-libs/contracts/src/LibMath.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/SafeMath/SafeMath.sol";
+import "@0x/contracts-utils/contracts/src/SafeMath.sol";
contract LibMath is
diff --git a/contracts/libs/contracts/libs/LibOrder.sol b/contracts/exchange-libs/contracts/src/LibOrder.sol
index fcf5da5fb..fcf5da5fb 100644
--- a/contracts/libs/contracts/libs/LibOrder.sol
+++ b/contracts/exchange-libs/contracts/src/LibOrder.sol
diff --git a/contracts/libs/contracts/test/TestLibs/TestLibs.sol b/contracts/exchange-libs/contracts/test/TestLibs.sol
index bd5f9f9da..751a3773e 100644
--- a/contracts/libs/contracts/test/TestLibs/TestLibs.sol
+++ b/contracts/exchange-libs/contracts/test/TestLibs.sol
@@ -19,10 +19,10 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "../../libs/LibMath.sol";
-import "../../libs/LibOrder.sol";
-import "../../libs/LibFillResults.sol";
-import "../../libs/LibAbiEncoder.sol";
+import "../src/LibMath.sol";
+import "../src/LibOrder.sol";
+import "../src/LibFillResults.sol";
+import "../src/LibAbiEncoder.sol";
contract TestLibs is
diff --git a/contracts/libs/package.json b/contracts/exchange-libs/package.json
index abbdfdb97..9d35106cc 100644
--- a/contracts/libs/package.json
+++ b/contracts/exchange-libs/package.json
@@ -1,6 +1,6 @@
{
- "name": "@0x/contracts-libs",
- "version": "1.0.5",
+ "name": "@0x/contracts-exchange-libs",
+ "version": "1.0.0",
"engines": {
"node": ">=6.12"
},
@@ -45,42 +45,33 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/libs/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-multisig": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
+ "@0x/contracts-utils": "^3.0.0",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
- "@types/js-combinatorics": "^0.5.29",
- "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
- "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
},
"publishConfig": {
diff --git a/contracts/libs/src/artifacts/index.ts b/contracts/exchange-libs/src/artifacts/index.ts
index 3955bbe2b..3955bbe2b 100644
--- a/contracts/libs/src/artifacts/index.ts
+++ b/contracts/exchange-libs/src/artifacts/index.ts
diff --git a/contracts/libs/src/index.ts b/contracts/exchange-libs/src/index.ts
index d55f08ea2..d55f08ea2 100644
--- a/contracts/libs/src/index.ts
+++ b/contracts/exchange-libs/src/index.ts
diff --git a/contracts/libs/src/wrappers/index.ts b/contracts/exchange-libs/src/wrappers/index.ts
index baaae6e34..baaae6e34 100644
--- a/contracts/libs/src/wrappers/index.ts
+++ b/contracts/exchange-libs/src/wrappers/index.ts
diff --git a/contracts/libs/test/exchange/libs.ts b/contracts/exchange-libs/test/exchange_libs.ts
index 44ff6a844..b61323189 100644
--- a/contracts/libs/test/exchange/libs.ts
+++ b/contracts/exchange-libs/test/exchange_libs.ts
@@ -13,8 +13,8 @@ import { SignedOrder } from '@0x/types';
import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
-import { TestLibsContract } from '../../generated-wrappers/test_libs';
-import { artifacts } from '../../src/artifacts';
+import { TestLibsContract } from '../generated-wrappers/test_libs';
+import { artifacts } from '../src/artifacts';
chaiSetup.configure();
const expect = chai.expect;
diff --git a/contracts/exchange-libs/test/global_hooks.ts b/contracts/exchange-libs/test/global_hooks.ts
new file mode 100644
index 000000000..f8ace376a
--- /dev/null
+++ b/contracts/exchange-libs/test/global_hooks.ts
@@ -0,0 +1,17 @@
+import { env, EnvVars } from '@0x/dev-utils';
+
+import { coverage, profiler, provider } from '@0x/contracts-test-utils';
+before('start web3 provider', () => {
+ provider.start();
+});
+after('generate coverage report', async () => {
+ if (env.parseBoolean(EnvVars.SolidityCoverage)) {
+ const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
+ await coverageSubprovider.writeCoverageAsync();
+ }
+ if (env.parseBoolean(EnvVars.SolidityProfiler)) {
+ const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
+ await profilerSubprovider.writeProfilerOutputAsync();
+ }
+ provider.stop();
+});
diff --git a/contracts/libs/tsconfig.json b/contracts/exchange-libs/tsconfig.json
index 27ca35085..27ca35085 100644
--- a/contracts/libs/tsconfig.json
+++ b/contracts/exchange-libs/tsconfig.json
diff --git a/contracts/examples/tslint.json b/contracts/exchange-libs/tslint.json
index 1bb3ac2a2..1bb3ac2a2 100644
--- a/contracts/examples/tslint.json
+++ b/contracts/exchange-libs/tslint.json
diff --git a/contracts/exchange/CHANGELOG.json b/contracts/exchange/CHANGELOG.json
new file mode 100644
index 000000000..e4c7aa986
--- /dev/null
+++ b/contracts/exchange/CHANGELOG.json
@@ -0,0 +1,15 @@
+[
+ {
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "Move Exchange contract out of contracts-protocol to new package",
+ "pr": 1539
+ },
+ {
+ "note": "Move example contracts out of contracts-examples to new package",
+ "pr": 1539
+ }
+ ]
+ }
+]
diff --git a/contracts/exchange/CHANGELOG.md b/contracts/exchange/CHANGELOG.md
new file mode 100644
index 000000000..779eb68a7
--- /dev/null
+++ b/contracts/exchange/CHANGELOG.md
@@ -0,0 +1,28 @@
+<!--
+changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
+Edit the package's CHANGELOG.json file only.
+-->
+
+CHANGELOG
+
+## v2.2.3 - _January 17, 2019_
+
+ * Dependencies updated
+
+## v2.2.2 - _January 15, 2019_
+
+ * Dependencies updated
+
+## v2.2.1 - _January 11, 2019_
+
+ * Dependencies updated
+
+## v2.2.0 - _January 9, 2019_
+
+ * Added LibAddressArray (#1383)
+ * Add validation and comments to MultiAssetProxy (#1455)
+ * Move OrderValidator to extensions (#1464)
+
+## v2.1.59 - _December 13, 2018_
+
+ * Dependencies updated
diff --git a/contracts/exchange/DEPLOYS.json b/contracts/exchange/DEPLOYS.json
new file mode 100644
index 000000000..1e110d4f7
--- /dev/null
+++ b/contracts/exchange/DEPLOYS.json
@@ -0,0 +1,17 @@
+[
+ {
+ "name": "Exchange",
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "protocol v2 deploy",
+ "networks": {
+ "1": "0x4f833a24e1f95d70f028921e27040ca56e09ab0b",
+ "3": "0x4530c0483a1633c7a1c97d2c53721caff2caaaaf",
+ "4": "0x22ebc052f43a88efa06379426120718170f2204e",
+ "42": "0x35dd2932454449b14cee11a94d3674a936d5d7b2"
+ }
+ }
+ ]
+ }
+]
diff --git a/contracts/exchange/README.md b/contracts/exchange/README.md
new file mode 100644
index 000000000..41997f84d
--- /dev/null
+++ b/contracts/exchange/README.md
@@ -0,0 +1,73 @@
+## Exchange
+
+This package contains the implementation of the [`Exchange`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#exchange). This contract is responsible for settling trades and is typically the entry point for all transactions that interact with the 0x protocol. Lightweight examples of how external contracts can interct with the `Exchange` contract can be found in the [examples](./contracts/examples) directory. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
+
+## Installation
+
+**Install**
+
+```bash
+npm install @0x/contracts-exchange --save
+```
+
+## Bug bounty
+
+A bug bounty for the 2.0.0 contracts is ongoing! Instructions can be found [here](https://0xproject.com/wiki#Bug-Bounty).
+
+## Contributing
+
+We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
+
+For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
+
+Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
+
+### Install Dependencies
+
+If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
+
+```bash
+yarn config set workspaces-experimental true
+```
+
+Then install dependencies
+
+```bash
+yarn install
+```
+
+### Build
+
+To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
+
+```bash
+PKG=@0x/contracts-exchange yarn build
+```
+
+Or continuously rebuild on change:
+
+```bash
+PKG=@0x/contracts-exchange yarn watch
+```
+
+### Clean
+
+```bash
+yarn clean
+```
+
+### Lint
+
+```bash
+yarn lint
+```
+
+### Run Tests
+
+```bash
+yarn test
+```
+
+#### Testing options
+
+Contracts testing options like coverage, profiling, revert traces or backing node choosing - are described [here](../TESTING.md).
diff --git a/contracts/interfaces/compiler.json b/contracts/exchange/compiler.json
index 38a232541..e53fce0ec 100644
--- a/contracts/interfaces/compiler.json
+++ b/contracts/exchange/compiler.json
@@ -19,9 +19,7 @@
}
},
"contracts": [
- "IAssetData",
- "IAssetProxy",
- "IAuthorizable",
+ "Exchange",
"IAssetProxyDispatcher",
"IExchange",
"IExchangeCore",
@@ -30,6 +28,14 @@
"ITransactions",
"IValidator",
"IWallet",
- "IWrapperFunctions"
+ "IWrapperFunctions",
+ "TestAssetProxyDispatcher",
+ "TestExchangeInternals",
+ "TestSignatureValidator",
+ "TestStaticCallReceiver",
+ "ExchangeWrapper",
+ "Validator",
+ "Wallet",
+ "Whitelist"
]
}
diff --git a/contracts/examples/contracts/ExchangeWrapper/ExchangeWrapper.sol b/contracts/exchange/contracts/examples/ExchangeWrapper.sol
index d98136922..604f614b5 100644
--- a/contracts/examples/contracts/ExchangeWrapper/ExchangeWrapper.sol
+++ b/contracts/exchange/contracts/examples/ExchangeWrapper.sol
@@ -19,8 +19,8 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
+import "../src/interfaces/IExchange.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
contract ExchangeWrapper {
diff --git a/contracts/examples/contracts/Validator/Validator.sol b/contracts/exchange/contracts/examples/Validator.sol
index e488a9ca7..98a10d37f 100644
--- a/contracts/examples/contracts/Validator/Validator.sol
+++ b/contracts/exchange/contracts/examples/Validator.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IValidator.sol";
+import "../src/interfaces/IValidator.sol";
contract Validator is
diff --git a/contracts/examples/contracts/Wallet/Wallet.sol b/contracts/exchange/contracts/examples/Wallet.sol
index 8edc74eb3..17e3dd5cc 100644
--- a/contracts/examples/contracts/Wallet/Wallet.sol
+++ b/contracts/exchange/contracts/examples/Wallet.sol
@@ -18,8 +18,8 @@
pragma solidity 0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IWallet.sol";
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "../src/interfaces/IWallet.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
contract Wallet is
diff --git a/contracts/examples/contracts/Whitelist/Whitelist.sol b/contracts/exchange/contracts/examples/Whitelist.sol
index 2a3d33738..a9db1bb82 100644
--- a/contracts/examples/contracts/Whitelist/Whitelist.sol
+++ b/contracts/exchange/contracts/examples/Whitelist.sol
@@ -19,9 +19,9 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "../src/interfaces/IExchange.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
contract Whitelist is
diff --git a/contracts/protocol/contracts/protocol/Exchange/Exchange.sol b/contracts/exchange/contracts/src/Exchange.sol
index 65ca742ea..541750518 100644
--- a/contracts/protocol/contracts/protocol/Exchange/Exchange.sol
+++ b/contracts/exchange/contracts/src/Exchange.sol
@@ -19,7 +19,7 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibConstants.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibConstants.sol";
import "./MixinExchangeCore.sol";
import "./MixinSignatureValidator.sol";
import "./MixinWrapperFunctions.sol";
diff --git a/contracts/exchange/contracts/src/MixinAssetProxyDispatcher.sol b/contracts/exchange/contracts/src/MixinAssetProxyDispatcher.sol
new file mode 100644
index 000000000..c55d6aaec
--- /dev/null
+++ b/contracts/exchange/contracts/src/MixinAssetProxyDispatcher.sol
@@ -0,0 +1,174 @@
+/*
+
+ 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.4.24;
+
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
+import "./mixins/MAssetProxyDispatcher.sol";
+import "@0x/contracts-asset-proxy/contracts/src/interfaces/IAssetProxy.sol";
+
+
+contract MixinAssetProxyDispatcher is
+ Ownable,
+ MAssetProxyDispatcher
+{
+ // Mapping from Asset Proxy Id's to their respective Asset Proxy
+ mapping (bytes4 => IAssetProxy) public assetProxies;
+
+ /// @dev Registers an asset proxy to its asset proxy id.
+ /// Once an asset proxy is registered, it cannot be unregistered.
+ /// @param assetProxy Address of new asset proxy to register.
+ function registerAssetProxy(address assetProxy)
+ external
+ onlyOwner
+ {
+ IAssetProxy assetProxyContract = IAssetProxy(assetProxy);
+
+ // Ensure that no asset proxy exists with current id.
+ bytes4 assetProxyId = assetProxyContract.getProxyId();
+ address currentAssetProxy = assetProxies[assetProxyId];
+ require(
+ currentAssetProxy == address(0),
+ "ASSET_PROXY_ALREADY_EXISTS"
+ );
+
+ // Add asset proxy and log registration.
+ assetProxies[assetProxyId] = assetProxyContract;
+ emit AssetProxyRegistered(
+ assetProxyId,
+ assetProxy
+ );
+ }
+
+ /// @dev Gets an asset proxy.
+ /// @param assetProxyId Id of the asset proxy.
+ /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.
+ function getAssetProxy(bytes4 assetProxyId)
+ external
+ view
+ returns (address)
+ {
+ return assetProxies[assetProxyId];
+ }
+
+ /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.
+ /// @param assetData Byte array encoded for the asset.
+ /// @param from Address to transfer token from.
+ /// @param to Address to transfer token to.
+ /// @param amount Amount of token to transfer.
+ function dispatchTransferFrom(
+ bytes memory assetData,
+ address from,
+ address to,
+ uint256 amount
+ )
+ internal
+ {
+ // Do nothing if no amount should be transferred.
+ if (amount > 0 && from != to) {
+ // Ensure assetData length is valid
+ require(
+ assetData.length > 3,
+ "LENGTH_GREATER_THAN_3_REQUIRED"
+ );
+
+ // Lookup assetProxy. We do not use `LibBytes.readBytes4` for gas efficiency reasons.
+ bytes4 assetProxyId;
+ assembly {
+ assetProxyId := and(mload(
+ add(assetData, 32)),
+ 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000
+ )
+ }
+ address assetProxy = assetProxies[assetProxyId];
+
+ // Ensure that assetProxy exists
+ require(
+ assetProxy != address(0),
+ "ASSET_PROXY_DOES_NOT_EXIST"
+ );
+
+ // We construct calldata for the `assetProxy.transferFrom` ABI.
+ // The layout of this calldata is in the table below.
+ //
+ // | Area | Offset | Length | Contents |
+ // | -------- |--------|---------|-------------------------------------------- |
+ // | Header | 0 | 4 | function selector |
+ // | Params | | 4 * 32 | function parameters: |
+ // | | 4 | | 1. offset to assetData (*) |
+ // | | 36 | | 2. from |
+ // | | 68 | | 3. to |
+ // | | 100 | | 4. amount |
+ // | Data | | | assetData: |
+ // | | 132 | 32 | assetData Length |
+ // | | 164 | ** | assetData Contents |
+
+ assembly {
+ /////// Setup State ///////
+ // `cdStart` is the start of the calldata for `assetProxy.transferFrom` (equal to free memory ptr).
+ let cdStart := mload(64)
+ // `dataAreaLength` is the total number of words needed to store `assetData`
+ // As-per the ABI spec, this value is padded up to the nearest multiple of 32,
+ // and includes 32-bytes for length.
+ let dataAreaLength := and(add(mload(assetData), 63), 0xFFFFFFFFFFFE0)
+ // `cdEnd` is the end of the calldata for `assetProxy.transferFrom`.
+ let cdEnd := add(cdStart, add(132, dataAreaLength))
+
+
+ /////// Setup Header Area ///////
+ // This area holds the 4-byte `transferFromSelector`.
+ // bytes4(keccak256("transferFrom(bytes,address,address,uint256)")) = 0xa85e59e4
+ mstore(cdStart, 0xa85e59e400000000000000000000000000000000000000000000000000000000)
+
+ /////// Setup Params Area ///////
+ // Each parameter is padded to 32-bytes. The entire Params Area is 128 bytes.
+ // Notes:
+ // 1. The offset to `assetData` is the length of the Params Area (128 bytes).
+ // 2. A 20-byte mask is applied to addresses to zero-out the unused bytes.
+ mstore(add(cdStart, 4), 128)
+ mstore(add(cdStart, 36), and(from, 0xffffffffffffffffffffffffffffffffffffffff))
+ mstore(add(cdStart, 68), and(to, 0xffffffffffffffffffffffffffffffffffffffff))
+ mstore(add(cdStart, 100), amount)
+
+ /////// Setup Data Area ///////
+ // This area holds `assetData`.
+ let dataArea := add(cdStart, 132)
+ // solhint-disable-next-line no-empty-blocks
+ for {} lt(dataArea, cdEnd) {} {
+ mstore(dataArea, mload(assetData))
+ dataArea := add(dataArea, 32)
+ assetData := add(assetData, 32)
+ }
+
+ /////// Call `assetProxy.transferFrom` using the constructed calldata ///////
+ let success := call(
+ gas, // forward all gas
+ assetProxy, // call address of asset proxy
+ 0, // don't send any ETH
+ cdStart, // pointer to start of input
+ sub(cdEnd, cdStart), // length of input
+ cdStart, // write output over input
+ 512 // reserve 512 bytes for output
+ )
+ if iszero(success) {
+ revert(cdStart, returndatasize())
+ }
+ }
+ }
+ }
+}
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinExchangeCore.sol b/contracts/exchange/contracts/src/MixinExchangeCore.sol
index 72bcebc62..2e4f717c9 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinExchangeCore.sol
+++ b/contracts/exchange/contracts/src/MixinExchangeCore.sol
@@ -19,11 +19,11 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol";
-import "@0x/contracts-libs/contracts/libs/LibConstants.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
+import "@0x/contracts-utils/contracts/src/ReentrancyGuard.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibConstants.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
import "./mixins/MExchangeCore.sol";
import "./mixins/MSignatureValidator.sol";
import "./mixins/MTransactions.sol";
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinMatchOrders.sol b/contracts/exchange/contracts/src/MixinMatchOrders.sol
index 2627b82fd..e84842793 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinMatchOrders.sol
+++ b/contracts/exchange/contracts/src/MixinMatchOrders.sol
@@ -14,11 +14,11 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol";
-import "@0x/contracts-libs/contracts/libs/LibConstants.sol";
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-utils/contracts/src/ReentrancyGuard.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibConstants.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
import "./mixins/MExchangeCore.sol";
import "./mixins/MMatchOrders.sol";
import "./mixins/MTransactions.sol";
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinSignatureValidator.sol b/contracts/exchange/contracts/src/MixinSignatureValidator.sol
index b40aa1412..421ec666a 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinSignatureValidator.sol
+++ b/contracts/exchange/contracts/src/MixinSignatureValidator.sol
@@ -18,12 +18,12 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-utils/contracts/src/ReentrancyGuard.sol";
import "./mixins/MSignatureValidator.sol";
import "./mixins/MTransactions.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IWallet.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IValidator.sol";
+import "./interfaces/IWallet.sol";
+import "./interfaces/IValidator.sol";
contract MixinSignatureValidator is
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinTransactions.sol b/contracts/exchange/contracts/src/MixinTransactions.sol
index 1ac5b1a5e..6b9b06b0d 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinTransactions.sol
+++ b/contracts/exchange/contracts/src/MixinTransactions.sol
@@ -17,10 +17,10 @@
*/
pragma solidity ^0.4.24;
-import "@0x/contracts-libs/contracts/libs/LibExchangeErrors.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibExchangeErrors.sol";
import "./mixins/MSignatureValidator.sol";
import "./mixins/MTransactions.sol";
-import "@0x/contracts-libs/contracts/libs/LibEIP712.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibEIP712.sol";
contract MixinTransactions is
diff --git a/contracts/protocol/contracts/protocol/Exchange/MixinWrapperFunctions.sol b/contracts/exchange/contracts/src/MixinWrapperFunctions.sol
index 6fc6ee999..911107422 100644
--- a/contracts/protocol/contracts/protocol/Exchange/MixinWrapperFunctions.sol
+++ b/contracts/exchange/contracts/src/MixinWrapperFunctions.sol
@@ -19,11 +19,11 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol";
-import "@0x/contracts-libs/contracts/libs/LibMath.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-libs/contracts/libs/LibAbiEncoder.sol";
+import "@0x/contracts-utils/contracts/src/ReentrancyGuard.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibMath.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibAbiEncoder.sol";
import "./mixins/MExchangeCore.sol";
import "./mixins/MWrapperFunctions.sol";
diff --git a/contracts/exchange/contracts/src/interfaces/IAssetProxyDispatcher.sol b/contracts/exchange/contracts/src/interfaces/IAssetProxyDispatcher.sol
new file mode 100644
index 000000000..b73881c07
--- /dev/null
+++ b/contracts/exchange/contracts/src/interfaces/IAssetProxyDispatcher.sol
@@ -0,0 +1,37 @@
+/*
+
+ 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.4.24;
+
+
+contract IAssetProxyDispatcher {
+
+ /// @dev Registers an asset proxy to its asset proxy id.
+ /// Once an asset proxy is registered, it cannot be unregistered.
+ /// @param assetProxy Address of new asset proxy to register.
+ function registerAssetProxy(address assetProxy)
+ external;
+
+ /// @dev Gets an asset proxy.
+ /// @param assetProxyId Id of the asset proxy.
+ /// @return The asset proxy registered to assetProxyId. Returns 0x0 if no proxy is registered.
+ function getAssetProxy(bytes4 assetProxyId)
+ external
+ view
+ returns (address);
+}
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IExchange.sol b/contracts/exchange/contracts/src/interfaces/IExchange.sol
index 866e4c194..866e4c194 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IExchange.sol
+++ b/contracts/exchange/contracts/src/interfaces/IExchange.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IExchangeCore.sol b/contracts/exchange/contracts/src/interfaces/IExchangeCore.sol
index ab4a62408..f87abb2ad 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IExchangeCore.sol
+++ b/contracts/exchange/contracts/src/interfaces/IExchangeCore.sol
@@ -19,8 +19,8 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
contract IExchangeCore {
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IMatchOrders.sol b/contracts/exchange/contracts/src/interfaces/IMatchOrders.sol
index 5df46ea80..fba1da6d9 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IMatchOrders.sol
+++ b/contracts/exchange/contracts/src/interfaces/IMatchOrders.sol
@@ -18,8 +18,8 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
contract IMatchOrders {
diff --git a/contracts/interfaces/contracts/protocol/Exchange/ISignatureValidator.sol b/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol
index c5a4a57e1..c5a4a57e1 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/ISignatureValidator.sol
+++ b/contracts/exchange/contracts/src/interfaces/ISignatureValidator.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/ITransactions.sol b/contracts/exchange/contracts/src/interfaces/ITransactions.sol
index aaaee389f..aaaee389f 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/ITransactions.sol
+++ b/contracts/exchange/contracts/src/interfaces/ITransactions.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IValidator.sol b/contracts/exchange/contracts/src/interfaces/IValidator.sol
index d214e54dd..d214e54dd 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IValidator.sol
+++ b/contracts/exchange/contracts/src/interfaces/IValidator.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IWallet.sol b/contracts/exchange/contracts/src/interfaces/IWallet.sol
index c2db4a5b1..c2db4a5b1 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IWallet.sol
+++ b/contracts/exchange/contracts/src/interfaces/IWallet.sol
diff --git a/contracts/interfaces/contracts/protocol/Exchange/IWrapperFunctions.sol b/contracts/exchange/contracts/src/interfaces/IWrapperFunctions.sol
index 0eeaa874b..b1afc8895 100644
--- a/contracts/interfaces/contracts/protocol/Exchange/IWrapperFunctions.sol
+++ b/contracts/exchange/contracts/src/interfaces/IWrapperFunctions.sol
@@ -19,8 +19,8 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
contract IWrapperFunctions {
diff --git a/contracts/exchange/contracts/src/mixins/MAssetProxyDispatcher.sol b/contracts/exchange/contracts/src/mixins/MAssetProxyDispatcher.sol
new file mode 100644
index 000000000..0ae555dda
--- /dev/null
+++ b/contracts/exchange/contracts/src/mixins/MAssetProxyDispatcher.sol
@@ -0,0 +1,45 @@
+/*
+
+ 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.4.24;
+
+import "../interfaces/IAssetProxyDispatcher.sol";
+
+
+contract MAssetProxyDispatcher is
+ IAssetProxyDispatcher
+{
+ // Logs registration of new asset proxy
+ event AssetProxyRegistered(
+ bytes4 id, // Id of new registered AssetProxy.
+ address assetProxy // Address of new registered AssetProxy.
+ );
+
+ /// @dev Forwards arguments to assetProxy and calls `transferFrom`. Either succeeds or throws.
+ /// @param assetData Byte array encoded for the asset.
+ /// @param from Address to transfer token from.
+ /// @param to Address to transfer token to.
+ /// @param amount Amount of token to transfer.
+ function dispatchTransferFrom(
+ bytes memory assetData,
+ address from,
+ address to,
+ uint256 amount
+ )
+ internal;
+}
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MExchangeCore.sol b/contracts/exchange/contracts/src/mixins/MExchangeCore.sol
index 09dc491cd..b5a9c660b 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MExchangeCore.sol
+++ b/contracts/exchange/contracts/src/mixins/MExchangeCore.sol
@@ -19,9 +19,9 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchangeCore.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "../interfaces/IExchangeCore.sol";
contract MExchangeCore is
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MMatchOrders.sol b/contracts/exchange/contracts/src/mixins/MMatchOrders.sol
index 56ee895c4..3dcc9f31b 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MMatchOrders.sol
+++ b/contracts/exchange/contracts/src/mixins/MMatchOrders.sol
@@ -18,9 +18,9 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IMatchOrders.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "../interfaces/IMatchOrders.sol";
contract MMatchOrders is
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MSignatureValidator.sol b/contracts/exchange/contracts/src/mixins/MSignatureValidator.sol
index 6407760d4..c39e84e08 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MSignatureValidator.sol
+++ b/contracts/exchange/contracts/src/mixins/MSignatureValidator.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/ISignatureValidator.sol";
+import "../interfaces/ISignatureValidator.sol";
contract MSignatureValidator is
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MTransactions.sol b/contracts/exchange/contracts/src/mixins/MTransactions.sol
index 04dd716d7..04a25ccf3 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MTransactions.sol
+++ b/contracts/exchange/contracts/src/mixins/MTransactions.sol
@@ -17,7 +17,7 @@
*/
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/ITransactions.sol";
+import "../interfaces/ITransactions.sol";
contract MTransactions is
diff --git a/contracts/protocol/contracts/protocol/Exchange/mixins/MWrapperFunctions.sol b/contracts/exchange/contracts/src/mixins/MWrapperFunctions.sol
index 2ff3b8790..df50c6a8e 100644
--- a/contracts/protocol/contracts/protocol/Exchange/mixins/MWrapperFunctions.sol
+++ b/contracts/exchange/contracts/src/mixins/MWrapperFunctions.sol
@@ -19,9 +19,9 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IWrapperFunctions.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "../interfaces/IWrapperFunctions.sol";
contract MWrapperFunctions is
diff --git a/contracts/protocol/contracts/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol b/contracts/exchange/contracts/test/TestAssetProxyDispatcher.sol
index ad71fc9a1..88155c6ee 100644
--- a/contracts/protocol/contracts/test/TestAssetProxyDispatcher/TestAssetProxyDispatcher.sol
+++ b/contracts/exchange/contracts/test/TestAssetProxyDispatcher.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "../../protocol/Exchange/MixinAssetProxyDispatcher.sol";
+import "../src/MixinAssetProxyDispatcher.sol";
contract TestAssetProxyDispatcher is
diff --git a/contracts/protocol/contracts/test/TestExchangeInternals/TestExchangeInternals.sol b/contracts/exchange/contracts/test/TestExchangeInternals.sol
index 27187f8f8..dce8e03c0 100644
--- a/contracts/protocol/contracts/test/TestExchangeInternals/TestExchangeInternals.sol
+++ b/contracts/exchange/contracts/test/TestExchangeInternals.sol
@@ -19,7 +19,7 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "../../protocol/Exchange/Exchange.sol";
+import "../src/Exchange.sol";
// solhint-disable no-empty-blocks
diff --git a/contracts/protocol/contracts/test/TestSignatureValidator/TestSignatureValidator.sol b/contracts/exchange/contracts/test/TestSignatureValidator.sol
index ea3e2de59..2f9523666 100644
--- a/contracts/protocol/contracts/test/TestSignatureValidator/TestSignatureValidator.sol
+++ b/contracts/exchange/contracts/test/TestSignatureValidator.sol
@@ -18,8 +18,8 @@
pragma solidity 0.4.24;
-import "../../protocol/Exchange/MixinSignatureValidator.sol";
-import "../../protocol/Exchange/MixinTransactions.sol";
+import "../src/MixinSignatureValidator.sol";
+import "../src/MixinTransactions.sol";
contract TestSignatureValidator is
diff --git a/contracts/protocol/contracts/test/TestStaticCallReceiver/TestStaticCallReceiver.sol b/contracts/exchange/contracts/test/TestStaticCallReceiver.sol
index d08da7303..23e60b387 100644
--- a/contracts/protocol/contracts/test/TestStaticCallReceiver/TestStaticCallReceiver.sol
+++ b/contracts/exchange/contracts/test/TestStaticCallReceiver.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
// solhint-disable no-unused-vars
diff --git a/contracts/protocol/package.json b/contracts/exchange/package.json
index 420ca4e3d..9d7db1862 100644
--- a/contracts/protocol/package.json
+++ b/contracts/exchange/package.json
@@ -1,6 +1,6 @@
{
- "name": "@0x/contracts-protocol",
- "version": "2.2.2",
+ "name": "@0x/contracts-exchange",
+ "version": "1.0.0",
"engines": {
"node": ">=6.12"
},
@@ -32,7 +32,7 @@
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
},
"config": {
- "abis": "generated-artifacts/@(AssetProxyOwner|ERC20Proxy|ERC721Proxy|Exchange|MixinAuthorizable|MultiAssetProxy|TestSignatureValidator|TestAssetProxyOwner|TestAssetProxyDispatcher|TestExchangeInternals|TestStaticCallReceiver).json"
+ "abis": "generated-artifacts/@(ERC20Proxy|ERC721Proxy|Exchange|IAssetProxyDispatcher|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IWrapperFunctions|IValidator|IWallet|MixinAuthorizable|MultiAssetProxy|TestSignatureValidator|TestAssetProxyDispatcher|TestExchangeInternals|TestStaticCallReceiver|ExchangeWrapper|Validator|Wallet|Whitelist).json"
},
"repository": {
"type": "git",
@@ -47,42 +47,34 @@
"@0x/abi-gen": "^1.0.22",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-examples": "^1.0.5",
- "@0x/contracts-interfaces": "^1.0.5",
- "@0x/contracts-libs": "^1.0.5",
- "@0x/contracts-multisig": "^1.0.5",
- "@0x/contracts-test-utils": "^2.0.0",
- "@0x/contracts-tokens": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
+ "@0x/contracts-asset-proxy": "^1.0.0",
+ "@0x/contracts-exchange-libs": "^1.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
+ "@0x/contracts-erc20": "^1.0.0",
+ "@0x/contracts-erc721": "^1.0.0",
+ "@0x/contracts-utils": "^3.0.0",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
- "@types/js-combinatorics": "^0.5.29",
- "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
"ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
diff --git a/contracts/interfaces/src/artifacts/index.ts b/contracts/exchange/src/artifacts/index.ts
index 5a2a37d8a..798ff17ab 100644
--- a/contracts/interfaces/src/artifacts/index.ts
+++ b/contracts/exchange/src/artifacts/index.ts
@@ -1,9 +1,8 @@
import { ContractArtifact } from 'ethereum-types';
-import * as IAssetData from '../../generated-artifacts/IAssetData.json';
-import * as IAssetProxy from '../../generated-artifacts/IAssetProxy.json';
+import * as Exchange from '../../generated-artifacts/Exchange.json';
+import * as ExchangeWrapper from '../../generated-artifacts/ExchangeWrapper.json';
import * as IAssetProxyDispatcher from '../../generated-artifacts/IAssetProxyDispatcher.json';
-import * as IAuthorizable from '../../generated-artifacts/IAuthorizable.json';
import * as IExchange from '../../generated-artifacts/IExchange.json';
import * as IExchangeCore from '../../generated-artifacts/IExchangeCore.json';
import * as IMatchOrders from '../../generated-artifacts/IMatchOrders.json';
@@ -12,18 +11,31 @@ import * as ITransactions from '../../generated-artifacts/ITransactions.json';
import * as IValidator from '../../generated-artifacts/IValidator.json';
import * as IWallet from '../../generated-artifacts/IWallet.json';
import * as IWrapperFunctions from '../../generated-artifacts/IWrapperFunctions.json';
+import * as TestAssetProxyDispatcher from '../../generated-artifacts/TestAssetProxyDispatcher.json';
+import * as TestExchangeInternals from '../../generated-artifacts/TestExchangeInternals.json';
+import * as TestSignatureValidator from '../../generated-artifacts/TestSignatureValidator.json';
+import * as TestStaticCallReceiver from '../../generated-artifacts/TestStaticCallReceiver.json';
+import * as Validator from '../../generated-artifacts/Validator.json';
+import * as Wallet from '../../generated-artifacts/Wallet.json';
+import * as Whitelist from '../../generated-artifacts/Whitelist.json';
export const artifacts = {
- IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact,
- IAuthorizable: IAuthorizable as ContractArtifact,
+ Exchange: Exchange as ContractArtifact,
+ TestAssetProxyDispatcher: TestAssetProxyDispatcher as ContractArtifact,
+ TestExchangeInternals: TestExchangeInternals as ContractArtifact,
+ TestSignatureValidator: TestSignatureValidator as ContractArtifact,
+ TestStaticCallReceiver: TestStaticCallReceiver as ContractArtifact,
IExchange: IExchange as ContractArtifact,
IExchangeCore: IExchangeCore as ContractArtifact,
IMatchOrders: IMatchOrders as ContractArtifact,
ISignatureValidator: ISignatureValidator as ContractArtifact,
ITransactions: ITransactions as ContractArtifact,
IWrapperFunctions: IWrapperFunctions as ContractArtifact,
- IAssetData: IAssetData as ContractArtifact,
- IAssetProxy: IAssetProxy as ContractArtifact,
+ IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact,
IValidator: IValidator as ContractArtifact,
IWallet: IWallet as ContractArtifact,
+ ExchangeWrapper: ExchangeWrapper as ContractArtifact,
+ Validator: Validator as ContractArtifact,
+ Wallet: Wallet as ContractArtifact,
+ Whitelist: Whitelist as ContractArtifact,
};
diff --git a/contracts/exchange/src/index.ts b/contracts/exchange/src/index.ts
new file mode 100644
index 000000000..ba813e7ca
--- /dev/null
+++ b/contracts/exchange/src/index.ts
@@ -0,0 +1,3 @@
+export * from './artifacts';
+export * from './wrappers';
+export * from '../test/utils';
diff --git a/contracts/exchange/src/wrappers/index.ts b/contracts/exchange/src/wrappers/index.ts
new file mode 100644
index 000000000..86e939b56
--- /dev/null
+++ b/contracts/exchange/src/wrappers/index.ts
@@ -0,0 +1,18 @@
+export * from '../../generated-wrappers/exchange';
+export * from '../../generated-wrappers/test_asset_proxy_dispatcher';
+export * from '../../generated-wrappers/test_exchange_internals';
+export * from '../../generated-wrappers/test_signature_validator';
+export * from '../../generated-wrappers/test_static_call_receiver';
+export * from '../../generated-wrappers/i_asset_proxy_dispatcher';
+export * from '../../generated-wrappers/i_exchange';
+export * from '../../generated-wrappers/i_exchange_core';
+export * from '../../generated-wrappers/i_match_orders';
+export * from '../../generated-wrappers/i_signature_validator';
+export * from '../../generated-wrappers/i_transactions';
+export * from '../../generated-wrappers/i_wrapper_functions';
+export * from '../../generated-wrappers/i_validator';
+export * from '../../generated-wrappers/i_wallet';
+export * from '../../generated-wrappers/exchange_wrapper';
+export * from '../../generated-wrappers/validator';
+export * from '../../generated-wrappers/wallet';
+export * from '../../generated-wrappers/whitelist';
diff --git a/contracts/protocol/test/exchange/core.ts b/contracts/exchange/test/core.ts
index 700643b79..74161cc73 100644
--- a/contracts/protocol/test/exchange/core.ts
+++ b/contracts/exchange/test/core.ts
@@ -1,4 +1,20 @@
import {
+ artifacts as proxyArtifacts,
+ ERC20ProxyContract,
+ ERC20Wrapper,
+ ERC721ProxyContract,
+ ERC721Wrapper,
+ MultiAssetProxyContract,
+} from '@0x/contracts-asset-proxy';
+import {
+ artifacts as erc20Artifacts,
+ DummyERC20TokenContract,
+ DummyERC20TokenTransferEventArgs,
+ DummyNoReturnERC20TokenContract,
+ ReentrantERC20TokenContract,
+} from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
+import {
chaiSetup,
constants,
ERC20BalancesByOwner,
@@ -11,14 +27,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokensArtifacts,
- DummyERC20TokenContract,
- DummyERC20TokenTransferEventArgs,
- DummyERC721TokenContract,
- DummyNoReturnERC20TokenContract,
- ReentrantERC20TokenContract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, orderHashUtils } from '@0x/order-utils';
import { RevertReason, SignatureType, SignedOrder } from '@0x/types';
@@ -29,15 +37,13 @@ import { LogWithDecodedArgs } from 'ethereum-types';
import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
-import { ExchangeCancelEventArgs, ExchangeContract } from '../../generated-wrappers/exchange';
-import { MultiAssetProxyContract } from '../../generated-wrappers/multi_asset_proxy';
-import { TestStaticCallReceiverContract } from '../../generated-wrappers/test_static_call_receiver';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ERC721Wrapper } from '../utils/erc721_wrapper';
-import { ExchangeWrapper } from '../utils/exchange_wrapper';
+import {
+ artifacts,
+ ExchangeCancelEventArgs,
+ ExchangeContract,
+ ExchangeWrapper,
+ TestStaticCallReceiverContract,
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -92,7 +98,7 @@ describe('Exchange core', () => {
erc20Proxy = await erc20Wrapper.deployProxyAsync();
erc721Proxy = await erc721Wrapper.deployProxyAsync();
multiAssetProxy = await MultiAssetProxyContract.deployFrom0xArtifactAsync(
- artifacts.MultiAssetProxy,
+ proxyArtifacts.MultiAssetProxy,
provider,
txDefaults,
);
@@ -114,7 +120,7 @@ describe('Exchange core', () => {
txDefaults,
);
reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.ReentrantERC20Token,
+ erc20Artifacts.ReentrantERC20Token,
provider,
txDefaults,
exchange.address,
@@ -339,7 +345,7 @@ describe('Exchange core', () => {
describe('Testing exchange of ERC20 tokens with no return values', () => {
before(async () => {
noReturnErc20Token = await DummyNoReturnERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.DummyNoReturnERC20Token,
+ erc20Artifacts.DummyNoReturnERC20Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
@@ -538,7 +544,7 @@ describe('Exchange core', () => {
it('should throw if order is expired', async () => {
const currentTimestamp = await getLatestBlockTimestampAsync();
signedOrder = await orderFactory.newSignedOrderAsync({
- expirationTimeSeconds: new BigNumber(currentTimestamp).sub(10),
+ expirationTimeSeconds: new BigNumber(currentTimestamp).minus(10),
});
return expectTransactionFailedAsync(
exchangeWrapper.cancelOrderAsync(signedOrder, makerAddress),
@@ -625,15 +631,15 @@ describe('Exchange core', () => {
});
const newBalances = await erc20Wrapper.getBalancesAsync();
- const fillMakerAssetAmount = signedOrders[2].makerAssetAmount.add(signedOrders[3].makerAssetAmount);
- const fillTakerAssetAmount = signedOrders[2].takerAssetAmount.add(signedOrders[3].takerAssetAmount);
- const makerFee = signedOrders[2].makerFee.add(signedOrders[3].makerFee);
- const takerFee = signedOrders[2].takerFee.add(signedOrders[3].takerFee);
+ const fillMakerAssetAmount = signedOrders[2].makerAssetAmount.plus(signedOrders[3].makerAssetAmount);
+ const fillTakerAssetAmount = signedOrders[2].takerAssetAmount.plus(signedOrders[3].takerAssetAmount);
+ const makerFee = signedOrders[2].makerFee.plus(signedOrders[3].makerFee);
+ const takerFee = signedOrders[2].takerFee.plus(signedOrders[3].takerFee);
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(fillMakerAssetAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(fillTakerAssetAmount),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(fillTakerAssetAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -642,13 +648,13 @@ describe('Exchange core', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(fillTakerAssetAmount),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(fillMakerAssetAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(fillMakerAssetAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
});
diff --git a/contracts/protocol/test/exchange/dispatcher.ts b/contracts/exchange/test/dispatcher.ts
index 5b1ac1e20..a25755936 100644
--- a/contracts/protocol/test/exchange/dispatcher.ts
+++ b/contracts/exchange/test/dispatcher.ts
@@ -1,4 +1,12 @@
import {
+ artifacts as proxyArtifacts,
+ ERC20ProxyContract,
+ ERC20Wrapper,
+ ERC721ProxyContract,
+ ERC721Wrapper,
+} from '@0x/contracts-asset-proxy';
+import { DummyERC20TokenContract } from '@0x/contracts-erc20';
+import {
chaiSetup,
constants,
expectTransactionFailedAsync,
@@ -7,7 +15,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { DummyERC20TokenContract } from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { AssetProxyId, RevertReason } from '@0x/types';
@@ -16,15 +23,11 @@ import * as chai from 'chai';
import { LogWithDecodedArgs } from 'ethereum-types';
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
import {
+ artifacts,
TestAssetProxyDispatcherAssetProxyRegisteredEventArgs,
TestAssetProxyDispatcherContract,
-} from '../../generated-wrappers/test_asset_proxy_dispatcher';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ERC721Wrapper } from '../utils/erc721_wrapper';
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -128,7 +131,7 @@ describe('AssetProxyDispatcher', () => {
expect(proxyAddress).to.be.equal(erc20Proxy.address);
// Deploy a new version of the ERC20 Transfer Proxy contract
const newErc20TransferProxy = await ERC20ProxyContract.deployFrom0xArtifactAsync(
- artifacts.ERC20Proxy,
+ proxyArtifacts.ERC20Proxy,
provider,
txDefaults,
);
@@ -205,7 +208,7 @@ describe('AssetProxyDispatcher', () => {
erc20Balances[makerAddress][zrxToken.address].minus(amount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[takerAddress][zrxToken.address].add(amount),
+ erc20Balances[takerAddress][zrxToken.address].plus(amount),
);
});
diff --git a/contracts/protocol/test/exchange/fill_order.ts b/contracts/exchange/test/fill_order.ts
index 2bdbe4855..3f54091d4 100644
--- a/contracts/protocol/test/exchange/fill_order.ts
+++ b/contracts/exchange/test/fill_order.ts
@@ -16,10 +16,7 @@ import {
import { BlockchainLifecycle } from '@0x/dev-utils';
import * as _ from 'lodash';
-import {
- FillOrderCombinatorialUtils,
- fillOrderCombinatorialUtilsFactoryAsync,
-} from '../utils/fill_order_combinatorial_utils';
+import { FillOrderCombinatorialUtils, fillOrderCombinatorialUtilsFactoryAsync } from '../src';
chaiSetup.configure();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
diff --git a/contracts/exchange/test/global_hooks.ts b/contracts/exchange/test/global_hooks.ts
new file mode 100644
index 000000000..f8ace376a
--- /dev/null
+++ b/contracts/exchange/test/global_hooks.ts
@@ -0,0 +1,17 @@
+import { env, EnvVars } from '@0x/dev-utils';
+
+import { coverage, profiler, provider } from '@0x/contracts-test-utils';
+before('start web3 provider', () => {
+ provider.start();
+});
+after('generate coverage report', async () => {
+ if (env.parseBoolean(EnvVars.SolidityCoverage)) {
+ const coverageSubprovider = coverage.getCoverageSubproviderSingleton();
+ await coverageSubprovider.writeCoverageAsync();
+ }
+ if (env.parseBoolean(EnvVars.SolidityProfiler)) {
+ const profilerSubprovider = profiler.getProfilerSubproviderSingleton();
+ await profilerSubprovider.writeProfilerOutputAsync();
+ }
+ provider.stop();
+});
diff --git a/contracts/protocol/test/exchange/internal.ts b/contracts/exchange/test/internal.ts
index 972f5efb6..7a1e12a7a 100644
--- a/contracts/protocol/test/exchange/internal.ts
+++ b/contracts/exchange/test/internal.ts
@@ -16,8 +16,7 @@ import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { TestExchangeInternalsContract } from '../../generated-wrappers/test_exchange_internals';
-import { artifacts } from '../../src/artifacts';
+import { artifacts, TestExchangeInternalsContract } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -90,14 +89,14 @@ describe('Exchange core internal functions', () => {
if (target.eq(0)) {
return false;
}
- const product = numerator.mul(target);
+ const product = numerator.multipliedBy(target);
const remainder = product.mod(denominator);
- const remainderTimes1000 = remainder.mul('1000');
+ const remainderTimes1000 = remainder.multipliedBy('1000');
const isError = remainderTimes1000.gte(product);
- if (product.greaterThan(MAX_UINT256)) {
+ if (product.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
- if (remainderTimes1000.greaterThan(MAX_UINT256)) {
+ if (remainderTimes1000.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
return isError;
@@ -117,15 +116,15 @@ describe('Exchange core internal functions', () => {
if (target.eq(0)) {
return false;
}
- const product = numerator.mul(target);
+ const product = numerator.multipliedBy(target);
const remainder = product.mod(denominator);
- const error = denominator.sub(remainder).mod(denominator);
- const errorTimes1000 = error.mul('1000');
+ const error = denominator.minus(remainder).mod(denominator);
+ const errorTimes1000 = error.multipliedBy('1000');
const isError = errorTimes1000.gte(product);
- if (product.greaterThan(MAX_UINT256)) {
+ if (product.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
- if (errorTimes1000.greaterThan(MAX_UINT256)) {
+ if (errorTimes1000.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
return isError;
@@ -143,8 +142,8 @@ describe('Exchange core internal functions', () => {
if (isRoundingError) {
throw roundingErrorForCall;
}
- const product = numerator.mul(target);
- if (product.greaterThan(MAX_UINT256)) {
+ const product = numerator.multipliedBy(target);
+ if (product.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
return product.dividedToIntegerBy(denominator);
@@ -177,8 +176,8 @@ describe('Exchange core internal functions', () => {
_.cloneDeep(totalFillResults),
singleFillResults,
(totalVal: BigNumber, singleVal: BigNumber) => {
- const newTotal = totalVal.add(singleVal);
- if (newTotal.greaterThan(MAX_UINT256)) {
+ const newTotal = totalVal.plus(singleVal);
+ if (newTotal.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
return newTotal;
@@ -271,8 +270,8 @@ describe('Exchange core internal functions', () => {
if (denominator.eq(0)) {
throw divisionByZeroErrorForCall;
}
- const product = numerator.mul(target);
- if (product.greaterThan(MAX_UINT256)) {
+ const product = numerator.multipliedBy(target);
+ if (product.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
return product.dividedToIntegerBy(denominator);
@@ -301,16 +300,16 @@ describe('Exchange core internal functions', () => {
if (denominator.eq(0)) {
throw divisionByZeroErrorForCall;
}
- const product = numerator.mul(target);
- const offset = product.add(denominator.sub(1));
- if (offset.greaterThan(MAX_UINT256)) {
+ const product = numerator.multipliedBy(target);
+ const offset = product.plus(denominator.minus(1));
+ if (offset.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
const result = offset.dividedToIntegerBy(denominator);
if (product.mod(denominator).eq(0)) {
- expect(result.mul(denominator)).to.be.bignumber.eq(product);
+ expect(result.multipliedBy(denominator)).to.be.bignumber.eq(product);
} else {
- expect(result.mul(denominator)).to.be.bignumber.gt(product);
+ expect(result.multipliedBy(denominator)).to.be.bignumber.gt(product);
}
return result;
}
@@ -358,16 +357,16 @@ describe('Exchange core internal functions', () => {
if (isRoundingError) {
throw roundingErrorForCall;
}
- const product = numerator.mul(target);
- const offset = product.add(denominator.sub(1));
- if (offset.greaterThan(MAX_UINT256)) {
+ const product = numerator.multipliedBy(target);
+ const offset = product.plus(denominator.minus(1));
+ if (offset.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForCall;
}
const result = offset.dividedToIntegerBy(denominator);
if (product.mod(denominator).eq(0)) {
- expect(result.mul(denominator)).to.be.bignumber.eq(product);
+ expect(result.multipliedBy(denominator)).to.be.bignumber.eq(product);
} else {
- expect(result.mul(denominator)).to.be.bignumber.gt(product);
+ expect(result.multipliedBy(denominator)).to.be.bignumber.gt(product);
}
return result;
}
@@ -433,8 +432,8 @@ describe('Exchange core internal functions', () => {
// tslint:disable-next-line:no-unused-variable
orderHash: string,
): Promise<BigNumber> {
- const totalFilledAmount = takerAssetFilledAmount.add(orderTakerAssetFilledAmount);
- if (totalFilledAmount.greaterThan(MAX_UINT256)) {
+ const totalFilledAmount = takerAssetFilledAmount.plus(orderTakerAssetFilledAmount);
+ if (totalFilledAmount.isGreaterThan(MAX_UINT256)) {
throw overflowErrorForSendTransaction;
}
return totalFilledAmount;
diff --git a/contracts/protocol/test/exchange/match_orders.ts b/contracts/exchange/test/match_orders.ts
index 8e943c237..d17025ddd 100644
--- a/contracts/protocol/test/exchange/match_orders.ts
+++ b/contracts/exchange/test/match_orders.ts
@@ -1,3 +1,6 @@
+import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts, DummyERC20TokenContract, ReentrantERC20TokenContract } from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
import {
chaiSetup,
constants,
@@ -9,12 +12,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokensArtifacts,
- DummyERC20TokenContract,
- DummyERC721TokenContract,
- ReentrantERC20TokenContract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { RevertReason } from '@0x/types';
@@ -23,15 +20,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
-import { ExchangeContract } from '../../generated-wrappers/exchange';
-import { TestExchangeInternalsContract } from '../../generated-wrappers/test_exchange_internals';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ERC721Wrapper } from '../utils/erc721_wrapper';
-import { ExchangeWrapper } from '../utils/exchange_wrapper';
-import { MatchOrderTester } from '../utils/match_order_tester';
+import { artifacts, ExchangeContract, ExchangeWrapper, MatchOrderTester, TestExchangeInternalsContract } from '../src';
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
chaiSetup.configure();
@@ -142,7 +131,7 @@ describe('matchOrders', () => {
);
reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.ReentrantERC20Token,
+ erc20Artifacts.ReentrantERC20Token,
provider,
txDefaults,
exchange.address,
diff --git a/contracts/protocol/test/exchange/signature_validator.ts b/contracts/exchange/test/signature_validator.ts
index 3f1786b5b..89eac4ddb 100644
--- a/contracts/protocol/test/exchange/signature_validator.ts
+++ b/contracts/exchange/test/signature_validator.ts
@@ -1,4 +1,4 @@
-import { artifacts as examplesArtifacts, ValidatorContract, WalletContract } from '@0x/contracts-examples';
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
import {
addressUtils,
chaiSetup,
@@ -10,7 +10,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, orderHashUtils, signatureUtils } from '@0x/order-utils';
import { RevertReason, SignatureType, SignedOrder } from '@0x/types';
@@ -23,7 +22,9 @@ import {
TestSignatureValidatorContract,
TestSignatureValidatorSignatureValidatorApprovalEventArgs,
TestStaticCallReceiverContract,
-} from '../../src';
+ ValidatorContract,
+ WalletContract,
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -61,13 +62,13 @@ describe('MixinSignatureValidator', () => {
txDefaults,
);
testWallet = await WalletContract.deployFrom0xArtifactAsync(
- examplesArtifacts.Wallet,
+ artifacts.Wallet,
provider,
txDefaults,
signerAddress,
);
testValidator = await ValidatorContract.deployFrom0xArtifactAsync(
- examplesArtifacts.Validator,
+ artifacts.Validator,
provider,
txDefaults,
signerAddress,
@@ -77,7 +78,7 @@ describe('MixinSignatureValidator', () => {
provider,
txDefaults,
);
- signatureValidatorLogDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...tokensArtifacts });
+ signatureValidatorLogDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts });
await web3Wrapper.awaitTransactionSuccessAsync(
await signatureValidator.setSignatureValidatorApproval.sendTransactionAsync(testValidator.address, true, {
from: signerAddress,
diff --git a/contracts/protocol/test/exchange/transactions.ts b/contracts/exchange/test/transactions.ts
index 746f3cb04..613953493 100644
--- a/contracts/protocol/test/exchange/transactions.ts
+++ b/contracts/exchange/test/transactions.ts
@@ -1,4 +1,5 @@
-import { artifacts as examplesArtifacts, ExchangeWrapperContract, WhitelistContract } from '@0x/contracts-examples';
+import { ERC20ProxyContract, ERC20Wrapper } from '@0x/contracts-asset-proxy';
+import { DummyERC20TokenContract } from '@0x/contracts-erc20';
import {
chaiSetup,
constants,
@@ -12,7 +13,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { DummyERC20TokenContract } from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils';
import { OrderWithoutExchangeAddress, RevertReason, SignedOrder } from '@0x/types';
@@ -20,11 +20,7 @@ import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ExchangeContract } from '../../generated-wrappers/exchange';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ExchangeWrapper } from '../utils/exchange_wrapper';
+import { artifacts, ExchangeContract, ExchangeWrapper, ExchangeWrapperContract, WhitelistContract } from '../src/';
chaiSetup.configure();
const expect = chai.expect;
@@ -160,7 +156,7 @@ describe('Exchange transactions', () => {
erc20Balances[makerAddress][defaultMakerTokenAddress].minus(makerAssetFillAmount),
);
expect(newBalances[makerAddress][defaultTakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerTokenAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerTokenAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
@@ -169,13 +165,13 @@ describe('Exchange transactions', () => {
erc20Balances[takerAddress][defaultTakerTokenAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerTokenAddress].add(makerAssetFillAmount),
+ erc20Balances[takerAddress][defaultMakerTokenAddress].plus(makerAssetFillAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
@@ -221,7 +217,7 @@ describe('Exchange transactions', () => {
before(async () => {
exchangeWrapperContract = await ExchangeWrapperContract.deployFrom0xArtifactAsync(
- examplesArtifacts.ExchangeWrapper,
+ artifacts.ExchangeWrapper,
provider,
txDefaults,
exchange.address,
@@ -234,7 +230,7 @@ describe('Exchange transactions', () => {
senderAddress: exchangeWrapperContract.address,
salt: orderSalt,
});
- const targetOrderEpoch = orderSalt.add(1);
+ const targetOrderEpoch = orderSalt.plus(1);
const cancelData = exchange.cancelOrdersUpTo.getABIEncodedTransactionData(targetOrderEpoch);
const signedCancelTx = makerTransactionFactory.newSignedTransaction(cancelData);
await exchangeWrapperContract.cancelOrdersUpTo.sendTransactionAsync(
@@ -273,7 +269,7 @@ describe('Exchange transactions', () => {
senderAddress: exchangeWrapperContract.address,
salt: orderSalt,
});
- const targetOrderEpoch = orderSalt.add(1);
+ const targetOrderEpoch = orderSalt.plus(1);
await exchangeWrapper.cancelOrdersUpToAsync(targetOrderEpoch, makerAddress);
erc20Balances = await erc20Wrapper.getBalancesAsync();
@@ -308,7 +304,7 @@ describe('Exchange transactions', () => {
erc20Balances[makerAddress][defaultMakerTokenAddress].minus(makerAssetFillAmount),
);
expect(newBalances[makerAddress][defaultTakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerTokenAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerTokenAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
@@ -317,13 +313,13 @@ describe('Exchange transactions', () => {
erc20Balances[takerAddress][defaultTakerTokenAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerTokenAddress].add(makerAssetFillAmount),
+ erc20Balances[takerAddress][defaultMakerTokenAddress].plus(makerAssetFillAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
});
@@ -335,7 +331,7 @@ describe('Exchange transactions', () => {
before(async () => {
whitelist = await WhitelistContract.deployFrom0xArtifactAsync(
- examplesArtifacts.Whitelist,
+ artifacts.Whitelist,
provider,
txDefaults,
exchange.address,
@@ -444,7 +440,7 @@ describe('Exchange transactions', () => {
erc20Balances[makerAddress][defaultMakerTokenAddress].minus(makerAssetFillAmount),
);
expect(newBalances[makerAddress][defaultTakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerTokenAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerTokenAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFeePaid),
@@ -453,13 +449,13 @@ describe('Exchange transactions', () => {
erc20Balances[takerAddress][defaultTakerTokenAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerTokenAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerTokenAddress].add(makerAssetFillAmount),
+ erc20Balances[takerAddress][defaultMakerTokenAddress].plus(makerAssetFillAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
});
diff --git a/contracts/protocol/test/utils/asset_wrapper.ts b/contracts/exchange/test/utils/asset_wrapper.ts
index e4090ad74..e5a5205f5 100644
--- a/contracts/protocol/test/utils/asset_wrapper.ts
+++ b/contracts/exchange/test/utils/asset_wrapper.ts
@@ -4,8 +4,7 @@ import { AssetProxyId } from '@0x/types';
import { BigNumber, errorUtils } from '@0x/utils';
import * as _ from 'lodash';
-import { ERC20Wrapper } from './erc20_wrapper';
-import { ERC721Wrapper } from './erc721_wrapper';
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
interface ProxyIdToAssetWrappers {
[proxyId: string]: AbstractAssetWrapper;
@@ -28,11 +27,13 @@ export class AssetWrapper {
const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
const balance = await erc20Wrapper.getBalanceAsync(userAddress, assetData);
return balance;
}
case AssetProxyId.ERC721: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const isOwner = await assetWrapper.isOwnerAsync(
@@ -51,6 +52,7 @@ export class AssetWrapper {
const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
await erc20Wrapper.setBalanceAsync(userAddress, assetData, desiredBalance);
return;
@@ -59,6 +61,7 @@ export class AssetWrapper {
if (!desiredBalance.eq(0) && !desiredBalance.eq(1)) {
throw new Error(`Balance for ERC721 token can only be set to 0 or 1. Got: ${desiredBalance}`);
}
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc721Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const doesTokenExist = erc721Wrapper.doesTokenExistAsync(
@@ -109,11 +112,13 @@ export class AssetWrapper {
const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
const allowance = await erc20Wrapper.getProxyAllowanceAsync(userAddress, assetData);
return allowance;
}
case AssetProxyId.ERC721: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const assetWrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
const erc721ProxyData = assetDataUtils.decodeERC721AssetData(assetData);
const isProxyApprovedForAll = await assetWrapper.isProxyApprovedForAllAsync(
@@ -143,6 +148,7 @@ export class AssetWrapper {
const proxyId = assetDataUtils.decodeAssetProxyId(assetData);
switch (proxyId) {
case AssetProxyId.ERC20: {
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc20Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC20Wrapper;
await erc20Wrapper.setAllowanceAsync(userAddress, assetData, desiredAllowance);
return;
@@ -157,6 +163,7 @@ export class AssetWrapper {
`Allowance for ERC721 token can only be set to 0, 1 or 2^256-1. Got: ${desiredAllowance}`,
);
}
+ // tslint:disable-next-line:no-unnecessary-type-assertion
const erc721Wrapper = this._proxyIdToAssetWrappers[proxyId] as ERC721Wrapper;
const assetProxyData = assetDataUtils.decodeERC721AssetData(assetData);
diff --git a/contracts/protocol/test/utils/exchange_wrapper.ts b/contracts/exchange/test/utils/exchange_wrapper.ts
index 437882b41..eca535c65 100644
--- a/contracts/protocol/test/utils/exchange_wrapper.ts
+++ b/contracts/exchange/test/utils/exchange_wrapper.ts
@@ -1,3 +1,5 @@
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
+import { artifacts as erc721Artifacts } from '@0x/contracts-erc721';
import {
FillResults,
formatters,
@@ -6,15 +8,13 @@ import {
orderUtils,
SignedTransaction,
} from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { SignedOrder } from '@0x/types';
import { AbiEncoder, BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { MethodAbi, Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types';
import * as _ from 'lodash';
-import { ExchangeContract } from '../../generated-wrappers/exchange';
-import { artifacts } from '../../src/artifacts';
+import { artifacts, ExchangeContract } from '../../src';
import { AbiDecodedFillOrderData } from './types';
@@ -25,7 +25,7 @@ export class ExchangeWrapper {
constructor(exchangeContract: ExchangeContract, provider: Provider) {
this._exchange = exchangeContract;
this._web3Wrapper = new Web3Wrapper(provider);
- this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...tokensArtifacts });
+ this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...erc20Artifacts, ...erc721Artifacts });
}
public async fillOrderAsync(
signedOrder: SignedOrder,
diff --git a/contracts/protocol/test/utils/fill_order_combinatorial_utils.ts b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts
index 2fd33bebd..26b168909 100644
--- a/contracts/protocol/test/utils/fill_order_combinatorial_utils.ts
+++ b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts
@@ -1,4 +1,5 @@
-import { artifacts as libsArtifacts, TestLibsContract } from '@0x/contracts-libs';
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { artifacts as libsArtifacts, TestLibsContract } from '@0x/contracts-exchange-libs';
import {
AllowanceAmountScenario,
AssetDataScenario,
@@ -32,12 +33,9 @@ import { LogWithDecodedArgs, Provider, TxData } from 'ethereum-types';
import * as _ from 'lodash';
import 'make-promises-safe';
-import { ExchangeContract, ExchangeFillEventArgs } from '../../generated-wrappers/exchange';
-import { artifacts } from '../../src/artifacts';
+import { artifacts, ExchangeContract, ExchangeFillEventArgs } from '../../src';
import { AssetWrapper } from './asset_wrapper';
-import { ERC20Wrapper } from './erc20_wrapper';
-import { ERC721Wrapper } from './erc721_wrapper';
import { ExchangeWrapper } from './exchange_wrapper';
import { OrderFactoryFromScenario } from './order_factory_from_scenario';
import { SimpleAssetBalanceAndProxyAllowanceFetcher } from './simple_asset_balance_and_proxy_allowance_fetcher';
@@ -469,7 +467,7 @@ export class FillOrderCombinatorialUtils {
const remainingTakerAmountToFill = signedOrder.takerAssetAmount.minus(alreadyFilledTakerAmount);
const expFilledTakerAmount = takerAssetFillAmount.gt(remainingTakerAmountToFill)
? remainingTakerAmountToFill
- : alreadyFilledTakerAmount.add(takerAssetFillAmount);
+ : alreadyFilledTakerAmount.plus(takerAssetFillAmount);
const expFilledMakerAmount = orderUtils.getPartialAmountFloor(
expFilledTakerAmount,
@@ -644,7 +642,7 @@ export class FillOrderCombinatorialUtils {
break;
case TakerAssetFillAmountScenario.GreaterThanRemainingFillableTakerAssetAmount:
- takerAssetFillAmount = fillableTakerAssetAmount.add(1);
+ takerAssetFillAmount = fillableTakerAssetAmount.plus(1);
break;
case TakerAssetFillAmountScenario.LessThanRemainingFillableTakerAssetAmount:
@@ -657,7 +655,7 @@ export class FillOrderCombinatorialUtils {
'Cannot test `TakerAssetFillAmountScenario.LessThanRemainingFillableTakerAssetAmount` together with ERC721 assets since orders involving ERC721 must always be filled exactly.',
);
}
- takerAssetFillAmount = fillableTakerAssetAmount.div(2).floor();
+ takerAssetFillAmount = fillableTakerAssetAmount.div(2).integerValue(BigNumber.ROUND_FLOOR);
break;
default:
diff --git a/contracts/exchange/test/utils/index.ts b/contracts/exchange/test/utils/index.ts
new file mode 100644
index 000000000..d88a38266
--- /dev/null
+++ b/contracts/exchange/test/utils/index.ts
@@ -0,0 +1,3 @@
+export * from './exchange_wrapper';
+export * from './fill_order_combinatorial_utils';
+export * from './match_order_tester';
diff --git a/contracts/protocol/test/utils/match_order_tester.ts b/contracts/exchange/test/utils/match_order_tester.ts
index 31864820f..680ff13ac 100644
--- a/contracts/protocol/test/utils/match_order_tester.ts
+++ b/contracts/exchange/test/utils/match_order_tester.ts
@@ -1,3 +1,4 @@
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
import {
chaiSetup,
ERC20BalancesByOwner,
@@ -15,8 +16,6 @@ import * as _ from 'lodash';
import { TransactionReceiptWithDecodedLogs } from '../../../../node_modules/ethereum-types';
-import { ERC20Wrapper } from './erc20_wrapper';
-import { ERC721Wrapper } from './erc721_wrapper';
import { ExchangeWrapper } from './exchange_wrapper';
chaiSetup.configure();
@@ -66,7 +65,7 @@ export class MatchOrderTester {
const feePaidByRightMaker = new BigNumber(rightLog.makerFeePaid);
const feePaidByTakerRight = new BigNumber(rightLog.takerFeePaid);
// Derive amount received by taker
- const amountReceivedByTaker = amountSoldByLeftMaker.sub(amountBoughtByRightMaker);
+ const amountReceivedByTaker = amountSoldByLeftMaker.minus(amountBoughtByRightMaker);
// Assert log values - left order
expect(amountBoughtByLeftMaker, 'Checking logged amount bought by left maker').to.be.bignumber.equal(
expectedTransferAmounts.amountBoughtByLeftMaker,
@@ -267,14 +266,16 @@ export class MatchOrderTester {
// Assert left order status
const maxAmountBoughtByLeftMaker = signedOrderLeft.takerAssetAmount.minus(initialLeftOrderFilledAmount);
const leftOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderLeft);
- const leftExpectedStatus = expectedTransferAmounts.amountBoughtByLeftMaker.equals(maxAmountBoughtByLeftMaker)
+ const leftExpectedStatus = expectedTransferAmounts.amountBoughtByLeftMaker.isEqualTo(maxAmountBoughtByLeftMaker)
? OrderStatus.FullyFilled
: OrderStatus.Fillable;
expect(leftOrderInfo.orderStatus, 'Checking exchange status for left order').to.be.equal(leftExpectedStatus);
// Assert right order status
const maxAmountBoughtByRightMaker = signedOrderRight.takerAssetAmount.minus(initialRightOrderFilledAmount);
const rightOrderInfo: OrderInfo = await this._exchangeWrapper.getOrderInfoAsync(signedOrderRight);
- const rightExpectedStatus = expectedTransferAmounts.amountBoughtByRightMaker.equals(maxAmountBoughtByRightMaker)
+ const rightExpectedStatus = expectedTransferAmounts.amountBoughtByRightMaker.isEqualTo(
+ maxAmountBoughtByRightMaker,
+ )
? OrderStatus.FullyFilled
: OrderStatus.Fillable;
expect(rightOrderInfo.orderStatus, 'Checking exchange status for right order').to.be.equal(rightExpectedStatus);
@@ -364,13 +365,13 @@ export class MatchOrderTester {
// Right Maker
expectedNewERC20BalancesByOwner[makerAddressRight][
takerAssetAddressRight
- ] = expectedNewERC20BalancesByOwner[makerAddressRight][takerAssetAddressRight].add(
+ ] = expectedNewERC20BalancesByOwner[makerAddressRight][takerAssetAddressRight].plus(
expectedTransferAmounts.amountBoughtByRightMaker,
);
// Taker
expectedNewERC20BalancesByOwner[takerAddress][makerAssetAddressLeft] = expectedNewERC20BalancesByOwner[
takerAddress
- ][makerAssetAddressLeft].add(expectedTransferAmounts.amountReceivedByTaker);
+ ][makerAssetAddressLeft].plus(expectedTransferAmounts.amountReceivedByTaker);
} else if (makerAssetProxyIdLeft === AssetProxyId.ERC721) {
// Decode asset data
const erc721AssetData = assetDataUtils.decodeERC721AssetData(signedOrderLeft.makerAssetData);
@@ -395,7 +396,7 @@ export class MatchOrderTester {
// Left Maker
expectedNewERC20BalancesByOwner[makerAddressLeft][takerAssetAddressLeft] = expectedNewERC20BalancesByOwner[
makerAddressLeft
- ][takerAssetAddressLeft].add(expectedTransferAmounts.amountBoughtByLeftMaker);
+ ][takerAssetAddressLeft].plus(expectedTransferAmounts.amountBoughtByLeftMaker);
// Right Maker
expectedNewERC20BalancesByOwner[makerAddressRight][
makerAssetAddressRight
@@ -426,19 +427,19 @@ export class MatchOrderTester {
expectedNewERC20BalancesByOwner[takerAddress][this._feeTokenAddress] = expectedNewERC20BalancesByOwner[
takerAddress
][this._feeTokenAddress].minus(
- expectedTransferAmounts.feePaidByTakerLeft.add(expectedTransferAmounts.feePaidByTakerRight),
+ expectedTransferAmounts.feePaidByTakerLeft.plus(expectedTransferAmounts.feePaidByTakerRight),
);
// Left Fee Recipient Fees
expectedNewERC20BalancesByOwner[feeRecipientAddressLeft][
this._feeTokenAddress
- ] = expectedNewERC20BalancesByOwner[feeRecipientAddressLeft][this._feeTokenAddress].add(
- expectedTransferAmounts.feePaidByLeftMaker.add(expectedTransferAmounts.feePaidByTakerLeft),
+ ] = expectedNewERC20BalancesByOwner[feeRecipientAddressLeft][this._feeTokenAddress].plus(
+ expectedTransferAmounts.feePaidByLeftMaker.plus(expectedTransferAmounts.feePaidByTakerLeft),
);
// Right Fee Recipient Fees
expectedNewERC20BalancesByOwner[feeRecipientAddressRight][
this._feeTokenAddress
- ] = expectedNewERC20BalancesByOwner[feeRecipientAddressRight][this._feeTokenAddress].add(
- expectedTransferAmounts.feePaidByRightMaker.add(expectedTransferAmounts.feePaidByTakerRight),
+ ] = expectedNewERC20BalancesByOwner[feeRecipientAddressRight][this._feeTokenAddress].plus(
+ expectedTransferAmounts.feePaidByRightMaker.plus(expectedTransferAmounts.feePaidByTakerRight),
);
return [expectedNewERC20BalancesByOwner, expectedNewERC721TokenIdsByOwner];
diff --git a/contracts/protocol/test/utils/order_factory_from_scenario.ts b/contracts/exchange/test/utils/order_factory_from_scenario.ts
index ecb4b2e28..6f5645906 100644
--- a/contracts/protocol/test/utils/order_factory_from_scenario.ts
+++ b/contracts/exchange/test/utils/order_factory_from_scenario.ts
@@ -1,3 +1,4 @@
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
import {
AssetDataScenario,
constants,
@@ -8,7 +9,6 @@ import {
OrderScenario,
TakerScenario,
} from '@0x/contracts-test-utils';
-import { DummyERC721TokenContract } from '@0x/contracts-tokens';
import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils';
import { Order } from '@0x/types';
import { BigNumber, errorUtils } from '@0x/utils';
diff --git a/contracts/protocol/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts b/contracts/exchange/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
index 64b7dedbe..64b7dedbe 100644
--- a/contracts/protocol/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
+++ b/contracts/exchange/test/utils/simple_asset_balance_and_proxy_allowance_fetcher.ts
diff --git a/contracts/protocol/test/utils/simple_order_filled_cancelled_fetcher.ts b/contracts/exchange/test/utils/simple_order_filled_cancelled_fetcher.ts
index af959e00e..af959e00e 100644
--- a/contracts/protocol/test/utils/simple_order_filled_cancelled_fetcher.ts
+++ b/contracts/exchange/test/utils/simple_order_filled_cancelled_fetcher.ts
diff --git a/contracts/protocol/test/utils/types.ts b/contracts/exchange/test/utils/types.ts
index 5f12635a7..5f12635a7 100644
--- a/contracts/protocol/test/utils/types.ts
+++ b/contracts/exchange/test/utils/types.ts
diff --git a/contracts/protocol/test/exchange/wrapper.ts b/contracts/exchange/test/wrapper.ts
index 4c4506945..62a0d426f 100644
--- a/contracts/protocol/test/exchange/wrapper.ts
+++ b/contracts/exchange/test/wrapper.ts
@@ -1,3 +1,6 @@
+import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts, DummyERC20TokenContract, ReentrantERC20TokenContract } from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
import {
chaiSetup,
constants,
@@ -11,12 +14,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokensArtifacts,
- DummyERC20TokenContract,
- DummyERC721TokenContract,
- ReentrantERC20TokenContract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, orderHashUtils } from '@0x/order-utils';
import { RevertReason, SignedOrder } from '@0x/types';
@@ -25,13 +22,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { ERC20ProxyContract } from '../../generated-wrappers/erc20_proxy';
-import { ERC721ProxyContract } from '../../generated-wrappers/erc721_proxy';
-import { ExchangeContract } from '../../generated-wrappers/exchange';
-import { artifacts } from '../../src/artifacts';
-import { ERC20Wrapper } from '../utils/erc20_wrapper';
-import { ERC721Wrapper } from '../utils/erc721_wrapper';
-import { ExchangeWrapper } from '../utils/exchange_wrapper';
+import { artifacts, ExchangeContract, ExchangeWrapper } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -116,7 +107,7 @@ describe('Exchange wrappers', () => {
);
reentrantErc20Token = await ReentrantERC20TokenContract.deployFrom0xArtifactAsync(
- tokensArtifacts.ReentrantERC20Token,
+ erc20Artifacts.ReentrantERC20Token,
provider,
txDefaults,
exchange.address,
@@ -189,7 +180,7 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFilledAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -198,20 +189,20 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFilledAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
it('should throw if a signedOrder is expired', async () => {
const currentTimestamp = await getLatestBlockTimestampAsync();
const signedOrder = await orderFactory.newSignedOrderAsync({
- expirationTimeSeconds: new BigNumber(currentTimestamp).sub(10),
+ expirationTimeSeconds: new BigNumber(currentTimestamp).minus(10),
});
return expectTransactionFailedAsync(
@@ -284,7 +275,7 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFilledAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -293,13 +284,13 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFilledAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
@@ -493,15 +484,15 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][makerAssetAddress] = erc20Balances[makerAddress][
makerAssetAddress
].minus(makerAssetFilledAmount);
- erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
- takerAssetFillAmount,
- );
+ erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][
+ takerAssetAddress
+ ].plus(takerAssetFillAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
makerFee,
);
- erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
- makerAssetFilledAmount,
- );
+ erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][
+ makerAssetAddress
+ ].plus(makerAssetFilledAmount);
erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
takerAssetAddress
].minus(takerAssetFillAmount);
@@ -510,7 +501,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(makerFee.add(takerFee));
+ ].plus(makerFee.plus(takerFee));
});
await exchangeWrapper.batchFillOrdersAsync(signedOrders, takerAddress, {
@@ -562,15 +553,15 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][makerAssetAddress] = erc20Balances[makerAddress][
makerAssetAddress
].minus(makerAssetFilledAmount);
- erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
- takerAssetFillAmount,
- );
+ erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][
+ takerAssetAddress
+ ].plus(takerAssetFillAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
makerFee,
);
- erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
- makerAssetFilledAmount,
- );
+ erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][
+ makerAssetAddress
+ ].plus(makerAssetFilledAmount);
erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
takerAssetAddress
].minus(takerAssetFillAmount);
@@ -579,7 +570,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(makerFee.add(takerFee));
+ ].plus(makerFee.plus(takerFee));
});
await exchangeWrapper.batchFillOrKillOrdersAsync(signedOrders, takerAddress, {
@@ -647,15 +638,15 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][makerAssetAddress] = erc20Balances[makerAddress][
makerAssetAddress
].minus(makerAssetFilledAmount);
- erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
- takerAssetFillAmount,
- );
+ erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][
+ takerAssetAddress
+ ].plus(takerAssetFillAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
makerFee,
);
- erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
- makerAssetFilledAmount,
- );
+ erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][
+ makerAssetAddress
+ ].plus(makerAssetFilledAmount);
erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
takerAssetAddress
].minus(takerAssetFillAmount);
@@ -664,7 +655,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(makerFee.add(takerFee));
+ ].plus(makerFee.plus(takerFee));
});
await exchangeWrapper.batchFillOrdersNoThrowAsync(signedOrders, takerAddress, {
@@ -706,15 +697,15 @@ describe('Exchange wrappers', () => {
erc20Balances[makerAddress][makerAssetAddress] = erc20Balances[makerAddress][
makerAssetAddress
].minus(makerAssetFilledAmount);
- erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][takerAssetAddress].add(
- takerAssetFillAmount,
- );
+ erc20Balances[makerAddress][takerAssetAddress] = erc20Balances[makerAddress][
+ takerAssetAddress
+ ].plus(takerAssetFillAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
makerFee,
);
- erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][makerAssetAddress].add(
- makerAssetFilledAmount,
- );
+ erc20Balances[takerAddress][makerAssetAddress] = erc20Balances[takerAddress][
+ makerAssetAddress
+ ].plus(makerAssetFilledAmount);
erc20Balances[takerAddress][takerAssetAddress] = erc20Balances[takerAddress][
takerAssetAddress
].minus(takerAssetFillAmount);
@@ -723,7 +714,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(makerFee.add(takerFee));
+ ].plus(makerFee.plus(takerFee));
});
const newOrders = [invalidOrder, ...validOrders];
@@ -773,16 +764,16 @@ describe('Exchange wrappers', () => {
const newBalances = await erc20Wrapper.getBalancesAsync();
- const makerAssetFilledAmount = signedOrders[0].makerAssetAmount.add(
+ const makerAssetFilledAmount = signedOrders[0].makerAssetAmount.plus(
signedOrders[1].makerAssetAmount.dividedToIntegerBy(2),
);
- const makerFee = signedOrders[0].makerFee.add(signedOrders[1].makerFee.dividedToIntegerBy(2));
- const takerFee = signedOrders[0].takerFee.add(signedOrders[1].takerFee.dividedToIntegerBy(2));
+ const makerFee = signedOrders[0].makerFee.plus(signedOrders[1].makerFee.dividedToIntegerBy(2));
+ const takerFee = signedOrders[0].takerFee.plus(signedOrders[1].takerFee.dividedToIntegerBy(2));
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFilledAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -791,13 +782,13 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFilledAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
@@ -809,13 +800,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -824,7 +815,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketSellOrdersAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
@@ -890,16 +881,16 @@ describe('Exchange wrappers', () => {
const newBalances = await erc20Wrapper.getBalancesAsync();
- const makerAssetFilledAmount = signedOrders[0].makerAssetAmount.add(
+ const makerAssetFilledAmount = signedOrders[0].makerAssetAmount.plus(
signedOrders[1].makerAssetAmount.dividedToIntegerBy(2),
);
- const makerFee = signedOrders[0].makerFee.add(signedOrders[1].makerFee.dividedToIntegerBy(2));
- const takerFee = signedOrders[0].takerFee.add(signedOrders[1].takerFee.dividedToIntegerBy(2));
+ const makerFee = signedOrders[0].makerFee.plus(signedOrders[1].makerFee.dividedToIntegerBy(2));
+ const takerFee = signedOrders[0].takerFee.plus(signedOrders[1].takerFee.dividedToIntegerBy(2));
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFilledAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -908,13 +899,13 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFilledAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFilledAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
@@ -926,13 +917,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -941,7 +932,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
@@ -971,13 +962,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -986,7 +977,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketSellOrdersNoThrowAsync(signedOrders, takerAddress, {
takerAssetFillAmount,
@@ -1034,16 +1025,16 @@ describe('Exchange wrappers', () => {
const newBalances = await erc20Wrapper.getBalancesAsync();
- const makerAmountBought = signedOrders[0].takerAssetAmount.add(
+ const makerAmountBought = signedOrders[0].takerAssetAmount.plus(
signedOrders[1].takerAssetAmount.dividedToIntegerBy(2),
);
- const makerFee = signedOrders[0].makerFee.add(signedOrders[1].makerFee.dividedToIntegerBy(2));
- const takerFee = signedOrders[0].takerFee.add(signedOrders[1].takerFee.dividedToIntegerBy(2));
+ const makerFee = signedOrders[0].makerFee.plus(signedOrders[1].makerFee.dividedToIntegerBy(2));
+ const takerFee = signedOrders[0].takerFee.plus(signedOrders[1].takerFee.dividedToIntegerBy(2));
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(makerAmountBought),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(makerAmountBought),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -1052,13 +1043,13 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(makerAmountBought),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
@@ -1070,13 +1061,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -1085,7 +1076,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketBuyOrdersAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
@@ -1149,16 +1140,16 @@ describe('Exchange wrappers', () => {
const newBalances = await erc20Wrapper.getBalancesAsync();
- const makerAmountBought = signedOrders[0].takerAssetAmount.add(
+ const makerAmountBought = signedOrders[0].takerAssetAmount.plus(
signedOrders[1].takerAssetAmount.dividedToIntegerBy(2),
);
- const makerFee = signedOrders[0].makerFee.add(signedOrders[1].makerFee.dividedToIntegerBy(2));
- const takerFee = signedOrders[0].takerFee.add(signedOrders[1].takerFee.dividedToIntegerBy(2));
+ const makerFee = signedOrders[0].makerFee.plus(signedOrders[1].makerFee.dividedToIntegerBy(2));
+ const takerFee = signedOrders[0].takerFee.plus(signedOrders[1].takerFee.dividedToIntegerBy(2));
expect(newBalances[makerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
erc20Balances[makerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[makerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[makerAddress][defaultTakerAssetAddress].add(makerAmountBought),
+ erc20Balances[makerAddress][defaultTakerAssetAddress].plus(makerAmountBought),
);
expect(newBalances[makerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[makerAddress][zrxToken.address].minus(makerFee),
@@ -1167,13 +1158,13 @@ describe('Exchange wrappers', () => {
erc20Balances[takerAddress][defaultTakerAssetAddress].minus(makerAmountBought),
);
expect(newBalances[takerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[takerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[takerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[takerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[takerAddress][zrxToken.address].minus(takerFee),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFee.add(takerFee)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFee.plus(takerFee)),
);
});
@@ -1185,13 +1176,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -1200,7 +1191,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
@@ -1231,13 +1222,13 @@ describe('Exchange wrappers', () => {
].minus(signedOrder.makerAssetAmount);
erc20Balances[makerAddress][defaultTakerAssetAddress] = erc20Balances[makerAddress][
defaultTakerAssetAddress
- ].add(signedOrder.takerAssetAmount);
+ ].plus(signedOrder.takerAssetAmount);
erc20Balances[makerAddress][zrxToken.address] = erc20Balances[makerAddress][zrxToken.address].minus(
signedOrder.makerFee,
);
erc20Balances[takerAddress][defaultMakerAssetAddress] = erc20Balances[takerAddress][
defaultMakerAssetAddress
- ].add(signedOrder.makerAssetAmount);
+ ].plus(signedOrder.makerAssetAmount);
erc20Balances[takerAddress][defaultTakerAssetAddress] = erc20Balances[takerAddress][
defaultTakerAssetAddress
].minus(signedOrder.takerAssetAmount);
@@ -1246,7 +1237,7 @@ describe('Exchange wrappers', () => {
);
erc20Balances[feeRecipientAddress][zrxToken.address] = erc20Balances[feeRecipientAddress][
zrxToken.address
- ].add(signedOrder.makerFee.add(signedOrder.takerFee));
+ ].plus(signedOrder.makerFee.plus(signedOrder.takerFee));
});
await exchangeWrapper.marketBuyOrdersNoThrowAsync(signedOrders, takerAddress, {
makerAssetFillAmount,
diff --git a/contracts/interfaces/tsconfig.json b/contracts/exchange/tsconfig.json
index 90b7d41bb..b0fcd1771 100644
--- a/contracts/interfaces/tsconfig.json
+++ b/contracts/exchange/tsconfig.json
@@ -5,11 +5,8 @@
"rootDir": ".",
"resolveJsonModule": true
},
- "include": ["./src/**/*", "./generated-wrappers/**/*"],
+ "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
"files": [
- "./generated-artifacts/IAssetData.json",
- "./generated-artifacts/IAssetProxy.json",
- "./generated-artifacts/IAuthorizable.json",
"./generated-artifacts/IAssetProxyDispatcher.json",
"./generated-artifacts/IExchange.json",
"./generated-artifacts/IExchangeCore.json",
@@ -18,7 +15,16 @@
"./generated-artifacts/ITransactions.json",
"./generated-artifacts/IValidator.json",
"./generated-artifacts/IWallet.json",
- "./generated-artifacts/IWrapperFunctions.json"
+ "./generated-artifacts/IWrapperFunctions.json",
+ "./generated-artifacts/Exchange.json",
+ "./generated-artifacts/TestAssetProxyDispatcher.json",
+ "./generated-artifacts/TestExchangeInternals.json",
+ "./generated-artifacts/TestSignatureValidator.json",
+ "./generated-artifacts/TestStaticCallReceiver.json",
+ "./generated-artifacts/ExchangeWrapper.json",
+ "./generated-artifacts/Validator.json",
+ "./generated-artifacts/Wallet.json",
+ "./generated-artifacts/Whitelist.json"
],
"exclude": ["./deploy/solc/solc_bin"]
}
diff --git a/contracts/exchange/tslint.json b/contracts/exchange/tslint.json
new file mode 100644
index 000000000..1bb3ac2a2
--- /dev/null
+++ b/contracts/exchange/tslint.json
@@ -0,0 +1,6 @@
+{
+ "extends": ["@0x/tslint-config"],
+ "rules": {
+ "custom-no-magic-numbers": false
+ }
+}
diff --git a/contracts/extensions/CHANGELOG.json b/contracts/extensions/CHANGELOG.json
index 4f087d0b5..16ec073aa 100644
--- a/contracts/extensions/CHANGELOG.json
+++ b/contracts/extensions/CHANGELOG.json
@@ -1,5 +1,36 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Move Forwarder contract into new package",
+ "pr": 1539
+ },
+ {
+ "note": "Nest extensions under src directory",
+ "pr": 1539
+ }
+ ]
+ },
+ {
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.2.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.2.2",
"changes": [
diff --git a/contracts/extensions/CHANGELOG.md b/contracts/extensions/CHANGELOG.md
index c6d447129..94ffdfb67 100644
--- a/contracts/extensions/CHANGELOG.md
+++ b/contracts/extensions/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.2.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.2.2 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/extensions/DEPLOYS.json b/contracts/extensions/DEPLOYS.json
index 1a093bf77..fe51488c7 100644
--- a/contracts/extensions/DEPLOYS.json
+++ b/contracts/extensions/DEPLOYS.json
@@ -1,31 +1 @@
-[
- {
- "name": "Forwarder",
- "version": "1.1.0",
- "changes": [
- {
- "note": "Round up when calculating remaining amounts in marketBuy functions",
- "pr": 1162,
- "networks": {
- "1": "0x5468a1dc173652ee28d249c271fa9933144746b1",
- "3": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
- "42": "0x17992e4ffb22730138e4b62aaa6367fa9d3699a6"
- }
- }
- ]
- },
- {
- "name": "Forwarder",
- "version": "1.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x7afc2d5107af94c462a194d2c21b5bdd238709d6",
- "3": "0x3983e204b12b3c02fb0638caf2cd406a62e0ead3",
- "42": "0xd85e2fa7e7e252b27b01bf0d65c946959d2f45b8"
- }
- }
- ]
- }
-]
+[]
diff --git a/contracts/extensions/README.md b/contracts/extensions/README.md
index 820f6e78a..f1767869d 100644
--- a/contracts/extensions/README.md
+++ b/contracts/extensions/README.md
@@ -1,10 +1,14 @@
-## Contract extensions
+## Extensions
-Smart contracts that implement extensions for the 0x protocol.
+This package implements various extensions to the 0x protocol. Extension contracts can add various rules around how orders are settled while still getting the interoperability and security benefits of using the underlying 0x protocol contracts. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contract extensions of the protocol can be found in the [contracts](./contracts) directory. This directory contains contracts that interact with the 2.0.0 contracts and will be used in production, such as the [Forwarder](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md) contract.
+**Install**
+
+```bash
+npm install @0x/contracts-extensions --save
+```
## Bug bounty
diff --git a/contracts/extensions/compiler.json b/contracts/extensions/compiler.json
index 2bb468724..1dfaf7a05 100644
--- a/contracts/extensions/compiler.json
+++ b/contracts/extensions/compiler.json
@@ -18,5 +18,5 @@
}
}
},
- "contracts": ["BalanceThresholdFilter", "DutchAuction", "Forwarder", "OrderMatcher", "OrderValidator"]
+ "contracts": ["BalanceThresholdFilter", "DutchAuction", "OrderMatcher", "OrderValidator"]
}
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/BalanceThresholdFilter.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/BalanceThresholdFilter.sol
index 16cacd461..b6e14525d 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/BalanceThresholdFilter.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/BalanceThresholdFilter.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
import "./interfaces/IThresholdAsset.sol";
import "./MixinBalanceThresholdFilterCore.sol";
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol
index da050bf72..68dabafeb 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/MixinBalanceThresholdFilterCore.sol
@@ -18,8 +18,8 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-libs/contracts/libs/LibExchangeSelectors.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibExchangeSelectors.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
import "./mixins/MBalanceThresholdFilterCore.sol";
import "./MixinExchangeCalldata.sol";
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/MixinExchangeCalldata.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/MixinExchangeCalldata.sol
index a15e95a9d..f2c0caa57 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/MixinExchangeCalldata.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/MixinExchangeCalldata.sol
@@ -20,7 +20,7 @@
pragma solidity ^0.4.24;
import "./mixins/MExchangeCalldata.sol";
-import "@0x/contracts-libs/contracts/libs/LibAddressArray.sol";
+import "@0x/contracts-utils/contracts/src/LibAddressArray.sol";
contract MixinExchangeCalldata is
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol
index 4a1bf1fb2..4a1bf1fb2 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IBalanceThresholdFilterCore.sol
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IThresholdAsset.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IThresholdAsset.sol
index f78f9c2de..f78f9c2de 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/interfaces/IThresholdAsset.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/interfaces/IThresholdAsset.sol
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol
index 074686e8d..1c840136b 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MBalanceThresholdFilterCore.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
import "../interfaces/IThresholdAsset.sol";
import "../interfaces/IBalanceThresholdFilterCore.sol";
diff --git a/contracts/extensions/contracts/BalanceThresholdFilter/mixins/MExchangeCalldata.sol b/contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MExchangeCalldata.sol
index 40536d820..40536d820 100644
--- a/contracts/extensions/contracts/BalanceThresholdFilter/mixins/MExchangeCalldata.sol
+++ b/contracts/extensions/contracts/src/BalanceThresholdFilter/mixins/MExchangeCalldata.sol
diff --git a/contracts/extensions/contracts/DutchAuction/DutchAuction.sol b/contracts/extensions/contracts/src/DutchAuction/DutchAuction.sol
index 9c9f3990a..7631880c0 100644
--- a/contracts/extensions/contracts/DutchAuction/DutchAuction.sol
+++ b/contracts/extensions/contracts/src/DutchAuction/DutchAuction.sol
@@ -19,11 +19,11 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-utils/contracts/utils/SafeMath/SafeMath.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-utils/contracts/src/SafeMath.sol";
contract DutchAuction is
diff --git a/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol b/contracts/extensions/contracts/src/OrderMatcher/MixinAssets.sol
index f0f91cfc0..65b36ea65 100644
--- a/contracts/extensions/contracts/OrderMatcher/MixinAssets.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/MixinAssets.sol
@@ -18,10 +18,10 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC721Token/IERC721Token.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
+import "@0x/contracts-erc721/contracts/src/interfaces/IERC721Token.sol";
import "./mixins/MAssets.sol";
import "./libs/LibConstants.sol";
diff --git a/contracts/extensions/contracts/OrderMatcher/MixinMatchOrders.sol b/contracts/extensions/contracts/src/OrderMatcher/MixinMatchOrders.sol
index 1787deb59..baf41f650 100644
--- a/contracts/extensions/contracts/OrderMatcher/MixinMatchOrders.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/MixinMatchOrders.sol
@@ -20,9 +20,9 @@ pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
import "./libs/LibConstants.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-libs/contracts/libs/LibFillResults.sol";
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibFillResults.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
contract MixinMatchOrders is
diff --git a/contracts/extensions/contracts/OrderMatcher/OrderMatcher.sol b/contracts/extensions/contracts/src/OrderMatcher/OrderMatcher.sol
index 4879b7bca..89a7f3c55 100644
--- a/contracts/extensions/contracts/OrderMatcher/OrderMatcher.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/OrderMatcher.sol
@@ -19,7 +19,7 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-utils/contracts/utils/Ownable/Ownable.sol";
+import "@0x/contracts-utils/contracts/src/Ownable.sol";
import "./libs/LibConstants.sol";
import "./MixinMatchOrders.sol";
import "./MixinAssets.sol";
diff --git a/contracts/extensions/contracts/OrderMatcher/interfaces/IAssets.sol b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IAssets.sol
index 9fcc0023a..9fcc0023a 100644
--- a/contracts/extensions/contracts/OrderMatcher/interfaces/IAssets.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IAssets.sol
diff --git a/contracts/extensions/contracts/OrderMatcher/interfaces/IMatchOrders.sol b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IMatchOrders.sol
index 1443c73b9..7e4a88df8 100644
--- a/contracts/extensions/contracts/OrderMatcher/interfaces/IMatchOrders.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IMatchOrders.sol
@@ -19,7 +19,7 @@
pragma solidity ^0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
contract IMatchOrders {
diff --git a/contracts/extensions/contracts/OrderMatcher/interfaces/IOrderMatcher.sol b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IOrderMatcher.sol
index 75f26dca6..5e5125dea 100644
--- a/contracts/extensions/contracts/OrderMatcher/interfaces/IOrderMatcher.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/interfaces/IOrderMatcher.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contract-utils/contracts/utils/Ownable/IOwnable.sol";
+import "@0x/contract-utils/contracts/src/interfaces/IOwnable.sol";
import "./IMatchOrders.sol";
import "./IAssets.sol";
diff --git a/contracts/extensions/contracts/OrderMatcher/libs/LibConstants.sol b/contracts/extensions/contracts/src/OrderMatcher/libs/LibConstants.sol
index c1a86a9c7..77b72398f 100644
--- a/contracts/extensions/contracts/OrderMatcher/libs/LibConstants.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/libs/LibConstants.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
contract LibConstants {
diff --git a/contracts/extensions/contracts/OrderMatcher/mixins/MAssets.sol b/contracts/extensions/contracts/src/OrderMatcher/mixins/MAssets.sol
index 6ea7a3290..6ea7a3290 100644
--- a/contracts/extensions/contracts/OrderMatcher/mixins/MAssets.sol
+++ b/contracts/extensions/contracts/src/OrderMatcher/mixins/MAssets.sol
diff --git a/contracts/extensions/contracts/OrderValidator/OrderValidator.sol b/contracts/extensions/contracts/src/OrderValidator/OrderValidator.sol
index 33dd1326c..3297a980f 100644
--- a/contracts/extensions/contracts/OrderValidator/OrderValidator.sol
+++ b/contracts/extensions/contracts/src/OrderValidator/OrderValidator.sol
@@ -19,11 +19,11 @@
pragma solidity 0.4.24;
pragma experimental ABIEncoderV2;
-import "@0x/contracts-interfaces/contracts/protocol/Exchange/IExchange.sol";
-import "@0x/contracts-libs/contracts/libs/LibOrder.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC20Token/IERC20Token.sol";
-import "@0x/contracts-tokens/contracts/tokens/ERC721Token/IERC721Token.sol";
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "@0x/contracts-exchange/contracts/src/interfaces/IExchange.sol";
+import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol";
+import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
+import "@0x/contracts-erc721/contracts/src/interfaces/IERC721Token.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
contract OrderValidator {
diff --git a/contracts/extensions/package.json b/contracts/extensions/package.json
index a7a8b1b93..780244f37 100644
--- a/contracts/extensions/package.json
+++ b/contracts/extensions/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-extensions",
- "version": "1.2.2",
+ "version": "1.2.3",
"engines": {
"node": ">=6.12"
},
@@ -32,7 +32,7 @@
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
},
"config": {
- "abis": "generated-artifacts/@(BalanceThresholdFilter|DutchAuction|Forwarder|OrderMatcher|OrderValidator).json"
+ "abis": "generated-artifacts/@(BalanceThresholdFilter|DutchAuction|OrderMatcher|OrderValidator).json"
},
"repository": {
"type": "git",
@@ -45,46 +45,39 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contract-wrappers": "^5.0.0",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contract-wrappers": "^5.0.1",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-interfaces": "^1.0.5",
- "@0x/contracts-libs": "^1.0.5",
- "@0x/contracts-protocol": "^2.2.2",
- "@0x/contracts-tokens": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
+ "@0x/contracts-asset-proxy": "^1.0.0",
+ "@0x/contracts-exchange-libs": "^1.0.0",
+ "@0x/contracts-exchange": "^1.0.0",
+ "@0x/contracts-erc20": "^1.0.0",
+ "@0x/contracts-erc721": "^1.0.0",
+ "@0x/contracts-utils": "^3.0.0",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
- "@types/js-combinatorics": "^0.5.29",
- "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
- "ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
},
"publishConfig": {
diff --git a/contracts/extensions/src/artifacts/index.ts b/contracts/extensions/src/artifacts/index.ts
index 329d0f3f3..f2aee4908 100644
--- a/contracts/extensions/src/artifacts/index.ts
+++ b/contracts/extensions/src/artifacts/index.ts
@@ -2,14 +2,12 @@ import { ContractArtifact } from 'ethereum-types';
import * as BalanceThresholdFilter from '../../generated-artifacts/BalanceThresholdFilter.json';
import * as DutchAuction from '../../generated-artifacts/DutchAuction.json';
-import * as Forwarder from '../../generated-artifacts/Forwarder.json';
import * as OrderMatcher from '../../generated-artifacts/OrderMatcher.json';
import * as OrderValidator from '../../generated-artifacts/OrderValidator.json';
export const artifacts = {
BalanceThresholdFilter: BalanceThresholdFilter as ContractArtifact,
DutchAuction: DutchAuction as ContractArtifact,
- Forwarder: Forwarder as ContractArtifact,
OrderMatcher: OrderMatcher as ContractArtifact,
OrderValidator: OrderValidator as ContractArtifact,
};
diff --git a/contracts/extensions/src/index.ts b/contracts/extensions/src/index.ts
index d55f08ea2..ba813e7ca 100644
--- a/contracts/extensions/src/index.ts
+++ b/contracts/extensions/src/index.ts
@@ -1,2 +1,3 @@
export * from './artifacts';
export * from './wrappers';
+export * from '../test/utils';
diff --git a/contracts/extensions/src/wrappers/index.ts b/contracts/extensions/src/wrappers/index.ts
index 65aec3ccd..eed198524 100644
--- a/contracts/extensions/src/wrappers/index.ts
+++ b/contracts/extensions/src/wrappers/index.ts
@@ -1,5 +1,4 @@
export * from '../../generated-wrappers/balance_threshold_filter';
export * from '../../generated-wrappers/dutch_auction';
-export * from '../../generated-wrappers/forwarder';
export * from '../../generated-wrappers/order_matcher';
export * from '../../generated-wrappers/order_validator';
diff --git a/contracts/extensions/test/extensions/balance_threshold_filter.ts b/contracts/extensions/test/balance_threshold_filter.ts
index a1c322e08..c79a72f5a 100644
--- a/contracts/extensions/test/extensions/balance_threshold_filter.ts
+++ b/contracts/extensions/test/balance_threshold_filter.ts
@@ -7,13 +7,9 @@ import * as chai from 'chai';
import { TransactionReceiptWithDecodedLogs } from 'ethereum-types';
import * as _ from 'lodash';
-import {
- artifacts as protocolArtifacts,
- ERC20Wrapper,
- ERC721Wrapper,
- ExchangeContract,
- ExchangeWrapper,
-} from '@0x/contracts-protocol';
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { DummyERC20TokenContract } from '@0x/contracts-erc20';
+import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange';
import {
chaiSetup,
constants,
@@ -27,11 +23,8 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { DummyERC20TokenContract } from '@0x/contracts-tokens';
-import { BalanceThresholdFilterContract } from '../../generated-wrappers/balance_threshold_filter';
-import { artifacts } from '../../src/artifacts';
-import { BalanceThresholdWrapper } from '../utils/balance_threshold_wrapper';
+import { artifacts, BalanceThresholdFilterContract, BalanceThresholdWrapper } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -134,7 +127,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
await erc20Wrapper.setBalancesAndAllowancesAsync();
// Deploy Exchange contract
exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
zrxAssetData,
@@ -269,7 +262,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -278,13 +271,13 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
it('should revert if the Exchange transaction function is not supported', async () => {
@@ -357,7 +350,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -367,7 +360,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid),
@@ -378,14 +371,14 @@ describe(ContractName.BalanceThresholdFilter, () => {
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount.times(2)),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount.times(2)),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.times(2).add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.times(2).plus(takerFeePaid)),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -461,7 +454,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -471,7 +464,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid),
@@ -482,14 +475,14 @@ describe(ContractName.BalanceThresholdFilter, () => {
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount.times(2)),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount.times(2)),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.times(2).add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.times(2).plus(takerFeePaid)),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -559,7 +552,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -569,7 +562,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid),
@@ -580,14 +573,14 @@ describe(ContractName.BalanceThresholdFilter, () => {
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount.times(2)),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount.times(2)),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.times(2).add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.times(2).plus(takerFeePaid)),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -658,7 +651,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -667,13 +660,13 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
it('should revert if maker does not meet the balance threshold', async () => {
@@ -736,7 +729,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -745,13 +738,13 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
it('should revert if maker does not meet the balance threshold', async () => {
@@ -811,7 +804,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(makerAssetFillAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(takerAssetFillAmount_),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(takerAssetFillAmount_),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(makerFeePaid),
@@ -820,13 +813,13 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(takerAssetFillAmount_),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(makerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(makerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
);
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
- erc20Balances[feeRecipientAddress][zrxToken.address].add(makerFeePaid.add(takerFeePaid)),
+ erc20Balances[feeRecipientAddress][zrxToken.address].plus(makerFeePaid.plus(takerFeePaid)),
);
});
it('should revert if maker does not meet the balance threshold', async () => {
@@ -904,7 +897,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(validSignedOrder.makerAssetAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(validSignedOrder.takerAssetAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(validSignedOrder.takerAssetAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(validSignedOrder.makerFee),
@@ -914,7 +907,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount2),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid2),
@@ -924,7 +917,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(cumulativeTakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(cumulativeMakerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(cumulativeMakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
@@ -932,9 +925,9 @@ describe(ContractName.BalanceThresholdFilter, () => {
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[feeRecipientAddress][zrxToken.address]
- .add(validSignedOrder.makerFee)
- .add(makerFeePaid2)
- .add(takerFeePaid),
+ .plus(validSignedOrder.makerFee)
+ .plus(makerFeePaid2)
+ .plus(takerFeePaid),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -1008,7 +1001,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(validSignedOrder.makerAssetAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(validSignedOrder.takerAssetAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(validSignedOrder.takerAssetAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(validSignedOrder.makerFee),
@@ -1018,7 +1011,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount2),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid2),
@@ -1028,7 +1021,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(cumulativeTakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(cumulativeMakerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(cumulativeMakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
@@ -1036,9 +1029,9 @@ describe(ContractName.BalanceThresholdFilter, () => {
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[feeRecipientAddress][zrxToken.address]
- .add(validSignedOrder.makerFee)
- .add(makerFeePaid2)
- .add(takerFeePaid),
+ .plus(validSignedOrder.makerFee)
+ .plus(makerFeePaid2)
+ .plus(takerFeePaid),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -1104,7 +1097,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(validSignedOrder.makerAssetAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(validSignedOrder.takerAssetAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(validSignedOrder.takerAssetAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(validSignedOrder.makerFee),
@@ -1114,7 +1107,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount2),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid2),
@@ -1124,7 +1117,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(cumulativeTakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(cumulativeMakerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(cumulativeMakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
@@ -1132,9 +1125,9 @@ describe(ContractName.BalanceThresholdFilter, () => {
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[feeRecipientAddress][zrxToken.address]
- .add(validSignedOrder.makerFee)
- .add(makerFeePaid2)
- .add(takerFeePaid),
+ .plus(validSignedOrder.makerFee)
+ .plus(makerFeePaid2)
+ .plus(takerFeePaid),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -1210,7 +1203,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress][defaultMakerAssetAddress].minus(validSignedOrder.makerAssetAmount),
);
expect(newBalances[validMakerAddress][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress][defaultTakerAssetAddress].add(validSignedOrder.takerAssetAmount),
+ erc20Balances[validMakerAddress][defaultTakerAssetAddress].plus(validSignedOrder.takerAssetAmount),
);
expect(newBalances[validMakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress][zrxToken.address].minus(validSignedOrder.makerFee),
@@ -1220,7 +1213,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validMakerAddress2][defaultMakerAssetAddress].minus(makerAssetFillAmount2),
);
expect(newBalances[validMakerAddress2][defaultTakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validMakerAddress2][defaultTakerAssetAddress].add(takerAssetFillAmount),
+ erc20Balances[validMakerAddress2][defaultTakerAssetAddress].plus(takerAssetFillAmount),
);
expect(newBalances[validMakerAddress2][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validMakerAddress2][zrxToken.address].minus(makerFeePaid2),
@@ -1230,7 +1223,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
erc20Balances[validTakerAddress][defaultTakerAssetAddress].minus(cumulativeTakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][defaultMakerAssetAddress]).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(cumulativeMakerAssetFillAmount),
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(cumulativeMakerAssetFillAmount),
);
expect(newBalances[validTakerAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address].minus(takerFeePaid),
@@ -1238,9 +1231,9 @@ describe(ContractName.BalanceThresholdFilter, () => {
// Fee recipient
expect(newBalances[feeRecipientAddress][zrxToken.address]).to.be.bignumber.equal(
erc20Balances[feeRecipientAddress][zrxToken.address]
- .add(validSignedOrder.makerFee)
- .add(makerFeePaid2)
- .add(takerFeePaid),
+ .plus(validSignedOrder.makerFee)
+ .plus(makerFeePaid2)
+ .plus(takerFeePaid),
);
});
it('should revert if one maker does not meet the balance threshold', async () => {
@@ -1329,7 +1322,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
newBalances[signedOrderLeft.makerAddress][defaultMakerAssetAddress],
'Checking left maker egress ERC20 account balance',
).to.be.bignumber.equal(
- erc20Balances[signedOrderLeft.makerAddress][defaultMakerAssetAddress].sub(
+ erc20Balances[signedOrderLeft.makerAddress][defaultMakerAssetAddress].minus(
expectedTransferAmounts.amountSoldByLeftMaker,
),
);
@@ -1337,7 +1330,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
newBalances[signedOrderRight.makerAddress][defaultTakerAssetAddress],
'Checking right maker ingress ERC20 account balance',
).to.be.bignumber.equal(
- erc20Balances[signedOrderRight.makerAddress][defaultTakerAssetAddress].sub(
+ erc20Balances[signedOrderRight.makerAddress][defaultTakerAssetAddress].minus(
expectedTransferAmounts.amountSoldByRightMaker,
),
);
@@ -1345,7 +1338,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
newBalances[validTakerAddress][defaultMakerAssetAddress],
'Checking taker ingress ERC20 account balance',
).to.be.bignumber.equal(
- erc20Balances[validTakerAddress][defaultMakerAssetAddress].add(
+ erc20Balances[validTakerAddress][defaultMakerAssetAddress].plus(
expectedTransferAmounts.amountReceivedByTaker,
),
);
@@ -1353,7 +1346,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
newBalances[signedOrderLeft.makerAddress][defaultTakerAssetAddress],
'Checking left maker ingress ERC20 account balance',
).to.be.bignumber.equal(
- erc20Balances[signedOrderLeft.makerAddress][defaultTakerAssetAddress].add(
+ erc20Balances[signedOrderLeft.makerAddress][defaultTakerAssetAddress].plus(
expectedTransferAmounts.amountBoughtByLeftMaker,
),
);
@@ -1361,7 +1354,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
newBalances[signedOrderRight.makerAddress][defaultMakerAssetAddress],
'Checking right maker egress ERC20 account balance',
).to.be.bignumber.equal(
- erc20Balances[signedOrderRight.makerAddress][defaultMakerAssetAddress].add(
+ erc20Balances[signedOrderRight.makerAddress][defaultMakerAssetAddress].plus(
expectedTransferAmounts.amountBoughtByRightMaker,
),
);
@@ -1388,7 +1381,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
).to.be.bignumber.equal(
erc20Balances[validTakerAddress][zrxToken.address]
.minus(expectedTransferAmounts.feePaidByTakerLeft)
- .sub(expectedTransferAmounts.feePaidByTakerRight),
+ .minus(expectedTransferAmounts.feePaidByTakerRight),
);
// Received fees
expect(
@@ -1396,10 +1389,10 @@ describe(ContractName.BalanceThresholdFilter, () => {
'Checking left fee recipient ingress ERC20 account fees',
).to.be.bignumber.equal(
erc20Balances[feeRecipientAddress][zrxToken.address]
- .add(expectedTransferAmounts.feePaidByLeftMaker)
- .add(expectedTransferAmounts.feePaidByRightMaker)
- .add(expectedTransferAmounts.feePaidByTakerLeft)
- .add(expectedTransferAmounts.feePaidByTakerRight),
+ .plus(expectedTransferAmounts.feePaidByLeftMaker)
+ .plus(expectedTransferAmounts.feePaidByRightMaker)
+ .plus(expectedTransferAmounts.feePaidByTakerLeft)
+ .plus(expectedTransferAmounts.feePaidByTakerRight),
);
});
it('should revert if left maker does not meet the balance threshold', async () => {
@@ -1595,7 +1588,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
signedOrder,
);
const saltAsBigNumber = new BigNumber(salt);
- if (saltAsBigNumber.lessThanOrEqualTo(cancelOrdersUpToThisSalt)) {
+ if (saltAsBigNumber.isLessThanOrEqualTo(cancelOrdersUpToThisSalt)) {
return expect(orderInfoAfterCancelling.orderStatus).to.be.equal(OrderStatus.Cancelled);
} else {
return expect(orderInfoAfterCancelling.orderStatus).to.be.equal(OrderStatus.Fillable);
@@ -1631,7 +1624,7 @@ describe(ContractName.BalanceThresholdFilter, () => {
signedOrder,
);
const saltAsBigNumber = new BigNumber(salt);
- if (saltAsBigNumber.lessThanOrEqualTo(cancelOrdersUpToThisSalt)) {
+ if (saltAsBigNumber.isLessThanOrEqualTo(cancelOrdersUpToThisSalt)) {
return expect(orderInfoAfterCancelling.orderStatus).to.be.equal(OrderStatus.Cancelled);
} else {
return expect(orderInfoAfterCancelling.orderStatus).to.be.equal(OrderStatus.Fillable);
diff --git a/contracts/extensions/test/extensions/dutch_auction.ts b/contracts/extensions/test/dutch_auction.ts
index 22b3caa16..34ff25c3d 100644
--- a/contracts/extensions/test/extensions/dutch_auction.ts
+++ b/contracts/extensions/test/dutch_auction.ts
@@ -1,11 +1,8 @@
import { DutchAuctionWrapper } from '@0x/contract-wrappers';
-import {
- artifacts as protocolArtifacts,
- ERC20Wrapper,
- ERC721Wrapper,
- ExchangeContract,
- ExchangeWrapper,
-} from '@0x/contracts-protocol';
+import { ERC20Wrapper, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange';
import {
chaiSetup,
constants,
@@ -18,12 +15,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import {
- artifacts as tokensArtifacts,
- DummyERC20TokenContract,
- DummyERC721TokenContract,
- WETH9Contract,
-} from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, generatePseudoRandomSalt } from '@0x/order-utils';
import { RevertReason, SignedOrder } from '@0x/types';
@@ -32,9 +23,7 @@ import { Web3Wrapper } from '@0x/web3-wrapper';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { DutchAuctionContract } from '../../generated-wrappers/dutch_auction';
-import { artifacts } from '../../src/artifacts';
-import { DutchAuctionTestWrapper } from '../utils/dutch_auction_test_wrapper';
+import { artifacts, DutchAuctionContract, DutchAuctionTestWrapper } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -93,12 +82,12 @@ describe(ContractName.DutchAuction, () => {
const erc721Balances = await erc721Wrapper.getBalancesAsync();
erc721MakerAssetIds = erc721Balances[makerAddress][erc721Token.address];
- wethContract = await WETH9Contract.deployFrom0xArtifactAsync(tokensArtifacts.WETH9, provider, txDefaults);
+ wethContract = await WETH9Contract.deployFrom0xArtifactAsync(erc20Artifacts.WETH9, provider, txDefaults);
erc20Wrapper.addDummyTokenContract(wethContract as any);
const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
zrxAssetData,
diff --git a/contracts/extensions/test/extensions/order_matcher.ts b/contracts/extensions/test/order_matcher.ts
index acb46ced4..0b2f9ddbb 100644
--- a/contracts/extensions/test/extensions/order_matcher.ts
+++ b/contracts/extensions/test/order_matcher.ts
@@ -1,12 +1,17 @@
import {
- artifacts as protocolArtifacts,
+ artifacts as proxyArtifacts,
ERC20ProxyContract,
ERC20Wrapper,
ERC721ProxyContract,
+} from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20';
+import { artifacts as erc721Artifacts, DummyERC721TokenContract } from '@0x/contracts-erc721';
+import {
+ artifacts as exchangeArtifacts,
ExchangeContract,
ExchangeFillEventArgs,
ExchangeWrapper,
-} from '@0x/contracts-protocol';
+} from '@0x/contracts-exchange';
import {
chaiSetup,
constants,
@@ -20,7 +25,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { artifacts as tokenArtifacts, DummyERC20TokenContract, DummyERC721TokenContract } from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils } from '@0x/order-utils';
import { RevertReason } from '@0x/types';
@@ -30,8 +34,7 @@ import * as chai from 'chai';
import { LogWithDecodedArgs } from 'ethereum-types';
import * as _ from 'lodash';
-import { OrderMatcherContract } from '../../generated-wrappers/order_matcher';
-import { artifacts } from '../../src/artifacts';
+import { artifacts, OrderMatcherContract } from '../src';
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
chaiSetup.configure();
@@ -102,13 +105,13 @@ describe('OrderMatcher', () => {
await erc20Wrapper.setBalancesAndAllowancesAsync();
// Deploy ERC721 proxy
erc721Proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync(
- protocolArtifacts.ERC721Proxy,
+ proxyArtifacts.ERC721Proxy,
provider,
txDefaults,
);
// Depoy exchange
exchange = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
assetDataUtils.encodeERC20AssetData(zrxToken.address),
@@ -197,7 +200,7 @@ describe('OrderMatcher', () => {
describe('constructor', () => {
it('should revert if assetProxy is unregistered', async () => {
const exchangeInstance = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
constants.NULL_BYTES,
@@ -451,7 +454,7 @@ describe('OrderMatcher', () => {
signedOrderLeft.signature,
signedOrderRight.signature,
);
- const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...tokenArtifacts, ...protocolArtifacts });
+ const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts, ...exchangeArtifacts });
const txReceipt = await logDecoder.getTxWithDecodedLogsAsync(
await web3Wrapper.sendTransactionAsync({
data,
@@ -489,7 +492,7 @@ describe('OrderMatcher', () => {
signedOrderLeft.signature,
signedOrderRight.signature,
);
- const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...tokenArtifacts, ...protocolArtifacts });
+ const logDecoder = new LogDecoder(web3Wrapper, { ...artifacts, ...erc20Artifacts, ...exchangeArtifacts });
const txReceipt = await logDecoder.getTxWithDecodedLogsAsync(
await web3Wrapper.sendTransactionAsync({
data,
@@ -726,7 +729,7 @@ describe('OrderMatcher', () => {
});
it('should allow owner to withdraw ERC721 tokens', async () => {
const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync(
- tokenArtifacts.DummyERC721Token,
+ erc721Artifacts.DummyERC721Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
@@ -771,7 +774,7 @@ describe('OrderMatcher', () => {
});
it('should be able to approve an ERC721 token by passing in allowance = 1', async () => {
const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync(
- tokenArtifacts.DummyERC721Token,
+ erc721Artifacts.DummyERC721Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
@@ -788,7 +791,7 @@ describe('OrderMatcher', () => {
});
it('should be able to approve an ERC721 token by passing in allowance > 1', async () => {
const erc721Token = await DummyERC721TokenContract.deployFrom0xArtifactAsync(
- tokenArtifacts.DummyERC721Token,
+ erc721Artifacts.DummyERC721Token,
provider,
txDefaults,
constants.DUMMY_TOKEN_NAME,
diff --git a/contracts/extensions/test/extensions/order_validator.ts b/contracts/extensions/test/order_validator.ts
index 7d8675f36..88dae14fb 100644
--- a/contracts/extensions/test/extensions/order_validator.ts
+++ b/contracts/extensions/test/order_validator.ts
@@ -1,12 +1,7 @@
-import {
- artifacts as protocolArtifacts,
- ERC20ProxyContract,
- ERC20Wrapper,
- ERC721ProxyContract,
- ERC721Wrapper,
- ExchangeContract,
- ExchangeWrapper,
-} from '@0x/contracts-protocol';
+import { ERC20ProxyContract, ERC20Wrapper, ERC721ProxyContract, ERC721Wrapper } from '@0x/contracts-asset-proxy';
+import { DummyERC20TokenContract } from '@0x/contracts-erc20';
+import { DummyERC721TokenContract } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts, ExchangeContract, ExchangeWrapper } from '@0x/contracts-exchange';
import {
chaiSetup,
constants,
@@ -16,7 +11,6 @@ import {
txDefaults,
web3Wrapper,
} from '@0x/contracts-test-utils';
-import { DummyERC20TokenContract, DummyERC721TokenContract } from '@0x/contracts-tokens';
import { BlockchainLifecycle } from '@0x/dev-utils';
import { assetDataUtils, orderHashUtils } from '@0x/order-utils';
import { SignedOrder } from '@0x/types';
@@ -24,8 +18,7 @@ import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
-import { OrderValidatorContract } from '../../generated-wrappers/order_validator';
-import { artifacts } from '../../src/artifacts/index';
+import { artifacts, OrderValidatorContract } from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -81,7 +74,7 @@ describe('OrderValidator', () => {
const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address);
exchange = await ExchangeContract.deployFrom0xArtifactAsync(
- protocolArtifacts.Exchange,
+ exchangeArtifacts.Exchange,
provider,
txDefaults,
zrxAssetData,
diff --git a/contracts/extensions/test/utils/balance_threshold_wrapper.ts b/contracts/extensions/test/utils/balance_threshold_wrapper.ts
index 28a4ef011..3178d992e 100644
--- a/contracts/extensions/test/utils/balance_threshold_wrapper.ts
+++ b/contracts/extensions/test/utils/balance_threshold_wrapper.ts
@@ -1,4 +1,6 @@
-import { artifacts as protocolArtifacts, ExchangeContract } from '@0x/contracts-protocol';
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
+import { artifacts as erc721Artifacts } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts, ExchangeContract } from '@0x/contracts-exchange';
import {
FillResults,
formatters,
@@ -7,7 +9,6 @@ import {
orderUtils,
TransactionFactory,
} from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { SignedOrder } from '@0x/types';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
@@ -35,8 +36,9 @@ export class BalanceThresholdWrapper {
this._web3Wrapper = new Web3Wrapper(provider);
this._logDecoder = new LogDecoder(this._web3Wrapper, {
...artifacts,
- ...tokensArtifacts,
- ...protocolArtifacts,
+ ...erc20Artifacts,
+ ...erc721Artifacts,
+ ...exchangeArtifacts,
});
}
public async fillOrderAsync(
diff --git a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts
index c1e2f2070..5899ffcac 100644
--- a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts
+++ b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts
@@ -1,6 +1,7 @@
-import { artifacts as protocolArtifacts } from '@0x/contracts-protocol';
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
+import { artifacts as erc721Artifacts } from '@0x/contracts-erc721';
+import { artifacts as exchangeArtifacts } from '@0x/contracts-exchange';
import { LogDecoder } from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { DutchAuctionDetails, SignedOrder } from '@0x/types';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types';
@@ -19,8 +20,9 @@ export class DutchAuctionTestWrapper {
this._web3Wrapper = new Web3Wrapper(provider);
this._logDecoder = new LogDecoder(this._web3Wrapper, {
...artifacts,
- ...tokensArtifacts,
- ...protocolArtifacts,
+ ...erc20Artifacts,
+ ...erc721Artifacts,
+ ...exchangeArtifacts,
});
}
/**
diff --git a/contracts/extensions/test/utils/index.ts b/contracts/extensions/test/utils/index.ts
new file mode 100644
index 000000000..6ba9a2300
--- /dev/null
+++ b/contracts/extensions/test/utils/index.ts
@@ -0,0 +1,2 @@
+export * from './balance_threshold_wrapper';
+export * from './dutch_auction_test_wrapper';
diff --git a/contracts/extensions/tsconfig.json b/contracts/extensions/tsconfig.json
index ed9b4fbe1..0c06c6902 100644
--- a/contracts/extensions/tsconfig.json
+++ b/contracts/extensions/tsconfig.json
@@ -9,7 +9,6 @@
"files": [
"./generated-artifacts/BalanceThresholdFilter.json",
"./generated-artifacts/DutchAuction.json",
- "./generated-artifacts/Forwarder.json",
"./generated-artifacts/OrderMatcher.json",
"./generated-artifacts/OrderValidator.json"
],
diff --git a/contracts/interfaces/CHANGELOG.json b/contracts/interfaces/CHANGELOG.json
deleted file mode 100644
index ee239b318..000000000
--- a/contracts/interfaces/CHANGELOG.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
- {
- "timestamp": 1547561734,
- "version": "1.0.5",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547225310,
- "version": "1.0.4",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547040760,
- "version": "1.0.3",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1544741676,
- "version": "1.0.2",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- }
-]
diff --git a/contracts/interfaces/package.json b/contracts/interfaces/package.json
deleted file mode 100644
index 3550487da..000000000
--- a/contracts/interfaces/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "@0x/contracts-interfaces",
- "version": "1.0.5",
- "engines": {
- "node": ">=6.12"
- },
- "description": "Smart contract interfaces of 0x protocol",
- "main": "lib/src/index.js",
- "scripts": {
- "build": "yarn pre_build && tsc -b",
- "build:ci": "yarn build",
- "pre_build": "run-s compile generate_contract_wrappers",
- "compile": "sol-compiler",
- "watch": "sol-compiler -w",
- "clean": "shx rm -rf lib generated-artifacts generated-wrappers",
- "generate_contract_wrappers": "abi-gen --abis ${npm_package_config_abis} --template ../../node_modules/@0x/abi-gen-templates/contract.handlebars --partials '../../node_modules/@0x/abi-gen-templates/partials/**/*.handlebars' --output generated-wrappers --backend ethers",
- "lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
- "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
- },
- "config": {
- "abis": "generated-artifacts/@(IAssetData|IAssetProxy|IAuthorizable|IAssetProxyDispatcher|IExchange|IExchangeCore|IMatchOrders|ISignatureValidator|ITransactions|IValidator|IWallet|IWrapperFunctions).json"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/0xProject/0x-monorepo.git"
- },
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/0xProject/0x-monorepo/issues"
- },
- "homepage": "https://github.com/0xProject/0x-monorepo/contracts/interfaces/README.md",
- "devDependencies": {
- "@0x/abi-gen": "^1.0.22",
- "@0x/sol-compiler": "^2.0.2",
- "@0x/tslint-config": "^2.0.2",
- "npm-run-all": "^4.1.2",
- "shx": "^0.2.2",
- "solhint": "^1.4.1",
- "tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
- },
- "dependencies": {
- "@0x/base-contract": "^3.0.13",
- "@0x/contracts-libs": "^1.0.5",
- "@0x/contracts-utils": "^1.0.5",
- "@0x/types": "^1.5.2",
- "@0x/typescript-typings": "^3.0.8",
- "@0x/utils": "^3.0.1",
- "@0x/web3-wrapper": "^3.2.4",
- "ethereum-types": "^1.1.6",
- "lodash": "^4.17.5"
- },
- "publishConfig": {
- "access": "public"
- }
-}
diff --git a/contracts/interfaces/src/wrappers/index.ts b/contracts/interfaces/src/wrappers/index.ts
deleted file mode 100644
index f7f72fada..000000000
--- a/contracts/interfaces/src/wrappers/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export * from '../../generated-wrappers/i_asset_data';
-export * from '../../generated-wrappers/i_asset_proxy';
-export * from '../../generated-wrappers/i_asset_proxy_dispatcher';
-export * from '../../generated-wrappers/i_exchange';
-export * from '../../generated-wrappers/i_exchange_core';
-export * from '../../generated-wrappers/i_match_orders';
-export * from '../../generated-wrappers/i_signature_validator';
-export * from '../../generated-wrappers/i_transactions';
-export * from '../../generated-wrappers/i_authorizable';
-export * from '../../generated-wrappers/i_wrapper_functions';
-export * from '../../generated-wrappers/i_validator';
-export * from '../../generated-wrappers/i_wallet';
diff --git a/contracts/libs/CHANGELOG.json b/contracts/libs/CHANGELOG.json
deleted file mode 100644
index ee239b318..000000000
--- a/contracts/libs/CHANGELOG.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
- {
- "timestamp": 1547561734,
- "version": "1.0.5",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547225310,
- "version": "1.0.4",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547040760,
- "version": "1.0.3",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1544741676,
- "version": "1.0.2",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- }
-]
diff --git a/contracts/multisig/CHANGELOG.json b/contracts/multisig/CHANGELOG.json
index ee239b318..0fd8833c9 100644
--- a/contracts/multisig/CHANGELOG.json
+++ b/contracts/multisig/CHANGELOG.json
@@ -1,5 +1,36 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Add AssetProxyOwner contract",
+ "pr": 1539
+ },
+ {
+ "note": "Rename multisig directory to src",
+ "pr": 1539
+ }
+ ]
+ },
+ {
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.0.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.5",
"changes": [
diff --git a/contracts/multisig/CHANGELOG.md b/contracts/multisig/CHANGELOG.md
index 6d53a0b9c..59d0804da 100644
--- a/contracts/multisig/CHANGELOG.md
+++ b/contracts/multisig/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.6 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.5 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/multisig/DEPLOYS.json b/contracts/multisig/DEPLOYS.json
new file mode 100644
index 000000000..ea4e7ff89
--- /dev/null
+++ b/contracts/multisig/DEPLOYS.json
@@ -0,0 +1,17 @@
+[
+ {
+ "name": "AssetProxyOwner",
+ "version": "1.0.0",
+ "changes": [
+ {
+ "note": "protocol v2 deploy",
+ "networks": {
+ "1": "0x17992e4ffb22730138e4b62aaa6367fa9d3699a6",
+ "3": "0xf5fa5b5fed2727a0e44ac67f6772e97977aa358b",
+ "4": "0x1da52d1d3a3acfa0a1836b737393b4e9931268fc",
+ "42": "0x2c824d2882baa668e0d5202b1e7f2922278703f8"
+ }
+ }
+ ]
+ }
+]
diff --git a/contracts/multisig/README.md b/contracts/multisig/README.md
index e29f46251..98cd8a080 100644
--- a/contracts/multisig/README.md
+++ b/contracts/multisig/README.md
@@ -1,15 +1,14 @@
-## MultisSig Contracts
+## MultiSignature Contracts
-MultiSig smart contracts
+This package contains various types of multisignature wallet contracts, including the [`AssetProxyOwner`](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md#assetproxyowner) contract that is responsible for upgrading the 0x protocol smart contracts. Addresses of the deployed contracts can be found in the 0x [wiki](https://0xproject.com/wiki#Deployed-Addresses) or the [DEPLOYS](./DEPLOYS.json) file within this package.
-## Usage
+## Installation
-Contracts can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [multisig](./contracts/multisig)
- - This directory contains the [Gnosis MultiSigWallet](https://github.com/gnosis/MultiSigWallet) and a custom extension that adds a timelock to transactions within the MultiSigWallet.
-- [test](./contracts/test)
- - This directory contains mocks and other contracts that are used solely for testing contracts within the other directories.
+```bash
+npm install @0x/contracts-multisig --save
+```
## Contributing
diff --git a/contracts/multisig/compiler.json b/contracts/multisig/compiler.json
index 5a1f689e2..772665775 100644
--- a/contracts/multisig/compiler.json
+++ b/contracts/multisig/compiler.json
@@ -18,5 +18,11 @@
}
}
},
- "contracts": ["MultiSigWallet", "MultiSigWalletWithTimeLock", "TestRejectEther"]
+ "contracts": [
+ "AssetProxyOwner",
+ "MultiSigWallet",
+ "MultiSigWalletWithTimeLock",
+ "TestAssetProxyOwner",
+ "TestRejectEther"
+ ]
}
diff --git a/contracts/protocol/contracts/protocol/AssetProxyOwner/AssetProxyOwner.sol b/contracts/multisig/contracts/src/AssetProxyOwner.sol
index bfc7b5a66..d115a9d82 100644
--- a/contracts/protocol/contracts/protocol/AssetProxyOwner/AssetProxyOwner.sol
+++ b/contracts/multisig/contracts/src/AssetProxyOwner.sol
@@ -18,8 +18,8 @@
pragma solidity 0.4.24;
-import "@0x/contracts-multisig/contracts/multisig/MultiSigWalletWithTimeLock.sol";
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "./MultiSigWalletWithTimeLock.sol";
+import "@0x/contracts-utils/contracts/src/LibBytes.sol";
contract AssetProxyOwner is
diff --git a/contracts/multisig/contracts/multisig/MultiSigWallet.sol b/contracts/multisig/contracts/src/MultiSigWallet.sol
index 516e7391c..516e7391c 100644
--- a/contracts/multisig/contracts/multisig/MultiSigWallet.sol
+++ b/contracts/multisig/contracts/src/MultiSigWallet.sol
diff --git a/contracts/multisig/contracts/multisig/MultiSigWalletWithTimeLock.sol b/contracts/multisig/contracts/src/MultiSigWalletWithTimeLock.sol
index 9513d3b30..9513d3b30 100644
--- a/contracts/multisig/contracts/multisig/MultiSigWalletWithTimeLock.sol
+++ b/contracts/multisig/contracts/src/MultiSigWalletWithTimeLock.sol
diff --git a/contracts/protocol/contracts/test/TestAssetProxyOwner/TestAssetProxyOwner.sol b/contracts/multisig/contracts/test/TestAssetProxyOwner.sol
index 52c66cb56..09ae836c7 100644
--- a/contracts/protocol/contracts/test/TestAssetProxyOwner/TestAssetProxyOwner.sol
+++ b/contracts/multisig/contracts/test/TestAssetProxyOwner.sol
@@ -18,7 +18,7 @@
pragma solidity 0.4.24;
-import "../../protocol/AssetProxyOwner/AssetProxyOwner.sol";
+import "../src/AssetProxyOwner.sol";
// solhint-disable no-empty-blocks
diff --git a/contracts/multisig/contracts/test/TestRejectEther/TestRejectEther.sol b/contracts/multisig/contracts/test/TestRejectEther.sol
index e523f591d..e523f591d 100644
--- a/contracts/multisig/contracts/test/TestRejectEther/TestRejectEther.sol
+++ b/contracts/multisig/contracts/test/TestRejectEther.sol
diff --git a/contracts/multisig/package.json b/contracts/multisig/package.json
index f819c59f8..3282e0ae5 100644
--- a/contracts/multisig/package.json
+++ b/contracts/multisig/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-multisig",
- "version": "1.0.5",
+ "version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -32,7 +32,7 @@
"lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol"
},
"config": {
- "abis": "generated-artifacts/@(MultiSigWallet|MultiSigWalletWithTimeLock|TestRejectEther).json"
+ "abis": "generated-artifacts/@(AssetProxyOwner|MultiSigWallet|MultiSigWalletWithTimeLock|TestAssetProxyOwner|TestRejectEther).json"
},
"repository": {
"type": "git",
@@ -45,19 +45,15 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/multisig/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
- "@types/ethereumjs-abi": "^0.6.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
@@ -65,12 +61,12 @@
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/order-utils": "^3.1.2",
+ "@0x/contracts-asset-proxy": "^1.0.0",
+ "@0x/contracts-erc20": "^1.0.0",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
diff --git a/contracts/multisig/src/artifacts/index.ts b/contracts/multisig/src/artifacts/index.ts
index 7cf47be01..326d79000 100644
--- a/contracts/multisig/src/artifacts/index.ts
+++ b/contracts/multisig/src/artifacts/index.ts
@@ -1,11 +1,15 @@
import { ContractArtifact } from 'ethereum-types';
+import * as AssetProxyOwner from '../../generated-artifacts/AssetProxyOwner.json';
import * as MultiSigWallet from '../../generated-artifacts/MultiSigWallet.json';
import * as MultiSigWalletWithTimeLock from '../../generated-artifacts/MultiSigWalletWithTimeLock.json';
+import * as TestAssetProxyOwner from '../../generated-artifacts/TestAssetProxyOwner.json';
import * as TestRejectEther from '../../generated-artifacts/TestRejectEther.json';
export const artifacts = {
- TestRejectEther: TestRejectEther as ContractArtifact,
+ AssetProxyOwner: AssetProxyOwner as ContractArtifact,
MultiSigWallet: MultiSigWallet as ContractArtifact,
MultiSigWalletWithTimeLock: MultiSigWalletWithTimeLock as ContractArtifact,
+ TestAssetProxyOwner: TestAssetProxyOwner as ContractArtifact,
+ TestRejectEther: TestRejectEther as ContractArtifact,
};
diff --git a/contracts/multisig/src/index.ts b/contracts/multisig/src/index.ts
index d55f08ea2..ba813e7ca 100644
--- a/contracts/multisig/src/index.ts
+++ b/contracts/multisig/src/index.ts
@@ -1,2 +1,3 @@
export * from './artifacts';
export * from './wrappers';
+export * from '../test/utils';
diff --git a/contracts/multisig/src/wrappers/index.ts b/contracts/multisig/src/wrappers/index.ts
index 69abd62f2..43ab25704 100644
--- a/contracts/multisig/src/wrappers/index.ts
+++ b/contracts/multisig/src/wrappers/index.ts
@@ -1,2 +1,5 @@
+export * from '../../generated-wrappers/asset_proxy_owner';
export * from '../../generated-wrappers/multi_sig_wallet';
export * from '../../generated-wrappers/multi_sig_wallet_with_time_lock';
+export * from '../../generated-wrappers/test_asset_proxy_owner';
+export * from '../../generated-wrappers/test_reject_ether';
diff --git a/contracts/protocol/test/multisig/asset_proxy_owner.ts b/contracts/multisig/test/asset_proxy_owner.ts
index daebfb7fb..62081554b 100644
--- a/contracts/protocol/test/multisig/asset_proxy_owner.ts
+++ b/contracts/multisig/test/asset_proxy_owner.ts
@@ -1,3 +1,4 @@
+import { artifacts as proxyArtifacts, MixinAuthorizableContract } from '@0x/contracts-asset-proxy';
import {
chaiSetup,
constants,
@@ -18,16 +19,15 @@ import * as chai from 'chai';
import { LogWithDecodedArgs } from 'ethereum-types';
import {
+ artifacts,
AssetProxyOwnerAssetProxyRegistrationEventArgs,
AssetProxyOwnerContract,
AssetProxyOwnerExecutionEventArgs,
AssetProxyOwnerExecutionFailureEventArgs,
AssetProxyOwnerSubmissionEventArgs,
-} from '../../generated-wrappers/asset_proxy_owner';
-import { MixinAuthorizableContract } from '../../generated-wrappers/mixin_authorizable';
-import { TestAssetProxyOwnerContract } from '../../generated-wrappers/test_asset_proxy_owner';
-import { artifacts } from '../../src/artifacts';
-import { AssetProxyOwnerWrapper } from '../utils/asset_proxy_owner_wrapper';
+ AssetProxyOwnerWrapper,
+ TestAssetProxyOwnerContract,
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
@@ -58,12 +58,12 @@ describe('AssetProxyOwner', () => {
notOwner = accounts[3];
const initialOwner = accounts[0];
erc20Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync(
- artifacts.MixinAuthorizable,
+ proxyArtifacts.MixinAuthorizable,
provider,
txDefaults,
);
erc721Proxy = await MixinAuthorizableContract.deployFrom0xArtifactAsync(
- artifacts.MixinAuthorizable,
+ proxyArtifacts.MixinAuthorizable,
provider,
txDefaults,
);
diff --git a/contracts/multisig/test/multi_sig_with_time_lock.ts b/contracts/multisig/test/multi_sig_with_time_lock.ts
index 31c215505..b9b3732a7 100644
--- a/contracts/multisig/test/multi_sig_with_time_lock.ts
+++ b/contracts/multisig/test/multi_sig_with_time_lock.ts
@@ -16,17 +16,16 @@ import { LogWithDecodedArgs } from 'ethereum-types';
import * as _ from 'lodash';
import {
+ artifacts,
MultiSigWalletWithTimeLockConfirmationEventArgs,
MultiSigWalletWithTimeLockConfirmationTimeSetEventArgs,
MultiSigWalletWithTimeLockContract,
MultiSigWalletWithTimeLockExecutionEventArgs,
MultiSigWalletWithTimeLockExecutionFailureEventArgs,
MultiSigWalletWithTimeLockSubmissionEventArgs,
-} from '../generated-wrappers/multi_sig_wallet_with_time_lock';
-import { TestRejectEtherContract } from '../generated-wrappers/test_reject_ether';
-import { artifacts } from '../src/artifacts';
-
-import { MultiSigWrapper } from './utils/multi_sig_wrapper';
+ MultiSigWrapper,
+ TestRejectEtherContract,
+} from '../src';
chaiSetup.configure();
const expect = chai.expect;
diff --git a/contracts/protocol/test/utils/asset_proxy_owner_wrapper.ts b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts
index df23658d8..b6040d8e3 100644
--- a/contracts/protocol/test/utils/asset_proxy_owner_wrapper.ts
+++ b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts
@@ -1,5 +1,6 @@
+import { artifacts as proxyArtifacts } from '@0x/contracts-asset-proxy';
+import { artifacts as erc20Artifacts } from '@0x/contracts-erc20';
import { LogDecoder } from '@0x/contracts-test-utils';
-import { artifacts as tokensArtifacts } from '@0x/contracts-tokens';
import { BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types';
@@ -15,7 +16,7 @@ export class AssetProxyOwnerWrapper {
constructor(assetproxyOwnerContract: AssetProxyOwnerContract, provider: Provider) {
this._assetProxyOwner = assetproxyOwnerContract;
this._web3Wrapper = new Web3Wrapper(provider);
- this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...tokensArtifacts });
+ this._logDecoder = new LogDecoder(this._web3Wrapper, { ...artifacts, ...erc20Artifacts, ...proxyArtifacts });
}
public async submitTransactionAsync(
destination: string,
diff --git a/contracts/multisig/test/utils/index.ts b/contracts/multisig/test/utils/index.ts
new file mode 100644
index 000000000..382fd92e5
--- /dev/null
+++ b/contracts/multisig/test/utils/index.ts
@@ -0,0 +1,2 @@
+export * from './asset_proxy_owner_wrapper';
+export * from './multi_sig_wrapper';
diff --git a/contracts/multisig/tsconfig.json b/contracts/multisig/tsconfig.json
index 6f381620e..ad1707e43 100644
--- a/contracts/multisig/tsconfig.json
+++ b/contracts/multisig/tsconfig.json
@@ -7,8 +7,10 @@
},
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
"files": [
+ "./generated-artifacts/AssetProxyOwner.json",
"./generated-artifacts/MultiSigWallet.json",
"./generated-artifacts/MultiSigWalletWithTimeLock.json",
+ "./generated-artifacts/TestAssetProxyOwner.json",
"./generated-artifacts/TestRejectEther.json"
],
"exclude": ["./deploy/solc/solc_bin"]
diff --git a/contracts/protocol/CHANGELOG.json b/contracts/protocol/CHANGELOG.json
deleted file mode 100644
index 96e2f8b70..000000000
--- a/contracts/protocol/CHANGELOG.json
+++ /dev/null
@@ -1,47 +0,0 @@
-[
- {
- "timestamp": 1547561734,
- "version": "2.2.2",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547225310,
- "version": "2.2.1",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "version": "2.2.0",
- "changes": [
- {
- "note": "Added LibAddressArray",
- "pr": 1383
- },
- {
- "note": "Add validation and comments to MultiAssetProxy",
- "pr": 1455
- },
- {
- "note": "Move OrderValidator to extensions",
- "pr": 1464
- }
- ],
- "timestamp": 1547040760
- },
- {
- "timestamp": 1544741676,
- "version": "2.1.59",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- }
-]
diff --git a/contracts/protocol/DEPLOYS.json b/contracts/protocol/DEPLOYS.json
deleted file mode 100644
index 5c24ae59c..000000000
--- a/contracts/protocol/DEPLOYS.json
+++ /dev/null
@@ -1,92 +0,0 @@
-[
- {
- "name": "MultiAssetProxy",
- "version": "1.0.0",
- "changes": [
- {
- "note": "Add MultiAssetProxy implementation",
- "pr": 1224
- }
- ]
- },
- {
- "name": "OrderValidator",
- "version": "1.0.0",
- "changes": [
- {
- "note": "remove `getApproved` check from ERC721 approval query",
- "pr": 1149
- }
- ]
- },
- {
- "name": "OrderValidator",
- "version": "1.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x9463e518dea6810309563c81d5266c1b1d149138",
- "3": "0x90431a90516ab49af23a0530e04e8c7836e7122f",
- "42": "0xb389da3d204b412df2f75c6afb3d0a7ce0bc283d"
- }
- }
- ]
- },
- {
- "name": "Exchange",
- "version": "2.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x4f833a24e1f95d70f028921e27040ca56e09ab0b",
- "3": "0x4530c0483a1633c7a1c97d2c53721caff2caaaaf",
- "42": "0x35dd2932454449b14cee11a94d3674a936d5d7b2"
- }
- }
- ]
- },
- {
- "name": "ERC20Proxy",
- "version": "1.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x2240dab907db71e64d3e0dba4800c83b5c502d4e",
- "3": "0xb1408f4c245a23c31b98d2c626777d4c0d766caa",
- "42": "0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e"
- }
- }
- ]
- },
- {
- "name": "ERC721Proxy",
- "version": "1.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x208e41fb445f1bb1b6780d58356e81405f3e6127",
- "3": "0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4",
- "42": "0x2a9127c745688a165106c11cd4d647d2220af821"
- }
- }
- ]
- },
- {
- "name": "AssetProxyOwner",
- "version": "1.0.0",
- "changes": [
- {
- "note": "protocol v2 deploy",
- "networks": {
- "1": "0x17992e4ffb22730138e4b62aaa6367fa9d3699a6",
- "3": "0xf5fa5b5fed2727a0e44ac67f6772e97977aa358b",
- "42": "0x2c824d2882baa668e0d5202b1e7f2922278703f8"
- }
- }
- ]
- }
-]
diff --git a/contracts/protocol/src/artifacts/index.ts b/contracts/protocol/src/artifacts/index.ts
deleted file mode 100644
index c5d12f10b..000000000
--- a/contracts/protocol/src/artifacts/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { ContractArtifact } from 'ethereum-types';
-
-import * as AssetProxyOwner from '../../generated-artifacts/AssetProxyOwner.json';
-import * as ERC20Proxy from '../../generated-artifacts/ERC20Proxy.json';
-import * as ERC721Proxy from '../../generated-artifacts/ERC721Proxy.json';
-import * as Exchange from '../../generated-artifacts/Exchange.json';
-import * as MixinAuthorizable from '../../generated-artifacts/MixinAuthorizable.json';
-import * as MultiAssetProxy from '../../generated-artifacts/MultiAssetProxy.json';
-import * as TestAssetProxyDispatcher from '../../generated-artifacts/TestAssetProxyDispatcher.json';
-import * as TestAssetProxyOwner from '../../generated-artifacts/TestAssetProxyOwner.json';
-import * as TestExchangeInternals from '../../generated-artifacts/TestExchangeInternals.json';
-import * as TestSignatureValidator from '../../generated-artifacts/TestSignatureValidator.json';
-import * as TestStaticCallReceiver from '../../generated-artifacts/TestStaticCallReceiver.json';
-
-export const artifacts = {
- AssetProxyOwner: AssetProxyOwner as ContractArtifact,
- ERC20Proxy: ERC20Proxy as ContractArtifact,
- ERC721Proxy: ERC721Proxy as ContractArtifact,
- Exchange: Exchange as ContractArtifact,
- MixinAuthorizable: MixinAuthorizable as ContractArtifact,
- MultiAssetProxy: MultiAssetProxy as ContractArtifact,
- TestAssetProxyDispatcher: TestAssetProxyDispatcher as ContractArtifact,
- TestAssetProxyOwner: TestAssetProxyOwner as ContractArtifact,
- TestExchangeInternals: TestExchangeInternals as ContractArtifact,
- TestSignatureValidator: TestSignatureValidator as ContractArtifact,
- TestStaticCallReceiver: TestStaticCallReceiver as ContractArtifact,
-};
diff --git a/contracts/protocol/src/wrappers/index.ts b/contracts/protocol/src/wrappers/index.ts
deleted file mode 100644
index 01b121054..000000000
--- a/contracts/protocol/src/wrappers/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export * from '../../generated-wrappers/asset_proxy_owner';
-export * from '../../generated-wrappers/erc20_proxy';
-export * from '../../generated-wrappers/erc721_proxy';
-export * from '../../generated-wrappers/exchange';
-export * from '../../generated-wrappers/mixin_authorizable';
-export * from '../../generated-wrappers/test_asset_proxy_dispatcher';
-export * from '../../generated-wrappers/test_asset_proxy_owner';
-export * from '../../generated-wrappers/test_exchange_internals';
-export * from '../../generated-wrappers/test_signature_validator';
-export * from '../../generated-wrappers/test_static_call_receiver';
diff --git a/contracts/protocol/tsconfig.json b/contracts/protocol/tsconfig.json
deleted file mode 100644
index db872fc32..000000000
--- a/contracts/protocol/tsconfig.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "extends": "../../tsconfig",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": ".",
- "resolveJsonModule": true
- },
- "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
- "files": [
- "./generated-artifacts/AssetProxyOwner.json",
- "./generated-artifacts/ERC20Proxy.json",
- "./generated-artifacts/ERC721Proxy.json",
- "./generated-artifacts/Exchange.json",
- "./generated-artifacts/MixinAuthorizable.json",
- "./generated-artifacts/MultiAssetProxy.json",
- "./generated-artifacts/TestAssetProxyDispatcher.json",
- "./generated-artifacts/TestAssetProxyOwner.json",
- "./generated-artifacts/TestExchangeInternals.json",
- "./generated-artifacts/TestSignatureValidator.json",
- "./generated-artifacts/TestStaticCallReceiver.json"
- ],
- "exclude": ["./deploy/solc/solc_bin"]
-}
diff --git a/contracts/test-utils/CHANGELOG.json b/contracts/test-utils/CHANGELOG.json
index 53fc1fc3a..ae1575e43 100644
--- a/contracts/test-utils/CHANGELOG.json
+++ b/contracts/test-utils/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "2.0.1",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"version": "2.0.0",
"changes": [
{
diff --git a/contracts/test-utils/CHANGELOG.md b/contracts/test-utils/CHANGELOG.md
index 63baf7faf..2ed0524a6 100644
--- a/contracts/test-utils/CHANGELOG.md
+++ b/contracts/test-utils/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v2.0.1 - _January 17, 2019_
+
+ * Dependencies updated
+
## v2.0.0 - _January 15, 2019_
* Renamed OrderStatus enum members to PascalCase to conform with tslint enum-naming rule (#1474)
diff --git a/contracts/test-utils/package.json b/contracts/test-utils/package.json
index 92fd6a7ca..262b8c7cd 100644
--- a/contracts/test-utils/package.json
+++ b/contracts/test-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-test-utils",
- "version": "2.0.0",
+ "version": "2.0.1",
"engines": {
"node": ">=6.12"
},
@@ -44,9 +44,9 @@
"@0x/dev-utils": "^1.0.24",
"@0x/order-utils": "^3.1.2",
"@0x/sol-compiler": "^2.0.2",
- "@0x/sol-coverage": "^1.0.2",
- "@0x/sol-profiler": "^1.0.2",
- "@0x/sol-trace": "^1.0.2",
+ "@0x/sol-coverage": "^1.0.3",
+ "@0x/sol-profiler": "^1.0.3",
+ "@0x/sol-trace": "^1.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
"@0x/types": "^1.5.2",
@@ -54,17 +54,15 @@
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
"@types/bn.js": "^4.11.0",
- "@types/ethereumjs-abi": "^0.6.0",
"@types/js-combinatorics": "^0.5.29",
"@types/lodash": "4.14.104",
"@types/node": "*",
"bn.js": "^4.11.8",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"ethereum-types": "^1.1.6",
- "ethereumjs-abi": "0.6.5",
"ethereumjs-util": "^5.1.1",
"ethers": "~4.0.4",
"js-combinatorics": "^0.5.3",
diff --git a/contracts/test-utils/src/order_factory.ts b/contracts/test-utils/src/order_factory.ts
index 2449d1a8a..b0f435ff2 100644
--- a/contracts/test-utils/src/order_factory.ts
+++ b/contracts/test-utils/src/order_factory.ts
@@ -21,7 +21,7 @@ export class OrderFactory {
const currentBlockTimestamp = await getLatestBlockTimestampAsync();
const order = ({
senderAddress: constants.NULL_ADDRESS,
- expirationTimeSeconds: new BigNumber(currentBlockTimestamp).add(tenMinutesInSeconds),
+ expirationTimeSeconds: new BigNumber(currentBlockTimestamp).plus(tenMinutesInSeconds),
salt: generatePseudoRandomSalt(),
takerAddress: constants.NULL_ADDRESS,
...this._defaultOrderParams,
diff --git a/contracts/test-utils/src/order_utils.ts b/contracts/test-utils/src/order_utils.ts
index 4f7a34011..fd336bb47 100644
--- a/contracts/test-utils/src/order_utils.ts
+++ b/contracts/test-utils/src/order_utils.ts
@@ -7,9 +7,9 @@ import { CancelOrder, MatchOrder } from './types';
export const orderUtils = {
getPartialAmountFloor(numerator: BigNumber, denominator: BigNumber, target: BigNumber): BigNumber {
const partialAmount = numerator
- .mul(target)
+ .multipliedBy(target)
.div(denominator)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
return partialAmount;
},
createFill: (signedOrder: SignedOrder, takerAssetFillAmount?: BigNumber) => {
diff --git a/contracts/tokens/CHANGELOG.json b/contracts/tokens/CHANGELOG.json
deleted file mode 100644
index ee239b318..000000000
--- a/contracts/tokens/CHANGELOG.json
+++ /dev/null
@@ -1,38 +0,0 @@
-[
- {
- "timestamp": 1547561734,
- "version": "1.0.5",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547225310,
- "version": "1.0.4",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1547040760,
- "version": "1.0.3",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- },
- {
- "timestamp": 1544741676,
- "version": "1.0.2",
- "changes": [
- {
- "note": "Dependencies updated"
- }
- ]
- }
-]
diff --git a/contracts/tokens/contracts/tokens/ZRXToken/ERC20Token_v1.sol b/contracts/tokens/contracts/tokens/ZRXToken/ERC20Token_v1.sol
deleted file mode 100644
index 4920c4aac..000000000
--- a/contracts/tokens/contracts/tokens/ZRXToken/ERC20Token_v1.sol
+++ /dev/null
@@ -1,44 +0,0 @@
-pragma solidity ^0.4.11;
-
-import { Token_v1 as Token } from "./Token_v1.sol";
-
-contract ERC20Token_v1 is Token {
-
- function transfer(address _to, uint _value) returns (bool) {
- //Default assumes totalSupply can't be over max (2^256 - 1).
- if (balances[msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
- balances[msg.sender] -= _value;
- balances[_to] += _value;
- Transfer(msg.sender, _to, _value);
- return true;
- } else { return false; }
- }
-
- function transferFrom(address _from, address _to, uint _value) returns (bool) {
- if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value >= balances[_to]) {
- balances[_to] += _value;
- balances[_from] -= _value;
- allowed[_from][msg.sender] -= _value;
- Transfer(_from, _to, _value);
- return true;
- } else { return false; }
- }
-
- function balanceOf(address _owner) constant returns (uint) {
- return balances[_owner];
- }
-
- function approve(address _spender, uint _value) returns (bool) {
- allowed[msg.sender][_spender] = _value;
- Approval(msg.sender, _spender, _value);
- return true;
- }
-
- function allowance(address _owner, address _spender) constant returns (uint) {
- return allowed[_owner][_spender];
- }
-
- mapping (address => uint) balances;
- mapping (address => mapping (address => uint)) allowed;
- uint public totalSupply;
-}
diff --git a/contracts/tokens/contracts/tokens/ZRXToken/Token_v1.sol b/contracts/tokens/contracts/tokens/ZRXToken/Token_v1.sol
deleted file mode 100644
index de619fb7e..000000000
--- a/contracts/tokens/contracts/tokens/ZRXToken/Token_v1.sol
+++ /dev/null
@@ -1,39 +0,0 @@
-pragma solidity ^0.4.11;
-
-contract Token_v1 {
-
- /// @return total amount of tokens
- function totalSupply() constant returns (uint supply) {}
-
- /// @param _owner The address from which the balance will be retrieved
- /// @return The balance
- function balanceOf(address _owner) constant returns (uint balance) {}
-
- /// @notice send `_value` token to `_to` from `msg.sender`
- /// @param _to The address of the recipient
- /// @param _value The amount of token to be transferred
- /// @return Whether the transfer was successful or not
- function transfer(address _to, uint _value) returns (bool success) {}
-
- /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
- /// @param _from The address of the sender
- /// @param _to The address of the recipient
- /// @param _value The amount of token to be transferred
- /// @return Whether the transfer was successful or not
- function transferFrom(address _from, address _to, uint _value) returns (bool success) {}
-
- /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
- /// @param _spender The address of the account able to transfer the tokens
- /// @param _value The amount of wei to be approved for transfer
- /// @return Whether the approval was successful or not
- function approve(address _spender, uint _value) returns (bool success) {}
-
- /// @param _owner The address of the account owning tokens
- /// @param _spender The address of the account able to transfer the tokens
- /// @return Amount of remaining tokens allowed to spent
- function allowance(address _owner, address _spender) constant returns (uint remaining) {}
-
- event Transfer(address indexed _from, address indexed _to, uint _value);
- event Approval(address indexed _owner, address indexed _spender, uint _value);
-}
-
diff --git a/contracts/tokens/contracts/tokens/ZRXToken/UnlimitedAllowanceToken_v1.sol b/contracts/tokens/contracts/tokens/ZRXToken/UnlimitedAllowanceToken_v1.sol
deleted file mode 100644
index bf1b0335a..000000000
--- a/contracts/tokens/contracts/tokens/ZRXToken/UnlimitedAllowanceToken_v1.sol
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-
- 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.4.11;
-
-import { ERC20Token_v1 as ERC20Token } from "./ERC20Token_v1.sol";
-
-contract UnlimitedAllowanceToken_v1 is ERC20Token {
-
- uint constant MAX_UINT = 2**256 - 1;
-
- /// @dev ERC20 transferFrom, modified such that an allowance of MAX_UINT represents an unlimited allowance.
- /// @param _from Address to transfer from.
- /// @param _to Address to transfer to.
- /// @param _value Amount to transfer.
- /// @return Success of transfer.
- function transferFrom(address _from, address _to, uint _value)
- public
- returns (bool)
- {
- uint allowance = allowed[_from][msg.sender];
- if (balances[_from] >= _value
- && allowance >= _value
- && balances[_to] + _value >= balances[_to]
- ) {
- balances[_to] += _value;
- balances[_from] -= _value;
- if (allowance < MAX_UINT) {
- allowed[_from][msg.sender] -= _value;
- }
- Transfer(_from, _to, _value);
- return true;
- } else {
- return false;
- }
- }
-}
diff --git a/contracts/tokens/contracts/tokens/ZRXToken/ZRXToken.sol b/contracts/tokens/contracts/tokens/ZRXToken/ZRXToken.sol
deleted file mode 100644
index 831e1822c..000000000
--- a/contracts/tokens/contracts/tokens/ZRXToken/ZRXToken.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-
- 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.4.11;
-
-// solhint-disable-next-line max-line-length
-import { UnlimitedAllowanceToken_v1 as UnlimitedAllowanceToken } from "./UnlimitedAllowanceToken_v1.sol";
-
-
-contract ZRXToken is
- UnlimitedAllowanceToken
-{
-
- // solhint-disable const-name-snakecase
- uint8 constant public decimals = 18;
- uint256 public totalSupply = 10**27; // 1 billion tokens, 18 decimal places
- string constant public name = "0x Protocol Token";
- string constant public symbol = "ZRX";
- // solhint-enableconst-name-snakecase
-
- function ZRXToken()
- public
- {
- balances[msg.sender] = totalSupply;
- }
-}
diff --git a/contracts/utils/CHANGELOG.json b/contracts/utils/CHANGELOG.json
index ee239b318..94434b803 100644
--- a/contracts/utils/CHANGELOG.json
+++ b/contracts/utils/CHANGELOG.json
@@ -1,5 +1,49 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Add LibAddressArray contract",
+ "pr": 1539
+ },
+ {
+ "note": "Do not nest contracts in redundant directories",
+ "pr": 1539
+ },
+ {
+ "note": "Rename utils directory to src",
+ "pr": 1539
+ }
+ ]
+ },
+ {
+ "version": "2.0.1",
+ "changes": [
+ {
+ "note": "Fix imports in `TestConstants` and `TestLibBytes` to be relative. This way they show up correctly in coverage reports",
+ "pr": 1535
+ }
+ ]
+ },
+ {
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.0.6",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.5",
"changes": [
diff --git a/contracts/utils/CHANGELOG.md b/contracts/utils/CHANGELOG.md
index 6d53a0b9c..59d0804da 100644
--- a/contracts/utils/CHANGELOG.md
+++ b/contracts/utils/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.6 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.5 - _January 15, 2019_
* Dependencies updated
diff --git a/contracts/utils/README.md b/contracts/utils/README.md
index 2f872ddb5..5c69971b6 100644
--- a/contracts/utils/README.md
+++ b/contracts/utils/README.md
@@ -1,15 +1,14 @@
## Contracts utils
-Smart contracts utils used in the 0x protocol.
+This package contains smart contract utilities and libraries that are used throughout the entire codebase of smart contracts. These contracts are all generic and may helpful to use outside of the context of 0x protocol.
-## Usage
+## Installation
-Contracts can be found in the [contracts](./contracts) directory. The contents of this directory are broken down into the following subdirectories:
+**Install**
-- [utils](./contracts/utils)
- - This directory contains libraries and utils.
-- [test](./contracts/test)
- - This directory contains mocks and other contracts that are used solely for testing contracts within the other directories.
+```bash
+npm install @0x/contracts-utils --save
+```
## Contributing
diff --git a/contracts/libs/contracts/libs/LibAddressArray.sol b/contracts/utils/contracts/src/LibAddressArray.sol
index 997ce85fa..892c486f1 100644
--- a/contracts/libs/contracts/libs/LibAddressArray.sol
+++ b/contracts/utils/contracts/src/LibAddressArray.sol
@@ -18,7 +18,7 @@
pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "./LibBytes.sol";
library LibAddressArray {
diff --git a/contracts/utils/contracts/utils/LibBytes/LibBytes.sol b/contracts/utils/contracts/src/LibBytes.sol
index 4ee6228d5..4ee6228d5 100644
--- a/contracts/utils/contracts/utils/LibBytes/LibBytes.sol
+++ b/contracts/utils/contracts/src/LibBytes.sol
diff --git a/contracts/utils/contracts/utils/Ownable/Ownable.sol b/contracts/utils/contracts/src/Ownable.sol
index aa74a72d2..f67f241a4 100644
--- a/contracts/utils/contracts/utils/Ownable/Ownable.sol
+++ b/contracts/utils/contracts/src/Ownable.sol
@@ -1,6 +1,6 @@
pragma solidity ^0.4.24;
-import "./IOwnable.sol";
+import "./interfaces/IOwnable.sol";
contract Ownable is
diff --git a/contracts/utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol b/contracts/utils/contracts/src/ReentrancyGuard.sol
index 1a02c88a4..1a02c88a4 100644
--- a/contracts/utils/contracts/utils/ReentrancyGuard/ReentrancyGuard.sol
+++ b/contracts/utils/contracts/src/ReentrancyGuard.sol
diff --git a/contracts/utils/contracts/utils/SafeMath/SafeMath.sol b/contracts/utils/contracts/src/SafeMath.sol
index d7a4a603e..d7a4a603e 100644
--- a/contracts/utils/contracts/utils/SafeMath/SafeMath.sol
+++ b/contracts/utils/contracts/src/SafeMath.sol
diff --git a/contracts/utils/contracts/utils/Ownable/IOwnable.sol b/contracts/utils/contracts/src/interfaces/IOwnable.sol
index c0cbfddfd..c0cbfddfd 100644
--- a/contracts/utils/contracts/utils/Ownable/IOwnable.sol
+++ b/contracts/utils/contracts/src/interfaces/IOwnable.sol
diff --git a/contracts/utils/contracts/test/TestConstants/TestConstants.sol b/contracts/utils/contracts/test/TestConstants.sol
index 3c852173b..bf98bafef 100644
--- a/contracts/utils/contracts/test/TestConstants/TestConstants.sol
+++ b/contracts/utils/contracts/test/TestConstants.sol
@@ -16,9 +16,9 @@
*/
-pragma solidity 0.4.24;
+pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "../src/LibBytes.sol";
// solhint-disable max-line-length
diff --git a/contracts/utils/contracts/test/TestLibBytes/TestLibBytes.sol b/contracts/utils/contracts/test/TestLibBytes.sol
index 444a3e717..cd6b1456d 100644
--- a/contracts/utils/contracts/test/TestLibBytes/TestLibBytes.sol
+++ b/contracts/utils/contracts/test/TestLibBytes.sol
@@ -16,9 +16,9 @@
*/
-pragma solidity 0.4.24;
+pragma solidity ^0.4.24;
-import "@0x/contracts-utils/contracts/utils/LibBytes/LibBytes.sol";
+import "../src/LibBytes.sol";
contract TestLibBytes {
diff --git a/contracts/utils/package.json b/contracts/utils/package.json
index a19519897..33d94cc33 100644
--- a/contracts/utils/package.json
+++ b/contracts/utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-utils",
- "version": "1.0.5",
+ "version": "3.0.0",
"engines": {
"node": ">=6.12"
},
@@ -45,38 +45,33 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/utils/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
- "@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
- "@types/bn.js": "^4.11.0",
"@types/lodash": "4.14.104",
"@types/node": "*",
- "@types/yargs": "^10.0.0",
- "bn.js": "^4.11.8",
+ "@types/bn.js": "^4.11.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ethereumjs-abi": "0.6.5",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"solhint": "^1.4.1",
"tslint": "5.11.0",
- "typescript": "3.0.1",
- "yargs": "^10.0.3"
+ "typescript": "3.0.1"
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
- "@0x/contracts-multisig": "^1.0.5",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
"@0x/web3-wrapper": "^3.2.4",
+ "bn.js": "^4.11.8",
"ethereum-types": "^1.1.6",
"ethereumjs-util": "^5.1.1",
"lodash": "^4.17.5"
diff --git a/contracts/utils/test/lib_bytes.ts b/contracts/utils/test/lib_bytes.ts
index 6fb859c67..daad28729 100644
--- a/contracts/utils/test/lib_bytes.ts
+++ b/contracts/utils/test/lib_bytes.ts
@@ -16,8 +16,7 @@ import * as chai from 'chai';
import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash';
-import { TestLibBytesContract } from '../generated-wrappers/test_lib_bytes';
-import { artifacts } from '../src';
+import { artifacts, TestLibBytesContract } from '../src';
chaiSetup.configure();
const expect = chai.expect;
diff --git a/contracts/utils/test/libs.ts b/contracts/utils/test/libs.ts
index 81596b2e4..77dc6e2ba 100644
--- a/contracts/utils/test/libs.ts
+++ b/contracts/utils/test/libs.ts
@@ -2,8 +2,7 @@ import { chaiSetup, provider, txDefaults, web3Wrapper } from '@0x/contracts-test
import { BlockchainLifecycle } from '@0x/dev-utils';
import * as chai from 'chai';
-import { TestConstantsContract } from '../generated-wrappers/test_constants';
-import { artifacts } from '../src';
+import { artifacts, TestConstantsContract } from '../src';
chaiSetup.configure();
const expect = chai.expect;
diff --git a/package.json b/package.json
index 27675ddd3..62b4c1c36 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"build": "wsrun build $PKG --fast-exit -r --stages --exclude-missing",
"build:no_website": "wsrun build $PKG --fast-exit -r --stages --exclude @0x/website --exclude-missing",
"build:ci:no_website": "wsrun build:ci $PKG --fast-exit -r --stages --exclude @0x/website --exclude-missing",
+ "build:contracts": "wsrun build -p ${npm_package_config_contractsPackages} -c --fast-exit -r --stages --exclude-missing",
"build:monorepo_scripts": "PKG=@0x/monorepo-scripts yarn build",
"build:ts": "tsc -b",
"watch:ts": "tsc -b -w",
@@ -34,12 +35,14 @@
"rebuild": "run-s clean build",
"rebuild:no_website": "run-s clean build:no_website",
"test": "wsrun test $PKG --fast-exit --serial --exclude-missing",
+ "test:contracts": "wsrun test -p ${npm_package_config_contractsPackages} -c --fast-exit --serial --exclude-missing",
"generate_doc": "node ./packages/monorepo-scripts/lib/doc_generate_and_upload.js",
"test:generate_docs:circleci": "for i in ${npm_package_config_packagesWithDocPages}; do yarn generate_doc --package $i --shouldUpload false --isStaging true || break -1; done;",
"bundlewatch": "bundlewatch",
"lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing"
},
"config": {
+ "contractsPackages": "@0x/contracts-asset-proxy @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-exchange @0x/contracts-exchange-forwarder @0x/contracts-exchange-libs @0x/contracts-extensions @0x/contracts-multisig @0x/contracts-test-utils @0x/contracts-utils",
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic",
"packagesWithDocPages": "0x.js connect json-schemas subproviders web3-wrapper contract-wrappers order-utils order-watcher sol-compiler sol-coverage sol-profiler sol-trace ethereum-types asset-buyer migrations"
},
diff --git a/packages/0x.js/CHANGELOG.json b/packages/0x.js/CHANGELOG.json
index a849a35a2..20778f8bb 100644
--- a/packages/0x.js/CHANGELOG.json
+++ b/packages/0x.js/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "3.0.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.0.2",
"changes": [
diff --git a/packages/0x.js/CHANGELOG.md b/packages/0x.js/CHANGELOG.md
index c389c0e00..b0279f097 100644
--- a/packages/0x.js/CHANGELOG.md
+++ b/packages/0x.js/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v3.0.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v3.0.2 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json
index ca990c0a7..64054d288 100644
--- a/packages/0x.js/package.json
+++ b/packages/0x.js/package.json
@@ -1,6 +1,6 @@
{
"name": "0x.js",
- "version": "3.0.2",
+ "version": "3.0.3",
"engines": {
"node": ">=6.12"
},
@@ -54,7 +54,7 @@
"awesome-typescript-loader": "^5.2.1",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"copyfiles": "^2.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
@@ -74,9 +74,9 @@
"dependencies": {
"@0x/assert": "^1.0.23",
"@0x/base-contract": "^3.0.13",
- "@0x/contract-wrappers": "^5.0.0",
+ "@0x/contract-wrappers": "^5.0.1",
"@0x/order-utils": "^3.1.2",
- "@0x/order-watcher": "^2.4.2",
+ "@0x/order-watcher": "^2.4.3",
"@0x/subproviders": "^2.1.11",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
diff --git a/packages/abi-gen-templates/CHANGELOG.json b/packages/abi-gen-templates/CHANGELOG.json
index b825c4f1f..7d444d0ca 100644
--- a/packages/abi-gen-templates/CHANGELOG.json
+++ b/packages/abi-gen-templates/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.2",
"changes": [
diff --git a/packages/abi-gen-wrappers/CHANGELOG.json b/packages/abi-gen-wrappers/CHANGELOG.json
index 381b37cda..c604302b5 100644
--- a/packages/abi-gen-wrappers/CHANGELOG.json
+++ b/packages/abi-gen-wrappers/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"version": "2.2.0",
"changes": [
{
diff --git a/packages/abi-gen/CHANGELOG.json b/packages/abi-gen/CHANGELOG.json
index ab516e4c6..173617b65 100644
--- a/packages/abi-gen/CHANGELOG.json
+++ b/packages/abi-gen/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.22",
"changes": [
diff --git a/packages/assert/CHANGELOG.json b/packages/assert/CHANGELOG.json
index 0210f9400..278b7dfa1 100644
--- a/packages/assert/CHANGELOG.json
+++ b/packages/assert/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.23",
"changes": [
diff --git a/packages/assert/src/index.ts b/packages/assert/src/index.ts
index 2d28d51e1..741bd78e1 100644
--- a/packages/assert/src/index.ts
+++ b/packages/assert/src/index.ts
@@ -7,12 +7,12 @@ const HEX_REGEX = /^0x[0-9A-F]*$/i;
export const assert = {
isBigNumber(variableName: string, value: BigNumber): void {
- const isBigNumber = _.isObject(value) && (value as any).isBigNumber;
+ const isBigNumber = BigNumber.isBigNumber(value);
assert.assert(isBigNumber, assert.typeAssertionMessage(variableName, 'BigNumber', value));
},
isValidBaseUnitAmount(variableName: string, value: BigNumber): void {
assert.isBigNumber(variableName, value);
- const isNegative = value.lessThan(0);
+ const isNegative = value.isLessThan(0);
assert.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`);
const hasDecimals = value.decimalPlaces() !== 0;
assert.assert(
diff --git a/packages/asset-buyer/CHANGELOG.json b/packages/asset-buyer/CHANGELOG.json
index 0b717a887..2de603de0 100644
--- a/packages/asset-buyer/CHANGELOG.json
+++ b/packages/asset-buyer/CHANGELOG.json
@@ -1,5 +1,32 @@
[
{
+ "version": "5.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "version": "4.1.0",
+ "changes": [
+ {
+ "note": "Adds new public method getLiquidityForAssetDataAsync, and exposes getOrdersAndFillableAmountsAsync as public method",
+ "pr": 1512
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "4.0.2",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "4.0.1",
"changes": [
diff --git a/packages/asset-buyer/CHANGELOG.md b/packages/asset-buyer/CHANGELOG.md
index 85c02479a..f2a3d2236 100644
--- a/packages/asset-buyer/CHANGELOG.md
+++ b/packages/asset-buyer/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v4.0.2 - _January 17, 2019_
+
+ * Dependencies updated
+
## v4.0.1 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/asset-buyer/package.json b/packages/asset-buyer/package.json
index 3fca31664..0f79ac06a 100644
--- a/packages/asset-buyer/package.json
+++ b/packages/asset-buyer/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/asset-buyer",
- "version": "4.0.1",
+ "version": "4.0.2",
"engines": {
"node": ">=6.12"
},
@@ -38,7 +38,7 @@
"dependencies": {
"@0x/assert": "^1.0.23",
"@0x/connect": "^3.0.13",
- "@0x/contract-wrappers": "^5.0.0",
+ "@0x/contract-wrappers": "^5.0.1",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
"@0x/subproviders": "^2.1.11",
@@ -56,7 +56,7 @@
"@types/node": "*",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
@@ -65,6 +65,7 @@
"shx": "^0.2.2",
"tslint": "5.11.0",
"typedoc": "0.13.0",
+ "typemoq": "^2.1.0",
"typescript": "3.0.1"
},
"publishConfig": {
diff --git a/packages/asset-buyer/src/asset_buyer.ts b/packages/asset-buyer/src/asset_buyer.ts
index 934410c55..b22b1a122 100644
--- a/packages/asset-buyer/src/asset_buyer.ts
+++ b/packages/asset-buyer/src/asset_buyer.ts
@@ -16,14 +16,16 @@ import {
BuyQuote,
BuyQuoteExecutionOpts,
BuyQuoteRequestOpts,
+ LiquidityForAssetData,
+ LiquidityRequestOpts,
OrderProvider,
- OrderProviderResponse,
OrdersAndFillableAmounts,
} from './types';
import { assert } from './utils/assert';
import { assetDataUtils } from './utils/asset_data_utils';
import { buyQuoteCalculator } from './utils/buy_quote_calculator';
+import { calculateLiquidity } from './utils/calculate_liquidity';
import { orderProviderResponseProcessor } from './utils/order_provider_response_processor';
interface OrdersEntry {
@@ -138,10 +140,10 @@ export class AssetBuyer {
// get the relevant orders for the makerAsset and fees
// if the requested assetData is ZRX, don't get the fee info
const [ordersAndFillableAmounts, feeOrdersAndFillableAmounts] = await Promise.all([
- this._getOrdersAndFillableAmountsAsync(assetData, shouldForceOrderRefresh),
+ this.getOrdersAndFillableAmountsAsync(assetData, shouldForceOrderRefresh),
isMakerAssetZrxToken
? Promise.resolve(constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS)
- : this._getOrdersAndFillableAmountsAsync(zrxTokenAssetData, shouldForceOrderRefresh),
+ : this.getOrdersAndFillableAmountsAsync(zrxTokenAssetData, shouldForceOrderRefresh),
shouldForceOrderRefresh,
]);
if (ordersAndFillableAmounts.orders.length === 0) {
@@ -178,6 +180,41 @@ export class AssetBuyer {
return buyQuote;
}
/**
+ * Returns information about available liquidity for an asset
+ * Does not factor in slippage or fees
+ * @param assetData The assetData of the desired asset to buy (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
+ * @param options Options for the request. See type definition for more information.
+ *
+ * @return An object that conforms to LiquidityForAssetData that satisfies the request. See type definition for more information.
+ */
+ public async getLiquidityForAssetDataAsync(
+ assetData: string,
+ options: Partial<LiquidityRequestOpts> = {},
+ ): Promise<LiquidityForAssetData> {
+ const shouldForceOrderRefresh =
+ options.shouldForceOrderRefresh !== undefined ? options.shouldForceOrderRefresh : false;
+ assert.isString('assetData', assetData);
+ assetDataUtils.decodeAssetDataOrThrow(assetData);
+ assert.isBoolean('options.shouldForceOrderRefresh', shouldForceOrderRefresh);
+
+ const assetPairs = await this.orderProvider.getAvailableMakerAssetDatasAsync(assetData);
+ const etherTokenAssetData = this._getEtherTokenAssetDataOrThrow();
+ if (!assetPairs.includes(etherTokenAssetData)) {
+ return {
+ tokensAvailableInBaseUnits: new BigNumber(0),
+ ethValueAvailableInWei: new BigNumber(0),
+ };
+ }
+
+ const ordersAndFillableAmounts = await this.getOrdersAndFillableAmountsAsync(
+ assetData,
+ shouldForceOrderRefresh,
+ );
+
+ return calculateLiquidity(ordersAndFillableAmounts);
+ }
+
+ /**
* Given a BuyQuote and desired rate, attempt to execute the buy.
* @param buyQuote An object that conforms to BuyQuote. See type definition for more information.
* @param options Options for the execution of the BuyQuote. See type definition for more information.
@@ -260,8 +297,10 @@ export class AssetBuyer {
}
/**
* Grab orders from the map, if there is a miss or it is time to refresh, fetch and process the orders
+ * @param assetData The assetData of the desired asset to buy (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md).
+ * @param shouldForceOrderRefresh If set to true, new orders and state will be fetched instead of waiting for the next orderRefreshIntervalMs.
*/
- private async _getOrdersAndFillableAmountsAsync(
+ public async getOrdersAndFillableAmountsAsync(
assetData: string,
shouldForceOrderRefresh: boolean,
): Promise<OrdersAndFillableAmounts> {
diff --git a/packages/asset-buyer/src/index.ts b/packages/asset-buyer/src/index.ts
index a42d7e272..f69cfad69 100644
--- a/packages/asset-buyer/src/index.ts
+++ b/packages/asset-buyer/src/index.ts
@@ -19,6 +19,9 @@ export {
BuyQuoteExecutionOpts,
BuyQuoteInfo,
BuyQuoteRequestOpts,
+ LiquidityForAssetData,
+ LiquidityRequestOpts,
+ OrdersAndFillableAmounts,
OrderProvider,
OrderProviderRequest,
OrderProviderResponse,
diff --git a/packages/asset-buyer/src/types.ts b/packages/asset-buyer/src/types.ts
index d5d6be695..46a2338ce 100644
--- a/packages/asset-buyer/src/types.ts
+++ b/packages/asset-buyer/src/types.ts
@@ -75,6 +75,13 @@ export interface BuyQuoteRequestOpts {
slippagePercentage: number;
}
+/*
+ * Options for checking liquidity
+ *
+ * shouldForceOrderRefresh: If set to true, new orders and state will be fetched instead of waiting for the next orderRefreshIntervalMs. Defaults to false.
+ */
+export type LiquidityRequestOpts = Pick<BuyQuoteRequestOpts, 'shouldForceOrderRefresh'>;
+
/**
* ethAmount: The desired amount of eth to spend. Defaults to buyQuote.worstCaseQuoteInfo.totalEthAmount.
* takerAddress: The address to perform the buy. Defaults to the first available address from the provider.
@@ -117,7 +124,19 @@ export enum AssetBuyerError {
TransactionValueTooLow = 'TRANSACTION_VALUE_TOO_LOW',
}
+/**
+ * orders: An array of signed orders
+ * remainingFillableMakerAssetAmounts: A list of fillable amounts for the signed orders. The index of an item in the array associates the amount with the corresponding order.
+ */
export interface OrdersAndFillableAmounts {
orders: SignedOrder[];
remainingFillableMakerAssetAmounts: BigNumber[];
}
+
+/**
+ * Represents available liquidity for a given assetData
+ */
+export interface LiquidityForAssetData {
+ tokensAvailableInBaseUnits: BigNumber;
+ ethValueAvailableInWei: BigNumber;
+}
diff --git a/packages/asset-buyer/src/utils/buy_quote_calculator.ts b/packages/asset-buyer/src/utils/buy_quote_calculator.ts
index fcded6ab1..125841094 100644
--- a/packages/asset-buyer/src/utils/buy_quote_calculator.ts
+++ b/packages/asset-buyer/src/utils/buy_quote_calculator.ts
@@ -22,7 +22,7 @@ export const buyQuoteCalculator = {
const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts;
const feeOrders = feeOrdersAndFillableAmounts.orders;
const remainingFillableFeeAmounts = feeOrdersAndFillableAmounts.remainingFillableMakerAssetAmounts;
- const slippageBufferAmount = assetBuyAmount.mul(slippagePercentage).round();
+ const slippageBufferAmount = assetBuyAmount.multipliedBy(slippagePercentage).integerValue();
// find the orders that cover the desired assetBuyAmount (with slippage)
const {
resultOrders,
@@ -43,7 +43,9 @@ export const buyQuoteCalculator = {
const multiplierNeededWithSlippage = new BigNumber(1).plus(slippagePercentage);
// Given amountAvailableToFillConsideringSlippage * multiplierNeededWithSlippage = amountAbleToFill
// We divide amountUnableToFill by multiplierNeededWithSlippage to determine amountAvailableToFillConsideringSlippage
- const amountAvailableToFillConsideringSlippage = amountAbleToFill.div(multiplierNeededWithSlippage).floor();
+ const amountAvailableToFillConsideringSlippage = amountAbleToFill
+ .div(multiplierNeededWithSlippage)
+ .integerValue(BigNumber.ROUND_FLOOR);
throw new InsufficientAssetLiquidityError(amountAvailableToFillConsideringSlippage);
}
@@ -131,7 +133,7 @@ function calculateQuoteInfo(
zrxEthAmount = findEthAmountNeededToBuyZrx(feeOrdersAndFillableAmounts, zrxAmountToBuyAsset);
}
// eth amount needed to buy the affiliate fee
- const affiliateFeeEthAmount = assetEthAmount.mul(feePercentage).ceil();
+ const affiliateFeeEthAmount = assetEthAmount.multipliedBy(feePercentage).integerValue(BigNumber.ROUND_CEIL);
// eth amount needed for fees is the sum of affiliate fee and zrx fee
const feeEthAmount = affiliateFeeEthAmount.plus(zrxEthAmount);
// eth amount needed in total is the sum of the amount needed for the asset and the amount needed for fees
@@ -168,9 +170,9 @@ function findEthAmountNeededToBuyZrx(
order,
makerFillAmount,
);
- const extraFeeAmount = remainingFillableMakerAssetAmount.greaterThanOrEqualTo(adjustedMakerFillAmount)
+ const extraFeeAmount = remainingFillableMakerAssetAmount.isGreaterThanOrEqualTo(adjustedMakerFillAmount)
? constants.ZERO_AMOUNT
- : adjustedMakerFillAmount.sub(makerFillAmount);
+ : adjustedMakerFillAmount.minus(makerFillAmount);
return {
totalEthAmount: totalEthAmount.plus(takerFillAmount),
remainingZrxBuyAmount: BigNumber.max(
diff --git a/packages/asset-buyer/src/utils/calculate_liquidity.ts b/packages/asset-buyer/src/utils/calculate_liquidity.ts
new file mode 100644
index 000000000..a8d165b4b
--- /dev/null
+++ b/packages/asset-buyer/src/utils/calculate_liquidity.ts
@@ -0,0 +1,34 @@
+import { BigNumber } from '@0x/utils';
+
+import { LiquidityForAssetData, OrdersAndFillableAmounts } from '../types';
+
+import { orderUtils } from './order_utils';
+
+export const calculateLiquidity = (ordersAndFillableAmounts: OrdersAndFillableAmounts): LiquidityForAssetData => {
+ const { orders, remainingFillableMakerAssetAmounts } = ordersAndFillableAmounts;
+ const liquidityInBigNumbers = orders.reduce(
+ (acc, order, curIndex) => {
+ const availableMakerAssetAmount = remainingFillableMakerAssetAmounts[curIndex];
+ if (availableMakerAssetAmount === undefined) {
+ throw new Error(`No corresponding fillableMakerAssetAmounts at index ${curIndex}`);
+ }
+
+ const tokensAvailableForCurrentOrder = availableMakerAssetAmount;
+ const ethValueAvailableForCurrentOrder = orderUtils.getTakerFillAmount(order, availableMakerAssetAmount);
+ return {
+ tokensAvailableInBaseUnits: acc.tokensAvailableInBaseUnits.plus(tokensAvailableForCurrentOrder),
+ ethValueAvailableInWei: acc.ethValueAvailableInWei.plus(ethValueAvailableForCurrentOrder),
+ };
+ },
+ {
+ tokensAvailableInBaseUnits: new BigNumber(0),
+ ethValueAvailableInWei: new BigNumber(0),
+ },
+ );
+
+ // Turn into regular numbers
+ return {
+ tokensAvailableInBaseUnits: liquidityInBigNumbers.tokensAvailableInBaseUnits,
+ ethValueAvailableInWei: liquidityInBigNumbers.ethValueAvailableInWei,
+ };
+};
diff --git a/packages/asset-buyer/src/utils/order_provider_response_processor.ts b/packages/asset-buyer/src/utils/order_provider_response_processor.ts
index 4244d196c..f08cd6150 100644
--- a/packages/asset-buyer/src/utils/order_provider_response_processor.ts
+++ b/packages/asset-buyer/src/utils/order_provider_response_processor.ts
@@ -109,11 +109,8 @@ function getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain(
return accOrders;
}
// if the order IS fillable, add the order and calculate the remaining fillable amount
- const transferrableAssetAmount = BigNumber.min([traderInfo.makerAllowance, traderInfo.makerBalance]);
- const transferrableFeeAssetAmount = BigNumber.min([
- traderInfo.makerZrxAllowance,
- traderInfo.makerZrxBalance,
- ]);
+ const transferrableAssetAmount = BigNumber.min(traderInfo.makerAllowance, traderInfo.makerBalance);
+ const transferrableFeeAssetAmount = BigNumber.min(traderInfo.makerZrxAllowance, traderInfo.makerZrxBalance);
const remainingTakerAssetAmount = order.takerAssetAmount.minus(orderInfo.orderTakerAssetFilledAmount);
const remainingMakerAssetAmount = orderUtils.getRemainingMakerAmount(order, remainingTakerAssetAmount);
const remainingFillableCalculator = new RemainingFillableCalculator(
diff --git a/packages/asset-buyer/src/utils/order_utils.ts b/packages/asset-buyer/src/utils/order_utils.ts
index 1cc2cf95f..3ea3cafd3 100644
--- a/packages/asset-buyer/src/utils/order_utils.ts
+++ b/packages/asset-buyer/src/utils/order_utils.ts
@@ -9,8 +9,8 @@ export const orderUtils = {
},
willOrderExpire(order: SignedOrder, secondsFromNow: number): boolean {
const millisecondsInSecond = 1000;
- const currentUnixTimestampSec = new BigNumber(Date.now() / millisecondsInSecond).round();
- return order.expirationTimeSeconds.lessThan(currentUnixTimestampSec.plus(secondsFromNow));
+ const currentUnixTimestampSec = new BigNumber(Date.now() / millisecondsInSecond).integerValue();
+ return order.expirationTimeSeconds.isLessThan(currentUnixTimestampSec.plus(secondsFromNow));
},
isOpenOrder(order: SignedOrder): boolean {
return order.takerAddress === constants.NULL_ADDRESS;
@@ -20,43 +20,43 @@ export const orderUtils = {
const remainingMakerAmount = remainingTakerAmount
.times(order.makerAssetAmount)
.div(order.takerAssetAmount)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
return remainingMakerAmount;
},
// given a desired amount of makerAsset, calculate how much takerAsset is required to fill that amount
getTakerFillAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber {
// Round up because exchange rate favors Maker
const takerFillAmount = makerFillAmount
- .mul(order.takerAssetAmount)
+ .multipliedBy(order.takerAssetAmount)
.div(order.makerAssetAmount)
- .ceil();
+ .integerValue(BigNumber.ROUND_CEIL);
return takerFillAmount;
},
// given a desired amount of takerAsset to fill, calculate how much fee is required by the taker to fill that amount
getTakerFeeAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber {
// Round down because Taker fee rate favors Taker
const takerFeeAmount = takerFillAmount
- .mul(order.takerFee)
+ .multipliedBy(order.takerFee)
.div(order.takerAssetAmount)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
return takerFeeAmount;
},
// given a desired amount of takerAsset to fill, calculate how much makerAsset will be filled
getMakerFillAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber {
// Round down because exchange rate favors Maker
const makerFillAmount = takerFillAmount
- .mul(order.makerAssetAmount)
+ .multipliedBy(order.makerAssetAmount)
.div(order.takerAssetAmount)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
return makerFillAmount;
},
// given a desired amount of makerAsset, calculate how much fee is required by the maker to fill that amount
getMakerFeeAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber {
// Round down because Maker fee rate favors Maker
const makerFeeAmount = makerFillAmount
- .mul(order.makerFee)
+ .multipliedBy(order.makerFee)
.div(order.makerAssetAmount)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
return makerFeeAmount;
},
// given a desired amount of ZRX from a fee order, calculate how much takerAsset is required to fill that amount
@@ -64,9 +64,9 @@ export const orderUtils = {
getTakerFillAmountForFeeOrder(order: SignedOrder, makerFillAmount: BigNumber): [BigNumber, BigNumber] {
// For each unit of TakerAsset we buy (MakerAsset - TakerFee)
const adjustedTakerFillAmount = makerFillAmount
- .mul(order.takerAssetAmount)
- .div(order.makerAssetAmount.sub(order.takerFee))
- .ceil();
+ .multipliedBy(order.takerAssetAmount)
+ .div(order.makerAssetAmount.minus(order.takerFee))
+ .integerValue(BigNumber.ROUND_CEIL);
// The amount that we buy will be greater than makerFillAmount, since we buy some amount for fees.
const adjustedMakerFillAmount = orderUtils.getMakerFillAmount(order, adjustedTakerFillAmount);
return [adjustedTakerFillAmount, adjustedMakerFillAmount];
diff --git a/packages/asset-buyer/test/asset_buyer_test.ts b/packages/asset-buyer/test/asset_buyer_test.ts
new file mode 100644
index 000000000..f117b4d7a
--- /dev/null
+++ b/packages/asset-buyer/test/asset_buyer_test.ts
@@ -0,0 +1,212 @@
+import { orderFactory } from '@0x/order-utils/lib/src/order_factory';
+import { Web3ProviderEngine } from '@0x/subproviders';
+import { SignedOrder } from '@0x/types';
+import { BigNumber } from '@0x/utils';
+import { Web3Wrapper } from '@0x/web3-wrapper';
+import * as chai from 'chai';
+import 'mocha';
+import * as TypeMoq from 'typemoq';
+
+import { AssetBuyer } from '../src';
+import { constants } from '../src/constants';
+import { LiquidityForAssetData, OrderProvider, OrdersAndFillableAmounts } from '../src/types';
+
+import { chaiSetup } from './utils/chai_setup';
+import {
+ mockAvailableAssetDatas,
+ mockedAssetBuyerWithOrdersAndFillableAmounts,
+ orderProviderMock,
+} from './utils/mocks';
+
+chaiSetup.configure();
+const expect = chai.expect;
+
+const FAKE_SRA_URL = 'https://fakeurl.com';
+const FAKE_ASSET_DATA = '0xf47261b00000000000000000000000001dc4c1cefef38a777b15aa20260a54e584b16c48';
+const TOKEN_DECIMALS = 18;
+const DAI_ASSET_DATA = '0xf47261b000000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359"';
+const WETH_ASSET_DATA = '0xf47261b0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2';
+const WETH_DECIMALS = constants.ETHER_TOKEN_DECIMALS;
+
+const baseUnitAmount = (unitAmount: number, decimals = TOKEN_DECIMALS): BigNumber => {
+ return Web3Wrapper.toBaseUnitAmount(new BigNumber(unitAmount), decimals);
+};
+
+const expectLiquidityResult = async (
+ web3Provider: Web3ProviderEngine,
+ orderProvider: OrderProvider,
+ ordersAndFillableAmounts: OrdersAndFillableAmounts,
+ expectedLiquidityResult: LiquidityForAssetData,
+) => {
+ const mockedAssetBuyer = mockedAssetBuyerWithOrdersAndFillableAmounts(
+ web3Provider,
+ orderProvider,
+ FAKE_ASSET_DATA,
+ ordersAndFillableAmounts,
+ );
+ const liquidityResult = await mockedAssetBuyer.object.getLiquidityForAssetDataAsync(FAKE_ASSET_DATA);
+ expect(liquidityResult).to.deep.equal(expectedLiquidityResult);
+};
+
+// tslint:disable:custom-no-magic-numbers
+describe('AssetBuyer', () => {
+ describe('getLiquidityForAssetDataAsync', () => {
+ const mockWeb3Provider = TypeMoq.Mock.ofType(Web3ProviderEngine);
+ const mockOrderProvider = orderProviderMock();
+
+ beforeEach(() => {
+ mockWeb3Provider.reset();
+ mockOrderProvider.reset();
+ });
+
+ afterEach(() => {
+ mockWeb3Provider.verifyAll();
+ mockOrderProvider.verifyAll();
+ });
+
+ describe('validation', () => {
+ it('should ensure assetData is a string', async () => {
+ const assetBuyer = AssetBuyer.getAssetBuyerForStandardRelayerAPIUrl(
+ mockWeb3Provider.object,
+ FAKE_SRA_URL,
+ );
+
+ expect(assetBuyer.getLiquidityForAssetDataAsync(false as any)).to.be.rejectedWith(
+ 'Expected assetData to be of type string, encountered: false',
+ );
+ });
+ });
+
+ describe('asset pair not supported', () => {
+ it('should return 0s when no asset pair not supported', async () => {
+ mockAvailableAssetDatas(mockOrderProvider, FAKE_ASSET_DATA, []);
+
+ const assetBuyer = new AssetBuyer(mockWeb3Provider.object, mockOrderProvider.object);
+ const liquidityResult = await assetBuyer.getLiquidityForAssetDataAsync(FAKE_ASSET_DATA);
+ expect(liquidityResult).to.deep.equal({
+ tokensAvailableInBaseUnits: new BigNumber(0),
+ ethValueAvailableInWei: new BigNumber(0),
+ });
+ });
+ it('should return 0s when only other asset pair supported', async () => {
+ mockAvailableAssetDatas(mockOrderProvider, FAKE_ASSET_DATA, [DAI_ASSET_DATA]);
+
+ const assetBuyer = new AssetBuyer(mockWeb3Provider.object, mockOrderProvider.object);
+ const liquidityResult = await assetBuyer.getLiquidityForAssetDataAsync(FAKE_ASSET_DATA);
+ expect(liquidityResult).to.deep.equal({
+ tokensAvailableInBaseUnits: new BigNumber(0),
+ ethValueAvailableInWei: new BigNumber(0),
+ });
+ });
+ });
+
+ describe('assetData is supported', () => {
+ // orders
+ const sellTwoTokensFor1Weth: SignedOrder = orderFactory.createSignedOrderFromPartial({
+ makerAssetAmount: baseUnitAmount(2),
+ takerAssetAmount: baseUnitAmount(1, WETH_DECIMALS),
+ });
+ const sellTenTokensFor10Weth: SignedOrder = orderFactory.createSignedOrderFromPartial({
+ makerAssetAmount: baseUnitAmount(10),
+ takerAssetAmount: baseUnitAmount(10, WETH_DECIMALS),
+ });
+
+ beforeEach(() => {
+ mockAvailableAssetDatas(mockOrderProvider, FAKE_ASSET_DATA, [WETH_ASSET_DATA]);
+ });
+
+ it('should return 0s when no orders available', async () => {
+ const ordersAndFillableAmounts: OrdersAndFillableAmounts = {
+ orders: [],
+ remainingFillableMakerAssetAmounts: [],
+ };
+ const expectedResult = {
+ tokensAvailableInBaseUnits: new BigNumber(0),
+ ethValueAvailableInWei: new BigNumber(0),
+ };
+ await expectLiquidityResult(
+ mockWeb3Provider.object,
+ mockOrderProvider.object,
+ ordersAndFillableAmounts,
+ expectedResult,
+ );
+ });
+
+ it('should return correct computed value when orders provided with full fillableAmounts', async () => {
+ const orders: SignedOrder[] = [sellTwoTokensFor1Weth, sellTenTokensFor10Weth];
+ const ordersAndFillableAmounts = {
+ orders: [sellTwoTokensFor1Weth, sellTenTokensFor10Weth],
+ remainingFillableMakerAssetAmounts: orders.map(o => o.makerAssetAmount),
+ };
+
+ const expectedTokensAvailable = orders[0].makerAssetAmount.plus(orders[1].makerAssetAmount);
+ const expectedEthValueAvailable = orders[0].takerAssetAmount.plus(orders[1].takerAssetAmount);
+ const expectedResult = {
+ tokensAvailableInBaseUnits: expectedTokensAvailable,
+ ethValueAvailableInWei: expectedEthValueAvailable,
+ };
+
+ await expectLiquidityResult(
+ mockWeb3Provider.object,
+ mockOrderProvider.object,
+ ordersAndFillableAmounts,
+ expectedResult,
+ );
+ });
+
+ it('should return correct computed value with one partial fillableAmounts', async () => {
+ const ordersAndFillableAmounts = {
+ orders: [sellTwoTokensFor1Weth],
+ remainingFillableMakerAssetAmounts: [baseUnitAmount(1)],
+ };
+ const expectedResult = {
+ tokensAvailableInBaseUnits: baseUnitAmount(1),
+ ethValueAvailableInWei: baseUnitAmount(0.5, WETH_DECIMALS),
+ };
+
+ await expectLiquidityResult(
+ mockWeb3Provider.object,
+ mockOrderProvider.object,
+ ordersAndFillableAmounts,
+ expectedResult,
+ );
+ });
+
+ it('should return correct computed value with multiple orders and fillable amounts', async () => {
+ const ordersAndFillableAmounts = {
+ orders: [sellTwoTokensFor1Weth, sellTenTokensFor10Weth],
+ remainingFillableMakerAssetAmounts: [baseUnitAmount(1), baseUnitAmount(3)],
+ };
+ const expectedResult = {
+ tokensAvailableInBaseUnits: baseUnitAmount(4),
+ ethValueAvailableInWei: baseUnitAmount(3.5, WETH_DECIMALS),
+ };
+
+ await expectLiquidityResult(
+ mockWeb3Provider.object,
+ mockOrderProvider.object,
+ ordersAndFillableAmounts,
+ expectedResult,
+ );
+ });
+
+ it('should return 0s when no amounts fillable', async () => {
+ const ordersAndFillableAmounts = {
+ orders: [sellTwoTokensFor1Weth, sellTenTokensFor10Weth],
+ remainingFillableMakerAssetAmounts: [baseUnitAmount(0), baseUnitAmount(0)],
+ };
+ const expectedResult = {
+ tokensAvailableInBaseUnits: baseUnitAmount(0),
+ ethValueAvailableInWei: baseUnitAmount(0, WETH_DECIMALS),
+ };
+
+ await expectLiquidityResult(
+ mockWeb3Provider.object,
+ mockOrderProvider.object,
+ ordersAndFillableAmounts,
+ expectedResult,
+ );
+ });
+ });
+ });
+});
diff --git a/packages/asset-buyer/test/buy_quote_calculator_test.ts b/packages/asset-buyer/test/buy_quote_calculator_test.ts
index 880f55180..177fd8fe6 100644
--- a/packages/asset-buyer/test/buy_quote_calculator_test.ts
+++ b/packages/asset-buyer/test/buy_quote_calculator_test.ts
@@ -234,7 +234,7 @@ describe('buyQuoteCalculator', () => {
const expectedEthAmountForAsset = new BigNumber(50);
const expectedEthAmountForZrxFees = new BigNumber(100);
const expectedFillEthAmount = expectedEthAmountForAsset;
- const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.mul(feePercentage);
+ const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.multipliedBy(feePercentage);
const expectedFeeEthAmount = expectedAffiliateFeeEthAmount.plus(expectedEthAmountForZrxFees);
const expectedTotalEthAmount = expectedFillEthAmount.plus(expectedFeeEthAmount);
expect(buyQuote.bestCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedFillEthAmount);
@@ -272,7 +272,7 @@ describe('buyQuoteCalculator', () => {
const expectedEthAmountForAsset = new BigNumber(50);
const expectedEthAmountForZrxFees = new BigNumber(100);
const expectedFillEthAmount = expectedEthAmountForAsset;
- const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.mul(feePercentage);
+ const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.multipliedBy(feePercentage);
const expectedFeeEthAmount = expectedAffiliateFeeEthAmount.plus(expectedEthAmountForZrxFees);
const expectedTotalEthAmount = expectedFillEthAmount.plus(expectedFeeEthAmount);
expect(buyQuote.bestCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedFillEthAmount);
@@ -282,7 +282,7 @@ describe('buyQuoteCalculator', () => {
const expectedWorstEthAmountForAsset = new BigNumber(100);
const expectedWorstEthAmountForZrxFees = new BigNumber(208);
const expectedWorstFillEthAmount = expectedWorstEthAmountForAsset;
- const expectedWorstAffiliateFeeEthAmount = expectedWorstEthAmountForAsset.mul(feePercentage);
+ const expectedWorstAffiliateFeeEthAmount = expectedWorstEthAmountForAsset.multipliedBy(feePercentage);
const expectedWorstFeeEthAmount = expectedWorstAffiliateFeeEthAmount.plus(expectedWorstEthAmountForZrxFees);
const expectedWorstTotalEthAmount = expectedWorstFillEthAmount.plus(expectedWorstFeeEthAmount);
expect(buyQuote.worstCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedWorstFillEthAmount);
diff --git a/packages/asset-buyer/test/utils/mocks.ts b/packages/asset-buyer/test/utils/mocks.ts
new file mode 100644
index 000000000..d3e1c09c4
--- /dev/null
+++ b/packages/asset-buyer/test/utils/mocks.ts
@@ -0,0 +1,68 @@
+import { Web3ProviderEngine } from '@0x/subproviders';
+import * as TypeMoq from 'typemoq';
+
+import { AssetBuyer } from '../../src/asset_buyer';
+import { OrderProvider, OrderProviderResponse, OrdersAndFillableAmounts } from '../../src/types';
+
+// tslint:disable:promise-function-async
+
+// Implementing dummy class for using in mocks, see https://github.com/florinn/typemoq/issues/3
+class OrderProviderClass implements OrderProvider {
+ // tslint:disable-next-line:prefer-function-over-method
+ public async getOrdersAsync(): Promise<OrderProviderResponse> {
+ return Promise.resolve({ orders: [] });
+ }
+ // tslint:disable-next-line:prefer-function-over-method
+ public async getAvailableMakerAssetDatasAsync(takerAssetData: string): Promise<string[]> {
+ return Promise.resolve([]);
+ }
+}
+
+export const orderProviderMock = () => {
+ return TypeMoq.Mock.ofType(OrderProviderClass, TypeMoq.MockBehavior.Strict);
+};
+
+export const mockAvailableAssetDatas = (
+ mockOrderProvider: TypeMoq.IMock<OrderProviderClass>,
+ assetData: string,
+ availableAssetDatas: string[],
+) => {
+ mockOrderProvider
+ .setup(op => op.getAvailableMakerAssetDatasAsync(TypeMoq.It.isValue(assetData)))
+ .returns(() => {
+ return Promise.resolve(availableAssetDatas);
+ })
+ .verifiable(TypeMoq.Times.once());
+};
+
+const partiallyMockedAssetBuyer = (
+ provider: Web3ProviderEngine,
+ orderProvider: OrderProvider,
+): TypeMoq.IMock<AssetBuyer> => {
+ const rawAssetBuyer = new AssetBuyer(provider, orderProvider);
+ const mockedAssetBuyer = TypeMoq.Mock.ofInstance(rawAssetBuyer, TypeMoq.MockBehavior.Loose, false);
+ mockedAssetBuyer.callBase = true;
+ return mockedAssetBuyer;
+};
+
+const mockGetOrdersAndAvailableAmounts = (
+ mockedAssetBuyer: TypeMoq.IMock<AssetBuyer>,
+ assetData: string,
+ ordersAndFillableAmounts: OrdersAndFillableAmounts,
+): void => {
+ mockedAssetBuyer
+ .setup(a => a.getOrdersAndFillableAmountsAsync(assetData, false))
+ .returns(() => Promise.resolve(ordersAndFillableAmounts))
+ .verifiable(TypeMoq.Times.once());
+};
+
+export const mockedAssetBuyerWithOrdersAndFillableAmounts = (
+ provider: Web3ProviderEngine,
+ orderProvider: OrderProvider,
+ assetData: string,
+ ordersAndFillableAmounts: OrdersAndFillableAmounts,
+): TypeMoq.IMock<AssetBuyer> => {
+ const mockedAssetBuyer = partiallyMockedAssetBuyer(provider, orderProvider);
+ mockGetOrdersAndAvailableAmounts(mockedAssetBuyer, assetData, ordersAndFillableAmounts);
+ return mockedAssetBuyer;
+};
diff --git a/packages/base-contract/CHANGELOG.json b/packages/base-contract/CHANGELOG.json
index 68ebe8d9e..63b1fe8f7 100644
--- a/packages/base-contract/CHANGELOG.json
+++ b/packages/base-contract/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.0.13",
"changes": [
diff --git a/packages/base-contract/src/index.ts b/packages/base-contract/src/index.ts
index c2b7b943b..0238106f3 100644
--- a/packages/base-contract/src/index.ts
+++ b/packages/base-contract/src/index.ts
@@ -1,4 +1,4 @@
-import { AbiEncoder, abiUtils } from '@0x/utils';
+import { AbiEncoder, abiUtils, BigNumber } from '@0x/utils';
import { Web3Wrapper } from '@0x/web3-wrapper';
import {
AbiDefinition,
@@ -43,7 +43,7 @@ export class BaseContract {
return type === 'address' ? value.toLowerCase() : value;
}
protected static _bigNumberToString(_type: string, value: any): any {
- return _.isObject(value) && value.isBigNumber ? value.toString() : value;
+ return BigNumber.isBigNumber(value) ? value.toString() : value;
}
protected static _lookupConstructorAbi(abi: ContractAbi): ConstructorAbi {
const constructorAbiIfExists = _.find(
diff --git a/packages/connect/CHANGELOG.json b/packages/connect/CHANGELOG.json
index 8fe9c562f..c2f16d96a 100644
--- a/packages/connect/CHANGELOG.json
+++ b/packages/connect/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.0.13",
"changes": [
diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json
index bfba8454c..30199ae1d 100644
--- a/packages/contract-wrappers/CHANGELOG.json
+++ b/packages/contract-wrappers/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "6.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "5.0.1",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"version": "5.0.0",
"changes": [
{
diff --git a/packages/contract-wrappers/CHANGELOG.md b/packages/contract-wrappers/CHANGELOG.md
index 8281f5050..28cbf2ec6 100644
--- a/packages/contract-wrappers/CHANGELOG.md
+++ b/packages/contract-wrappers/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v5.0.1 - _January 17, 2019_
+
+ * Dependencies updated
+
## v5.0.0 - _January 15, 2019_
* Renamed OrderStatus enum members to PascalCase to conform with tslint enum-naming rule (#1474)
diff --git a/packages/contract-wrappers/package.json b/packages/contract-wrappers/package.json
index c4f75a5a4..cc7dc1a3e 100644
--- a/packages/contract-wrappers/package.json
+++ b/packages/contract-wrappers/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/contract-wrappers",
- "version": "5.0.0",
+ "version": "5.0.1",
"description": "Smart TS wrappers for 0x smart contracts",
"keywords": [
"0xproject",
@@ -49,7 +49,7 @@
"@types/web3-provider-engine": "^14.0.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
@@ -69,7 +69,7 @@
"@0x/assert": "^1.0.23",
"@0x/contract-addresses": "^2.2.0",
"@0x/contract-artifacts": "^1.3.0",
- "@0x/contracts-test-utils": "^2.0.0",
+ "@0x/contracts-test-utils": "^2.0.1",
"@0x/fill-scenarios": "^1.1.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
diff --git a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
index ad42cfd4f..cd79a0e5d 100644
--- a/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
+++ b/packages/contract-wrappers/src/contract_wrappers/erc20_token_wrapper.ts
@@ -271,7 +271,7 @@ export class ERC20TokenWrapper extends ContractWrapper {
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const fromAddressBalance = await this.getBalanceAsync(normalizedTokenAddress, normalizedFromAddress);
- if (fromAddressBalance.lessThan(amountInBaseUnits)) {
+ if (fromAddressBalance.isLessThan(amountInBaseUnits)) {
throw new Error(ContractWrappersError.InsufficientBalanceForTransfer);
}
@@ -327,12 +327,12 @@ export class ERC20TokenWrapper extends ContractWrapper {
normalizedFromAddress,
normalizedSenderAddress,
);
- if (fromAddressAllowance.lessThan(amountInBaseUnits)) {
+ if (fromAddressAllowance.isLessThan(amountInBaseUnits)) {
throw new Error(ContractWrappersError.InsufficientAllowanceForTransfer);
}
const fromAddressBalance = await this.getBalanceAsync(normalizedTokenAddress, normalizedFromAddress);
- if (fromAddressBalance.lessThan(amountInBaseUnits)) {
+ if (fromAddressBalance.isLessThan(amountInBaseUnits)) {
throw new Error(ContractWrappersError.InsufficientBalanceForTransfer);
}
diff --git a/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts b/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts
index 1ff130a48..c35b24664 100644
--- a/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts
+++ b/packages/contract-wrappers/src/fetchers/asset_balance_and_proxy_allowance_fetcher.ts
@@ -39,7 +39,7 @@ export class AssetBalanceAndProxyAllowanceFetcher implements AbstractBalanceAndP
nestedAssetDataElement,
userAddress,
)).dividedToIntegerBy(nestedAmountElement);
- if (_.isUndefined(balance) || nestedAssetBalance.lessThan(balance)) {
+ if (_.isUndefined(balance) || nestedAssetBalance.isLessThan(balance)) {
balance = nestedAssetBalance;
}
}
@@ -81,7 +81,7 @@ export class AssetBalanceAndProxyAllowanceFetcher implements AbstractBalanceAndP
nestedAssetDataElement,
userAddress,
)).dividedToIntegerBy(nestedAmountElement);
- if (_.isUndefined(proxyAllowance) || nestedAssetAllowance.lessThan(proxyAllowance)) {
+ if (_.isUndefined(proxyAllowance) || nestedAssetAllowance.isLessThan(proxyAllowance)) {
proxyAllowance = nestedAssetAllowance;
}
}
diff --git a/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts b/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts
index f374d509b..4b75ea386 100644
--- a/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts
+++ b/packages/contract-wrappers/src/utils/exchange_transfer_simulator.ts
@@ -72,10 +72,10 @@ export class ExchangeTransferSimulator {
}
const balance = await this._store.getBalanceAsync(tokenAddress, from);
const proxyAllowance = await this._store.getProxyAllowanceAsync(tokenAddress, from);
- if (proxyAllowance.lessThan(amountInBaseUnits)) {
+ if (proxyAllowance.isLessThan(amountInBaseUnits)) {
ExchangeTransferSimulator._throwValidationError(FailureReason.ProxyAllowance, tradeSide, transferType);
}
- if (balance.lessThan(amountInBaseUnits)) {
+ if (balance.isLessThan(amountInBaseUnits)) {
ExchangeTransferSimulator._throwValidationError(FailureReason.Balance, tradeSide, transferType);
}
await this._decreaseProxyAllowanceAsync(tokenAddress, from, amountInBaseUnits);
diff --git a/packages/contract-wrappers/src/utils/utils.ts b/packages/contract-wrappers/src/utils/utils.ts
index 0b3270e78..ab69385e7 100644
--- a/packages/contract-wrappers/src/utils/utils.ts
+++ b/packages/contract-wrappers/src/utils/utils.ts
@@ -7,13 +7,15 @@ import { constants } from './constants';
export const utils = {
getCurrentUnixTimestampSec(): BigNumber {
const milisecondsInSecond = 1000;
- return new BigNumber(Date.now() / milisecondsInSecond).round();
+ return new BigNumber(Date.now() / milisecondsInSecond).integerValue();
},
getCurrentUnixTimestampMs(): BigNumber {
return new BigNumber(Date.now());
},
numberPercentageToEtherTokenAmountPercentage(percentage: number): BigNumber {
- return Web3Wrapper.toBaseUnitAmount(constants.ONE_AMOUNT, constants.ETHER_TOKEN_DECIMALS).mul(percentage);
+ return Web3Wrapper.toBaseUnitAmount(constants.ONE_AMOUNT, constants.ETHER_TOKEN_DECIMALS).multipliedBy(
+ percentage,
+ );
},
removeUndefinedProperties<T extends object>(obj: T): Partial<T> {
return _.pickBy(obj);
diff --git a/packages/contract-wrappers/test/ether_token_wrapper_test.ts b/packages/contract-wrappers/test/ether_token_wrapper_test.ts
index e3efef19d..cc2419aa2 100644
--- a/packages/contract-wrappers/test/ether_token_wrapper_test.ts
+++ b/packages/contract-wrappers/test/ether_token_wrapper_test.ts
@@ -116,7 +116,7 @@ describe('EtherTokenWrapper', () => {
const preETHBalance = await web3Wrapper.getBalanceInWeiAsync(addressWithETH);
const extraETHBalance = Web3Wrapper.toWei(new BigNumber(5));
- const overETHBalanceinWei = preETHBalance.add(extraETHBalance);
+ const overETHBalanceinWei = preETHBalance.plus(extraETHBalance);
return expect(
contractWrappers.etherToken.depositAsync(wethContractAddress, overETHBalanceinWei, addressWithETH),
@@ -153,7 +153,7 @@ describe('EtherTokenWrapper', () => {
);
expect(postWETHBalanceInBaseUnits).to.be.bignumber.equal(0);
- const expectedETHBalance = preETHBalance.add(depositWeiAmount).round(decimalPlaces);
+ const expectedETHBalance = preETHBalance.plus(depositWeiAmount).integerValue(decimalPlaces);
gasCost = expectedETHBalance.minus(postETHBalance);
expect(gasCost).to.be.bignumber.lte(MAX_REASONABLE_GAS_COST_IN_WEI);
});
@@ -165,7 +165,7 @@ describe('EtherTokenWrapper', () => {
expect(preWETHBalance).to.be.bignumber.equal(0);
// tslint:disable-next-line:custom-no-magic-numbers
- const overWETHBalance = preWETHBalance.add(999999999);
+ const overWETHBalance = preWETHBalance.plus(999999999);
return expect(
contractWrappers.etherToken.withdrawAsync(wethContractAddress, overWETHBalance, addressWithETH),
diff --git a/packages/dev-tools-pages/.gitignore b/packages/dev-tools-pages/.gitignore
index 557b82311..d70ebaa1d 100644
--- a/packages/dev-tools-pages/.gitignore
+++ b/packages/dev-tools-pages/.gitignore
@@ -1,3 +1 @@
-public
-assets/fonts/*.woff
-assets/fonts/*.woff2 \ No newline at end of file
+public \ No newline at end of file
diff --git a/packages/dev-tools-pages/assets/crawl.html b/packages/dev-tools-pages/assets/crawl.html
index 9135c3ede..352300d73 100644
--- a/packages/dev-tools-pages/assets/crawl.html
+++ b/packages/dev-tools-pages/assets/crawl.html
@@ -1,20 +1,17 @@
<!DOCTYPE html>
<html lang="en">
-<head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta http-equiv="X-UA-Compatible" content="ie=edge">
- <title>Document</title>
-</head>
-<body>
-
-<ul>
-<li><a href="/compiler">Compiler</a></li>
-<li><a href="/cov">Cov</a></li>
-<li><a href="/profiler">Profiler</a></li>
-<li><a href="/trace">Trace</a></li>
-
-</ul>
-
-</body>
-</html> \ No newline at end of file
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+ <title>Test</title>
+ </head>
+ <body>
+ <ul>
+ <li><a href="/compiler">Compiler</a></li>
+ <li><a href="/coverage">Coverage</a></li>
+ <li><a href="/profiler">Profiler</a></li>
+ <li><a href="/trace">Trace</a></li>
+ </ul>
+ </body>
+</html>
diff --git a/packages/dev-tools-pages/assets/fonts/.gitkeep b/packages/dev-tools-pages/assets/fonts/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
--- a/packages/dev-tools-pages/assets/fonts/.gitkeep
+++ /dev/null
diff --git a/packages/dev-tools-pages/assets/fonts/MaisonNeue-Bold-subset.woff2 b/packages/dev-tools-pages/assets/fonts/MaisonNeue-Bold-subset.woff2
new file mode 100644
index 000000000..54424f6fc
--- /dev/null
+++ b/packages/dev-tools-pages/assets/fonts/MaisonNeue-Bold-subset.woff2
Binary files differ
diff --git a/packages/dev-tools-pages/assets/fonts/MaisonNeue-Book-subset.woff2 b/packages/dev-tools-pages/assets/fonts/MaisonNeue-Book-subset.woff2
new file mode 100644
index 000000000..8c2dea7ef
--- /dev/null
+++ b/packages/dev-tools-pages/assets/fonts/MaisonNeue-Book-subset.woff2
Binary files differ
diff --git a/packages/dev-tools-pages/package.json b/packages/dev-tools-pages/package.json
index 79d4a840f..feab72856 100644
--- a/packages/dev-tools-pages/package.json
+++ b/packages/dev-tools-pages/package.json
@@ -1,18 +1,28 @@
{
"name": "@0x/dev-tools-pages",
- "version": "0.0.13",
+ "version": "0.0.14",
"engines": {
"node": ">=6.12"
},
"private": true,
"description": "0x Dev tools pages",
"scripts": {
- "build": "node --max_old_space_size=8192 ../../node_modules/.bin/webpack --mode production && react-snap",
+ "build": "node --max_old_space_size=8192 ../../node_modules/.bin/webpack --mode production",
"build:ci": "yarn build",
"build:dev": "../../node_modules/.bin/webpack --mode development",
"clean": "shx rm -f public/bundle*",
"lint": "tslint --format stylish --project . 'ts/**/*.ts' 'ts/**/*.tsx'",
- "dev": "webpack-dev-server --mode development --content-base public"
+ "dev": "webpack-dev-server --mode development --content-base public",
+ "deploy:all": "npm run build; npm run deploy:compiler; npm run deploy:compiler:index; npm run deploy:coverage; npm run deploy:coverage:index; npm run deploy:profiler; npm run deploy:profiler:index; npm run deploy:trace; npm run deploy:trace:index;",
+ "deploy:compiler": "DIR_NAME=./public/. BUCKET=s3://sol-compiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
+ "deploy:coverage": "DIR_NAME=./public/. BUCKET=s3://sol-coverage.com yarn s3:sync --exclude 'bundle-compiler*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
+ "deploy:profiler": "DIR_NAME=./public/. BUCKET=s3://sol-profiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-compiler*'",
+ "deploy:trace": "DIR_NAME=./public/. BUCKET=s3://sol-trace.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-compiler*' --exclude 'bundle-profiler*'",
+ "deploy:compiler:index": "DIR_NAME=./public/compiler/. BUCKET=s3://sol-compiler.com yarn s3:sync",
+ "deploy:coverage:index": "DIR_NAME=./public/coverage/. BUCKET=s3://sol-coverage.com yarn s3:sync",
+ "deploy:profiler:index": "DIR_NAME=./public/profiler/. BUCKET=s3://sol-profiler.com yarn s3:sync",
+ "deploy:trace:index": "DIR_NAME=./public/trace/. BUCKET=s3://sol-trace.com yarn s3:sync",
+ "s3:sync": "aws s3 sync $DIR_NAME $BUCKET --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js --exclude 'profiler/*' --exclude 'trace/*' --exclude 'coverage/*' --exclude 'compiler/*'"
},
"license": "Apache-2.0",
"dependencies": {
@@ -51,7 +61,6 @@
"less-loader": "^4.1.0",
"make-promises-safe": "^1.1.0",
"raw-loader": "^0.5.1",
- "react-snap": "^1.19.0",
"react-svg-loader": "^2.1.0",
"shx": "^0.2.2",
"source-map-loader": "^0.2.4",
@@ -65,12 +74,5 @@
"webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "3.1.2",
"webpack-dev-server": "^3.1.9"
- },
- "reactSnap": {
- "source": "public",
- "puppeteerArgs": [
- "--no-sandbox",
- "--disable-setuid-sandbox"
- ]
}
}
diff --git a/packages/dev-tools-pages/pages.js b/packages/dev-tools-pages/pages.js
index 7609a07e9..488c2ecd7 100644
--- a/packages/dev-tools-pages/pages.js
+++ b/packages/dev-tools-pages/pages.js
@@ -11,26 +11,26 @@ const pages = [
'og-title': { property: 'og:title', content: 'sol-compiler' },
'og-description': { property: 'og:description', content: 'Solidity compilation that just works' },
'og-type': { property: 'og:type', content: 'website' },
- 'og-image': { property: 'og:image', content: '/images/og-compiler' },
+ 'og-image': { property: 'og:image', content: '/images/og-compiler.png' },
'twitter:site': '@0xproject',
- 'twitter:image': '/images/og-compiler',
+ 'twitter:image': '/images/og-compiler.png',
},
},
{
- title: 'sol-cov',
- filename: 'cov/index.html',
+ title: 'sol-coverage',
+ filename: 'coverage/index.html',
template: 'assets/index.html',
- chunks: ['cov'],
+ chunks: ['coverage'],
favicon: 'assets/favicons/cov.ico',
minify: true,
meta: {
description: 'Solidity code coverage',
- 'og-title': { property: 'og:title', content: 'sol-cov' },
+ 'og-title': { property: 'og:title', content: 'sol-coverage' },
'og-description': { property: 'og:description', content: 'Solidity code coverage' },
'og-type': { property: 'og:type', content: 'website' },
- 'og-image': { property: 'og:image', content: '/images/og-cov' },
+ 'og-image': { property: 'og:image', content: '/images/og-cov.png' },
'twitter:site': '@0xproject',
- 'twitter:image': '/images/og-cov',
+ 'twitter:image': '/images/og-cov.png',
},
},
{
@@ -45,9 +45,9 @@ const pages = [
'og-title': { property: 'og:title', content: 'sol-profiler' },
'og-description': { property: 'og:description', content: 'Gas profiling for Solidity' },
'og-type': { property: 'og:type', content: 'website' },
- 'og-image': { property: 'og:image', content: '/images/og-profiler' },
+ 'og-image': { property: 'og:image', content: '/images/og-profiler.png' },
'twitter:site': '@0xproject',
- 'twitter:image': '/images/og-profiler',
+ 'twitter:image': '/images/og-profiler.png',
},
},
{
@@ -62,9 +62,9 @@ const pages = [
'og-title': { property: 'og:title', content: 'sol-trace' },
'og-description': { property: 'og:description', content: 'Human-readable stack traces' },
'og-type': { property: 'og:type', content: 'website' },
- 'og-image': { property: 'og:image', content: '/images/og-trace' },
+ 'og-image': { property: 'og:image', content: '/images/og-trace.png' },
'twitter:site': '@0xproject',
- 'twitter:image': '/images/og-trace',
+ 'twitter:image': '/images/og-trace.png',
},
},
];
diff --git a/packages/dev-tools-pages/ts/components/call_to_action.tsx b/packages/dev-tools-pages/ts/components/call_to_action.tsx
new file mode 100644
index 000000000..3805a7c8c
--- /dev/null
+++ b/packages/dev-tools-pages/ts/components/call_to_action.tsx
@@ -0,0 +1,40 @@
+import * as React from 'react';
+import styled from 'styled-components';
+
+import { ContextInterface, ThemeContext } from 'ts/context';
+
+import { Button } from './button';
+
+const CallToAction: React.StatelessComponent<ContextInterface> = ({ children }) => (
+ <ThemeContext.Consumer>
+ {({ docLink }: ContextInterface) => (
+ <StyledCallToAction>
+ <CallToActionContainer>
+ <Button as="a" href={docLink} target="_blank" large={true}>
+ Read the Docs
+ </Button>
+ </CallToActionContainer>
+ {children}
+ </StyledCallToAction>
+ )}
+ </ThemeContext.Consumer>
+);
+
+const StyledCallToAction = styled.section`
+ text-align: center;
+ padding-top: 0;
+ padding-bottom: 1rem;
+ padding-left: 2.5rem;
+ padding-right: 2.5rem;
+ min-height: min-content;
+ max-height: 37.5rem;
+ height: 20vh;
+ position: relative;
+`;
+
+const CallToActionContainer = styled.div`
+ margin: 0 auto;
+ max-width: 590px;
+`;
+
+export { CallToAction };
diff --git a/packages/dev-tools-pages/ts/components/code.tsx b/packages/dev-tools-pages/ts/components/code.tsx
index c4f9cee24..0f7d6a0cd 100644
--- a/packages/dev-tools-pages/ts/components/code.tsx
+++ b/packages/dev-tools-pages/ts/components/code.tsx
@@ -139,7 +139,6 @@ class Code extends React.Component<CodeProps, CodeState> {
public render(): React.ReactNode {
const { language, isLight, isDiff, children, gutterLength, canCopy } = this.props;
const { hlCode } = this.state;
-
return (
<Container>
<Base language={language} isDiff={isDiff} isLight={isLight}>
@@ -157,7 +156,7 @@ class Code extends React.Component<CodeProps, CodeState> {
<StyledCopyInput readOnly={true} aria-hidden="true" ref={this._code} value={children} />
) : null}
</Base>
- {navigator.userAgent !== 'ReactSnap' && canCopy ? (
+ {canCopy ? (
<Button onClick={this._handleCopyAsync.bind(this)}>{this.state.didCopy ? 'Copied' : 'Copy'}</Button>
) : null}
</Container>
diff --git a/packages/dev-tools-pages/ts/components/compiler.tsx b/packages/dev-tools-pages/ts/components/compiler.tsx
index 694a535dd..c00e3a2b9 100644
--- a/packages/dev-tools-pages/ts/components/compiler.tsx
+++ b/packages/dev-tools-pages/ts/components/compiler.tsx
@@ -45,7 +45,7 @@ const Dd = styled.dd`
const cards = [
{
- title: 'A Project-centric',
+ title: 'Project-centric',
body: (
<React.Fragment>
Compiles an entire project instead of only individual <InlineCode isAlt={true}>.sol</InlineCode> files.
@@ -54,7 +54,7 @@ const cards = [
},
{
title: 'Incremental builds',
- body: 'Recompiles your smart contracts after they have changed',
+ body: 'Only recompiles smart contracts that have been modified.',
},
{
title: 'Customizable artifacts',
@@ -63,12 +63,16 @@ const cards = [
},
{
title: 'Seamless',
- body: 'Fetches and caches the required compiler binaries.',
+ body: 'Fetches and caches the required compiler binaries for the Solidity versions you use.',
},
{
title: 'Versioning',
body:
- 'Compiles each contract with the version specified at the top of its file (sol-compiler even supports version ranges!).',
+ 'Compiles each contract with the Solidity version specified at the top of its file (it even supports version ranges!).',
+ },
+ {
+ title: 'Watch mode',
+ body: 'Have your contracts instantly recompile on file save.',
},
];
diff --git a/packages/dev-tools-pages/ts/components/footer.tsx b/packages/dev-tools-pages/ts/components/footer.tsx
index 04fd9b88e..7e44bf128 100644
--- a/packages/dev-tools-pages/ts/components/footer.tsx
+++ b/packages/dev-tools-pages/ts/components/footer.tsx
@@ -3,7 +3,7 @@ import * as React from 'react';
import styled from 'styled-components';
import { context as compiler } from 'ts/context/compiler';
-import { context as cov } from 'ts/context/cov';
+import { context as coverage } from 'ts/context/coverage';
import { context as profiler } from 'ts/context/profiler';
import { context as trace } from 'ts/context/trace';
import MainIcon from 'ts/icons/logos/0x.svg';
@@ -12,7 +12,7 @@ import { media } from 'ts/variables';
import { Container } from './container';
import { Alpha, Beta } from './typography';
-const tools = [trace, cov, compiler, profiler];
+const tools = [trace, coverage, compiler, profiler];
const Footer: React.StatelessComponent<{}> = () => (
<StyledFooter>
@@ -20,9 +20,9 @@ const Footer: React.StatelessComponent<{}> = () => (
<Top>
<Alpha>Other tools by 0x</Alpha>
<List>
- {_.map(tools, ({ title, subtitle, icon }) => (
+ {_.map(tools, ({ title, subtitle, icon, name }) => (
<ListItem key={title}>
- <ListLink href="#">
+ <ListLink href={`https://sol-${name}.com`}>
<Icon as={icon as 'svg'} />
<div>
<Beta>{title}</Beta>
@@ -37,6 +37,10 @@ const Footer: React.StatelessComponent<{}> = () => (
<Icon as={MainIcon} />
<Small>
0x is an open, permissionless protocol allowing for tokens to be traded on the Ethereum blockchain.
+ Interested in joining our team?{' '}
+ <a href="https://0x.org/careers" target="_blank">
+ We're hiring
+ </a>
</Small>
</Media>
</Container>
diff --git a/packages/dev-tools-pages/ts/components/header.tsx b/packages/dev-tools-pages/ts/components/header.tsx
index 2787692c1..4d3a8685c 100644
--- a/packages/dev-tools-pages/ts/components/header.tsx
+++ b/packages/dev-tools-pages/ts/components/header.tsx
@@ -17,7 +17,7 @@ const Header: React.StatelessComponent<{}> = () => (
<Title>{title}</Title>
</LogoMark>
- <Link as="a" href="https://0xproject.com/">
+ <Link as="a" href="https://0x.org/" target="_blank">
Built by 0x
</Link>
</Container>
diff --git a/packages/dev-tools-pages/ts/components/hero.tsx b/packages/dev-tools-pages/ts/components/hero.tsx
index cdcad6982..e2977f3f2 100644
--- a/packages/dev-tools-pages/ts/components/hero.tsx
+++ b/packages/dev-tools-pages/ts/components/hero.tsx
@@ -9,16 +9,16 @@ import { Beta } from './typography';
const Hero: React.StatelessComponent<ContextInterface> = ({ children }) => (
<ThemeContext.Consumer>
- {({ subtitle, tagline }: ContextInterface) => (
+ {({ subtitle, tagline, docLink }: ContextInterface) => (
<StyledHero>
<HeroContainer>
<Subtitle>{subtitle}</Subtitle>
<Tagline as="p">{tagline}</Tagline>
- <Button as="a" href="#" large={true}>
+ <Button as="a" href={docLink} target="_blank" large={true}>
Read the Docs
</Button>
</HeroContainer>
- {navigator.userAgent !== 'ReactSnap' ? children : null}
+ {children}
</StyledHero>
)}
</ThemeContext.Consumer>
diff --git a/packages/dev-tools-pages/ts/components/trace.tsx b/packages/dev-tools-pages/ts/components/trace.tsx
index f41dac9b7..81f6db0ab 100644
--- a/packages/dev-tools-pages/ts/components/trace.tsx
+++ b/packages/dev-tools-pages/ts/components/trace.tsx
@@ -25,7 +25,7 @@ const Trace: React.StatelessComponent<{}> = () => (
troublemaking line of code. The only hint you'll get is a generic error.
</MainCopy>
<Breakout>
- <Code isLight={true}>Error: VM Exception while processing transaction: rever</Code>
+ <Code isLight={true}>Error: VM Exception while processing transaction: revert</Code>
</Breakout>
<List>
@@ -44,8 +44,8 @@ const Trace: React.StatelessComponent<{}> = () => (
<Copy dark={true}>
<Gamma as="h3">Time-consuming</Gamma>
<p>
- Working with a large code-base that contains hundreds of smart contracts,
- finding the failing line of code quickly becomes a daunting task.
+ Working within a large code-base that contains many smart contracts, finding the
+ failing line of code quickly becomes a daunting task.
</p>
</Copy>
<Icon as={TimeConsuming} />
@@ -78,8 +78,8 @@ const Trace: React.StatelessComponent<{}> = () => (
<Copy>
<Gamma as="h3">Exact location</Gamma>
<p>
- It shows you the exact location of the specific code linen and where it was
- called from.
+ It shows you the exact location of the offending line and where it was called
+ from.
</p>
</Copy>
<Icon as={ExactLocation} />
@@ -90,8 +90,7 @@ const Trace: React.StatelessComponent<{}> = () => (
<Gamma as="h3">Time-saving</Gamma>
<p>
Turning "Your code failed somewhere, good luck debugging it" into "Your code
- failed on line X of contract Y", it drastically improves the developer
- experience.
+ failed on line X of contract Y", drastically improves the developer experience.
</p>
</Copy>
<Icon as={TimeSaving} />
diff --git a/packages/dev-tools-pages/ts/context/compiler.tsx b/packages/dev-tools-pages/ts/context/compiler.tsx
index 177e265e5..e4642c826 100644
--- a/packages/dev-tools-pages/ts/context/compiler.tsx
+++ b/packages/dev-tools-pages/ts/context/compiler.tsx
@@ -5,6 +5,7 @@ import { ContextInterface } from './index';
export const context: ContextInterface = {
title: 'sol-compiler',
name: 'compiler',
+ docLink: 'https://0x.org/docs/sol-compiler',
subtitle: 'Solidity compilation that just works',
tagline: 'Seamlessly compile an entire solidity project and generate customisable artifacts',
icon: Icon,
diff --git a/packages/dev-tools-pages/ts/context/cov.tsx b/packages/dev-tools-pages/ts/context/coverage.tsx
index 1ade45e9d..3e44b6ec2 100644
--- a/packages/dev-tools-pages/ts/context/cov.tsx
+++ b/packages/dev-tools-pages/ts/context/coverage.tsx
@@ -3,9 +3,10 @@ import Icon from 'ts/icons/logos/cov.svg';
import { ContextInterface } from './index';
export const context: ContextInterface = {
- title: 'sol-cov',
- name: 'cov',
+ title: 'sol-coverage',
+ name: 'coverage',
subtitle: 'Solidity code coverage',
+ docLink: 'https://0x.org/docs/sol-coverage',
tagline: 'Measure Solidity code coverage',
icon: Icon,
colors: {
diff --git a/packages/dev-tools-pages/ts/context/index.tsx b/packages/dev-tools-pages/ts/context/index.tsx
index 35c647ad6..97ccf5c16 100644
--- a/packages/dev-tools-pages/ts/context/index.tsx
+++ b/packages/dev-tools-pages/ts/context/index.tsx
@@ -3,6 +3,7 @@ import { createContext } from 'react';
interface ContextInterface {
title?: string;
name?: string;
+ docLink?: string;
subtitle?: string;
tagline?: string;
icon?: React.ReactNode;
diff --git a/packages/dev-tools-pages/ts/context/profiler.tsx b/packages/dev-tools-pages/ts/context/profiler.tsx
index 5ccfa5b4c..e2ddcb230 100644
--- a/packages/dev-tools-pages/ts/context/profiler.tsx
+++ b/packages/dev-tools-pages/ts/context/profiler.tsx
@@ -5,6 +5,7 @@ import { ContextInterface } from './index';
export const context: ContextInterface = {
title: 'sol-profiler',
name: 'profiler',
+ docLink: 'https://0x.org/docs/sol-profiler',
subtitle: 'Gas profiling for Solidity',
tagline: "Implement data-guided optimizations by profiling your contract's gas usage",
icon: Icon,
diff --git a/packages/dev-tools-pages/ts/context/trace.tsx b/packages/dev-tools-pages/ts/context/trace.tsx
index 9627cc0a4..3c19661f2 100644
--- a/packages/dev-tools-pages/ts/context/trace.tsx
+++ b/packages/dev-tools-pages/ts/context/trace.tsx
@@ -6,6 +6,7 @@ export const context: ContextInterface = {
title: 'sol-trace',
name: 'trace',
subtitle: 'Human-readable stack traces',
+ docLink: 'https://0x.org/docs/sol-trace',
tagline: 'Immediately locate Solidity errors and rapidly debug failed transactions',
icon: Icon,
colors: {
diff --git a/packages/dev-tools-pages/ts/pages/compiler.tsx b/packages/dev-tools-pages/ts/pages/compiler.tsx
index 93a667562..407646add 100644
--- a/packages/dev-tools-pages/ts/pages/compiler.tsx
+++ b/packages/dev-tools-pages/ts/pages/compiler.tsx
@@ -6,6 +6,7 @@ import { context } from 'ts/context/compiler';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
+import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Compiler as CompilerComponent } from 'ts/components/compiler';
import { Content } from 'ts/components/content';
@@ -24,6 +25,9 @@ const Animation = Loadable({
},
});
+const SOLIDITY_INPUT_FORMAT_DOCS =
+ 'https://solidity.readthedocs.io/en/v0.4.24/using-the-compiler.html#compiler-input-and-output-json-description';
+
const Compiler: React.StatelessComponent<{}> = () => (
<Base context={context}>
<Hero>
@@ -40,7 +44,7 @@ const Compiler: React.StatelessComponent<{}> = () => (
<ContentBlock title="Run">
<Breakout>
- <Code>cd /your_project_dir && sol-compiler</Code>
+ <Code canCopy={true}>cd /your_project_dir && sol-compiler</Code>
</Breakout>
</ContentBlock>
@@ -49,11 +53,11 @@ const Compiler: React.StatelessComponent<{}> = () => (
Configure via a <InlineCode>compiler.json</InlineCode> file.
</p>
<Breakout>
- <Code>mkdir compiler.json</Code>
+ <Code canCopy={true}>mkdir compiler.json</Code>
</Breakout>
<p>Example of settings:</p>
<Breakout>
- <Code language="json">
+ <Code language="json" canCopy={true}>
{`{
"contractsDir": "contracts",
"artifactsDir": "artifacts",
@@ -74,15 +78,19 @@ const Compiler: React.StatelessComponent<{}> = () => (
<Content dark={true}>
<ContentBlock main={true} title="Artifacts">
<Lead>
- Sol compiler uses solidity standard JSON output format for the artifacts. This way, you can define
- which parts of the artifact you need.
+ Sol compiler uses{' '}
+ <a href={SOLIDITY_INPUT_FORMAT_DOCS} target="_blank">
+ Solidity standard JSON input format
+ </a>{' '}
+ to specify what to include in the generated artifacts. This way, you have complete flexibility on
+ what is included.
</Lead>
</ContentBlock>
<ContentBlock title="Production">
<p>
- Sol compiler uses solidity standard JSON output format for the artifacts. This way, you can define
- which parts of the artifact you need.
+ In production, you want to optimize for a small bundle size, so your compiler.json config would
+ instruct sol-compiler to only output the contract ABI.
</p>
<Breakout>
<Code isLight={true} language="json" isEtc={true}>
@@ -109,8 +117,9 @@ const Compiler: React.StatelessComponent<{}> = () => (
</ContentBlock>
<ContentBlock title="Development">
<p>
- Sometimes you need to use some debuggers or other dev tools and you’ll need more info in the
- artifact.
+ In development, you need to use profiler and other dev tools that require more information from the
+ artifact. To do this, you can specify that the artifact also contain the bytecode, deployed bytecode
+ and source maps.
</p>
<Breakout>
<Code isLight={true} language="json" isEtc={true}>
@@ -158,6 +167,9 @@ const Compiler: React.StatelessComponent<{}> = () => (
</Breakout>
</ContentBlock>
</Content>
+ <div style={{ paddingTop: '5rem' }}>
+ <CallToAction />
+ </div>
</Base>
);
diff --git a/packages/dev-tools-pages/ts/pages/cov.tsx b/packages/dev-tools-pages/ts/pages/coverage.tsx
index 85487248a..575891f3b 100644
--- a/packages/dev-tools-pages/ts/pages/cov.tsx
+++ b/packages/dev-tools-pages/ts/pages/coverage.tsx
@@ -2,10 +2,11 @@ import * as React from 'react';
import { hydrate, render } from 'react-dom';
import * as Loadable from 'react-loadable';
-import { context } from 'ts/context/cov';
+import { context } from 'ts/context/coverage';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
+import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -25,7 +26,7 @@ const Animation = Loadable({
},
});
-const Cov: React.StatelessComponent<{}> = () => (
+const Coverage: React.StatelessComponent<{}> = () => (
<Base context={context}>
<Hero>
<Animation />
@@ -33,9 +34,9 @@ const Cov: React.StatelessComponent<{}> = () => (
<Intro>
<IntroLead title="Measure your tests">
<p>
- When it comes to writing smart contracts, testing is one of the most important steps of the process.
- In order to quantify the robustness of your Solidity testing suite, you need to measure its code
- coverage.
+ When it comes to writing secure smart contracts, testing is one of the most important steps in the
+ process. In order to quantify the robustness of your Solidity testing suite, you need to measure its
+ code coverage.
</p>
</IntroLead>
<IntroAside>
@@ -69,29 +70,57 @@ const Cov: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
- Use <a href="#">ganache-cli</a> as a backing node.
+ Use{' '}
+ <a href="https://github.com/ethereum/go-ethereum" target="_blank">
+ Geth
+ </a>{' '}
+ as a backing node. We recommend using our{' '}
+ <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
+ Devnet Docker container
+ </a>{' '}
+ which sets up a Geth node for testing purposes.{' '}
+ <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
+ Ganache support is a work in progress.
+ </a>
</ListItem>
<ListItem>
- Understand and use <a href="#">web3-provider-engine</a>.
+ Understand and use{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ web3-provider-engine
+ </a>
+ .
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
- <Code>npm install @0x/sol-coverage --save</Code>
+ <Code canCopy={true}>npm install @0x/sol-coverage --save</Code>
</Breakout>
<p>
- Sol-cov is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
- Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-cov ships with
- the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with <a href="#">Sol-compiler</a>{' '}
+ Sol-coverage is a subprovider that needs to be prepended to your{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ provider engine
+ </a>
+ . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-coverage
+ ships with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
+ <a href="https://sol-compiler.com" target="_blank">
+ Sol-compiler
+ </a>{' '}
and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
- <a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
+ <a href="https://truffleframework.com/truffle" target="_blank">
+ Truffle framework
+ </a>{' '}
+ (Also see our{' '}
+ <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
+ Truffle example project
+ </a>{' '}
+ for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -99,16 +128,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
-const solcVersion = '0.4.24';
+const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -118,32 +147,33 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
- <InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
+ <InlineCode>CoverageSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
-import { RevertTraceSubprovider } from '@0x/sol-coverage';
+import { CoverageSubprovider } from '@0x/sol-coverage';
const defaultFromAddress = "..."; // Some ethereum address with test funds
-const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
+const coverageSubprovider = new CoverageSubprovider(artifactAdapter, defaultFromAddress);
const providerEngine = new ProviderEngine();
-providerEngine.addProvider(revertTraceSubprovider);
+providerEngine.addProvider(coverageSubprovider);
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
providerEngine.start();`}
</Code>
</Breakout>
</ContentBlock>
</Content>
+ <CallToAction />
</Base>
);
const root = document.getElementById('app');
if (root.hasChildNodes()) {
- hydrate(<Cov />, root);
+ hydrate(<Coverage />, root);
} else {
- render(<Cov />, root);
+ render(<Coverage />, root);
}
diff --git a/packages/dev-tools-pages/ts/pages/profiler.tsx b/packages/dev-tools-pages/ts/pages/profiler.tsx
index 16ac9088e..0bc4efa45 100644
--- a/packages/dev-tools-pages/ts/pages/profiler.tsx
+++ b/packages/dev-tools-pages/ts/pages/profiler.tsx
@@ -6,6 +6,7 @@ import { context } from 'ts/context/profiler';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
+import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -66,29 +67,57 @@ const Profiler: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
- Use <a href="#">ganache-cli</a> as a backing node.
+ Use{' '}
+ <a href="https://github.com/ethereum/go-ethereum" target="_blank">
+ Geth
+ </a>{' '}
+ as a backing node. We recommend using our{' '}
+ <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
+ Devnet Docker container
+ </a>{' '}
+ which sets up a Geth node for testing purposes.{' '}
+ <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
+ Ganache support is a work in progress.
+ </a>
</ListItem>
<ListItem>
- Understand and use <a href="#">web3-provider-engine</a>.
+ Understand and use{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ web3-provider-engine
+ </a>
+ .
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
- <Code>npm install @0x/sol-trace --save</Code>
+ <Code canCopy={true}>npm install @0x/sol-trace --save</Code>
</Breakout>
<p>
- Sol-trace is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
- Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
+ Sol-trace is a subprovider that needs to be prepended to your{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ provider engine
+ </a>
+ . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
- <a href="#">Sol-compiler</a> and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
- <a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
+ <a href="https://sol-compiler.com" target="_blank">
+ Sol-compiler
+ </a>{' '}
+ and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
+ <a href="https://truffleframework.com/truffle" target="_blank">
+ Truffle framework
+ </a>{' '}
+ (Also see our{' '}
+ <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
+ Truffle example project
+ </a>{' '}
+ for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -96,16 +125,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
-const solcVersion = '0.4.24';
+const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -115,25 +144,26 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
- <InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
+ <InlineCode>ProfilerSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
-import { RevertTraceSubprovider } from '@0x/sol-coverage';
+import { ProfilerSubprovider } from '@0x/sol-profiler';
const defaultFromAddress = "..."; // Some ethereum address with test funds
-const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
+const profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress);
const providerEngine = new ProviderEngine();
-providerEngine.addProvider(revertTraceSubprovider);
+providerEngine.addProvider(profilerSubprovider);
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
providerEngine.start();`}
</Code>
</Breakout>
</ContentBlock>
</Content>
+ <CallToAction />
</Base>
);
diff --git a/packages/dev-tools-pages/ts/pages/trace.tsx b/packages/dev-tools-pages/ts/pages/trace.tsx
index cc34e0fbe..cd6180fb9 100644
--- a/packages/dev-tools-pages/ts/pages/trace.tsx
+++ b/packages/dev-tools-pages/ts/pages/trace.tsx
@@ -6,6 +6,7 @@ import { context } from 'ts/context/trace';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
+import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -36,29 +37,57 @@ const Trace: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
- Use <a href="#">ganache-cli</a> as a backing node.
+ Use{' '}
+ <a href="https://github.com/ethereum/go-ethereum" target="_blank">
+ Geth
+ </a>{' '}
+ as a backing node. We recommend using our{' '}
+ <a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
+ Devnet Docker container
+ </a>{' '}
+ which sets up a Geth node for testing purposes.{' '}
+ <a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
+ Ganache support is a work in progress.
+ </a>
</ListItem>
<ListItem>
- Understand and use <a href="#">web3-provider-engine</a>.
+ Understand and use{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ web3-provider-engine
+ </a>
+ .
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
- <Code>npm install @0x/sol-trace --save</Code>
+ <Code canCopy={true}>npm install @0x/sol-trace --save</Code>
</Breakout>
<p>
- Sol-trace is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
- Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
+ Sol-trace is a subprovider that needs to be prepended to your{' '}
+ <a href="https://github.com/MetaMask/provider-engine" target="_blank">
+ provider engine
+ </a>
+ . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
- <a href="#">Sol-compiler</a> and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
- <a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
+ <a href="https://sol-compiler.com" target="_blank">
+ Sol-compiler
+ </a>{' '}
+ and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
+ <a href="https://truffleframework.com/truffle" target="_blank">
+ Truffle framework
+ </a>{' '}
+ (Also see our{' '}
+ <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
+ Truffle example project
+ </a>{' '}
+ for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -66,16 +95,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
-const solcVersion = '0.4.24';
+const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -85,13 +114,13 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
- <InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
+ <InlineCode>revertTraceSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
- <Code language="javascript">
+ <Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
-import { RevertTraceSubprovider } from '@0x/sol-coverage';
+import { RevertTraceSubprovider } from '@0x/sol-trace';
const defaultFromAddress = "..."; // Some ethereum address with test funds
const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
@@ -102,8 +131,10 @@ providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'})
providerEngine.start();`}
</Code>
</Breakout>
+ <p>Stack traces will now be printed whenever your contracts revert!</p>
</ContentBlock>
</Content>
+ <CallToAction />
</Base>
);
diff --git a/packages/dev-tools-pages/webpack.config.js b/packages/dev-tools-pages/webpack.config.js
index 640297770..ef2f98cf2 100644
--- a/packages/dev-tools-pages/webpack.config.js
+++ b/packages/dev-tools-pages/webpack.config.js
@@ -3,7 +3,6 @@ const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');
-const childProcess = require('child_process');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
@@ -12,7 +11,7 @@ const pages = require('./pages');
const config = {
entry: {
compiler: './ts/pages/compiler.tsx',
- cov: './ts/pages/cov.tsx',
+ coverage: './ts/pages/coverage.tsx',
profiler: './ts/pages/profiler.tsx',
trace: './ts/pages/trace.tsx',
},
diff --git a/packages/dev-utils/CHANGELOG.json b/packages/dev-utils/CHANGELOG.json
index 85189d70b..d05e41d2d 100644
--- a/packages/dev-utils/CHANGELOG.json
+++ b/packages/dev-utils/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.24",
"changes": [
diff --git a/packages/devnet/docker-compose.yml b/packages/devnet/docker-compose.yml
new file mode 100644
index 000000000..1c1e7ca75
--- /dev/null
+++ b/packages/devnet/docker-compose.yml
@@ -0,0 +1,8 @@
+version: '3'
+services:
+ devnet:
+ image: 0x-devnet:latest
+ build:
+ context: .
+ ports:
+ - 8501:8501
diff --git a/packages/devnet/genesis.json b/packages/devnet/genesis.json
index 03dc5d623..073672dd9 100644
--- a/packages/devnet/genesis.json
+++ b/packages/devnet/genesis.json
@@ -8,7 +8,7 @@
"eip158Block": 3,
"byzantiumBlock": 4,
"clique": {
- "period": 1,
+ "period": 0,
"epoch": 30000
}
},
diff --git a/packages/devnet/run.sh b/packages/devnet/run.sh
index dea243396..6000813f0 100755
--- a/packages/devnet/run.sh
+++ b/packages/devnet/run.sh
@@ -15,6 +15,7 @@ mkdir -p /var/log
--rpc \
--rpcaddr '0.0.0.0' \
--rpcport 8501 \
+ --rpcvhosts '*' \
--rpcapi 'personal,db,eth,net,web3,txpool,miner,debug' \
--networkid 50 \
--gasprice '2000000000' \
diff --git a/packages/ethereum-types/CHANGELOG.json b/packages/ethereum-types/CHANGELOG.json
index 6265e01a1..c106d43a9 100644
--- a/packages/ethereum-types/CHANGELOG.json
+++ b/packages/ethereum-types/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.1.6",
"changes": [
diff --git a/packages/ethereum-types/package.json b/packages/ethereum-types/package.json
index 953b323c6..bd3748058 100644
--- a/packages/ethereum-types/package.json
+++ b/packages/ethereum-types/package.json
@@ -37,7 +37,7 @@
},
"dependencies": {
"@types/node": "*",
- "bignumber.js": "~4.1.0"
+ "bignumber.js": "~8.0.2"
},
"publishConfig": {
"access": "public"
diff --git a/packages/fill-scenarios/CHANGELOG.json b/packages/fill-scenarios/CHANGELOG.json
index d8f2591a4..beffdd097 100644
--- a/packages/fill-scenarios/CHANGELOG.json
+++ b/packages/fill-scenarios/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.1.2",
"changes": [
diff --git a/packages/instant/CHANGELOG.json b/packages/instant/CHANGELOG.json
index 537670584..c7348c3c0 100644
--- a/packages/instant/CHANGELOG.json
+++ b/packages/instant/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"version": "2.0.0",
"changes": [
{
diff --git a/packages/instant/README.md b/packages/instant/README.md
index 8832e562d..f09c4776c 100644
--- a/packages/instant/README.md
+++ b/packages/instant/README.md
@@ -8,11 +8,11 @@ Check out a live sample integration [here](https://www.rexrelay.com/instant).
## Installation
-The package is available as a UMD module named `zeroExInstant` at https://instant.0xproject.com/instant.js.
+The package is available as a UMD module named `zeroExInstant` at https://instant.0x.org/instant.js.
```html
<head>
- <script type="text/javascript" src="https://instant.0xproject.com/instant.js" charset="utf-8"></script>
+ <script type="text/javascript" src="https://instant.0x.org/instant.js" charset="utf-8"></script>
</head>
<body>
<div id="zeroExInstantContainer"></div>
@@ -47,7 +47,7 @@ To build and deploy to this bundle, run
yarn deploy_staging
```
-Finally, we have our live production bundle that is only meant to be updated with stable, polished releases: https://instant.0xproject.com/instant.js
+Finally, we have our live production bundle that is only meant to be updated with stable, polished releases: https://instant.0x.org/instant.js
To build and deploy to this bundle, run
diff --git a/packages/instant/package.json b/packages/instant/package.json
index 36409ef3d..86fac9afe 100644
--- a/packages/instant/package.json
+++ b/packages/instant/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/instant",
- "version": "1.0.7",
+ "version": "1.0.8",
"engines": {
"node": ">=6.12"
},
@@ -42,7 +42,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/packages/instant/README.md",
"dependencies": {
"@0x/assert": "^1.0.23",
- "@0x/asset-buyer": "^4.0.1",
+ "@0x/asset-buyer": "^4.0.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
"@0x/subproviders": "^2.1.11",
diff --git a/packages/instant/src/components/order_details.tsx b/packages/instant/src/components/order_details.tsx
index 4db20b13e..3ded50652 100644
--- a/packages/instant/src/components/order_details.tsx
+++ b/packages/instant/src/components/order_details.tsx
@@ -77,7 +77,7 @@ export class OrderDetails extends React.PureComponent<OrderDetailsProps> {
}
private _hadErrorFetchingUsdPrice(): boolean {
- return this.props.ethUsdPrice ? this.props.ethUsdPrice.equals(BIG_NUMBER_ZERO) : false;
+ return this.props.ethUsdPrice ? this.props.ethUsdPrice.isEqualTo(BIG_NUMBER_ZERO) : false;
}
private _totalCostSecondaryValue(): React.ReactNode {
@@ -156,7 +156,7 @@ export class OrderDetails extends React.PureComponent<OrderDetailsProps> {
return !_.isUndefined(assetTotalInWei) &&
!_.isUndefined(selectedAssetUnitAmount) &&
!selectedAssetUnitAmount.eq(BIG_NUMBER_ZERO)
- ? assetTotalInWei.div(selectedAssetUnitAmount).ceil()
+ ? assetTotalInWei.div(selectedAssetUnitAmount).integerValue(BigNumber.ROUND_CEIL)
: undefined;
}
diff --git a/packages/instant/src/constants.ts b/packages/instant/src/constants.ts
index bfd9e9098..d407925a3 100644
--- a/packages/instant/src/constants.ts
+++ b/packages/instant/src/constants.ts
@@ -21,7 +21,7 @@ export const NPM_PACKAGE_VERSION = process.env.NPM_PACKAGE_VERSION;
export const DEFAULT_UNKOWN_ASSET_NAME = '???';
export const ACCOUNT_UPDATE_INTERVAL_TIME_MS = ONE_SECOND_MS * 5;
export const BUY_QUOTE_UPDATE_INTERVAL_TIME_MS = ONE_SECOND_MS * 15;
-export const DEFAULT_GAS_PRICE = GWEI_IN_WEI.mul(6);
+export const DEFAULT_GAS_PRICE = GWEI_IN_WEI.multipliedBy(6);
export const DEFAULT_ESTIMATED_TRANSACTION_TIME_MS = ONE_MINUTE_MS * 2;
export const MAGIC_TRIGGER_ERROR_INPUT = '0€';
export const MAGIC_TRIGGER_ERROR_MESSAGE = 'Triggered error';
diff --git a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
index cb9df527e..4b9993332 100644
--- a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
+++ b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
@@ -84,7 +84,7 @@ const mapDispatchToProps = (
// reset our buy state
dispatch(actions.setBuyOrderStateNone());
- if (!_.isUndefined(value) && value.greaterThan(0) && !_.isUndefined(asset)) {
+ if (!_.isUndefined(value) && value.isGreaterThan(0) && !_.isUndefined(asset)) {
// even if it's debounced, give them the illusion it's loading
dispatch(actions.setQuoteRequestStatePending());
// tslint:disable-next-line:no-floating-promises
diff --git a/packages/instant/src/index.umd.ts b/packages/instant/src/index.umd.ts
index d172f4145..0acf3f2ad 100644
--- a/packages/instant/src/index.umd.ts
+++ b/packages/instant/src/index.umd.ts
@@ -1,3 +1,6 @@
+import { AssetBuyer, BigNumber } from '@0x/asset-buyer';
+import { assetDataUtils } from '@0x/order-utils';
+import { Provider } from 'ethereum-types';
import * as _ from 'lodash';
import * as React from 'react';
import * as ReactDOM from 'react-dom';
@@ -9,9 +12,12 @@ import {
INJECTED_DIV_ID,
NPM_PACKAGE_VERSION,
} from './constants';
+import { assetMetaDataMap } from './data/asset_meta_data_map';
import { ZeroExInstantOverlay, ZeroExInstantOverlayProps } from './index';
+import { Network, OrderSource } from './types';
import { analytics } from './util/analytics';
import { assert } from './util/assert';
+import { providerFactory } from './util/provider_factory';
import { util } from './util/util';
const isInstantRendered = (): boolean => !!document.getElementById(INJECTED_DIV_ID);
@@ -122,6 +128,42 @@ export const render = (config: ZeroExInstantConfig, selector: string = DEFAULT_Z
window.onpopstate = onPopStateHandler;
};
+export const assetDataForERC20TokenAddress = (tokenAddress: string): string => {
+ assert.isETHAddressHex('tokenAddress', tokenAddress);
+ return assetDataUtils.encodeERC20AssetData(tokenAddress);
+};
+
+export const hasMetaDataForAssetData = (assetData: string): boolean => {
+ assert.isHexString('assetData', assetData);
+ return assetMetaDataMap[assetData] !== undefined;
+};
+
+export const hasLiquidityForAssetDataAsync = async (
+ assetData: string,
+ orderSource: OrderSource,
+ networkId: Network = Network.Mainnet,
+ provider?: Provider,
+): Promise<boolean> => {
+ assert.isHexString('assetData', assetData);
+ assert.isValidOrderSource('orderSource', orderSource);
+ assert.isNumber('networkId', networkId);
+
+ if (provider !== undefined) {
+ assert.isWeb3Provider('provider', provider);
+ }
+
+ const bestProvider: Provider = provider || providerFactory.getFallbackNoSigningProvider(networkId);
+
+ const assetBuyerOptions = { networkId };
+
+ const assetBuyer = _.isString(orderSource)
+ ? AssetBuyer.getAssetBuyerForStandardRelayerAPIUrl(bestProvider, orderSource, assetBuyerOptions)
+ : AssetBuyer.getAssetBuyerForProvidedOrders(bestProvider, orderSource, assetBuyerOptions);
+
+ const liquidity = await assetBuyer.getLiquidityForAssetDataAsync(assetData);
+ return liquidity.ethValueAvailableInWei.gt(new BigNumber(0));
+};
+
// Write version info to the exported object for debugging
export const GIT_SHA = GIT_SHA_FROM_CONSTANT;
export const NPM_VERSION = NPM_PACKAGE_VERSION;
diff --git a/packages/instant/src/redux/async_data.ts b/packages/instant/src/redux/async_data.ts
index 884ab103d..f20fe319f 100644
--- a/packages/instant/src/redux/async_data.ts
+++ b/packages/instant/src/redux/async_data.ts
@@ -99,7 +99,7 @@ export const asyncData = {
if (
!_.isUndefined(selectedAssetUnitAmount) &&
!_.isUndefined(selectedAsset) &&
- selectedAssetUnitAmount.greaterThan(BIG_NUMBER_ZERO) &&
+ selectedAssetUnitAmount.isGreaterThan(BIG_NUMBER_ZERO) &&
buyOrderState.processState === OrderProcessState.None &&
selectedAsset.metaData.assetProxyId === AssetProxyId.ERC20
) {
diff --git a/packages/instant/src/util/asset.ts b/packages/instant/src/util/asset.ts
index 709561dbc..b5c97913d 100644
--- a/packages/instant/src/util/asset.ts
+++ b/packages/instant/src/util/asset.ts
@@ -114,15 +114,18 @@ export const assetUtils = {
const assetName = assetUtils.bestNameForAsset(asset, 'of this asset');
if (
error instanceof InsufficientAssetLiquidityError &&
- error.amountAvailableToFill.greaterThan(BIG_NUMBER_ZERO)
+ error.amountAvailableToFill.isGreaterThan(BIG_NUMBER_ZERO)
) {
const unitAmountAvailableToFill = Web3Wrapper.toUnitAmount(
error.amountAvailableToFill,
asset.metaData.decimals,
);
- const roundedUnitAmountAvailableToFill = unitAmountAvailableToFill.round(2, BigNumber.ROUND_DOWN);
+ const roundedUnitAmountAvailableToFill = unitAmountAvailableToFill.decimalPlaces(
+ 2,
+ BigNumber.ROUND_DOWN,
+ );
- if (roundedUnitAmountAvailableToFill.greaterThan(BIG_NUMBER_ZERO)) {
+ if (roundedUnitAmountAvailableToFill.isGreaterThan(BIG_NUMBER_ZERO)) {
return `There are only ${roundedUnitAmountAvailableToFill} ${assetName} available to buy`;
}
}
diff --git a/packages/instant/src/util/format.ts b/packages/instant/src/util/format.ts
index 4adb63e21..61aeb839f 100644
--- a/packages/instant/src/util/format.ts
+++ b/packages/instant/src/util/format.ts
@@ -25,16 +25,16 @@ export const format = {
if (_.isUndefined(ethUnitAmount)) {
return defaultText;
}
- let roundedAmount = ethUnitAmount.round(decimalPlaces).toDigits(decimalPlaces);
+ let roundedAmount = ethUnitAmount.decimalPlaces(decimalPlaces).precision(decimalPlaces);
- if (roundedAmount.eq(BIG_NUMBER_ZERO) && ethUnitAmount.greaterThan(BIG_NUMBER_ZERO)) {
+ if (roundedAmount.eq(BIG_NUMBER_ZERO) && ethUnitAmount.isGreaterThan(BIG_NUMBER_ZERO)) {
// Sometimes for small ETH amounts (i.e. 0.000045) the amount rounded to 4 decimalPlaces is 0
// If that is the case, show to 1 significant digit
roundedAmount = new BigNumber(ethUnitAmount.toPrecision(1));
}
const displayAmount =
- roundedAmount.greaterThan(BIG_NUMBER_ZERO) && roundedAmount.lessThan(minUnitAmountToDisplay)
+ roundedAmount.isGreaterThan(BIG_NUMBER_ZERO) && roundedAmount.isLessThan(minUnitAmountToDisplay)
? `< ${minUnitAmountToDisplay.toString()}`
: roundedAmount.toString();
@@ -62,7 +62,7 @@ export const format = {
if (_.isUndefined(ethUnitAmount) || _.isUndefined(ethUsdPrice)) {
return defaultText;
}
- const rawUsdPrice = ethUnitAmount.mul(ethUsdPrice);
+ const rawUsdPrice = ethUnitAmount.multipliedBy(ethUsdPrice);
const roundedUsdPrice = rawUsdPrice.toFixed(decimalPlaces);
if (roundedUsdPrice === '0.00' && rawUsdPrice.gt(BIG_NUMBER_ZERO)) {
return '<$0.01';
diff --git a/packages/instant/src/util/gas_price_estimator.ts b/packages/instant/src/util/gas_price_estimator.ts
index 332c8d00a..9792b60ba 100644
--- a/packages/instant/src/util/gas_price_estimator.ts
+++ b/packages/instant/src/util/gas_price_estimator.ts
@@ -35,7 +35,7 @@ const fetchFastAmountInWeiAsync = async (): Promise<GasInfo> => {
const gasPriceInGwei = new BigNumber(gasInfo.fast / 10);
// Time is in minutes
const estimatedTimeMs = gasInfo.fastWait * 60 * 1000; // Minutes to MS
- return { gasPriceInWei: gasPriceInGwei.mul(GWEI_IN_WEI), estimatedTimeMs };
+ return { gasPriceInWei: gasPriceInGwei.multipliedBy(GWEI_IN_WEI), estimatedTimeMs };
};
export class GasPriceEstimator {
diff --git a/packages/instant/src/util/maybe_big_number.ts b/packages/instant/src/util/maybe_big_number.ts
index 9d3746e10..f48473389 100644
--- a/packages/instant/src/util/maybe_big_number.ts
+++ b/packages/instant/src/util/maybe_big_number.ts
@@ -18,7 +18,7 @@ export const maybeBigNumberUtil = {
},
areMaybeBigNumbersEqual: (val1: Maybe<BigNumber>, val2: Maybe<BigNumber>): boolean => {
if (!_.isUndefined(val1) && !_.isUndefined(val2)) {
- return val1.equals(val2);
+ return val1.isEqualTo(val2);
}
return _.isUndefined(val1) && _.isUndefined(val2);
},
diff --git a/packages/json-schemas/CHANGELOG.json b/packages/json-schemas/CHANGELOG.json
index 1388b4dca..66de84299 100644
--- a/packages/json-schemas/CHANGELOG.json
+++ b/packages/json-schemas/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "2.1.7",
"changes": [
diff --git a/packages/metacoin/package.json b/packages/metacoin/package.json
index accdd2949..3b082f075 100644
--- a/packages/metacoin/package.json
+++ b/packages/metacoin/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/metacoin",
- "version": "0.0.35",
+ "version": "0.0.36",
"engines": {
"node": ">=6.12"
},
@@ -32,9 +32,9 @@
"@0x/abi-gen": "^1.0.22",
"@0x/abi-gen-templates": "^1.0.2",
"@0x/base-contract": "^3.0.13",
- "@0x/sol-coverage": "^1.0.2",
- "@0x/sol-profiler": "^1.0.2",
- "@0x/sol-trace": "^1.0.2",
+ "@0x/sol-coverage": "^1.0.3",
+ "@0x/sol-profiler": "^1.0.3",
+ "@0x/sol-trace": "^1.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
"@0x/types": "^1.5.2",
@@ -53,7 +53,7 @@
"@0x/sol-compiler": "^2.0.2",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2",
diff --git a/packages/migrations/CHANGELOG.json b/packages/migrations/CHANGELOG.json
index 5962a9886..64ae94b14 100644
--- a/packages/migrations/CHANGELOG.json
+++ b/packages/migrations/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"version": "2.4.0",
"changes": [
{
diff --git a/packages/monorepo-scripts/CHANGELOG.json b/packages/monorepo-scripts/CHANGELOG.json
index cebe7ec72..a71bfbd6d 100644
--- a/packages/monorepo-scripts/CHANGELOG.json
+++ b/packages/monorepo-scripts/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"version": "1.0.6",
"changes": [
{
diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json
index e18aa1d2f..187a80c93 100644
--- a/packages/monorepo-scripts/package.json
+++ b/packages/monorepo-scripts/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0x/monorepo-scripts",
- "version": "1.0.18",
+ "version": "1.0.19",
"engines": {
"node": ">=6.12"
},
diff --git a/packages/monorepo-scripts/src/utils/utils.ts b/packages/monorepo-scripts/src/utils/utils.ts
index 95b187cc2..28c5658f3 100644
--- a/packages/monorepo-scripts/src/utils/utils.ts
+++ b/packages/monorepo-scripts/src/utils/utils.ts
@@ -106,8 +106,10 @@ export const utils = {
return nextVersionIfValid;
},
async getRemoteGitTagsAsync(): Promise<string[]> {
+ const TEN_MEGA_BYTES = 1024 * 1024 * 10; // tslint:disable-line custom-no-magic-numbers
const result = await execAsync(`git ls-remote --tags`, {
cwd: constants.monorepoRootPath,
+ maxBuffer: TEN_MEGA_BYTES,
});
const tagsString = result.stdout;
const tagOutputs: string[] = tagsString.split('\n');
diff --git a/packages/order-utils/CHANGELOG.json b/packages/order-utils/CHANGELOG.json
index ace3656c4..08d88da5b 100644
--- a/packages/order-utils/CHANGELOG.json
+++ b/packages/order-utils/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.1.2",
"changes": [
diff --git a/packages/order-utils/package.json b/packages/order-utils/package.json
index bdcbd2dfc..7a4d4aa84 100644
--- a/packages/order-utils/package.json
+++ b/packages/order-utils/package.json
@@ -41,7 +41,7 @@
"@types/lodash": "4.14.104",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
diff --git a/packages/order-utils/src/crypto.ts b/packages/order-utils/src/crypto.ts
index 0f1504a72..8b835ff48 100644
--- a/packages/order-utils/src/crypto.ts
+++ b/packages/order-utils/src/crypto.ts
@@ -1,3 +1,4 @@
+import { BigNumber } from '@0x/utils';
import BN = require('bn.js');
import ABI = require('ethereumjs-abi');
import ethUtil = require('ethereumjs-util');
@@ -24,7 +25,7 @@ export const crypto = {
const isNumber = _.isFinite(arg);
if (isNumber) {
argTypes.push('uint8');
- } else if (arg.isBigNumber) {
+ } else if (BigNumber.isBigNumber(arg)) {
argTypes.push('uint256');
const base = 10;
args[i] = new BN(arg.toString(base), base);
diff --git a/packages/order-utils/src/exchange_transfer_simulator.ts b/packages/order-utils/src/exchange_transfer_simulator.ts
index 06621fd9e..922ae8e17 100644
--- a/packages/order-utils/src/exchange_transfer_simulator.ts
+++ b/packages/order-utils/src/exchange_transfer_simulator.ts
@@ -88,14 +88,14 @@ export class ExchangeTransferSimulator {
}
const balance = await this._store.getBalanceAsync(assetData, from);
const proxyAllowance = await this._store.getProxyAllowanceAsync(assetData, from);
- if (proxyAllowance.lessThan(amountInBaseUnits)) {
+ if (proxyAllowance.isLessThan(amountInBaseUnits)) {
ExchangeTransferSimulator._throwValidationError(
FailureReason.ProxyAllowance,
tradeSide,
transferType,
);
}
- if (balance.lessThan(amountInBaseUnits)) {
+ if (balance.isLessThan(amountInBaseUnits)) {
ExchangeTransferSimulator._throwValidationError(FailureReason.Balance, tradeSide, transferType);
}
await this._decreaseProxyAllowanceAsync(assetData, from, amountInBaseUnits);
diff --git a/packages/order-utils/src/market_utils.ts b/packages/order-utils/src/market_utils.ts
index fa32f1413..9042551fa 100644
--- a/packages/order-utils/src/market_utils.ts
+++ b/packages/order-utils/src/market_utils.ts
@@ -52,7 +52,7 @@ export const marketUtils = {
const result = _.reduce(
orders,
({ resultOrders, remainingFillAmount, ordersRemainingFillableMakerAssetAmounts }, order, index) => {
- if (remainingFillAmount.lessThanOrEqualTo(constants.ZERO_AMOUNT)) {
+ if (remainingFillAmount.isLessThanOrEqualTo(constants.ZERO_AMOUNT)) {
return {
resultOrders,
remainingFillAmount: constants.ZERO_AMOUNT,
@@ -137,7 +137,7 @@ export const marketUtils = {
(accFees, order, index) => {
const makerAssetAmountAvailable = remainingFillableMakerAssetAmounts[index];
const feeToFillMakerAssetAmountAvailable = makerAssetAmountAvailable
- .mul(order.takerFee)
+ .multipliedBy(order.takerFee)
.dividedToIntegerBy(order.makerAssetAmount);
return accFees.plus(feeToFillMakerAssetAmountAvailable);
},
diff --git a/packages/order-utils/src/order_state_utils.ts b/packages/order-utils/src/order_state_utils.ts
index 389419587..430178b5d 100644
--- a/packages/order-utils/src/order_state_utils.ts
+++ b/packages/order-utils/src/order_state_utils.ts
@@ -214,10 +214,10 @@ export class OrderStateUtils {
const remainingFillableTakerAssetAmountGivenTakersStatus = orderRelevantTakerState.remainingFillableAssetAmount;
// The min of these two in the actualy max fillable by either party
- const fillableTakerAssetAmount = BigNumber.min([
+ const fillableTakerAssetAmount = BigNumber.min(
remainingFillableTakerAssetAmountGivenMakersStatus,
remainingFillableTakerAssetAmountGivenTakersStatus,
- ]);
+ );
return fillableTakerAssetAmount;
}
@@ -260,8 +260,8 @@ export class OrderStateUtils {
traderAddress,
);
- const transferrableTraderAssetAmount = BigNumber.min([traderProxyAllowance, traderBalance]);
- const transferrableFeeAssetAmount = BigNumber.min([traderFeeProxyAllowance, traderFeeBalance]);
+ const transferrableTraderAssetAmount = BigNumber.min(traderProxyAllowance, traderBalance);
+ const transferrableFeeAssetAmount = BigNumber.min(traderFeeProxyAllowance, traderFeeBalance);
const orderHash = orderHashUtils.getOrderHashHex(signedOrder);
const filledTakerAssetAmount = await this._orderFilledCancelledFetcher.getFilledTakerAmountAsync(orderHash);
@@ -312,7 +312,7 @@ export class OrderStateUtils {
const tokenAddress = decodedAssetData.tokenAddress;
balances[tokenAddress] = _.isUndefined(initialBalances[tokenAddress])
? balance
- : balances[tokenAddress].add(balance);
+ : balances[tokenAddress].plus(balance);
} else if (assetDataUtils.isMultiAssetData(decodedAssetData)) {
for (const assetDataElement of decodedAssetData.nestedAssetData) {
balances = await this._getAssetBalancesAsync(assetDataElement, traderAddress, balances);
@@ -335,7 +335,7 @@ export class OrderStateUtils {
const tokenAddress = decodedAssetData.tokenAddress;
allowances[tokenAddress] = _.isUndefined(initialAllowances[tokenAddress])
? allowance
- : allowances[tokenAddress].add(allowance);
+ : allowances[tokenAddress].plus(allowance);
} else if (assetDataUtils.isMultiAssetData(decodedAssetData)) {
for (const assetDataElement of decodedAssetData.nestedAssetData) {
allowances = await this._getAssetBalancesAsync(assetDataElement, traderAddress, allowances);
diff --git a/packages/order-utils/src/order_validation_utils.ts b/packages/order-utils/src/order_validation_utils.ts
index ae4291ea8..95215d918 100644
--- a/packages/order-utils/src/order_validation_utils.ts
+++ b/packages/order-utils/src/order_validation_utils.ts
@@ -31,13 +31,13 @@ export class OrderValidationUtils {
if (denominator.eq(0)) {
throw new Error('denominator cannot be 0');
}
- const remainder = target.mul(numerator).mod(denominator);
+ const remainder = target.multipliedBy(numerator).mod(denominator);
if (remainder.eq(0)) {
return false; // no rounding error
}
// tslint:disable-next-line:custom-no-magic-numbers
- const errPercentageTimes1000000 = remainder.mul(1000000).div(numerator.mul(target));
+ const errPercentageTimes1000000 = remainder.multipliedBy(1000000).div(numerator.multipliedBy(target));
// tslint:disable-next-line:custom-no-magic-numbers
const isError = errPercentageTimes1000000.gt(1000);
return isError;
@@ -108,7 +108,7 @@ export class OrderValidationUtils {
}
private static _validateOrderNotExpiredOrThrow(expirationTimeSeconds: BigNumber): void {
const currentUnixTimestampSec = utils.getCurrentUnixTimestampSec();
- if (expirationTimeSeconds.lessThan(currentUnixTimestampSec)) {
+ if (expirationTimeSeconds.isLessThan(currentUnixTimestampSec)) {
throw new Error(RevertReason.OrderUnfillable);
}
}
@@ -216,7 +216,7 @@ export class OrderValidationUtils {
}
OrderValidationUtils._validateOrderNotExpiredOrThrow(signedOrder.expirationTimeSeconds);
const remainingTakerTokenAmount = signedOrder.takerAssetAmount.minus(filledTakerTokenAmount);
- const desiredFillTakerTokenAmount = remainingTakerTokenAmount.lessThan(fillTakerAssetAmount)
+ const desiredFillTakerTokenAmount = remainingTakerTokenAmount.isLessThan(fillTakerAssetAmount)
? remainingTakerTokenAmount
: fillTakerAssetAmount;
try {
diff --git a/packages/order-utils/src/rate_utils.ts b/packages/order-utils/src/rate_utils.ts
index 416e00c67..dacdbd5a2 100644
--- a/packages/order-utils/src/rate_utils.ts
+++ b/packages/order-utils/src/rate_utils.ts
@@ -22,7 +22,7 @@ export const rateUtils = {
feeRate.gte(constants.ZERO_AMOUNT),
`Expected feeRate: ${feeRate} to be greater than or equal to 0`,
);
- const takerAssetAmountNeededToPayForFees = order.takerFee.mul(feeRate);
+ const takerAssetAmountNeededToPayForFees = order.takerFee.multipliedBy(feeRate);
const totalTakerAssetAmount = takerAssetAmountNeededToPayForFees.plus(order.takerAssetAmount);
const rate = totalTakerAssetAmount.div(order.makerAssetAmount);
return rate;
@@ -35,9 +35,9 @@ export const rateUtils = {
*/
getFeeAdjustedRateOfFeeOrder(feeOrder: Order): BigNumber {
assert.doesConformToSchema('feeOrder', feeOrder, schemas.orderSchema);
- const zrxAmountAfterFees = feeOrder.makerAssetAmount.sub(feeOrder.takerFee);
+ const zrxAmountAfterFees = feeOrder.makerAssetAmount.minus(feeOrder.takerFee);
assert.assert(
- zrxAmountAfterFees.greaterThan(constants.ZERO_AMOUNT),
+ zrxAmountAfterFees.isGreaterThan(constants.ZERO_AMOUNT),
`Expected takerFee: ${JSON.stringify(feeOrder.takerFee)} to be less than makerAssetAmount: ${JSON.stringify(
feeOrder.makerAssetAmount,
)}`,
diff --git a/packages/order-utils/src/remaining_fillable_calculator.ts b/packages/order-utils/src/remaining_fillable_calculator.ts
index 052eafa1d..92ffc8e80 100644
--- a/packages/order-utils/src/remaining_fillable_calculator.ts
+++ b/packages/order-utils/src/remaining_fillable_calculator.ts
@@ -39,15 +39,15 @@ export class RemainingFillableCalculator {
private _hasSufficientFundsForFeeAndTransferAmount(): boolean {
if (this._isTraderAssetZRX) {
const totalZRXTransferAmountRequired = this._remainingOrderAssetAmount.plus(this._remainingOrderFeeAmount);
- const hasSufficientFunds = this._transferrableAssetAmount.greaterThanOrEqualTo(
+ const hasSufficientFunds = this._transferrableAssetAmount.isGreaterThanOrEqualTo(
totalZRXTransferAmountRequired,
);
return hasSufficientFunds;
} else {
- const hasSufficientFundsForTransferAmount = this._transferrableAssetAmount.greaterThanOrEqualTo(
+ const hasSufficientFundsForTransferAmount = this._transferrableAssetAmount.isGreaterThanOrEqualTo(
this._remainingOrderAssetAmount,
);
- const hasSufficientFundsForFeeAmount = this._transferrableFeeAmount.greaterThanOrEqualTo(
+ const hasSufficientFundsForFeeAmount = this._transferrableFeeAmount.isGreaterThanOrEqualTo(
this._remainingOrderFeeAmount,
);
const hasSufficientFunds = hasSufficientFundsForTransferAmount && hasSufficientFundsForFeeAmount;
diff --git a/packages/order-utils/src/salt.ts b/packages/order-utils/src/salt.ts
index ff47ab5d2..95df66c99 100644
--- a/packages/order-utils/src/salt.ts
+++ b/packages/order-utils/src/salt.ts
@@ -13,6 +13,6 @@ export function generatePseudoRandomSalt(): BigNumber {
// Source: https://mikemcl.github.io/bignumber.js/#random
const randomNumber = BigNumber.random(MAX_DIGITS_IN_UNSIGNED_256_INT);
const factor = new BigNumber(10).pow(MAX_DIGITS_IN_UNSIGNED_256_INT - 1);
- const salt = randomNumber.times(factor).round();
+ const salt = randomNumber.times(factor).integerValue();
return salt;
}
diff --git a/packages/order-utils/src/utils.ts b/packages/order-utils/src/utils.ts
index 6b2261001..64195dbed 100644
--- a/packages/order-utils/src/utils.ts
+++ b/packages/order-utils/src/utils.ts
@@ -10,13 +10,13 @@ export const utils = {
},
getCurrentUnixTimestampSec(): BigNumber {
const milisecondsInSecond = 1000;
- return new BigNumber(Date.now() / milisecondsInSecond).round();
+ return new BigNumber(Date.now() / milisecondsInSecond).integerValue();
},
getPartialAmountFloor(numerator: BigNumber, denominator: BigNumber, target: BigNumber): BigNumber {
const fillMakerTokenAmount = numerator
- .mul(target)
+ .multipliedBy(target)
.div(denominator)
- .round(0);
+ .integerValue(0);
return fillMakerTokenAmount;
},
};
diff --git a/packages/order-utils/test/remaining_fillable_calculator_test.ts b/packages/order-utils/test/remaining_fillable_calculator_test.ts
index c55a76def..affad8f1c 100644
--- a/packages/order-utils/test/remaining_fillable_calculator_test.ts
+++ b/packages/order-utils/test/remaining_fillable_calculator_test.ts
@@ -162,7 +162,7 @@ describe('RemainingFillableCalculator', () => {
remainingMakeAssetAmount,
);
const calculatedFillableAmount = calculator.computeRemainingFillable();
- expect(calculatedFillableAmount.lessThanOrEqualTo(transferrableMakeAssetAmount)).to.be.true();
+ expect(calculatedFillableAmount.isLessThanOrEqualTo(transferrableMakeAssetAmount)).to.be.true();
expect(calculatedFillableAmount).to.be.bignumber.greaterThan(new BigNumber(0));
const orderToFeeRatio = signedOrder.makerAssetAmount.dividedBy(signedOrder.makerFee);
const calculatedFeeAmount = calculatedFillableAmount.dividedBy(orderToFeeRatio);
diff --git a/packages/order-utils/test/signature_utils_test.ts b/packages/order-utils/test/signature_utils_test.ts
index 84e5559a9..937382056 100644
--- a/packages/order-utils/test/signature_utils_test.ts
+++ b/packages/order-utils/test/signature_utils_test.ts
@@ -132,10 +132,10 @@ describe('Signature utils', () => {
});
it('generates salt in range [0..2^256)', () => {
const salt = generatePseudoRandomSalt();
- expect(salt.greaterThanOrEqualTo(0)).to.be.true();
+ expect(salt.isGreaterThanOrEqualTo(0)).to.be.true();
// tslint:disable-next-line:custom-no-magic-numbers
const twoPow256 = new BigNumber(2).pow(256);
- expect(salt.lessThan(twoPow256)).to.be.true();
+ expect(salt.isLessThan(twoPow256)).to.be.true();
});
});
describe('#ecSignOrderAsync', () => {
diff --git a/packages/order-watcher/CHANGELOG.json b/packages/order-watcher/CHANGELOG.json
index bb77feee0..585bb48e6 100644
--- a/packages/order-watcher/CHANGELOG.json
+++ b/packages/order-watcher/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "2.4.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "2.4.2",
"changes": [
diff --git a/packages/order-watcher/CHANGELOG.md b/packages/order-watcher/CHANGELOG.md
index e5f4833cd..df065866c 100644
--- a/packages/order-watcher/CHANGELOG.md
+++ b/packages/order-watcher/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v2.4.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v2.4.2 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/order-watcher/package.json b/packages/order-watcher/package.json
index dd9c59640..895c64813 100644
--- a/packages/order-watcher/package.json
+++ b/packages/order-watcher/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/order-watcher",
- "version": "2.4.2",
+ "version": "2.4.3",
"description": "An order watcher daemon that watches for order validity",
"keywords": [
"0x",
@@ -49,7 +49,7 @@
"@types/sinon": "^2.2.2",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
@@ -68,7 +68,7 @@
"@0x/base-contract": "^3.0.13",
"@0x/contract-addresses": "^2.2.0",
"@0x/contract-artifacts": "^1.3.0",
- "@0x/contract-wrappers": "^5.0.0",
+ "@0x/contract-wrappers": "^5.0.1",
"@0x/fill-scenarios": "^1.1.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
diff --git a/packages/order-watcher/src/order_watcher/expiration_watcher.ts b/packages/order-watcher/src/order_watcher/expiration_watcher.ts
index ad20a6e3f..82590efde 100644
--- a/packages/order-watcher/src/order_watcher/expiration_watcher.ts
+++ b/packages/order-watcher/src/order_watcher/expiration_watcher.ts
@@ -73,7 +73,7 @@ export class ExpirationWatcher {
break;
}
const nextOrderHashToExpire = this._orderHashByExpirationRBTree.min();
- const hasNoExpiredOrders = this._expiration[nextOrderHashToExpire].greaterThan(
+ const hasNoExpiredOrders = this._expiration[nextOrderHashToExpire].isGreaterThan(
currentUnixTimestampMs.plus(this._expirationMarginMs),
);
const isSubscriptionActive = _.isUndefined(this._orderExpirationCheckingIntervalIdIfExists);
diff --git a/packages/order-watcher/src/utils/utils.ts b/packages/order-watcher/src/utils/utils.ts
index a7d10aaf9..9c3849ff1 100644
--- a/packages/order-watcher/src/utils/utils.ts
+++ b/packages/order-watcher/src/utils/utils.ts
@@ -3,7 +3,7 @@ import { BigNumber } from '@0x/utils';
export const utils = {
getCurrentUnixTimestampSec(): BigNumber {
const milisecondsInASecond = 1000;
- return new BigNumber(Date.now() / milisecondsInASecond).round();
+ return new BigNumber(Date.now() / milisecondsInASecond).integerValue();
},
getCurrentUnixTimestampMs(): BigNumber {
return new BigNumber(Date.now());
diff --git a/packages/order-watcher/test/order_watcher_test.ts b/packages/order-watcher/test/order_watcher_test.ts
index 41dc884d5..28b564b32 100644
--- a/packages/order-watcher/test/order_watcher_test.ts
+++ b/packages/order-watcher/test/order_watcher_test.ts
@@ -317,7 +317,7 @@ describe('OrderWatcher', () => {
const validOrderState = orderState as OrderStateValid;
expect(validOrderState.orderHash).to.be.equal(orderHash);
const orderRelevantState = validOrderState.orderRelevantState;
- const remainingMakerBalance = makerBalance.sub(fillAmountInBaseUnits);
+ const remainingMakerBalance = makerBalance.minus(fillAmountInBaseUnits);
const remainingFillable = fillableAmount.minus(fillAmountInBaseUnits);
expect(orderRelevantState.remainingFillableMakerAssetAmount).to.be.bignumber.equal(
remainingFillable,
@@ -434,7 +434,7 @@ describe('OrderWatcher', () => {
);
const remainingAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(1), decimals);
- const transferAmount = makerBalance.sub(remainingAmount);
+ const transferAmount = makerBalance.minus(remainingAmount);
await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
@@ -475,7 +475,7 @@ describe('OrderWatcher', () => {
const remainingFeeAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(3), decimals);
const remainingTokenAmount = Web3Wrapper.toBaseUnitAmount(new BigNumber(4), decimals);
- const transferTokenAmount = makerFee.sub(remainingTokenAmount);
+ const transferTokenAmount = makerFee.minus(remainingTokenAmount);
await orderWatcher.addOrderAsync(signedOrder);
const callback = callbackErrorReporter.reportNodeCallbackErrors(done)((orderState: OrderState) => {
diff --git a/packages/pipeline/package.json b/packages/pipeline/package.json
index 988dd8b74..908734687 100644
--- a/packages/pipeline/package.json
+++ b/packages/pipeline/package.json
@@ -32,7 +32,7 @@
"@types/ramda": "^0.25.38",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
- "chai-bignumber": "^2.0.2",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"mocha": "^5.2.0",
"tslint": "5.11.0",
diff --git a/packages/pipeline/src/utils/transformers/number_to_bigint.ts b/packages/pipeline/src/utils/transformers/number_to_bigint.ts
index 9736d7c18..8fbd52093 100644
--- a/packages/pipeline/src/utils/transformers/number_to_bigint.ts
+++ b/packages/pipeline/src/utils/transformers/number_to_bigint.ts
@@ -19,7 +19,7 @@ export class NumberToBigIntTransformer implements ValueTransformer {
// tslint:disable-next-line:prefer-function-over-method
public from(value: string): number {
- if (new BigNumber(value).greaterThan(Number.MAX_SAFE_INTEGER)) {
+ if (new BigNumber(value).isGreaterThan(Number.MAX_SAFE_INTEGER)) {
throw new Error(
`Attempted to convert PostgreSQL bigint value (${value}) to JavaScript number type but it is too big to safely convert`,
);
diff --git a/packages/react-docs/CHANGELOG.json b/packages/react-docs/CHANGELOG.json
index 101da65c7..8b418fc11 100644
--- a/packages/react-docs/CHANGELOG.json
+++ b/packages/react-docs/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.25",
"changes": [
diff --git a/packages/react-shared/CHANGELOG.json b/packages/react-shared/CHANGELOG.json
index a6d2c4fa0..99a8779ac 100644
--- a/packages/react-shared/CHANGELOG.json
+++ b/packages/react-shared/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.1.2",
"changes": [
diff --git a/packages/react-shared/package.json b/packages/react-shared/package.json
index 47d36ca66..4be4742b0 100644
--- a/packages/react-shared/package.json
+++ b/packages/react-shared/package.json
@@ -52,7 +52,7 @@
"material-ui": "^0.20.0",
"react": "^16.5.2",
"react-dom": "^16.5.2",
- "react-highlight": "0xproject/react-highlight#699ac4d9529e33520bff4b9bd9c624d21efbba75",
+ "react-highlight": "0xproject/react-highlight#fix/react-version",
"react-markdown": "^3.2.2",
"react-router-dom": "^4.1.1",
"react-scroll": "0xproject/react-scroll#pr-330-and-replace-state",
diff --git a/packages/sol-compiler/CHANGELOG.json b/packages/sol-compiler/CHANGELOG.json
index d7dd5a454..672939a4a 100644
--- a/packages/sol-compiler/CHANGELOG.json
+++ b/packages/sol-compiler/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "2.0.2",
"changes": [
diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json
index 26c8e8833..0b53cffd5 100644
--- a/packages/sol-compiler/package.json
+++ b/packages/sol-compiler/package.json
@@ -51,7 +51,7 @@
"@types/semver": "^5.5.0",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.2",
+ "chai-bignumber": "^3.0.0",
"copyfiles": "^2.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
diff --git a/packages/sol-coverage/CHANGELOG.json b/packages/sol-coverage/CHANGELOG.json
index 8157d441e..550ca2feb 100644
--- a/packages/sol-coverage/CHANGELOG.json
+++ b/packages/sol-coverage/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.0.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.2",
"changes": [
diff --git a/packages/sol-coverage/CHANGELOG.md b/packages/sol-coverage/CHANGELOG.md
index ac09a1bbf..18c1719bf 100644
--- a/packages/sol-coverage/CHANGELOG.md
+++ b/packages/sol-coverage/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.2 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/sol-coverage/package.json b/packages/sol-coverage/package.json
index efe91cf2b..805e2e670 100644
--- a/packages/sol-coverage/package.json
+++ b/packages/sol-coverage/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/sol-coverage",
- "version": "1.0.2",
+ "version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-coverage/README.md",
"dependencies": {
- "@0x/sol-tracing-utils": "^4.0.0",
+ "@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",
diff --git a/packages/sol-coverage/src/coverage_subprovider.ts b/packages/sol-coverage/src/coverage_subprovider.ts
index d03963ed6..2d92b25ca 100644
--- a/packages/sol-coverage/src/coverage_subprovider.ts
+++ b/packages/sol-coverage/src/coverage_subprovider.ts
@@ -50,6 +50,8 @@ export class CoverageSubprovider extends TraceInfoSubprovider {
}
}
+const IGNORE_REGEXP = /\/\*\s*solcov\s+ignore\s+next\s*\*\/\s*/gm;
+
/**
* Computed partial coverage for a single file & subtrace.
* @param contractData Contract metadata (source, srcMap, bytecode)
@@ -65,7 +67,7 @@ export const coverageHandler: SingleFileSubtraceHandler = (
fileIndex: number,
): Coverage => {
const absoluteFileName = contractData.sources[fileIndex];
- const coverageEntriesDescription = collectCoverageEntries(contractData.sourceCodes[fileIndex]);
+ const coverageEntriesDescription = collectCoverageEntries(contractData.sourceCodes[fileIndex], IGNORE_REGEXP);
// if the source wasn't provided for the fileIndex, we can't cover the file
if (_.isUndefined(coverageEntriesDescription)) {
diff --git a/packages/sol-doc/CHANGELOG.json b/packages/sol-doc/CHANGELOG.json
index f95702ee4..662915faf 100644
--- a/packages/sol-doc/CHANGELOG.json
+++ b/packages/sol-doc/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.14",
"changes": [
diff --git a/packages/sol-doc/package.json b/packages/sol-doc/package.json
index dee6ef2e5..179f45e81 100644
--- a/packages/sol-doc/package.json
+++ b/packages/sol-doc/package.json
@@ -37,7 +37,7 @@
"@0x/tslint-config": "^2.0.2",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.2",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^5.2.0",
diff --git a/packages/sol-profiler/CHANGELOG.json b/packages/sol-profiler/CHANGELOG.json
index 8157d441e..fc928b516 100644
--- a/packages/sol-profiler/CHANGELOG.json
+++ b/packages/sol-profiler/CHANGELOG.json
@@ -1,5 +1,32 @@
[
{
+ "version": "2.0.1",
+ "changes": [
+ {
+ "note": "Fix a bug when some parts of the profiling report were missing because of the coverage ignore lines",
+ "pr": 1535
+ }
+ ]
+ },
+ {
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.0.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.2",
"changes": [
diff --git a/packages/sol-profiler/CHANGELOG.md b/packages/sol-profiler/CHANGELOG.md
index ac09a1bbf..18c1719bf 100644
--- a/packages/sol-profiler/CHANGELOG.md
+++ b/packages/sol-profiler/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.2 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/sol-profiler/package.json b/packages/sol-profiler/package.json
index 1a89e0a6b..4fe2928c7 100644
--- a/packages/sol-profiler/package.json
+++ b/packages/sol-profiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/sol-profiler",
- "version": "1.0.2",
+ "version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-profiler/README.md",
"dependencies": {
- "@0x/sol-tracing-utils": "^4.0.0",
+ "@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",
diff --git a/packages/sol-resolver/CHANGELOG.json b/packages/sol-resolver/CHANGELOG.json
index e5f4a8ac1..f5a005fd4 100644
--- a/packages/sol-resolver/CHANGELOG.json
+++ b/packages/sol-resolver/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.2.3",
"changes": [
diff --git a/packages/sol-trace/CHANGELOG.json b/packages/sol-trace/CHANGELOG.json
index 8157d441e..550ca2feb 100644
--- a/packages/sol-trace/CHANGELOG.json
+++ b/packages/sol-trace/CHANGELOG.json
@@ -1,5 +1,23 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "timestamp": 1547747677,
+ "version": "1.0.3",
+ "changes": [
+ {
+ "note": "Dependencies updated"
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.2",
"changes": [
diff --git a/packages/sol-trace/CHANGELOG.md b/packages/sol-trace/CHANGELOG.md
index ac09a1bbf..18c1719bf 100644
--- a/packages/sol-trace/CHANGELOG.md
+++ b/packages/sol-trace/CHANGELOG.md
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v1.0.3 - _January 17, 2019_
+
+ * Dependencies updated
+
## v1.0.2 - _January 15, 2019_
* Dependencies updated
diff --git a/packages/sol-trace/package.json b/packages/sol-trace/package.json
index acae60303..2aedf7ebc 100644
--- a/packages/sol-trace/package.json
+++ b/packages/sol-trace/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/sol-trace",
- "version": "1.0.2",
+ "version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-trace/README.md",
"dependencies": {
- "@0x/sol-tracing-utils": "^4.0.0",
+ "@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",
diff --git a/packages/sol-trace/src/revert_trace_subprovider.ts b/packages/sol-trace/src/revert_trace_subprovider.ts
index fa065cfcb..046dad812 100644
--- a/packages/sol-trace/src/revert_trace_subprovider.ts
+++ b/packages/sol-trace/src/revert_trace_subprovider.ts
@@ -109,9 +109,7 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider {
const fileNameToFileIndex = _.invert(contractData.sources);
const fileIndex = _.parseInt(fileNameToFileIndex[sourceRange.fileName]);
const sourceSnippet = getSourceRangeSnippet(sourceRange, contractData.sourceCodes[fileIndex]);
- if (sourceSnippet !== null) {
- sourceSnippets.push(sourceSnippet);
- }
+ sourceSnippets.push(sourceSnippet);
}
const filteredSnippets = filterSnippets(sourceSnippets);
if (filteredSnippets.length > 0) {
@@ -135,9 +133,7 @@ function filterSnippets(sourceSnippets: SourceSnippet[]): SourceSnippet[] {
const results: SourceSnippet[] = [sourceSnippets[0]];
let prev = sourceSnippets[0];
for (const sourceSnippet of sourceSnippets) {
- if (sourceSnippet.type === 'IfStatement') {
- continue;
- } else if (sourceSnippet.source === prev.source) {
+ if (sourceSnippet.source === prev.source) {
prev = sourceSnippet;
continue;
}
@@ -157,12 +153,5 @@ function getStackTraceString(sourceSnippet: SourceSnippet): string {
}
function getSourceSnippetString(sourceSnippet: SourceSnippet): string {
- switch (sourceSnippet.type) {
- case 'ContractDefinition':
- return `contract ${sourceSnippet.name}`;
- case 'FunctionDefinition':
- return `function ${sourceSnippet.name}`;
- default:
- return `${sourceSnippet.source}`;
- }
+ return `${sourceSnippet.source}`;
}
diff --git a/packages/sol-tracing-utils/CHANGELOG.json b/packages/sol-tracing-utils/CHANGELOG.json
index b470d3e87..16a12ca63 100644
--- a/packages/sol-tracing-utils/CHANGELOG.json
+++ b/packages/sol-tracing-utils/CHANGELOG.json
@@ -1,5 +1,53 @@
[
{
+ "version": "6.0.0",
+ "changes": [
+ {
+ "note": "`SolCompilerArtifactAdapter` now uses `SolResolver` under the hood which allows to resolve `NPM` dependencies properly",
+ "pr": 1535
+ },
+ {
+ "note": "Cache the `utils.getContractDataIfExists` leading to faster execution",
+ "pr": 1535
+ },
+ {
+ "note": "`SolCompilerArtifactAdapter` now doesn't return the `ContractData` for interfaces",
+ "pr": 1535
+ },
+ {
+ "note": "Print resasonable error message on bytecode collision",
+ "pr": 1535
+ }
+ ]
+ },
+ {
+ "version": "5.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
+ "version": "4.0.1",
+ "changes": [
+ {
+ "note": "Fix a bug where a custom `Geth` tracer didn't return stack entries for `DELEGATECALL`",
+ "pr": 1521
+ },
+ {
+ "note": "Fix a bug where `TraceCollectionSubprovider` was hanging on the fake `Geth` snapshot transaction",
+ "pr": 1521
+ },
+ {
+ "note": "Fix/simplify handling of revert trace snippets",
+ "pr": 1521
+ }
+ ],
+ "timestamp": 1547747677
+ },
+ {
"version": "4.0.0",
"changes": [
{
diff --git a/packages/sol-tracing-utils/CHANGELOG.md b/packages/sol-tracing-utils/CHANGELOG.md
index 00d36844c..9bffb2a6d 100644
--- a/packages/sol-tracing-utils/CHANGELOG.md
+++ b/packages/sol-tracing-utils/CHANGELOG.md
@@ -5,6 +5,12 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
+## v4.0.1 - _January 17, 2019_
+
+ * Fix a bug where a custom `Geth` tracer didn't return stack entries for `DELEGATECALL` (#1521)
+ * Fix a bug where `TraceCollectionSubprovider` was hanging on the fake `Geth` snapshot transaction (#1521)
+ * Fix/simplify handling of revert trace snippets (#1521)
+
## v4.0.0 - _January 15, 2019_
* Fix a bug with incorrect parsing of `sourceMaps` due to sources being in an array instead of a map (#1498)
diff --git a/packages/sol-tracing-utils/package.json b/packages/sol-tracing-utils/package.json
index e3e52f42c..4b0fff222 100644
--- a/packages/sol-tracing-utils/package.json
+++ b/packages/sol-tracing-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/sol-tracing-utils",
- "version": "4.0.0",
+ "version": "4.0.1",
"engines": {
"node": ">=6.12"
},
@@ -44,6 +44,7 @@
"dependencies": {
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
+ "@0x/sol-resolver": "^1.2.3",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
diff --git a/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts b/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts
index d52587f2c..bfd3a504a 100644
--- a/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts
+++ b/packages/sol-tracing-utils/src/artifact_adapters/sol_compiler_artifact_adapter.ts
@@ -1,3 +1,4 @@
+import { FallthroughResolver, FSResolver, NPMResolver, RelativeFSResolver, URLResolver } from '@0x/sol-resolver';
import { logUtils } from '@0x/utils';
import { CompilerOptions, ContractArtifact } from 'ethereum-types';
import * as fs from 'fs';
@@ -14,6 +15,7 @@ const CONFIG_FILE = 'compiler.json';
export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter {
private readonly _artifactsPath: string;
private readonly _sourcesPath: string;
+ private readonly _resolver: FallthroughResolver;
/**
* Instantiates a SolCompilerArtifactAdapter
* @param artifactsPath Path to your artifacts directory
@@ -32,6 +34,12 @@ export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter {
throw new Error(`contractsDir not found in ${CONFIG_FILE}`);
}
this._sourcesPath = (sourcesPath || config.contractsDir) as string;
+ this._resolver = new FallthroughResolver();
+ this._resolver.appendResolver(new URLResolver());
+ const packagePath = path.resolve('');
+ this._resolver.appendResolver(new NPMResolver(packagePath));
+ this._resolver.appendResolver(new RelativeFSResolver(this._sourcesPath));
+ this._resolver.appendResolver(new FSResolver());
}
public async collectContractsDataAsync(): Promise<ContractData[]> {
const artifactsGlob = `${this._artifactsPath}/**/*.json`;
@@ -46,10 +54,9 @@ export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter {
const sources: Sources = {};
const sourceCodes: SourceCodes = {};
_.map(artifact.sources, (value: { id: number }, relativeFilePath: string) => {
- const filePath = path.resolve(this._sourcesPath, relativeFilePath);
- const fileContent = fs.readFileSync(filePath).toString();
- sources[value.id] = filePath;
- sourceCodes[value.id] = fileContent;
+ const source = this._resolver.resolve(relativeFilePath);
+ sources[value.id] = source.absolutePath;
+ sourceCodes[value.id] = source.source;
});
const contractData = {
sourceCodes,
@@ -59,6 +66,10 @@ export class SolCompilerArtifactAdapter extends AbstractArtifactAdapter {
runtimeBytecode: artifact.compilerOutput.evm.deployedBytecode.object,
sourceMapRuntime: artifact.compilerOutput.evm.deployedBytecode.sourceMap,
};
+ const isInterfaceContract = contractData.bytecode === '0x' && contractData.runtimeBytecode === '0x';
+ if (isInterfaceContract) {
+ continue;
+ }
contractsData.push(contractData);
}
return contractsData;
diff --git a/packages/sol-tracing-utils/src/collect_coverage_entries.ts b/packages/sol-tracing-utils/src/collect_coverage_entries.ts
index 9e3591d74..d5045b106 100644
--- a/packages/sol-tracing-utils/src/collect_coverage_entries.ts
+++ b/packages/sol-tracing-utils/src/collect_coverage_entries.ts
@@ -5,18 +5,18 @@ import * as parser from 'solidity-parser-antlr';
import { ASTVisitor, CoverageEntriesDescription } from './ast_visitor';
import { getOffsetToLocation } from './source_maps';
-const IGNORE_RE = /\/\*\s*solcov\s+ignore\s+next\s*\*\/\s*/gm;
-
// Parsing source code for each transaction/code is slow and therefore we cache it
const sourceHashToCoverageEntries: { [sourceHash: string]: CoverageEntriesDescription } = {};
-export const collectCoverageEntries = (contractSource: string) => {
+export const collectCoverageEntries = (contractSource: string, ignoreRegexp?: RegExp) => {
const sourceHash = ethUtil.sha3(contractSource).toString('hex');
if (_.isUndefined(sourceHashToCoverageEntries[sourceHash]) && !_.isUndefined(contractSource)) {
const ast = parser.parse(contractSource, { range: true });
const offsetToLocation = getOffsetToLocation(contractSource);
- const ignoreRangesBegingingAt = gatherRangesToIgnore(contractSource);
- const visitor = new ASTVisitor(offsetToLocation, ignoreRangesBegingingAt);
+ const ignoreRangesBeginningAt = _.isUndefined(ignoreRegexp)
+ ? []
+ : gatherRangesToIgnore(contractSource, ignoreRegexp);
+ const visitor = new ASTVisitor(offsetToLocation, ignoreRangesBeginningAt);
parser.visit(ast, visitor);
sourceHashToCoverageEntries[sourceHash] = visitor.getCollectedCoverageEntries();
}
@@ -25,12 +25,12 @@ export const collectCoverageEntries = (contractSource: string) => {
};
// Gather the start index of all code blocks preceeded by "/* solcov ignore next */"
-function gatherRangesToIgnore(contractSource: string): number[] {
+function gatherRangesToIgnore(contractSource: string, ignoreRegexp: RegExp): number[] {
const ignoreRangesStart = [];
let match;
do {
- match = IGNORE_RE.exec(contractSource);
+ match = ignoreRegexp.exec(contractSource);
if (match) {
const matchLen = match[0].length;
ignoreRangesStart.push(match.index + matchLen);
diff --git a/packages/sol-tracing-utils/src/get_source_range_snippet.ts b/packages/sol-tracing-utils/src/get_source_range_snippet.ts
index 7aef00fee..c1f6e3a4e 100644
--- a/packages/sol-tracing-utils/src/get_source_range_snippet.ts
+++ b/packages/sol-tracing-utils/src/get_source_range_snippet.ts
@@ -1,185 +1,16 @@
-import * as ethUtil from 'ethereumjs-util';
-import * as _ from 'lodash';
-import * as Parser from 'solidity-parser-antlr';
-
-import { SingleFileSourceRange, SourceRange, SourceSnippet } from './types';
+import { SourceRange, SourceSnippet } from './types';
import { utils } from './utils';
-interface ASTInfo {
- type: string;
- node: Parser.ASTNode;
- name: string | null;
- range?: SingleFileSourceRange;
-}
-
-// Parsing source code for each transaction/code is slow and therefore we cache it
-const hashToParsedSource: { [sourceHash: string]: Parser.ASTNode } = {};
-
/**
* Gets the source range snippet by source range to be used by revert trace.
* @param sourceRange source range
* @param sourceCode source code
*/
-export function getSourceRangeSnippet(sourceRange: SourceRange, sourceCode: string): SourceSnippet | null {
- const sourceHash = ethUtil.sha3(sourceCode).toString('hex');
- if (_.isUndefined(hashToParsedSource[sourceHash])) {
- hashToParsedSource[sourceHash] = Parser.parse(sourceCode, { loc: true });
- }
- const astNode = hashToParsedSource[sourceHash];
- const visitor = new ASTInfoVisitor();
- Parser.visit(astNode, visitor);
- const astInfo = visitor.getASTInfoForRange(sourceRange);
- if (astInfo === null) {
- return null;
- }
+export function getSourceRangeSnippet(sourceRange: SourceRange, sourceCode: string): SourceSnippet {
const sourceCodeInRange = utils.getRange(sourceCode, sourceRange.location);
return {
- ...astInfo,
- range: astInfo.range as SingleFileSourceRange,
+ range: sourceRange.location,
source: sourceCodeInRange,
fileName: sourceRange.fileName,
};
}
-
-// A visitor which collects ASTInfo for most nodes in the AST.
-class ASTInfoVisitor {
- private readonly _astInfos: ASTInfo[] = [];
- public getASTInfoForRange(sourceRange: SourceRange): ASTInfo | null {
- // HACK(albrow): Sometimes the source range doesn't exactly match that
- // of astInfo. To work around that we try with a +/-1 offset on
- // end.column. If nothing matches even with the offset, we return null.
- const offset = {
- start: {
- line: 0,
- column: 0,
- },
- end: {
- line: 0,
- column: 0,
- },
- };
- let astInfo = this._getASTInfoForRange(sourceRange, offset);
- if (astInfo !== null) {
- return astInfo;
- }
- offset.end.column += 1;
- astInfo = this._getASTInfoForRange(sourceRange, offset);
- if (astInfo !== null) {
- return astInfo;
- }
- offset.end.column -= 2;
- astInfo = this._getASTInfoForRange(sourceRange, offset);
- if (astInfo !== null) {
- return astInfo;
- }
- return null;
- }
- public ContractDefinition(ast: Parser.ContractDefinition): void {
- this._visitContractDefinition(ast);
- }
- public IfStatement(ast: Parser.IfStatement): void {
- this._visitStatement(ast);
- }
- public FunctionDefinition(ast: Parser.FunctionDefinition): void {
- this._visitFunctionLikeDefinition(ast);
- }
- public ModifierDefinition(ast: Parser.ModifierDefinition): void {
- this._visitFunctionLikeDefinition(ast);
- }
- public ForStatement(ast: Parser.ForStatement): void {
- this._visitStatement(ast);
- }
- public ReturnStatement(ast: Parser.ReturnStatement): void {
- this._visitStatement(ast);
- }
- public BreakStatement(ast: Parser.BreakStatement): void {
- this._visitStatement(ast);
- }
- public ContinueStatement(ast: Parser.ContinueStatement): void {
- this._visitStatement(ast);
- }
- public EmitStatement(ast: any /* TODO: Parser.EmitStatement */): void {
- this._visitStatement(ast);
- }
- public VariableDeclarationStatement(ast: Parser.VariableDeclarationStatement): void {
- this._visitStatement(ast);
- }
- public Statement(ast: Parser.Statement): void {
- this._visitStatement(ast);
- }
- public WhileStatement(ast: Parser.WhileStatement): void {
- this._visitStatement(ast);
- }
- public SimpleStatement(ast: Parser.SimpleStatement): void {
- this._visitStatement(ast);
- }
- public ThrowStatement(ast: Parser.ThrowStatement): void {
- this._visitStatement(ast);
- }
- public DoWhileStatement(ast: Parser.DoWhileStatement): void {
- this._visitStatement(ast);
- }
- public ExpressionStatement(ast: Parser.ExpressionStatement): void {
- this._visitStatement(ast.expression);
- }
- public InlineAssemblyStatement(ast: Parser.InlineAssemblyStatement): void {
- this._visitStatement(ast);
- }
- public ModifierInvocation(ast: Parser.ModifierInvocation): void {
- const BUILTIN_MODIFIERS = ['public', 'view', 'payable', 'external', 'internal', 'pure', 'constant'];
- if (!_.includes(BUILTIN_MODIFIERS, ast.name)) {
- this._visitStatement(ast);
- }
- }
- private _visitStatement(ast: Parser.ASTNode): void {
- this._astInfos.push({
- type: ast.type,
- node: ast,
- name: null,
- range: ast.loc,
- });
- }
- private _visitFunctionLikeDefinition(ast: Parser.ModifierDefinition | Parser.FunctionDefinition): void {
- this._astInfos.push({
- type: ast.type,
- node: ast,
- name: ast.name,
- range: ast.loc,
- });
- }
- private _visitContractDefinition(ast: Parser.ContractDefinition): void {
- this._astInfos.push({
- type: ast.type,
- node: ast,
- name: ast.name,
- range: ast.loc,
- });
- }
- private _getASTInfoForRange(sourceRange: SourceRange, offset: SingleFileSourceRange): ASTInfo | null {
- const offsetSourceRange = {
- ...sourceRange,
- location: {
- start: {
- line: sourceRange.location.start.line + offset.start.line,
- column: sourceRange.location.start.column + offset.start.column,
- },
- end: {
- line: sourceRange.location.end.line + offset.end.line,
- column: sourceRange.location.end.column + offset.end.column,
- },
- },
- };
- for (const astInfo of this._astInfos) {
- const astInfoRange = astInfo.range as SingleFileSourceRange;
- if (
- astInfoRange.start.column === offsetSourceRange.location.start.column &&
- astInfoRange.start.line === offsetSourceRange.location.start.line &&
- astInfoRange.end.column === offsetSourceRange.location.end.column &&
- astInfoRange.end.line === offsetSourceRange.location.end.line
- ) {
- return astInfo;
- }
- }
- return null;
- }
-}
diff --git a/packages/sol-tracing-utils/src/trace_collection_subprovider.ts b/packages/sol-tracing-utils/src/trace_collection_subprovider.ts
index 323e1523c..5118921fa 100644
--- a/packages/sol-tracing-utils/src/trace_collection_subprovider.ts
+++ b/packages/sol-tracing-utils/src/trace_collection_subprovider.ts
@@ -144,7 +144,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
txHash: string | undefined,
cb: Callback,
): Promise<void> {
- if (!txData.isFakeTransaction) {
+ if (!(txData.isFakeTransaction || txData.from === txData.to)) {
// This transaction is a usual transaction. Not a call executed as one.
// And we don't want it to be executed within a snapshotting period
await this._lock.acquire();
diff --git a/packages/sol-tracing-utils/src/trace_info_subprovider.ts b/packages/sol-tracing-utils/src/trace_info_subprovider.ts
index b75fc7bf7..de42e1862 100644
--- a/packages/sol-tracing-utils/src/trace_info_subprovider.ts
+++ b/packages/sol-tracing-utils/src/trace_info_subprovider.ts
@@ -31,7 +31,7 @@ export abstract class TraceInfoSubprovider extends TraceCollectionSubprovider {
const depth = 0 | log.getDepth();
const gasCost = 0 | log.getCost();
const gas = 0 | log.getGas();
- const isCall = opn == 0xf1 || opn == 0xf2 || opn == 0xf4 || opn == 0xf5;
+ const isCall = opn == 0xf1 || opn == 0xf2 || opn == 0xf4 || opn == 0xf5 || opn == 0xfa;
const stack = isCall ? ['0x'+log.stack.peek(1).toString(16), null] : null;
this.data.push({ pc, gasCost, depth, op, stack, gas });
},
diff --git a/packages/sol-tracing-utils/src/types.ts b/packages/sol-tracing-utils/src/types.ts
index 27568ae03..97b5e6b37 100644
--- a/packages/sol-tracing-utils/src/types.ts
+++ b/packages/sol-tracing-utils/src/types.ts
@@ -1,5 +1,4 @@
import { StructLog } from 'ethereum-types';
-import * as Parser from 'solidity-parser-antlr';
export interface LineColumn {
line: number;
@@ -126,8 +125,5 @@ export type EvmCallStack = EvmCallStackEntry[];
export interface SourceSnippet {
source: string;
fileName: string;
- type: string;
- node: Parser.ASTNode;
- name: string | null;
range: SingleFileSourceRange;
}
diff --git a/packages/sol-tracing-utils/src/utils.ts b/packages/sol-tracing-utils/src/utils.ts
index 644321f32..7dc1844a5 100644
--- a/packages/sol-tracing-utils/src/utils.ts
+++ b/packages/sol-tracing-utils/src/utils.ts
@@ -1,13 +1,13 @@
-import { addressUtils, BigNumber } from '@0x/utils';
+import { addressUtils, BigNumber, logUtils } from '@0x/utils';
import { OpCode, StructLog } from 'ethereum-types';
import { addHexPrefix } from 'ethereumjs-util';
import * as _ from 'lodash';
import { ContractData, LineColumn, SingleFileSourceRange } from './types';
-// This is the minimum length of valid contract bytecode. The Solidity compiler
-// metadata is 86 bytes. If you add the '0x' prefix, we get 88.
-const MIN_CONTRACT_BYTECODE_LENGTH = 88;
+const STATICCALL_GAS_COST = 40;
+
+const bytecodeToContractDataIfExists: { [bytecode: string]: ContractData | undefined } = {};
export const utils = {
compareLineColumn(lhs: LineColumn, rhs: LineColumn): number {
@@ -46,22 +46,29 @@ export const utils = {
if (!bytecode.startsWith('0x')) {
throw new Error(`0x hex prefix missing: ${bytecode}`);
}
- const contractData = _.find(contractsData, contractDataCandidate => {
+ // HACK(leo): We want to cache the values that are possibly undefined.
+ // That's why we can't check for undefined as we usually do, but need to use `hasOwnProperty`.
+ if (bytecodeToContractDataIfExists.hasOwnProperty(bytecode)) {
+ return bytecodeToContractDataIfExists[bytecode];
+ }
+ const contractDataCandidates = _.filter(contractsData, contractDataCandidate => {
const bytecodeRegex = utils.bytecodeToBytecodeRegex(contractDataCandidate.bytecode);
- // If the bytecode is less than the minimum length, we are probably
- // dealing with an interface. This isn't what we're looking for.
- if (bytecodeRegex.length < MIN_CONTRACT_BYTECODE_LENGTH) {
- return false;
- }
const runtimeBytecodeRegex = utils.bytecodeToBytecodeRegex(contractDataCandidate.runtimeBytecode);
- if (runtimeBytecodeRegex.length < MIN_CONTRACT_BYTECODE_LENGTH) {
- return false;
- }
// We use that function to find by bytecode or runtimeBytecode. Those are quasi-random strings so
// collisions are practically impossible and it allows us to reuse that code
return !_.isNull(bytecode.match(bytecodeRegex)) || !_.isNull(bytecode.match(runtimeBytecodeRegex));
});
- return contractData;
+ if (contractDataCandidates.length > 1) {
+ const candidates = contractDataCandidates.map(
+ contractDataCandidate => _.values(contractDataCandidate.sources)[0],
+ );
+ const errMsg =
+ "We've found more than one artifact that contains the exact same bytecode and therefore are unable to detect which contract was executed. " +
+ "We'll be assigning all traces to the first one.";
+ logUtils.warn(errMsg);
+ logUtils.warn(candidates);
+ }
+ return (bytecodeToContractDataIfExists[bytecode] = contractDataCandidates[0]);
},
isCallLike(op: OpCode): boolean {
return _.includes([OpCode.CallCode, OpCode.StaticCall, OpCode.Call, OpCode.DelegateCall], op);
@@ -76,10 +83,17 @@ export const utils = {
normalizeStructLogs(structLogs: StructLog[]): StructLog[] {
if (structLogs[0].depth === 1) {
// Geth uses 1-indexed depth counter whilst ganache starts from 0
- const newStructLogs = _.map(structLogs, structLog => ({
- ...structLog,
- depth: structLog.depth - 1,
- }));
+ const newStructLogs = _.map(structLogs, structLog => {
+ const newStructLog = {
+ ...structLog,
+ depth: structLog.depth - 1,
+ };
+ if (newStructLog.op === 'STATICCALL') {
+ // HACK(leo): Geth traces sometimes returns those gas costs incorrectly as very big numbers so we manually fix them.
+ newStructLog.gasCost = STATICCALL_GAS_COST;
+ }
+ return newStructLog;
+ });
return newStructLogs;
}
return structLogs;
diff --git a/packages/sol-tracing-utils/test/collect_coverage_entries_test.ts b/packages/sol-tracing-utils/test/collect_coverage_entries_test.ts
index 7832ec316..d3ca8930c 100644
--- a/packages/sol-tracing-utils/test/collect_coverage_entries_test.ts
+++ b/packages/sol-tracing-utils/test/collect_coverage_entries_test.ts
@@ -130,7 +130,8 @@ describe('Collect coverage entries', () => {
solcovIgnoreContractBaseName,
);
const solcovIgnoreContract = fs.readFileSync(solcovIgnoreContractFileName).toString();
- const coverageEntries = collectCoverageEntries(solcovIgnoreContract);
+ const IGNORE_REGEXP = /\/\*\s*solcov\s+ignore\s+next\s*\*\/\s*/gm;
+ const coverageEntries = collectCoverageEntries(solcovIgnoreContract, IGNORE_REGEXP);
const fnIds = _.keys(coverageEntries.fnMap);
expect(fnIds.length).to.be.equal(1);
diff --git a/packages/sra-spec/CHANGELOG.json b/packages/sra-spec/CHANGELOG.json
index 3f2a9fbc1..e22a3b0e4 100644
--- a/packages/sra-spec/CHANGELOG.json
+++ b/packages/sra-spec/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.0.16",
"changes": [
diff --git a/packages/subproviders/CHANGELOG.json b/packages/subproviders/CHANGELOG.json
index dd4dccf4e..ffb9740cd 100644
--- a/packages/subproviders/CHANGELOG.json
+++ b/packages/subproviders/CHANGELOG.json
@@ -1,5 +1,18 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ },
+ {
+ "note": "Update ganache-core to v2.3.3",
+ "pr": 1518
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "2.1.11",
"changes": [
diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json
index d5dc2b052..b54cc11db 100644
--- a/packages/subproviders/package.json
+++ b/packages/subproviders/package.json
@@ -37,7 +37,7 @@
"@ledgerhq/hw-app-eth": "^4.3.0",
"@ledgerhq/hw-transport-u2f": "4.24.0",
"@types/eth-lightwallet": "^3.0.0",
- "@types/ganache-core": "^2.1.0",
+ "@types/ganache-core": "^2.1.2",
"@types/hdkey": "^0.7.0",
"@types/web3-provider-engine": "^14.0.0",
"bip39": "^2.5.0",
@@ -46,7 +46,7 @@
"ethereum-types": "^1.1.6",
"ethereumjs-tx": "^1.3.5",
"ethereumjs-util": "^5.1.1",
- "ganache-core": "^2.2.1",
+ "ganache-core": "^2.3.3",
"hdkey": "^0.7.1",
"json-rpc-error": "2.0.0",
"lodash": "^4.17.5",
diff --git a/packages/testnet-faucets/package.json b/packages/testnet-faucets/package.json
index b6e84698d..da7477be4 100644
--- a/packages/testnet-faucets/package.json
+++ b/packages/testnet-faucets/package.json
@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0x/testnet-faucets",
- "version": "1.0.63",
+ "version": "1.0.64",
"engines": {
"node": ">=6.12"
},
@@ -18,7 +18,7 @@
"author": "Fabio Berger",
"license": "Apache-2.0",
"dependencies": {
- "0x.js": "^3.0.2",
+ "0x.js": "^3.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",
diff --git a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
index 32f5cb623..58caeeeaa 100644
--- a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
+++ b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts
@@ -19,7 +19,7 @@ export const dispenseAssetTasks = {
logUtils.log(`Processing ETH ${recipientAddress}`);
const userBalance = await web3Wrapper.getBalanceInWeiAsync(recipientAddress);
const maxAmountInWei = Web3Wrapper.toWei(new BigNumber(DISPENSE_MAX_AMOUNT_ETHER));
- if (userBalance.greaterThanOrEqualTo(maxAmountInWei)) {
+ if (userBalance.isGreaterThanOrEqualTo(maxAmountInWei)) {
logUtils.log(
`User exceeded ETH balance maximum (${maxAmountInWei}) ${recipientAddress} ${userBalance} `,
);
@@ -55,7 +55,7 @@ export const dispenseAssetTasks = {
new BigNumber(DISPENSE_MAX_AMOUNT_TOKEN),
tokenIfExists.decimals,
);
- if (userBalanceBaseUnits.greaterThanOrEqualTo(maxAmountBaseUnits)) {
+ if (userBalanceBaseUnits.isGreaterThanOrEqualTo(maxAmountBaseUnits)) {
logUtils.log(
`User exceeded token balance maximum (${maxAmountBaseUnits}) ${recipientAddress} ${userBalanceBaseUnits} `,
);
diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts
index 8f642d4b0..533e1f8b3 100644
--- a/packages/testnet-faucets/src/ts/handler.ts
+++ b/packages/testnet-faucets/src/ts/handler.ts
@@ -178,8 +178,10 @@ export class Handler {
exchangeAddress: networkConfig.contractWrappers.exchange.address,
feeRecipientAddress: NULL_ADDRESS,
senderAddress: NULL_ADDRESS,
- // tslint:disable-next-line:custom-no-magic-numbers
- expirationTimeSeconds: new BigNumber(Date.now() + FIVE_DAYS_IN_MS).div(1000).floor(),
+ expirationTimeSeconds: new BigNumber(Date.now() + FIVE_DAYS_IN_MS)
+ // tslint:disable-next-line:custom-no-magic-numbers
+ .div(1000)
+ .integerValue(BigNumber.ROUND_FLOOR),
};
const orderHash = orderHashUtils.getOrderHashHex(order);
const signature = await signatureUtils.ecSignHashAsync(
diff --git a/packages/tslint-config/CHANGELOG.json b/packages/tslint-config/CHANGELOG.json
index fe34592fd..34ea6aa6b 100644
--- a/packages/tslint-config/CHANGELOG.json
+++ b/packages/tslint-config/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "3.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "2.0.2",
"changes": [
diff --git a/packages/types/CHANGELOG.json b/packages/types/CHANGELOG.json
index 40a46ac84..7a6d205ee 100644
--- a/packages/types/CHANGELOG.json
+++ b/packages/types/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "2.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "1.5.2",
"changes": [
diff --git a/packages/types/package.json b/packages/types/package.json
index 2fea809bc..440f05423 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -31,7 +31,7 @@
},
"dependencies": {
"@types/node": "*",
- "bignumber.js": "~4.1.0",
+ "bignumber.js": "~8.0.2",
"ethereum-types": "^1.1.6"
},
"publishConfig": {
diff --git a/packages/typescript-typings/CHANGELOG.json b/packages/typescript-typings/CHANGELOG.json
index cc7ef7fa4..e3ae60231 100644
--- a/packages/typescript-typings/CHANGELOG.json
+++ b/packages/typescript-typings/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.0.8",
"changes": [
diff --git a/packages/typescript-typings/package.json b/packages/typescript-typings/package.json
index 6640760e4..01cab8c63 100644
--- a/packages/typescript-typings/package.json
+++ b/packages/typescript-typings/package.json
@@ -26,7 +26,7 @@
"dependencies": {
"@types/bn.js": "^4.11.0",
"@types/react": "*",
- "bignumber.js": "~4.1.0",
+ "bignumber.js": "~8.0.2",
"ethereum-types": "^1.1.6",
"popper.js": "1.14.3"
},
diff --git a/packages/utils/CHANGELOG.json b/packages/utils/CHANGELOG.json
index 851c106d8..0fb199e58 100644
--- a/packages/utils/CHANGELOG.json
+++ b/packages/utils/CHANGELOG.json
@@ -1,5 +1,14 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.0.1",
"changes": [
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 315f5a08f..b6be39210 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -34,7 +34,7 @@
"@types/mocha": "^2.2.42",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
@@ -48,7 +48,7 @@
"@0x/typescript-typings": "^3.0.8",
"@types/node": "*",
"abortcontroller-polyfill": "^1.1.9",
- "bignumber.js": "~4.1.0",
+ "bignumber.js": "~8.0.2",
"chalk": "^2.4.1",
"detect-node": "2.0.3",
"ethereum-types": "^1.1.6",
diff --git a/packages/utils/src/abi_decoder.ts b/packages/utils/src/abi_decoder.ts
index 2da46db35..28b6418d8 100644
--- a/packages/utils/src/abi_decoder.ts
+++ b/packages/utils/src/abi_decoder.ts
@@ -69,7 +69,7 @@ export class AbiDecoder {
}
if (param.type === SolidityTypes.Address) {
const baseHex = 16;
- value = addressUtils.padZeros(new BigNumber(value).toString(baseHex));
+ value = addressUtils.padZeros(new BigNumber((value as string).toLowerCase()).toString(baseHex));
} else if (param.type === SolidityTypes.Uint256 || param.type === SolidityTypes.Uint) {
value = new BigNumber(value);
} else if (param.type === SolidityTypes.Uint8) {
diff --git a/packages/utils/src/abi_encoder/evm_data_types/bool.ts b/packages/utils/src/abi_encoder/evm_data_types/bool.ts
index 7f91f34e6..23298bc88 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/bool.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/bool.ts
@@ -37,11 +37,11 @@ export class BoolDataType extends AbstractBlobDataType {
const valueBuf = calldata.popWord();
const valueHex = ethUtil.bufferToHex(valueBuf);
const valueNumber = new BigNumber(valueHex, constants.HEX_BASE);
- if (!(valueNumber.equals(0) || valueNumber.equals(1))) {
+ if (!(valueNumber.isEqualTo(0) || valueNumber.isEqualTo(1))) {
throw new Error(`Failed to decode boolean. Expected 0x0 or 0x1, got ${valueHex}`);
}
/* tslint:disable boolean-naming */
- const value: boolean = !valueNumber.equals(0);
+ const value: boolean = !valueNumber.isEqualTo(0);
/* tslint:enable boolean-naming */
return value;
}
diff --git a/packages/utils/src/abi_encoder/evm_data_types/int.ts b/packages/utils/src/abi_encoder/evm_data_types/int.ts
index 8d98e195b..f8be1f778 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/int.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/int.ts
@@ -10,7 +10,7 @@ import * as EncoderMath from '../utils/math';
export class IntDataType extends AbstractBlobDataType {
private static readonly _MATCHER = RegExp(
- '^int(8|16|24|32|40|48|56|64|72|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256){0,1}$',
+ '^int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256){0,1}$',
);
private static readonly _SIZE_KNOWN_AT_COMPILE_TIME: boolean = true;
private static readonly _MAX_WIDTH: number = 256;
@@ -38,8 +38,8 @@ export class IntDataType extends AbstractBlobDataType {
throw new Error(`Tried to instantiate Int with bad input: ${dataItem}`);
}
this._width = IntDataType._decodeWidthFromType(dataItem.type);
- this._minValue = new BigNumber(2).toPower(this._width - 1).times(-1);
- this._maxValue = new BigNumber(2).toPower(this._width - 1).sub(1);
+ this._minValue = new BigNumber(2).exponentiatedBy(this._width - 1).times(-1);
+ this._maxValue = new BigNumber(2).exponentiatedBy(this._width - 1).minus(1);
}
public encodeValue(value: BigNumber | string | number): Buffer {
diff --git a/packages/utils/src/abi_encoder/evm_data_types/uint.ts b/packages/utils/src/abi_encoder/evm_data_types/uint.ts
index 8e382e8dc..a82aa789e 100644
--- a/packages/utils/src/abi_encoder/evm_data_types/uint.ts
+++ b/packages/utils/src/abi_encoder/evm_data_types/uint.ts
@@ -38,7 +38,7 @@ export class UIntDataType extends AbstractBlobDataType {
throw new Error(`Tried to instantiate UInt with bad input: ${dataItem}`);
}
this._width = UIntDataType._decodeWidthFromType(dataItem.type);
- this._maxValue = new BigNumber(2).toPower(this._width).sub(1);
+ this._maxValue = new BigNumber(2).exponentiatedBy(this._width).minus(1);
}
public encodeValue(value: BigNumber | string | number): Buffer {
diff --git a/packages/utils/src/abi_encoder/utils/math.ts b/packages/utils/src/abi_encoder/utils/math.ts
index d84983c5b..a2a79e2a8 100644
--- a/packages/utils/src/abi_encoder/utils/math.ts
+++ b/packages/utils/src/abi_encoder/utils/math.ts
@@ -1,7 +1,7 @@
-import BigNumber from 'bignumber.js';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
+import { BigNumber } from '../../configured_bignumber';
import { constants } from '../utils/constants';
function sanityCheckBigNumberRange(
@@ -10,10 +10,12 @@ function sanityCheckBigNumberRange(
maxValue: BigNumber,
): void {
const value = new BigNumber(value_, 10);
- if (value.greaterThan(maxValue)) {
+ if (value.isGreaterThan(maxValue)) {
throw new Error(`Tried to assign value of ${value}, which exceeds max value of ${maxValue}`);
- } else if (value.lessThan(minValue)) {
+ } else if (value.isLessThan(minValue)) {
throw new Error(`Tried to assign value of ${value}, which exceeds min value of ${minValue}`);
+ } else if (value.isNaN()) {
+ throw new Error(`Tried to assign NaN value`);
}
}
function bigNumberToPaddedBuffer(value: BigNumber): Buffer {
@@ -30,7 +32,7 @@ function bigNumberToPaddedBuffer(value: BigNumber): Buffer {
export function encodeNumericValue(value_: BigNumber | string | number): Buffer {
const value = new BigNumber(value_, 10);
// Case 1/2: value is non-negative
- if (value.greaterThanOrEqualTo(0)) {
+ if (value.isGreaterThanOrEqualTo(0)) {
const encodedPositiveValue = bigNumberToPaddedBuffer(value);
return encodedPositiveValue;
}
@@ -74,7 +76,7 @@ export function decodeNumericValue(encodedValue: Buffer, minValue: BigNumber): B
const valueHex = ethUtil.bufferToHex(encodedValue);
// Case 1/3: value is definitely non-negative because of numeric boundaries
const value = new BigNumber(valueHex, constants.HEX_BASE);
- if (!minValue.lessThan(0)) {
+ if (!minValue.isLessThan(0)) {
return value;
}
// Case 2/3: value is non-negative because there is no leading 1 (encoded as two's-complement)
diff --git a/packages/utils/src/sign_typed_data_utils.ts b/packages/utils/src/sign_typed_data_utils.ts
index 6963b9084..adb66622d 100644
--- a/packages/utils/src/sign_typed_data_utils.ts
+++ b/packages/utils/src/sign_typed_data_utils.ts
@@ -1,8 +1,9 @@
+import { EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Types } from '@0x/types';
import * as ethUtil from 'ethereumjs-util';
import * as ethers from 'ethers';
import * as _ from 'lodash';
-import { EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Types } from '@0x/types';
+import { BigNumber } from './configured_bignumber';
export const signTypedDataUtils = {
/**
@@ -70,7 +71,7 @@ export const signTypedDataUtils = {
return ethers.utils.defaultAbiCoder.encode(encodedTypes, encodedValues);
},
_normalizeValue(type: string, value: any): EIP712ObjectValue {
- const normalizedValue = type === 'uint256' && _.isObject(value) && value.isBigNumber ? value.toString() : value;
+ const normalizedValue = type === 'uint256' && BigNumber.isBigNumber(value) ? value.toString() : value;
return normalizedValue;
},
_typeHash(primaryType: string, types: EIP712Types): Buffer {
diff --git a/packages/utils/test/abi_encoder/evm_data_types_test.ts b/packages/utils/test/abi_encoder/evm_data_types_test.ts
index 54d536a7e..4814ce28b 100644
--- a/packages/utils/test/abi_encoder/evm_data_types_test.ts
+++ b/packages/utils/test/abi_encoder/evm_data_types_test.ts
@@ -205,7 +205,7 @@ describe('ABI Encoder: EVM Data Type Encoding/Decoding', () => {
// Encode Args and validate result
expect(() => {
dataType.encode(args, encodingRules);
- }).to.throw();
+ }).to.throw('Tried to assign NaN value');
});
});
diff --git a/packages/web3-wrapper/CHANGELOG.json b/packages/web3-wrapper/CHANGELOG.json
index b9d5a37b1..4a639f662 100644
--- a/packages/web3-wrapper/CHANGELOG.json
+++ b/packages/web3-wrapper/CHANGELOG.json
@@ -1,5 +1,18 @@
[
{
+ "version": "4.0.0",
+ "changes": [
+ {
+ "note": "Upgrade the bignumber.js to v8.0.2",
+ "pr": 1517
+ },
+ {
+ "note": "Update ganache-core to v2.3.3",
+ "pr": 1518
+ }
+ ]
+ },
+ {
"timestamp": 1547561734,
"version": "3.2.4",
"changes": [
diff --git a/packages/web3-wrapper/package.json b/packages/web3-wrapper/package.json
index ce9c41ae7..f28cc36ca 100644
--- a/packages/web3-wrapper/package.json
+++ b/packages/web3-wrapper/package.json
@@ -37,13 +37,13 @@
"homepage": "https://github.com/0xProject/0x-monorepo/packages/web3-wrapper/README.md",
"devDependencies": {
"@0x/tslint-config": "^2.0.2",
- "@types/ganache-core": "^2.1.0",
+ "@types/ganache-core": "^2.1.2",
"@types/lodash": "4.14.104",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
- "chai-bignumber": "^2.0.1",
+ "chai-bignumber": "^3.0.0",
"dirty-chai": "^2.0.1",
- "ganache-core": "0xProject/ganache-core#monorepo-dep",
+ "ganache-core": "^2.3.3",
"make-promises-safe": "^1.1.0",
"mocha": "^4.1.0",
"npm-run-all": "^4.1.2",
diff --git a/packages/web3-wrapper/src/utils.ts b/packages/web3-wrapper/src/utils.ts
index c68587632..1aba3c75a 100644
--- a/packages/web3-wrapper/src/utils.ts
+++ b/packages/web3-wrapper/src/utils.ts
@@ -2,10 +2,6 @@ import { BigNumber } from '@0x/utils';
import * as _ from 'lodash';
export const utils = {
- isBigNumber(value: any): boolean {
- const isBigNumber = _.isObject(value) && value.isBigNumber;
- return isBigNumber;
- },
convertHexToNumber(value: string): number {
const valueBigNumber = new BigNumber(value);
const valueNumber = valueBigNumber.toNumber();
@@ -20,7 +16,7 @@ export const utils = {
},
convertAmountToBigNumber(value: string | number | BigNumber): BigNumber {
const num = value || 0;
- const isBigNumber = utils.isBigNumber(num);
+ const isBigNumber = BigNumber.isBigNumber(num);
if (isBigNumber) {
return num as BigNumber;
}
@@ -37,7 +33,7 @@ export const utils = {
const hexBase = 16;
const valueHex = valueBigNumber.toString(hexBase);
- return valueBigNumber.lessThan(0) ? `-0x${valueHex.substr(1)}` : `0x${valueHex}`;
+ return valueBigNumber.isLessThan(0) ? `-0x${valueHex.substr(1)}` : `0x${valueHex}`;
},
numberToHex(value: number): string {
if (!isFinite(value) && !utils.isHexStrict(value)) {
diff --git a/packages/web3-wrapper/test/web3_wrapper_test.ts b/packages/web3-wrapper/test/web3_wrapper_test.ts
index 935c67636..c4ee91d3d 100644
--- a/packages/web3-wrapper/test/web3_wrapper_test.ts
+++ b/packages/web3-wrapper/test/web3_wrapper_test.ts
@@ -1,10 +1,10 @@
+import { BigNumber } from '@0x/utils';
import * as chai from 'chai';
import { BlockParamLiteral, JSONRPCErrorCallback, JSONRPCRequestPayload, TransactionReceipt } from 'ethereum-types';
import * as Ganache from 'ganache-core';
import * as _ from 'lodash';
import 'mocha';
-import { utils } from '../src/utils';
import { Web3Wrapper } from '../src/web3_wrapper';
import { chaiSetup } from './utils/chai_setup';
@@ -35,7 +35,7 @@ describe('Web3Wrapper tests', () => {
describe('#getNodeVersionAsync', () => {
it('gets the node version', async () => {
const nodeVersion = await web3Wrapper.getNodeVersionAsync();
- const NODE_VERSION = 'EthereumJS TestRPC/v2.1.2/ethereum-js';
+ const NODE_VERSION = 'EthereumJS TestRPC/v2.3.3/ethereum-js';
expect(nodeVersion).to.be.equal(NODE_VERSION);
});
});
@@ -118,7 +118,7 @@ describe('Web3Wrapper tests', () => {
throw new Error('Expected block to exist');
}
expect(blockIfExists.number).to.be.equal(0);
- expect(utils.isBigNumber(blockIfExists.difficulty)).to.equal(true);
+ expect(BigNumber.isBigNumber(blockIfExists.difficulty)).to.equal(true);
expect(_.isNumber(blockIfExists.gasLimit)).to.equal(true);
});
it('gets block when supplied a block number', async () => {
@@ -151,7 +151,7 @@ describe('Web3Wrapper tests', () => {
const blockParamLiteral = BlockParamLiteral.Earliest;
const block = await web3Wrapper.getBlockWithTransactionDataAsync(blockParamLiteral);
expect(block.number).to.be.equal(0);
- expect(utils.isBigNumber(block.difficulty)).to.equal(true);
+ expect(BigNumber.isBigNumber(block.difficulty)).to.equal(true);
expect(_.isNumber(block.gasLimit)).to.equal(true);
});
it('should throw if supplied invalid blockParam value', async () => {
diff --git a/packages/website/md/docs/sol_coverage/installation.md b/packages/website/md/docs/sol_coverage/installation.md
index c7aaf07e9..7c9840ab8 100644
--- a/packages/website/md/docs/sol_coverage/installation.md
+++ b/packages/website/md/docs/sol_coverage/installation.md
@@ -1,7 +1,7 @@
**Install**
```bash
-yarn add @0x/sol-coverage
+yarn add -D @0x/sol-coverage
```
**Import**
diff --git a/packages/website/md/docs/sol_coverage/introduction.md b/packages/website/md/docs/sol_coverage/introduction.md
index 3214e93a9..f21f8ecbe 100644
--- a/packages/website/md/docs/sol_coverage/introduction.md
+++ b/packages/website/md/docs/sol_coverage/introduction.md
@@ -1 +1 @@
-Welcome to the [sol-coverage](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-coverage) documentation! Sol-coverage is a Solidity coverage tool for your smart contract tests.
+Welcome to the [sol-coverage](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-coverage) documentation! Sol-coverage is a Solidity coverage tool.
diff --git a/packages/website/md/docs/sol_coverage/usage.md b/packages/website/md/docs/sol_coverage/usage.md
index dd3cdf597..d194f8abd 100644
--- a/packages/website/md/docs/sol_coverage/usage.md
+++ b/packages/website/md/docs/sol_coverage/usage.md
@@ -1,4 +1,4 @@
-Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
+Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
The CoverageSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
@@ -12,9 +12,8 @@ If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs
```typescript
import { SolCompilerArtifactsAdapter } from '@0x/sol-coverage';
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
+// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
+const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);
```
### Truffle
@@ -23,8 +22,9 @@ If your project is using [Truffle](https://truffleframework.com/), we've written
```typescript
import { TruffleArtifactAdapter } from '@0x/sol-coverage';
-const contractsPath = 'src/contracts';
-const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
+const projectRoot = '.';
+const solcVersion = '0.5.0';
+const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);
```
Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
@@ -32,7 +32,13 @@ Because truffle artifacts don't have all the data we need - we actually will rec
### Other framework/toolset
You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
-Look at the code of the two adapters above for examples.
+
+```typescript
+import { AbstractArtifactAdapter } from '@0x/sol-trace';
+
+class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
+const artifactAdapter = new YourCustomArtifactsAdapter(...);
+```
### Usage
@@ -41,16 +47,14 @@ import { CoverageSubprovider } from '@0x/sol-coverage';
import ProviderEngine = require('web3-provider-engine');
const provider = new ProviderEngine();
-
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const networkId = 50;
// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
const isVerbose = true;
const coverageSubprovider = new CoverageSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
provider.addProvider(coverageSubprovider);
+// Add all your other providers
+provider.start();
```
After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:
@@ -60,3 +64,11 @@ await coverageSubprovider.writeCoverageAsync();
```
This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/coverage.json.md) - so you can use it with any of the existing Istanbul reporters.
+
+```bash
+yarn add -D istanbul
+istanbul report html
+open coverage/index.html
+```
+
+Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520).
diff --git a/packages/website/md/docs/sol_profiler/installation.md b/packages/website/md/docs/sol_profiler/installation.md
index be9a365f5..e29ac5ae7 100644
--- a/packages/website/md/docs/sol_profiler/installation.md
+++ b/packages/website/md/docs/sol_profiler/installation.md
@@ -1,7 +1,7 @@
**Install**
```bash
-yarn add @0x/sol-profiler
+yarn add -D @0x/sol-profiler
```
**Import**
diff --git a/packages/website/md/docs/sol_profiler/usage.md b/packages/website/md/docs/sol_profiler/usage.md
index 35ea140da..0fbc31bc1 100644
--- a/packages/website/md/docs/sol_profiler/usage.md
+++ b/packages/website/md/docs/sol_profiler/usage.md
@@ -1,4 +1,4 @@
-Sol-profiler uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `ProfilerSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
+Sol-profiler uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `ProfilerSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
The ProfilerSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
@@ -12,9 +12,8 @@ If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs
```typescript
import { SolCompilerArtifactsAdapter } from '@0x/sol-profiler';
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
+// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
+const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);
```
### Truffle
@@ -23,8 +22,9 @@ If your project is using [Truffle](https://truffleframework.com/), we've written
```typescript
import { TruffleArtifactAdapter } from '@0x/sol-profiler';
-const contractsPath = 'src/contracts';
-const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
+const projectRoot = '.';
+const solcVersion = '0.5.0';
+const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);
```
Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
@@ -32,7 +32,13 @@ Because truffle artifacts don't have all the data we need - we actually will rec
### Other framework/toolset
You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
-Look at the code of the two adapters above for examples.
+
+```typescript
+import { AbstractArtifactAdapter } from '@0x/sol-trace';
+
+class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
+const artifactAdapter = new YourCustomArtifactsAdapter(...);
+```
### Usage
@@ -41,22 +47,28 @@ import { ProfilerSubprovider } from '@0x/sol-profiler';
import ProviderEngine = require('web3-provider-engine');
const provider = new ProviderEngine();
-
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const networkId = 50;
// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
const isVerbose = true;
const profilerSubprovider = new ProfilerSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
provider.addProvider(profilerSubprovider);
+// Add all your other providers
+provider.start();
```
After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:
```typescript
-await profilerSubprovider.writeProfilerAsync();
+await profilerSubprovider.writeProfilerOutputAsync();
+```
+
+This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/profiler.json.md) - so you can use it with any of the existing Istanbul reporters.
+
+```bash
+yarn add -D istanbul
+istanbul report html
+open coverage/index.html
```
-This will create a `profiler.json` file in a `profiler` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/profiler.json.md) - so you can use it with any of the existing Istanbul reporters.
+Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520).
diff --git a/packages/website/md/docs/sol_trace/installation.md b/packages/website/md/docs/sol_trace/installation.md
index 2f794b2f8..eb7bf08b8 100644
--- a/packages/website/md/docs/sol_trace/installation.md
+++ b/packages/website/md/docs/sol_trace/installation.md
@@ -1,17 +1,17 @@
**Install**
```bash
-yarn add @0x/sol-trace
+yarn add -D @0x/sol-trace
```
**Import**
```javascript
-import { TraceSubprovider } from '@0x/sol-trace';
+import { RevertTraceSubprovider } from '@0x/sol-trace';
```
or
```javascript
-var TraceSubprovider = require('@0x/sol-trace').TraceSubprovider;
+var RevertTraceSubprovider = require('@0x/sol-trace').RevertTraceSubprovider;
```
diff --git a/packages/website/md/docs/sol_trace/introduction.md b/packages/website/md/docs/sol_trace/introduction.md
index 21fea764e..73f5c2bcd 100644
--- a/packages/website/md/docs/sol_trace/introduction.md
+++ b/packages/website/md/docs/sol_trace/introduction.md
@@ -1 +1 @@
-Welcome to the [sol-trace](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-trace) documentation! Sol-trace is a Solidity trace tool for your smart contract tests.
+Welcome to the [sol-trace](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-trace) documentation! Sol-trace gives you a human-readable error stack trace when a revert happens in your Solidity code.
diff --git a/packages/website/md/docs/sol_trace/usage.md b/packages/website/md/docs/sol_trace/usage.md
index f3aa6fc35..d117a0faf 100644
--- a/packages/website/md/docs/sol_trace/usage.md
+++ b/packages/website/md/docs/sol_trace/usage.md
@@ -1,10 +1,10 @@
-Sol-trace uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `TraceSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
+Sol-trace uses transaction traces to reconstruct the stack trace when reverts happen in Solidity. In order for it to gather these traces, you must add the `RevertTraceSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
-The TraceSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
+The `RevertTraceSubprovider` eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
Trace subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data.
-In order to use `TraceSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it.
+In order to use `RevertTraceSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it.
### Sol-compiler
@@ -12,9 +12,8 @@ If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs
```typescript
import { SolCompilerArtifactsAdapter } from '@0x/sol-trace';
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
+// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
+const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);
```
### Truffle
@@ -23,8 +22,9 @@ If your project is using [Truffle](https://truffleframework.com/), we've written
```typescript
import { TruffleArtifactAdapter } from '@0x/sol-trace';
-const contractsPath = 'src/contracts';
-const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
+const projectRoot = '.';
+const solcVersion = '0.5.0';
+const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);
```
Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
@@ -32,31 +32,31 @@ Because truffle artifacts don't have all the data we need - we actually will rec
### Other framework/toolset
You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
-Look at the code of the two adapters above for examples.
+
+```typescript
+import { AbstractArtifactAdapter } from '@0x/sol-trace';
+
+class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
+const artifactAdapter = new YourCustomArtifactsAdapter(...);
+```
### Usage
```typescript
-import { TraceSubprovider } from '@0x/sol-trace';
+import { RevertTraceSubprovider } from '@0x/sol-trace';
import ProviderEngine = require('web3-provider-engine');
const provider = new ProviderEngine();
-
-const artifactsPath = 'src/artifacts';
-const contractsPath = 'src/contracts';
-const networkId = 50;
// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
const isVerbose = true;
-const traceSubprovider = new TraceSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
+const revertTraceSubprovider = new RevertTraceSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
-provider.addProvider(traceSubprovider);
+provider.addProvider(revertTraceSubprovider);
+// Add all your other providers
+provider.start();
```
-After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:
-
-```typescript
-await traceSubprovider.writeTraceAsync();
-```
+Now when you run your tests, it should print out stack traces when encountering an error.
-This will create a `trace.json` file in a `trace` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/trace.json.md) - so you can use it with any of the existing Istanbul reporters.
+Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520).
diff --git a/packages/website/package.json b/packages/website/package.json
index 0d2773a2c..ce7ed395f 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -1,6 +1,6 @@
{
"name": "@0x/website",
- "version": "0.0.66",
+ "version": "0.0.67",
"engines": {
"node": ">=6.12"
},
@@ -20,9 +20,9 @@
"author": "Fabio Berger",
"license": "Apache-2.0",
"dependencies": {
- "@0x/asset-buyer": "^4.0.1",
+ "@0x/asset-buyer": "^4.0.2",
"@0x/contract-addresses": "^2.2.0",
- "@0x/contract-wrappers": "^5.0.0",
+ "@0x/contract-wrappers": "^5.0.1",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
"@0x/react-docs": "^1.0.25",
diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts
index 37f746f7c..ea5a59340 100644
--- a/packages/website/ts/blockchain.ts
+++ b/packages/website/ts/blockchain.ts
@@ -944,7 +944,7 @@ export class Blockchain {
try {
const gasInfo = await backendClient.getGasInfoAsync();
const gasPriceInGwei = new BigNumber(gasInfo.fast / 10);
- const gasPriceInWei = gasPriceInGwei.mul(1000000000);
+ const gasPriceInWei = gasPriceInGwei.multipliedBy(1000000000);
this._defaultGasPrice = gasPriceInWei;
} catch (err) {
return;
diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx
index 7fee8c4df..95a3671c4 100644
--- a/packages/website/ts/components/fill_order.tsx
+++ b/packages/website/ts/components/fill_order.tsx
@@ -205,7 +205,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> {
amount: orderMakerAmount
.times(takerAssetToken.amount)
.div(orderTakerAmount)
- .floor(),
+ .integerValue(BigNumber.ROUND_FLOOR),
symbol: makerToken.symbol,
};
const fillAssetToken = {
@@ -219,7 +219,7 @@ export class FillOrder extends React.Component<FillOrderProps, FillOrderState> {
const orderReceiveAmountBigNumber = orderMakerAmount
.times(this.props.orderFillAmount)
.dividedBy(orderTakerAmount)
- .floor();
+ .integerValue(BigNumber.ROUND_FLOOR);
orderReceiveAmount = this._formatCurrencyAmount(orderReceiveAmountBigNumber, makerToken.decimals);
}
const isUserMaker =
diff --git a/packages/website/ts/pages/documentation/docs_home.tsx b/packages/website/ts/pages/documentation/docs_home.tsx
index d11cf02fb..5849a2a03 100644
--- a/packages/website/ts/pages/documentation/docs_home.tsx
+++ b/packages/website/ts/pages/documentation/docs_home.tsx
@@ -55,7 +55,7 @@ const TUTORIALS: TutorialInfo[] = [
];
const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = {
- [Categories.ZeroExProtocol]: [
+ [Categories.ZeroExProtocolTypescript]: [
{
description:
'A library for interacting with the 0x protocol. It is a high level package which combines a number of smaller specific-purpose packages such as [order-utils](https://0x.org/docs/order-utils) and [contract-wrappers](https://0x.org/docs/contract-wrappers).',
@@ -92,23 +92,6 @@ const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = {
},
{
description:
- "A Python library for interacting with 0x orders. Generate an orderHash, sign an order, validate it's signature and more.",
- link: {
- title: '0x-order-utils.py',
- to: 'http://0x-order-utils-py.s3-website-us-east-1.amazonaws.com/',
- shouldOpenInNewTab: true,
- },
- },
- {
- description: 'A Python Standard Relayer API client',
- link: {
- title: '0x-sra-client.py',
- to: 'https://pypi.org/project/0x-sra-client/',
- shouldOpenInNewTab: true,
- },
- },
- {
- description:
'An http & websocket client for interacting with relayers that have implemented the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api)',
link: {
title: '@0x/connect',
@@ -190,6 +173,57 @@ const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = {
},
},
],
+ [Categories.ZeroExProtocolPython]: [
+ {
+ description:
+ "A library for interacting with 0x orders. Generate an orderHash, sign an order, validate it's signature and more.",
+ link: {
+ title: '0x-order-utils',
+ to: 'https://pypi.org/project/0x-order-utils/',
+ shouldOpenInNewTab: true,
+ },
+ },
+ {
+ description: 'A Standard Relayer API client',
+ link: {
+ title: '0x-sra-client',
+ to: 'https://pypi.org/project/0x-sra-client/',
+ shouldOpenInNewTab: true,
+ },
+ },
+ {
+ description: 'Package containing the addresses at which the 0x smart contracts have been deployed',
+ link: {
+ title: '0x-contract-addresses',
+ to: 'https://pypi.org/project/0x-contract-addresses/',
+ shouldOpenInNewTab: true,
+ },
+ },
+ {
+ description: 'Package containing the 0x smart contract compilation artifacts',
+ link: {
+ title: '0x-contract-artifacts',
+ to: 'https://pypi.org/project/0x-contract-artifacts/',
+ shouldOpenInNewTab: true,
+ },
+ },
+ {
+ description: '0x JSON schemas for those developing on top of 0x protocol',
+ link: {
+ title: '0x-json-schemas',
+ to: 'https://pypi.org/project/0x-json-schemas/',
+ shouldOpenInNewTab: true,
+ },
+ },
+ {
+ description: 'Demo project showing how to interact with the 0x smart contracts using Python',
+ link: {
+ title: '0x-contract-demo',
+ to: 'https://github.com/0xProject/0x-monorepo/blob/development/python-packages/contract_demo/README.md',
+ shouldOpenInNewTab: true,
+ },
+ },
+ ],
[Categories.Ethereum]: [
{
description:
@@ -409,7 +443,10 @@ export class DocsHome extends React.Component<DocsHomeProps, DocsHomeState> {
title: this.props.translate.get(tutorialInfo.link.title as Key, Deco.Cap),
};
}),
- [Categories.ZeroExProtocol]: _.map(CATEGORY_TO_PACKAGES[Categories.ZeroExProtocol], pkg => pkg.link),
+ [Categories.ZeroExProtocolTypescript]: _.map(
+ CATEGORY_TO_PACKAGES[Categories.ZeroExProtocolTypescript],
+ pkg => pkg.link,
+ ),
[Categories.Ethereum]: _.map(CATEGORY_TO_PACKAGES[Categories.Ethereum], pkg => pkg.link),
[Categories.CommunityMaintained]: _.map(
CATEGORY_TO_PACKAGES[Categories.CommunityMaintained],
@@ -466,4 +503,4 @@ export class DocsHome extends React.Component<DocsHomeProps, DocsHomeState> {
});
return menuItems;
}
-}
+} // tslint:disable:max-file-line-count
diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts
index 9492da5a5..081c6d014 100644
--- a/packages/website/ts/types.ts
+++ b/packages/website/ts/types.ts
@@ -655,8 +655,9 @@ export interface TutorialInfo {
}
export enum Categories {
- ZeroExProtocol = '0x Protocol',
- Ethereum = 'Ethereum',
+ ZeroExProtocolTypescript = '0x Protocol (Typescript/Javascript)',
+ ZeroExProtocolPython = '0x Protocol (Python)',
+ Ethereum = 'Ethereum (Typescript/Javascript)',
CommunityMaintained = 'Community Maintained',
}
diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts
index 890f1553a..e84f9d0cc 100644
--- a/packages/website/ts/utils/utils.ts
+++ b/packages/website/ts/utils/utils.ts
@@ -394,7 +394,7 @@ export const utils = {
},
getUsdValueFormattedAmount(amount: BigNumber, decimals: number, price: BigNumber): string {
const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals);
- const value = unitAmount.mul(price);
+ const value = unitAmount.multipliedBy(price);
return utils.format(value, constants.NUMERAL_USD_FORMAT);
},
openUrl(url: string): void {
diff --git a/tsconfig.json b/tsconfig.json
index a49483972..0a063c85b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -20,14 +20,15 @@
// any top-level TypeScript code.
"include": [],
"references": [
- { "path": "./contracts/examples" },
+ { "path": "./contracts/asset-proxy" },
+ { "path": "./contracts/erc20" },
+ { "path": "./contracts/erc721" },
+ { "path": "./contracts/exchange" },
+ { "path": "./contracts/exchange-forwarder" },
+ { "path": "./contracts/exchange-libs" },
{ "path": "./contracts/extensions" },
- { "path": "./contracts/interfaces" },
- { "path": "./contracts/libs" },
{ "path": "./contracts/multisig" },
- { "path": "./contracts/protocol" },
{ "path": "./contracts/test-utils" },
- { "path": "./contracts/tokens" },
{ "path": "./contracts/utils" },
{ "path": "./packages/0x.js" },
{ "path": "./packages/abi-gen-wrappers" },
diff --git a/yarn.lock b/yarn.lock
index 1f29ee2fb..543ec9d5c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1389,12 +1389,6 @@
dependencies:
bignumber.js "7.2.1"
-"@types/ethereumjs-abi@^0.6.0":
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/@types/ethereumjs-abi/-/ethereumjs-abi-0.6.0.tgz#72d21083a36d9288821b62905e04b15e0c12175d"
- dependencies:
- "@types/node" "*"
-
"@types/ethereumjs-tx@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@types/ethereumjs-tx/-/ethereumjs-tx-1.0.0.tgz#ae2ce90a145cc1a6849656db38baf0e793ff7927"
@@ -1434,9 +1428,9 @@
dependencies:
"@types/node" "*"
-"@types/ganache-core@^2.1.0":
- version "2.1.0"
- resolved "https://registry.npmjs.org/@types/ganache-core/-/ganache-core-2.1.0.tgz#b6702857a239d483b79f008f3205bbbc17f080e0"
+"@types/ganache-core@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/@types/ganache-core/-/ganache-core-2.1.2.tgz#e4db6ce901da03be4d2a66de34e06b1f9b90c5e8"
dependencies:
"@types/ethereum-protocol" "*"
@@ -2060,11 +2054,11 @@ abortcontroller-polyfill@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.1.9.tgz#9fefe359fda2e9e0932dc85e6106453ac393b2da"
-abstract-leveldown@0.12.3:
- version "0.12.3"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.3.tgz#116b1ec5c7710ef7a2d5706768bbdb4440be1070"
+abstract-leveldown@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57"
dependencies:
- xtend "~3.0.0"
+ xtend "~4.0.0"
abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1:
version "2.7.2"
@@ -2072,18 +2066,12 @@ abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1:
dependencies:
xtend "~4.0.0"
-abstract-leveldown@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57"
+abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6"
dependencies:
xtend "~4.0.0"
-abstract-leveldown@~0.12.1:
- version "0.12.4"
- resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz#29e18e632e60e4e221d5810247852a63d7b2e410"
- dependencies:
- xtend "~3.0.0"
-
abstract-leveldown@~2.6.0:
version "2.6.3"
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8"
@@ -2148,9 +2136,9 @@ aes-js@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
-aes-js@^0.2.3:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-0.2.4.tgz#94b881ab717286d015fa219e08fb66709dda5a3d"
+aes-js@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a"
agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0:
version "4.2.1"
@@ -2351,10 +2339,6 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
-argsarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb"
-
arr-diff@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
@@ -2523,6 +2507,12 @@ async@1.x, async@^1.4.0, async@^1.4.2, async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+async@2.6.1, async@^2.1.4:
+ version "2.6.1"
+ resolved "https://registry.npmjs.org/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
+ dependencies:
+ lodash "^4.17.10"
+
async@^0.9.0, async@~0.9.0:
version "0.9.2"
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
@@ -2533,12 +2523,6 @@ async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.0:
dependencies:
lodash "^4.14.0"
-async@^2.1.4:
- version "2.6.1"
- resolved "https://registry.npmjs.org/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
- dependencies:
- lodash "^4.17.10"
-
async@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
@@ -3258,10 +3242,6 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-base-x@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/base-x/-/base-x-1.1.0.tgz#42d3d717474f9ea02207f6d1aa1f426913eeb7ac"
-
base-x@^3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77"
@@ -3391,6 +3371,10 @@ bignumber.js@~4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1"
+bignumber.js@~8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-8.0.2.tgz#d8c4e1874359573b1ef03011a2d861214aeef137"
+
binary-extensions@^1.0.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
@@ -3403,7 +3387,7 @@ bintrees@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8"
-bip39@^2.5.0:
+bip39@2.5.0, bip39@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235"
dependencies:
@@ -3413,16 +3397,6 @@ bip39@^2.5.0:
safe-buffer "^5.0.1"
unorm "^1.3.3"
-bip39@~2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.4.0.tgz#a0b8adbf163f53495f00f05d9ede7c25369ccf13"
- dependencies:
- create-hash "^1.1.0"
- pbkdf2 "^3.0.9"
- randombytes "^2.0.1"
- safe-buffer "^5.0.1"
- unorm "^1.3.3"
-
bip66@^1.1.3:
version "1.1.5"
resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22"
@@ -3454,12 +3428,6 @@ bl@^1.0.0:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
-bl@~0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/bl/-/bl-0.8.2.tgz#c9b6bca08d1bc2ea00fc8afb4f1a5fd1e1c66e4e"
- dependencies:
- readable-stream "~1.0.26"
-
bl@~0.9.4:
version "0.9.5"
resolved "https://registry.yarnpkg.com/bl/-/bl-0.9.5.tgz#c06b797af085ea00bc527afc8efcf11de2232054"
@@ -3492,7 +3460,7 @@ bn.js@4.11.7:
version "4.11.7"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.7.tgz#ddb048e50d9482790094c13eb3fcfc833ce7ab46"
-bn.js@=4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.3, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0:
+bn.js@4.11.8, bn.js@=4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.3, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
@@ -3721,7 +3689,7 @@ bs-logger@0.x:
dependencies:
fast-json-stable-stringify "^2.0.0"
-bs58@=4.0.1:
+bs58@=4.0.1, bs58@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
dependencies:
@@ -3731,18 +3699,13 @@ bs58@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
-bs58@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/bs58/-/bs58-3.1.0.tgz#d4c26388bf4804cac714141b1945aa47e5eb248e"
- dependencies:
- base-x "^1.1.0"
-
-bs58check@^1.0.8:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-1.3.4.tgz#c52540073749117714fa042c3047eb8f9151cbf8"
+bs58check@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
dependencies:
- bs58 "^3.1.0"
+ bs58 "^4.0.0"
create-hash "^1.1.0"
+ safe-buffer "^5.1.2"
bser@^2.0.0:
version "2.0.0"
@@ -3766,10 +3729,6 @@ buffer-from@1.x, buffer-from@^1.1.0:
version "1.1.1"
resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-buffer-from@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-0.1.2.tgz#15f4b9bcef012044df31142c14333caf6e0260d0"
-
buffer-from@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
@@ -3813,7 +3772,7 @@ buffer@^5.0.3, buffer@^5.0.5:
base64-js "^1.0.2"
ieee754 "^1.1.4"
-buffer@^5.1.0, buffer@^5.2.1:
+buffer@^5.1.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
dependencies:
@@ -3922,7 +3881,7 @@ cache-base@^1.0.1:
union-value "^1.0.0"
unset-value "^1.0.0"
-cachedown@^1.0.0:
+cachedown@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15"
dependencies:
@@ -4035,17 +3994,9 @@ chai-as-promised@^7.1.0, chai-as-promised@^7.1.1:
dependencies:
check-error "^1.0.2"
-chai-bignumber@^2.0.1, chai-bignumber@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/chai-bignumber/-/chai-bignumber-2.0.2.tgz#de6c219c690b2d66b646ad6930096f9ba2199643"
-
-chai@^3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
- dependencies:
- assertion-error "^1.0.1"
- deep-eql "^0.1.3"
- type-detect "^1.0.0"
+chai-bignumber@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/chai-bignumber/-/chai-bignumber-3.0.0.tgz#e90cf1f468355bbb11a9acd051222586cd2648a9"
chai@^4.0.1, chai@^4.1.2:
version "4.1.2"
@@ -4149,7 +4100,7 @@ checkpoint-store@^1.1.0:
dependencies:
functional-red-black-tree "^1.0.1"
-cheerio@1.0.0-rc.2, cheerio@^1.0.0-rc.2:
+cheerio@^1.0.0-rc.2:
version "1.0.0-rc.2"
resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
dependencies:
@@ -4271,7 +4222,7 @@ classnames@^2.2.5:
version "2.2.5"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
-clean-css@4.2.1, clean-css@4.2.x:
+clean-css@4.2.x:
version "4.2.1"
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
dependencies:
@@ -4372,6 +4323,10 @@ clone-stats@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+clone@2.1.2, clone@^2.0.0, clone@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
+
clone@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
@@ -4380,10 +4335,6 @@ clone@^1.0.0, clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
-clone@^2.0.0, clone@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
-
cloneable-readable@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65"
@@ -4587,7 +4538,7 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-concat-stream@1.6.2, concat-stream@^1.4.6, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@~1.6.2:
+concat-stream@^1.4.6, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@~1.6.2:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
dependencies:
@@ -4829,6 +4780,10 @@ cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+cookiejar@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
+
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -5106,20 +5061,6 @@ css-to-react-native@^2.2.2:
fbjs "^0.8.5"
postcss-value-parser "^3.3.0"
-css-tree@1.0.0-alpha.28:
- version "1.0.0-alpha.28"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f"
- dependencies:
- mdn-data "~1.1.0"
- source-map "^0.5.3"
-
-css-tree@1.0.0-alpha.29:
- version "1.0.0-alpha.29"
- resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
- dependencies:
- mdn-data "~1.1.0"
- source-map "^0.5.3"
-
css-vendor@^0.3.8:
version "0.3.8"
resolved "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa"
@@ -5187,12 +5128,6 @@ csso@~2.3.1:
clap "^1.0.9"
source-map "^0.5.3"
-csso@~3.5.0:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
- dependencies:
- css-tree "1.0.0-alpha.29"
-
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
version "0.3.4"
resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
@@ -5225,10 +5160,6 @@ cyclist@~0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
-d64@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d64/-/d64-1.0.0.tgz#4002a87e850cbfc9f9d9706b60fca613a3336e90"
-
d@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
@@ -5402,12 +5333,6 @@ dedent@^0.7.0:
version "0.7.0"
resolved "http://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
-deep-eql@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
- dependencies:
- type-detect "0.1.1"
-
deep-eql@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
@@ -5457,18 +5382,19 @@ defaults@^1.0.0, defaults@^1.0.3:
dependencies:
clone "^1.0.2"
-deferred-leveldown@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz#2cef1f111e1c57870d8bbb8af2650e587cd2f5b4"
- dependencies:
- abstract-leveldown "~0.12.1"
-
deferred-leveldown@~1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb"
dependencies:
abstract-leveldown "~2.6.0"
+deferred-leveldown@~4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20"
+ dependencies:
+ abstract-leveldown "~5.0.0"
+ inherits "^2.0.3"
+
define-properties@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
@@ -5940,6 +5866,16 @@ encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+encoding-down@5.0.4:
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614"
+ dependencies:
+ abstract-leveldown "^5.0.0"
+ inherits "^2.0.3"
+ level-codec "^9.0.0"
+ level-errors "^2.0.0"
+ xtend "^4.0.1"
+
encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
@@ -6096,10 +6032,6 @@ es6-promise@^4.0.3:
version "4.2.4"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
-es6-promise@^4.1.1:
- version "4.2.5"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
-
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
@@ -6354,6 +6286,13 @@ eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2:
json-rpc-random-id "^1.0.0"
xtend "^4.0.1"
+eth-sig-util@2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.0.2.tgz#bfdb274293620404b7631019dc3d7f17bb2e06f4"
+ dependencies:
+ ethereumjs-abi "0.6.5"
+ ethereumjs-util "^5.1.1"
+
eth-sig-util@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210"
@@ -6361,17 +6300,6 @@ eth-sig-util@^1.4.2:
ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git"
ethereumjs-util "^5.1.1"
-eth-sig-util@^2.0.2:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.1.0.tgz#33e60e5486897a2ddeb4bf5a0993b2c6d5cc9e19"
- dependencies:
- buffer "^5.2.1"
- elliptic "^6.4.0"
- ethereumjs-abi "0.6.5"
- ethereumjs-util "^5.1.1"
- tweetnacl "^1.0.0"
- tweetnacl-util "^0.15.0"
-
eth-tx-summary@^3.1.2:
version "3.2.1"
resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.1.tgz#0c2d5e4c57d2511614f85b9b583c32fa2924166c"
@@ -6390,10 +6318,6 @@ eth-tx-summary@^3.1.2:
treeify "^1.0.1"
web3-provider-engine "^13.3.2"
-ethereum-common@0.0.16:
- version "0.0.16"
- resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.16.tgz#9a1e169ead34ab75e089f50ca512bfd0fbd12655"
-
ethereum-common@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca"
@@ -6402,7 +6326,7 @@ ethereum-common@^0.0.18:
version "0.0.18"
resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f"
-ethereumjs-abi@0.6.5, ethereumjs-abi@^0.6.5:
+ethereumjs-abi@0.6.5:
version "0.6.5"
resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241"
dependencies:
@@ -6416,13 +6340,31 @@ ethereumjs-abi@0.6.5, ethereumjs-abi@^0.6.5:
bn.js "^4.10.0"
ethereumjs-util "^5.0.0"
-ethereumjs-account@^2.0.3, ethereumjs-account@~2.0.4:
+ethereumjs-account@2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84"
+ dependencies:
+ ethereumjs-util "^5.0.0"
+ rlp "^2.0.0"
+ safe-buffer "^5.1.1"
+
+ethereumjs-account@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.4.tgz#f8c30231bcb707f4514d8a052c1f9da103624d47"
dependencies:
ethereumjs-util "^4.0.1"
rlp "^2.0.0"
+ethereumjs-block@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.1.0.tgz#71d1b19e18061f14cf6371bf34ba31a359931360"
+ dependencies:
+ async "^2.0.1"
+ ethereumjs-common "^0.6.0"
+ ethereumjs-tx "^1.2.2"
+ ethereumjs-util "^5.0.0"
+ merkle-patricia-tree "^2.1.2"
+
ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0, ethereumjs-block@~1.7.0:
version "1.7.1"
resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f"
@@ -6433,16 +6375,6 @@ ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0, ether
ethereumjs-util "^5.0.0"
merkle-patricia-tree "^2.1.2"
-ethereumjs-block@~1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.2.2.tgz#2ec7534a59021b8ec9b83c30e49690c6ebaedda1"
- dependencies:
- async "^1.5.2"
- ethereum-common "0.0.16"
- ethereumjs-tx "^1.0.0"
- ethereumjs-util "^4.0.1"
- merkle-patricia-tree "^2.1.2"
-
ethereumjs-blockstream@6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/ethereumjs-blockstream/-/ethereumjs-blockstream-6.0.0.tgz#79d726d1f358935eb65195e91d40344c31e87eff"
@@ -6451,21 +6383,41 @@ ethereumjs-blockstream@6.0.0:
source-map-support "0.5.6"
uuid "3.2.1"
-ethereumjs-tx@0xProject/ethereumjs-tx#fake-tx-include-signature-by-default, ethereumjs-tx@1.3.4:
- version "1.3.4"
- resolved "https://codeload.github.com/0xProject/ethereumjs-tx/tar.gz/29d1153889c389591f74b2401da8a0c6ad40f9a7"
+ethereumjs-common@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-0.6.1.tgz#ec98edf315a7f107afb6acc48e937a8266979fae"
+
+ethereumjs-common@~0.4.0:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-0.4.1.tgz#27690a24a817b058cc3a2aedef9392e8d7d63984"
+
+ethereumjs-tx@1.3.7:
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a"
dependencies:
ethereum-common "^0.0.18"
ethereumjs-util "^5.0.0"
-ethereumjs-tx@^1.0.0, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.5:
+ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.5.tgz#c5ab252977ed2b13fb2fca195fdfa95a7d54f858"
dependencies:
ethereum-common "^0.0.18"
ethereumjs-util "^5.0.0"
-ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0, ethereumjs-util@^4.4.0:
+ethereumjs-util@5.2.0, ethereumjs-util@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642"
+ dependencies:
+ bn.js "^4.11.0"
+ create-hash "^1.1.2"
+ ethjs-util "^0.1.3"
+ keccak "^1.0.2"
+ rlp "^2.0.0"
+ safe-buffer "^5.1.1"
+ secp256k1 "^3.0.1"
+
+ethereumjs-util@^4.0.1, ethereumjs-util@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6"
dependencies:
@@ -6487,32 +6439,20 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum
safe-buffer "^5.1.1"
secp256k1 "^3.0.1"
-ethereumjs-util@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642"
- dependencies:
- bn.js "^4.11.0"
- create-hash "^1.1.2"
- ethjs-util "^0.1.3"
- keccak "^1.0.2"
- rlp "^2.0.0"
- safe-buffer "^5.1.1"
- secp256k1 "^3.0.1"
-
-ethereumjs-vm@2.3.5:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz#e69306737b8a7ea80c633ceb9b7dd561897007de"
+ethereumjs-vm@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.4.0.tgz#244f1e35f2755e537a13546111d1a4c159d34b13"
dependencies:
async "^2.1.2"
async-eventemitter "^0.2.2"
- ethereum-common "0.2.0"
ethereumjs-account "^2.0.3"
ethereumjs-block "~1.7.0"
- ethereumjs-util "^5.1.3"
+ ethereumjs-common "~0.4.0"
+ ethereumjs-util "^5.2.0"
fake-merkle-patricia-tree "^1.0.1"
functional-red-black-tree "^1.0.1"
merkle-patricia-tree "^2.1.2"
- rustbn.js "~0.1.1"
+ rustbn.js "~0.2.0"
safe-buffer "^5.1.1"
ethereumjs-vm@^2.0.2, ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4:
@@ -6531,17 +6471,18 @@ ethereumjs-vm@^2.0.2, ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4:
rustbn.js "~0.1.1"
safe-buffer "^5.1.1"
-ethereumjs-wallet@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.0.tgz#82763b1697ee7a796be7155da9dfb49b2f98cfdb"
+ethereumjs-wallet@0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.2.tgz#67244b6af3e8113b53d709124b25477b64aeccda"
dependencies:
- aes-js "^0.2.3"
- bs58check "^1.0.8"
- ethereumjs-util "^4.4.0"
- hdkey "^0.7.0"
+ aes-js "^3.1.1"
+ bs58check "^2.1.2"
+ ethereumjs-util "^5.2.0"
+ hdkey "^1.0.0"
+ safe-buffer "^5.1.2"
scrypt.js "^0.2.0"
- utf8 "^2.1.1"
- uuid "^2.0.1"
+ utf8 "^3.0.0"
+ uuid "^3.3.2"
ethers@~4.0.4:
version "4.0.4"
@@ -6752,11 +6693,7 @@ expect@^23.6.0:
jest-message-util "^23.4.0"
jest-regex-util "^23.3.0"
-express-history-api-fallback@2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/express-history-api-fallback/-/express-history-api-fallback-2.2.1.tgz#3a2ad27f7bebc90fc533d110d7c6d83097bcd057"
-
-express@4.16.3, express@^4.14.0, express@^4.15.2, express@^4.16.2:
+express@^4.14.0, express@^4.15.2, express@^4.16.2:
version "4.16.3"
resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53"
dependencies:
@@ -6889,15 +6826,6 @@ extract-comments@^1.1.0:
esprima-extract-comments "^1.1.0"
parse-code-context "^1.0.0"
-extract-zip@^1.6.6:
- version "1.6.7"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
- dependencies:
- concat-stream "1.6.2"
- debug "2.6.9"
- mkdirp "0.5.1"
- yauzl "2.4.1"
-
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@@ -6910,7 +6838,7 @@ eyes@0.1.x:
version "0.1.8"
resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
-fake-merkle-patricia-tree@^1.0.1, fake-merkle-patricia-tree@~1.0.1:
+fake-merkle-patricia-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3"
dependencies:
@@ -7077,7 +7005,7 @@ fileset@^2.0.2:
glob "^7.0.3"
minimatch "^3.0.3"
-filesize@^3.5.11, filesize@^3.6.1:
+filesize@^3.6.1:
version "3.6.1"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
@@ -7456,82 +7384,39 @@ ganache-cli@6.1.8:
dependencies:
source-map-support "^0.5.3"
-ganache-core@0xProject/ganache-core#monorepo-dep:
- version "2.1.2"
- resolved "https://codeload.github.com/0xProject/ganache-core/tar.gz/9f86ca3d114ee4395e2d16362f95a8c57ec69bb4"
- dependencies:
- abstract-leveldown "^3.0.0"
- async "^2.5.0"
- bip39 "~2.4.0"
- bn.js "4.11.6"
- cachedown "^1.0.0"
- chai "^3.5.0"
- clone "^2.1.1"
- ethereumjs-account "~2.0.4"
- ethereumjs-block "~1.2.2"
- ethereumjs-tx "0xProject/ethereumjs-tx#fake-tx-include-signature-by-default"
- ethereumjs-util "^5.2.0"
- ethereumjs-vm "2.3.5"
- ethereumjs-wallet "~0.6.0"
- fake-merkle-patricia-tree "~1.0.1"
- heap "~0.2.6"
- js-scrypt "^0.2.0"
- level-sublevel "^6.6.1"
- levelup "^1.1.0"
- localstorage-down "^0.6.7"
- lodash "^4.17.5"
- merkle-patricia-tree "^2.2.0"
- pify "^3.0.0"
- prepend-file "^1.3.1"
- seedrandom "~2.4.2"
- shebang-loader "0.0.1"
- solc "0.4.24"
- temp "^0.8.3"
- tmp "0.0.31"
- web3 "^1.0.0-beta.34"
- web3-provider-engine "^14.0.6"
- websocket "^1.0.24"
- yargs "^7.0.2"
-
-ganache-core@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.2.1.tgz#c0125d77d3e28d627a812dd002dac21e1d2cc8b7"
- dependencies:
- abstract-leveldown "^3.0.0"
- async "^2.5.0"
- bip39 "~2.4.0"
- bn.js "4.11.6"
- cachedown "^1.0.0"
- chai "^3.5.0"
- clone "^2.1.1"
- eth-sig-util "^2.0.2"
- ethereumjs-abi "^0.6.5"
- ethereumjs-account "~2.0.4"
- ethereumjs-block "~1.2.2"
- ethereumjs-tx "1.3.4"
- ethereumjs-util "^5.2.0"
- ethereumjs-vm "2.3.5"
- ethereumjs-wallet "0.6.0"
- fake-merkle-patricia-tree "~1.0.1"
- heap "~0.2.6"
- js-scrypt "^0.2.0"
- level-sublevel "^6.6.1"
- levelup "^1.1.0"
- localstorage-down "^0.6.7"
- lodash "^4.17.5"
- merkle-patricia-tree "^2.2.0"
- pify "^3.0.0"
- prepend-file "^1.3.1"
- request "^2.87.0"
- seedrandom "~2.4.2"
- shebang-loader "0.0.1"
- solc "0.4.24"
- temp "^0.8.3"
- tmp "0.0.31"
- web3 "^1.0.0-beta.34"
- web3-provider-engine "^14.0.6"
- websocket "^1.0.24"
- yargs "^7.0.2"
+ganache-core@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.3.3.tgz#e35c76d405f0ffba5c48621596fdcc38b0a03136"
+ dependencies:
+ abstract-leveldown "3.0.0"
+ async "2.6.1"
+ bip39 "2.5.0"
+ bn.js "4.11.8"
+ cachedown "1.0.0"
+ clone "2.1.2"
+ debug "3.1.0"
+ encoding-down "5.0.4"
+ eth-sig-util "2.0.2"
+ ethereumjs-abi "0.6.5"
+ ethereumjs-account "2.0.5"
+ ethereumjs-block "2.1.0"
+ ethereumjs-tx "1.3.7"
+ ethereumjs-util "5.2.0"
+ ethereumjs-vm "2.4.0"
+ heap "0.2.6"
+ level-sublevel "6.6.4"
+ levelup "3.1.1"
+ lodash "4.17.10"
+ merkle-patricia-tree "2.3.1"
+ rlp "2.1.0"
+ seedrandom "2.4.4"
+ source-map-support "0.5.9"
+ tmp "0.0.33"
+ web3-provider-engine "14.1.0"
+ websocket "1.0.26"
+ optionalDependencies:
+ ethereumjs-wallet "0.6.2"
+ web3 "1.0.0-beta.35"
gauge@~1.2.5:
version "1.2.7"
@@ -7562,10 +7447,6 @@ gaze@^0.5.1:
dependencies:
globule "~0.1.0"
-generic-pool@~2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.0.4.tgz#f9718deda82fa125ed5c43e341c9a215a766d9a3"
-
genfun@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/genfun/-/genfun-4.0.1.tgz#ed10041f2e4a7f1b0a38466d17a5c3e27df1dfc1"
@@ -8103,10 +7984,6 @@ has-gulplog@^0.1.0:
dependencies:
sparkles "^1.0.0"
-has-localstorage@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-localstorage/-/has-localstorage-1.0.1.tgz#fe62406c4767fbd6d784dac6905928108b82971b"
-
has-symbol-support-x@^1.4.1:
version "1.4.2"
resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455"
@@ -8215,13 +8092,21 @@ hawk@~6.0.2:
hoek "4.x.x"
sntp "2.x.x"
-hdkey@^0.7.0, hdkey@^0.7.1:
+hdkey@^0.7.1:
version "0.7.1"
resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-0.7.1.tgz#caee4be81aa77921e909b8d228dd0f29acaee632"
dependencies:
coinstring "^2.0.0"
secp256k1 "^3.0.1"
+hdkey@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.0.tgz#e74e7b01d2c47f797fa65d1d839adb7a44639f29"
+ dependencies:
+ coinstring "^2.0.0"
+ safe-buffer "^5.1.1"
+ secp256k1 "^3.0.1"
+
he@1.1.1, he@1.1.x:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
@@ -8233,16 +8118,10 @@ header-case@^1.0.0:
no-case "^2.2.0"
upper-case "^1.1.3"
-heap@~0.2.6:
+heap@0.2.6:
version "0.2.6"
resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac"
-highland@2.13.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/highland/-/highland-2.13.0.tgz#a4394d8dcb970cd071a79a20f0762b906258dc19"
- dependencies:
- util-deprecate "^1.0.2"
-
highlight.js@^9.0.0, highlight.js@^9.11.0, highlight.js@~9.12.0:
version "9.12.0"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
@@ -8337,7 +8216,7 @@ html-entities@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-html-minifier@3.5.20, html-minifier@^3.2.3:
+html-minifier@^3.2.3:
version "3.5.20"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14"
dependencies:
@@ -8492,13 +8371,6 @@ humanize-ms@^1.2.1:
dependencies:
ms "^2.0.0"
-humble-localstorage@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/humble-localstorage/-/humble-localstorage-1.4.2.tgz#d05ab0d526c4edbddbf7c6a60df6ff5805283469"
- dependencies:
- has-localstorage "^1.0.1"
- localstorage-memory "^1.0.1"
-
hyperquest@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/hyperquest/-/hyperquest-1.2.0.tgz#39e1fef66888dc7ce0dec6c0dd814f6fc8944ad5"
@@ -9691,12 +9563,6 @@ js-combinatorics@^0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/js-combinatorics/-/js-combinatorics-0.5.3.tgz#5da5a1c4632ec59fdf8d49dccfe59ef088122b15"
-js-scrypt@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/js-scrypt/-/js-scrypt-0.2.0.tgz#7a62b701b4616e70ad0cde544627aabb99d7fe39"
- dependencies:
- generic-pool "~2.0.4"
-
js-sha3@0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a"
@@ -10142,6 +10008,10 @@ less@^2.7.2:
request "2.81.0"
source-map "^0.5.3"
+level-codec@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.0.tgz#2d3a0e835c4aa8339ec63de3f5a37480b74a5f87"
+
level-codec@~7.0.0:
version "7.0.1"
resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7"
@@ -10152,12 +10022,26 @@ level-errors@^1.0.3:
dependencies:
errno "~0.1.1"
+level-errors@^2.0.0, level-errors@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.0.tgz#2de5b566b62eef92f99e19be74397fbc512563fa"
+ dependencies:
+ errno "~0.1.1"
+
level-errors@~1.0.3:
version "1.0.5"
resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859"
dependencies:
errno "~0.1.1"
+level-iterator-stream@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.5"
+ xtend "^4.0.0"
+
level-iterator-stream@~1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed"
@@ -10167,21 +10051,32 @@ level-iterator-stream@~1.3.0:
readable-stream "^1.0.33"
xtend "^4.0.0"
+level-iterator-stream@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730"
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ xtend "^4.0.0"
+
level-post@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0"
dependencies:
ltgt "^2.1.2"
-level-sublevel@^6.6.1:
- version "6.6.1"
- resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.1.tgz#f9a77f7521ab70a8f8e92ed56f21a3c7886a4485"
+level-sublevel@6.6.4:
+ version "6.6.4"
+ resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba"
dependencies:
bytewise "~1.1.0"
- levelup "~0.19.0"
+ level-codec "^9.0.0"
+ level-errors "^2.0.0"
+ level-iterator-stream "^2.0.3"
ltgt "~2.1.1"
+ pull-defer "^0.2.2"
pull-level "^2.0.3"
- pull-stream "^3.4.5"
+ pull-stream "^3.6.8"
typewiselite "~1.0.0"
xtend "~4.0.0"
@@ -10192,7 +10087,16 @@ level-ws@0.0.0:
readable-stream "~1.0.15"
xtend "~2.1.1"
-levelup@^1.1.0, levelup@^1.2.1:
+levelup@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189"
+ dependencies:
+ deferred-leveldown "~4.0.0"
+ level-errors "~2.0.0"
+ level-iterator-stream "~3.0.0"
+ xtend "~4.0.0"
+
+levelup@^1.2.1:
version "1.3.9"
resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab"
dependencies:
@@ -10204,18 +10108,6 @@ levelup@^1.1.0, levelup@^1.2.1:
semver "~5.4.1"
xtend "~4.0.0"
-levelup@~0.19.0:
- version "0.19.1"
- resolved "https://registry.yarnpkg.com/levelup/-/levelup-0.19.1.tgz#f3a6a7205272c4b5f35e412ff004a03a0aedf50b"
- dependencies:
- bl "~0.8.1"
- deferred-leveldown "~0.2.0"
- errno "~0.1.1"
- prr "~0.0.0"
- readable-stream "~1.0.26"
- semver "~5.1.0"
- xtend "~3.0.0"
-
leven@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
@@ -10372,22 +10264,6 @@ loader-utils@^0.2.16, loader-utils@~0.2.2:
json5 "^0.5.0"
object-assign "^4.0.1"
-localstorage-down@^0.6.7:
- version "0.6.7"
- resolved "https://registry.yarnpkg.com/localstorage-down/-/localstorage-down-0.6.7.tgz#d0799a93b31e6c5fa5188ec06242eb1cce9d6d15"
- dependencies:
- abstract-leveldown "0.12.3"
- argsarray "0.0.1"
- buffer-from "^0.1.1"
- d64 "^1.0.0"
- humble-localstorage "^1.4.2"
- inherits "^2.0.1"
- tiny-queue "0.2.0"
-
-localstorage-memory@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/localstorage-memory/-/localstorage-memory-1.0.2.tgz#cd4a8f210e55dd519c929f4b4cc82829b58f9a51"
-
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -10619,6 +10495,10 @@ lodash.words@^3.0.0:
dependencies:
lodash._root "^3.0.0"
+lodash@4.17.10, lodash@^4.17.10:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
+
lodash@=4.17.4:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -10635,10 +10515,6 @@ lodash@^4.14.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lo
version "4.17.5"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
-lodash@^4.17.10:
- version "4.17.10"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
-
lodash@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
@@ -10914,10 +10790,6 @@ mdast-add-list-metadata@1.0.1:
dependencies:
unist-util-visit-parents "1.1.2"
-mdn-data@~1.1.0:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
-
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
@@ -11029,7 +10901,7 @@ merge@^1.2.0:
version "1.2.0"
resolved "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
-merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.2.0:
+merkle-patricia-tree@2.3.1, merkle-patricia-tree@^2.1.2:
version "2.3.1"
resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz#7d4e7263a9c85c1679187cad4a6d71f48d524c71"
dependencies:
@@ -11135,17 +11007,6 @@ min-document@^2.19.0:
dependencies:
dom-walk "^0.1.0"
-minimalcss@0.7.10:
- version "0.7.10"
- resolved "https://registry.yarnpkg.com/minimalcss/-/minimalcss-0.7.10.tgz#453b642e43065cfebcaf21344171b9c34fb4e00e"
- dependencies:
- cheerio "1.0.0-rc.2"
- css-tree "1.0.0-alpha.28"
- csso "~3.5.0"
- filesize "^3.5.11"
- minimist "^1.2.0"
- puppeteer "^1.4.0"
-
minimalistic-assert@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -12157,7 +12018,7 @@ os-locale@^3.0.0:
lcid "^2.0.0"
mem "^4.0.0"
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -12928,6 +12789,10 @@ postgres-interval@^1.1.0:
dependencies:
xtend "^4.0.0"
+postinstall-build@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.3.tgz#238692f712a481d8f5bc8960e94786036241efc7"
+
prebuild-install@^2.2.2:
version "2.5.3"
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69"
@@ -12956,12 +12821,6 @@ prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-prepend-file@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/prepend-file/-/prepend-file-1.3.1.tgz#83b16e0b4ac1901fce88dbd945a22f4cc81df579"
- dependencies:
- tmp "0.0.31"
-
prepend-http@^1.0.0, prepend-http@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
@@ -13146,14 +13005,6 @@ proxy-addr@~2.0.4:
forwarded "~0.1.2"
ipaddr.js "1.8.0"
-proxy-from-env@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
-
-prr@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
-
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
@@ -13210,6 +13061,10 @@ pull-cat@^1.1.9:
version "1.1.11"
resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b"
+pull-defer@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113"
+
pull-level@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac"
@@ -13233,10 +13088,14 @@ pull-pushable@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581"
-pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.4.5:
+pull-stream@^3.2.3, pull-stream@^3.4.0:
version "3.6.7"
resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.7.tgz#fe4ae4f7cc3a9ee3ac82cd5be32729f2f0d5f02b"
+pull-stream@^3.6.8:
+ version "3.6.9"
+ resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.9.tgz#c774724cd63bc0984c3695f74c819aa02e977320"
+
pull-window@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0"
@@ -13292,19 +13151,6 @@ punycode@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d"
-puppeteer@^1.4.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.9.0.tgz#56dba79e7ea4faac807877bee3b23d63291fc59e"
- dependencies:
- debug "^3.1.0"
- extract-zip "^1.6.6"
- https-proxy-agent "^2.2.1"
- mime "^2.0.3"
- progress "^2.0.0"
- proxy-from-env "^1.0.0"
- rimraf "^2.6.1"
- ws "^5.1.1"
-
q@^1.1.2, q@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@@ -13549,6 +13395,16 @@ react-dom@^16.3.2:
object-assign "^4.1.1"
prop-types "^15.6.0"
+react-dom@^16.4.2:
+ version "16.7.0"
+ resolved "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz#a17b2a7ca89ee7390bc1ed5eb81783c7461748b8"
+ integrity sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.12.0"
+
react-dom@^16.5.2:
version "16.5.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.5.2.tgz#b69ee47aa20bab5327b2b9d7c1fe2a30f2cfa9d7"
@@ -13600,14 +13456,14 @@ react-helmet@^5.2.0:
prop-types "^15.5.4"
react-side-effect "^1.1.0"
-react-highlight@0xproject/react-highlight#699ac4d9529e33520bff4b9bd9c624d21efbba75:
+react-highlight@0xproject/react-highlight#fix/react-version:
version "1.0.0"
resolved "https://codeload.github.com/0xproject/react-highlight/tar.gz/699ac4d9529e33520bff4b9bd9c624d21efbba75"
dependencies:
highlight.js "^9.11.0"
highlightjs-solidity "^1.0.5"
- react "^16.4.2"
- react-dom "^16.4.2"
+ react "^16.5.2"
+ react-dom "^16.5.2"
react-hot-loader@^4.3.3:
version "4.3.4"
@@ -13782,21 +13638,6 @@ react-side-effect@^1.0.2, react-side-effect@^1.1.0:
exenv "^1.2.1"
shallowequal "^1.0.1"
-react-snap@^1.19.0:
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/react-snap/-/react-snap-1.19.0.tgz#125883c95434987d78a55a3a72c733227721acb3"
- dependencies:
- clean-css "4.2.1"
- express "4.16.3"
- express-history-api-fallback "2.2.1"
- highland "2.13.0"
- html-minifier "3.5.20"
- minimalcss "0.7.10"
- mkdirp "0.5.1"
- puppeteer "^1.4.0"
- serve-static "1.13.2"
- sourcemapped-stacktrace-node "2.1.8"
-
react-svg-core@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/react-svg-core/-/react-svg-core-2.1.0.tgz#3700322af70117c91f83f18febb481128de3cfbb"
@@ -13890,6 +13731,16 @@ react@^16.3.2:
object-assign "^4.1.1"
prop-types "^15.6.0"
+react@^16.4.2:
+ version "16.7.0"
+ resolved "https://registry.npmjs.org/react/-/react-16.7.0.tgz#b674ec396b0a5715873b350446f7ea0802ab6381"
+ integrity sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+ prop-types "^15.6.2"
+ scheduler "^0.12.0"
+
react@^16.5.2:
version "16.5.2"
resolved "https://registry.yarnpkg.com/react/-/react-16.5.2.tgz#19f6b444ed139baa45609eee6dc3d318b3895d42"
@@ -13977,7 +13828,7 @@ read@1, read@1.0.x, read@~1.0.1, read@~1.0.5:
dependencies:
mute-stream "~0.0.4"
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5:
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
dependencies:
@@ -14584,10 +14435,6 @@ rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6
dependencies:
glob "^7.0.5"
-rimraf@~2.2.6:
- version "2.2.8"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
-
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
@@ -14595,6 +14442,12 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^2.0.0"
inherits "^2.0.1"
+rlp@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.1.0.tgz#e4f9886d5a982174f314543831e36e1a658460f9"
+ dependencies:
+ safe-buffer "^5.1.1"
+
rlp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.0.0.tgz#9db384ff4b89a8f61563d92395d8625b18f3afb0"
@@ -14685,6 +14538,10 @@ rustbn.js@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.1.2.tgz#979fa0f9562216dd667c9d2cd179ae5d13830eff"
+rustbn.js@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca"
+
rx-lite-aggregates@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
@@ -14772,6 +14629,14 @@ schedule@^0.5.0:
dependencies:
object-assign "^4.1.1"
+scheduler@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz#8ab17699939c0aedc5a196a657743c496538647b"
+ integrity sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
+
schema-utils@^0.4.4:
version "0.4.7"
resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
@@ -14834,9 +14699,9 @@ secp256k1@^3.0.1:
nan "^2.2.1"
safe-buffer "^5.1.0"
-seedrandom@~2.4.2:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc"
+seedrandom@2.4.4:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba"
seek-bzip@^1.0.5:
version "1.0.5"
@@ -14907,10 +14772,6 @@ semver@^5.5.1:
version "5.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
-semver@~5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.1.tgz#a3292a373e6f3e0798da0b20641b9a9c5bc47e19"
-
semver@~5.3.0:
version "5.3.0"
resolved "http://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -15054,10 +14915,6 @@ shebang-command@^1.2.0:
dependencies:
shebang-regex "^1.0.0"
-shebang-loader@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/shebang-loader/-/shebang-loader-0.0.1.tgz#a4000495d44cceefbec63435e7b1698569fa52ec"
-
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
@@ -15254,16 +15111,6 @@ socks@~2.2.0:
ip "^1.1.5"
smart-buffer "^4.0.1"
-solc@0.4.24:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.24.tgz#354f14b269b38cbaa82a47d1ff151723502b954e"
- dependencies:
- fs-extra "^0.30.0"
- memorystream "^0.3.1"
- require-from-string "^1.1.0"
- semver "^5.3.0"
- yargs "^4.7.1"
-
solc@^0.4.2:
version "0.4.25"
resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.25.tgz#06b8321f7112d95b4b903639b1138a4d292f5faa"
@@ -15365,6 +15212,13 @@ source-map-support@0.5.6, source-map-support@^0.5.6:
buffer-from "^1.0.0"
source-map "^0.6.0"
+source-map-support@0.5.9, source-map-support@~0.5.6:
+ version "0.5.9"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map-support@^0.4.15:
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
@@ -15377,13 +15231,6 @@ source-map-support@^0.5.0, source-map-support@^0.5.3:
dependencies:
source-map "^0.6.0"
-source-map-support@~0.5.6:
- version "0.5.9"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f"
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
source-map-url@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@@ -15408,14 +15255,6 @@ source-map@~0.2.0:
dependencies:
amdefine ">=0.0.4"
-sourcemapped-stacktrace-node@2.1.8:
- version "2.1.8"
- resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace-node/-/sourcemapped-stacktrace-node-2.1.8.tgz#96fd64263051e252ce8dabf9801bea29dc7e5990"
- dependencies:
- es6-promise "^4.1.1"
- isomorphic-fetch "^2.2.1"
- source-map "^0.6.1"
-
space-separated-tokens@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412"
@@ -16151,13 +15990,6 @@ temp-write@^3.4.0:
temp-dir "^1.0.0"
uuid "^3.0.1"
-temp@^0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
- dependencies:
- os-tmpdir "^1.0.0"
- rimraf "~2.2.6"
-
term-size@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
@@ -16306,10 +16138,6 @@ tiny-emitter@^2.0.0:
version "2.0.2"
resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c"
-tiny-queue@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.0.tgz#c49fcb5c87555be1b4a5df7eb87101d5b78bc9dc"
-
title-case@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa"
@@ -16317,12 +16145,6 @@ title-case@^2.1.0:
no-case "^2.2.0"
upper-case "^1.0.3"
-tmp@0.0.31:
- version "0.0.31"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
- dependencies:
- os-tmpdir "~1.0.1"
-
tmp@0.0.33, tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -16608,10 +16430,6 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
-tweetnacl-util@^0.15.0:
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz#4576c1cee5e2d63d207fee52f1ba02819480bc75"
-
tweetnacl@0.13.2:
version "0.13.2"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.13.2.tgz#453161770469d45cd266c36404e2bc99a8fa9944"
@@ -16620,24 +16438,12 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-tweetnacl@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.0.tgz#713d8b818da42068740bf68386d0479e66fc8a7b"
-
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
dependencies:
prelude-ls "~1.1.2"
-type-detect@0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
-
-type-detect@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
-
type-detect@^4.0.0, type-detect@^4.0.5:
version "4.0.8"
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
@@ -16689,6 +16495,14 @@ typedoc@0.13.0:
typedoc-default-themes "^0.5.0"
typescript "3.1.x"
+typemoq@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/typemoq/-/typemoq-2.1.0.tgz#4452ce360d92cf2a1a180f0c29de2803f87af1e8"
+ dependencies:
+ circular-json "^0.3.1"
+ lodash "^4.17.4"
+ postinstall-build "^5.0.1"
+
typeorm@^0.2.7:
version "0.2.11"
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.11.tgz#d81a295ed822e05043f2920cd539f52a963896b0"
@@ -17076,7 +16890,11 @@ utf8@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96"
-util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+utf8@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -17344,9 +17162,9 @@ wcwidth@^1.0.0:
dependencies:
defaults "^1.0.3"
-web3-bzz@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.34.tgz#068d37777ab65e5c60f8ec8b9a50cfe45277929c"
+web3-bzz@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.35.tgz#9d5e1362b3db2afd77d65619b7cd46dd5845c192"
dependencies:
got "7.1.0"
swarm-js "0.1.37"
@@ -17360,51 +17178,68 @@ web3-core-helpers@1.0.0-beta.34:
web3-eth-iban "1.0.0-beta.34"
web3-utils "1.0.0-beta.34"
-web3-core-method@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.34.tgz#ec163c8a2c490fa02a7ec15559fa7307fc7cc6dd"
+web3-core-helpers@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.35.tgz#d681d218a0c6e3283ee1f99a078ab9d3eef037f1"
dependencies:
underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.34"
- web3-core-promievent "1.0.0-beta.34"
- web3-core-subscriptions "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ web3-eth-iban "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
-web3-core-promievent@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.34.tgz#a4f4fa6784bb293e82c60960ae5b56a94cd03edc"
+web3-core-method@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.35.tgz#fc10e2d546cf4886038e6130bd5726b0952a4e5f"
+ dependencies:
+ underscore "1.8.3"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-promievent "1.0.0-beta.35"
+ web3-core-subscriptions "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
+
+web3-core-promievent@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.35.tgz#4f1b24737520fa423fee3afee110fbe82bcb8691"
dependencies:
any-promise "1.3.0"
eventemitter3 "1.1.1"
-web3-core-requestmanager@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.34.tgz#01f8f6cf2ae6b6f0b70c38bae1ef741b5bab215c"
+web3-core-requestmanager@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.35.tgz#2b77cbf6303720ad68899b39fa7f584dc03dbc8f"
dependencies:
underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.34"
- web3-providers-http "1.0.0-beta.34"
- web3-providers-ipc "1.0.0-beta.34"
- web3-providers-ws "1.0.0-beta.34"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-providers-http "1.0.0-beta.35"
+ web3-providers-ipc "1.0.0-beta.35"
+ web3-providers-ws "1.0.0-beta.35"
-web3-core-subscriptions@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.34.tgz#9fed144033f221c3cf21060302ffdaf5ef2de2de"
+web3-core-subscriptions@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.35.tgz#c1b76a2ad3c6e80f5d40b8ba560f01e0f4628758"
dependencies:
eventemitter3 "1.1.1"
underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.34"
+ web3-core-helpers "1.0.0-beta.35"
-web3-core@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.34.tgz#121be8555e9fb00d2c5d05ddd3381d0c9e46987e"
+web3-core@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.35.tgz#0c44d3c50d23219b0b1531d145607a9bc7cd4b4f"
dependencies:
- web3-core-helpers "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-core-requestmanager "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-core-requestmanager "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
-web3-eth-abi@1.0.0-beta.34, web3-eth-abi@^1.0.0-beta.24:
+web3-eth-abi@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.35.tgz#2eb9c1c7c7233db04010defcb192293e0db250e6"
+ dependencies:
+ bn.js "4.11.6"
+ underscore "1.8.3"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
+
+web3-eth-abi@^1.0.0-beta.24:
version "1.0.0-beta.34"
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.34.tgz#034533e3aa2f7e59ff31793eaea685c0ed5af67a"
dependencies:
@@ -17413,9 +17248,9 @@ web3-eth-abi@1.0.0-beta.34, web3-eth-abi@^1.0.0-beta.24:
web3-core-helpers "1.0.0-beta.34"
web3-utils "1.0.0-beta.34"
-web3-eth-accounts@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.34.tgz#e09142eeecc797ac3459b75e9b23946d3695f333"
+web3-eth-accounts@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.35.tgz#7d0e5a69f510dc93874471599eb7abfa9ddf3e63"
dependencies:
any-promise "1.3.0"
crypto-browserify "3.12.0"
@@ -17423,23 +17258,23 @@ web3-eth-accounts@1.0.0-beta.34:
scrypt.js "0.2.0"
underscore "1.8.3"
uuid "2.0.1"
- web3-core "1.0.0-beta.34"
- web3-core-helpers "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ web3-core "1.0.0-beta.35"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
-web3-eth-contract@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.34.tgz#9dbb38fae7643a808427a20180470ec7415c91e6"
+web3-eth-contract@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.35.tgz#5276242d8a3358d9f1ce92b71575c74f9015935c"
dependencies:
underscore "1.8.3"
- web3-core "1.0.0-beta.34"
- web3-core-helpers "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-core-promievent "1.0.0-beta.34"
- web3-core-subscriptions "1.0.0-beta.34"
- web3-eth-abi "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ web3-core "1.0.0-beta.35"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-core-promievent "1.0.0-beta.35"
+ web3-core-subscriptions "1.0.0-beta.35"
+ web3-eth-abi "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
web3-eth-iban@1.0.0-beta.34:
version "1.0.0-beta.34"
@@ -17448,42 +17283,49 @@ web3-eth-iban@1.0.0-beta.34:
bn.js "4.11.6"
web3-utils "1.0.0-beta.34"
-web3-eth-personal@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.34.tgz#9afba167342ebde5420bcd5895c3f6c34388f205"
+web3-eth-iban@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.35.tgz#5aa10327a9abb26bcfc4ba79d7bad18a002b332c"
dependencies:
- web3-core "1.0.0-beta.34"
- web3-core-helpers "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-net "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ bn.js "4.11.6"
+ web3-utils "1.0.0-beta.35"
-web3-eth@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.34.tgz#74086000850c6fe6f535ef49837d6d4bb6113268"
+web3-eth-personal@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.35.tgz#ecac95b7a53d04a567447062d5cae5f49879e89f"
dependencies:
- underscore "1.8.3"
- web3-core "1.0.0-beta.34"
- web3-core-helpers "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-core-subscriptions "1.0.0-beta.34"
- web3-eth-abi "1.0.0-beta.34"
- web3-eth-accounts "1.0.0-beta.34"
- web3-eth-contract "1.0.0-beta.34"
- web3-eth-iban "1.0.0-beta.34"
- web3-eth-personal "1.0.0-beta.34"
- web3-net "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
+ web3-core "1.0.0-beta.35"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-net "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
-web3-net@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.34.tgz#427cea2f431881449c8e38d523290f173f9ff63d"
+web3-eth@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.35.tgz#c52c804afb95e6624b6f5e72a9af90fbf5005b68"
dependencies:
- web3-core "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
-
-web3-provider-engine@14.0.6, web3-provider-engine@^14.0.6:
+ underscore "1.8.3"
+ web3-core "1.0.0-beta.35"
+ web3-core-helpers "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-core-subscriptions "1.0.0-beta.35"
+ web3-eth-abi "1.0.0-beta.35"
+ web3-eth-accounts "1.0.0-beta.35"
+ web3-eth-contract "1.0.0-beta.35"
+ web3-eth-iban "1.0.0-beta.35"
+ web3-eth-personal "1.0.0-beta.35"
+ web3-net "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
+
+web3-net@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.35.tgz#5c6688e0dea71fcd910ee9dc5437b94b7f6b3354"
+ dependencies:
+ web3-core "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
+
+web3-provider-engine@14.0.6:
version "14.0.6"
resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.0.6.tgz#cbdd66fe20c0136a3a495cbe40d18b6c4160d5f0"
dependencies:
@@ -17509,6 +17351,31 @@ web3-provider-engine@14.0.6, web3-provider-engine@^14.0.6:
xhr "^2.2.0"
xtend "^4.0.1"
+web3-provider-engine@14.1.0:
+ version "14.1.0"
+ resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.1.0.tgz#91590020f8b8c1b65846321310cbfdb039090fc6"
+ dependencies:
+ async "^2.5.0"
+ backoff "^2.5.0"
+ clone "^2.0.0"
+ cross-fetch "^2.1.0"
+ eth-block-tracker "^3.0.0"
+ eth-json-rpc-infura "^3.1.0"
+ eth-sig-util "^1.4.2"
+ ethereumjs-block "^1.2.2"
+ ethereumjs-tx "^1.2.0"
+ ethereumjs-util "^5.1.5"
+ ethereumjs-vm "^2.3.4"
+ json-rpc-error "^2.0.0"
+ json-stable-stringify "^1.0.1"
+ promise-to-callback "^1.0.0"
+ readable-stream "^2.2.9"
+ request "^2.85.0"
+ semaphore "^1.0.3"
+ ws "^5.1.1"
+ xhr "^2.2.0"
+ xtend "^4.0.1"
+
web3-provider-engine@^13.3.2:
version "13.8.0"
resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz#4c7c1ad2af5f1fe10343b8a65495879a2f9c00df"
@@ -17533,37 +17400,37 @@ web3-provider-engine@^13.3.2:
xhr "^2.2.0"
xtend "^4.0.1"
-web3-providers-http@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.0.0-beta.34.tgz#e561b52bbb43766282007d40285bfe3550c27e7a"
+web3-providers-http@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.0.0-beta.35.tgz#92059d9d6de6e9f82f4fae30b743efd841afc1e1"
dependencies:
- web3-core-helpers "1.0.0-beta.34"
- xhr2 "0.1.4"
+ web3-core-helpers "1.0.0-beta.35"
+ xhr2-cookies "1.1.0"
-web3-providers-ipc@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.34.tgz#a1b77f1a306d73649a9c039052e40cb71328d00a"
+web3-providers-ipc@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.35.tgz#031afeb10fade2ebb0ef2fb82f5e58c04be842d9"
dependencies:
oboe "2.1.3"
underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.34"
+ web3-core-helpers "1.0.0-beta.35"
-web3-providers-ws@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.34.tgz#7de70f1b83f2de36476772156becfef6e3516eb3"
+web3-providers-ws@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.35.tgz#5d38603fd450243a26aae0ff7f680644e77fa240"
dependencies:
underscore "1.8.3"
- web3-core-helpers "1.0.0-beta.34"
+ web3-core-helpers "1.0.0-beta.35"
websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible"
-web3-shh@1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.34.tgz#975061d71eaec42ccee576f7bd8f70f03844afe0"
+web3-shh@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.35.tgz#7e4a585f8beee0c1927390937c6537748a5d1a58"
dependencies:
- web3-core "1.0.0-beta.34"
- web3-core-method "1.0.0-beta.34"
- web3-core-subscriptions "1.0.0-beta.34"
- web3-net "1.0.0-beta.34"
+ web3-core "1.0.0-beta.35"
+ web3-core-method "1.0.0-beta.35"
+ web3-core-subscriptions "1.0.0-beta.35"
+ web3-net "1.0.0-beta.35"
web3-typescript-typings@^0.10.2:
version "0.10.2"
@@ -17583,6 +17450,18 @@ web3-utils@1.0.0-beta.34:
underscore "1.8.3"
utf8 "2.1.1"
+web3-utils@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.35.tgz#ced9e1df47c65581c441c5f2af76b05a37a273d7"
+ dependencies:
+ bn.js "4.11.6"
+ eth-lib "0.1.27"
+ ethjs-unit "0.1.6"
+ number-to-bn "1.7.0"
+ randomhex "0.1.5"
+ underscore "1.8.3"
+ utf8 "2.1.1"
+
web3@0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.2.tgz#c54dac5fc0e377399c04c1a6ecbb12e4513278d6"
@@ -17593,6 +17472,18 @@ web3@0.20.2:
xhr2 "*"
xmlhttprequest "*"
+web3@1.0.0-beta.35:
+ version "1.0.0-beta.35"
+ resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.35.tgz#6475095bd451a96e50a32b997ddee82279292f11"
+ dependencies:
+ web3-bzz "1.0.0-beta.35"
+ web3-core "1.0.0-beta.35"
+ web3-eth "1.0.0-beta.35"
+ web3-eth-personal "1.0.0-beta.35"
+ web3-net "1.0.0-beta.35"
+ web3-shh "1.0.0-beta.35"
+ web3-utils "1.0.0-beta.35"
+
web3@^0.18.0:
version "0.18.4"
resolved "https://registry.yarnpkg.com/web3/-/web3-0.18.4.tgz#81ec1784145491f2eaa8955b31c06049e07c5e7d"
@@ -17603,18 +17494,6 @@ web3@^0.18.0:
xhr2 "*"
xmlhttprequest "*"
-web3@^1.0.0-beta.34:
- version "1.0.0-beta.34"
- resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.34.tgz#347e561b784098cb5563315f490479a1d91f2ab1"
- dependencies:
- web3-bzz "1.0.0-beta.34"
- web3-core "1.0.0-beta.34"
- web3-eth "1.0.0-beta.34"
- web3-eth-personal "1.0.0-beta.34"
- web3-net "1.0.0-beta.34"
- web3-shh "1.0.0-beta.34"
- web3-utils "1.0.0-beta.34"
-
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -17767,7 +17646,16 @@ websocket-extensions@>=0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
-websocket@^1.0.24, websocket@^1.0.25:
+websocket@1.0.26:
+ version "1.0.26"
+ resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.26.tgz#a03a01299849c35268c83044aa919c6374be8194"
+ dependencies:
+ debug "^2.2.0"
+ nan "^2.3.3"
+ typedarray-to-buffer "^3.1.2"
+ yaeti "^0.0.6"
+
+websocket@^1.0.25:
version "1.0.25"
resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.25.tgz#998ec790f0a3eacb8b08b50a4350026692a11958"
dependencies:
@@ -18016,7 +17904,13 @@ xhr-request@^1.0.1:
url-set-query "^1.0.0"
xhr "^2.0.4"
-xhr2@*, xhr2@0.1.4:
+xhr2-cookies@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48"
+ dependencies:
+ cookiejar "^2.1.1"
+
+xhr2@*:
version "0.1.4"
resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f"
@@ -18081,10 +17975,6 @@ xtend@~2.1.1:
dependencies:
object-keys "~0.4.0"
-xtend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
-
y18n@^3.2.0, y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
@@ -18133,12 +18023,6 @@ yargs-parser@^2.4.1:
camelcase "^3.0.0"
lodash.assign "^4.0.6"
-yargs-parser@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
- dependencies:
- camelcase "^3.0.0"
-
yargs-parser@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
@@ -18290,24 +18174,6 @@ yargs@^4.7.1:
y18n "^3.2.1"
yargs-parser "^2.4.1"
-yargs@^7.0.2:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
- dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
- y18n "^3.2.1"
- yargs-parser "^5.0.0"
-
yargs@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
@@ -18335,12 +18201,6 @@ yargs@~3.10.0:
decamelize "^1.0.0"
window-size "0.1.0"
-yauzl@2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
- dependencies:
- fd-slicer "~1.0.1"
-
yauzl@^2.4.2:
version "2.9.1"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f"