update SwapProxy to update key variables

proper slippage calc on token transfers
This commit is contained in:
Barry Gitarts 2019-10-22 14:50:24 -04:00 committed by Barry G
parent 9e3ea27ee9
commit 8a3f77f251
3 changed files with 56 additions and 2 deletions

View File

@ -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 {

View File

@ -184,7 +184,7 @@ module.exports = {
address: "0x8aA3672a99C489E5Dc5dfDb40e607bE49970cbF7"
},
SwapProxy: {
address: "0x46A30Bf6D0E438E7EeaabD6c4B5fEBf481267722",
address: "0x1B468F2a4CDaC05E5B2f432DA24F049201B74Aa2",
args: [
'$LiquidPledging',
"0x818E6FECD516Ecc3849DAf6845e3EC868087B755",

View File

@ -24,6 +24,18 @@
"0xd9d749fb529af69819711faec78815efe4334ea74c7785ece18e3f276d845934": {
"name": "DAI",
"address": "0xaD6D458402F60fD3Bd25163575031ACDce07538D"
},
"0xafe7338679d28b8279653439aa74f34791475ba797295e37336eecf436127480": {
"name": "SwapProxy",
"address": "0x2B45165e26f5d32fB75abE2fc7f8E7e5D506223b"
},
"0x2c4bdca5cbf721642f976ca0e83a902c8b88d9e7fd49f721263f145b908d08ef": {
"name": "SwapProxy",
"address": "0x2B45165e26f5d32fB75abE2fc7f8E7e5D506223b"
},
"0x17446ffed738afc7e8cab4b9f8b44f8fcabe07029419220d52b9fe9318f37b95": {
"name": "SwapProxy",
"address": "0x1B468F2a4CDaC05E5B2f432DA24F049201B74Aa2"
}
}
}