From 7cdf3338679774c8f7c16afed3650f5e93e35b56 Mon Sep 17 00:00:00 2001 From: Shlumper Date: Mon, 7 Feb 2022 12:32:38 +0200 Subject: [PATCH 01/64] bridge checker fix --- federator-wallets-checker/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federator-wallets-checker/Jenkinsfile b/federator-wallets-checker/Jenkinsfile index 1371c094..b56b782a 100644 --- a/federator-wallets-checker/Jenkinsfile +++ b/federator-wallets-checker/Jenkinsfile @@ -45,7 +45,7 @@ def sendEmail(needFundsWalletsOuput, subject){ """ - emailext (from: "notifications@sovryn.app", to:"ororosovryn@protonmail.com, shlumperx@gmail.com, brave.pooh8@gmail.com, elan@remake.money", mimeType: 'text/html', subject: subject, body: emailBody) + emailext (to:"ororosovryn@protonmail.com, shlumperx@gmail.com, brave.pooh8@gmail.com, elan@remake.money", mimeType: 'text/html', subject: subject, body: emailBody) } From b04e5c5679e029b29065267c99d0925a2c3645ab Mon Sep 17 00:00:00 2001 From: Tyrone Johnson <77393391+tjcloa@users.noreply.github.com> Date: Fri, 13 May 2022 20:29:23 +0300 Subject: [PATCH 02/64] fix wss://testnet.sovryn.app/ws URI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wss://testnet.sovryn.app/ws -> wss://testnet.sovryn.app/websocket --- sovryn-token-bridge/bridge/truffle-config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sovryn-token-bridge/bridge/truffle-config.js b/sovryn-token-bridge/bridge/truffle-config.js index ad4d80e2..8def8045 100644 --- a/sovryn-token-bridge/bridge/truffle-config.js +++ b/sovryn-token-bridge/bridge/truffle-config.js @@ -51,7 +51,7 @@ module.exports = { rsktestnet: { provider: () => //new HDWalletProvider(MNEMONIC, "http://45.79.214.38"), - new HDWalletProvider(MNEMONIC, "wss://testnet.sovryn.app/ws"), + new HDWalletProvider(MNEMONIC, "wss://testnet.sovryn.app/websocket"), network_id: 31, gas: 6300000, gasPrice: 70000000, // 0.07 gwei From a48158d6eaf81d9b2d6ac88e6b047cb9f349987b Mon Sep 17 00:00:00 2001 From: bravepooh Date: Mon, 16 May 2022 13:04:58 +0300 Subject: [PATCH 03/64] update bsc testnet rpc --- federator-env/testnet-BSC-RSK/btestnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federator-env/testnet-BSC-RSK/btestnet.json b/federator-env/testnet-BSC-RSK/btestnet.json index 00bad1ca..057a3c57 100644 --- a/federator-env/testnet-BSC-RSK/btestnet.json +++ b/federator-env/testnet-BSC-RSK/btestnet.json @@ -4,6 +4,6 @@ "multiSig": "0x1d8cb60d35fcd42a8bd18d027386be9c0f9c509b", "allowTokens": "0xeb23e848ceca88b7d0c019c7186bb86cefadd0bd", "erc777Converter": "0x573CAF2cA648e22fE9721EDB5DdfBdF5645ffd18", - "host": "https://data-seed-prebsc-1-s1.binance.org:8545/", + "host": "http://bsctestnet1.sovryn.app:8575/ ", "fromBlock": 16600000 } From e82b913c27673aca17a40405f6cbeb97b63e32a6 Mon Sep 17 00:00:00 2001 From: Shlumper Date: Sun, 19 Jun 2022 13:57:54 +0300 Subject: [PATCH 04/64] remove shlumoer from email list --- federator-wallets-checker/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federator-wallets-checker/Jenkinsfile b/federator-wallets-checker/Jenkinsfile index b56b782a..e273dbeb 100644 --- a/federator-wallets-checker/Jenkinsfile +++ b/federator-wallets-checker/Jenkinsfile @@ -45,7 +45,7 @@ def sendEmail(needFundsWalletsOuput, subject){ """ - emailext (to:"ororosovryn@protonmail.com, shlumperx@gmail.com, brave.pooh8@gmail.com, elan@remake.money", mimeType: 'text/html', subject: subject, body: emailBody) + emailext (to:"ororosovryn@protonmail.com, brave.pooh8@gmail.com, elan@remake.money", mimeType: 'text/html', subject: subject, body: emailBody) } From 661de16cb8956e43347d0895d3f011ca65459da0 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 04:10:23 +0300 Subject: [PATCH 05/64] Add more logging --- sovryn-token-bridge/federator/src/lib/Federator.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 9ae31235..3f913a12 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -181,7 +181,10 @@ module.exports = class Federator { this.logger.info('Requesting other federators to sign event'); const timer = setTimeout( - () => reject("Didn't get enough signatures after 10 minutes timeout"), + () => { + this.logger.warn("Timeout: Didn't get enough signatures after waiting"); + reject("Didn't get enough signatures after 10 minutes timeout") + }, 60000 ); @@ -198,7 +201,15 @@ module.exports = class Federator { }; const signatures = new Set(); + // TODO: this listener should be removed on timeout const listener = this.network.net.onMessage(async (msg) => { + // TODO: temporary logging, remove + this.logger.debug('got federator message'); + console.log(msg.type) + console.log(msg.data) + console.log('msg.type === submissionType?', msg.type === submissionType) + console.log('msg.data.logId === log.id?', msg.data.logId === log.id, msg.data.logId, log.id); + if (msg.type === submissionType && msg.data.logId === log.id) { this.logger.info(`Submission received from ${msg.source.id}`); From 888280f5e740bd8b542a74a0f6294a653721f3b6 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 04:17:26 +0300 Subject: [PATCH 06/64] Add even more logging --- sovryn-token-bridge/federator/src/main.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sovryn-token-bridge/federator/src/main.js b/sovryn-token-bridge/federator/src/main.js index 74be7fa3..b9df59aa 100644 --- a/sovryn-token-bridge/federator/src/main.js +++ b/sovryn-token-bridge/federator/src/main.js @@ -195,6 +195,7 @@ async function run() { } if (p2pNode.isLeader()) { + console.log("This node is a leader -- handling iteration.") try { console.log('before mainfed'); await mainFederator.run(); @@ -204,6 +205,8 @@ async function run() { logger.error('Unhandled Error on run()', err); process.exit(); } + } else { + console.log("Not leader, just chilling.") } } From c9ae55bb0582fc0d38c49de6e4c0de506705acf3 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 04:43:53 +0300 Subject: [PATCH 07/64] Update docker tag --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 10b7b5ad..3f6b0144 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.9 + image: sovryn/fed-tokenbridge:10.10 ports: - 30303:30303 volumes: From 3c40c8864d2602dd867581f5d6b2e9d6c2aeacbc Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 05:15:19 +0300 Subject: [PATCH 08/64] Check processed status before checking signatures --- .../federator/src/lib/Federator.js | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 3f913a12..a0a411a8 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -161,9 +161,16 @@ module.exports = class Federator { const { _amount: amount, _symbol: symbol } = log.returnValues; if (this._isConfirmed(ctr, symbol, amount, currentBlock, log.blockNumber)) { - const signatures = await this._requestSignatureFromFederators(log); - this.logger.info('Collected enough signatures'); - await this._processLog(log, signatures); + const alreadyProcessed = await this._isAlreadyProcessed(log); + if (alreadyProcessed) { + this.logger.debug( + `Block: ${log.blockHash} Tx: ${log.transactionHash} token: ${symbol} is already processed (on Bridge) -- no need to get signatures` + ); + } else { + const signatures = await this._requestSignatureFromFederators(log); + this.logger.info('Collected enough signatures'); + await this._processLog(log, signatures); + } } else if (allLogsConfirmed) { newLastBlockNumber = log.blockNumber - 1; allLogsConfirmed = false; @@ -267,6 +274,21 @@ module.exports = class Federator { return ethers.utils.recoverAddress(digest, signature); } + async _isAlreadyProcessed(log) { + const { + _to: receiver, + _amount: amount, + } = log.returnValues; + let bridgeTransactionId = await this.sideBridgeContract.methods.getTransactionId( + log.blockHash, + log.transactionHash, + receiver, + amount, + log.logIndex, + ).call(); + return await this.sideBridgeContract.methods.processed(bridgeTransactionId).call(); + } + async _processLog(log, signatures) { const { _to: receiver, @@ -279,17 +301,11 @@ module.exports = class Federator { } = log.returnValues; // We check the status from the bridge first before bothering checking the Federation contract. - // Actually, a check from the bridge is all that we need (in principle) - let bridgeTransactionId = await this.sideBridgeContract.methods.getTransactionId( - log.blockHash, - log.transactionHash, - receiver, - amount, - log.logIndex, - ).call(); - this.logger.info('Bridge transaction id:', bridgeTransactionId); - let wasProcessed = await this.sideBridgeContract.methods.processed(bridgeTransactionId).call(); - this.logger.info('was processed (bridge):', wasProcessed); + // Actually, a check from the bridge is all that we need (in principle) -- but let's leave the other checks + // there too. + // Note that we don't really need to double-check here either, since we check this before requesting + // signatures from federators, but let's do it anyway for safety. + let wasProcessed = await this._isAlreadyProcessed(log); if (wasProcessed) { this.logger.debug( `Block: ${log.blockHash} Tx: ${log.transactionHash} token: ${symbol} was already processed (on Bridge)` From af7be38188470bcd5ad5a978e9d72d695f9aae51 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 05:16:50 +0300 Subject: [PATCH 09/64] Remove unused transactionSender variable --- sovryn-token-bridge/federator/src/lib/Federator.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index a0a411a8..779c5e93 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -145,12 +145,6 @@ module.exports = class Federator { // Loop around logs to process each of them async _processLogs(ctr, logs) { try { - const transactionSender = new TransactionSender( - this.sideWeb3, - this.logger, - this.config, - '' - ); const currentBlock = await this._getCurrentBlockNumber(); let newLastBlockNumber; From 83d69f470ff802556c352126fe0f69647b0020f8 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 05:17:31 +0300 Subject: [PATCH 10/64] Fix error in docker image building docs --- how_to_build_fed_docker_image.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_build_fed_docker_image.md b/how_to_build_fed_docker_image.md index bf1c81ac..a4ed80c1 100644 --- a/how_to_build_fed_docker_image.md +++ b/how_to_build_fed_docker_image.md @@ -5,7 +5,7 @@ with github actions * create tag: ```git tag 8.5``` -* push tags: ```git push tag 8.5``` +* push tag: ```git push 8.5``` From 73832e7c806e958252c2b7015f6e419da5f70a4b Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 05:55:58 +0300 Subject: [PATCH 11/64] Update last processed block numbers --- federator-env/testnet-ETH-RSK/ropsten.json | 2 +- federator-env/testnet-ETH-RSK/rsktestnet.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/federator-env/testnet-ETH-RSK/ropsten.json b/federator-env/testnet-ETH-RSK/ropsten.json index be50d2b8..5013e0a9 100644 --- a/federator-env/testnet-ETH-RSK/ropsten.json +++ b/federator-env/testnet-ETH-RSK/ropsten.json @@ -5,5 +5,5 @@ "allowTokens": "0x9bc4243880730a9bca69addb0f971700d39d1646", "erc777Converter": "0x8F3bbD7673485Cf4c43EF008e125575028fD43F1", "host": "https://ropsten.infura.io/v3/728946296ea64626941bb3d120d16333", - "fromBlock": 10222073 + "fromBlock": 10281973 } \ No newline at end of file diff --git a/federator-env/testnet-ETH-RSK/rsktestnet.json b/federator-env/testnet-ETH-RSK/rsktestnet.json index a0d7ffcc..5baec01b 100644 --- a/federator-env/testnet-ETH-RSK/rsktestnet.json +++ b/federator-env/testnet-ETH-RSK/rsktestnet.json @@ -5,5 +5,5 @@ "allowTokens": "0x918b9fd8c2e9cf5625ea00ca6cfa270a44050d01", "erc777Converter": "0x621d9Ce70Db000273Ddb3d50fa85732960a9E934", "host": "https://testnet2.sovryn.app/rpc", - "fromBlock": 1980020 + "fromBlock": 2960023 } From 899ade4c6c6424b681dbc8d479a7c7897535f2cc Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 06:01:08 +0300 Subject: [PATCH 12/64] Add more logs when signTransaction fails --- sovryn-token-bridge/federator/src/lib/Federator.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 779c5e93..e282e749 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -570,7 +570,11 @@ module.exports = class Federator { filter: { id }, }); - if (logs.length !== 1) throw new CustomError('Invalid return when searching for event'); + if (logs.length !== 1) { + this.logger.error(`Got ${logs.length} logs when expecting 1. Block number: ${blockNumber}, Log id: ${id}, Logs:`); + this.logger.error(logs); + throw new CustomError('Invalid return when searching for event'); + } const { _tokenAddress, _amount, _to, _symbol, _decimals, _granularity, _userData } = logs[0].returnValues; From ed9cbbf28898e92560a8c0a144af88a86309f04f Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 06:01:33 +0300 Subject: [PATCH 13/64] Yet another new tag for debugging --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 3f6b0144..09fbf9d3 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.10 + image: sovryn/fed-tokenbridge:10.11 ports: - 30303:30303 volumes: From 085938a0e782679582eb72a83765ba400e2339e2 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 06:02:20 +0300 Subject: [PATCH 14/64] Fix typo in previous typo-fix commit --- how_to_build_fed_docker_image.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how_to_build_fed_docker_image.md b/how_to_build_fed_docker_image.md index a4ed80c1..1df028fd 100644 --- a/how_to_build_fed_docker_image.md +++ b/how_to_build_fed_docker_image.md @@ -5,7 +5,7 @@ with github actions * create tag: ```git tag 8.5``` -* push tag: ```git push 8.5``` +* push tag: ```git push origin 8.5``` From 11522e270c25595300e9d1d8335146dd0c637ca3 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Tue, 28 Jun 2022 06:46:12 +0300 Subject: [PATCH 15/64] Fix signTransaction error when more than one Cross event in a block Passing filter: { id: } to getPastEvent doesn't work -- need to filter in nodejs. --- sovryn-token-bridge/federator/src/lib/Federator.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index e282e749..383528d9 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -564,11 +564,12 @@ module.exports = class Federator { } async signTransaction({ blockNumber, id }) { - const logs = await this.mainBridgeContract.getPastEvents('Cross', { + const allLogs = await this.mainBridgeContract.getPastEvents('Cross', { fromBlock: blockNumber, toBlock: blockNumber, - filter: { id }, }); + // Passing filter: { id } to getPastEvents won't do any filtering, we need to filter like this + const logs = allLogs.filter(log => log.id === id); if (logs.length !== 1) { this.logger.error(`Got ${logs.length} logs when expecting 1. Block number: ${blockNumber}, Log id: ${id}, Logs:`); From 62cf05830bd55e47675890c069e9229d018b5e18 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 29 Jun 2022 02:45:29 +0300 Subject: [PATCH 16/64] Update last processed block numbers --- federator-env/testnet-ETH-RSK/ropsten.json | 2 +- federator-env/testnet-ETH-RSK/rsktestnet.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/federator-env/testnet-ETH-RSK/ropsten.json b/federator-env/testnet-ETH-RSK/ropsten.json index 5013e0a9..f67aac7a 100644 --- a/federator-env/testnet-ETH-RSK/ropsten.json +++ b/federator-env/testnet-ETH-RSK/ropsten.json @@ -5,5 +5,5 @@ "allowTokens": "0x9bc4243880730a9bca69addb0f971700d39d1646", "erc777Converter": "0x8F3bbD7673485Cf4c43EF008e125575028fD43F1", "host": "https://ropsten.infura.io/v3/728946296ea64626941bb3d120d16333", - "fromBlock": 10281973 + "fromBlock": 12190673 } \ No newline at end of file diff --git a/federator-env/testnet-ETH-RSK/rsktestnet.json b/federator-env/testnet-ETH-RSK/rsktestnet.json index 5baec01b..113e11fd 100644 --- a/federator-env/testnet-ETH-RSK/rsktestnet.json +++ b/federator-env/testnet-ETH-RSK/rsktestnet.json @@ -5,5 +5,5 @@ "allowTokens": "0x918b9fd8c2e9cf5625ea00ca6cfa270a44050d01", "erc777Converter": "0x621d9Ce70Db000273Ddb3d50fa85732960a9E934", "host": "https://testnet2.sovryn.app/rpc", - "fromBlock": 2960023 + "fromBlock": 2962423 } From 2d1bd5807a3e641ac7eae396b411daa8a26adc0c Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 29 Jun 2022 02:45:58 +0300 Subject: [PATCH 17/64] 10.12 tag --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 09fbf9d3..d35518db 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.11 + image: sovryn/fed-tokenbridge:10.12 ports: - 30303:30303 volumes: From 72a8c872d0e2fefd2f201baf414e08ecda17adeb Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 02:48:26 +0300 Subject: [PATCH 18/64] Bump signature TTL to 24h --- federator-env/testnet-ETH-RSK/config.js | 2 +- sovryn-token-bridge/federator/config/config.sample.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/federator-env/testnet-ETH-RSK/config.js b/federator-env/testnet-ETH-RSK/config.js index f464f5f0..ec617c6e 100644 --- a/federator-env/testnet-ETH-RSK/config.js +++ b/federator-env/testnet-ETH-RSK/config.js @@ -29,7 +29,7 @@ module.exports = { runEvery: 2, // In minutes, confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), - signaturesTTL: 120, + signaturesTTL: 24 * 60 * 60, // In seconds storagePath: './db', federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', diff --git a/sovryn-token-bridge/federator/config/config.sample.js b/sovryn-token-bridge/federator/config/config.sample.js index 33de7a81..8bc11c8f 100644 --- a/sovryn-token-bridge/federator/config/config.sample.js +++ b/sovryn-token-bridge/federator/config/config.sample.js @@ -24,7 +24,7 @@ module.exports = { runEvery: 2, // In minutes, confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), - signaturesTTL: 120, // 2 minutes + signaturesTTL: 24 * 60 * 60, // In seconds storagePath: './db', federatorInstanceId: '', etherscanApiKey: etherscanApiKey, From bfe26e6a6f8911f477904c53ffcd9bec59d1db1e Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 03:11:59 +0300 Subject: [PATCH 19/64] Fix listener leak on timeout --- sovryn-token-bridge/federator/src/lib/Federator.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 383528d9..90445243 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -184,6 +184,11 @@ module.exports = class Federator { const timer = setTimeout( () => { this.logger.warn("Timeout: Didn't get enough signatures after waiting"); + try { + listener.unsubscribe(); + } catch(e) { + this.logger.error(`Error subscribing from listener on timeout: ${e}`); + } reject("Didn't get enough signatures after 10 minutes timeout") }, 60000 @@ -202,7 +207,6 @@ module.exports = class Federator { }; const signatures = new Set(); - // TODO: this listener should be removed on timeout const listener = this.network.net.onMessage(async (msg) => { // TODO: temporary logging, remove this.logger.debug('got federator message'); From 18733c441426d59488255cde45a8b837b87a0612 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 03:14:30 +0300 Subject: [PATCH 20/64] Remove unneeded debug logging --- sovryn-token-bridge/federator/src/lib/Federator.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 90445243..3a1fef63 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -208,13 +208,6 @@ module.exports = class Federator { const signatures = new Set(); const listener = this.network.net.onMessage(async (msg) => { - // TODO: temporary logging, remove - this.logger.debug('got federator message'); - console.log(msg.type) - console.log(msg.data) - console.log('msg.type === submissionType?', msg.type === submissionType) - console.log('msg.data.logId === log.id?', msg.data.logId === log.id, msg.data.logId, log.id); - if (msg.type === submissionType && msg.data.logId === log.id) { this.logger.info(`Submission received from ${msg.source.id}`); From 1fa433b5180f18c8ddcd88388a754dc25ad469be Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 03:24:45 +0300 Subject: [PATCH 21/64] Add test for mismatching deadline --- .../federator/test/Federator.test.js | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index 9564f324..f008fd43 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -686,6 +686,48 @@ describe('Federator module tests', () => { expect(res[1]).toBe(signatures[2]); }); + it("should not use signature if the deadline does not match", async () => { + const mockP2p = { + net: { + onMessage: (func) => { + this.callback = func; + return { unsubscribe: () => {} }; + }, + broadcast: (_, { log }) => { + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { + signatureData: { + ...signatures[1], + deadline: signatures[1].deadline + 1, + }, + logId: log.id + }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[2], logId: log.id }, + }); + }, + }, + }; + + const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); + federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + + const res = await federator._requestSignatureFromFederators(logs[0]); + expect(res).toHaveLength(2); + expect(res[0]).toBe(signatures[0]); + expect(res[1]).toBe(signatures[2]); + }); + it('should not use signature if not from federator', async () => { const mockP2p = { net: { From 1197c77dbf0a7e01506164f72906d9060608df1c Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 03:30:17 +0300 Subject: [PATCH 22/64] Minor signatures test code refactoring --- .../federator/test/Federator.test.js | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index f008fd43..219b2a91 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -482,9 +482,30 @@ describe('Federator module tests', () => { describe('Signatures', () => { const chainId = 1; const contractAddress = testConfig.sidechain.federation; - const wallets = []; + const txId = '0x7cfbaa6f05794922229e60c7c9695cc52cd13ed9ab1b88597626bd70bb8315d1'; + const wallets = [ + new ethers.Wallet(testConfig.privateKey), + new ethers.Wallet( + '0x20a3c8eb679bc7fe83e31754871c31a0cff0bf8d96edb8136f1b364753f720f1' + ), + new ethers.Wallet( + '0x6ff46791d809f5a588c1339dc065e38d2079eafa6ff32130a6d5686e0b6b60ea' + ), + ]; const signatures = []; + const createSignature = async (wallet, deadline) => { + const payload = ethers.utils.solidityPack( + ['bytes32', 'uint256', 'address', 'uint256'], + [txId, chainId, contractAddress, deadline] + ); + const signature = await wallet.signMessage(ethers.utils.arrayify(payload)); + return { + signature, + deadline, + } + } + const logs = [ { logIndex: 2, @@ -555,31 +576,9 @@ describe('Federator module tests', () => { ]; beforeAll(async () => { - wallets.push(new ethers.Wallet(testConfig.privateKey)); - wallets.push( - new ethers.Wallet( - '0x20a3c8eb679bc7fe83e31754871c31a0cff0bf8d96edb8136f1b364753f720f1' - ) - ); - wallets.push( - new ethers.Wallet( - '0x6ff46791d809f5a588c1339dc065e38d2079eafa6ff32130a6d5686e0b6b60ea' - ) - ); - - const txId = '0x7cfbaa6f05794922229e60c7c9695cc52cd13ed9ab1b88597626bd70bb8315d1'; - const deadline = Math.floor(Date.now() / 1000) + 120; - const payload = ethers.utils.solidityPack( - ['bytes32', 'uint256', 'address', 'uint256'], - [txId, chainId, contractAddress, deadline] - ); for (let i = 0; i < wallets.length; i += 1) { - const signature = await wallets[i].signMessage(ethers.utils.arrayify(payload)); - signatures.push({ - signature, - deadline, - }); + signatures.push(await createSignature(wallets[i], deadline)); } }); From 575ac3363eeced75f0caea343a54ba4ceb2d935c Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 03:47:23 +0300 Subject: [PATCH 23/64] Add configurable signature request timeout --- .../federator/src/lib/Federator.js | 4 +-- .../federator/test/Federator.test.js | 30 +++++++++++++++++++ .../federator/test/config.json | 1 + 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 3a1fef63..1b252db1 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -189,9 +189,9 @@ module.exports = class Federator { } catch(e) { this.logger.error(`Error subscribing from listener on timeout: ${e}`); } - reject("Didn't get enough signatures after 10 minutes timeout") + reject("Didn't get enough signatures before timeout") }, - 60000 + this.config.signatureRequestTimeoutMs || 60000 ); // Select correct message type depending on main on side federator diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index 219b2a91..9c27bae8 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -649,6 +649,36 @@ describe('Federator module tests', () => { expect(res[1]).toBe(signatures[1]); }); + it('should not use same signature twice (with timeout)', async () => { + const mockP2p = { + net: { + onMessage: (func) => { + this.callback = func; + return { unsubscribe: () => {} }; + }, + broadcast: (_, { log }) => { + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + }, + }, + }; + + const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); + federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + + await expect(federator._requestSignatureFromFederators(logs[0])).rejects.toEqual( + "Didn't get enough signatures before timeout" + ); + }); + it("should not use signature if doesn't match log id", async () => { const mockP2p = { net: { diff --git a/sovryn-token-bridge/federator/test/config.json b/sovryn-token-bridge/federator/test/config.json index 474527b9..4ec69f44 100644 --- a/sovryn-token-bridge/federator/test/config.json +++ b/sovryn-token-bridge/federator/test/config.json @@ -21,6 +21,7 @@ "port": 30303, "runEvery": 1, "signaturesTTL": 120, + "signatureRequestTimeoutMs": 100, "sleepOnGas": 2, "maxSleepOnGas": 3, "confirmations": 0, From 2387f2bb9ef429f3db640e2600b939bbad0bcae3 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 04:21:18 +0300 Subject: [PATCH 24/64] Change ropsten signature request timeout to 2 min --- federator-env/testnet-ETH-RSK/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/federator-env/testnet-ETH-RSK/config.js b/federator-env/testnet-ETH-RSK/config.js index ec617c6e..c04d9011 100644 --- a/federator-env/testnet-ETH-RSK/config.js +++ b/federator-env/testnet-ETH-RSK/config.js @@ -30,6 +30,7 @@ module.exports = { confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), signaturesTTL: 24 * 60 * 60, // In seconds + signatureRequestTimeoutMs: 2 * 60 * 1000, // In milliseconds storagePath: './db', federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', From b72408ae356fadd90c7fa7a9eb08216b0be7f1f2 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 05:09:24 +0300 Subject: [PATCH 25/64] Don't mutate global state in tests -- fix running a single federator test a time --- .../federator/test/Federator.test.js | 80 +++++++++++++------ 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index 9c27bae8..66806fdb 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -36,8 +36,20 @@ const disableEtherscanGasPrices = (sender) => { .mockRejectedValue(new Error('expected etherscan error')); }; -function mockFederatorMethods(federator, methods) { - federator.mainWeb3.eth = federator.mainWeb3.eth.mockMethods(methods); +function mockFederatorMethods(federator, mainWeb3Methods, sideWeb3Methods) { + // create copies to avoid mutating the original + if (mainWeb3Methods) { + federator.mainWeb3 = { + ...federator.mainWeb3, + eth: federator.mainWeb3.eth.mockMethods(mainWeb3Methods) // this creates a copy + }; + } + if (sideWeb3Methods) { + federator.sideWeb3 = { + ...federator.sideWeb3, + eth: federator.sideWeb3.eth.mockMethods(sideWeb3Methods) // this creates a copy + }; + } disableEtherscanGasPrices(federator.transactionSender); } @@ -110,7 +122,9 @@ describe('Federator module tests', () => { mockFederatorMethods(federator, { getBlockNumber: () => Promise.resolve(currentBlock), - getId: () => Promise.resolve(1), + net: { + getId: () => Promise.resolve(1), + } }); const _processLogsSpy = jest.spyOn(federator, '_processLogs'); @@ -132,10 +146,10 @@ describe('Federator module tests', () => { const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, {}, web3Mock); mockFederatorMethods(federator, { getBlockNumber: () => Promise.resolve(currentBlock), - getId: () => Promise.resolve(1), + net: { + getId: () => Promise.resolve(1), + } }); - federator.mainWeb3.eth.getBlockNumber = () => Promise.resolve(currentBlock); - federator.mainWeb3.eth.net.getId = () => Promise.resolve(1); const _processLogsSpy = jest.spyOn(federator, '_processLogs'); let result = await federator.run(); @@ -480,7 +494,8 @@ describe('Federator module tests', () => { }); describe('Signatures', () => { - const chainId = 1; + const mainChainId = 1; + const sideChainId = 3; const contractAddress = testConfig.sidechain.federation; const txId = '0x7cfbaa6f05794922229e60c7c9695cc52cd13ed9ab1b88597626bd70bb8315d1'; const wallets = [ @@ -494,10 +509,33 @@ describe('Federator module tests', () => { ]; const signatures = []; + // Use this to create the federator instead of using the constructor -- it handles method mocking correctly + const createFederator = (mockP2p = {}, members = undefined) => { + const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); + if (members) { + federator.members = members; + } + + const expectedConfirmations = 5760; + const onePage = 1001; + const currentBlock = testConfig.mainchain.fromBlock + onePage + expectedConfirmations; + mockFederatorMethods( + federator, + undefined, + { + getBlockNumber: () => Promise.resolve(currentBlock), + net: { + getId: () => Promise.resolve(sideChainId), + } + } + ); + return federator; + } + const createSignature = async (wallet, deadline) => { const payload = ethers.utils.solidityPack( ['bytes32', 'uint256', 'address', 'uint256'], - [txId, chainId, contractAddress, deadline] + [txId, sideChainId, contractAddress, deadline] ); const signature = await wallet.signMessage(ethers.utils.arrayify(payload)); return { @@ -604,8 +642,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); expect(res).toHaveLength(2); @@ -640,8 +677,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); expect(res).toHaveLength(2); @@ -671,8 +707,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); await expect(federator._requestSignatureFromFederators(logs[0])).rejects.toEqual( "Didn't get enough signatures before timeout" @@ -706,8 +741,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); expect(res).toHaveLength(2); @@ -748,8 +782,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); expect(res).toHaveLength(2); @@ -784,8 +817,7 @@ describe('Federator module tests', () => { }, }; - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); - federator.members = [wallets[0].address, wallets[2].address]; + const federator = createFederator(mockP2p, [wallets[0].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); expect(res).toHaveLength(2); @@ -794,7 +826,7 @@ describe('Federator module tests', () => { }); it('should sign message', async () => { - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, {}, web3Mock); + const federator = createFederator(); federator.mainBridgeContract.getPastEvents = () => [logs[0]]; const { signatureData, logId } = await federator.signTransaction({ @@ -817,7 +849,7 @@ describe('Federator module tests', () => { }); it('should not sign message if no matching event fetched', async () => { - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, {}, web3Mock); + const federator = createFederator(); federator.mainBridgeContract.getPastEvents = () => []; await expect(federator.signTransaction({ blockNumber: 4, id: 123 })).rejects.toThrow( @@ -826,7 +858,7 @@ describe('Federator module tests', () => { }); it('should not sign message if multiple matching events fetched', async () => { - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, {}, web3Mock); + const federator = createFederator(); federator.mainBridgeContract.getPastEvents = () => logs; await expect(federator.signTransaction({ blockNumber: 4, id: 123 })).rejects.toThrow( @@ -835,7 +867,7 @@ describe('Federator module tests', () => { }); it('should not sign message if blocknumber not confirmed', async () => { - const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, {}, web3Mock); + const federator = createFederator(); federator.mainBridgeContract.getPastEvents = () => [logs[0]]; const currentBlock = await federator._getCurrentBlockNumber(); From e33a008c5e31d85e481b44cf72a766dcb4990005 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 6 Jul 2022 05:15:37 +0300 Subject: [PATCH 26/64] Don't allow different signatures from the same signer --- .../federator/src/lib/Federator.js | 9 ++++ .../federator/test/Federator.test.js | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 1b252db1..6c45850e 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -207,6 +207,7 @@ module.exports = class Federator { }; const signatures = new Set(); + const signers = new Set(); const listener = this.network.net.onMessage(async (msg) => { if (msg.type === submissionType && msg.data.logId === log.id) { this.logger.info(`Submission received from ${msg.source.id}`); @@ -221,6 +222,14 @@ module.exports = class Federator { return; } + if (signers.has(signerAddress)) { + this.logger.warn( + `Signer ${signerAddress} has already submitted a signature` + ); + return; + } + signers.add(signerAddress); + signatures.add(signatureData); if (signatures.size >= this.config.minimumPeerAmount) { clearTimeout(timer); diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index 66806fdb..d5085eac 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -680,6 +680,8 @@ describe('Federator module tests', () => { const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); const res = await federator._requestSignatureFromFederators(logs[0]); + // It won't timeout, but it will reject the second signature and return the first and third. + // Otherwise it would return first and second. expect(res).toHaveLength(2); expect(res[0]).toBe(signatures[0]); expect(res[1]).toBe(signatures[1]); @@ -714,6 +716,47 @@ describe('Federator module tests', () => { ); }); + it('should not use different signature from same federator twice', async () => { + const signatureWithDifferentDL = await createSignature( + wallets[0], + signatures[0].deadline + 1 + ); + const mockP2p = { + net: { + onMessage: (func) => { + this.callback = func; + return { unsubscribe: () => {} }; + }, + broadcast: (_, { log }) => { + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatureWithDifferentDL, logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[2], logId: log.id }, + }); + }, + }, + }; + + const federator = new Federator(MAIN_FEDERATOR, testConfig, logger, mockP2p, web3Mock); + federator.members = [wallets[0].address, wallets[1].address, wallets[2].address]; + + const res = await federator._requestSignatureFromFederators(logs[0]); + expect(res).toHaveLength(2); + expect(res[0]).toBe(signatures[0]); + // If this is signatureWithDifferentDL, it has returned the wrong signature. + expect(res[1]).toBe(signatures[2]); + }); + it("should not use signature if doesn't match log id", async () => { const mockP2p = { net: { From d0b947823d5cffe1a08b17cb1a7953cc901aeb3d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 05:26:04 +0300 Subject: [PATCH 27/64] Validate deadlines when requesting signatures --- .../federator/src/lib/Federator.js | 7 +++ .../federator/src/lib/utils.js | 12 ++++-- .../federator/test/Federator.test.js | 43 +++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 6c45850e..3ad7265e 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -230,6 +230,13 @@ module.exports = class Federator { } signers.add(signerAddress); + if (!utils.validateDeadline(signatureData.deadline)) { + this.logger.warn( + `Deadline ${signatureData.deadline} has either passed or is too close` + ); + return; + } + signatures.add(signatureData); if (signatures.size >= this.config.minimumPeerAmount) { clearTimeout(timer); diff --git a/sovryn-token-bridge/federator/src/lib/utils.js b/sovryn-token-bridge/federator/src/lib/utils.js index f3434df7..3954924d 100644 --- a/sovryn-token-bridge/federator/src/lib/utils.js +++ b/sovryn-token-bridge/federator/src/lib/utils.js @@ -126,8 +126,13 @@ function eliminateDuplicates(arrays) { return Array.from(set); } -function createTimestamp(secondesOffset) { - return Math.floor(Date.now() / 1000) + secondesOffset; +function createTimestamp(secondsOffset) { + return Math.floor(Date.now() / 1000) + secondsOffset; +} + +function validateDeadline(deadline, bufferSeconds = 0) { + const currentTimestamp = Math.floor(Date.now() / 1000); + return deadline >= currentTimestamp + bufferSeconds; } module.exports = { @@ -143,5 +148,6 @@ module.exports = { zeroHash: '0x0000000000000000000000000000000000000000000000000000000000000000', waitForReceipt: waitForReceipt, eliminateDuplicates: eliminateDuplicates, - createTimestamp: createTimestamp, + createTimestamp, + validateDeadline, }; diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index d5085eac..466365e6 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -833,6 +833,49 @@ describe('Federator module tests', () => { expect(res[1]).toBe(signatures[2]); }); + it("should not use signature if the deadline is late", async () => { + const signatureWithLateDL = await createSignature( + wallets[1], + utils.createTimestamp(-1), + ); + const mockP2p = { + net: { + onMessage: (func) => { + this.callback = func; + return { unsubscribe: () => {} }; + }, + broadcast: (_, { log }) => { + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { + signatureData: signatureWithLateDL, + logId: log.id + }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[2], logId: log.id }, + }); + }, + }, + }; + + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); + + const res = await federator._requestSignatureFromFederators(logs[0]); + expect(res).toHaveLength(2); + expect(res[0]).toBe(signatures[0]); + // if res[1] is signatureWithLateDL, the test fails + expect(res[1]).toBe(signatures[2]); + }); + it('should not use signature if not from federator', async () => { const mockP2p = { net: { From e479936b5f78ef4984737cc07f6fef1a90981d24 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 05:35:21 +0300 Subject: [PATCH 28/64] Require a buffer for signature deadlines --- .../federator/src/lib/Federator.js | 9 +++- .../federator/test/Federator.test.js | 43 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/Federator.js b/sovryn-token-bridge/federator/src/lib/Federator.js index 3ad7265e..25abc3d6 100644 --- a/sovryn-token-bridge/federator/src/lib/Federator.js +++ b/sovryn-token-bridge/federator/src/lib/Federator.js @@ -230,7 +230,14 @@ module.exports = class Federator { } signers.add(signerAddress); - if (!utils.validateDeadline(signatureData.deadline)) { + // Require 2 minutes or signaturesTTL/2 of buffer, whichever is smaller, to avoid sending the + // transactions with signatures that might expire before the transaction gets mined in the blockchain. + // 2 minutes might not be enough, but we need to start with something + const deadlineBufferSeconds = Math.min( + this.config.signaturesTTL / 2, + 120 + ); + if (!utils.validateDeadline(signatureData.deadline, deadlineBufferSeconds)) { this.logger.warn( `Deadline ${signatureData.deadline} has either passed or is too close` ); diff --git a/sovryn-token-bridge/federator/test/Federator.test.js b/sovryn-token-bridge/federator/test/Federator.test.js index 466365e6..59ebea53 100644 --- a/sovryn-token-bridge/federator/test/Federator.test.js +++ b/sovryn-token-bridge/federator/test/Federator.test.js @@ -876,6 +876,49 @@ describe('Federator module tests', () => { expect(res[1]).toBe(signatures[2]); }); + it("should not use signature if the deadline is too close", async () => { + const signatureWithTooCloseDL = await createSignature( + wallets[1], + utils.createTimestamp(59), // it should require 60s buffer because signaturesTTL is 120 + ); + const mockP2p = { + net: { + onMessage: (func) => { + this.callback = func; + return { unsubscribe: () => {} }; + }, + broadcast: (_, { log }) => { + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[0], logId: log.id }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { + signatureData: signatureWithTooCloseDL, + logId: log.id + }, + }); + this.callback({ + type: MAIN_SIGNATURE_SUBMISSION, + source: { id: 'TEST-ID' }, + data: { signatureData: signatures[2], logId: log.id }, + }); + }, + }, + }; + + const federator = createFederator(mockP2p, [wallets[0].address, wallets[1].address, wallets[2].address]); + + const res = await federator._requestSignatureFromFederators(logs[0]); + expect(res).toHaveLength(2); + expect(res[0]).toBe(signatures[0]); + // if res[1] is signatureWithLateDL, the test fails + expect(res[1]).toBe(signatures[2]); + }); + it('should not use signature if not from federator', async () => { const mockP2p = { net: { From 5098a20e5879faa74d32018643e5f77cff7d86a2 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 05:36:19 +0300 Subject: [PATCH 29/64] 10.13 tag --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index d35518db..cf6299ca 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.12 + image: sovryn/fed-tokenbridge:10.13 ports: - 30303:30303 volumes: From 6b89627c00c2d0ea661f48c226ae5724590fba04 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 18:18:56 +0300 Subject: [PATCH 30/64] Update BSC/RSK start blocks --- federator-env/mainnet-BSC-RSK/bmainnet.json | 2 +- federator-env/mainnet-BSC-RSK/rskmainnet.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/federator-env/mainnet-BSC-RSK/bmainnet.json b/federator-env/mainnet-BSC-RSK/bmainnet.json index eba8cafa..865c50b6 100644 --- a/federator-env/mainnet-BSC-RSK/bmainnet.json +++ b/federator-env/mainnet-BSC-RSK/bmainnet.json @@ -5,5 +5,5 @@ "allowTokens": "0x05b68e70168e876b2025f837bc8e0b2312d5327d", "erc777Converter": "0x9D46B33171eA7124aEE472bFe61B5B7084B55069", "host": "https://bsc-dataseed1.defibit.io/", - "fromBlock": 7912333 + "fromBlock": 19514919 } diff --git a/federator-env/mainnet-BSC-RSK/rskmainnet.json b/federator-env/mainnet-BSC-RSK/rskmainnet.json index d9fef684..33cdd49c 100644 --- a/federator-env/mainnet-BSC-RSK/rskmainnet.json +++ b/federator-env/mainnet-BSC-RSK/rskmainnet.json @@ -5,5 +5,5 @@ "allowTokens": "0xa2f50a2c699c1aa3b9089f6b565d4999d45d8983", "erc777Converter": "0xc8149b1F15794D135Dfe2924955cb90709Ac7070", "host": "http://18.221.155.102:4444/", - "fromBlock": 3398643 + "fromBlock": 4466807 } From b9d236d85535fdc45a0e7cca5ca35196ad711bc9 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 18:21:03 +0300 Subject: [PATCH 31/64] 9.10 tag --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 97d7304c..3f8c0d37 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.9 + image: sovryn/fed-tokenbridge:9.10 command: --name ${FED_ID} volumes: - ./federator-env/${FED_ENV}/:/app/federator/config From bdff0d096a0ed1329fb3610f4246525f92d506c6 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 18:56:07 +0300 Subject: [PATCH 32/64] Fix unsupported syntax --- sovryn-token-bridge/federator/src/lib/TransactionSender.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/TransactionSender.js b/sovryn-token-bridge/federator/src/lib/TransactionSender.js index 279b5b21..5df5b4af 100644 --- a/sovryn-token-bridge/federator/src/lib/TransactionSender.js +++ b/sovryn-token-bridge/federator/src/lib/TransactionSender.js @@ -109,7 +109,7 @@ module.exports = class TransactionSender { async createETHRawTransaction(from, to, data, value, chainId) { const nonce = await this.getNonce(from); - const gwei = 1_000_000_000; + const gwei = 1000000000; const priorityFee = 2; const sleepOnGas = this.config.sleepOnGas * 1000; //10 * 1000 ; // 10 Seconds const maxSleepOnGas = this.config.maxSleepOnGas; //12 From ded70298af223a72f0f73ba8b6ed0446568c897d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 19:02:12 +0300 Subject: [PATCH 33/64] Increase sleep time in start.sh --- start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/start.sh b/start.sh index 9ed9b29e..39508e66 100755 --- a/start.sh +++ b/start.sh @@ -72,9 +72,9 @@ echo using key named: $FED_KEY_NAME cat << EOF > /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key $FED_KEY EOF -echo "starting federator please wait..." +echo "starting federator please wait... this takes 90s" nohup 2>&1 docker-compose -f docker-compose-prod.yml up > federator.log & -sleep 30 +sleep 90 echo "federator logs: /home/ubuntu/Bridge-SC/federator.log" rm -rf /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key tail -f /home/ubuntu/Bridge-SC/federator.log \ No newline at end of file From 40214be3a7ad3757bd088d1ec48c4a9dea172236 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 19:06:09 +0300 Subject: [PATCH 34/64] 60s --- start.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/start.sh b/start.sh index 39508e66..bce91974 100755 --- a/start.sh +++ b/start.sh @@ -72,9 +72,9 @@ echo using key named: $FED_KEY_NAME cat << EOF > /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key $FED_KEY EOF -echo "starting federator please wait... this takes 90s" +echo "starting federator please wait... this takes 60" nohup 2>&1 docker-compose -f docker-compose-prod.yml up > federator.log & -sleep 90 +sleep 60 echo "federator logs: /home/ubuntu/Bridge-SC/federator.log" rm -rf /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key tail -f /home/ubuntu/Bridge-SC/federator.log \ No newline at end of file From f4248ca76a6f6524db8e47ce74ef0f6a0619612c Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 19:06:27 +0300 Subject: [PATCH 35/64] 9.11 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 3f8c0d37..359318db 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.10 + image: sovryn/fed-tokenbridge:9.11 command: --name ${FED_ID} volumes: - ./federator-env/${FED_ENV}/:/app/federator/config From e3988f6d9d6f91b9f0e4c1c64a75c08ebe6c83ff Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 13 Jul 2022 19:18:21 +0300 Subject: [PATCH 36/64] BSC hotfix tag --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 359318db..06a2b628 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.11 + image: sovryn/fed-tokenbridge:9.11.1 command: --name ${FED_ID} volumes: - ./federator-env/${FED_ENV}/:/app/federator/config From cbe9beb74bd2195fb38912c0f5ca03bbe1989007 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Mon, 1 Aug 2022 15:09:59 +0300 Subject: [PATCH 37/64] Working BSC testnet RPC url --- federator-env/testnet-BSC-RSK/btestnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/federator-env/testnet-BSC-RSK/btestnet.json b/federator-env/testnet-BSC-RSK/btestnet.json index 057a3c57..604f8bdf 100644 --- a/federator-env/testnet-BSC-RSK/btestnet.json +++ b/federator-env/testnet-BSC-RSK/btestnet.json @@ -4,6 +4,6 @@ "multiSig": "0x1d8cb60d35fcd42a8bd18d027386be9c0f9c509b", "allowTokens": "0xeb23e848ceca88b7d0c019c7186bb86cefadd0bd", "erc777Converter": "0x573CAF2cA648e22fE9721EDB5DdfBdF5645ffd18", - "host": "http://bsctestnet1.sovryn.app:8575/ ", + "host": "https://bsc.sovryn.app/testnet", "fromBlock": 16600000 } From d584998934ef07b21b9ab669793fbcb7e5d46d63 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Mon, 22 Aug 2022 19:18:42 +0300 Subject: [PATCH 38/64] Update block numbers and BSC RPC Url --- federator-env/mainnet-BSC-RSK/bmainnet.json | 4 ++-- federator-env/mainnet-BSC-RSK/rskmainnet.json | 2 +- federator-env/mainnet-ETH-RSK/mainnet.json | 2 +- federator-env/mainnet-ETH-RSK/rskmainnet.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/federator-env/mainnet-BSC-RSK/bmainnet.json b/federator-env/mainnet-BSC-RSK/bmainnet.json index 865c50b6..03d341a1 100644 --- a/federator-env/mainnet-BSC-RSK/bmainnet.json +++ b/federator-env/mainnet-BSC-RSK/bmainnet.json @@ -4,6 +4,6 @@ "multiSig": "0xec3fabc3517e64e07669dd1d2d673f466f93a328", "allowTokens": "0x05b68e70168e876b2025f837bc8e0b2312d5327d", "erc777Converter": "0x9D46B33171eA7124aEE472bFe61B5B7084B55069", - "host": "https://bsc-dataseed1.defibit.io/", - "fromBlock": 19514919 + "host": "https://bsc.sovryn.app/mainnet", + "fromBlock": 20666968 } diff --git a/federator-env/mainnet-BSC-RSK/rskmainnet.json b/federator-env/mainnet-BSC-RSK/rskmainnet.json index 33cdd49c..da3b95a3 100644 --- a/federator-env/mainnet-BSC-RSK/rskmainnet.json +++ b/federator-env/mainnet-BSC-RSK/rskmainnet.json @@ -5,5 +5,5 @@ "allowTokens": "0xa2f50a2c699c1aa3b9089f6b565d4999d45d8983", "erc777Converter": "0xc8149b1F15794D135Dfe2924955cb90709Ac7070", "host": "http://18.221.155.102:4444/", - "fromBlock": 4466807 + "fromBlock": 4573685 } diff --git a/federator-env/mainnet-ETH-RSK/mainnet.json b/federator-env/mainnet-ETH-RSK/mainnet.json index 4cd58ccb..0bcb49ce 100644 --- a/federator-env/mainnet-ETH-RSK/mainnet.json +++ b/federator-env/mainnet-ETH-RSK/mainnet.json @@ -5,5 +5,5 @@ "allowTokens": "0x8df20c2c85bee0c3da250da96d892598c70aa1be", "erc777Converter": "0xC0b2A9E31f69e4F0bC24584C678C582714a4fA1b", "host": "https://mainnet.infura.io/v3/f02caaf003d14ad7bee83f33eeda2f5a", - "fromBlock": 12110034 + "fromBlock": 15384029 } diff --git a/federator-env/mainnet-ETH-RSK/rskmainnet.json b/federator-env/mainnet-ETH-RSK/rskmainnet.json index acbfb1c1..be322c11 100644 --- a/federator-env/mainnet-ETH-RSK/rskmainnet.json +++ b/federator-env/mainnet-ETH-RSK/rskmainnet.json @@ -5,5 +5,5 @@ "allowTokens": "0xd2090fe759613c3a3e2962c6bb2ad046f62d32ff", "erc777Converter": "0xb86623c103843ccf75c6f0073d84bcfc0e34536c", "host": "http://18.221.155.102:4444/", - "fromBlock": 3258718 + "fromBlock": 4572871 } \ No newline at end of file From 92f1737aa30f3b600dc6dcb4c7f294176334dc8d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Mon, 22 Aug 2022 19:29:29 +0300 Subject: [PATCH 39/64] 9.12 --- docker-compose-prod.yml | 2 +- docker-compose-test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 06a2b628..e7cee9d2 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.11.1 + image: sovryn/fed-tokenbridge:9.12 command: --name ${FED_ID} volumes: - ./federator-env/${FED_ENV}/:/app/federator/config diff --git a/docker-compose-test.yml b/docker-compose-test.yml index db46b32f..c31cafc8 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.9 + image: sovryn/fed-tokenbridge:9.12 volumes: - ./federator-env/${FED_ENV}/:/app/federator/config - ./federator-env/${FED_ENV}/db:/app/federator/db From 7d3c7b1ee6afeabb908c6f8d36954aceb890a95d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Mon, 22 Aug 2022 19:48:45 +0300 Subject: [PATCH 40/64] Rename Globals to globals so that imports work on Linux too --- sovryn-token-bridge/federator/src/lib/{Globals.js => globals.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sovryn-token-bridge/federator/src/lib/{Globals.js => globals.js} (100%) diff --git a/sovryn-token-bridge/federator/src/lib/Globals.js b/sovryn-token-bridge/federator/src/lib/globals.js similarity index 100% rename from sovryn-token-bridge/federator/src/lib/Globals.js rename to sovryn-token-bridge/federator/src/lib/globals.js From 5e55d8f76d893d1416ee3037f3399567c6546cc8 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Mon, 22 Aug 2022 19:51:36 +0300 Subject: [PATCH 41/64] 9.13 --- docker-compose-prod.yml | 2 +- docker-compose-test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index e7cee9d2..d061f0f1 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.12 + image: sovryn/fed-tokenbridge:9.13 command: --name ${FED_ID} volumes: - ./federator-env/${FED_ENV}/:/app/federator/config diff --git a/docker-compose-test.yml b/docker-compose-test.yml index c31cafc8..768202f5 100644 --- a/docker-compose-test.yml +++ b/docker-compose-test.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:9.12 + image: sovryn/fed-tokenbridge:9.13 volumes: - ./federator-env/${FED_ENV}/:/app/federator/config - ./federator-env/${FED_ENV}/db:/app/federator/db From c7ca73867ed10006d30de0f967f0228673c3d6d9 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 11:35:58 +0300 Subject: [PATCH 42/64] Update federation addresses, block numbers and rpc urls --- federator-env/mainnet-BSC-RSK/bmainnet.json | 4 ++-- federator-env/mainnet-BSC-RSK/rskmainnet.json | 6 +++--- federator-env/mainnet-ETH-RSK/mainnet.json | 4 ++-- federator-env/mainnet-ETH-RSK/rskmainnet.json | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/federator-env/mainnet-BSC-RSK/bmainnet.json b/federator-env/mainnet-BSC-RSK/bmainnet.json index 03d341a1..33f10f99 100644 --- a/federator-env/mainnet-BSC-RSK/bmainnet.json +++ b/federator-env/mainnet-BSC-RSK/bmainnet.json @@ -1,9 +1,9 @@ { "bridge": "0xdfc7127593c8af1a17146893f10e08528f4c2aa7", - "federation": "0x33f8743d5AFa519Dd373a75E7AA5C255e2c82468", + "federation": "0x502fBCe27973d4bE1E69a4099046762251D005B4", "multiSig": "0xec3fabc3517e64e07669dd1d2d673f466f93a328", "allowTokens": "0x05b68e70168e876b2025f837bc8e0b2312d5327d", "erc777Converter": "0x9D46B33171eA7124aEE472bFe61B5B7084B55069", "host": "https://bsc.sovryn.app/mainnet", - "fromBlock": 20666968 + "fromBlock": 21118895 } diff --git a/federator-env/mainnet-BSC-RSK/rskmainnet.json b/federator-env/mainnet-BSC-RSK/rskmainnet.json index da3b95a3..c6aba8d3 100644 --- a/federator-env/mainnet-BSC-RSK/rskmainnet.json +++ b/federator-env/mainnet-BSC-RSK/rskmainnet.json @@ -1,9 +1,9 @@ { "bridge": "0x971b97c8cc82e7d27bc467c2dc3f219c6ee2e350", - "federation": "0xA7938270C2bF99A9cF033c9d35156d2dDb097B12", + "federation": "0xD1E45f51C8f09b139218fc75d26409096316971C", "multiSig": "0xee9ea57555d9533d71f6f77e0e480961f068a6c5", "allowTokens": "0xa2f50a2c699c1aa3b9089f6b565d4999d45d8983", "erc777Converter": "0xc8149b1F15794D135Dfe2924955cb90709Ac7070", - "host": "http://18.221.155.102:4444/", - "fromBlock": 4573685 + "host": "https://mainnet.sovryn.app/rpc", + "fromBlock": 4614985 } diff --git a/federator-env/mainnet-ETH-RSK/mainnet.json b/federator-env/mainnet-ETH-RSK/mainnet.json index 0bcb49ce..52b7f9c0 100644 --- a/federator-env/mainnet-ETH-RSK/mainnet.json +++ b/federator-env/mainnet-ETH-RSK/mainnet.json @@ -1,9 +1,9 @@ { "bridge": "0x33c0d33a0d4312562ad622f91d12b0ac47366ee1", - "federation": "0x74aa9b461CAd174cA066fc80AF2151c96Bd4D45f", + "federation": "0xD77b76A65a19715BDcB5eE223928af2919836A3E", "multiSig": "0x062c74f9d27b1178bb76186c1756128ccb3ccd2e", "allowTokens": "0x8df20c2c85bee0c3da250da96d892598c70aa1be", "erc777Converter": "0xC0b2A9E31f69e4F0bC24584C678C582714a4fA1b", "host": "https://mainnet.infura.io/v3/f02caaf003d14ad7bee83f33eeda2f5a", - "fromBlock": 15384029 + "fromBlock": 15483239 } diff --git a/federator-env/mainnet-ETH-RSK/rskmainnet.json b/federator-env/mainnet-ETH-RSK/rskmainnet.json index be322c11..7b3117f9 100644 --- a/federator-env/mainnet-ETH-RSK/rskmainnet.json +++ b/federator-env/mainnet-ETH-RSK/rskmainnet.json @@ -1,9 +1,9 @@ { "bridge": "0x1ccad820b6d031b41c54f1f3da11c0d48b399581", - "federation": "0x5e2ee3cd18421838d066bd1dc02fb1f767d834dd", + "federation": "0x32593e4f7A4991C2fe17459DaE9920fd612855B4", "multiSig": "0xb64322e10b5ae1be121b8bb0dead560c53d9dbc3", "allowTokens": "0xd2090fe759613c3a3e2962c6bb2ad046f62d32ff", "erc777Converter": "0xb86623c103843ccf75c6f0073d84bcfc0e34536c", - "host": "http://18.221.155.102:4444/", - "fromBlock": 4572871 + "host": "https://mainnet.sovryn.app/rpc", + "fromBlock": 4615325 } \ No newline at end of file From eb80752febffb5105d13c6c25741bedc7143ccd1 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 11:51:32 +0300 Subject: [PATCH 43/64] Change the exposed port to 4444 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 195bf50d..6e5ba1f5 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -4,7 +4,7 @@ services: image: sovryn/fed-tokenbridge:10.13 command: --name ${FED_ID} ports: - - 30303:30303 + - 4444:30303 volumes: - ./federator-env/${FED_ENV}/:/app/federator/config - ./federator-env/${FED_ENV}/db:/app/federator/db From 7664385b384840f68f285ded1ff7e2ed121cd991 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:08:02 +0300 Subject: [PATCH 44/64] Mainnet peers config --- federator-env/mainnet-BSC-RSK/peers.config.js | 24 ++++++++++++++++++ federator-env/mainnet-ETH-RSK/peers.config.js | 25 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 federator-env/mainnet-BSC-RSK/peers.config.js create mode 100644 federator-env/mainnet-ETH-RSK/peers.config.js diff --git a/federator-env/mainnet-BSC-RSK/peers.config.js b/federator-env/mainnet-BSC-RSK/peers.config.js new file mode 100644 index 00000000..dca2fa40 --- /dev/null +++ b/federator-env/mainnet-BSC-RSK/peers.config.js @@ -0,0 +1,24 @@ +module.exports = { + "peers": [ + { + "address": "0xf963C7B3D8f6dAB6d1176702B94Ecdb75916770A", + "ip": "3.132.89.149", + "port": 4444 + }, + { + "address": "0x4b03E69D6962649573f2747c04F2dd9aB5494Cdb", + "ip": "3.140.153.73", + "port": 4444 + }, + { + "address": "0x642aA4Ab1F29c0E8877A99312494E2A0b623a682", + "ip": "18.189.59.47", + "port": 4444 + }, + { + "address": "0x57a247b871784E6e303CC29230Fa664fab15370D", + "ip": "18.116.158.70", + "port": 4444 + } + ] +}; \ No newline at end of file diff --git a/federator-env/mainnet-ETH-RSK/peers.config.js b/federator-env/mainnet-ETH-RSK/peers.config.js new file mode 100644 index 00000000..7632eeff --- /dev/null +++ b/federator-env/mainnet-ETH-RSK/peers.config.js @@ -0,0 +1,25 @@ +module.exports = { + "peers": [ + { + "address": "0xa420512B06B23d14Beb25Bae524a9B5F8789c45C", + "ip": "18.119.155.67", + "port": 4444 + }, + { + "address": "0xcD1b561207E20A7ccbcf004bb0a4bc897BA8F2eE", + "ip": "3.129.188.13", + "port": 4444 + }, + { + "address": "0x778898877A3277F7306b19879F426A86d078E115", + "ip": "3.132.239.65", + "port": 4444 + }, + { + "address": "0x8a2241ce21AfA71515a73f82D09E690b85603F35", + "ip": "3.134.242.47", + "port": 4444 + } + ] +} +; \ No newline at end of file From 02c487e9030ae4f239bd87f7b5ce1d194827cb9b Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:08:15 +0300 Subject: [PATCH 45/64] Fault tolerance --- sovryn-token-bridge/federator/src/main.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/main.js b/sovryn-token-bridge/federator/src/main.js index b9df59aa..2bc88f32 100644 --- a/sovryn-token-bridge/federator/src/main.js +++ b/sovryn-token-bridge/federator/src/main.js @@ -156,7 +156,11 @@ async function startServices() { let fedAddress = config.federatorAddress; let peers = peersConfig.peers - let peersFiltered = peers.filter(peer => peer.address !== fedAddress); + let peersFiltered = peers.filter( + peer => ( + (peer.address || '').toLowerCase() !== (fedAddress || '').toLowerCase() + ) + ); console.log(peersFiltered); try { From 8f953892f51083c737ebb5312d245ecb9560f31d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:13:11 +0300 Subject: [PATCH 46/64] Only wait for 5 min when polling avg gas interval --- sovryn-token-bridge/federator/src/lib/GasServices.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/GasServices.js b/sovryn-token-bridge/federator/src/lib/GasServices.js index 2664faf3..6550492b 100644 --- a/sovryn-token-bridge/federator/src/lib/GasServices.js +++ b/sovryn-token-bridge/federator/src/lib/GasServices.js @@ -77,8 +77,11 @@ module.exports = class GasServices { this.logger.info( `Process is waiting to calculate average gas of ${avgGasPeriodInterval} ms.` ); - this.logger.debug('Process is waiting to calculate average gas of ', avgGasPeriodInterval); - await utils.sleep(avgGasPeriodInterval, { logger: this.logger }); + // Temporarily only sleep for 5 min while waiting for gas prices + // this.logger.debug('Process is waiting to calculate average gas of ', avgGasPeriodInterval); + // await utils.sleep(avgGasPeriodInterval, { logger: this.logger }); + this.logger.debug('Process is waiting to calculate average gas for 5min'); + await utils.sleep(5 * 60 * 1000, { logger: this.logger }); } async runGasPriceService() { From 288f70d979f62ddf2e352cefaef8309ca294ac7b Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:14:02 +0300 Subject: [PATCH 47/64] 10.14 tag (federator update ready) --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 6e5ba1f5..63ddc7ec 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.13 + image: sovryn/fed-tokenbridge:10.14 command: --name ${FED_ID} ports: - 4444:30303 From 561a720ed64b741cb0d9bf9a869e1c1e5c308b7c Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:37:52 +0300 Subject: [PATCH 48/64] Remove --name, 10.15 --- docker-compose-prod.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 63ddc7ec..949c26a9 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,8 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.14 - command: --name ${FED_ID} + image: sovryn/fed-tokenbridge:10.15 ports: - 4444:30303 volumes: From 32b7648902cc3d51b9ef9d5a1a00d6b195fd40b2 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 12:43:40 +0300 Subject: [PATCH 49/64] Temporarily edit the reset script to reset to signatures branch --- reset.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reset.sh b/reset.sh index 8e5960d7..c518b582 100755 --- a/reset.sh +++ b/reset.sh @@ -4,5 +4,5 @@ find federator-env/testnet-BSC-RSK/db/. -type f -not -name 'failingTxIds.txt' -d find federator-env/testnet-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete rm -rf federator.log -git reset --hard origin/master -git pull +git fetch +git reset --hard origin/signatures From b50b6b8c03be0dd45956e7d74a7ab8723e945d80 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 13:34:01 +0300 Subject: [PATCH 50/64] Signatures-friendly config --- federator-env/mainnet-BSC-RSK/config.js | 2 ++ federator-env/mainnet-ETH-RSK/config.js | 2 ++ start.sh | 10 +++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/federator-env/mainnet-BSC-RSK/config.js b/federator-env/mainnet-BSC-RSK/config.js index 12f50855..9dfca788 100644 --- a/federator-env/mainnet-BSC-RSK/config.js +++ b/federator-env/mainnet-BSC-RSK/config.js @@ -13,6 +13,8 @@ module.exports = { confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), storagePath: './db', + minimumPeerAmount: 3, + port: 30303, federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', telegramBot: { diff --git a/federator-env/mainnet-ETH-RSK/config.js b/federator-env/mainnet-ETH-RSK/config.js index 3b304f71..2221eadf 100644 --- a/federator-env/mainnet-ETH-RSK/config.js +++ b/federator-env/mainnet-ETH-RSK/config.js @@ -26,6 +26,8 @@ module.exports = { confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), storagePath: './db', + minimumPeerAmount: 3, + port: 30303, federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', etherscanApiKey: etherscanApiKey, diff --git a/start.sh b/start.sh index bce91974..c8e77f6d 100755 --- a/start.sh +++ b/start.sh @@ -60,8 +60,12 @@ if [ "$FED_ENV" = "rinkeby-ETH-RSK" ]; then echo $(cat /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/rinkeby.json | jq --arg args "$ETHER_RPC" '."host"=$args') > /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/rinkeby.json fi +echo "Enter Federator public address:" +read FED_ADDRESS -echo "starting federator on $ED_ENV.. this should take 30 sec, please wait" +sed -i 's/federatorAddress_replace_this/'"$FED_ADDRESS"'/g' /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/config.js + +echo "starting federator on $FED_ENV.. this should take 90 sec, please wait" mkdir -p /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/db echo "createing db folder.." echo "getting fed secret:" @@ -72,9 +76,9 @@ echo using key named: $FED_KEY_NAME cat << EOF > /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key $FED_KEY EOF -echo "starting federator please wait... this takes 60" +echo "starting federator please wait... this takes" nohup 2>&1 docker-compose -f docker-compose-prod.yml up > federator.log & -sleep 60 +sleep 90 echo "federator logs: /home/ubuntu/Bridge-SC/federator.log" rm -rf /home/ubuntu/Bridge-SC/federator-env/$FED_ENV/federator.key tail -f /home/ubuntu/Bridge-SC/federator.log \ No newline at end of file From 45eeab539aab04fa00dff5f962e25b394b7cbf4d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 13:36:33 +0300 Subject: [PATCH 51/64] Log number of peers on each iteration --- sovryn-token-bridge/federator/src/main.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sovryn-token-bridge/federator/src/main.js b/sovryn-token-bridge/federator/src/main.js index 2bc88f32..519a9c1d 100644 --- a/sovryn-token-bridge/federator/src/main.js +++ b/sovryn-token-bridge/federator/src/main.js @@ -193,13 +193,14 @@ async function startServices() { } async function run() { - if (p2pNode.getPeerAmount() < config.minimumPeerAmount) { - logger.info('Waiting for enough peers'); + const numPeers = p2pNode.getPeerAmount(); + if (numPeers < config.minimumPeerAmount) { + logger.info(`Waiting for enough peers (now ${numPeers})`); return; } if (p2pNode.isLeader()) { - console.log("This node is a leader -- handling iteration.") + console.log(`This node is a leader -- handling iteration. (${numPeers} peers)`); try { console.log('before mainfed'); await mainFederator.run(); @@ -210,7 +211,7 @@ async function run() { process.exit(); } } else { - console.log("Not leader, just chilling.") + console.log(`Not leader, just chilling. (${numPeers} peers)`) } } From 37007572d8c6d155605865871f9da759374d3272 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 13:37:37 +0300 Subject: [PATCH 52/64] 10.16 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 949c26a9..5e438d56 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.15 + image: sovryn/fed-tokenbridge:10.16 ports: - 4444:30303 volumes: From 1a482027a3cd1c01909b15e1346087af4670cee4 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 13:44:51 +0300 Subject: [PATCH 53/64] Reset script shenanigans --- reset.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reset.sh b/reset.sh index c518b582..05f71c31 100755 --- a/reset.sh +++ b/reset.sh @@ -5,4 +5,6 @@ find federator-env/testnet-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -d find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete rm -rf federator.log git fetch -git reset --hard origin/signatures +git reset --hard origin/master +git checkout signatures +git pull From 3d30745ff5b59a41249a4b238bc7c9b2af03fa06 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:19:55 +0300 Subject: [PATCH 54/64] Return peerAmount correctly --- sovryn-token-bridge/federator/src/lib/p2p.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sovryn-token-bridge/federator/src/lib/p2p.js b/sovryn-token-bridge/federator/src/lib/p2p.js index 697af3bf..c146284f 100644 --- a/sovryn-token-bridge/federator/src/lib/p2p.js +++ b/sovryn-token-bridge/federator/src/lib/p2p.js @@ -86,7 +86,7 @@ class P2p { } getPeerAmount() { - return this.net.nodes.length; + return this.getNodeIds().length; } isLeader() { From 0045447067043675c0c21a85947883f20ba9f9aa Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:20:14 +0300 Subject: [PATCH 55/64] 10.17 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 5e438d56..d5e0722c 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.16 + image: sovryn/fed-tokenbridge:10.17 ports: - 4444:30303 volumes: From 5abb35e85c23a44d55dfa21130abdf1aee340441 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:37:28 +0300 Subject: [PATCH 56/64] Correct "other peer" amount --- federator-env/mainnet-BSC-RSK/config.js | 2 +- federator-env/mainnet-ETH-RSK/config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/federator-env/mainnet-BSC-RSK/config.js b/federator-env/mainnet-BSC-RSK/config.js index 9dfca788..0d4f7a45 100644 --- a/federator-env/mainnet-BSC-RSK/config.js +++ b/federator-env/mainnet-BSC-RSK/config.js @@ -13,7 +13,7 @@ module.exports = { confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), storagePath: './db', - minimumPeerAmount: 3, + minimumPeerAmount: 2, port: 30303, federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', diff --git a/federator-env/mainnet-ETH-RSK/config.js b/federator-env/mainnet-ETH-RSK/config.js index 2221eadf..762fdb1a 100644 --- a/federator-env/mainnet-ETH-RSK/config.js +++ b/federator-env/mainnet-ETH-RSK/config.js @@ -26,7 +26,7 @@ module.exports = { confirmations: 120, // Number of blocks before processing it, if working with ganache set as 0 privateKey: fs.readFileSync(`${__dirname}/federator.key`, 'utf8').trim(), storagePath: './db', - minimumPeerAmount: 3, + minimumPeerAmount: 2, port: 30303, federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', From 68e0860b23ca7458d06dcd0d840fe71c44207f73 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:37:46 +0300 Subject: [PATCH 57/64] Handle other peer amount correctly, more logging --- sovryn-token-bridge/federator/src/lib/p2p.js | 3 ++- sovryn-token-bridge/federator/src/main.js | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/sovryn-token-bridge/federator/src/lib/p2p.js b/sovryn-token-bridge/federator/src/lib/p2p.js index c146284f..c0dc945b 100644 --- a/sovryn-token-bridge/federator/src/lib/p2p.js +++ b/sovryn-token-bridge/federator/src/lib/p2p.js @@ -86,7 +86,8 @@ class P2p { } getPeerAmount() { - return this.getNodeIds().length; + // This returns the peer amount without this node + return this.getNodeIds().length - 1; } isLeader() { diff --git a/sovryn-token-bridge/federator/src/main.js b/sovryn-token-bridge/federator/src/main.js index 519a9c1d..64abd126 100644 --- a/sovryn-token-bridge/federator/src/main.js +++ b/sovryn-token-bridge/federator/src/main.js @@ -193,14 +193,22 @@ async function startServices() { } async function run() { - const numPeers = p2pNode.getPeerAmount(); - if (numPeers < config.minimumPeerAmount) { - logger.info(`Waiting for enough peers (now ${numPeers})`); + const numOtherPeers = p2pNode.getPeerAmount(); + let nodeId = ''; + let leaderId = ''; + try { + nodeId = p2pNode.net.networkId; + leaderId = p2pNode.getLeaderId(); + } catch (e) { + // just ignore now, this is only for debugging + } + if (numOtherPeers < config.minimumPeerAmount) { + logger.info(`Waiting for enough peers (now ${numOtherPeers}. node ${nodeId}, leader ${leaderId})`); return; } if (p2pNode.isLeader()) { - console.log(`This node is a leader -- handling iteration. (${numPeers} peers)`); + console.log(`This node is a leader -- handling iteration. (${numOtherPeers} other peers, node ${nodeId}, leader ${leaderId})`); try { console.log('before mainfed'); await mainFederator.run(); @@ -211,7 +219,7 @@ async function run() { process.exit(); } } else { - console.log(`Not leader, just chilling. (${numPeers} peers)`) + console.log(`Not leader, just chilling. (${numOtherPeers} other peers, node ${nodeId}, leader ${leaderId})`) } } From 2cf8d9705010138d3d3db7e3783ef9d272d26fdf Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:38:24 +0300 Subject: [PATCH 58/64] 10.18 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index d5e0722c..7ced23d4 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.17 + image: sovryn/fed-tokenbridge:10.18 ports: - 4444:30303 volumes: From 8aaaaf85d45ed4521599fe565437583b93099943 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:41:40 +0300 Subject: [PATCH 59/64] Fix reset script --- reset.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/reset.sh b/reset.sh index 05f71c31..ca3eed4b 100755 --- a/reset.sh +++ b/reset.sh @@ -5,6 +5,5 @@ find federator-env/testnet-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -d find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete rm -rf federator.log git fetch -git reset --hard origin/master -git checkout signatures -git pull +git reset --hard head +git checkout origin/signatures From 5dd12c280643cc7052514ba7fc35d056fa62caae Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:43:12 +0300 Subject: [PATCH 60/64] Test --- reset.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reset.sh b/reset.sh index ca3eed4b..2a27aded 100755 --- a/reset.sh +++ b/reset.sh @@ -6,4 +6,4 @@ find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -d rm -rf federator.log git fetch git reset --hard head -git checkout origin/signatures +git checkout origin/signatures # test From 07cda0ef83553775feda308e4e8a19e0bc277969 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 14:52:28 +0300 Subject: [PATCH 61/64] FIX IT --- reset.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reset.sh b/reset.sh index 2a27aded..356f3aa6 100755 --- a/reset.sh +++ b/reset.sh @@ -5,5 +5,5 @@ find federator-env/testnet-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -d find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete rm -rf federator.log git fetch -git reset --hard head +git reset --hard HEAD git checkout origin/signatures # test From 3040cef19d3481ac4d74a4b3ca6e9741ae79ac6d Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 15:09:17 +0300 Subject: [PATCH 62/64] Update config --- federator-env/mainnet-BSC-RSK/config.js | 2 ++ federator-env/mainnet-ETH-RSK/config.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/federator-env/mainnet-BSC-RSK/config.js b/federator-env/mainnet-BSC-RSK/config.js index 0d4f7a45..429f8bca 100644 --- a/federator-env/mainnet-BSC-RSK/config.js +++ b/federator-env/mainnet-BSC-RSK/config.js @@ -15,6 +15,8 @@ module.exports = { storagePath: './db', minimumPeerAmount: 2, port: 30303, + signaturesTTL: 24 * 60 * 60, // In seconds + signatureRequestTimeoutMs: 2 * 60 * 1000, // In milliseconds federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', telegramBot: { diff --git a/federator-env/mainnet-ETH-RSK/config.js b/federator-env/mainnet-ETH-RSK/config.js index 762fdb1a..1ebfeb6a 100644 --- a/federator-env/mainnet-ETH-RSK/config.js +++ b/federator-env/mainnet-ETH-RSK/config.js @@ -28,6 +28,8 @@ module.exports = { storagePath: './db', minimumPeerAmount: 2, port: 30303, + signaturesTTL: 24 * 60 * 60, // In seconds + signatureRequestTimeoutMs: 2 * 60 * 1000, // In milliseconds federatorInstanceId: 'federatorInstanceId_replace_this', federatorAddress: 'federatorAddress_replace_this', etherscanApiKey: etherscanApiKey, From 2852a5412a862c1cb28435aee2ae4a5f137fb7c7 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 15:11:12 +0300 Subject: [PATCH 63/64] Reset script update --- reset.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reset.sh b/reset.sh index 356f3aa6..1095eb42 100755 --- a/reset.sh +++ b/reset.sh @@ -4,6 +4,6 @@ find federator-env/testnet-BSC-RSK/db/. -type f -not -name 'failingTxIds.txt' -d find federator-env/testnet-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete find federator-env/rinkeby-ETH-RSK/db/. -type f -not -name 'failingTxIds.txt' -delete rm -rf federator.log -git fetch git reset --hard HEAD +git fetch git checkout origin/signatures # test From 89083fe09d09e1e9a8414319ce4c3421b39cf221 Mon Sep 17 00:00:00 2001 From: Rainer Koirikivi Date: Wed, 7 Sep 2022 15:17:17 +0300 Subject: [PATCH 64/64] 10.19 --- docker-compose-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml index 7ced23d4..79d31f32 100644 --- a/docker-compose-prod.yml +++ b/docker-compose-prod.yml @@ -1,7 +1,7 @@ version: "3" services: federation: - image: sovryn/fed-tokenbridge:10.18 + image: sovryn/fed-tokenbridge:10.19 ports: - 4444:30303 volumes: