Skip to content

Commit 842cf05

Browse files
manhlx3006ilanDoron
authored andcommitted
Update bancor bridge with new fixed path (#548)
1 parent 117f6ff commit 842cf05

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

contractsV5/bridges/bancor/KyberBancorReserve.sol

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ contract KyberBancorReserve is IKyberReserve, Withdrawable, Utils {
1818
IBancorNetwork public bancorNetwork; // 0x0e936B11c2e7b601055e58c7E32417187aF4de4a
1919

2020
IERC20 public bancorEth; // 0xc0829421C1d260BD3cB3E0F06cfE2D52db2cE315
21+
IERC20 public bancorETHBNT; // 0xb1CD6e4153B2a390Cf00A6556b0fC1458C4A5533
2122
IERC20 public bancorToken; // 0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C
2223

2324
constructor(
2425
address _bancorNetwork,
2526
address _kyberNetwork,
2627
uint _feeBps,
2728
address _bancorEth,
29+
address _bancorETHBNT,
2830
address _bancorToken,
2931
address _admin
3032
)
@@ -33,13 +35,15 @@ contract KyberBancorReserve is IKyberReserve, Withdrawable, Utils {
3335
require(_bancorNetwork != address(0), "constructor: bancorNetwork address is missing");
3436
require(_kyberNetwork != address(0), "constructor: kyberNetwork address is missing");
3537
require(_bancorEth != address(0), "constructor: bancorEth address is missing");
38+
require(_bancorETHBNT != address(0), "constructor: bancorETHBNT address is missing");
3639
require(_bancorToken != address(0), "constructor: bancorToken address is missing");
3740
require(_admin != address(0), "constructor: admin address is missing");
3841
require(_feeBps < BPS, "constructor: fee is too big");
3942

4043
bancorNetwork = IBancorNetwork(_bancorNetwork);
4144
bancorToken = IERC20(_bancorToken);
4245
bancorEth = IERC20(_bancorEth);
46+
bancorETHBNT = IERC20(_bancorETHBNT);
4347

4448
kyberNetwork = _kyberNetwork;
4549
feeBps = _feeBps;
@@ -208,21 +212,19 @@ contract KyberBancorReserve is IKyberReserve, Withdrawable, Utils {
208212
}
209213

210214
function getConversionPath(IERC20 src, IERC20 dest) public view returns(IERC20[] memory path) {
211-
IERC20 bntToken = bancorToken;
212-
213-
if (src == bntToken) {
215+
if (src == bancorToken) {
214216
// trade from BNT to ETH
215217
path = new IERC20[](3);
216-
path[0] = bntToken;
217-
path[1] = bntToken;
218+
path[0] = bancorToken;
219+
path[1] = bancorETHBNT;
218220
path[2] = bancorEth;
219221
return path;
220-
} else if (dest == bntToken) {
222+
} else if (dest == bancorToken) {
221223
// trade from ETH to BNT
222224
path = new IERC20[](3);
223225
path[0] = bancorEth;
224-
path[1] = bntToken;
225-
path[2] = bntToken;
226+
path[1] = bancorETHBNT;
227+
path[2] = bancorToken;
226228
return path;
227229
}
228230
}

contractsV5/bridges/bancor/mock/MockBancorNetwork.sol

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import "../../../UtilsV5.sol";
77
contract MockBancorNetwork is IBancorNetwork, Utils {
88

99
IERC20 public bancorETH;
10+
IERC20 public bancorETHBNT;
1011
IERC20 public bancorBNT;
1112

1213
uint public rateEthToBnt;
1314
uint public rateBntToETh;
1415

15-
constructor(address _bancorETH, address _bancorBNT) public {
16+
constructor(address _bancorETH, address _bancorETHBNT, address _bancorBNT) public {
1617
bancorETH = IERC20(_bancorETH);
1718
bancorBNT = IERC20(_bancorBNT);
19+
bancorETHBNT = IERC20(_bancorETHBNT);
1820
}
1921

2022
function() external payable { }
@@ -27,15 +29,15 @@ contract MockBancorNetwork is IBancorNetwork, Utils {
2729
function getReturnByPath(IERC20[] calldata _path, uint256 _amount) external view returns (uint256, uint256) {
2830
require(_amount > 0);
2931
if (_path.length != 3) { return (0, 0); }
30-
if (_path[0] == bancorBNT && _path[1] == bancorBNT && _path[2] == bancorETH) {
32+
if (_path[0] == bancorBNT && _path[1] == bancorETHBNT && _path[2] == bancorETH) {
3133
// rate btn to eth
3234
uint destAmount = calcDstQty(_amount, getDecimals(bancorBNT), ETH_DECIMALS, rateBntToETh);
3335
if (destAmount > address(this).balance) {
3436
return (0, 0);
3537
}
3638
return (destAmount, 0);
3739
}
38-
if (_path[0] == bancorETH && _path[1] == bancorBNT && _path[2] == bancorBNT) {
40+
if (_path[0] == bancorETH && _path[1] == bancorETHBNT && _path[2] == bancorBNT) {
3941
// rate eth to bnt
4042
uint destAmount = calcDstQty(_amount, ETH_DECIMALS, getDecimals(bancorBNT), rateEthToBnt);
4143
if (destAmount > bancorBNT.balanceOf(address(this))) {
@@ -55,7 +57,7 @@ contract MockBancorNetwork is IBancorNetwork, Utils {
5557
) external payable returns (uint256) {
5658
require(_path.length == 3);
5759
// trade eth to bnt
58-
require(_path[0] == bancorETH && _path[1] == bancorBNT && _path[2] == bancorBNT);
60+
require(_path[0] == bancorETH && _path[1] == bancorETHBNT && _path[2] == bancorBNT);
5961
require(msg.value == _amount && _amount > 0);
6062
require(rateEthToBnt > 0);
6163
uint destAmount = calcDstQty(_amount, ETH_DECIMALS, getDecimals(bancorBNT), rateEthToBnt);
@@ -74,7 +76,7 @@ contract MockBancorNetwork is IBancorNetwork, Utils {
7476
) external returns (uint256) {
7577
require(_path.length == 3);
7678
// trade eth to bnt
77-
require(_path[0] == bancorBNT && _path[1] == bancorBNT && _path[2] == bancorETH);
79+
require(_path[0] == bancorBNT && _path[1] == bancorETHBNT && _path[2] == bancorETH);
7880
// collect bnt
7981
require(_amount > 0);
8082
require(bancorBNT.transferFrom(msg.sender, address(this), _amount));

test/v5/kyberBancorReserve.js

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ contract('KyberBancorNetwork', function(accounts) {
4242
user = accounts[4];
4343

4444
bancorEthToken = await TestToken.new("BancorETH", "BETH", tokenDecimal);
45+
bancorETHBNTToken = await TestToken.new("BancorETHBNT", "BETHBNT", tokenDecimal);
4546
bancorBntToken = await TestToken.new("BancorBNT", "BBNT", tokenDecimal);
46-
bancorNetwork = await MockBancorNetwork.new(bancorEthToken.address, bancorBntToken.address);
47+
bancorNetwork = await MockBancorNetwork.new(bancorEthToken.address, bancorETHBNTToken.address, bancorBntToken.address);
4748
reserve = await KyberBancorReserve.new(
4849
bancorNetwork.address,
4950
network,
5051
feeBps,
5152
bancorEthToken.address,
53+
bancorETHBNTToken.address,
5254
bancorBntToken.address,
5355
admin
5456
);
@@ -142,13 +144,14 @@ contract('KyberBancorNetwork', function(accounts) {
142144

143145
it("Should test getConversionRate returns 0 when path is not correct", async function() {
144146
let testNewToken = await TestToken.new("Test token", "TST", tokenDecimal);
145-
let testBancorNetwork = await MockBancorNetwork.new(testNewToken.address, bancorBntToken.address);
147+
let testBancorNetwork = await MockBancorNetwork.new(testNewToken.address, bancorBntToken.address, bancorBntToken.address);
146148
let testReserve = await KyberBancorReserve.new(
147149
testBancorNetwork.address,
148150
network,
149151
feeBps,
150152
bancorEthToken.address,
151153
bancorBntToken.address,
154+
bancorBntToken.address,
152155
admin
153156
);
154157
await testBancorNetwork.setExchangeRate(ethToBntRate, bntToEthRate);
@@ -160,12 +163,13 @@ contract('KyberBancorNetwork', function(accounts) {
160163
rate = await testReserve.getConversionRate(bancorBntToken.address, ethAddress, amount, 0);
161164
assert.equal(rate.valueOf(), 0, "rate should be 0 as path is incorrect");
162165

163-
testBancorNetwork = await MockBancorNetwork.new(bancorEthToken.address, testNewToken.address);
166+
testBancorNetwork = await MockBancorNetwork.new(bancorEthToken.address, testNewToken.address, testNewToken.address);
164167
testReserve = await KyberBancorReserve.new(
165168
testBancorNetwork.address,
166169
network,
167170
feeBps,
168171
bancorEthToken.address,
172+
testNewToken.address,
169173
bancorBntToken.address,
170174
admin
171175
);
@@ -187,6 +191,7 @@ contract('KyberBancorNetwork', function(accounts) {
187191
network,
188192
feeBps.valueOf(),
189193
bancorEthToken.address,
194+
bancorETHBNTToken.address,
190195
bancorBntToken.address,
191196
admin
192197
);
@@ -200,6 +205,7 @@ contract('KyberBancorNetwork', function(accounts) {
200205
zeroAddress,
201206
feeBps.valueOf(),
202207
bancorEthToken.address,
208+
bancorETHBNTToken.address,
203209
bancorBntToken.address,
204210
admin
205211
);
@@ -213,6 +219,7 @@ contract('KyberBancorNetwork', function(accounts) {
213219
network,
214220
feeBps.valueOf(),
215221
zeroAddress,
222+
bancorETHBNTToken.address,
216223
bancorBntToken.address,
217224
admin
218225
);
@@ -226,6 +233,7 @@ contract('KyberBancorNetwork', function(accounts) {
226233
network,
227234
feeBps.valueOf(),
228235
bancorEthToken.address,
236+
bancorETHBNTToken.address,
229237
zeroAddress,
230238
admin
231239
);
@@ -239,6 +247,21 @@ contract('KyberBancorNetwork', function(accounts) {
239247
network,
240248
feeBps.valueOf(),
241249
bancorEthToken.address,
250+
bancorETHBNTToken.address,
251+
bancorBntToken.address,
252+
zeroAddress
253+
);
254+
assert(false, "throw was expected in line above.")
255+
} catch (e) {
256+
assert(Helper.isRevertErrorMessage(e), "expected throw but got: " + e);
257+
}
258+
try {
259+
_ = await KyberBancorReserve.new(
260+
bancorNetwork.address,
261+
network,
262+
feeBps.valueOf(),
263+
bancorEthToken.address,
264+
zeroAddress.address,
242265
bancorBntToken.address,
243266
zeroAddress
244267
);
@@ -251,6 +274,7 @@ contract('KyberBancorNetwork', function(accounts) {
251274
network,
252275
feeBps.valueOf(),
253276
bancorEthToken.address,
277+
bancorETHBNTToken.address,
254278
bancorBntToken.address,
255279
admin
256280
);

0 commit comments

Comments
 (0)