diff --git a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol index 2ec24c4..cecf305 100644 --- a/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol +++ b/contracts/protocol/integration/exchange/UniswapV2ExchangeAdapter.sol @@ -34,6 +34,7 @@ contract UniswapV2ExchangeAdapter { // YOUR CODE HERE + address public immutable router; @@ -49,6 +50,9 @@ contract UniswapV2ExchangeAdapter { // YOUR CODE HERE + constructor(address _router) public { + router = _router; + } @@ -75,7 +79,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 memory _data + ) external view returns ( + address, + uint256, + bytes memory + ){ /* @@ -100,9 +115,17 @@ contract UniswapV2ExchangeAdapter { */ // YOUR CODE HERE + bytes memory callData = abi.encodeWithSignature( + "swapExactTokensForTokens(uint256,uint256,address[],address,uint256)", + _sourceQuantity, + _minDestinationQuantity, + path, + _destinationAddress, + block.timestamp + ); - return (/*YOUR CODE HERE*/); + return (router, 0, callData); } @@ -121,6 +144,9 @@ contract UniswapV2ExchangeAdapter { */ // YOUR CODE HERE + function getSpender() external view returns(address){ + return router; + } } diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index 578c03a..a06c564 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -82,6 +82,7 @@ export { TradeAdapterMock } from "../../typechain/TradeAdapterMock"; export { Uint256ArrayUtilsMock } from "../../typechain/Uint256ArrayUtilsMock"; export { Uni } from "../../typechain/Uni"; export { UniswapPairPriceAdapter } from "../../typechain/UniswapPairPriceAdapter"; +export { UniswapV2ExchangeAdapter } from "../../typechain/UniswapV2ExchangeAdapter"; export { UniswapV2IndexExchangeAdapter } from "../../typechain/UniswapV2IndexExchangeAdapter"; export { UniswapV2TransferFeeExchangeAdapter } from "../../typechain/UniswapV2TransferFeeExchangeAdapter"; export { UniswapV2Factory } from "../../typechain/UniswapV2Factory"; diff --git a/utils/deploys/deployAdapters.ts b/utils/deploys/deployAdapters.ts index ef18a15..a68fb68 100644 --- a/utils/deploys/deployAdapters.ts +++ b/utils/deploys/deployAdapters.ts @@ -15,6 +15,7 @@ import { CompoundWrapAdapter, YearnWrapAdapter, UniswapPairPriceAdapter, + UniswapV2ExchangeAdapter, UniswapV2IndexExchangeAdapter, UniswapV2TransferFeeExchangeAdapter, ZeroExApiAdapter, @@ -40,6 +41,7 @@ import { AaveWrapAdapter__factory } from "../../typechain/factories/AaveWrapAdap import { CompoundWrapAdapter__factory } from "../../typechain/factories/CompoundWrapAdapter__factory"; import { YearnWrapAdapter__factory } from "../../typechain/factories/YearnWrapAdapter__factory"; import { UniswapPairPriceAdapter__factory } from "../../typechain/factories/UniswapPairPriceAdapter__factory"; +import { UniswapV2ExchangeAdapter__factory } from "../../typechain/factories/UniswapV2ExchangeAdapter__factory"; import { UniswapV2TransferFeeExchangeAdapter__factory } from "../../typechain/factories/UniswapV2TransferFeeExchangeAdapter__factory"; import { UniswapV2IndexExchangeAdapter__factory } from "../../typechain/factories/UniswapV2IndexExchangeAdapter__factory"; import { SynthetixExchangeAdapter__factory } from "../../typechain/factories/SynthetixExchangeAdapter__factory"; @@ -73,6 +75,10 @@ export default class DeployAdapters { return await new UniswapV2TransferFeeExchangeAdapter__factory(this._deployerSigner).deploy(uniswapV2Router); } + public async deployUniswapV2ExchangeAdapter(router: Address): Promise { + return await new UniswapV2ExchangeAdapter__factory(this._deployerSigner).deploy(router); + } + public async deployUniswapV2IndexExchangeAdapter(uniswapV2Router: Address): Promise { return await new UniswapV2IndexExchangeAdapter__factory(this._deployerSigner).deploy(uniswapV2Router); }