From 1e7fa6c1aa8f7ce57c393069a6158e6b842b6032 Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 15:33:04 -0400 Subject: [PATCH 1/6] add constructor + state variable --- .../integration/exchange/UniswapV2ExchangeAdapter.sol | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 2ec24c4..0a702c4 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -33,6 +33,7 @@ contract UniswapV2ExchangeAdapter { */ + address public uniswapV2RouterAddress; // YOUR CODE HERE @@ -48,7 +49,9 @@ contract UniswapV2ExchangeAdapter { */ - // YOUR CODE HERE + constructor(address _router) { + uniswapV2RouterAddress = _router; + } @@ -75,7 +78,7 @@ contract UniswapV2ExchangeAdapter { * The function will return 3 values: address of the uniswap router, 0 for Call value, trade calldata */ - function getTradeCalldata(/*YOUR CODE HERE*/) external view returns (/*YOUR CODE HERE*/){ + function getTradeCalldata(/*YOUR CODE HERE*/) external view returns (/*YOUR CODE HERE*/) { /* @@ -120,7 +123,9 @@ contract UniswapV2ExchangeAdapter { * */ - // YOUR CODE HERE +function getSpender() external view { + return uniswapV2RouterAddress; +} } From f733c54ed20ada932a1c4e8d07ef98fd8bcffc5b Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 16:46:21 -0400 Subject: [PATCH 2/6] first pass implementing get get trade call data --- .../exchange/UniswapV2ExchangeAdapter.sol | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 0a702c4..3ca4e7e 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -49,7 +49,7 @@ contract UniswapV2ExchangeAdapter { */ - constructor(address _router) { + constructor(address _router) public { uniswapV2RouterAddress = _router; } @@ -78,7 +78,18 @@ contract UniswapV2ExchangeAdapter { * The function will return 3 values: address of the uniswap router, 0 for Call value, trade calldata */ - function getTradeCalldata(/*YOUR CODE HERE*/) external view returns (/*YOUR CODE HERE*/) { + function getTradeCalldata( + address _sourceToken, + address _destinationToken, + address _destinationAddress, + uint256 _sourceQuantity, + uint256 _minDestinationQuantity, + bytes calldata _data + ) external view returns ( + address, + uint256, + bytes memory + ) { /* @@ -88,11 +99,11 @@ contract UniswapV2ExchangeAdapter { address[] memory path; - if (_data.length == 0){ + if (_data.length == 0) { path = new address[](2); path[0] = _sourceToken; path[1] = _destinationToken; - }else { + } else { path = abi.decode(_data, (address[])); } @@ -102,10 +113,17 @@ contract UniswapV2ExchangeAdapter { * Please see README.md resources for more details on the Uniswap function swapExactTokensForTokens. */ - // YOUR CODE HERE + bytes memory callData = abi.encodeWithSignature( + "swapExactTokensForTokens(uint,uint,address[],address,uint)", + _sourceQuantity, + _minDestinationQuantity, + path, + _destinationAddress, + now + 5 minutes + ); - return (/*YOUR CODE HERE*/); + return (uniswapV2RouterAddress, 0, callData); } From f7b1b984ee983665c4b3ff8197f5e6053e47f063 Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 17:16:51 -0400 Subject: [PATCH 3/6] export uniswap adapter + export deploy adapters helper --- utils/contracts/index.ts | 1 + utils/deploys/deployAdapters.ts | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index 578c03a..fde315f 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -81,6 +81,7 @@ export { TradeModule } from "../../typechain/TradeModule"; export { TradeAdapterMock } from "../../typechain/TradeAdapterMock"; export { Uint256ArrayUtilsMock } from "../../typechain/Uint256ArrayUtilsMock"; export { Uni } from "../../typechain/Uni"; +export { UniswapV2ExchangeAdapter } from "../../typechain/UniswapV2ExchangeAdapter"; export { UniswapPairPriceAdapter } from "../../typechain/UniswapPairPriceAdapter"; export { UniswapV2IndexExchangeAdapter } from "../../typechain/UniswapV2IndexExchangeAdapter"; export { UniswapV2TransferFeeExchangeAdapter } from "../../typechain/UniswapV2TransferFeeExchangeAdapter"; diff --git a/utils/deploys/deployAdapters.ts b/utils/deploys/deployAdapters.ts index ef18a15..d4172eb 100644 --- a/utils/deploys/deployAdapters.ts +++ b/utils/deploys/deployAdapters.ts @@ -21,6 +21,7 @@ import { SynthetixExchangeAdapter, CompoundBravoGovernanceAdapter, CompClaimAdapter, + UniswapV2ExchangeAdapter } from "../contracts"; import { convertLibraryNameToLinkId } from "../common"; import { Address, Bytes } from "./../types"; @@ -45,6 +46,7 @@ import { UniswapV2IndexExchangeAdapter__factory } from "../../typechain/factorie import { SynthetixExchangeAdapter__factory } from "../../typechain/factories/SynthetixExchangeAdapter__factory"; import { CompoundBravoGovernanceAdapter__factory } from "../../typechain/factories/CompoundBravoGovernanceAdapter__factory"; import { CompClaimAdapter__factory } from "../../typechain"; +import { UniswapV2ExchangeAdapter__factory } from "../../typechain/factories/UniswapV2ExchangeAdapter__factory"; export default class DeployAdapters { private _deployerSigner: Signer; @@ -170,4 +172,12 @@ export default class DeployAdapters { synthetixExchangerAddress ); } + + public async deployUniswapV2ExchangeAdapter( + uniswapRouterAddress: Address, + ): Promise { + return await new UniswapV2ExchangeAdapter__factory(this._deployerSigner).deploy( + uniswapRouterAddress + ); + } } From 51788ff3d9d3874f516df4554a1f4123b7962648 Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 17:17:21 -0400 Subject: [PATCH 4/6] fix signature encoding --- .../exchange/UniswapV2ExchangeAdapter.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 3ca4e7e..6d84da6 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -33,7 +33,7 @@ contract UniswapV2ExchangeAdapter { */ - address public uniswapV2RouterAddress; + address public router; // YOUR CODE HERE @@ -50,7 +50,7 @@ contract UniswapV2ExchangeAdapter { constructor(address _router) public { - uniswapV2RouterAddress = _router; + router = _router; } @@ -114,16 +114,16 @@ contract UniswapV2ExchangeAdapter { */ bytes memory callData = abi.encodeWithSignature( - "swapExactTokensForTokens(uint,uint,address[],address,uint)", + "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)", _sourceQuantity, _minDestinationQuantity, path, _destinationAddress, - now + 5 minutes + _data ); - return (uniswapV2RouterAddress, 0, callData); + return (router, 0, callData); } @@ -141,8 +141,8 @@ contract UniswapV2ExchangeAdapter { * */ -function getSpender() external view { - return uniswapV2RouterAddress; +function getSpender() external view returns (address) { + return router; } } From 64d9ac2667916561587429d11de58bb7337f7e4c Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 17:40:26 -0400 Subject: [PATCH 5/6] fix trade call data generation --- .../protocol/integration/exchange/UniswapV2ExchangeAdapter.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 6d84da6..98ffe1b 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -119,7 +119,7 @@ contract UniswapV2ExchangeAdapter { _minDestinationQuantity, path, _destinationAddress, - _data + now ); From 5672333e05d351b4ce388e369cedc4f7de4526e6 Mon Sep 17 00:00:00 2001 From: Dylan Tran Date: Sat, 3 Jul 2021 18:34:49 -0400 Subject: [PATCH 6/6] swap out now with block.timestamp --- .../protocol/integration/exchange/UniswapV2ExchangeAdapter.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 98ffe1b..4a820f5 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -119,7 +119,7 @@ contract UniswapV2ExchangeAdapter { _minDestinationQuantity, path, _destinationAddress, - now + block.timestamp );