@0x/contracts-asset-proxy: Rebase and update Eth2DaiBridge to use IWallet from exchange-libs.

This commit is contained in:
Lawrence Forman 2019-10-03 10:31:32 -07:00
parent f993b6d1ed
commit 584f8b13fe
6 changed files with 34 additions and 56 deletions

View File

@ -20,9 +20,9 @@ pragma solidity ^0.5.9;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol";
import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol";
import "../interfaces/IERC20Bridge.sol"; import "../interfaces/IERC20Bridge.sol";
import "../interfaces/IEth2Dai.sol"; import "../interfaces/IEth2Dai.sol";
import "../interfaces/IWallet.sol";
// solhint-disable space-after-comma // solhint-disable space-after-comma

View File

@ -35,7 +35,7 @@
"compile:truffle": "truffle compile" "compile:truffle": "truffle compile"
}, },
"config": { "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." "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually."
}, },
"repository": { "repository": {

View File

@ -16,7 +16,8 @@ import * as IAssetProxyDispatcher from '../generated-artifacts/IAssetProxyDispat
import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json'; import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json';
import * as IERC20Bridge from '../generated-artifacts/IERC20Bridge.json'; import * as IERC20Bridge from '../generated-artifacts/IERC20Bridge.json';
import * as IEth2Dai from '../generated-artifacts/IEth2Dai.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 MixinAssetProxyDispatcher from '../generated-artifacts/MixinAssetProxyDispatcher.json';
import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json';
import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.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 TestERC20Bridge from '../generated-artifacts/TestERC20Bridge.json';
import * as TestEth2DaiBridge from '../generated-artifacts/TestEth2DaiBridge.json'; import * as TestEth2DaiBridge from '../generated-artifacts/TestEth2DaiBridge.json';
import * as TestStaticCallTarget from '../generated-artifacts/TestStaticCallTarget.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 = { export const artifacts = {
MixinAssetProxyDispatcher: MixinAssetProxyDispatcher as ContractArtifact, MixinAssetProxyDispatcher: MixinAssetProxyDispatcher as ContractArtifact,
MixinAuthorizable: MixinAuthorizable as ContractArtifact, MixinAuthorizable: MixinAuthorizable as ContractArtifact,
@ -36,14 +39,17 @@ export const artifacts = {
MultiAssetProxy: MultiAssetProxy as ContractArtifact, MultiAssetProxy: MultiAssetProxy as ContractArtifact,
StaticCallProxy: StaticCallProxy as ContractArtifact, StaticCallProxy: StaticCallProxy as ContractArtifact,
Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, Eth2DaiBridge: Eth2DaiBridge as ContractArtifact,
UniswapBridge: UniswapBridge as ContractArtifact,
IAssetData: IAssetData as ContractArtifact, IAssetData: IAssetData as ContractArtifact,
IAssetProxy: IAssetProxy as ContractArtifact, IAssetProxy: IAssetProxy as ContractArtifact,
IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact,
IAuthorizable: IAuthorizable as ContractArtifact, IAuthorizable: IAuthorizable as ContractArtifact,
IERC20Bridge: IERC20Bridge as ContractArtifact, IERC20Bridge: IERC20Bridge as ContractArtifact,
IEth2Dai: IEth2Dai as ContractArtifact, IEth2Dai: IEth2Dai as ContractArtifact,
IWallet: IWallet as ContractArtifact, IUniswapExchange: IUniswapExchange as ContractArtifact,
IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact,
TestERC20Bridge: TestERC20Bridge as ContractArtifact, TestERC20Bridge: TestERC20Bridge as ContractArtifact,
TestEth2DaiBridge: TestEth2DaiBridge as ContractArtifact, TestEth2DaiBridge: TestEth2DaiBridge as ContractArtifact,
TestStaticCallTarget: TestStaticCallTarget as ContractArtifact, TestStaticCallTarget: TestStaticCallTarget as ContractArtifact,
TestUniswapBridge: TestUniswapBridge as ContractArtifact,
}; };

View File

@ -14,7 +14,8 @@ export * from '../generated-wrappers/i_asset_proxy_dispatcher';
export * from '../generated-wrappers/i_authorizable'; export * from '../generated-wrappers/i_authorizable';
export * from '../generated-wrappers/i_erc20_bridge'; export * from '../generated-wrappers/i_erc20_bridge';
export * from '../generated-wrappers/i_eth2_dai'; 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_asset_proxy_dispatcher';
export * from '../generated-wrappers/mixin_authorizable'; export * from '../generated-wrappers/mixin_authorizable';
export * from '../generated-wrappers/multi_asset_proxy'; 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_erc20_bridge';
export * from '../generated-wrappers/test_eth2_dai_bridge'; export * from '../generated-wrappers/test_eth2_dai_bridge';
export * from '../generated-wrappers/test_static_call_target'; export * from '../generated-wrappers/test_static_call_target';
export * from '../generated-wrappers/test_uniswap_bridge';
export * from '../generated-wrappers/uniswap_bridge';

View File

@ -47,10 +47,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
describe('isValidSignature()', () => { describe('isValidSignature()', () => {
it('returns success bytes', async () => { it('returns success bytes', async () => {
const LEGACY_WALLET_MAGIC_VALUE = '0xb0671381'; const LEGACY_WALLET_MAGIC_VALUE = '0xb0671381';
const result = await testContract.isValidSignature.callAsync( const result = await testContract.isValidSignature.callAsync(hexRandom(), hexRandom(_.random(0, 32)));
hexRandom(),
hexRandom(_.random(0, 32)),
);
expect(result).to.eq(LEGACY_WALLET_MAGIC_VALUE); expect(result).to.eq(LEGACY_WALLET_MAGIC_VALUE);
}); });
}); });
@ -115,10 +112,9 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
_opts.fromTokenRevertReason, _opts.fromTokenRevertReason,
); );
// Set the token balance for the token we're converting from. // Set the token balance for the token we're converting from.
await testContract.setTokenBalance.awaitTransactionSuccessAsync( await testContract.setTokenBalance.awaitTransactionSuccessAsync(_opts.fromTokenAddress, {
_opts.fromTokenAddress, value: new BigNumber(_opts.fromTokenBalance),
{ value: new BigNumber(_opts.fromTokenBalance) }, });
);
// Call withdrawTo(). // Call withdrawTo().
const [result, receipt] = await txHelper.getResultAndReceiptAsync( const [result, receipt] = await txHelper.getResultAndReceiptAsync(
testContract.withdrawTo, testContract.withdrawTo,
@ -136,7 +132,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
return { return {
opts: _opts, opts: _opts,
result, result,
logs: receipt.logs as any as DecodedLogs, logs: (receipt.logs as any) as DecodedLogs,
blockTime: await env.web3Wrapper.getBlockTimestampAsync(receipt.blockNumber), blockTime: await env.web3Wrapper.getBlockTimestampAsync(receipt.blockNumber),
}; };
} }
@ -161,10 +157,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
toTokenAddress: tokenAddress, toTokenAddress: tokenAddress,
}); });
expect(result).to.eq(AssetProxyId.ERC20Bridge); expect(result).to.eq(AssetProxyId.ERC20Bridge);
const transfers = filterLogsToArguments<TokenTransferArgs>( const transfers = filterLogsToArguments<TokenTransferArgs>(logs, ContractEvents.TokenTransfer);
logs,
ContractEvents.TokenTransfer,
);
expect(transfers.length).to.eq(1); expect(transfers.length).to.eq(1);
expect(transfers[0].token).to.eq(tokenAddress); expect(transfers[0].token).to.eq(tokenAddress);
expect(transfers[0].from).to.eq(testContract.address); 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 () => { it('sets allowance for "from" token', async () => {
const { opts, logs } = await withdrawToAsync(); const { opts, logs } = await withdrawToAsync();
const approvals = filterLogsToArguments<TokenApproveArgs>( const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
expect(approvals.length).to.eq(1); expect(approvals.length).to.eq(1);
expect(approvals[0].spender).to.eq(exchangeAddress); 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 () => { it('sets allowance for "from" token on subsequent calls', async () => {
const { opts } = await withdrawToAsync(); const { opts } = await withdrawToAsync();
const { logs } = await withdrawToAsync(opts); const { logs } = await withdrawToAsync(opts);
const approvals = filterLogsToArguments<TokenApproveArgs>( const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
expect(approvals.length).to.eq(1); expect(approvals.length).to.eq(1);
expect(approvals[0].spender).to.eq(exchangeAddress); expect(approvals[0].spender).to.eq(exchangeAddress);
@ -241,10 +228,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
toTokenAddress: wethTokenAddress, toTokenAddress: wethTokenAddress,
}); });
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
let calls: any = filterLogs<TokenToEthSwapInputArgs>( let calls: any = filterLogs<TokenToEthSwapInputArgs>(logs, ContractEvents.TokenToEthSwapInput);
logs,
ContractEvents.TokenToEthSwapInput,
);
expect(calls.length).to.eq(1); expect(calls.length).to.eq(1);
expect(calls[0].args.exchange).to.eq(exchangeAddress); expect(calls[0].args.exchange).to.eq(exchangeAddress);
expect(calls[0].args.tokensSold).to.bignumber.eq(opts.fromTokenBalance); 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({ const { opts, logs, blockTime } = await withdrawToAsync({
toTokenAddress: wethTokenAddress, toTokenAddress: wethTokenAddress,
}); });
const calls = filterLogsToArguments<TokenToEthSwapInputArgs>( const calls = filterLogsToArguments<TokenToEthSwapInputArgs>(logs, ContractEvents.TokenToEthSwapInput);
logs,
ContractEvents.TokenToEthSwapInput,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
expect(calls.length).to.eq(1); expect(calls.length).to.eq(1);
expect(calls[0].exchange).to.eq(exchangeAddress); expect(calls[0].exchange).to.eq(exchangeAddress);
@ -287,10 +268,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
const { opts, logs } = await withdrawToAsync({ const { opts, logs } = await withdrawToAsync({
toTokenAddress: wethTokenAddress, toTokenAddress: wethTokenAddress,
}); });
const transfers = filterLogsToArguments<TokenApproveArgs>( const transfers = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
expect(transfers.length).to.eq(1); expect(transfers.length).to.eq(1);
expect(transfers[0].spender).to.eq(exchangeAddress); expect(transfers[0].spender).to.eq(exchangeAddress);
@ -302,10 +280,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
toTokenAddress: wethTokenAddress, toTokenAddress: wethTokenAddress,
}); });
const { logs } = await withdrawToAsync(opts); const { logs } = await withdrawToAsync(opts);
const approvals = filterLogsToArguments<TokenApproveArgs>( const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.fromTokenAddress);
expect(approvals.length).to.eq(1); expect(approvals.length).to.eq(1);
expect(approvals[0].spender).to.eq(exchangeAddress); expect(approvals[0].spender).to.eq(exchangeAddress);
@ -348,10 +323,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
fromTokenAddress: wethTokenAddress, fromTokenAddress: wethTokenAddress,
}); });
const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress);
let calls: any = filterLogs<WethWithdrawArgs>( let calls: any = filterLogs<WethWithdrawArgs>(logs, ContractEvents.WethWithdraw);
logs,
ContractEvents.WethWithdraw,
);
expect(calls.length).to.eq(1); expect(calls.length).to.eq(1);
expect(calls[0].args.amount).to.bignumber.eq(opts.fromTokenBalance); expect(calls[0].args.amount).to.bignumber.eq(opts.fromTokenBalance);
calls = filterLogs<EthToTokenTransferInputArgs>( calls = filterLogs<EthToTokenTransferInputArgs>(
@ -369,10 +341,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
const { opts, logs } = await withdrawToAsync({ const { opts, logs } = await withdrawToAsync({
fromTokenAddress: wethTokenAddress, fromTokenAddress: wethTokenAddress,
}); });
const approvals = filterLogsToArguments<TokenApproveArgs>( const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress);
expect(approvals.length).to.eq(1); expect(approvals.length).to.eq(1);
expect(approvals[0].spender).to.eq(exchangeAddress); expect(approvals[0].spender).to.eq(exchangeAddress);
@ -384,10 +353,7 @@ blockchainTests.resets('UniswapBridge unit tests', env => {
fromTokenAddress: wethTokenAddress, fromTokenAddress: wethTokenAddress,
}); });
const { logs } = await withdrawToAsync(opts); const { logs } = await withdrawToAsync(opts);
const approvals = filterLogsToArguments<TokenApproveArgs>( const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove);
logs,
ContractEvents.TokenApprove,
);
const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress); const exchangeAddress = await getExchangeForTokenAsync(opts.toTokenAddress);
expect(approvals.length).to.eq(1); expect(approvals.length).to.eq(1);
expect(approvals[0].spender).to.eq(exchangeAddress); expect(approvals[0].spender).to.eq(exchangeAddress);

View File

@ -14,7 +14,8 @@
"generated-artifacts/IAuthorizable.json", "generated-artifacts/IAuthorizable.json",
"generated-artifacts/IERC20Bridge.json", "generated-artifacts/IERC20Bridge.json",
"generated-artifacts/IEth2Dai.json", "generated-artifacts/IEth2Dai.json",
"generated-artifacts/IWallet.json", "generated-artifacts/IUniswapExchange.json",
"generated-artifacts/IUniswapExchangeFactory.json",
"generated-artifacts/MixinAssetProxyDispatcher.json", "generated-artifacts/MixinAssetProxyDispatcher.json",
"generated-artifacts/MixinAuthorizable.json", "generated-artifacts/MixinAuthorizable.json",
"generated-artifacts/MultiAssetProxy.json", "generated-artifacts/MultiAssetProxy.json",
@ -22,7 +23,9 @@
"generated-artifacts/StaticCallProxy.json", "generated-artifacts/StaticCallProxy.json",
"generated-artifacts/TestERC20Bridge.json", "generated-artifacts/TestERC20Bridge.json",
"generated-artifacts/TestEth2DaiBridge.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"] "exclude": ["./deploy/solc/solc_bin"]
} }