diff --git a/contracts/asset-proxy/contracts/src/bridges/Eth2DaiBridge.sol b/contracts/asset-proxy/contracts/src/bridges/Eth2DaiBridge.sol index d724dc5c51..8cba2ca305 100644 --- a/contracts/asset-proxy/contracts/src/bridges/Eth2DaiBridge.sol +++ b/contracts/asset-proxy/contracts/src/bridges/Eth2DaiBridge.sol @@ -20,9 +20,9 @@ pragma solidity ^0.5.9; pragma experimental ABIEncoderV2; import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; +import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; import "../interfaces/IERC20Bridge.sol"; import "../interfaces/IEth2Dai.sol"; -import "../interfaces/IWallet.sol"; // solhint-disable space-after-comma diff --git a/contracts/asset-proxy/package.json b/contracts/asset-proxy/package.json index bbd5b8a108..a39c3c18b5 100644 --- a/contracts/asset-proxy/package.json +++ b/contracts/asset-proxy/package.json @@ -35,7 +35,7 @@ "compile:truffle": "truffle compile" }, "config": { - "abis": "./generated-artifacts/@(ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IERC20Bridge|IEth2Dai|IWallet|MixinAssetProxyDispatcher|MixinAuthorizable|MultiAssetProxy|Ownable|StaticCallProxy|TestERC20Bridge|TestEth2DaiBridge|TestStaticCallTarget).json", + "abis": "./generated-artifacts/@(ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IERC20Bridge|IEth2Dai|IUniswapExchange|IUniswapExchangeFactory|MixinAssetProxyDispatcher|MixinAuthorizable|MultiAssetProxy|Ownable|StaticCallProxy|TestERC20Bridge|TestEth2DaiBridge|TestStaticCallTarget|TestUniswapBridge|UniswapBridge).json", "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." }, "repository": { diff --git a/contracts/asset-proxy/src/artifacts.ts b/contracts/asset-proxy/src/artifacts.ts index a7145fd6c5..ebe46f9d40 100644 --- a/contracts/asset-proxy/src/artifacts.ts +++ b/contracts/asset-proxy/src/artifacts.ts @@ -16,7 +16,8 @@ import * as IAssetProxyDispatcher from '../generated-artifacts/IAssetProxyDispat import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json'; import * as IERC20Bridge from '../generated-artifacts/IERC20Bridge.json'; import * as IEth2Dai from '../generated-artifacts/IEth2Dai.json'; -import * as IWallet from '../generated-artifacts/IWallet.json'; +import * as IUniswapExchange from '../generated-artifacts/IUniswapExchange.json'; +import * as IUniswapExchangeFactory from '../generated-artifacts/IUniswapExchangeFactory.json'; import * as MixinAssetProxyDispatcher from '../generated-artifacts/MixinAssetProxyDispatcher.json'; import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json'; @@ -25,6 +26,8 @@ import * as StaticCallProxy from '../generated-artifacts/StaticCallProxy.json'; import * as TestERC20Bridge from '../generated-artifacts/TestERC20Bridge.json'; import * as TestEth2DaiBridge from '../generated-artifacts/TestEth2DaiBridge.json'; import * as TestStaticCallTarget from '../generated-artifacts/TestStaticCallTarget.json'; +import * as TestUniswapBridge from '../generated-artifacts/TestUniswapBridge.json'; +import * as UniswapBridge from '../generated-artifacts/UniswapBridge.json'; export const artifacts = { MixinAssetProxyDispatcher: MixinAssetProxyDispatcher as ContractArtifact, MixinAuthorizable: MixinAuthorizable as ContractArtifact, @@ -36,14 +39,17 @@ export const artifacts = { MultiAssetProxy: MultiAssetProxy as ContractArtifact, StaticCallProxy: StaticCallProxy as ContractArtifact, Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, + UniswapBridge: UniswapBridge as ContractArtifact, IAssetData: IAssetData as ContractArtifact, IAssetProxy: IAssetProxy as ContractArtifact, IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, IAuthorizable: IAuthorizable as ContractArtifact, IERC20Bridge: IERC20Bridge as ContractArtifact, IEth2Dai: IEth2Dai as ContractArtifact, - IWallet: IWallet as ContractArtifact, + IUniswapExchange: IUniswapExchange as ContractArtifact, + IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact, TestERC20Bridge: TestERC20Bridge as ContractArtifact, TestEth2DaiBridge: TestEth2DaiBridge as ContractArtifact, TestStaticCallTarget: TestStaticCallTarget as ContractArtifact, + TestUniswapBridge: TestUniswapBridge as ContractArtifact, }; diff --git a/contracts/asset-proxy/src/wrappers.ts b/contracts/asset-proxy/src/wrappers.ts index a87eda1f77..a39cbd282b 100644 --- a/contracts/asset-proxy/src/wrappers.ts +++ b/contracts/asset-proxy/src/wrappers.ts @@ -14,7 +14,8 @@ export * from '../generated-wrappers/i_asset_proxy_dispatcher'; export * from '../generated-wrappers/i_authorizable'; export * from '../generated-wrappers/i_erc20_bridge'; export * from '../generated-wrappers/i_eth2_dai'; -export * from '../generated-wrappers/i_wallet'; +export * from '../generated-wrappers/i_uniswap_exchange'; +export * from '../generated-wrappers/i_uniswap_exchange_factory'; export * from '../generated-wrappers/mixin_asset_proxy_dispatcher'; export * from '../generated-wrappers/mixin_authorizable'; export * from '../generated-wrappers/multi_asset_proxy'; @@ -23,3 +24,5 @@ export * from '../generated-wrappers/static_call_proxy'; export * from '../generated-wrappers/test_erc20_bridge'; export * from '../generated-wrappers/test_eth2_dai_bridge'; export * from '../generated-wrappers/test_static_call_target'; +export * from '../generated-wrappers/test_uniswap_bridge'; +export * from '../generated-wrappers/uniswap_bridge'; diff --git a/contracts/asset-proxy/test/uniswap_bridge.ts b/contracts/asset-proxy/test/uniswap_bridge.ts index b14ab427a8..f284aa122c 100644 --- a/contracts/asset-proxy/test/uniswap_bridge.ts +++ b/contracts/asset-proxy/test/uniswap_bridge.ts @@ -47,10 +47,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { describe('isValidSignature()', () => { it('returns success bytes', async () => { const LEGACY_WALLET_MAGIC_VALUE = '0xb0671381'; - const result = await testContract.isValidSignature.callAsync( - hexRandom(), - hexRandom(_.random(0, 32)), - ); + const result = await testContract.isValidSignature.callAsync(hexRandom(), hexRandom(_.random(0, 32))); expect(result).to.eq(LEGACY_WALLET_MAGIC_VALUE); }); }); @@ -115,10 +112,9 @@ blockchainTests.resets('UniswapBridge unit tests', env => { _opts.fromTokenRevertReason, ); // Set the token balance for the token we're converting from. - await testContract.setTokenBalance.awaitTransactionSuccessAsync( - _opts.fromTokenAddress, - { value: new BigNumber(_opts.fromTokenBalance) }, - ); + await testContract.setTokenBalance.awaitTransactionSuccessAsync(_opts.fromTokenAddress, { + value: new BigNumber(_opts.fromTokenBalance), + }); // Call withdrawTo(). const [result, receipt] = await txHelper.getResultAndReceiptAsync( testContract.withdrawTo, @@ -136,7 +132,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { return { opts: _opts, result, - logs: receipt.logs as any as DecodedLogs, + logs: (receipt.logs as any) as DecodedLogs, blockTime: await env.web3Wrapper.getBlockTimestampAsync(receipt.blockNumber), }; } @@ -161,10 +157,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { toTokenAddress: tokenAddress, }); expect(result).to.eq(AssetProxyId.ERC20Bridge); - const transfers = filterLogsToArguments( - logs, - ContractEvents.TokenTransfer, - ); + const transfers = filterLogsToArguments(logs, ContractEvents.TokenTransfer); expect(transfers.length).to.eq(1); expect(transfers[0].token).to.eq(tokenAddress); expect(transfers[0].from).to.eq(testContract.address); @@ -192,10 +185,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { it('sets allowance for "from" token', async () => { const { opts, logs } = await withdrawToAsync(); - const approvals = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const approvals = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); expect(approvals.length).to.eq(1); expect(approvals[0].spender).to.eq(exchangeAddress); @@ -205,10 +195,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { it('sets allowance for "from" token on subsequent calls', async () => { const { opts } = await withdrawToAsync(); const { logs } = await withdrawToAsync(opts); - const approvals = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const approvals = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); expect(approvals.length).to.eq(1); expect(approvals[0].spender).to.eq(exchangeAddress); @@ -241,10 +228,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { toTokenAddress: wethTokenAddress, }); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); - let calls: any = filterLogs( - logs, - ContractEvents.TokenToEthSwapInput, - ); + let calls: any = filterLogs(logs, ContractEvents.TokenToEthSwapInput); expect(calls.length).to.eq(1); expect(calls[0].args.exchange).to.eq(exchangeAddress); expect(calls[0].args.tokensSold).to.bignumber.eq(opts.fromTokenBalance); @@ -271,10 +255,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { const { opts, logs, blockTime } = await withdrawToAsync({ toTokenAddress: wethTokenAddress, }); - const calls = filterLogsToArguments( - logs, - ContractEvents.TokenToEthSwapInput, - ); + const calls = filterLogsToArguments(logs, ContractEvents.TokenToEthSwapInput); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); expect(calls.length).to.eq(1); expect(calls[0].exchange).to.eq(exchangeAddress); @@ -287,10 +268,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { const { opts, logs } = await withdrawToAsync({ toTokenAddress: wethTokenAddress, }); - const transfers = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const transfers = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); expect(transfers.length).to.eq(1); expect(transfers[0].spender).to.eq(exchangeAddress); @@ -302,10 +280,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { toTokenAddress: wethTokenAddress, }); const { logs } = await withdrawToAsync(opts); - const approvals = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const approvals = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); expect(approvals.length).to.eq(1); expect(approvals[0].spender).to.eq(exchangeAddress); @@ -348,10 +323,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { fromTokenAddress: wethTokenAddress, }); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); - let calls: any = filterLogs( - logs, - ContractEvents.WethWithdraw, - ); + let calls: any = filterLogs(logs, ContractEvents.WethWithdraw); expect(calls.length).to.eq(1); expect(calls[0].args.amount).to.bignumber.eq(opts.fromTokenBalance); calls = filterLogs( @@ -369,10 +341,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { const { opts, logs } = await withdrawToAsync({ fromTokenAddress: wethTokenAddress, }); - const approvals = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const approvals = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); expect(approvals.length).to.eq(1); expect(approvals[0].spender).to.eq(exchangeAddress); @@ -384,10 +353,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => { fromTokenAddress: wethTokenAddress, }); const { logs } = await withdrawToAsync(opts); - const approvals = filterLogsToArguments( - logs, - ContractEvents.TokenApprove, - ); + const approvals = filterLogsToArguments(logs, ContractEvents.TokenApprove); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); expect(approvals.length).to.eq(1); expect(approvals[0].spender).to.eq(exchangeAddress); diff --git a/contracts/asset-proxy/tsconfig.json b/contracts/asset-proxy/tsconfig.json index b3faf3e356..8ca5339b81 100644 --- a/contracts/asset-proxy/tsconfig.json +++ b/contracts/asset-proxy/tsconfig.json @@ -14,7 +14,8 @@ "generated-artifacts/IAuthorizable.json", "generated-artifacts/IERC20Bridge.json", "generated-artifacts/IEth2Dai.json", - "generated-artifacts/IWallet.json", + "generated-artifacts/IUniswapExchange.json", + "generated-artifacts/IUniswapExchangeFactory.json", "generated-artifacts/MixinAssetProxyDispatcher.json", "generated-artifacts/MixinAuthorizable.json", "generated-artifacts/MultiAssetProxy.json", @@ -22,7 +23,9 @@ "generated-artifacts/StaticCallProxy.json", "generated-artifacts/TestERC20Bridge.json", "generated-artifacts/TestEth2DaiBridge.json", - "generated-artifacts/TestStaticCallTarget.json" + "generated-artifacts/TestStaticCallTarget.json", + "generated-artifacts/TestUniswapBridge.json", + "generated-artifacts/UniswapBridge.json" ], "exclude": ["./deploy/solc/solc_bin"] }