wormhole/cosmwasm/deployment/xpla/tools/deploy_xpla.js

337 lines
44 KiB
JavaScript

import "dotenv/config";
import {
LCDClient,
MnemonicKey,
MsgInstantiateContract,
MsgExecuteContract,
MsgStoreCode,
} from "@xpla/xpla.js";
import { readFileSync, readdirSync } from "fs";
import { Bech32, toHex } from "@cosmjs/encoding";
import { zeroPad } from "ethers/lib/utils.js";
const MNEMONIC = process.env.MNEMONIC
if (MNEMONIC === "") {
console.log("Please set MNEMONIC")
process.exit(1);
}
const NETWORK = process.env.NETWORK
let LCD_URL;
let CHAIN_ID;
if (NETWORK === "testnet") {
LCD_URL = "https://cube-lcd.xpla.dev";
CHAIN_ID = "cube_47-5";
} else if (NETWORK === "mainnet") {
LCD_URL = "https://dimension-lcd.xpla.dev";
CHAIN_ID = "dimension_37-1";
} else {
console.log("Please set NETWORK to either \"testnet\" or \"mainnet\".");
process.exit(1);
}
console.log("Deploying to " + NETWORK + " at URL " + LCD_URL + ", chainId " + CHAIN_ID + ".");
/*
NOTE: Only append to this array: keeping the ordering is crucial, as the
contracts must be imported in a deterministic order so their addresses remain
deterministic.
*/
const artifacts = [
"wormhole.wasm",
"token_bridge_terra_2.wasm",
"cw20_wrapped_2.wasm",
// Decided not to deploy these as of 10/10/2022:
// "shutdown_core_bridge_cosmwasm.wasm",
// "shutdown_token_bridge_cosmwasm.wasm",
];
/* Check that the artifact folder contains all the wasm files we expect and nothing else */
const actual_artifacts = readdirSync("../artifacts/").filter((a) =>
a.endsWith(".wasm")
);
const missing_artifacts = artifacts.filter(
(a) => !actual_artifacts.includes(a)
);
if (missing_artifacts.length) {
console.log(
"Error during cosmwasm deployment. The following files are expected to be in the artifacts folder:"
);
missing_artifacts.forEach((file) => console.log(` - ${file}`));
console.log(
"Hint: the deploy script needs to run after the contracts have been built."
);
console.log(
"External binary blobs need to be manually added in tools/Dockerfile."
);
process.exit(1);
}
const unexpected_artifacts = actual_artifacts.filter(
(a) => !artifacts.includes(a)
);
if (unexpected_artifacts.length) {
console.log(
"Error during cosmwasm deployment. The following files are not expected to be in the artifacts folder:"
);
unexpected_artifacts.forEach((file) => console.log(` - ${file}`));
console.log("Hint: you might need to modify tools/deploy.js");
process.exit(1);
}
/* Set up cosmwasm client & wallet */
const client = new LCDClient({
URL: LCD_URL,
chainID: CHAIN_ID,
});
const wallet = client.wallet(
new MnemonicKey({
mnemonic: MNEMONIC,
})
);
await wallet.sequence();
/* Deploy artifacts */
const codeIds = {};
for (const file of artifacts) {
const contract_bytes = readFileSync(`../artifacts/${file}`);
console.log(`Storing WASM: ${file} (${contract_bytes.length} bytes)`);
const store_code = new MsgStoreCode(
wallet.key.accAddress,
contract_bytes.toString("base64")
);
try {
const tx = await wallet.createAndSignTx({
msgs: [store_code],
memo: "",
});
const rs = await client.tx.broadcast(tx);
const ci = /"code_id","value":"([^"]+)/gm.exec(rs.raw_log)[1];
codeIds[file] = parseInt(ci);
} catch (e) {
console.log(`${e}`);
}
}
console.log(codeIds);
/* Instantiate contracts.
*
* We instantiate the core contracts here (i.e. wormhole itself and the bridge contracts).
* The wrapped asset contracts don't need to be instantiated here, because those
* will be instantiated by the on-chain bridge contracts on demand.
* */
// Governance constants defined by the Wormhole spec.
const govChain = 1;
const govAddress =
"0000000000000000000000000000000000000000000000000000000000000004";
async function instantiate(contract, inst_msg, label) {
var address;
await wallet
.createAndSignTx({
msgs: [
new MsgInstantiateContract(
wallet.key.accAddress,
wallet.key.accAddress,
codeIds[contract],
inst_msg,
undefined,
label
),
],
memo: "",
})
.then((tx) => client.tx.broadcast(tx))
.then((rs) => {
address = /"_contract_address","value":"([^"]+)/gm.exec(rs.raw_log)[1];
});
console.log(
`Instantiated ${contract} at ${address} (${convert_terra_address_to_hex(
address
)})`
);
return address;
}
// Instantiate contracts. NOTE: Only append at the end, the ordering must be
// deterministic for the addresses to work
const addresses = {};
addresses["wormhole.wasm"] = await instantiate(
"wormhole.wasm",
{
gov_chain: govChain,
gov_address: Buffer.from(govAddress, "hex").toString("base64"),
guardian_set_expirity: 86400,
initial_guardian_set: {
addresses: [
{
bytes: "WMw65cCXshPOPIGXnhuflXB0aqU=",
},
],
expiration_time: 0,
},
chain_id: 28,
fee_denom: "axpla",
},
"wormhole"
);
addresses["token_bridge_terra_2.wasm"] = await instantiate(
"token_bridge_terra_2.wasm",
{
gov_chain: govChain,
gov_address: Buffer.from(govAddress, "hex").toString("base64"),
wormhole_contract: addresses["wormhole.wasm"],
wrapped_asset_code_id: codeIds["cw20_wrapped_2.wasm"],
chain_id: 28,
native_denom: "axpla",
native_symbol: "XPLA",
native_decimals: 18,
},
"tokenBridge"
);
// Terra addresses are "human-readable", but for cross-chain registrations, we
// want the "canonical" version
function convert_terra_address_to_hex(human_addr) {
return "0x" + toHex(zeroPad(Bech32.decode(human_addr).data, 32));
}
process.exit(0)
///////////////////////////////////////////////////////////// Used the client to do all this ////////////////////////////////////
// First guardian set upgrade (#0 → #1)
const gs1 =
"010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d";
await wallet
.createAndSignTx({
msgs: [
new MsgExecuteContract(
wallet.key.accAddress,
addresses["wormhole.wasm"],
{
submit_v_a_a: {
vaa: Buffer.from(gs1, "hex").toString("base64"),
},
},
{ axpla: 1700000000000000000 }
),
],
memo: "",
})
.then((tx) => client.tx.broadcastBlock(tx))
.then((rs) => console.log(rs));
// Second guardian set upgrade (#1 → #2)
const gs2 =
"01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d";
await wallet
.createAndSignTx({
msgs: [
new MsgExecuteContract(
wallet.key.accAddress,
addresses["wormhole.wasm"],
{
submit_v_a_a: {
vaa: Buffer.from(gs2, "hex").toString("base64"),
},
},
{ axpla: 1700000000000000000 }
),
],
memo: "",
})
.then((tx) => client.tx.broadcastBlock(tx))
.then((rs) => console.log(rs));
await sleep(5000);
/* Registrations: tell the bridge contracts to know about each other */
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
const contract_registrations = {
"token_bridge_terra_2.wasm": [
// Solana
"01000000020d0005d041155878a79b0c8b48aaf3a6266d85a808df5658de5c77715802ba2e38b54374a5a244b43c1a4129d31b47192cb80a565484e55f171c00df69be3107e32e0001fc342ba5227e2319c36fe7771d4626753960b5f6082770e57120b5057eb56c5066bab012670d532c259f6162f311458e187d7137298fa984a41d469df817f88f010349b730282809e94fdeb125dd30490e116ee6ebffa73296eb10a36848351a12c77e846daa5f6eeb83103a2d7325d7981fa4cae43fb84a91851c400c2573abaad30005ac798fcaddd7090a41b718f5786f02436f30d631e64ac46ccd058e87dabcf20f03dd4c7ca0e71d2bbd9c0cee90809a5cdd0bc72519abb9313a4d81763b48c79c01061cdc7c59590231f6f580c3b002ddfa5f41bd0118c67fcb4cb295ae239b74d0e322775d1e78c252eb605230e040c5af176e9ec5ab5f34dd36fcb202c894b6e4fa00087621ef01365e4d1f2e81ef9ce46f0d620cbf003ded06956df3e87a137640310037e8d605f9208a5e17719001fa662d2dcee1c500f0db1ec99119dd326140cf240109a406c0fffda03ffc741ac06743bc507d2a5bdb95eb1c6e3d24a41d99281ce9af20881add8926faec5ac33d3bf85c61a220dd0f699d713f4a453f18b2ad735b6b010a42fb4729a41b99029d06fc6395e1f676654002a28e08c073fe905e87883726b444aa70742c6c53ee8efdb004e756fae63bfe9a91d20971853cc0a8677ec1b0da000bf472a82642b1a3c7872a6594786fc803c8ed8948719f85d1ecfbf903deaba8505b02ffaa488b09e066a0d7210d8ee0871dd10d23b4249c942c64bd79a08d5f6f010c308bc162680851b2a94a888e068394bf4dcb5d5afab1faa350bb086884c20a535366302c37220db24cf6bf2de5abb904f1ffbb13afa624f0d413049b1cb034bb010df076e04e691e924bc9b4e855cc87ef67c237455e1cc3c96d5325c45f5c6002eb68740692e35a49a9e5147d30e796b184df6e7fc0633aa8286fabce5a1f99f0a00011d9cc70d9239887c638aa5f28f268e1c9993d34b0d33550ec373acd921d461eab31cdf77fb7c08f999d4ea7f32f48396dc1d0c3cb77beffb58e3ab5f57333a4b00012d64e7e0459fad8067a73e7fd0cc5b97e6794b5761db7b3b7d15858843ac044d112d2fa713d9c29d1c79f73434e2af1cd965c93aac3502b0f368652266d09d34200000000003681da22000100000000000000000000000000000000000000000000000000000000000000040d9c82f1591753eb20000000000000000000000000000000000000000000546f6b656e4272696467650100000001ec7372995d5cc8732397fb0ad35c0121e0eaa90d26f828a534cab54391b3a4f5",
// Ethereum
"01000000020d00045ea9d9fb9a10f83716100364a9c3d4560b00b1f960251ede94f78c0fb0d6c439b4fb60aaecddcd69f1b52886791eb340238d3a7e3fda3d372e20384155dcaa01011164f9336028b54d0c2183d6097e979da9ca30368102f5d4437643470dbd4c0c3876fe57223da274b2bab8746fd8535156e77cf7d8f78f7db69735f8814ab48801031903a81caa6dc37469a6e4ed1375de0d390c0dcbefc0ad9f5f912082610789a2687a65d91e7a100793a54bdd3b731c49ed38fff73e4e1d703db1111bb97801330005bac64f9a0642251ce45e7549aba8b2c9331be29d75b1ba77a9fd410346fbf65e68ef971c516f0423ba3b39c45bd5ab46f819a29d42b9ee8e261aab36affae8b501066ad5f52d3958068b82595b38aefacbb7247eb7cf31600f5d7f00b230f77f34f257b606586da3c1ecc6077799141a3573e9e274e0ca3f2ab4fc4b7a80c8dd21bb0008574496322f38da956ed90b56c54b4f6886083b201f555a3d764d9e43e00cf1aa5e2ef7c64a27384591458010ee8262ec1cec072625c3930202dabf909b4825460109857209084b4409ccd3f16ccbfc7aea3ea451b5dc90f8d41fa807163917b70b195140d93f53acb48f0972a94c90778dcd3479ca3ff0a7fd8d3892b50b57b671a8000a79f78e3af2e6a095bca2123e83e56bbddbddaadffc801c27c98f41bba92c4ac22a6c71d3f48616b9fab0a69af23e89c659e57fdd7a5f64aca0488b4ee83c717b000beef015fb5ea5c3cf7254818765295e0a61d1e2e2b712dcc4c1ffb3037869a4d561702e460650fcca55135a4f564d07469f79a4729e26bfcd8f804e672baf5a97010ceaf4be34eda4fb97b23c3ca74137e6c1f55f7f1df34a7f645d4beea457a2dc61637f2c8b6a9f35f3e13ff8f3a5cf9dc74a6389b7f19c453b578b2a7c35024d97000dbe6e237a96f4f7219f1d31f74d07ca76b9f11d3781f612ae684db6c6b000caaf4e21caea9f1ad947e8450aed7cd62599c7a6908ffcb900b91af2d80d7cd7660901119855d08e9b5c2ab854944ec5dda0f281c8d9d6408e89d43f6e2df91a82fb8f8714baf8daf7f7ad39c04ac19b39383a49f2db351d5c181c3f35e9b3a569668dfe0112e0a0a193c269f8d2db4acec3ed94fc6603050435ffd733c5f5ab6c9b12245af77b42adfac773a1860eda4500a266fd61292cc54652ba333bf294a6ded053a3f20100000000d77ea04400010000000000000000000000000000000000000000000000000000000000000004c550f77728915b5c20000000000000000000000000000000000000000000546f6b656e42726964676501000000020000000000000000000000003ee18b2214aff97000d974cf647e7c347e8fa585",
// TERRA
"01000000020d02bbee9e7948d48240e3073429a7791f4035289b6520f174c261bebf6ea54b381a5f7d9402cca78d75ebbb3c607ed507443e96b66513e8903ce4e19028954a1ba901035c8ce8fd98f6d195f61ac14d11c9f7b32c6e94def8d8e3408dc823d4c9ef5089684e405bc8ea772c73206b5789657a7118fb4305e17e95989fcb7bc0106c45e40104ef231b924c6aa072ca7759542feea1991329ee7074b473f36fb6284b2e0eabdf074c16c99c77596fc20c6e9e5b046c3aa5ab40e7a9ce5fe11de3af1ba14219900105688905aa06cd3ff8f615f23566194500126fb294fc1130e246484fcd1205a6701c674440cfaa91ea559d28ea25e957e001f40156d38f061155efe48c87e7136601068b9fee5035523e329219b9ce9ff3128591654b85d39a3aae75695f5de4230a81594e2039d4808a7e72ced5ffdeb4d5c090f2e070676a064c4938d300c51df65e010761cb4316f460703f1f454ad5825d54a5a496eb55c07124052823772698a92ebe67102687627e688737bec95cb4b408cc3c748e42f3bd7ad8534352ed0962e8ac0108bfdf7cbbb1cea6bab576e02bd7928be74d1a38f6892251ef02e00dcafb3eb41d78aeb3aad2693d6dba2c493bfc83d729a65f81a8517523e1916624b8bd8e67290009d8b0ef6910a9abe3e118ae387185647367a6e8ca059bfabf88500b780e88f4f960f2a177c924abc9ba9ce8e8d2e96b969d3fd229c0c10a030e36f808a92de9f6000c5ec295fc7976a6bc80802d4cbba29df0eacae53e223bb7e0e64021a4787454832ba1be31d2157536b7e1cc2348bfb1fec63cfcb26815967450ddf2b058fa9575010d33d1c1558052c0866b204cbef25f9c6286a61b96dbefa426e85225effcde9ec20c0e283c794b18ba9d28311e0548a7c808456a15e57a52f447f8094cecbfa271000f7426339442b83039f2d0c68ccdce4952a3898956ff21edd54b6c237c6c7d801a6b7a11d4e5d5befc7e1a4dc9debaf6f74d1860d262d25efe1970bf70ac124f360010322d3808532735a14c6c523a9fc2da458ca9049f4cbc6c3b7a2f037275a472450c7c5d9a112b4869251392b62b2a82c1271e5e50a9ee1a5f255eebe6fca97ac6011172a1c02539bdd284b0b21c00841fbec1c4df9e52f98bdd2243c7c3dccced08c67659a26d9be3ee4eac2e2b1ff05565207ca305ac67789f0b45984f82af6a32cf0100000000eafd93a400010000000000000000000000000000000000000000000000000000000000000004b4e6895ee716695420000000000000000000000000000000000000000000546f6b656e42726964676501000000030000000000000000000000007cf7b764e38a0a5e967972c1df77d432510564e2",
// BSC
"01000000020d026f8d64ef762f1e7126d0ce149d9fa7c8e163acc4134cebd569e0c6e8158a7d3b45d440125e031184bcf560872b1dcdfbdff69363e0e41f0d97cdd1c8b23fe3020003e5fb20bbda884014f0a52c533dd55ab0c1a1e5bf9bd254bc363574034536424d136d1ba6635132eefd09aeaa14958b551cfbfac26a82fd6c9d41094086bc209a00041dd6e91875257971f47523df8ae3f9b7f19bc5a770c9ef8f895e8aabd34266405ab0455dd60d8526730cd74e254eda1328cc668ff6e609efc19ced8f93a9decd0105780c3128d5fd867773ffa699bc6391197bc4451392f8e123fe001aa2d47e443e1aba56a28c51e3c13497a8efa5ff601ce201a3da611c4d986dfb6ab99ab064e5000616a054fa2975984828f20debf639d15d4c8ca4dfbb19db31c2c70c81f36bf1bd206a8e02f5202707f2b762408480a5dee4676328ac83602a1b55619df56b81a80007ec23349612484da2a0d447b404a7f63c966063f48ff3e635390578d5b22958154ded0f633ac1a54454a04a7bb23ca04cd18280c38189f127bcdb3fa8819b324601082b051226cb2e1b89f2f94fe301759a1e559edf0fb19b2d260cdb052e705f0fe62caaf19eb07d7c1a0d7470922d1f9b76b01def4dbab4df2d4a7736038f2069f300096c96c851f7386de4f628bede2be2c8a85530a4e079e5e50b7810d639939430f67b3d4f773b2c4151a481d0dc05b137568a995d307a4a1310db56814272f3286e010c8dc4208c78ae9ec3c6bc65c568a8cde4b0d2ea9687725354a557e3fa0f1529824f201fa4a5cde61b79870f574626ead8abde1ee08ed32e89f615398ccd782fcd000daa821071e0bfaab8f0e07db8be8b1d2725df6d91c93ce1597b3ae49baf3b7c22714e0a61dbd7c17cd2daaeae05478db53e41967ea000226d5a9680166c1f38dd010f46cd84cfdf7127a31ec4dc9d8dd4d67666ea1a4762130b11b9c92d3ec68713ea04b6171aea974fdc42b38a1823df3bfa2b5a23d90e8454622dd3a9a69c27cca901101654668dfa8a0506d4a787c02fd9ebf51549673ad589b4d82494ef15ce38c9547bbbd3c0346f65e38b415b39be5a99462e192b2b80dfcb89796fe18d68a90ed10011c9016546925c19d5672e4de9f93f8e96e09192ae6458ce59522a39536191e3d4186b2118eab268584cead31d176351e213ae46ab13faf52f0f04c96c296d7632000000000085d1925200010000000000000000000000000000000000000000000000000000000000000004fa79fce49a7b317420000000000000000000000000000000000000000000546f6b656e4272696467650100000004000000000000000000000000b6f6d86a8f9879a9c87f643768d9efc38c1da6e7",
// Polygon
"01000000020d023e3f20557912e47e3f8bcfc92d425d1c8f4b059aa552892f7960c61a5f5d0a7141e15ae77d380043686a8e41fc9edb4ef79931c6cbfcbe5d5a63c80116f8834f00030523eae2a37bf181e5879870dd6bfd31bc752e32696b1d06e0a2c7140e0112b8784a12b0da6bcd65913a8b411eb1fe35654055414ee90a22d983e63cdec5be610004f0446b5136e4a413dfeb09f7b050453f6db8341697ad7ec7bb1bf6a7bc003fa730df7f3b7ae8b65b8c03de5749290b9f6ac5db41fa370c3fa68a5ede6c6d03d10105bd59ae4996c229c40f8f0fd562042fd7b83ba049588296d40796d10d705c40895b3d3b0770dd17fedc024d1440b6d55f238a8a6bc303be5b6f851bb140ce2af30106d72414644ae17ae51a065fe66f110a2fe7993003f46e2e8dc396196de7754927761c56a57a88300fd4e812de2a3b9efff3df8f16ffdab273f7fbbb05eacc66860107ec8bce586f9d4942c125175fc083d6407a5a5c93b40f289286338db7e2519c905d1fca1aa6db645d05e55275915ca7845e35307495802ce6be4de879c13fd9700108a16805c8804d82971b10a0270edbfefa0a8e218e4c7bbd57377037678f01865a4822c0d2df6971936e4e283d443a003e492daedbefab64167282717ca74e7d8f0009acb88dd19c6bb63bd539c9021c09c17b2e7ca9897cadb353a224bbe052af6e3d5907e528c128d56df2d2050c52a33b29c1dd990e75383d7bdb084a64e4484085010c0aeadd15bbff6e5d3235b0fb4893000fbbdbe3f3420b71705ce8eae3a83c3bb47871b7dec96b82885d13748d49f3668729d08205db29ca24f3e307362bbd4b70010d504f8c81f2635e01221a3b6ad8e6d16995d440f2927f4aab1eead23f33df8cc709dd21609c562e359c1199a7fcc36ab23746c09f60be39abfdb8b594fe7f3474000faf74240ca2e5bf9254b28b85ab3335ce95c5c8116a7018de2b76e346f878ed5b6cb96f6aa1b7d378c93a897ca691a3cead5a24df946b0cb8978558f044aefac200102239ed032bbfc704cb8be157b3328c81f1c6d227a2eaef8eeeb78cb63ad46aaf4dca8ea91b92c17c7f11ad5e5e1ea05611dab7ca6bfd341c02b81a7608ab25a801119873e624878824285a8fd684effdb0ab24d994405913d09f207c5f4ee86d33d452a9feb7bfcfefd64cad1b2885ad3178b4dfbb9f96982e868c18523d3b04f9ac000000000006896149000100000000000000000000000000000000000000000000000000000000000000045fdbfbdc28c8aeb320000000000000000000000000000000000000000000546f6b656e42726964676501000000050000000000000000000000005a58505a96d1dbf8df91cb21b54419fc36e93fde",
// Avalanche
"01000000020d022fa91e5df8ef1a320710730c63143c72e8ac8309546c7b36e3a974cc42ae3188169bba1d62afb5a9d04d09cea0b6fdd5fbff9bd3828b9e43d40c66b4a7ac4188010355e8a4edb5de6ce386ba67204da0fb15559b43788cdd0471fdd560c4c5aa81307a6be777fc8f525fee0f79faef62f1a91f99465f84dad8ebb53b4df68a5322390104570a49a223c855bf61fefce149e52efab20d8be703f5a0decfb0cdcffea75cd9418ac7f375a8ddff481eb19494f0ada6532aa2bfcb8f5fe7d79ffa42bcb69d8b000559cf3254735ba37c09512da6cba3417892cef2d8cee64721d85bb652233965ce38d9ef1db109b138bd4a8a75bf05e414ea0123eda9ed673295d16aee13e2b0cd0106b9e38f4a941c104b1b2077061cf5212f4684795b90220f078fa4d38d08fe2080526c82bf9608197e594bb1e575789d201408ccdf56bf323b64ef173c6c75dd4401077a519ba78c4195272d4d14cb9464cc1e1cfd2322d542d1c83b523b0a110ccb935d2e94ea8f8eee72388f77e58b912ae465d079b16cffb717b94db595c99a5fc70008216485ceff70b54f363e49c00a5418cce3f460092f119e2049eb5ca56b8bf4d358e57b7180a97ade4700bee8b77d047515e63e83849039a4b2527a349ef6d1640109c8990d7c964186a264ffa01291a23ef8ff644830d76a6b9d17dff6455bcb67271913c099e3597656ab2016152f55af78861e513787847f645bacaa3193c053bb010c847815ab7ce77f9151fbd35fff9767f73035dbc76c0683e1efedc89eb16c93284de384ad6de521200a1cef67279a1d41b714b3e3e558796bd287243453b81a2c000d721ffed26dc5f06ee8858b9595c8a57870f663f10f03e2ad078679a6373b24ee457eafe4bdcc7005f2a2cfb674f0c29394a64c21c81a59824965566e6859dcf0000f28f1f759bc52cc011fcaba0482cd4c3012e9474cc5089b185747d848e998e72231a0c8dab79041bbe804c13032411afd78a386df08ac517939828a62effb22b60110720e9720728dd34858fa83e292730b64991ec9bc8c2f999ab3bf3873f2254e4972c097153e9dfa4cb9b6ab2e2ffd8d9483ac7d6002754795e41fd4aab001f9c6011161cc391d56aead20f0e1169e759cb320277afaf9cf08adb31db58040eb2c97042cf92037df376c87c65e386ec0eb26e22e4ce5d9ace143c02a26612a3d2cab81000000000032bda66200010000000000000000000000000000000000000000000000000000000000000004e2dcca3b0a7d091320000000000000000000000000000000000000000000546f6b656e42726964676501000000060000000000000000000000000e082f06ff657d94310cb8ce8b0d9a04541d8052",
// Oasis
"01000000020d01d73eb7f4cb191bc1be510f3157a0ab1a568782c56431bddfc0a31e930e7eb82a0745c8c99f61c8a5e9adc4709f627b5c72725b8b5c71d015c155004b1d4c7bbd0103b669e11ced2a091e2f0681364464e226942d1082c4f5e45b6055cb686aa7c7a22b50a4f144df92e61b98597d5cdc5621eeb796eff82a629a487a802f8824ed060104e4df25a48526d61f02926c78460154e4993903b35eb84b8fe3190a67c282919343849513da06fb162e063b25e9912cb36ad55e24a6c08764284728cc99cf4f340105670579b525e67ba5b1191e81b12e9774f5d758bca780f0845999b0e37c4f55464cb69a673acac0cf250be652912296f383bf0db11e53a12ca69eeffb2cfba10800068c44ca24448478a41de9bb6b389ba27459ea948f942d59b1d9190d92725fa551649ecad869f0181e495fb1e6a38f1a80b9a89f12361ceed4b3e694695256048001082010fa5ea37d120ddf723a48c51e408afb696c4abe9f23b029c3d0dab928465a509ad0ec98d26c65e579d1800bb0ae8b2888d19c9f897363abaab90e028a6a8b0009a65fd7ecccdf861913a1336bf6b81838d051379180a1ca84dcba27b3b0912a143695432fbc6449c313b54bcb0640d5c3f8ff9853085a5d94be7efee256e8fc3c010b99f198f424bd9fba16709934d38fadd0d99e17e7e5311baca827f283e0c1524934fe1a040fa3900b89836f9ade5defddd288fdc051b564067bb44d7620134a15000c8d1801f3767441a998f1e8b0250aabccaa7fd00c246aca4e487dc0d93ea2a95f20cc7f8ed426f605dbdbb75915004e7848d402414ca035d0cb30015d4d57ff9a010d42d17c5cd8882d3bb6189974b97f3bfc6ed1466aa1e3392a5389c7c9b2874c461a7c2e432a0ea4642a59b731d78f180a1d60aac54cd33c1a90181798ea3d326a0010b0b79171792d1c328ce7270e55834efd38d5e64d3f78f03f4195d83764a00e7904a1160341a5aee387fc7123ac96db99a5abb57942a3261a2a8d4011ab4af7590111fae3b5103e44fcf295d94958985a709b87f74a0fe553c614dc0a1f8c52ac1aab5af6f4f99ab63977462f54d002a77b80fe580aae7567908da7cae9d6770414dc00125a65a56f6fe4c03d86f95971a3792c70408be4ae4ba3b3859d6f85feeb9e93af1be80071b4eac4cee1bb4c652d14f9aa46e0c6f5c5c239919a58dd243a12bdb30100000000324615c900010000000000000000000000000000000000000000000000000000000000000004e9ed430721bd2d8d20000000000000000000000000000000000000000000546f6b656e42726964676501000000070000000000000000000000005848c791e09901b40a9ef749f2a6735b418d7564",
// Aurora
"01000000020d02a2d7f318a1c6b67a1451a4aea97f9ed088dd3f6a77664c0d622b4dcf345c0e1b3067c3d2afc699cc9325b2806ebe9a06e18f4c03521ce83be029e005f7d8b0730103623c67f397d0033deebbd88b90f0245e38f23151acac8d960df68289ae1a3cc930a99d34715b477c1ad86e8c32710fcab86ba8367143805130564a06e3abc256000434476ea16abcd146ad31c0958dbdb7e902a6a33b96ebdf7db3563ff6447bf8244ce1e7ad7107db14662d81b3335bf13a5cdbdd4bcdf64d58ba32b728f0ab260700059f65d58322f99b02e82228751770781d8f6a1c6b15f8427a31744e4e486e422e7ca28c95c52af3a18ff2b04acf2158a544f3e9fadf73e04686f5bfe3e02ba6440006024ced58b330ddabfc3876df8721614e27e5cd3238b3fd11f366d11ee649af502d1cae5478db1658eb207ec82ba9b554d22341731f8523652dc5cb6810793efd000772068b2590b6296c28b11068a389a2c63469aeaf876133ef12e137feb780d1e330fc901d48731af06333694980b50a08c7f5ce995347c1e05a565e81be7d21bb010864d76959392889f1fe8cbd2a7a1f14fc18e843fefae458c436e3a58b24e99a9578537f126150576886ec9810c295b95b4d3066f61c81a172a0324149f8ee1e8a010945ac357751b9b3ff13be9d88dc2079259eb574b91391cd75e7402c399e157a612658d4d9e5282dcb2fd8b546fc9a4e192f3044c0a32864b8afc05ba838c7048c000c31ef015209886d42bda4fba51634dd51d59888b8008ed60ab27858a74a952a3e2994384e51ac9d13e73736e568e72430227b85cd0ce275498bde942cfb8c9484000d5e1b9586c226b8172add8139a5920fc5b02456339f419319959f69a59beac3c41c08dde812341ad855311fadd56ef1f2a8b48def97fce137fa718aed50632fc9010f85793957c2fc6319470f745f440a2ff4893a3d9145cdc6c1624d86a929e3ad004707927092a5951db71aa958bbea7d96026cf70c18771cfb0f448b2fb188b7f90110f8e40975afd07984d56563c5baee64bc39f776ccd055a1ea22322adaa4d2ea6e63d6c469d819db644d80013a3410d963109a0aaadf50bcbe7ac1848e6809e06100119d72cd35a66fdd5ac892aa61a519bdad6b06d2b51b831e174784491999826f8867c981439654a4e064eb1ea48f74f10a81fbacca86be9087bbb182045aedb9e40000000000639496a5000100000000000000000000000000000000000000000000000000000000000000042c2817cc9b0f620520000000000000000000000000000000000000000000546f6b656e427269646765010000000900000000000000000000000051b5123a7b0f9b2ba265f9c4c8de7d78d52f510f",
// Fantom
"01000000020d03a82a32d9a0119a29c5d5d1e6bcba647c82c60678dd02169c2c566bf99fb65d6a1e5f2403e963471b5e224f4821d1408b6f699d17503fb3e18c1092a926b277b40105b9989551ce1e5305f89a401c9fbbce1ddc5021fc909744fb45c3c4a973e14a957d017028eeffd884e9ad1247118c391df8395b3d48dc57703835fa78b3e968000006f8f70c6c33c36d010bb63d12eeff49a910f2cb0f20c8a1e141b95620be27afd42bfc2e4ab12278e4edb12e14fc6178d96d43400c80fb44e1b058913ce2903fea0109763779ccb39f23ebaea4e7ce578f4042c262677cdb3ebc5fbf6ed2aa684606035baf518a0387b1803301c1d694501667283cea9a9dbc6bb086ef0f7f499dcaf2010a1cc87b373480fa0d17366d9660a79ea79bde2862bd74eb1e70ed5e3add45745e560a63254d85d0304886b4cc7cb84f43ceb0a2c67ed27059b516d0243097ab9c010b9da56edffce7fa25683702fb17a8f38905090d7a56f623e2efb4ce2465ca8c463aa3df6126842a743f9c8e63abc62d16ff2308a5de19f10991d378615551c9a8000cb63a1128063575f87a7b50ccc63b384d80fa80f96287705387d3eafec22cb0d70a55a1453c55ec17f868f274a047f750be6882474fb624dfd7f59f3665e6627a010d5a71dafeedee56cae863738c55e75fbac9903bde846770c4bd40d9864ac31fdc6f717bee177f2f380545b8c78e8fd09c60e2e726775aa948bdccc8ab33d8bb8a010edade1cfc075fdb4ef48171faeed7769aceab3eaed09581dafb6cc1c8c0ac944839772132bd9b4ea80817c2f08a8242900450db0d30369c9a5e70d22553ece0be010f573ddf1df2683cbcf8b68779d6a594712042ea077d6e4436c2f72fb114b5ffe31ea23daf21a1f66864b8c120c1eadce70c7ad1b77240bf8f9898c68f1b4dd623011046eea234a7226e0a902b5c429a074800e53b7ec3dbbfff5d1f37f99dd19318b242937e35950c6e4debac3dbac76405d77162dbb845942f5462101faa4c5f3dd80011bc0b5c1a809b20d2b115f930a41a56021e351d98203529fd5830fa6e41c0c66527ae11afc2f6789e2c5f637880525f38492f496b18d57e428b29ef9e7b4d2fff0012c62db363757e91f25a8f2619e0b370f0ce5a77ccaef99c95fdc46bd76507d2e97ca433aec7f3a023acde2d612c504ecf3b28a7ad817189236e8e2109920254d600000000008c6837d400010000000000000000000000000000000000000000000000000000000000000004230366eb9e6d3c4920000000000000000000000000000000000000000000546f6b656e427269646765010000000a0000000000000000000000007c9fc5741288cdfdd83ceb07f3ea7e22618d79d2",
// Karura
"01000000020d0238826e6d875ee99c28e1a7290ca018c62ef04fe0b1ec7f1f30e4d22c8dba96e101299f1bb5a21f66d8d07200088ffd9da08d1c995af13bfe07cc47573b401b1b0103272ca0805c8d7c6266c9a285ac39f896fb6db7771a92cd49b268b58fafc35beb3d1287a6db989df16e9ea61161455f0562e4251982be5c64f859696136ace32900046ee228d67e986f71b97b5003353fda9c1a739fc65fa632ffd3a9d9a3074585116241cc44e39eee1ce2597ddd615a0414d056519026cda7f5854b7245cc01101300052a0c536fe881773bdc285e9f01cf750f71651c143082fbe687df28d6f985b82e5f2b9442ee28cc1821d15133fe50d0b45682d55e1e601ff60f180a277224c51600060065799679aa61b64eee17a443cf00b39334e1589a959caadbfaf4707e495bee6c097373b80e57d2833727f948c846402b02fd2a0659a2b65fa37599a02243d40008fa46f6017f2846fafcfd9d974ce7d4821a022b85cc283c5dda6db38de6633fae12906a667952c6b4745ddde3896af7a7ea3e803723aa4796b27d64f8f18ed6610009126619c71961e3b5e9097220ebd470831940ba515672f1795f47fd31376d42b5220838e1a54bf7afc271bdd7b885c3c554ac8a2bd231cd2164d53e7ada4caa07000b72b042c82fe4c6269cd41b8c71d407dba851066855964cf05fe1a32038dd41e140ba200592476512b09e08d25c668955fbb3b0791c6c2da1fca41ae9486080d9000c2a11fd2b89e33af9471bea6a1cd7a999212ba273cf157677362ed0bc9e1af14a7edcb02795d3a0622cacd5190b3f01699db0de569f7cc91876152fb89a044208000dd41f9cf8e861a4d736e7997dfc70408842e2c99451531ee42a5a3c99902fb77a07e2cf8fe2a86874498ddd12c031ec835558522a593183792286a2c05195ed6a000e2f16ee8c8e2098ff422ed7e87a23804b9720933e006c72d84d51760dd3fb073e352f12a7b163edfde86665a2f915c5b651e186112080806c5fbb3db3d84fc337000f93a1bf75deaea42014dbfdf98614446e6bbedb530d34d11ba1013f9e287669d03ca535a973deee020cc777f8b725f07ef0829038270616887e807941e321f81600100fbc0b5bd2b5f87d6718201ab2cb3002b76d30f0c2ca07d3b63dd1b32c2eacd8198097ac1a7b83d5ee1a678c4c01f042916cd0276a278c383b15408b3e60511a0000000000897ccc42000100000000000000000000000000000000000000000000000000000000000000045c9fa2e92b0e73c520000000000000000000000000000000000000000000546f6b656e427269646765010000000b000000000000000000000000ae9d7fe007b3327aa64a32824aaac52c42a6e624",
// Klaytn
"01000000020d02e48a9b823697f08a4806c8a5a08783ce10f26aaa60a3bc69d2a705ced4e4a06675cc9b0579dd2ad5a72f65500d7e5cd8ecc6f5e6991cc832e75fd250079b8817010392e65ddc65e5cfec721ac42e02241ef4d6bb457428861e32ab8d888ddbbc742b0eb1a5dde8b06ac3173f9f2a8c709271b5ffa3fbdb82c440cac17d87932d907101044ab8e98639fddd70eecf342c40eb09fd2a9ee9c84991b186835c6438e0a8d88a5adee107bb49aae0ca58459b14de61101694d7e2c88fa2fa1a9f6af05e062fc40105306e14a59e4937a7414150ce73211377ebbc23760bb1bb55ce4d5b6e6fc2b2ed0864c51045a3f4f9d6fed0ea1a3270eb27ee5a34d19337c1012649bebbb76fc401074696f673418f5f0b945ece6b58fafaf55052fdffceed5e414bc7c4839f70d1ca27135e4e81f6955f99e348539b0127d024b7c462d3ac0f7c5339bc1fa6f6f1ff00085549585e70aec53d929aadaecd6cf5204ec78fbed837a2d30c42a9fc5daab8d2246b1cb8fa389078f23b602631bd1f7af08c546192a855ac4413fcc586b537ab000958a29e434e654233942f2b71843f163f4b07cc506bc37a082055ed418dfca4724b035ca21ba94ff4b51ff88d1656dc0ce8035a61036a20a262aa23c4df99d514010b80f02f0074a784ae3152dea6340efc005a0e101036b18a7cf89a0102be1d8ec728a0e183caadc8c22f17a5e69818125819710fb7d982c1dd0ead6e854acafdb3000dc1f7f209f0c5ae96fbac7abfe0a8cf5a5df9ad6ebebc8bf789d8f9ab4ccc6b3c2af5abd076d211d0d6b6d06c0af7a91275e5cb002df29e322c18a5d0732e8283010e974d4c33abf76da3ef99f6e688f344c30a6016f509faa46a089cdd890937e28e1022e5e9fbb1fb9ebe16c1ca54896c6e1bcb14ca88abd2331eb07eaa2dd258bb000f1a4f45d9070a205c0ea242be3a638ad10e327369028879f6ab47d7185baab56165706896bfc8ca80993d3c25c9a80037d4323401b0dcc3b1919b5701683bd2fa0110e27822f43c0f3eb555330ed555896715b306152b0d42d2ad4267e10c7bac21055850744344fc0e2385bb34f7b2aaf2465bfa0a7c667b6dc2e7410824d3fbd94a00122560fde65296ee41bc03db3c19c76b6790c593c80aadae4271f80a42368e857c58374a3cd72dec321bd67ca8e08dbd2ec4576a1094e20fc508e281f0bc721ea60100000000e3e3c1f8000100000000000000000000000000000000000000000000000000000000000000047799d8f9d5ca5ba820000000000000000000000000000000000000000000546f6b656e427269646765010000000d0000000000000000000000005b08ac39eaed75c0439fc750d9fe7e1f9dd0193f",
// Celo
"01000000020d026b48da063e5f751a91b900d8e1aa0d15fca3b06969157453e545463b3cca72de56a2e67d4cb351b0d43a7835f9aee14a1c0eaeffb485d94898614a2a6f640f2e00038e707b662d2280e9b0215f642b751b1e4dbe38a4547a6e3cfb8f8302db145a2a115ea1d6ba9d5444290df3f634dfdde350fbefe7a635cd60095972c433ccb7d701049015e40397387e38e8299d60dd682db7df67a52b1f2b0c72cc70a6e47745aac868fd54d41b7715aa87a213bd8c84dc4b518632d775801310e17af09d0538a2bb0005cce55406328773d6d5d19868d2833c341f9a89c566e50afaad0d1c5eddf18472227c932c0ecbf14adce6932740c6043007c294e0593ed417787d7dff4ccccf6c0007c329a8cbd8da4e1af5757a29f6d4655027da63f04a18da58ff3dd790f40515eb515f3022d3f0f265c525df560134b69f65540e8deac6a90bd4c9ae2322a0ef420108eab5ae5c18cdbe75fa68ee0d100b62d01768f38dd80b5607c6b9e1a12d9918b154af7b441e00835de46289648fa2ec7ad55dc73496a629ad39b26a067f8600f30109fddfeaefa1b180fb6d552cca5c80dda8e2d6a250652d920520bc2a9fa9ffabe94a42a12507062a4015591c2e9a9bcdd68cee2409481e053ad73ad6b857855b7a000be1d2843aa4d70db32d371df8bf380ada002b75c12f516ec28ac772d043748d7237aa5e18f674ac31f8008e1459b5678227a57e32b14591e1215a124825505a8d010d6e426df2e7ee7cbea91333f2eecfb19683e194e5d3fd3fafeb1876351f62776f6afe25a418e55594935760ce4886c62d08fcc411acee7314d88c7ecc38d3facd010e68cb769c5d42d681e059eef022a912125e4d86dd391f1066b74bf2af92a371dc0e2363db8d2a7cd9165af95452e6664b0727d72b823e0bcc76e991bac7853cb6000f04df79dfe70e8f5594dbac665a05b86fe0f292bf9a6432e0ee53b1dd83c846041efa83c8495a727d47fb49643482a15c08a02a8a029638f55963ecc910454aaf0110d8a58b36c86b8260510bba52de40015bd9d0a99b788c563c7405426488bcfb447a26da34e3151cb0bc4c8405655ddbaa873dad9db366e136ae2e4f72a5fd92e70012eb3c585880c66ca92bb8ec12896b44d65cfbd09631e1c9b6b8aebb5e129aaf0867b0dbd5d22590430973f921966dd307a9fd47710b0bde1b30dca028c5c414ce00000000001f77d2e900010000000000000000000000000000000000000000000000000000000000000004d918b69ed0a8cb4320000000000000000000000000000000000000000000546f6b656e427269646765010000000e000000000000000000000000796dff6d74f3e27060b71255fe517bfb23c93eed",
// Acala
"01000000020d0086612b561f657f7d859fe080ee1447b97f13b6e72fd68cbcc91e5ac5b04b616e5a1b046272f22098dac0a63677b430fa156e08b385f06a7f5c8c2ccc453fcdff0102c2dccd6d5f83ec6ef4ba9f367f234cb08fca7013b9470d7ba157650d72c8d0f222cdc722b8beef49c5c005acd2aef221823bf51c22a792a7641ff84ca72875d3010398f091e8113bc28af6cef37a9f97ef893bc537fb6cd4597b6ff204bb8748773b5a222ec0870de3510ab0640d3974d3c76420cdf8c1916a8dcd3cb54a6745ba000004202c5c5b6632a800b91ccc3058e5ca5f39aa20f192e66d80a0b55fbd0360a27a2fd1e79fde5dbf6c34b91f49230dd0e032bb54f0fc39126af56137588c13bf400105e53de0114eff96a0c88a7b6ea3f5b01560fad040d239aa92acfd0950e402ee217559bbf1ab6138fac9c620bb9cc45f5f2827e56dc94b82c43978d7a97d5ddb8001089bd171de7bac23b5e012e2f4302d5a8b7469f0e80589ff46f3422e55d4b205a41718e8e5315ac735584d50cce4cd1f7b5b997714d176991100e9150730187d330009984bbf980f2362bc0972d8f8fb323b10165de0827d13c3cb2ee95c1b71451ec6338397add1b3e57b85a9e0c219ac5c029fedb77cd3ef9cd797dfbf2729b1ad29010c771a4ec393e4f0545a5af2bbf18480807c6ad3d576f8e96b801e0269d4dba88e4e076b64300c8bb79e68b4a9ccec607135acab27fa65d136a0d20a75c60ad477010db6511f312fdb577d3542b4954225f32270645fc23405f4efda151073b53f54aa19c921105b24919504dfdf3ca0a27cf5df9128a67cefde2912425d3ede5db19f000ed08d351c0ad4a659a431edecfa8a1b0eefb7266f7f8f34ed836d9a9aa934eff0410f8e915a30528db04bf2a2b981dcafd41ae0f1dcf994fd76fec58ace113193010fe714d92060df8e8d48d89f9aa9d003cfb6fdcc6790c26e9aa1747f2f12b378b30817fa0f43b4a70bab18783853cf63f218f73c1fac5b5cea92f7b8400544464e0110eb41bc27c79098eb77cb7d270aa9b3b8f66f1f75ec48071ae7f39c0a803b63bf1744039b5e391f248b3439d767516329ebfeda9505904ed76c903d5aafa6905c00110094060ae0bd5121e051ab1311916d320e67a06b5a4eec3c08d31ce3795c7e195e08b73834ac75ec50949a28d83444c4e73ff07ef7bc1947a4b9b42b78565cf10000000000f97fd62e00010000000000000000000000000000000000000000000000000000000000000004757383b2c2ade11820000000000000000000000000000000000000000000546f6b656e427269646765010000000c000000000000000000000000ae9d7fe007b3327aa64a32824aaac52c42a6e624",
// Terra2
"01000000020d050b4ce2af187dc8d7b0cd6d36d4eba90887a81fff30aeb057c649bc265fe06621114a78c9558e390565dac4d837d5cb857860f6d370c9e408f1af0762791d6f7b01074b62c2c5d26d56b82fc6962829d7da7633bf9e07cf58718a5b447b11cb745f075549839caa3b8d90236c9c07637c5be8ddb019ba83b2fa0cb86f0dfc9b2c444b0108a8d52257078e804104c2ecc72b23a0942b3df2e01d03b7740a66010bca0acd000eba7910884f929c6318a0e160d0dfd677d035ad76ce42960b3dc681458c755400092de35a61294d434906c78bbebe47cc30b8cca40fc43f6f4c76df0d6d894819e9229691826fe6ab0688989cdad2216dd6fc82a73dccfb7fbe7128da47e5aec032010a585eecc77475a17b3cc52fba9c00c8a9f9e17cc35c5102120ef241412de4408c5a5028b84fb51461f291f017b46d70857e27b2158461c31604bca90a7eae3234010bb0b038d88f809b03132c12ab42168095dc9b2adc366b0c2e9f35822c20a2db4a0cfe9505f156239cdf77bde81e4c4b117fbd087e37087b2eb19292895344dbab000cdd40be5b51d5d7eb2c2fd5fcfcc418e5f2b89927129a2e62c4af17b8d1edcfee490b13f507b75d70a96daa7480d196e5126bba2fe5040ee6a4d9f552d017242f010d0b7a14c0150e6a18e83112a64f44df31554d9fa2cf0dffd525df58da0d49bddd362c872fedce7adf9bfe96f165d9276226b74e4233e768bf120740a4ae49f80c000e913f08c48646027cbf517b8a1dd5fee70c067b880911d1eda8bbf11f7d3b895f1123d5abe503e1bfcb238290bb166573a1566b0e537301e78645cb41f53f6019000f805f3572820ec64d6000190e8a6e1f86925b0fbf2df700a595a3bd9ec73cb12901b8c41c662c95d34914657036259cf1ea45ecd6d37f31f3e2816f897d0388130010380ac2e62d0180a862fd46144fa51b84f4771890dc2c466f50be97561d1ca823685c621119009671e6b3adcb1f22532a2d924c5c92630c8544bf7b718997e33a00110f20c75ac1398952c4743d864705d9230d3f9dd1de25d77a0a14bbea00d87b973fa56cbe59762629e2f243c2e4d142dd34937fb7841dac6d0b1636fdd21bb0250012b9472c22e57dda221e2955cb8c11c27de067cf0cdd0475905ca92ea903ea121d1db07e1fb8cdbff46a142d42d9d51f758a88954241b388dd77a9e1e35f84208e0000000000e63a60d800010000000000000000000000000000000000000000000000000000000000000004b8aff76d1bfa735920000000000000000000000000000000000000000000546f6b656e4272696467650100000012a463ad028fb79679cfc8ce1efba35ac0e77b35080a1abe9bebe83461f176b0a3",
// Algorand
"01000000020d039e5bf4669d56988cb0230c80ad566f8a24f31980424da3d1cd8c43e480c2ce9502cfead322a38ba14c56c3ebb8f6bc4654ef5c6e9d9c42288f47911e173c9ec20004cdc3ad95be19ae8cf7bdb2ce6c72f3c2b216926210d3c8ac1714f6ebb84e48e92dfe44e7b7263666b8ddea39f15672b6934fc0fe91b238043da6255db3ffdf2b0005022956d962de2bd9113a90a50d2f15e6ba333bd4d0895edbdcb8c0b1420c1bf00f296f5e275cbc5e23ada26387d060afc24d23a489c5d365bbec9a23bc1349430107e5aba49b9d9ca48aa1739907163abbe51239700075051e6e8a08788bf62d76da2fd949b47e79068fdde13305867520362fc068c3954cc49aea4a3b5a6d8a5bca0108dc7424cb82acd69812fc1b80c8282fca998a95a8fc998fc54c9d6a908f1eed99629e45af20b3888ce570bbd7b7d9225c63acd3d73f6dfc85c65b34d4bf72ec3301095cbf8412e12db817ae2cae65d69d5c753e223bcbe12d554373af005eccf4131f718ced9d3f63df04ff75c7c1dfa0979ebc0559c8ec91a0955d4044b1224e9f0f010ac182cce8ddcb2503ee4331d7ce8f4b182195692e13efb989c693c78636b0cdd951a9231923b2b3a6165fc3f023bfa4b396358eb938694792b2277852adb3d2f8000b82b0c8cb647e9a19a20a1dd19250195ebb4c21a863453d425b3215f71e020a31613683874a5583b2d9fe280b8fdce016726edc4b887d9685a6cfaacfdf28a230010c5a2573e0ca2c3135f7b8b59e60b28522ce5f85aadd19e18639685a714c1e67004a9b5f22879912f7bfab0dec7a377247f1f3c9f8ec2c947a77f47ab0fc280f63000d5c74fb6dc919817401ad67c54cce5b1f2d74637177e4b742b05b4b36457109252968cd223cdbb737c2393852b5db2030bfdc0240b628945665122a1ac5c35594000e1e3e9f45e82b444fdccdce0d1c3827098cbdc165e84000b2bddec505846d32cb4fda5f0ad42f1ceb4f34f16d243df56987a6692bc83435eb8938f50a49e0b87601115721ba2b656b5f7292040fcb8a82a7f30d0267bfd9309823a6ad910fd6c2752c3d4853dced57c10ae8cd949258b194eac4e9fa1c92ccd8ce26f0d8944a9409460012992833ad7d51bdc2d64ba6cff99d2f278cc30411cd7dc14a7a0986b1529d471132281d00109125116e77c20997ff783e20ceb3e60dcb357992967fcc17d7979b0000000000a1829dfb00010000000000000000000000000000000000000000000000000000000000000004f55042d3c512d39620000000000000000000000000000000000000000000546f6b656e427269646765010000000867e93fa6c8ac5c819990aa7340c0c16b508abb1178be9b30d024b8ac25193d45",
// NEAR
"01000000020d009391f4e4d74d097dbaae292a2191e1b3e47505d444f1eee2e7727a5d1541de0402fbcecfcb0898b61b1422a3e7c541ec8c84472c38e6ffe38fdad9ce32e2f341010388096b8c078d1a7930af3faddbd22480da3fd5df5830adbd4ed05ebfce6b9f7b5968b5db7cbf8ad3900af6bad8622a8c02324506b810f57c02602b6b98018e120004613497daf624ce8be2ff970781ea010f13e1ae73fbaaf82d4f2618189c91606269a2b99bc2e39400045d4d677f71349178c1578ba07b24f466448dd5098202bc00062087876f4a43e2f055a7a2b81abcb2816939ce32a2ce95ee39fa625b7bdfc9022e4c71a85267f2f920362c655247cca60819dc1b354993996f2e9a78888eb818000881c3aab03ef0206be2f29527fdd4fb8ad98529f21f46ee2ebed71705d34c5e422028a1c80ee0f87e1494d9221c411499ed17f273c64ff1458473e781fba5066001096b3bb76d7c3ddb5adf8468cbd0a3b6a6d9ebadcbc10e29a0d4f30e2905ad70a16f9f7d9fec52e90ef8f48ce0428a5a85d8cfc008354c4ad9794f2b96c0c614de010a4e23ace80190db70f3e615313b496a00bc80e40a01e25dbf57f1804f92185bf9771c1ea60165ca0d95a966b31184e6ab4a4b6b83e82a13f9e7466758dbd8ac44010bfa285466156cb293354ab79769e630085398e3abe0253c8b4a137c3bf96f901379ceb2f64f81f4d2c84ee7b14b2fcd9d73e4b6ed27197545035cddded73f9dc7000c42734a51ab194546481119c903947e49889b850540bb6d323222fed217e52cc535bc298eeebf99ce3921b96b71efad06959381d88b439ccc4ba466e32d5fb231000d2c561108c7bb1ab410f99697d58326f0e8af256ab988f98b4e5e3193e4bb9ab9427f0ed9a6dad9c5ab39fce63b52cf514c1118822a90f17fa89ab089ca480a17000ec8487d16115af83481d4615eec4a19afaacc191bb096f5fc010bcfe263bfc08e03748c79148784f53012e83fbbbaed66e4dfe3430f92133ae1d09648b444b915010fb5eba88f84850b20b9d55e96584e6718f792c53356e1a6b31855e611b41d7f706a0943c1d436ca7f279bcfdf4774819ec347aabf6d4a4bd97d5ae31f43ab25060010a0598060028e75922dfc01258dd8db848ab05418f0b94fd13ca35c4ab0b7d64f4e2737a104d8e2bd33f3626f9aad62440d6f1f20da1bd6baae3fa505d8e107ba0100000000bb04e8af00010000000000000000000000000000000000000000000000000000000000000004cd25ad66b4c6a6fd20000000000000000000000000000000000000000000546f6b656e427269646765010000000f148410499d3fcda4dcfd68a1ebfcdddda16ab28326448d4aae4d2f0465cdfcb7",
// Moonbeam
"01000000020d02f227a85a34547b42fca183d7f60177f40756acc43da1e07ef7ce97ed049e484e6f6a608e3ab2a999c5ecdddcc0ff81f3d512912ecd48b409733af707b6dc06bd0003355de163fab102bf7cd43c25d7798c700aceb0263c6391b85c40c51c6d99be6b331fbdc608af5198180cd9dee0be0c9cd33dc513680eff1600b2717b95eb50f200044b06b8bf20fc7227dac43c351a56e84895c2df902aecd7fb21b09b362a43950c417eeb96244f154805eb0e3e7aeb0e912eb04c6f91b5c93235fe657f3b2968450105b8f0069024af922ec28203751d85bcff3a0736b61e553e50b94aea6b003e3bd538dabf99df5eb02f4390b36c975cc22d9ec1ed9d66774e8e882283cabe7b03e40106c22fa08c2eb0fc8e28640a2e7732d5f06ac656b613e8861b1e342790bfc7b40a3b981fdd0798b4150c8ac3b05e34e1c940af78fd9500e7d2c75c10b8084b420f0107884cce4eebd5db26f363ac1c97edfe1bf95d544739ea492a5e30a6246721ac8561c34f99b5d902872b8b1b09b1ca0481cd6498ad3b3cf2e845f773b1820693b201084d62ae956caecbaef4b8ed908aa6f817e48856e2e7f7446a349beabb5c159fc863cbb120957f7850f989f30922dcb17dbaf0bb98cda0b493c9fbf073077342fc00094cb45d8970a5c44b72cdc8ebb689fb723b5b9f659e87f1d67e287e0b699b0bb24cb65f3840ee5a312c63c38ed5f1c8e4c047c245b5e9749687c241125bb6723c000c208a03e49cd9e227650076609bb008d35fd055ac0bba9aefe99b05f09a9d758445c619447437c80aa08d8b2844998b3e38e69be4cf5aced1d260e7e809ce5557010dd5c5d0b921dab5c3de31059ffd1fba74d641720483a70c5c91c3db59cf6d15f85f02aa9a44e3e8b251aa2bd40d7710d8fa676782b3532db336c18a0f0d1a2c26000f32577ed3aaf4da367aae825879f0f51fa8cd71bf728b3d4de63d3e5dd10059310766b33d8c2cb90be1d801503edc91b5660eb7335e0bb19d8cd9a3c8a3de0cba0110f0462f01960ab426f8d916e264e5343e3b9250925c3779b2e204176063e06d4509ea88141d8e1e3b614ba913221cbae44d336c2793e71f501ddcbfe0aed57b1c0011369224f3ff8e81c6a9fb261e89917ef6d30aea54993c41fedac0ee39a321bb3b559a42a08a98cd98509aa72975dad806c85d0661b8b50915f73437ed42bfb83c0100000000c06d7c3d0001000000000000000000000000000000000000000000000000000000000000000455f2d6158fde6ffa20000000000000000000000000000000000000000000546f6b656e4272696467650100000010000000000000000000000000b1731c586ca89a23809861c6103f0b96b3f57d92",
],
};
for (const [contract, registrations] of Object.entries(
contract_registrations
)) {
console.log(`Registering chains for ${contract}:`);
for (const registration of registrations) {
await wallet
.createAndSignTx({
msgs: [
new MsgExecuteContract(
wallet.key.accAddress,
addresses[contract],
{
submit_vaa: {
data: Buffer.from(registration, "hex").toString("base64"),
},
},
{ axpla: 1700000000000000000 }
),
],
memo: "",
})
.then((tx) => client.tx.broadcast(tx))
.then((rs) => console.log(rs));
await sleep(5000);
}
}