Last active
May 19, 2023 14:57
-
-
Save dcolley/9518c1c62f4b8d73d4a451965f26e476 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const { spawn } = require('child_process'); | |
const split2 = require('split2'); | |
const moment = require('moment'); | |
const TIMEOUT = 300 * 1000; // nn seconds, in milliseconds | |
const ECHOLOG = false; | |
// DEBUG: minumum is 'info', we need info to see log messages! | |
const DEBUG = '-linfo' | |
// const DEBUG = '-lsync=debug,gossip=debug,peerset=debug,sub-libp2p=info' // '-ldebug' | |
// const DEBUG = '-ldebug' // VERY verbose, kills the terminal | |
DATEFORMAT = 'YYYY-MM-DD HH:mm:ss'; // '2023-05-19 13:34:09 |' | |
let activeMembers = [ | |
// 'amforc', | |
// 'dwellir', | |
// 'metaspan', | |
// 'gatotech', | |
// 'helikon', | |
// 'polkadotters', | |
'stakeplus', | |
// 'turboflakes', | |
] | |
let relayChains = { | |
polkadot: 'wss://rpc.ibp.network/polkadot', // 'ws://192.168.1.92:30325', | |
kusama: 'wss://rpc.ibp.network/kusama', // 'ws://192.168.1.92:40425', | |
westend: 'wss://rpc.ibp.network/westend', // 'ws://192.168.1.92:32015' | |
} | |
let chains = ['polkadot', 'kusama', 'westend'] | |
let paraChains = { | |
'statemint': 'polkadot', | |
'collectives-polkadot': 'polkadot', | |
// 'bridge-hub-polkadot': 'polkadot', // not formal yet | |
'statemine': 'kusama', | |
// 'collectives-kusama': 'kusama', | |
'bridge-hub-kusama': 'kusama', | |
'westmint': 'westend', | |
'collectives-westend': 'westend', | |
// 'bridge-hub-westend': 'westend', | |
// 'encointer-polkadot': 'polkadot', | |
'encointer-kusama': 'kusama', | |
// 'encointer-westend': 'westend', | |
} | |
let baseDir = '/home/derek/crypto' | |
let commands = { | |
polkadot: { | |
exec: `${baseDir}/paritytech/polkadot/target/release/polkadot`, | |
// params: '--chain %CHAIN% --tmp --name IBP_Bootnode_Test --reserved-only --reserved-nodes %ENDPOINT% --no-mdns --no-hardware-benchmarks' | |
params: `${DEBUG} --chain %CHAIN% --tmp --name IBP_Bootnode_Test --bootnodes %ENDPOINT% --no-mdns --no-hardware-benchmarks` | |
}, | |
// kusama: '/path/to/polkadot', | |
// westend: '/path/to/polkadot', | |
parachain: { | |
exec: `${baseDir}/paritytech/cumulus/target/release/polkadot-parachain`, | |
// params: '--chain %CHAIN% --tmp --reserved-only --reserved-nodes %ENDPOINT% --no-mdns --no-hardware-benchmarks --relay-chain-rpc-urls %RELAYCHAIN%' | |
params: `${DEBUG} --chain %CHAIN% --tmp --name IBP_Bootnode_Test --bootnodes %ENDPOINT% --no-mdns --no-hardware-benchmarks --relay-chain-rpc-urls %RELAYCHAIN%` | |
}, | |
encointer: { | |
exec: `${baseDir}/encointer/encointer-parachain/target/release/encointer-collator`, | |
// params: '--chain encointer-kusama --tmp --reserved-only --reserved-nodes %ENDPOINT% --relay-chain-rpc-urls %RELAYCHAIN%' | |
params: `${DEBUG} --chain encointer-kusama --name IBP_Bootnode_Test --tmp --bootnodes %ENDPOINT% --no-mdns --no-hardware-benchmarks --relay-chain-rpc-urls %RELAYCHAIN%` | |
}, | |
} | |
let bootNodes = { | |
polkadot: { | |
commandId: 'polkadot', | |
members: { | |
amforc: ['/dns/polkadot.bootnode.amforc.com/tcp/30333/p2p/12D3KooWAsuCEVCzUVUrtib8W82Yne3jgVGhQZN3hizko5FTnDg3'], | |
dwellir: ['/dns/polkadot-boot.dwellir.com/tcp/30334/ws/p2p/12D3KooWKvdDyRKqUfSAaUCbYiLwKY8uK3wDWpCuy2FiDLbkPTDJ'], | |
gatotech: ['/dns/dot-bootnode-cr.gatotech.network/tcp/31310/p2p/12D3KooWK4E16jKk9nRhvC4RfrDVgcZzExg8Q3Q2G7ABUUitks1w'], | |
helikon: ['/dns/boot-node.helikon.io/tcp/7070/p2p/12D3KooWS9ZcvRxyzrSf6p63QfTCWs12nLoNKhGux865crgxVA4H'], | |
metaspan: [ | |
'/dns/boot-polkadot.metaspan.io/tcp/13012/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF', | |
// '/dns/boot-polkadot.metaspan.io/tcp/13015/ws/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF', // TODO, add to bootnodes | |
'/dns/boot-polkadot.metaspan.io/tcp/13016/wss/p2p/12D3KooWRjHFApinuqSBjoaDjQHvxwubQSpEVy5hrgC9Smvh92WF', // TODO, add to bootnodes | |
], | |
polkadotters: ['/dns/polkadot-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWPAVUgBaBk6n8SztLrMk8ESByncbAfRKUdxY1nygb9zG3'], | |
stakeplus: ['/dns/boot.stake.plus/tcp/30333/p2p/12D3KooWKT4ZHNxXH4icMjdrv7EwWBkfbz5duxE5sdJKKeWFYi5n'], | |
turboflakes: ['/dns/polkadot-bootnode.turboflakes.io/tcp/30300/p2p/12D3KooWHJBMZgt7ymAdTRtadPcGXpJw79vBGe8z53r9JMkZW7Ha'], | |
} | |
}, | |
kusama: { | |
commandId: 'polkadot', | |
members: { | |
amforc: ['/dns/kusama.bootnode.amforc.com/tcp/30333/p2p/12D3KooWLx6nsj6Fpd8biP1VDyuCUjazvRiGWyBam8PsqRJkbUb9'], | |
dwellir: ['/dns/kusama-boot.dwellir.com/tcp/30333/ws/p2p/12D3KooWFj2ndawdYyk2spc42Y2arYwb2TUoHLHFAsKuHRzWXwoJ'], | |
gatotech: ['/dns/ksm-bootnode-cr.gatotech.network/tcp/31320/p2p/12D3KooWRNZXf99BfzQDE1C8YhuBbuy7Sj18UEf7FNpD8egbURYD'], | |
helikon: ['/dns/boot-node.helikon.io/tcp/7060/p2p/12D3KooWL4KPqfAsPE2aY1g5Zo1CxsDwcdJ7mmAghK7cg6M2fdbD'], | |
metaspan: [ | |
'/dns/boot-kusama.metaspan.io/tcp/23012/p2p/12D3KooWE1tq9ZL9AAxMiUBBqy1ENmh5pwfWabnoBPMo8gFPXhn6', | |
'/dns/boot-kusama.metaspan.io/tcp/23016/wss/p2p/12D3KooWE1tq9ZL9AAxMiUBBqy1ENmh5pwfWabnoBPMo8gFPXhn6' | |
], | |
polkadotters: ['/dns/kusama-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWHB5rTeNkQdXNJ9ynvGz8Lpnmsctt7Tvp7mrYv6bcwbPG'], | |
stakeplus: ['/dns/boot.stake.plus/tcp/31333/p2p/12D3KooWLa1UyG5xLPds2GbiRBCTJjpsVwRWHWN7Dff14yiNJRpR'], | |
turboflakes: ['/dns/kusama-bootnode.turboflakes.io/tcp/30305/p2p/12D3KooWR6cMhCYRhbJdqYZfzWZT6bcck3unpRLk8GBQGmHBgPwu'] | |
} | |
}, | |
westend: { | |
commandId: 'polkadot', | |
members: { | |
amforc: ['/dns/westend.bootnode.amforc.com/tcp/30333/p2p/12D3KooWJ5y9ZgVepBQNW4aabrxgmnrApdVnscqgKWiUu4BNJbC8'], | |
dwellir: [], | |
gatotech: ['/dns/wnd-bootnode-cr.gatotech.network/tcp/31330/p2p/12D3KooWQGR1vUhoy6mvQorFp3bZFn6NNezhQZ6NWnVV7tpFgoPd'], | |
helikon: ['/dns/boot-node.helikon.io/tcp/7080/p2p/12D3KooWRFDPyT8vA8mLzh6dJoyujn4QNjeqi6Ch79eSMz9beKXC'], | |
metaspan: [ | |
'/dns/boot-westend.metaspan.io/tcp/33012/p2p/12D3KooWNTau7iG4G9cUJSwwt2QJP1W88pUf2SgqsHjRU2RL8pfa', | |
'/dns/boot-westend.metaspan.io/tcp/33016/wss/p2p/12D3KooWNTau7iG4G9cUJSwwt2QJP1W88pUf2SgqsHjRU2RL8pfa' | |
], | |
polkadotters: ['/dns/westend-bootnode.polkadotters.com/tcp/30333/p2p/12D3KooWHPHb64jXMtSRJDrYFATWeLnvChL8NtWVttY67DCH1eC5'], | |
stakeplus: ['/dns/boot.stake.plus/tcp/32333/p2p/12D3KooWK8fjVoSvMq5copQYMsdYreSGPGgcMbGMgbMDPfpf3sm7'], | |
turboflakes: ['/dns/westend-bootnode.turboflakes.io/tcp/30310/p2p/12D3KooWJvPDCZmReU46ghpCMJCPVUvUCav4WQdKtXQhZgJdH6tZ'] | |
} | |
}, | |
'bridge-hub-kusama' : { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/bridge-hub-kusama.bootnode.amforc.com/tcp/30337/p2p/12D3KooWGNeQJ5rXnEJkVUuQqwHd8aV5GkTAheaRoCaK8ZwW94id", | |
"/dns/bridge-hub-kusama.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWGNeQJ5rXnEJkVUuQqwHd8aV5GkTAheaRoCaK8ZwW94id" | |
], | |
dwellir: [], // not p4 yet | |
gatotech: [ | |
"/dns/boot-ksm-bridgehub-cr.gatotech.network/tcp/31327/p2p/12D3KooWFQFmg8UqAYLDNc2onySB6o5LLvpbx3eXZVqz9YFxAmXs", | |
"/dns/boot-ksm-bridgehub-cr.gatotech.network/tcp/31427/ws/p2p/12D3KooWFQFmg8UqAYLDNc2onySB6o5LLvpbx3eXZVqz9YFxAmXs", | |
"/dns/boot-ksm-bridgehub-cr.gatotech.network/tcp/31527/wss/p2p/12D3KooWFQFmg8UqAYLDNc2onySB6o5LLvpbx3eXZVqz9YFxAmXs" | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10250/p2p/12D3KooWDJLkhqQdXcVKWX7CqJHnpAY6PzrPc4ZG2CUWnARbmguy", | |
"/dns/boot-node.helikon.io/tcp/10252/wss/p2p/12D3KooWDJLkhqQdXcVKWX7CqJHnpAY6PzrPc4ZG2CUWnARbmguy" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/26032/p2p/12D3KooWKfuSaZrLNz43PDgM4inMALXRHTSh2WBuqQtZRq8zmT1Z", | |
"/dns/boot.metaspan.io/tcp/26036/wss/p2p/12D3KooWKfuSaZrLNz43PDgM4inMALXRHTSh2WBuqQtZRq8zmT1Z", | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/41333/p2p/12D3KooWBzbs2jsXjG5dipktGPKaUm9XWvkmeJFsEAGkVt946Aa7", | |
"/dns/boot.stake.plus/tcp/41334/wss/p2p/12D3KooWBzbs2jsXjG5dipktGPKaUm9XWvkmeJFsEAGkVt946Aa7" | |
], | |
turboflakes: [ | |
"/dns/bridge-hub-kusama-bootnode.turboflakes.io/tcp/30615/p2p/12D3KooWE3dJXbwA5SQqbDNxHfj7BXJRcy2KiXWjJY4VUMKoa7S2", | |
"/dns/bridge-hub-kusama-bootnode.turboflakes.io/tcp/30715/wss/p2p/12D3KooWE3dJXbwA5SQqbDNxHfj7BXJRcy2KiXWjJY4VUMKoa7S2", | |
], | |
} | |
}, | |
'bridge-hub-polkadot' : { | |
commandId: 'parachain', | |
members: {} | |
}, | |
'bridge-hub-westend' : { | |
commandId: 'parachain', | |
members: {} | |
}, | |
'collectives-polkadot': { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/collectives-polkadot.bootnode.amforc.com/tcp/30335/p2p/12D3KooWQeAjDnGkrPe5vtpfnB6ydZfWyMxyrXLkBFmA6o4k9aiU", | |
"/dns/collectives-polkadot.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWQeAjDnGkrPe5vtpfnB6ydZfWyMxyrXLkBFmA6o4k9aiU" | |
], | |
dwellir: [], | |
gatotech: [ | |
"/dns/boot-dot-collectives-cr.gatotech.network/tcp/31316/p2p/12D3KooWGZsa9tSeLQ1VeC996e1YsCPuyRYMipHQuXikPjcKcpVQ", | |
"/dns/boot-dot-collectives-cr.gatotech.network/tcp/31416/ws/p2p/12D3KooWGZsa9tSeLQ1VeC996e1YsCPuyRYMipHQuXikPjcKcpVQ", | |
"/dns/boot-dot-collectives-cr.gatotech.network/tcp/31516/wss/p2p/12D3KooWGZsa9tSeLQ1VeC996e1YsCPuyRYMipHQuXikPjcKcpVQ" | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10230/p2p/12D3KooWS8CBz4P5CBny9aBy2EQUvAExFo9PUVT57X8r3zWMFkXT", | |
"/dns/boot-node.helikon.io/tcp/10232/wss/p2p/12D3KooWS8CBz4P5CBny9aBy2EQUvAExFo9PUVT57X8r3zWMFkXT" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/16072/p2p/12D3KooWJWTTu2t2yg5bFRH6tjEpfzKwZir5R9JRRjQpgFPXdDfp", | |
"/dns/boot.metaspan.io/tcp/16076/wss/p2p/12D3KooWJWTTu2t2yg5bFRH6tjEpfzKwZir5R9JRRjQpgFPXdDfp", | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/38333/p2p/12D3KooWQoVsFCfgu21iu6kdtQsU9T6dPn1wsyLn1U34yPerR6zQ", | |
"/dns/boot.stake.plus/tcp/38334/wss/p2p/12D3KooWQoVsFCfgu21iu6kdtQsU9T6dPn1wsyLn1U34yPerR6zQ" | |
], | |
turboflakes: [ | |
"/dns/collectives-polkadot-bootnode.turboflakes.io/tcp/30605/p2p/12D3KooWPyzM7eX64J4aG8uRfSARakDVtiEtthEM8FUjrLWAg2sC", | |
"/dns/collectives-polkadot-bootnode.turboflakes.io/tcp/30705/wss/p2p/12D3KooWPyzM7eX64J4aG8uRfSARakDVtiEtthEM8FUjrLWAg2sC" | |
] | |
} | |
}, | |
'collectives-westend': { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/collectives-westend.bootnode.amforc.com/tcp/30340/p2p/12D3KooWERPzUhHau6o2XZRUi3tn7544rYiaHL418Nw5t8fYWP1F", | |
"/dns/collectives-westend.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWERPzUhHau6o2XZRUi3tn7544rYiaHL418Nw5t8fYWP1F" | |
], | |
dwellir: [], | |
gatotech: [ | |
"/dns/boot-wnd-collectives-cr.gatotech.network/tcp/31336/p2p/12D3KooWMedtdBGiSn7HLZusHwafXkZAdmWD18ciGQBfS4X1fv9K", | |
"/dns/boot-wnd-collectives-cr.gatotech.network/tcp/31436/ws/p2p/12D3KooWMedtdBGiSn7HLZusHwafXkZAdmWD18ciGQBfS4X1fv9K", | |
"/dns/boot-wnd-collectives-cr.gatotech.network/tcp/31536/wss/p2p/12D3KooWMedtdBGiSn7HLZusHwafXkZAdmWD18ciGQBfS4X1fv9K" | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10260/p2p/12D3KooWMzfnt29VAmrJHQcJU6Vfn4RsMbqPqgyWHqt9VTTAbSrL", | |
"/dns/boot-node.helikon.io/tcp/10262/wss/p2p/12D3KooWMzfnt29VAmrJHQcJU6Vfn4RsMbqPqgyWHqt9VTTAbSrL" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/36072/p2p/12D3KooWEf2QXWq5pAbFJLfbnexA7KYtRRDSPkqTP64n1KtdsdV2", | |
"/dns/boot.metaspan.io/tcp/36076/wss/p2p/12D3KooWEf2QXWq5pAbFJLfbnexA7KYtRRDSPkqTP64n1KtdsdV2", | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/38333/p2p/12D3KooWQoVsFCfgu21iu6kdtQsU9T6dPn1wsyLn1U34yPerR6zQ", | |
"/dns/boot.stake.plus/tcp/38334/wss/p2p/12D3KooWQoVsFCfgu21iu6kdtQsU9T6dPn1wsyLn1U34yPerR6zQ", | |
], | |
turboflakes: [ | |
"/dns/collectives-westend-bootnode.turboflakes.io/tcp/30700/wss/p2p/12D3KooWAe9CFXp6je3TAPQJE135KRemTLSqEqQBZMFwJontrThZ", | |
"/dns/collectives-westend-bootnode.turboflakes.io/tcp/30700/wss/p2p/12D3KooWAe9CFXp6je3TAPQJE135KRemTLSqEqQBZMFwJontrThZ" | |
], | |
} | |
}, | |
statemine: { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/statemine.bootnode.amforc.com/tcp/30336/p2p/12D3KooWHmSyrBWsc6fdpq8HtCFWasmLVLYGKWA2a78m4xAHKyBq", | |
"/dns/statemine.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWHmSyrBWsc6fdpq8HtCFWasmLVLYGKWA2a78m4xAHKyBq" | |
], | |
dwellir: [], | |
gatotech: [ | |
"/dns/boot-ksm-statemine-cr.gatotech.network/tcp/31325/p2p/12D3KooWRMUYeWMPkadDG8baX9j1e95fspfp8MhPGym5BQza7Fm5", | |
"/dns/boot-ksm-statemine-cr.gatotech.network/tcp/31425/ws/p2p/12D3KooWRMUYeWMPkadDG8baX9j1e95fspfp8MhPGym5BQza7Fm5", | |
"/dns/boot-ksm-statemine-cr.gatotech.network/tcp/31525/wss/p2p/12D3KooWRMUYeWMPkadDG8baX9j1e95fspfp8MhPGym5BQza7Fm5", | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10210/p2p/12D3KooWFXRQce3aMgZMn5SxvHtYH4PsR63TZLf8LrnBsEVTyzdr", | |
"/dns/boot-node.helikon.io/tcp/10212/wss/p2p/12D3KooWFXRQce3aMgZMn5SxvHtYH4PsR63TZLf8LrnBsEVTyzdr" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/26052/p2p/12D3KooW9z9hKqe3mqYAp5UJMhZiCqhkTHyiR43fegnGmTJ3JAba", | |
"/dns/boot.metaspan.io/tcp/26056/wss/p2p/12D3KooW9z9hKqe3mqYAp5UJMhZiCqhkTHyiR43fegnGmTJ3JAba", | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/34333/p2p/12D3KooWAzSSZ7jLqMw1WPomYEKCYANQaKemXQ8BKoFvNEvfmdqR", | |
"/dns/boot.stake.plus/tcp/34334/wss/p2p/12D3KooWAzSSZ7jLqMw1WPomYEKCYANQaKemXQ8BKoFvNEvfmdqR", | |
], | |
turboflakes: [ | |
"/dns/statemine-bootnode.turboflakes.io/tcp/30320/p2p/12D3KooWN2Qqvp5wWgjbBMpbqhKgvSibSHfomP5VWVD9VCn3VrV4", | |
"/dns/statemine-bootnode.turboflakes.io/tcp/30420/wss/p2p/12D3KooWN2Qqvp5wWgjbBMpbqhKgvSibSHfomP5VWVD9VCn3VrV4", | |
] | |
} | |
}, | |
statemint: { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/statemint.bootnode.amforc.com/tcp/30341/p2p/12D3KooWByohP9FXn7ao8syS167qJsbFdpa7fY2Y24xbKtt3r7Ls", | |
"/dns/statemint.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWByohP9FXn7ao8syS167qJsbFdpa7fY2Y24xbKtt3r7Ls" | |
], | |
dwellir: [], | |
gatotech: [ | |
"/dns/boot-dot-statemint-cr.gatotech.network/tcp/31315/p2p/12D3KooWKgwQfAeDoJARdtxFNNWfbYmcu6s4yUuSifnNoDgzHZgm", | |
"/dns/boot-dot-statemint-cr.gatotech.network/tcp/31415/ws/p2p/12D3KooWKgwQfAeDoJARdtxFNNWfbYmcu6s4yUuSifnNoDgzHZgm", | |
"/dns/boot-dot-statemint-cr.gatotech.network/tcp/31515/wss/p2p/12D3KooWKgwQfAeDoJARdtxFNNWfbYmcu6s4yUuSifnNoDgzHZgm" | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10220/p2p/12D3KooW9uybhguhDjVJc3U3kgZC3i8rWmAnSpbnJkmuR7C6ZsRW", | |
"/dns/boot-node.helikon.io/tcp/10222/wss/p2p/12D3KooW9uybhguhDjVJc3U3kgZC3i8rWmAnSpbnJkmuR7C6ZsRW" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/16052/p2p/12D3KooWLwiJuvqQUB4kYaSjLenFKH9dWZhGZ4qi7pSb3sUYU651", | |
"/dns/boot.metaspan.io/tcp/16056/wss/p2p/12D3KooWLwiJuvqQUB4kYaSjLenFKH9dWZhGZ4qi7pSb3sUYU651" | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/35333/p2p/12D3KooWFrQjYaPZSSLLxEVmoaHFcrF6VoY4awG4KRSLaqy3JCdQ", | |
"/dns/boot.stake.plus/tcp/35334/wss/p2p/12D3KooWFrQjYaPZSSLLxEVmoaHFcrF6VoY4awG4KRSLaqy3JCdQ" | |
], | |
turboflakes: [ | |
"/dns/statemint-bootnode.turboflakes.io/tcp/30315/p2p/12D3KooWL8CyLww3m3pRySQGGYGNJhWDMqko3j5xi67ckP7hDUvo", | |
"/dns/statemint-bootnode.turboflakes.io/tcp/30415/wss/p2p/12D3KooWL8CyLww3m3pRySQGGYGNJhWDMqko3j5xi67ckP7hDUvo" | |
], | |
} | |
}, | |
westmint: { | |
commandId: 'parachain', | |
members: { | |
amforc: [ | |
"/dns/westmint.bootnode.amforc.com/tcp/30339/p2p/12D3KooWNjKeaANaeZxBAPctmx8jugSYzuw4vnSCJmEDPB5mtRd6", | |
"/dns/westmint.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWNjKeaANaeZxBAPctmx8jugSYzuw4vnSCJmEDPB5mtRd6" | |
], | |
dwellir: [], | |
gatotech: [ | |
"/dns/boot-wnd-westmint-cr.gatotech.network/tcp/31335/p2p/12D3KooWMSW6hr8KcNBhGFN1bg8kYC76o67PnuDEbxRhxacW6dui", | |
"/dns/boot-wnd-westmint-cr.gatotech.network/tcp/31435/ws/p2p/12D3KooWMSW6hr8KcNBhGFN1bg8kYC76o67PnuDEbxRhxacW6dui", | |
"/dns/boot-wnd-westmint-cr.gatotech.network/tcp/31535/wss/p2p/12D3KooWMSW6hr8KcNBhGFN1bg8kYC76o67PnuDEbxRhxacW6dui" | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10200/p2p/12D3KooWMRY8wb7rMT81LLuivvsy6ahUxKHQgYJw4zm1hC1uYLxb", | |
"/dns/boot-node.helikon.io/tcp/10202/wss/p2p/12D3KooWMRY8wb7rMT81LLuivvsy6ahUxKHQgYJw4zm1hC1uYLxb" | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/36052/p2p/12D3KooWBCqfNb6Y39DXTr4UBWXyjuS3hcZM1qTbHhDXxF6HkAJJ", | |
"/dns/boot.metaspan.io/tcp/36056/wss/p2p/12D3KooWBCqfNb6Y39DXTr4UBWXyjuS3hcZM1qTbHhDXxF6HkAJJ", | |
// "/dns/boot.metaspan.io/tcp/36052/p2p/12D3KooWK1ZcWa4ydYGhgTywS6eLvFSefQrEm36dESp5gLWaEAaq", | |
// "/dns/boot.metaspan.io/tcp/36056/wss/p2p/12D3KooWK1ZcWa4ydYGhgTywS6eLvFSefQrEm36dESp5gLWaEAaq" | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/33333/p2p/12D3KooWNiB27rpXX7EYongoWWUeRKzLQxWGms6MQU2B9LX7Ztzo", | |
"/dns/boot.stake.plus/tcp/33334/wss/p2p/12D3KooWNiB27rpXX7EYongoWWUeRKzLQxWGms6MQU2B9LX7Ztzo" | |
], | |
turboflakes: [ | |
"/dns/westmint-bootnode.turboflakes.io/tcp/30325/p2p/12D3KooWHU4qqSyqKdbXdrCTMXUJxxueaZjqpqSaQqYiFPw6XqEx", | |
"/dns/westmint-bootnode.turboflakes.io/tcp/30425/wss/p2p/12D3KooWHU4qqSyqKdbXdrCTMXUJxxueaZjqpqSaQqYiFPw6XqEx" | |
], | |
} | |
}, | |
'encointer-kusama': { | |
commandId: 'encointer', | |
members: { | |
amforc: [ | |
"/dns/encointer-kusama.bootnode.amforc.com/tcp/30338/p2p/12D3KooWDBr4sfp9R7t7tA1LAkNzADcGVXW9rX1BryES47mhUMEz", | |
// "/dns/encointer-kusama.bootnode.amforc.com/tcp/30333/wss/p2p/12D3KooWDBr4sfp9R7t7tA1LAkNzADcGVXW9rX1BryES47mhUMEz" // wss not supported in encointer yet | |
], | |
gatotech: [ | |
"/dns/boot-ksm-encointer-cr.gatotech.network/tcp/31326/p2p/12D3KooWByfCkLUzuMBJhVqb5SZxTHgGdwPzbJEk3t7gxDUakdi7", | |
"/dns/boot-ksm-encointer-cr.gatotech.network/tcp/31426/ws/p2p/12D3KooWByfCkLUzuMBJhVqb5SZxTHgGdwPzbJEk3t7gxDUakdi7", | |
// "/dns/boot-ksm-encointer-cr.gatotech.network/tcp/31526/wss/p2p/12D3KooWByfCkLUzuMBJhVqb5SZxTHgGdwPzbJEk3t7gxDUakdi7" // wss not supported in encointer yet | |
], | |
helikon: [ | |
"/dns/boot-node.helikon.io/tcp/10240/p2p/12D3KooWA911RYTs2DdsA1EkxviUo12DdAdJ9Zsaf8S5PpQzeRGA", | |
// "/dns/boot-node.helikon.io/tcp/10242/wss/p2p/12D3KooWA911RYTs2DdsA1EkxviUo12DdAdJ9Zsaf8S5PpQzeRGA" // wss not supported in encointer yet | |
], | |
metaspan: [ | |
"/dns/boot.metaspan.io/tcp/26072/p2p/12D3KooWPtjFu99oadjbtbK33iir1jdYVdkEEs3GYV6nswJzwx8W", | |
// "/dns/boot.metaspan.io/tcp/26076/wss/p2p/12D3KooWPtjFu99oadjbtbK33iir1jdYVdkEEs3GYV6nswJzwx8W" // wss not supported in encointer yet | |
], | |
stakeplus: [ | |
"/dns/boot.stake.plus/tcp/36333/p2p/12D3KooWNFFdJFV21haDiSdPJ1EnGmv6pa2TgB81Cvu7Y96hjTAu", | |
// "/dns/boot.stake.plus/tcp/36334/wss/p2p/12D3KooWNFFdJFV21haDiSdPJ1EnGmv6pa2TgB81Cvu7Y96hjTAu" // wss not supported in encointer yet | |
], | |
turboflakes: [ | |
"/dns/encointer-kusama-bootnode.turboflakes.io/tcp/30625/p2p/12D3KooWCXoAM2ucUEhMhLkZVWJ6hMCHqV2K4sjVM27t5ZGv4XU6", | |
// "/dns/encointer-kusama-bootnode.turboflakes.io/tcp/30725/wss/p2p/12D3KooWCXoAM2ucUEhMhLkZVWJ6hMCHqV2K4sjVM27t5ZGv4XU6" // wss not supported in encointer yet | |
] | |
} | |
}, | |
'encointer-polkadot': { | |
commandId: 'encointer', | |
members: { | |
} | |
}, | |
'encointer-westend': { | |
commandId: 'encointer', | |
members: { | |
} | |
} | |
} | |
function ts() { | |
return moment().format(`${DATEFORMAT} |`); | |
} | |
function testChain({ chain, commandId, memberId, endpoint }) { | |
return new Promise((resolve, reject) => { | |
const command = commands[commandId] | |
console.debug(ts(), '🧪 Starting test:', memberId, chain, commandId); | |
const relaychain = relayChains[chain]; | |
const args = command.params | |
.replace('%CHAIN%', chain) | |
.replace('%ENDPOINT%', endpoint) | |
.split(' '); | |
// args.push('2>&1') | |
// console.log('Starting node:', memberId, command.exec, args); | |
const polkadotProcess = spawn(command.exec, args); | |
polkadotProcess.on('error', (err) => { | |
console.error(ts(), '🔴 ERROR', err); | |
reject(err); | |
}) | |
var maxPeers = 0; | |
var start = moment(); | |
var end = moment(); | |
function matchData(data) { | |
const log = data.toString(); | |
if(ECHOLOG) console.log(log); // already includes timestamp | |
// match on number of peers and syncing | |
// 2023-05-16 10:11:43 ⚙️ Syncing, target=#15545644 (1 peers), best: #2698 (0x8c62…9f3f), finalized #2560 (0x81f3…fc71), ⬇ 210.7kiB/s ⬆ 2.7kiB/s | |
const match = log.match(/\((\d+) peers\)/); | |
const numPeers = match ? parseInt(match[1]) : 0; | |
if (numPeers > maxPeers) { | |
maxPeers = numPeers; | |
end = moment(); | |
console.log(ts(), `⏳ (${maxPeers} peers)`, 'after', end.diff(start, 'seconds'), 'seconds'); | |
} | |
if (log.includes('Syncing') && numPeers > 1) { | |
clearTimeout(timeout); | |
polkadotProcess.kill(); | |
syncing = false; | |
gotPeers = false; | |
end = moment(); | |
console.log(ts(), '🏁 test complete after', end.diff(start, 'seconds'), 'seconds'); | |
resolve(); | |
} | |
} | |
const timeout = setTimeout(() => { | |
polkadotProcess.kill(); | |
end = moment(); | |
console.log(ts(), '🏁 test not complete after', end.diff(start, 'seconds'), 'seconds'); | |
reject(new Error('Timeout')); | |
}, TIMEOUT); | |
polkadotProcess.stderr.pipe(split2()).on('data', matchData); | |
polkadotProcess.stdout.pipe(split2()).on('data', matchData); | |
polkadotProcess.on('error', (err) => { | |
clearTimeout(timeout); | |
reject(err); | |
}); | |
}); | |
} | |
async function testParaChain({ paraChainId, commandId, memberId, endpoint, relayChain }) { | |
return new Promise((resolve, reject) => { | |
const command = commands[commandId] | |
console.debug(ts(), '🧪 Starting test for:', memberId, paraChainId, commandId); | |
const args = command.params | |
.replace('%CHAIN%', paraChainId) | |
.replace('%ENDPOINT%', endpoint) | |
.replace('%RELAYCHAIN%', relayChain) | |
.split(' '); | |
// args.push('2>&1') | |
// console.log('Starting node:', memberId, command.exec, args); | |
const polkadotProcess = spawn(command.exec, args); | |
polkadotProcess.on('error', (err) => { | |
console.error(ts(), '🔴 ERROR', err); | |
reject(err); | |
}) | |
const logs = []; | |
var maxPeers = 0; | |
var start = moment(); | |
var end = moment(); | |
function matchData(data) { | |
const log = data.toString(); | |
if (ECHOLOG) console.log(log); // already includes timestamp | |
logs.push(log); | |
// match on number of peers and syncing | |
// 2023-05-16 10:11:43 ⚙️ Syncing, target=#15545644 (1 peers), best: #2698 (0x8c62…9f3f), finalized #2560 (0x81f3…fc71), ⬇ 210.7kiB/s ⬆ 2.7kiB/s | |
const match = log.match(/\((\d+) peers\)/); | |
const numPeers = match ? parseInt(match[1]) : 0; | |
if (numPeers > maxPeers) { | |
maxPeers = numPeers; | |
end = moment(); | |
console.log(ts(), `⏳ (${maxPeers} peers)`, 'after', end.diff(start, 'seconds'), 'seconds') | |
} | |
if (log.includes('[Parachain]') && log.includes('Syncing') && numPeers > 1) { | |
clearTimeout(timeout); | |
polkadotProcess.kill(); | |
syncing = false | |
gotPeers = false | |
end = moment(); | |
console.log(ts(), '🏁 test complete after', end.diff(start, 'seconds'), 'seconds'); | |
resolve(); | |
} | |
} | |
const timeout = setTimeout(() => { | |
polkadotProcess.kill(); | |
// logs.slice(-10).forEach(log => console.error(log)); | |
end = moment(); | |
console.log(ts(), '🏁 test NOT complete after', end.diff(start, 'seconds'), 'seconds'); | |
console.debug('-'.repeat(80)); | |
console.debug(command.exec, args.join(' ')); | |
console.debug('-'.repeat(80)); | |
reject(new Error('Timeout')); | |
}, TIMEOUT); | |
polkadotProcess.stderr.pipe(split2()).on('data', matchData); | |
polkadotProcess.stdout.pipe(split2()).on('data', matchData); | |
polkadotProcess.on('error', (err) => { | |
clearTimeout(timeout); | |
reject(err); | |
}); | |
}); | |
} | |
async function testChains() { | |
for (let i = 0; i < chains.length; i++) { | |
const chain = chains[i] | |
console.log(ts(), '🔗 chain', chain) | |
const test = bootNodes[chain] | |
// console.log('test', test) | |
const { commandId, members } = test | |
const memberIds = Object.keys(members) | |
// console.log('memberIds', memberIds) | |
for (let j = 0; j < memberIds.length; j++) { | |
const memberId = memberIds[j] | |
if (!activeMembers.includes(memberId)) continue | |
const endpoints = members[memberId] | |
for (let k = 0; k < endpoints.length; k++) { | |
const endpoint = endpoints[k] | |
const node = { chain, commandId, memberId, endpoint } | |
// console.log(node) | |
try { | |
await testChain(node) | |
console.log(ts(), '✅', memberId, chain, endpoint) | |
} catch (err) { | |
console.log(ts(), '❌', memberId, chain, endpoint) | |
} | |
} | |
} | |
} | |
} | |
async function testParaChains() { | |
const paraChainIds = Object.keys(paraChains) | |
for (let i = 0; i < paraChainIds.length; i++) { | |
const paraChainId = paraChainIds[i] | |
const chainId = paraChains[paraChainId] | |
const relayChain = relayChains[chainId] | |
console.log(ts(), '🔗 parachain', paraChainId, chainId, relayChain) | |
const test = bootNodes[paraChainId] | |
// console.log('test', test) | |
const { commandId, members } = test | |
const memberIds = Object.keys(members) | |
// console.log('memberIds', memberIds) | |
for (let j = 0; j < memberIds.length; j++) { | |
const memberId = memberIds[j] | |
if (!activeMembers.includes(memberId)) continue | |
const endpoints = members[memberId] | |
for (let k = 0; k < endpoints.length; k++) { | |
const endpoint = endpoints[k] | |
const node = { paraChainId, commandId, memberId, endpoint, relayChain } | |
// console.log(node) | |
try { | |
await testParaChain(node) | |
console.log(ts(), '✅', memberId, paraChainId, endpoint) | |
} catch (err) { | |
console.log(ts(), '❌', memberId, paraChainId, endpoint) | |
} | |
} | |
} | |
} | |
} | |
async function testAll() { | |
// await testChains() | |
await testParaChains() | |
} | |
testAll() |
Without --relay-chain-rpc-urls
the local node will just start syncing a relay chain from the bootnodes available in the network, which is fine for the test against the parachain we are trying to make here without relying on one/two pre-selected relay chain nodes.
Thanks, I'll test it and report back
The regex for parachains need revision, we should look for [Parachain]
and (1 peers)
in a single line
log example:
2023-05-17 19:29:27 [Relaychain] Received msg before first active leaves update. This is not expected - message will be dropped. msg=ActiveDisputes(Sender { complete: false })
2023-05-17 19:29:27 [Relaychain] error=Sender(AskActiveDisputesCanceled) ctx="on_message"
2023-05-17 19:29:31 [Relaychain] ⚙️ Syncing, target=#15565012 (38 peers), best: #4531 (0x845f…3b3b), finalized #4096 (0x13e9…9e70), ⬇ 535.3kiB/s ⬆ 60.8kiB/s
2023-05-17 19:29:31 [Parachain] ⚙️ Syncing, target=#3815992 (1 peers), best: #2112 (0xe97a…3f46), finalized #0 (0x68d5…de2f), ⬇ 885.3kiB/s ⬆ 1.8kiB/s
2023-05-17 19:29:36 [Relaychain] ⚙️ Syncing 936.6 bps, target=#15565012 (40 peers), best: #9214 (0xbd1f…444a), finalized #8704 (0xd5bc…1949), ⬇ 363.4kiB/s ⬆ 25.1kiB/s
2023-05-17 19:29:36 [Parachain] ⚙️ Syncing 486.4 bps, target=#3815992 (1 peers), best: #4544 (0x31d9…6903), finalized #0 (0x68d5…de2f), ⬇ 1018.9kiB/s ⬆ 1.6kiB/s
I'll update this.
for info: we do need the --relay-chain-rpc-urls
flag. Without this the test starts with an empty relay-chain
2023-05-18 07:36:10 [Relaychain] 🔍 Discovered new external address for our node: /ip4/31.22.13.147/tcp/30334/ws/p2p/12D3KooWEqcvYHsr4ofdNGoXBwLSFHj2dtvgm3Vip5VxMtbJZdA1
2023-05-18 07:36:14 [Relaychain] ⚙️ Syncing, target=#15572880 (40 peers), best: #6434 (0xafb1…a243), finalized #6144 (0xeced…4008), ⬇ 665.7kiB/s ⬆ 74.8kiB/s
2023-05-18 07:36:14 [Parachain] 💤 Idle (0 peers), best: #0 (0x68d5…de2f), finalized #0 (0x68d5…de2f), ⬇ 0 ⬆ 0
2023-05-18 07:36:19 [Relaychain] ⚙️ Syncing 1217.4 bps, target=#15572880 (40 peers), best: #12521 (0x6ab9…5064), finalized #12288 (0x006d…48ea), ⬇ 505.2kiB/s ⬆ 52.1kiB/s
2023-05-18 07:36:19 [Parachain] 💤 Idle (0 peers), best: #0 (0x68d5…de2f), finalized #0 (0x68d5…de2f), ⬇ 0 ⬆ 0
2023-05-18 07:36:24 [Relaychain] ⚙️ Syncing 1243.0 bps, target=#15572880 (40 peers), best: #18736 (0xdb2d…a32a), finalized #18432 (0x5ad4…58de), ⬇ 514.5kiB/s ⬆ 65.0kiB/s
2023-05-18 07:36:24 [Parachain] 💤 Idle (0 peers), best: #0 (0x68d5…de2f), finalized #0 (0x68d5…de2f), ⬇ 0 ⬆ 0
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
--tmp
is a shortcut for that, and will clean up as soon as the node is stopped.--relay-chain-rpc-urls
is used simply because we need a sync'd relaynode before the parachain can start. I would prefer not to have to sync a full relaychain just to test the parachain.