From 8a3f77f2514b1a27c69be9520bf821103ed7cc78 Mon Sep 17 00:00:00 2001 From: Barry Gitarts Date: Tue, 22 Oct 2019 14:50:24 -0400 Subject: [PATCH] update SwapProxy to update key variables proper slippage calc on token transfers --- contracts/SwapProxy.sol | 44 ++++++++++++++++++++++++++++++++++++++- embarkConfig/contracts.js | 2 +- ropsten.chains.json | 12 +++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/contracts/SwapProxy.sol b/contracts/SwapProxy.sol index 3226b63..1e45f95 100644 --- a/contracts/SwapProxy.sol +++ b/contracts/SwapProxy.sol @@ -31,6 +31,43 @@ contract SwapProxy is Pausable, SafeToken { maxSlippage = _maxSlippage; } + event SlippageUpdated(uint maxSlippage); + /** + * @param _maxSlippage most slippage as a percentage + */ + function updateSlippage(uint _maxSlippage) public onlyOwner { + require(_maxSlippage < 100); + maxSlippage = _maxSlippage; + SlippageUpdated(_maxSlippage); + } + + event VaultUpdated(address vault); + /** + * @param _vault address that receives swap fees + */ + function updateVault(address _vault) public onlyOwner { + vault = _vault; + VaultUpdated(_vault); + } + + event KyberUpdated(address kyber); + /** + * @param _kyberProxy Kyber Network Proxy address + */ + function updateKyber(address _kyberProxy) public onlyOwner { + kyberProxy = KyberNetworkProxy(_kyberProxy); + KyberUpdated(_kyberProxy); + } + + event LiquidPledgingUpdated(address liquidPledging); + /** + * @param _liquidPledging LiquidPledging Network Proxy address + */ + function updateLiquidPledging(address _liquidPledging) public onlyOwner { + liquidPledging = LiquidPledging(_liquidPledging); + LiquidPledgingUpdated(_liquidPledging); + } + /** * @notice Gets the conversion rate for the destToken given the srcQty. * @param srcToken source token contract address @@ -51,6 +88,8 @@ contract SwapProxy is Pausable, SafeToken { return slippageRate; } + event Swap(address sender, address srcToken, address destToken, uint srcAmount, uint destAmount); + /** * @notice Funds a project in desired token using ETH * @dev Requires a msg.value @@ -70,8 +109,10 @@ contract SwapProxy is Pausable, SafeToken { require(amount > 0); require(EIP20Interface(token).approve(address(liquidPledging), amount)); liquidPledging.addGiverAndDonate(idReceiver, token, amount); + Swap(msg.sender, ETH, token, msg.value, amount); } + /** * @notice Funds a project in desired token using an ERC20 Token * @param idReceiver receiver of donation @@ -87,7 +128,7 @@ contract SwapProxy is Pausable, SafeToken { uint slippageRate; (expectedRate, slippageRate) = kyberProxy.getExpectedRate(token, receiverToken, amount); require(expectedRate > 0); - uint slippagePercent = (slippageRate * 100) / expectedRate; + uint slippagePercent = 100 - (slippageRate * 100) / expectedRate; require(slippagePercent <= maxSlippage); require(EIP20Interface(token).approve(address(kyberProxy), 0)); require(EIP20Interface(token).approve(address(kyberProxy), amount)); @@ -97,6 +138,7 @@ contract SwapProxy is Pausable, SafeToken { require(receiverAmount > 0); require(EIP20Interface(token).approve(address(liquidPledging), receiverAmount)); liquidPledging.addGiverAndDonate(idReceiver, receiverToken, receiverAmount); + Swap(msg.sender, token, receiverToken, amount, receiverAmount); } function transferOut(address asset, address to, uint amount) public onlyOwner { diff --git a/embarkConfig/contracts.js b/embarkConfig/contracts.js index 3d3fe01..33357ad 100644 --- a/embarkConfig/contracts.js +++ b/embarkConfig/contracts.js @@ -184,7 +184,7 @@ module.exports = { address: "0x8aA3672a99C489E5Dc5dfDb40e607bE49970cbF7" }, SwapProxy: { - address: "0x46A30Bf6D0E438E7EeaabD6c4B5fEBf481267722", + address: "0x1B468F2a4CDaC05E5B2f432DA24F049201B74Aa2", args: [ '$LiquidPledging', "0x818E6FECD516Ecc3849DAf6845e3EC868087B755", diff --git a/ropsten.chains.json b/ropsten.chains.json index 41fb56b..d274283 100644 --- a/ropsten.chains.json +++ b/ropsten.chains.json @@ -24,6 +24,18 @@ "0xd9d749fb529af69819711faec78815efe4334ea74c7785ece18e3f276d845934": { "name": "DAI", "address": "0xaD6D458402F60fD3Bd25163575031ACDce07538D" + }, + "0xafe7338679d28b8279653439aa74f34791475ba797295e37336eecf436127480": { + "name": "SwapProxy", + "address": "0x2B45165e26f5d32fB75abE2fc7f8E7e5D506223b" + }, + "0x2c4bdca5cbf721642f976ca0e83a902c8b88d9e7fd49f721263f145b908d08ef": { + "name": "SwapProxy", + "address": "0x2B45165e26f5d32fB75abE2fc7f8E7e5D506223b" + }, + "0x17446ffed738afc7e8cab4b9f8b44f8fcabe07029419220d52b9fe9318f37b95": { + "name": "SwapProxy", + "address": "0x1B468F2a4CDaC05E5B2f432DA24F049201B74Aa2" } } }