Skip to content

Commit f651248

Browse files
ilanDoronducquangkstn
authored andcommitted
create kyber reserve contract with higher max rate
1 parent ad1122b commit f651248

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
pragma solidity 0.4.18;
2+
3+
import "./KyberReserve.sol";
4+
5+
/// @title Kyber Reserve contract
6+
/// reuses KyberReserve.sol contract while overriding a few functions / values.
7+
/// Update MAX_RATE to higher value and should have maximum code reuse
8+
contract KyberReserveHighRate is KyberReserve {
9+
10+
uint constant internal MAX_RATE = (PRECISION * 10 ** 7); // 10M tokens per ETH
11+
12+
function KyberReserveHighRate(address _kyberNetwork, ConversionRatesInterface _ratesContract,
13+
address _admin) public KyberReserve(_kyberNetwork, _ratesContract, _admin)
14+
{ }
15+
16+
function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate)
17+
internal pure returns(uint)
18+
{
19+
require(srcQty <= MAX_QTY);
20+
require(rate <= MAX_RATE);
21+
22+
if (dstDecimals >= srcDecimals) {
23+
require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
24+
return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION;
25+
} else {
26+
require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
27+
return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals)));
28+
}
29+
}
30+
31+
function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate)
32+
internal pure returns(uint)
33+
{
34+
require(dstQty <= MAX_QTY);
35+
require(rate <= MAX_RATE);
36+
37+
//source quantity is rounded up. to avoid dest quantity being too low.
38+
uint numerator;
39+
uint denominator;
40+
if (srcDecimals >= dstDecimals) {
41+
require((srcDecimals - dstDecimals) <= MAX_DECIMALS);
42+
numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals)));
43+
denominator = rate;
44+
} else {
45+
require((dstDecimals - srcDecimals) <= MAX_DECIMALS);
46+
numerator = (PRECISION * dstQty);
47+
denominator = (rate * (10**(dstDecimals - srcDecimals)));
48+
}
49+
return (numerator + denominator - 1) / denominator; //avoid rounding down
50+
}
51+
}

0 commit comments

Comments
 (0)