Skip to content

Commit fbe3b96

Browse files
ilanDoronductm54Anyhowclick
authored
Update travis to run full regression for each PR (KyberNetwork#1061)
* travis fix default travis config to run full regression. Not only sol6. * Fix all failing regression tests in full regression. (KyberNetwork#1054) * add travis to run linting on all files (not only sol6) * fix linting where required. Co-authored-by: ductm54 <[email protected]> Co-authored-by: Desmond Ho <[email protected]>
1 parent 4038cae commit fbe3b96

13 files changed

+327
-179
lines changed

.solhint.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"avoid-throw": "error",
1010
"avoid-tx-origin": "off",
1111
"check-send-result": "error",
12-
"compiler-version": ["error", "0.6.6"],
12+
"compiler-version": ["off", "0.6.6"],
1313
"const-name-snakecase": "error",
1414
"func-name-mixedcase": "error",
1515
"func-order": "error",

.travis.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ env:
1414
jobs:
1515
include:
1616
- env:
17-
- TEST_PART: Sol6
17+
- TEST_PART: All
1818
- env:
1919
- TEST_PART: Coverage
2020

@@ -23,6 +23,8 @@ install:
2323

2424
before_script:
2525
- npx solhint "contracts/sol6/**/*.sol"
26+
- npx solhint "contracts/sol5/**/*.sol"
27+
- npx solhint "contracts/sol4/**/*.sol"
2628

2729
script:
2830
- ./cmp.sh

.travis/test-part.sh

+3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ set -euxo pipefail
66
readonly test_part=${TEST_PART:-}
77

88
case "$test_part" in
9+
All)
10+
npx buidler test --no-compile
11+
;;
912
Sol6)
1013
npx buidler test --no-compile --config buidlerConfigSol6.js
1114
;;

contracts/sol4/mock/ConversionRatesEnhancedOpen.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ contract ConversionRateEnhancedOpen is ConversionRateEnhancedSteps {
1818

1919
///@dev enables calling get rate and watching extra BPS from step function.
2020
///@dev doesn't check: token listed, valid rate duration.
21-
/// this logic isn't required since only used to show getRate internal values. extra logic isn't
21+
/// this logic isn't required since only used to show getRate internal values.
22+
/// extra logic isn't
2223
///@dev rateWithSteps value should be equal to rate value from getRate call
2324
function getRateOpenData(
2425
ERC20 token,
+128
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
pragma solidity 0.4.18;
2+
3+
import "../ERC20Interface.sol";
4+
import "../KyberReserveInterface.sol";
5+
import "../Utils.sol";
6+
import "../Withdrawable.sol";
7+
import "../KyberNetworkProxyInterface.sol";
8+
9+
contract MaliciousReserve is KyberReserveInterface, Withdrawable, Utils {
10+
11+
mapping(address => uint256) public buyTokenRates;
12+
mapping(address => uint256) public sellTokenRates;
13+
14+
function MaliciousReserve() public {}
15+
16+
function() public payable {}
17+
18+
KyberNetworkProxyInterface public proxy;
19+
address public scammer;
20+
ERC20 public scamToken;
21+
22+
uint public numRecursive = 1;
23+
24+
function setRate(
25+
ERC20 token,
26+
uint256 buyRate,
27+
uint256 sellRate
28+
) public {
29+
buyTokenRates[address(token)] = buyRate;
30+
sellTokenRates[address(token)] = sellRate;
31+
}
32+
33+
function trade(
34+
ERC20 srcToken,
35+
uint256 srcAmount,
36+
ERC20 destToken,
37+
address destAddress,
38+
uint256 conversionRate,
39+
bool validate
40+
) public payable returns (bool) {
41+
validate;
42+
43+
if (srcToken == ETH_TOKEN_ADDRESS) {
44+
require(msg.value == srcAmount);
45+
} else {
46+
require(msg.value == 0);
47+
}
48+
49+
uint256 srcDecimals = getDecimals(srcToken);
50+
uint256 destDecimals = getDecimals(destToken);
51+
uint256 destAmount = calcDstQty(srcAmount, srcDecimals, destDecimals, conversionRate);
52+
require(destAmount > 0);
53+
54+
// collect src tokens
55+
if (srcToken != ETH_TOKEN_ADDRESS) {
56+
srcToken.transferFrom(msg.sender, address(this), srcAmount);
57+
}
58+
59+
// send dest tokens
60+
if (destToken == ETH_TOKEN_ADDRESS) {
61+
destAddress.transfer(destAmount);
62+
} else {
63+
destToken.transfer(destAddress, destAmount);
64+
}
65+
66+
if (numRecursive > 0) {
67+
--numRecursive;
68+
69+
performTrade();
70+
}
71+
72+
return true;
73+
}
74+
75+
function setKyberProxy(KyberNetworkProxyInterface _proxy) public {
76+
77+
require(_proxy != address(0));
78+
79+
proxy = _proxy;
80+
}
81+
82+
function performTrade() public {
83+
uint callValue = 1000;
84+
bytes memory hint;
85+
86+
ERC20 srcToken = ERC20(ETH_TOKEN_ADDRESS);
87+
proxy.tradeWithHint.value(callValue)(srcToken, callValue, scamToken, scammer,
88+
(2 ** 255), 0, 0, hint);
89+
}
90+
91+
function setDestAddress(address _scammer) public {
92+
require(_scammer != address(0));
93+
scammer = _scammer;
94+
}
95+
96+
function setDestToken (ERC20 _token) public {
97+
scamToken = _token;
98+
}
99+
100+
function setNumRecursive(uint num) public {
101+
numRecursive = num;
102+
}
103+
104+
function getConversionRate(
105+
ERC20 src,
106+
ERC20 dest,
107+
uint256 srcQty,
108+
uint256 blockNumber
109+
) public view returns (uint256) {
110+
blockNumber;
111+
uint256 rate = (src == ETH_TOKEN_ADDRESS)
112+
? buyTokenRates[address(dest)]
113+
: sellTokenRates[address(src)];
114+
uint256 srcDecimals = getDecimals(src);
115+
uint256 destDecimals = getDecimals(dest);
116+
if (srcQty > MAX_QTY || rate > MAX_RATE ) {
117+
return 0;
118+
}
119+
uint256 destAmount = calcDstQty(srcQty, srcDecimals, destDecimals, rate);
120+
if (dest == ETH_TOKEN_ADDRESS && address(this).balance < destAmount) {
121+
return 0;
122+
}
123+
if (dest != ETH_TOKEN_ADDRESS && dest.balanceOf(address(this)) < destAmount) {
124+
return 0;
125+
}
126+
return rate;
127+
}
128+
}

contracts/sol4/mock/MockConversionRateEnhancedSteps.sol

+8-6
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,24 @@ import "../reserves/fprConversionRate/ConversionRateEnhancedSteps.sol";
44

55

66
contract MockConversionRateEnhancedSteps is ConversionRateEnhancedSteps {
7-
function MockConversionRateEnhancedSteps(address admin) ConversionRateEnhancedSteps(admin) public {
8-
9-
}
7+
function MockConversionRateEnhancedSteps(address admin) public
8+
ConversionRateEnhancedSteps(admin)
9+
{ /* empty block */ }
1010

1111
function mockGetImbalance(ERC20 token, uint rateUpdateBlock, uint currentBlock) public view
1212
returns(int totalImbalance, int currentBlockImbalance)
1313
{
14-
(totalImbalance, currentBlockImbalance) = getImbalance(token, rateUpdateBlock, currentBlock);
15-
return(totalImbalance, currentBlockImbalance);
14+
(totalImbalance, currentBlockImbalance) =
15+
getImbalance(token, rateUpdateBlock, currentBlock);
1616
}
1717

1818
function mockGetMaxTotalImbalance(ERC20 token) public view returns(uint) {
1919
return getMaxTotalImbalance(token);
2020
}
2121

22-
function getUpdateRateBlockFromCompact (ERC20 token) public view returns(uint updateRateBlock) {
22+
function getUpdateRateBlockFromCompact (ERC20 token)
23+
public view returns(uint updateRateBlock)
24+
{
2325
// get rate update block
2426
bytes32 compactData = tokenRatesCompactData[tokenData[token].compactDataArrayIndex];
2527
updateRateBlock = getLast4Bytes(compactData);

contracts/sol4/mock/MockKyberReserveHighRate.sol

+9-5
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,21 @@ import "../reserves/KyberReserveHighRate.sol";
77
/// Update MAX_RATE to higher value and should have maximum code reuse
88
contract MockKyberReserveHighRate is KyberReserveHighRate {
99

10-
function MockKyberReserveHighRate(address _kyberNetwork, ConversionRatesInterface _ratesContract,
11-
address _admin) public KyberReserveHighRate(_kyberNetwork, _ratesContract, _admin)
12-
{ }
10+
function MockKyberReserveHighRate(
11+
address _kyberNetwork,
12+
ConversionRatesInterface _ratesContract,
13+
address _admin
14+
)
15+
public KyberReserveHighRate(_kyberNetwork, _ratesContract, _admin)
16+
{ /* empty block */ }
1317

14-
function MockCalcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate)
18+
function mockCalcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate)
1519
public pure returns(uint)
1620
{
1721
return calcDstQty(srcQty, srcDecimals, dstDecimals, rate);
1822
}
1923

20-
function MockCalcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate)
24+
function mockCalcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate)
2125
public pure returns(uint)
2226
{
2327
return calcSrcQty(dstQty, srcDecimals, dstDecimals, rate);

0 commit comments

Comments
 (0)