Skip to content

Commit d6d067b

Browse files
authored
Revert "Allow multiple bridges for token" (#389)
This reverts commit 92f850d - the changes introduced by #387.
1 parent 92f850d commit d6d067b

File tree

8 files changed

+39
-65
lines changed

8 files changed

+39
-65
lines changed

contracts/ERC677BridgeToken.sol

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,17 @@ import "./interfaces/IBurnableMintableERC677Token.sol";
88
import "./upgradeable_contracts/Claimable.sol";
99

1010
contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, BurnableToken, MintableToken, Claimable {
11-
address[] internal _bridgeContracts;
12-
mapping(address => bool) internal _isBridgeContract;
11+
address public bridgeContract;
1312

1413
event ContractFallbackCallFailed(address from, address to, uint256 value);
1514

1615
constructor(string _name, string _symbol, uint8 _decimals) public DetailedERC20(_name, _symbol, _decimals) {
1716
// solhint-disable-previous-line no-empty-blocks
1817
}
1918

20-
function setBridgeContracts(address[] _contracts) external onlyOwner {
21-
require(_contracts.length > 0);
22-
uint256 i;
23-
24-
for (i = 0; i < _bridgeContracts.length; i++) {
25-
_isBridgeContract[_bridgeContracts[i]] = false;
26-
}
27-
28-
_bridgeContracts = _contracts;
29-
30-
for (i = 0; i < _contracts.length; i++) {
31-
require(AddressUtils.isContract(_contracts[i]));
32-
_isBridgeContract[_contracts[i]] = true;
33-
}
19+
function setBridgeContract(address _bridgeContract) external onlyOwner {
20+
require(AddressUtils.isContract(_bridgeContract));
21+
bridgeContract = _bridgeContract;
3422
}
3523

3624
modifier validRecipient(address _recipient) {
@@ -39,10 +27,6 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna
3927
_;
4028
}
4129

42-
function bridgeContracts() external view returns (address[]) {
43-
return _bridgeContracts;
44-
}
45-
4630
function transferAndCall(address _to, uint256 _value, bytes _data) external validRecipient(_to) returns (bool) {
4731
require(superTransfer(_to, _value));
4832
emit Transfer(msg.sender, _to, _value, _data);
@@ -75,7 +59,7 @@ contract ERC677BridgeToken is IBurnableMintableERC677Token, DetailedERC20, Burna
7559

7660
function callAfterTransfer(address _from, address _to, uint256 _value) internal {
7761
if (AddressUtils.isContract(_to) && !contractFallback(_from, _to, _value, new bytes(0))) {
78-
require(!_isBridgeContract[_to]);
62+
require(_to != bridgeContract);
7963
emit ContractFallbackCallFailed(_from, _to, _value);
8064
}
8165
}

deploy/src/deploymentUtils.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ async function transferOwnership({ contract, newOwner, nonce, url }) {
245245
}
246246

247247
async function setBridgeContract({ contract, bridgeAddress, nonce, url }) {
248-
const data = await contract.methods.setBridgeContracts([bridgeAddress]).encodeABI()
248+
const data = await contract.methods.setBridgeContract(bridgeAddress).encodeABI()
249249
const sendTx = getSendTxMethod(url)
250250
const result = await sendTx({
251251
data,
@@ -257,7 +257,7 @@ async function setBridgeContract({ contract, bridgeAddress, nonce, url }) {
257257
if (result.status) {
258258
assert.strictEqual(Web3Utils.hexToNumber(result.status), 1, 'Transaction Failed')
259259
} else {
260-
await assertStateWithRetry(contract.methods.bridgeContracts().call, [bridgeAddress])
260+
await assertStateWithRetry(contract.methods.bridgeContract().call, bridgeAddress)
261261
}
262262
}
263263

@@ -301,9 +301,7 @@ async function initializeValidators({
301301
async function assertStateWithRetry(fn, expected) {
302302
return promiseRetry(async retry => {
303303
const value = await fn()
304-
if (Array.isArray(expected) && !value.equalsIgnoreCase(expected)) {
305-
retry(`Transaction Failed. Expected: ${expected.toString()} Actual: ${value.toString()}`)
306-
} else if (value !== expected && value.toString() !== expected) {
304+
if (value !== expected && value.toString() !== expected) {
307305
retry(`Transaction Failed. Expected: ${expected} Actual: ${value}`)
308306
}
309307
})
@@ -318,14 +316,6 @@ async function isContract(web3, address) {
318316
return code !== '0x' && code !== '0x0'
319317
}
320318

321-
Array.prototype.equalsIgnoreCase = function(array) {
322-
return this.length == array.length && this.every((this_v, i) => { return this_v.equalsIgnoreCase(array[i]) });
323-
}
324-
325-
String.prototype.equalsIgnoreCase = function(compareString) {
326-
return this.toLowerCase() === compareString.toLowerCase();
327-
};
328-
329319
module.exports = {
330320
deployContract,
331321
sendRawTxHome,

deploy/src/erc_to_erc/preDeploy.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ async function preDeploy() {
3737
if (ERC20_EXTENDED_BY_ERC677) {
3838
const tokenContract = new web3Foreign.eth.Contract(abi, ERC20_TOKEN_ADDRESS)
3939
try {
40-
await tokenContract.methods.bridgeContracts().call()
40+
await tokenContract.methods.bridgeContract().call()
4141
} catch (e) {
4242
throw new Error(
43-
`ERC20_EXTENDED_BY_ERC677 is set to TRUE but bridgeContracts method was not found on ERC677 token.`
43+
`ERC20_EXTENDED_BY_ERC677 is set to TRUE but bridgeContract method was not found on ERC677 token.`
4444
)
4545
}
4646
}

docs/ERC-TO-ERC.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ EternalStorageProxy|deployment|378510|378510|378510
1313
HomeBridgeErcToErc|deployment|3528509|3528509|3528509
1414
EternalStorageProxy|upgradeTo|35871|30924|30913
1515
ERC677BridgeToken|deployment|1498202|1499226|1498829
16-
ERC677BridgeToken|setBridgeContracts|47552|86474|77323
16+
ERC677BridgeToken|setBridgeContract|29432|44432|39432
1717
ERC677BridgeToken|transferOwnership|30860|30924|30913
1818
HomeBridgeErcToErc|initialize|212299|213195|213003
1919
EternalStorageProxy|transferProxyOwnership|30653|30653|30653

docs/NATIVE-TO-ERC-WITH-REWARD.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ ForeignBridgeNativeToErc|deployment|3931739|3931739|3931739
3131
EternalStorageProxy|upgradeTo|35871|30924|30913
3232
FeeManagerNativeToErc|deployment|1079956|1079956|1079956
3333
ForeignBridgeNativeToErc|rewardableInitialize|329022|329086|329077
34-
ERC677BridgeToken|setBridgeContracts|47552|86474|77323
34+
ERC677BridgeToken|setBridgeContract|29432|44432|39432
3535
ERC677BridgeToken|transferOwnership|30860|30924|30913
3636
EternalStorageProxy|transferProxyOwnership|30653|30653|30653
3737
Total| |9573114|9799953|9689237
@@ -92,7 +92,7 @@ EternalStorageProxy|deployment|378510|378510|378510
9292
ForeignBridgeNativeToErc|deployment|3931739|3931739|3931739
9393
EternalStorageProxy|upgradeTo|35871|30924|30913
9494
ForeignBridgeNativeToErc|initialize|281275|281339|281328
95-
ERC677BridgeToken|setBridgeContracts|47552|86474|77323
95+
ERC677BridgeToken|setBridgeContract|29432|44432|39432
9696
ERC677BridgeToken|transferOwnership|30860|30924|30913
9797
EternalStorageProxy|transferProxyOwnership|30653|30653|30653
9898
Total| |8189163|8291266|8250125

docs/NATIVE-TO-ERC.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ EternalStorageProxy|deployment|378510|378510|378510
2929
ForeignBridgeNativeToErc|deployment|3931739|3931739|3931739
3030
EternalStorageProxy|upgradeTo|35871|30924|30913
3131
ForeignBridgeNativeToErc|initialize|281275|281339|281328
32-
ERC677BridgeToken|setBridgeContracts|47552|86474|77323
32+
ERC677BridgeToken|setBridgeContract|29432|44432|39432
3333
ERC677BridgeToken|transferOwnership|30860|30924|30913
3434
EternalStorageProxy|transferProxyOwnership|30653|30653|30653
3535
Total| |8189163|8291266|8250125

test/amb_erc677_to_erc677/AMBErc677ToErc677Behavior.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ function shouldBehaveLikeBasicAMBErc677ToErc677(otherSideMediatorContract, accou
694694
// Given
695695
const erc677Token = await ERC677BridgeToken.new('test', 'TST', 18)
696696
await erc677Token.mint(user, twoEthers, { from: owner }).should.be.fulfilled
697-
await erc677Token.setBridgeContracts([contract.address], { from: owner }).should.be.fulfilled
697+
await erc677Token.setBridgeContract(contract.address, { from: owner }).should.be.fulfilled
698698
await erc677Token.transferOwnership(contract.address, { from: owner }).should.be.fulfilled
699699

700700
contract = this.bridge

test/poa20_test.js

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -46,32 +46,32 @@ async function testERC677BridgeToken(accounts, rewardable) {
4646
describe('#bridgeContract', async () => {
4747
it('can set bridge contract', async () => {
4848
const homeErcToErcContract = await HomeErcToErcBridge.new()
49-
;(await token.bridgeContracts()).length.should.be.equal(0)
49+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
5050

51-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
52-
;(await token.bridgeContracts()).should.be.deep.equal([homeErcToErcContract.address])
51+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
52+
;(await token.bridgeContract()).should.be.equal(homeErcToErcContract.address)
5353
})
5454

5555
it('only owner can set bridge contract', async () => {
5656
const homeErcToErcContract = await HomeErcToErcBridge.new()
57-
;(await token.bridgeContracts()).length.should.be.equal(0)
57+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
5858

59-
await token.setBridgeContracts([homeErcToErcContract.address], { from: user }).should.be.rejectedWith(ERROR_MSG)
60-
;(await token.bridgeContracts()).length.should.be.equal(0)
59+
await token.setBridgeContract(homeErcToErcContract.address, { from: user }).should.be.rejectedWith(ERROR_MSG)
60+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
6161

62-
await token.setBridgeContracts([homeErcToErcContract.address], { from: owner }).should.be.fulfilled
63-
;(await token.bridgeContracts()).should.be.deep.equal([homeErcToErcContract.address])
62+
await token.setBridgeContract(homeErcToErcContract.address, { from: owner }).should.be.fulfilled
63+
;(await token.bridgeContract()).should.be.equal(homeErcToErcContract.address)
6464
})
6565

6666
it('fail to set invalid bridge contract address', async () => {
6767
const invalidContractAddress = '0xaaB52d66283F7A1D5978bcFcB55721ACB467384b'
68-
;(await token.bridgeContracts()).length.should.be.equal(0)
68+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
6969

70-
await token.setBridgeContracts([invalidContractAddress]).should.be.rejectedWith(ERROR_MSG)
71-
;(await token.bridgeContracts()).length.should.be.equal(0)
70+
await token.setBridgeContract(invalidContractAddress).should.be.rejectedWith(ERROR_MSG)
71+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
7272

73-
await token.setBridgeContracts([ZERO_ADDRESS]).should.be.rejectedWith(ERROR_MSG)
74-
;(await token.bridgeContracts()).length.should.be.equal(0)
73+
await token.setBridgeContract(ZERO_ADDRESS).should.be.rejectedWith(ERROR_MSG)
74+
;(await token.bridgeContract()).should.be.equal(ZERO_ADDRESS)
7575
})
7676
})
7777

@@ -265,7 +265,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
265265
})
266266

267267
it('sends tokens to bridge contract', async () => {
268-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
268+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
269269
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
270270

271271
const result = await token.transfer(homeErcToErcContract.address, minPerTx, { from: user }).should.be.fulfilled
@@ -275,7 +275,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
275275
value: minPerTx
276276
})
277277

278-
await token.setBridgeContracts([foreignNativeToErcBridge.address]).should.be.fulfilled
278+
await token.setBridgeContract(foreignNativeToErcBridge.address).should.be.fulfilled
279279
const result2 = await token.transfer(foreignNativeToErcBridge.address, minPerTx, {
280280
from: user
281281
}).should.be.fulfilled
@@ -287,7 +287,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
287287
})
288288

289289
it('sends tokens to contract that does not contains onTokenTransfer method', async () => {
290-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
290+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
291291
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
292292

293293
const result = await token.transfer(validatorContract.address, minPerTx, { from: user }).should.be.fulfilled
@@ -307,10 +307,10 @@ async function testERC677BridgeToken(accounts, rewardable) {
307307
const lessThanMin = ether('0.0001')
308308
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
309309

310-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
310+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
311311
await token.transfer(homeErcToErcContract.address, lessThanMin, { from: user }).should.be.rejectedWith(ERROR_MSG)
312312

313-
await token.setBridgeContracts([foreignNativeToErcBridge.address]).should.be.fulfilled
313+
await token.setBridgeContract(foreignNativeToErcBridge.address).should.be.fulfilled
314314
await token
315315
.transfer(foreignNativeToErcBridge.address, lessThanMin, { from: user })
316316
.should.be.rejectedWith(ERROR_MSG)
@@ -343,7 +343,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
343343
const amount = ether('1')
344344
const user2 = accounts[2]
345345

346-
await token.setBridgeContracts([receiver.address]).should.be.fulfilled
346+
await token.setBridgeContract(receiver.address).should.be.fulfilled
347347

348348
expect(await receiver.from()).to.be.equal(ZERO_ADDRESS)
349349
expect(await receiver.value()).to.be.bignumber.equal(ZERO)
@@ -480,7 +480,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
480480
})
481481

482482
it('sends tokens to bridge contract', async () => {
483-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
483+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
484484
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
485485

486486
const result = await token.transferAndCall(homeErcToErcContract.address, minPerTx, '0x', {
@@ -492,7 +492,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
492492
value: minPerTx
493493
})
494494

495-
await token.setBridgeContracts([foreignNativeToErcBridge.address]).should.be.fulfilled
495+
await token.setBridgeContract(foreignNativeToErcBridge.address).should.be.fulfilled
496496
const result2 = await token.transferAndCall(foreignNativeToErcBridge.address, minPerTx, '0x', { from: user })
497497
.should.be.fulfilled
498498
expectEventInLogs(result2.logs, 'Transfer', {
@@ -503,7 +503,7 @@ async function testERC677BridgeToken(accounts, rewardable) {
503503
})
504504

505505
it('fail to sends tokens to contract that does not contains onTokenTransfer method', async () => {
506-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
506+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
507507
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
508508

509509
await token
@@ -515,12 +515,12 @@ async function testERC677BridgeToken(accounts, rewardable) {
515515
const lessThanMin = ether('0.0001')
516516
await token.mint(user, oneEther, { from: owner }).should.be.fulfilled
517517

518-
await token.setBridgeContracts([homeErcToErcContract.address]).should.be.fulfilled
518+
await token.setBridgeContract(homeErcToErcContract.address).should.be.fulfilled
519519
await token
520520
.transferAndCall(homeErcToErcContract.address, lessThanMin, '0x', { from: user })
521521
.should.be.rejectedWith(ERROR_MSG)
522522

523-
await token.setBridgeContracts([foreignNativeToErcBridge.address]).should.be.fulfilled
523+
await token.setBridgeContract(foreignNativeToErcBridge.address).should.be.fulfilled
524524
await token
525525
.transferAndCall(foreignNativeToErcBridge.address, lessThanMin, '0x', { from: user })
526526
.should.be.rejectedWith(ERROR_MSG)

0 commit comments

Comments
 (0)