diff --git a/contracts/scripts/westend/UpgradeShell.sol b/contracts/scripts/westend/UpgradeShell.sol new file mode 100644 index 0000000000..01b9cc0cf4 --- /dev/null +++ b/contracts/scripts/westend/UpgradeShell.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: Apache-2.0 +// SPDX-FileCopyrightText: 2023 Snowfork +pragma solidity 0.8.25; + +import {WETH9} from "canonical-weth/WETH9.sol"; +import {Script} from "forge-std/Script.sol"; +import {stdJson} from "forge-std/StdJson.sol"; +import {UD60x18, ud60x18} from "prb/math/src/UD60x18.sol"; + +import {BeefyClient} from "../../src/BeefyClient.sol"; +import {IGateway} from "../../src/interfaces/IGateway.sol"; +import {IShell} from "../../src/interfaces/IShell.sol"; +import {GatewayProxy} from "../../src/GatewayProxy.sol"; +import {Gateway} from "../../src/Gateway.sol"; +import {MockGatewayV2} from "../../test/mocks/MockGatewayV2.sol"; +import {Agent} from "../../src/Agent.sol"; +import {AgentExecutor} from "../../src/AgentExecutor.sol"; +import {ChannelID, ParaID, OperatingMode} from "../../src/Types.sol"; +import {SafeNativeTransfer} from "../../src/utils/SafeTransfer.sol"; + +contract UpgradeShell is Script { + using SafeNativeTransfer for address payable; + using stdJson for string; + + struct Config { + address gatewayProxy; + address beefyClient; + ParaID bridgeHubParaID; + bytes32 bridgeHubAgentID; + uint8 foreignTokenDecimals; + uint128 maxDestinationFee; + Gateway.Config initializerParams; + } + + function readConfig() internal pure returns (Config memory config) { + config = Config({ + gatewayProxy: 0x9Ed8b47Bc3417e3BD0507ADC06E56e2Fa360A4E9, + beefyClient: 0x6DFaD3D73A28c48E4F4c616ECda80885b415283a, + bridgeHubParaID: ParaID.wrap(1002), + bridgeHubAgentID: 0x03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314, + foreignTokenDecimals: 12, + maxDestinationFee: 2000000000000, + initializerParams: Gateway.Config({ + mode: OperatingMode.Normal, + deliveryCost: 200000000000, // 0.2 Wnd + registerTokenFee: 0.002 ether, + assetHubParaID: ParaID.wrap(1000), + assetHubAgentID: 0x81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79, + assetHubCreateAssetFee: 200000000000, // 0.2 Wnd + assetHubReserveTransferFee: 200000000000, // 0.2 Wnd + exchangeRate: ud60x18(2400000000000000), + multiplier: ud60x18(1330000000000000000), + rescueOperator: 0x302F0B71B8aD3CF6dD90aDb668E49b2168d652fd + }) + }); + } + + function run() public { + vm.startBroadcast(); + + Config memory config = readConfig(); + + // AgentExecutor + AgentExecutor executor = new AgentExecutor(); + + // Gateway implementation + Gateway gatewayLogic = new Gateway( + config.beefyClient, + address(executor), + config.bridgeHubParaID, + config.bridgeHubAgentID, + config.foreignTokenDecimals, + config.maxDestinationFee + ); + + IShell shell = IShell(config.gatewayProxy); + + shell.upgrade(address(gatewayLogic), address(gatewayLogic).codehash, abi.encode(config.initializerParams)); + + vm.stopBroadcast(); + } +} diff --git a/control/Cargo.lock b/control/Cargo.lock index 41714e3c02..6bf98b1a10 100644 --- a/control/Cargo.lock +++ b/control/Cargo.lock @@ -476,6 +476,17 @@ dependencies = [ "subxt", ] +[[package]] +name = "asset-hub-westend-runtime" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "sp-arithmetic 24.0.0", + "subxt", +] + [[package]] name = "async-channel" version = "2.2.0" @@ -916,6 +927,18 @@ dependencies = [ "subxt", ] +[[package]] +name = "bridge-hub-westend-runtime" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "snowbridge-beacon-primitives", + "sp-arithmetic 24.0.0", + "subxt", +] + [[package]] name = "bs58" version = "0.5.0" @@ -5626,8 +5649,10 @@ dependencies = [ "alloy-primitives", "asset-hub-polkadot-runtime", "asset-hub-rococo-runtime", + "asset-hub-westend-runtime", "bridge-hub-polkadot-runtime", "bridge-hub-rococo-runtime", + "bridge-hub-westend-runtime", "clap", "futures", "handlebars", @@ -5646,6 +5671,7 @@ dependencies = [ "sp-crypto-hashing", "subxt", "tokio", + "westend-runtime", ] [[package]] @@ -8098,6 +8124,16 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "westend-runtime" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "scale-info", + "serde", + "subxt", +] + [[package]] name = "wide" version = "0.7.24" diff --git a/control/Cargo.toml b/control/Cargo.toml index cd634329fd..03c1efc1f2 100644 --- a/control/Cargo.toml +++ b/control/Cargo.toml @@ -7,6 +7,9 @@ members = [ "runtimes/polkadot", "runtimes/bridge-hub-polkadot", "runtimes/asset-hub-polkadot", + "runtimes/westend", + "runtimes/bridge-hub-westend", + "runtimes/asset-hub-westend", "preimage", ] diff --git a/control/README.md b/control/README.md index eda0e483c7..0f2066cf4f 100644 --- a/control/README.md +++ b/control/README.md @@ -5,9 +5,7 @@ Tools for generating governance proposals ## Example: Generate bridge activation preimage ```shell -cargo run --bin snowbridge-preimage -- \ - --bridge-hub-api ws://localhost:8001 \ - --asset-hub-api ws://localhost:8000 \ +cargo run --features polkadot --bin snowbridge-preimage -- \ initialize \ --exchange-rate-numerator 1 \ --exchange-rate-denominator 400 \ @@ -16,11 +14,26 @@ cargo run --bin snowbridge-preimage -- \ --fee-per-gas 80 \ --local-reward 0.01 \ --remote-reward 0.0001 \ - --checkpoint initial-checkpoint.json \ + --checkpoint initial-checkpoint-mainnet.json \ --gateway-address 0x1F98431c8aD98523631AE4a59f267346ea31F984 \ --gateway-operating-mode normal ``` +```shell +cargo run --features westend --bin snowbridge-preimage -- \ + initialize \ + --exchange-rate-numerator 1 \ + --exchange-rate-denominator 400 \ + --multiplier-numerator 4 \ + --multiplier-denominator 3 \ + --fee-per-gas 80 \ + --local-reward 0.01 \ + --remote-reward 0.0001 \ + --checkpoint initial-checkpoint-sepolia.json \ + --gateway-address 0x9ed8b47bc3417e3bd0507adc06e56e2fa360a4e9 \ + --gateway-operating-mode normal +``` + The preimage can be tested using the generated `chopsticks-execute-upgrade.js` script NOTE: Since the 1.2.0 upgrade has not executed yet on mainnet Polkadot, I tested the tool using a local zombienet or chopsticks environment. Pass the `--bridge-hub-api` the `--asset-hub-api` params to override the default API endpoints. diff --git a/control/initial-checkpoint-sepolia.json b/control/initial-checkpoint-sepolia.json new file mode 100755 index 0000000000..a702ad241a --- /dev/null +++ b/control/initial-checkpoint-sepolia.json @@ -0,0 +1,542 @@ +{ + "header": { + "slot": 5864704, + "proposer_index": 210, + "parent_root": "0xd08f9bd270b6694ad194a2ede23fb733ba4fd63ab263293944989f1fc7b95887", + "state_root": "0x394257f55b203118f71ef7da703e5ae85c2d050959c52d607dfd744b9586a7f0", + "body_root": "0xd1bf43861386025f84a8f1ef32db42a87cd63ae0ab30e511b522e7a16fbb6121" + }, + "current_sync_committee": { + "pubkeys": [ + "0x8784a8fa62e0ce23283386175007bb781a8ec91b06fd94f22a20cd869929de37259847a94a0f22078ab14bb74709fac6", + "0x936749ff47e5be307546564a5a4615bd8df52e2590034b2db19846939af3595a79ccabf0f6ff52ca46b9a1de3efd47a5", + "0xb931f211cbda8e85b0c1075611416ac4d79dcff9015e8d507c93b30d40996e2a35e214e6f3c8ac56dcdda7026e8f7d87", + "0x86d6b93c7adea2331a28f178fe8299275d36cf77b816217ae2fe4b79da98126a3864777382aa30895ce2de87121cdc88", + "0x8414962d05eedffc19d7fab3aea967f5386ed62faa0f0b9b8aede8fbd5a94231aef645d3abeb345a2571c9295af60912", + "0xad28da04c80723df1443d5391f998ae9700de91c9fc3f1544d03d698a97cd94fe1753f9915c1d6354185734a80bab484", + "0x81ad5baedeacae12f19cc6d268779c791ddbdbae859d218806cf887b91e83bee3472740b0736877c81c5c1969eeccfec", + "0xa11faaeb9e2c6ebaa2fb66ada1020d7129b75ea8518928c4cee46d6231c27f51ac2273be99ccdf74e859d3a3219c4775", + "0x849ddbdc3ac55ff22a3b2f4bc51892fed694490ab4dd342165ac38c725c8b38921eaefe3c443962925fc3726aa41e236", + "0x9779987412977476a6b4c6cea3f2e08b5960d0a12bc27033b2ffe23792ba6f0ae3167ea6c6962077990cd1c7c4c220c7", + "0xb37334c41a3456b73b61d0eb0777260af9c2e400bbec0e0c0fdb45c39ce0dd19f021d9760f35da801f20486c6be30e9e", + "0xb009efcac1a52e4d752a4810af784df2c0fe4c339ffa8b6a37632eccf04453fb9cc1c04ea27881efb4f141c580f7c568", + "0x951d69f32685615df304c035151bd596d43bc3250f966e0c777544c506e3035d031afa4a3fcca1b85c41a4a041aefc01", + "0x88ce41025aa153a94f91f22e7b96f9342b5e0e1d76274fc70c4df7d08f66d9f7ac86e55a1c6e77693b8b01b2b38bf900", + "0x99daf03fa434a482d9aa4d090884c99b7208c1f5380b9acbf304e1bc33d3d6902afa5d248d20ccf03795e26901356ede", + "0xb8876bda1e709ab16e1347a1107852a7898a334a84af978de39920790b4d82eb0739cbfc34da1c7154dd6e9f7674759c", + "0xb7519d6a1d93cfd11fb19ea534b107b0dd612986d6d56a0d81e8b5faf112919a55e4135a5c5052ef8142535a22ab8bdf", + "0xae36ab11be96f8c8fcfd75382bb7f4727511596bc08c25814d22f2b894952489d08396b458f7884d6b3c0adb69856a6d", + "0xa0567c8983ca672a1176222509b5285e49cc831811cff273c51e2e4d0578a06a12c912843202108c355b0e62a0701c6d", + "0xb6c7360054cf250ac48c41fce8da7a15b4c6f226688a60da737ea2e19b00c94ba728aa588ee72a7ac65f2d63f216285a", + "0x9467b7d5d90b8653b8a2f248f30475856e28407dd3fbc4e1a84445a8f2da5e181796e1cc5c293aab60a6f8a8aba1f4e3", + "0xa356e5b70bc478c625e32a38d29f0a619fdeb665503eedc304d1bf34562d4b6814dfc30aee5aee94ca4bc6394e412765", + "0xb7efcb232d3b639921ce21e80744c293ea77e25982b609e8cc82bd3999a734ca04ca43f41d9c7c15d162e0bbc3152495", + "0xb54fef3e679059cf38a721b61cbd1d2492b06672da0e8ec1132f845f2acab375bf2cba5e9e4fd6833f615586ecc21c7c", + "0x8499a8c3d67d1f6eccf1c69274393dc498cff862ea8e6c11ffb8107ae190d258ddc1d294f2a8f050488df0212063ece2", + "0xb74f6e53b56856f88f8607b1c4e6c9e54aec15c5bb891e7bab00e2a13caab3b1d6529bf0d72d4ce99714b8cb8b973f1a", + "0xb810de8718d5a9967a80341ff13e444ac78b502c6728285a6b32fb83bcf4331c81170a479eae839cc764da7d83500539", + "0xa90cc5b9c4d84f36962d0d55d5bc123dbe5ec5f4fe7b6bf0d009028b3cf14e36c11bc5365391cb4ae548d5eb04fe371b", + "0x8e0d08f5c2db6fa838784ceeca421c579f6b1f8819a17272bbf6d1cbb41c249cdaa52eb2bd2edb1bda1a55d6c2f2a445", + "0x8266f9cc52944d85c50ba04d421c0ecb7ceac774f4485bca84115772ade238fdb5f5bf93f1f6c5288b3a44af177042e5", + "0x87c6cb9ca628d4081000bc6c71425b95570291eb32ef2cf62416bd1ce3666eb2ce54accd69f79d506cefbfe6feb5a1da", + "0xb2235bdf60dde5d0d78c72cb69e6e09153b0154efdbab97e1bc91f18d3cec4f660a80311fe6a1acd419a448ab65b18f1", + "0x93cd53472c2818ab26f77bcc52ea2f37914d80c8abe318f9db59cc5a6943d1b252287d470174a4cbbff0f5ec295a2fc7", + "0xb4f583e10aa9af79b4ebd647e0fffe1c720112727e5ffac4313f236737491fceeee194537786c561cd5777b453e5b03c", + "0x952ae6ce5beb7900cc492b255c44faa7810d70d9490af794f52d0f03f3dbd54fb9a7b940f07f5e6d4dc61dba708c7fc9", + "0x973ab82026d360e2cf5676d883906186bc61b43f60767ca58f11d0995e40780b163961e6e096299ccf1c86175203abde", + "0xaf96a83f97ed0696fd29e59daa24e1857e16371f67089d08129f9c236753ea68c93590dce4d32c9e9818a21014da6f0d", + "0xb2eedff11e346518fa54e161be1d45db77136b724d497e337a55edfc896417de3a180bf90dd5f9d92c19db48e8574760", + "0x8a7b3516e5e10cfb6f5d3882464ca4d5e3437ed70a65f60b3bc586e49ec9ffab1c61dd23ab03ad7806353066a816be61", + "0xa63868892ce200c7d82d7ae041db371c91ce03282adf796c8b1a1652732ec77add0945727b110339a80596c367c97deb", + "0x96d4b9b411319e531bab6af55c13f0adb1dd6b4286784ff807f283e7990dc368c16d536fc5db3d992deb4b0278914e6f", + "0x932d72ae4952031f9070b1d7cc2e827e06eb606e0e10594d19f56d9460cb5d1675bb3e19ce5752512e3bec256a0d88bf", + "0xaa1d80401eca29d9e122ae44f95e0e1d2e49571ab4347843034b0e17e5f16f821ba925ed1316e4d5e18654882a647bf6", + "0xb2fc4478830f2ae4234569346d80b59899247c609b75bd2190a896498539e1f30dca5edbad69f0224918d09f0d7eb332", + "0xa9a591fdd18aec8746435eeead0a54bb88e055f55e91ffdd9bc663ce0bc2937fb296034ebb959d6adcf9af94bbd2f49b", + "0xa7b8e78a69f126e1955242893582fe6093a0aa67c472aeee6212ad5fdbd7d2ca927ce02b65bafed15730a3dfa5f77e1b", + "0xa50ab79cf3f6777a45f28d1b5cdad2c7ea718c60efeeb4c828d6307b29ef319445e6a9f98aa90f351c78b496575150c1", + "0x94becbadca9f8209375477a85794e489d65159d09642da087e72208c2124812d9469b1621d877ebabdd63c165eab8fa9", + "0xa8151dc5a9995a660759e36a9f82ed3be6956395866edcd1413ba15ce96e3210da40d364516a50f87ff78e9de9d59657", + "0x832c4c788c7e60326e29bd47d4840729e676c198af42abb040f4b99bd69609668883b04fafaaf1f13f14a6ac34e1ad2f", + "0x9500df9a85cd8ee801329651bb15d7b77c4a59216005ff61769cdbf9de18da2fdb0d1afe6d5d922353fe22bdc8a8f772", + "0x8117fbcf61d946bee1ce3dff9e568b83716907acfde9b352c3521cfed44158874af8dd5b3906b4a6b49da2fb212ef802", + "0xb38be9ada17ced704a34a7498c4fd6ba2503f6bd886b693d4712267847efa887a26e7da5d60f8bc5014b92bca8b3a12d", + "0x916391f70e2d543b0e69d1e8c5a1c0b754d2191497b96ceeec47b37bd6d97a5a21f8cc8d11435147f5a5eff85f3b3270", + "0x9161ba220130eea190932ecdad9f114e385a31ec51c71cc8de451ffe5e75abcda37227c6a77f7090d4d8bbf134421bca", + "0x870286c76b360f9dd862e7900e9af235d4ade37c0970b88a23b56e27307b8bb2a4ffa4c19176581d39faa7d87711ff6b", + "0x99b74edbac662fff69ba412de466a427a928ce2363c9e59dddd664f6fa50f2e1dd3d464701b01784aa224b3d96dedea3", + "0xa4c4b96071e7bc92e41defba3507ddf423d93f3a94271b1f9812dfc4660e4c9fd24e0dd7aef324c46deb8d7a7c97eaa4", + "0xa4d4f2e41aa4dd511fb737582118587503ae3e03fa658748709ab639c7e5ebba93f9b179e158b6ceb912323d906c0001", + "0xa3969926aa2e52f1a48ac53074b764648b4c71bd43430944679628463cd68398f700d874c14503b53756be451c8ba284", + "0x8f2895cb8c77c498fd4fc0b572115c859168fede213379aa8fa6914f3b1ae2d369a14743e277249611995296de206751", + "0x80e44d3577f12cabaed7074feeb57162ff80b61f86cce8f41d1d1250bc455070b09f6ea9d0c263b7b4824701480f4c14", + "0x936fb9612ea1a7308c9112f3fb6eb4be3171c2c32f3c57576d68467751b47ff7df594cbe05add9c29a07b10013ce215a", + "0x9702ebb1f2eeb3a401b0a65166fa129d829041984fe22b3f51eedfaf384578d33dab73d85164a101ecbb86db9d916419", + "0x8a978ee4be90254fd7003ee1e76e5257462cbb14a64dbca0b32cea078908d7da47588a40ffeb42af11a83a304608c0f7", + "0x85ab3c57517e3c348e7ec13a878b9303ff9aad78ec95b13242e087ec41f05f4a19366ae169fda8afec5300065db58f2f", + "0xb526f40d519e7a8f2c81b69f71b3e2ef079028004c0448ba0608296c2787972491ec6d05ed6a8fbd5ef2da76325a93cb", + "0xac7983d50ec447b65e62ed38054d8e8242c31b40030f630098ce0a4e93536da9179c3f3ae0b34a0b02aad427a97ee60d", + "0x80bdb82b7d583bf1e41653966b0ba3b4fec0e7df2ff08e3fa06fd9064bca0364263e075e1582741a5243bde786c9c32e", + "0x84465a264bc0dc2e8a6f96b1d396812eef35cd2476e0aeda857ccf16198251c31607725acb912038dec78a3669b1dd35", + "0x81e4e885ee0203428056b4cf13ab4f3a21b4e11cbeca5aa262bd216121f84ee859835af55955c43484a934d431db4b83", + "0x85c9217b6f7b8baffda06ffead7174ab9d1d9ec4b10b78d99e742835796a522d6e2b5ddc5c7282757dd896c76698eafb", + "0x919b5187af7dae210f151dc64a9cbd396d1ae04acadebf542a7123004efc7ce00d6e14c170d876fbc64dc1b5d141a5f4", + "0x94179fcc1fa644ff8a9776a4c03ac8bff759f1a810ca746a9be2b345546e01ddb58d871ddac4e6110b948173522eef06", + "0xa4bf094dcd71e1a8dccca76dc7887476154e673551f25b0ca90d6dac8b3b3a2241bc601afeeb1564bde0432db1972999", + "0x8c627caf25eae6764501b9eff35aa90bd4f24952cad712aae20344579e83ecd104ad1f7915edc4f9023b17fddbdb4cd7", + "0xac9f29ad08aaf27581fe1f12e210ad4ac6011507fe3100763a4120f9e439f3c6d191f3fb55aadf58bd865cfd4406c68e", + "0x8027e3716601f04f1bec13c787805cfdff2c85a63390cc3db377594580a3292c730b833a002ae5cfc0a826bacce666bb", + "0xb5d6f664ec92e5343792d5d6b629919c5fd8cfb874677df2264daf02bcd9d12facf9b859d5402839c9022396e20d260b", + "0xb7e74ab2b379ceb9e660087ee2160dafe1e36926dfab1d321a001a9c5adde6c60cd48c6da146d8adfa2bd33162eeaf1a", + "0x942772b7c7c47d4e5957ccf1d6f1450070930af3e2b7eaab0dd7699372445df0cc910e6c0efcf501887dd1adabdaee23", + "0xabd7248ae069d3a3a45b0ef4dd5d7d54b62994e578ea20bdd3b7876596673953b94c5b109a6e4b953b517544b915368f", + "0x8b20a852fc8f0b7cdbbd808c04a0cfd2fbccbdc0cb2361434f0d96341c8bde6155695977768d563b95746dcb4339fe2c", + "0x8361670171ef2bcd2ac108b9d783faf324b8f07528c3eb896a3fe78cd4deeb7a8d878c462312e65ad09fd62f5b936a7b", + "0xb3d41dcf67bc7467dafe414b1dd5e78edf158bfad5dcbe64e33ffb6bec5063b1575d0bb8ef768e5904f718cab7daa8ec", + "0xaec5e915f23d327ceb37612ced6a3fbdcb3153ae075fa37c32146a7aac038fb65e03a87612b9a8c2a89188fa98c0a630", + "0xa267ed144cdd3099c7c418ae92e8f4696704c2c9dcde5ffccc3118c21abe09e3a05e78b067430d4fcfca0f8b1ad0714e", + "0xb560c33950a355119845f63defb355807e56773f636fb836f7746155fad070e384fc1091b8e5c057e4cbc7da9275ecf7", + "0xa0b1a9c7c77311f64d853e06e6331a9a7253f5e71c2ff9184b8d58d5a77b559c7f337d70aef30554bd448fe308de7bea", + "0x89d356593ec09d838cd89306ce83c060ee797bf9eec8523f581cf263925699ef0f7161a790bd00bb09681534ed05ac82", + "0x8f9aededb605db4e499d3c383b0984b1322007c748dea18dc2f1c73da104a5c0bece6bb41d83abdfac594954801b6b62", + "0xa07826925f401a7b4222d869bb8794b5714ef2fc66fba2b1170fcac98bed4ba85d976cf9ee268be8a349ae99e17ac075", + "0xb2df29442b469c8e9e85a03cb8ea6544598efe3e35109b14c8101a0d2da5837a0427d5559f4e48ae302dec73464fec04", + "0x999cec6a31d9b2f280017ddd59138014829fa34cab58e6c35a5014ec364b84712441e7a2f717cf2f0de8d5451e250924", + "0x91cb79d52951d1b901e4a686bf4ad587e31db57ea5af6ffeb93eeafae3929879c386ddec860f803c2dc61055437e6bee", + "0x93e4d7740847caeeaca68e0b8f9a81b9475435108861506e3d3ccd3d716e05ced294ac30743eb9f45496acd6438b255d", + "0x87fec026beda4217b0a2014a2e86f5920e6113b54ac79ab727da2666f57ff8a9bc3a21b327ad7e091a07720a30c507c9", + "0x95aafa379cc6a2b4bdd0cad30b7f0a47839952af41f584219ec201c6c4d54610eb2c04b67b29080acb8cecc5e7543fbc", + "0xb0ed68167a67490bd7d7d49e83341606d6e6fdd99b82e46747c2190d270719f81c5f5f8733646c246260f438a695aa3a", + "0x88982decb0a8d283f0f1349180d4b6ce5a1dd11f994518a4039b9ecf1c6277db13eb05cbcecdd0ad0ac3e78e246e24f5", + "0x89cdbd610e7f57e86438e50874c3c7ba85afa63f5adcab9e454b5c203e4da65d74bb7cac5995a8652d10a6e438a1c2b8", + "0x8bbb3960ede461787338f029dadbf2aa08c792c853f206102da257071be9ad4b0b87d854b5dcec973276ccabc3365c17", + "0x98aebd4bf15916512508a5fe89d814d5d76423c562cd3f0a0af504c8cde53be30f4df00e3ba0229cbf8528e198a0df11", + "0x897f0316496f0c775bf63d546103df711a4b0915c3bf893e22a6837c9585c0e5f2f4740513e0bad4839b76fce3877844", + "0x82daf8d4185bc828f1aa70ef0fbf235df8f44563d154b2d85af9a55977ed619fcba78bd0bf4cec4e565569a40e47b8f5", + "0x9722c1079db7e2e1c49756288a02302b43b8fd92d5671585ac1ea7491123742a2744a526c12c9a0b4c4a80f26342a3a6", + "0x95915d8ff2df795e7baac5433887c39ec6bbb9281c5d3406a4a1a2008f96c6f266adad4824c6c46429a158e36f5e1210", + "0x8bc66e370296649989a27117c17fbc705d5ac2bda37c5dad0e4990d44fcc40d3e1872945f8b11195538af97961b5c496", + "0xb118f77f99ac947df97e7682f0fb446175185b842380af4ee7394531e4f93002c72b41a57a7c1b923a4f24b10924c84f", + "0x84ed656b5291cbb2843ecc8371cbf1447955256059bef4a77133f1a37e7529fb64cefaa2ea973c680329f6110999b22f", + "0xb8e5226ad3515627ae6840235f5f7b7ecd54e8f01079c324d126ec852f6665ebb77168b3f2b3b51580e04a6ff602d5b3", + "0x80414adc7e0a9cb961b1f31682c33d8e01e3b8cf2aa2c2a911ab9b1f54d5c4bf92e18466cacf9b80333112ab015136d2", + "0x8e956ca6050684b113a6c09d575996a9c99cc0bf61c6fb5c9eaae57b453838821cc604cf8adb70111de2c5076ae9d456", + "0xa841fe9ff26db21ade698f6dbfba025d90ae9f81f02af9e008fa0a429b993fb04d06acb93e40a9f81c78f73334555a17", + "0x95c60b5561e53cfc26d620be90f84199ffd6dd9687c1be3a547048e7cba10a0be9bb6da000e7521cbd488d0901d48ee9", + "0xae075b66e5f211c2149c45b211d1297bbc1d9e6497cb3315363c492a9a51ae5b9d0a28bfecd755d68553736901ac6606", + "0x961efdc21788e047fbe8dcb304fa1294fd5aaf5979561bc393bc88e323453e2d62ce3fdf6b5b6e8c8e52e522ec9e71df", + "0xa1f8583c2e00ca686040451b4f99efc06cad42d1cf97542d951eb755d95010ee4b9f6e105a82bb8ac1ae5c7d58d9ef35", + "0xa4eb903990bee2374b14fa66fc262d6821669537e9ba241c87b4b5c9e2b89b32fff4bfc28ab8471ef52e8eebc3e743d1", + "0x8b7cb5b8de09a6dfceddcbaa498bc65f86297bcf95d107880c08854ed2289441a67721340285cfe1749c62e8ef0f3c58", + "0x9953a7cbc152f101a60e3e381f2af17ebe7401e16ef6462d132b8f0f6c6a18837914a1299d1605f9f289b9561112f4bb", + "0x825aca3d3dfa1d0b914e59fc3eeab6afcc5dc7e30fccd4879c592da4ea9a4e8a7a1057fc5b3faab12086e587126aa443", + "0xa5bf4aae622b58a37e722c3d1322b402907f10eec372a42c38c027b95f8ceba0b7b6f9b08956b9c3fdfedaa83d57a217", + "0xa113b889be5dcc859a7f50421614a51516b3aadc60489a8c52f668e035c59d61640da74ba1a608856db4ff1fa1fe2dfd", + "0xaceae0da417676bce07a15498bd37e50f5db82c65a9066e6e3de23ea3c1355e3db0c25cd7799d67a284a41833afe749b", + "0x938bbaa0ba14597067ff4c0a7cfc1529c44160d6f61cfad12246526d84fb7a1ba964d3bbb065a348cf7a98356ee15234", + "0xb412ca62161a4fdaa884f52cfb65cca1e0f1fb483be26ea2f6ce82ab2e202cb6282f9f349769516d45601fb386108352", + "0xa3a930dd70aeeaff0f2e3790927d5425db40467ee106261615de5fcb937bb1621be213ccd8b3a14d96c5908bedc2e421", + "0x8acd9b1213e397b2bd494714aec2d7b964558d0d16b0d4bf9334fe7804fb1d96f484b48b859a0589a61f31eed35c80d0", + "0x86be44888e8208c167097d7d535c04090eaaa61472b4c6b2d5899d7eda8d3f804ae1708c0653d47e965897038d4e13d7", + "0xabbe4d05e3781e11bec29f37876e0081147ae092f4061191444bbf744f327c9dc05b2ff66487942b64d6b3c099334644", + "0xb81328c05a9569116a51d822a9e7bf43f6914214874622150f302fc812917375efc111e49b6b9075842d7d534182d290", + "0xab6e3180dae399d41243f23545e5e6d118844f9b8edba502a3503fd1162ed826f9fc610889a1d685d374b6c21e86067d", + "0x8068da6d588f7633334da98340cb5316f61fcab31ddfca2ab0d085d02819b8e0131eb7cdef8507262ad891036280702c", + "0xb4b7dbe1146cf5b3b7bf3fae3c3556620010b2e7e424aac8063d5c24bf22b002f36b5447dd3fd1f918e5780180a16c5d", + "0x8acf2c566ab7a822dbfc1e535443cd1b634d0048829cf1a77421a26997ae062cd34de318ffa543528646d7732d4d5b7b", + "0x8a9ad977988eb8d98d9f549e4fd2305348a34e6874674bcd6e467c793bba6d7a2f3c20fa44aabbf7151ca53ecb1612f6", + "0x91ead7dacf43905eb5d4b179af29f945479ed074126bad3b5a2bbc1663af5f664fe53a36684e9389ab5819e53f1344fc", + "0xb8c41c09c228da62a548e49cfa107630166ac5c1469abf6d8aab55938ed1d142d5ddbc4f1043eed9496e9002cac99945", + "0x8eebee05702bf1574b12597b72a86d5badef064879fa9d1b9aff5ab75e5c71d81d8bc404f2614085855d6ed87f581238", + "0x97fd3f79ded42a757a003c1e053a030625bb630d53506e15aa796afaa88bbd66bc426894d109f00edcd1fce610871835", + "0x8430c2f598410d90603561ecf068aa483f663bfc76883cd8dfe1d29255b2cc5005ad97bcf19f5cd1554965d5b3dbdb8c", + "0xb1289ab2fd3070ba49b0cebc9cdfff1e8241414af022ea58b7a59aa7fdb066fd060b299796bbc811dec1bee81507d788", + "0x8235a3f09078dd34ce2fc17cc625e061298713b113dda12d354b3d2ba80e11c443b1dd59c9eb5a29513a909645ae97d4", + "0xb354d0d1bd942f79002a2eaf37eb99dab650170e7040c13c824803ed7c1670dc910ccae13bbe58bde003829b140b45ea", + "0x8bff10f91b8c0abb6c9542588da17fa0118ffda4c82626a754887e333d7d69661b3ae4e400da15c49565f8d10a77d0d7", + "0xa14d8d3f02de36328f3f55ac45331baafe5ba3611bd8b362464d69742b214cb703f37b5f39ed1b23cdcf0bf3eb90a81e", + "0x980d3c8ee365a5393fba1a90bf4e1b9c8558cfb51fccbe25837b06e44f5fc80ec90b9b14266098c7ddeed3d4e20a7581", + "0xb551d1ce88cbf4ffbdcb0113a6e319513bd676d0078dd4e6a6f23ad336c1d0fb47a4e427bdedbe0fc8f152353971f81d", + "0x907c827a4fb5f698bf0e6f10ca07741c5b8e3ecb26aa53f938ba34ceb50c01be80c4afc5ac4358a5fda88eadea0cbe73", + "0x9348cf0fbd4414944935b61d9c99a9ad4c1b1825a7059e698a2709b0f07adaa26b32db557f32388b44461285959d25d3", + "0x906245e2dfb6dac3f1a7def80f2dc9eff256f0a797a8b93c742ddeb5bdddd495cb4a2c747cf0467614de98d0a636a546", + "0x995194ca593943e772c58944789a30f8a91f20e58059967fa65364e4357b3483b0f94a3fe34e133bcf967859c5bd026d", + "0xb9f02bc67fe93d74a16acc9325126710cf137ef9c8125ecd8355e071236c1ca4cde6dbf95f734b0ed2ea63384abc2646", + "0x8c1de4264e04ff7e8282faf81c0bfb5943656451be52170211cb7adf4ff21bccbb789400735579c622f69982fcb8e9c6", + "0xa4b507a4bc2bc424297bf8968bf385fae3acc686cff4b7933b4f5b6ef3149995393d5331dbac4b629e8adce01a91a4cc", + "0xa58d2fb1c2612d28c54fafa7f2e1e6c336c24435abdb53e1be9dce9aebecbf7468a348b872549535ac18aa003f83ea87", + "0xaad60e58a19598c5013b37e2e4adc6721eaa7e6e184960d1dc4e6f012246abbb58a047c0679064d5eaaaaff02de881e5", + "0x944f722d9a4879b5997dc3a3b06299182d8f68d767229220a2c9e369c00539a7a076c95f998bea86595e8ec9f1b957bb", + "0xaeeedb3c73a9eadef14396a474ca83ca9e3885fd5f2c1018652360481d0be49524de22fc1ea18bb7abca66df5dc7d309", + "0x87144976cb0d55de66f612725c6d89ab35a5222e8b003329b898e732629f5b7022a7223c9cc9ec820d3d1553e7b2267e", + "0x98dcde79eb47b1e453ca6f61d4d5e53793d46300eda8d1f373500ab57ee766603d30480eab88164714e598ecdcb86cc6", + "0x815f9906177910288cf1d8db5f8b496f662e5da6db4d719c628f128256df976e5044f816986bd6646ecc95d79054885e", + "0xb897fa90529458bdf3cede5ced3f3823dfb9b6d93b96b81429bf05e8f1a80f7c857d458045cfee58296b3ccbc4119abb", + "0xb2baa7eba496ac4ef60ad8ef27a9677f9507820d95a1c572d322621c4d0226b36146bfc3a9ca1645d123acbd945de3f4", + "0xb1c56f028f31f0ff86bdf55788703b4d809becaf3e4d9d349f1b660a07d2f15e127eb72a0e2a5a2742313785a3de43a5", + "0x83386781c73348baeae01ac0f62c3cdd1df5e9dbece81d4bc1141b43f62967430f38150173c649c93e25dadcbed46abb", + "0x8a0192ef0903d7a5ed2e5614a715901f2554b324ee72390974dc90727ff08dafa580041a21a8e6c48a3e08e1b042afab", + "0xa64210fc1ec26ec77704c002a6fc418c4edaf07bd0f8008c434b5ffd5a685adbe61b0319b3646e813f920590179c9859", + "0x92127d55535bf59f2b00511c82f74afe90529d4abfbaca6e53515d63303fe52b4b22383fb026a2a3f88e96d2bd235f6a", + "0xafba279768f0f928b864645aa4e491e9c949bf3dab57efa24eeaa1a9a7d4d5a53c840019354068e64c65a2f5889b8f3c", + "0x9920c52effcbd2a54502957fabc7c560250c08941bc30fba42d1a5101cd987359ab5725152e3638f6fb3b675e12d1060", + "0xa26cc8594de3d8dc93065636bf0c6a71a337e544678f5a019a05a529123496baff8b3496f0bab510487f9d0c28d8e508", + "0x876afcd045c8a18967923733a3a43757652289b0974cd348238a693f30bb57f38664ecb97877a5e5f7d0185039a2bf54", + "0xb00d95908e72c6051478a422eb2231b5f797c2fa5c696ed1e6b9c9996ba1d8236f512443f18c01ce63312c38fa383fd4", + "0xa2053719da2b7501dab42011ae144b3c8d72bd17493181bf3ae79a678068dc3ee2f19d29a60b5a323692c3f684f96392", + "0xa4822712ef5eb5ea82b7e3996eefff5f5eb75770e37e1117e3e6191e9aac860f13cbd804f6b15464fbb0d7f198e0ad59", + "0x8c345a1ce2e44f371e7d84c904bc93d054c55abd51254dee67bd1292369703eaf49117a70e5ac09845c04c60634c743e", + "0x868c13bb6bec7d56afd4e518f2f02b857a58d224fbe698be0e00bc178c1858e6bf5f0f7824fa013d5c8dd6f6e4147974", + "0x87a8480c87603031ffe58a4e3aa7b3305748424219b6b1f1ad480ed2a473fedde4c79b8cc5b6be244f6848eb66e9d9d8", + "0xa3c4269e6fdb75882f0bb83529388fb8e08d025d00d869a2ceefdbd38a060e59535bca43012815444cb84021787f6c7c", + "0xa69f0a66173645ebda4f0be19235c620c1a1024c66f90e76715068804b0d86a23dc68b60bca5a3e685cce2501d76de97", + "0x8e2a281e944a28673fb8b47aaa288375cefd3a6be20e453131d85363ecc4fd5b250e7f9d7ca1e53408c54943041945a2", + "0x9437ce85146202d3815df7f341a182678665dfb74b96006dc9d6acc16110d00b4a02717b702a765566457710ff5a7280", + "0xb07d7c3f1d486f5657d5935e3d67403024ffdcf25da5c460fdadc980d8d6b931de623c4f8a3da5eb6af346193eb36573", + "0x8cb7de40a58577d4879f3764fed030f33d33c66e7bf09c745edab2932bf5fe1dfcf57c451e4f4b19aaac0a65bd439cf7", + "0xb835ffaf54c8b878d3c4262ca2bf5e6be2c691adced622b35d998ed72e1467ba907f4fde8d64ce43b43a8196f48e55db", + "0xb15978155af006d231888257c6e4beac0d3b0782bcbc99e61802a5c031252f05213c9ee9465e6816d9702e4a21cb9571", + "0x9194bc45e11d7276ed1c9ef3ad5a33d6a27372f5568563ca8ee213e2e7029dee404ab5acbaecaef698129798d35fd895", + "0x94334aeba00615aa6318eaffc5f63d84644db4b780ed69eed9280fdd63556bdfef862cac72656aa64e045d0092d8b1c0", + "0x836075979eaf386ff6cb459cfd48fed171ae812b0ac3b38dc24dd8ca905cac1c600be717d4a0defa0a854f40cfaf8c33", + "0xa02883d525e251708bcecf6cfaf7d07fc5e1be92fba24ca8f805e96b7dfe385af449f5687de1dc6707a62ccb08c1d590", + "0x93f941b4fe6c05621e7a651b87669eefd60b6e8a4a8e630a51fa3fee27417b9eebce39f80a5bade9ca779133ad8388f6", + "0xa37185bd96faa526dfd3ddaff89b1eb29ceb4597bfc7e346bff9d6b3225b9ca87cbce0db94f05243c7232ead5f6607e8", + "0x88ad79a0320a896415e15b827a89969b4590d4dfa269b662bdc8f4633618f67b249f7e35a35884b131772d08025bfc32", + "0xb3ed0906d97f72f0fd5fe01cbd06b77d61c69f059f1e87a143a5630073ab69ef8876bc2a5e261d467a7f00f0050388d5", + "0x871e70f0446749e5d48d0c113a27e2e2a13e88e703764dfbdc2bd31e921e6a549c54afab53968ec3d856c5e4e6d029fb", + "0x921b2546b8ae2dfe9c29c8bed6f7485298898e9a7e5ba47a2c027f8f75420183f5abdcfe3ec3bb068c6848d0e2b8c699", + "0xb7e18647b9d147a620b4905caf4a535a5b98e6ff0de5cc95a7dbe9c32bf1ac195a788baf9f51a6d7d0d2233d75af6e85", + "0xb007aa051cbb3c96be3230c80afe7938a5d66d19c52ee4712bf30687807b331d8cb267354ef4a0e339e50df1fc9556a6", + "0x985af1d441b93fa2a86c86b6d7b70b16973d3971e4e89e093b65f0ae626d702202336869af8e3af3923e287547d5384b", + "0x81c850f419cf426223fc976032883d87daed6d8a505f652e363a10c7387c8946abee55cf9f71a9181b066f1cde353993", + "0x912750d2f1b21756662a400236f797b8ba76c73e5af95941a8c6ef9427838c4826715c80942cf8cb7ed01566bc490754", + "0xab73a043ccdfe63437a339e6ee96ef1241264e04dd4d917f6d6bc99396006de54e1e156d38596ba3d15cb1aaa329f8f5", + "0xb42578df29a9eb23bed91db6a1698df49654d2bc1b0d7973b2a7e300e9cf32e0e6ac464d463d4d26e394e7598239c4bf", + "0x85b7ac279df87035b63aea300f6c751b84d299a78788123aba08ba26edc6f8c7352baac4f471d6f4bb6c45428e661249", + "0xb51f0a14a661c23380976f74bf9feade39d33b61db73c10921a537f01fbd72dc0138f6f85f975cd20ecf1ea033a698a0", + "0x9244703338879e3ea00663dcde8f11095de3e38df9277d8c2acc26e72021c222ae40bcc91228789fdf0b69acc3144783", + "0x8180ffffb5abe78c38f2a42a3b7f1a408a6d70d3f698d047d5f1eef3018068256110fcb9fb028c8bdccbc22c0a4c3a20", + "0x93655457967d1f62c3574c4bd85688c92dbdf256f3629818f8c2d75fe12acacc57b6fe78632bb22d4ac7bc1861e59fcf", + "0x96e1482bc27d1b4158b4d482ca7ded9082b543d232b3185a579981a46501aa4dade1b579eb2aa4410039a0a4c5ccec7a", + "0x8be8d356bbf35ccd5980848662b5d6361eef583b535da90cef6c07904ccfb5963aaa230ac30ad63441f60e807434497f", + "0xa4c94498aa688ad1126a4e7dbd3ed12ba44c278b455dab1e02095cb8924cb06ac5106a6b6959240c055edc17c40cb1ef", + "0xace596da3d8c878c8209ab965a1f6a5dd521ad468d0574c4ed74a5a15b9c6ba25fb622daab349daec0a1c4cdc731f502", + "0xb0922acd6da2a95b36de6d0755316594a7e2e32ea774792dc314e8c3cd76d9f1d69df38231e166e24bd42c664f4fbac7", + "0xad83b3c5e9a08161950b1df9261d332dda2602cc68e0f5ee75bfa7e03bbef9edfb4945ca1f139df1bcb8affe8ae025da", + "0xab1abf9cf630d6cbcac0c503df44603142ac81acd647784ae0e8fc97800ef04378bc9d7f2087f959ad4bbbeec65b8dfe", + "0xa7e0ddbae16e4491822684c0da3affecbbd17ef96c5c491ac093c6eb4e162fc7854c367535e296fd3d6265c2ed1210bb", + "0xaa3446aac25f6c23ea16e8f7d19c58d187746ef3c2ac7d8fdf9bdc329409a07589ec8eebafbe2b156e7ba60addc15af8", + "0xa23f3dec1ef45c126f040e5818a1ceea4283bc8ccbf9b8a2d3a770f93872777647893ff86fea463144a355c32a01564e", + "0x8ebfbcaccddd2489c4a29a374a2babc26987c3312607eadb2c4b0a53a17de97107c54eab34def09144b3098c082c286b", + "0xab2053c376c6bd113b89fdb2ae3b8401aa891135345885730c61cac7813f69ea7d906c531be752e28657f73af92d1f4e", + "0xb2b050f06ae74287fdd58e37d3cd9b071a856602bc0c471bac45475ee93f8b6ff689ab14448bf35d3f7e5ef5c1bfe7d3", + "0xa910ab63aef54d8da04a839995ef38893d2cf884539ec81f97b8a4dde1061a27f6d3fe41186d1b7af872c12d44f36397", + "0x88712da029cb3d8b9d5b819d8390b3e31e95debc89636d8e4d46ba8777ee57f16ec04097a6aab1ad9c74f52634fda7f6", + "0x89cd9f6ae7d9a9ff2b4db916ba3af9fe700fcfbd16577bf73a965af938e8cf633020466b0298d3c31300360aa6851af2", + "0x80b61f545f9756a2b4431f1a2690adc7b351dd82edc1eb1bb0f3ec2e730b1484da690ba636701059e51e59f34e124983", + "0xb4a1d185c770ed41021ab0497a2ecf724fbd046784418b8a4af8d654dd9b10c2f3333e6f4f9e6ce385916546a2cb6a8e", + "0xb4d5ad2fa79ce408d9b13523764ad5c7c6c7ffe96fdf1988658ef7baf28118b33d48eb9c3e21d1951fd4499f196d2f0a", + "0xb7c4e55e2b48ba55a71f72387475886e5b4715100e93cd2ae09582fd37e5646b54bd93fba311b65c842bd0aae1424bc7", + "0x9337558dde89640d62984bb0fc12ea5f934c2258d4ce06b187364b9a646bb90966851dacf3be0156b2956cf46d4d8d27", + "0x838d5eee51f5d65c9ed1632d042bb7f88161f3789e6bb461318c5400eaf6728e7ba0f92c18e1a994aa4743145c96164b", + "0x8779a0376579008d0daa99895f548dd091b3abab37e91efc9cabf08835068c983ab0927e7c8eb0396eb83a5e0a713c56", + "0xaf3d3dffbe55842dfb4417295a6ed1a82d26a579199494b305445215045785759be4cb57dc870c7ddaffbc101a854a92", + "0x824c8a1399ab199498f84e4baa49ff2c905cf94d6ac176e27ec5e2c7985140dbaa9cc6303d906a07ab5d8e19adf25d8a", + "0xa79ef16ee66514c2a4f34605a624dbb40d446f2637f943a4acdf0154c162fa12b30e151f03fb1a1cf100052186f94ce8", + "0x94f327bc57ed1ce88ce4504b4810cc8af5bd21a7e07b280a7866ce08e39b6cf7a6560bf73a5f10671271624cd7893970", + "0xb429841b1eb28c9083ddaf05385c2bb55f2b6becb3ab97163b0d0af7c9e878e402110177527f8c6e592a52e9bcb379d6", + "0x84926cf2265981e5531d90d8f2da1041cb73bdb1a7e11eb8ab21dbe94fefad5bbd674f6cafbcaa597480567edf0b2029", + "0x9820d98ef31bab813a0124ce48cacb9d99b2c1c625c41cb3d6e0b21f604ee215d5f37505c86766531dc302622d889766", + "0x8144a5c583a61f809f6a9f5ba97dbed42f4086de71af955f5df5774f66a3581335926663502d7cc7b5129216da225f9c", + "0xb72de0187809aaea904652d81dcabd38295e7988e3b98d5279c1b6d097b05e35ca381d4e32083d2cf24ca73cc8289d2b", + "0xa1304f46f9f1ea67ce613ae845d9ab8b5ba8b65e9c9a672a47105e2ca3d096924091e6d4c3580535da28c210369980ab", + "0xb4790910e2cbef848448f24f63e9dd4a1b122cf65feecf152d5fde282ad6fcc6ea3f9cc23178baf85612020795e4b13a", + "0x8018499ef720e28759133033833edfe17ed23e42f99058bb79fe844ddee823cfdc43916be2dc9724d18f9726e6f1b409", + "0x8ed7790f87f6975e0f3e501901b0bec1778c88bf39588989014c5dda76c2163732e7e5703c9cb2c1a6144ffdac5dcbab", + "0x812b02b308736c6caf709304fd1bcd3acb47d787128fa40beb1a4b512aecb7e4b1991ce37ae77ba4a362c448e65a1f9d", + "0x8f90e72a54e6894d511061957162e753010812346afd4d90cfedb678b99ba1aacf2b6bd0e49b4b0e684da8082a048619", + "0x9276e8051bed8f5dbfc6b35765aac577dd9351d9d6ac1bb14496bd98091005b9a4737b213e347336413743f681f5043b", + "0xa0ebae60a998907a19baa396ae5a82bfe6aa22cf71bfca4e1b4df7d297bd9367bbeb2463bda37aa852ad8fd51803e482", + "0x8e6bbfe492ecbbb8dc8889d3dcd7037a58db605bc6bb79131a72a9b9c1bad630e75f5e5e0c1bc407e73f3d13b116739f", + "0x8a1ebfe5e8dd0aed5024fe582cd677e23544fba784c0dcb73edb2d909a716ada426d8c08b14b488257836efd37971314", + "0x980508c4d1e655cc6200f89a884b3a25c0c05708a3e4a101205c4fd901c3e20a943071a6300bb2614be41a139d4ef1df", + "0xa927cd0d253d91d7d3de7b0a70a3d307596c6e019dee8e5dde03c3e182460b5677f6f17c82f5e3eff38cb6d0006242ab", + "0xa2538a9a793889d6bd6b4c5b0e874389494dfeba824eaf43b34ddbb311086e86912257e634fb5171f0164937c5632547", + "0xb46a818f3e492e231d8fa8de8848c16f0d648a2e0d1c816adf9306a8596fdf45922e59cbf745430570a19e54f45e28f7", + "0xa9a90f77e54405ac852fe5c9691d934e1836c5a5813b3a2c5ce6c2ee6dd01302dcfcd5fae8d7dfcc46ee5ce47c5a6759", + "0x8016d3229030424cfeff6c5b813970ea193f8d012cfa767270ca9057d58eddc556e96c14544bf4c038dbed5f24aa8da0", + "0x87e39895ee4bcf83f007c7e8c560304d55674cdfef16e3fb5a309061dd97f37b12da2acf5b2f05c0d07fd594277d49ff", + "0xa3b109249ac2900806f0f39338da72d4f2cc6d1ac403b59834b46da5705cf436af8499fa83717f954edb32312397c8d9", + "0x998e4ef7eb91c21d4ac2882f4bbd6d544fea90d905d28668a5fdbabd234d96be4aba8918f97d4a1e891a30a8e4e05a4f", + "0x88b49b1130f9df26407ff3f6ac10539a6a67b6ddcc73eaf27fe2a18fb69aa2aff0581a5b0eef96b9ddd3cb761bdbbf51", + "0xb85d9a426a23ca9ee582bc16c203a9352dcc5f85440e46979de80eb572384479b697dc964cafd9457d9f34eeb77bb72a", + "0xa8c167b93023b60e2050e704fcaca8951df180b2ae17bfb6af464533395ece7ed9d9ec200fd08b27b6f04dafa3a7a0bd", + "0xb6e57034ed025ebb5e677911b47ad51fa2cdfa4de4caa158ae5727d33c94c27b5ffa63dffe2219fd17ea26dc6169fee1", + "0x8eb03001ac9e22c6956a682ed458e650785c36d23ddbcd51ac4d9cc991325c02519ff1958987a08eb29ff56ff6e2c293", + "0x9171a7b23f3dbb32ab35712912ebf432bcc7d320c1e278d652200b5d49ad13a49ec8e56a0c85a90888be44de11fc11b5", + "0xaf7616b8f2f56dc68e3e8ae5dc5dbb4b027e53ce652860687f1b15b2f820ea0349baea5af4e3ba4d865429330d3383d8", + "0xa17e8874e2c59a2bdc31cc67095a271d31d5a4852ccf2a82eb7c457a3ba8c87ee5beb93a65a8f7bd04d10247e63d6b84", + "0x92d00e64ed711951aeb852908aeb6fd379ea516872dd512384b1e773ef078e52e6d618beb202d437d2a46bcb78087f7a", + "0x887ac0eaa1020681dd405305299e994a02bc71bbc696484e2138a71ea09fbf0d2675333bdaf428a5a14fd1d275859ab4", + "0xb19ca6e55f349bbb2dc3e429520ff5b2e817972470794f35c1aac8c118b37a694cfcc875b6d72225343799825d2f5c39", + "0x86b5ad456a3d9f838b76de84c40abadcd4bf555d0a06fece54e8523653b68e621ce045945d0ef54cae39e6921dd51e6a", + "0xad2456725ac3aeb0e4ca5c0502a8abb4dbd8a8897d9d91e673fea6a0cffd64d907b714b662d73c0877b98d4ab3ce6a89", + "0xa9d47cb4c69fde551b2648a2444091502a56a778212ab544ac75cc1bd14d0f043f4e31de47fce9a890ef5428cc28dd41", + "0xac4075da4614cd05cd4e23dc11d8aa630a9a2e908ba72f55b9c92d6a14a656794e74282864829954468f02b5b8a1648e", + "0x8df8b35861e00e82826b3a39069e9f3f0fcba18da2370e2fd792b4fbeec8a27111c7dd7e0acef5f4bd9b7a5cc2d6ece9", + "0x850f932ef35fd8693816d950e6209bc04ce26762cf6747d0aee03770e386fa0189790a8295414c0b27695b70988a3c5a", + "0xa05273c40fc40019bcd23f662261757970f3124b77a9fa7c387d74ca32fddb065438f9b456e6b3302517d7492296edce", + "0x81730b4bc5f755e5b99c321a6996c65e57ea2ebe6c0e4e404ed30920194fd76db65304635ad054a8b25bfd982cead47a", + "0xaf9285a3a9b968a90ae384344aa9f981683d548d957c6105fa165da78f17cdf86099f18776a5c9251caa62953841fdd5", + "0xa802b9ffbd4f01b877791aba27da972be4bacacc64a1f45687be4af01b84bd4b83fe2ba1ea78e29d7683f6c777ab2543", + "0x854410e6fb856da8b997ebf28ae2415ce6e1f9f6a4579fad15b5df61709c924a925397b33fe67c89ffad6143a39d756a", + "0xb405520ef829a2a3b8947f1687ab56a7af4026c1a6f99f59aa192bc4f3b12a2de407862ff74ba1b2c51889b8d6b090c7", + "0xb77cdf45f39bf85ab3e8c8afa602f159de8352188aba5378957d468315a2d2326daef83d8ac6b227f1e7a514488afbc6", + "0xb102107527690d9324e9f121aad6b01f15d70140ff3b54e88a6743af913e95df9756f46c88c2525b6468f79497e1903e", + "0xa7d76c88daa3ba893d4bd023e039e1f587565d317609cc9ddce73f2d3c4d6d9facee20fca31c85322f10fdf15267fbec", + "0xb0053550040ab3a3996cba5caf9ad5718867b5f5df273ed8c6520761571f03a94e50b5f8a6a8c42d725383cce97d3cae", + "0xb3c2adbe02028b88109ad0129ef0fe7a895c69317dfe877f420074c349ac0e66bcc9346a865f6af4f074fdb312f6edd3", + "0x9104ac7ad13b441c6b2234a319e1c54e7f172c9a3efcb8c5fab0ac1d388b01895a9a208f59910bc00fb998b0adab1bc3", + "0xb9bd81eb21fb15a997213d1cd073e1a17401b4056eeee5e37bb7bfb3d665df8a4786f10ee82f91170a2f196ff617c0df", + "0x878156b5b59032dd2741bccd4a61040c5698c99ad7a286365c87fc888b5ac839143325c9d379eb7c91396d2c60059e94", + "0xa1d05688a11062e3f9aeb4a5cc3cf7b77bd51220effa2bdf83a563262c7228676390798f984266cda3322c6a5efe12f6", + "0x93947508e60df6a0bd8b3fa24a72ef783c9fde1c3d94de0101c75e0e73d8003d9beedfdf9f40375613180d77815950dd", + "0xae7446b29ca1584f418191760c804348b431dda04eee8bb0afe584dd057eb238e61213d5b1daf4acfc19541f15b6eae6", + "0x8dd55efbf4f9cf6aba47c16730bbc5dc3d332bf2e9f1be8695f755362ad2f8e6f6e2426e52cdf0ba9feb9e17533c4b06", + "0xb3f1319ae34ad1d59207288f01d3d7b7e1bad7733fb4a819a09b011d72a4d736bd3c7afeb74cf56da0e00cf712042ad2", + "0x91a3676c677c28c96817d6eb0aaee4c66b1c051b4c7cd2b98af6dd873c363c6da6e7fc29d7a87596ce751f84fd5e711e", + "0x8ef0930db046c45ca5c69d565d54681d2b6d249e27092736aee582b29de3aac3fd96e1066a57cadd851b4e5334261594", + "0x8a99b6193bd225e9b9b1f8dd668e2a69fe0c5284766d622784fec2bd74e65bb059706de24dfb2fc222568b663ee05c90", + "0xacbb398ea9d782388c834cf7b3d95b9ff80ee2a8d072acae8f9979595910849e657889b994531c949d2601b3ce7b235d", + "0xacdc948f5441a44832c73316a25e0ddcadca50895495daf2b3600206ce0f2ebc5113dc00d0ee497e9bff7d519fb8611f", + "0x820f164a16c02e136911dadbc61b9f6859a7c53d0ea17b8f64b783f7f2f4f549775d3f16e21634dc6d54aef8d56517b2", + "0xb1b0502c4b25af8147220227e09f5f7ada8e44ac266c2b27389ea777614edade2e4cbde3b120e1e8fccae6ddec475e27", + "0xadb198f70a7f1969ed0958be4a9a60dcc1806bced79c63692b9aad6c5648ffea1fed60b24bf4b1862e817cf229e93e83", + "0xb07b0e206b951eb87f13c728882e3d37555c436503542ed72b357e6bc2570b4e44f5c881492c2654a074713a58dc88b2", + "0xa373408beb5e4e0d3ebd5ca3843fe39bb56b77a5d3d2121d4a7a87f9add3ec7376388e9d4b8da0ba69164850cb4b077d", + "0x8719485f6db54a101f19f574fc1fff3a446f3eb4e42c756febcea7b17c7ef4bfb581a84c5bad36831cde06fad79f4d61", + "0xace7fda25c2fb7c18710603c16a0ff0f963352d1582a42a20c9f5603c66f485df8383465c35c31e8379b4cb2ec15b4c4", + "0xb3b7af9258af054362d461a74fcfeb6dcf3a37b6e33b6df32f8317d50d8be8e1970818a6e41c8232b89e1c8f964c6c1d", + "0x968d44188e2d9d1508b0659e96d6dabd0b46aa22df8d182e977c7f59e13aa05d5da09f293f14f6f2ee1b996071cd2f25", + "0x991e0fc7fddd0e316cf4bfe20478f10c15b8bbb618e6be52a5095e457ca52db8adc008f47d4624b6cf4f7d6c2b94a29e", + "0x89a3da03c0d87cf8a3a166dc845824215cc6057f9d2e582866c6d4ba35ecd51e31a8c8203a6f222bc6701beb249052f4", + "0xb6c51ffe2ac7f9ed7c81796ffe865d6f72d0543f70e28866ac926e48972f24ba7b43d824dc0f89e61ecee7360034b268", + "0xa03daf351de2b711e73fcefaa02ba23a90a8c68ae6e31672caf0f36bfe435b663846536e75279ac5fb63559b7397eb24", + "0x8e7d1dc7beb2de660b7da19ebf4cfef3ebb6a3d6f2f367e2dc91105653226e859137879171dccc586c10d9c4cccee7b6", + "0x813bafdf6a64a9c40ef774e6c8cad52b19008f1207fc41bd10ad59c870fda8089299dd057fc6da34818e7a35b5a363e9", + "0xb0d4231814e40e53ab4eed8333d418a6e2e4bd3910148b610dec5f91961df1ad63f4661d533137a503d809ea1ad576fa", + "0x91215fc3f7243638733fe293dab7029e0c4275550102acf5f1638773cf8f8ef2c53ffa5bdfc1b602c269a2b5ab164b7a", + "0xb9aed2648cd189e453bb9b3e8e2ad43b40efbac6e73ebdcc196fbe4f4e71b3306d1dc6ccc39ff71f11fac957ff3b9594", + "0x8c03fb67dd8c11034bd03c74a53a3d55a75a5752ea390bd2e7f74090bf30c271541b83c984d495871d32c98018088939", + "0x94b81d5ad72efb4dd60867e71afcd8e87e1f24bf958d42fc07db66f6185a1e610987ab9ceef63109a36fe5544a0cf826", + "0xa3d8610c2522d330df02511710e52b1d9bdc9f2b156deca12b1bf754266caeac4f449ed965d9863558df43ce9ae65a44", + "0xb4d07d50fbc9634e5f4aeb884974068ea6b94e67e4527207f5f9c41a244943347d69d3c73af74d8de9ab3659d06c6d6a", + "0x8548774c52eb42b88c53d9d07498eb8a3bd087a48316f7ed309b47e009daac3eb06b9cb5eebfa6a9f54042f4a5fd3923", + "0x95c0a30943ef34ef0a644439d857446e1c1736e18360f3f41803b0ca118e79af3fb9c608ec440a8de0f79d2c245b583c", + "0x890992da6257ceb4529d6c5f270407083ed692a1e14b19c060d6e26d00aa940eb163df8c2f5b05db4db141add2e64d88", + "0x8a3987de0131b7461bbbe54e59f6cefe8b3f5051ed3f35e4ad06e681c47beee6614b4e1fba2baa84dff8c94080dddda0", + "0xa73b3c9d16f6c63659179b74b1aa5a0f4447c683ba38f9fc112efaccde4835e5b92c2f7041fa82cd90b2c4932704b9ac", + "0xabed4c86ffc31393f53cc0880ded0c2865df897a56a98a5ab04736623957bf489fb174d9dd8cfcae17c2abc2a77d6914", + "0xb5d7e0f09806db08f6b1eb31ec543670475f46bb08df0781e7fe39e7cd4d5b0c442783a9a2d56da767c9685e27112a54", + "0x804c021152c3304853941847e80480fdaceba3b9676fbe018268cf77d1a1856966c2f9686bb4d4aa0c4118a7e85f83cc", + "0xa4047173b5906c9b4292aaee1e91d9080ae74b1d3eb990449ed1f96bf22c3ee80f4915361e5bf7dccce24ae1618dae77", + "0xb4de7f20e5d141f5682b7e0f0326a3429e00e0236fb8ae58e84c20ed7a986b951cda30d5e2e7e7196119dbd9b0ef5ea1", + "0xb763fa4831bdb5cdf379d5be5d518704664676a0fcae62aa78fb70ed099b189231a3a9a0fd434b09ff1b7f885ab68093", + "0x9366d86243f9d53bdd15d4cd6bf5dd348c2b89012c633b73a35d42fa08950073158ca0a1cfc32d64f56692c2374a020f", + "0x88f5e795cb36ab22bdcff01caca0e9d04db463c3d88cf656c3a0e0f5ac864b7092c738758b4c8f3b65e31995c6aaf267", + "0xa163470735c16f800bed412bf0190d7c85cb2d3d588ffce245ec8e8d4872c756a109367e293caf4f5c0ca1ad31f8be5d", + "0x8ef9b456c6abbc1b912e4b5c9420e8af1a5860eb670894d3ac250ee57f2421f2e4eaa1a7f85df0f3f9b34a24169195fe", + "0x840a53b12c5bb26dfcbfbc6f6ec4b1520547382b704ba545c65adcbf80eddfa0ac3cfa25eb44707608435f8cbbd07aa4", + "0xb404beebf60026ca6843f2953cfcdee494d495c8e2d18865147102ef29a8f0ee470961d2246fe5a450c622d20ca51d53", + "0xac8436e33619e2907659741d66082acbda32612d245fcc8ae31e55f99703fac1a15657342fa66751d3be44fc35d71c36", + "0x8b476b3b065a3b95a3d11ec60a749c2258ddcc5885bfb50b8a086d3fd1e49ff73e1dde733b8981c3d2d206aa0c87b09b", + "0xb28df3e04bde4ec373171401dbd0546f4cb6fa8e9a4a8019aadc653d4e05e0b5b9a64417715dd87f6df9e7b3145f6659", + "0xb9691fb57be7aeb9d43995b8022051f199978d6ad635e1623a1bc1754b250fb8a94985cdc1e623e98767690a417e92a0", + "0x98181e9291622f3f3f72937c3828cee9a1661ca522250dfbbe1c39cda23b23be5b6e970faf400c6c7f15c9ca1d563868", + "0x81e0992e7c1c54c21cac32e36b90b25e1e5b72aac99c953c3c4d019eced64d7e316cbc0840204a4a51a4ad17d8b1d508", + "0x99c935fe18699bca9852200c292690a2b834bac508890c4ee9af1aa6999a8d590bf6a3a274bb55d5a73f1b7095d10f37", + "0x84fe145491d145fbe0c7f9104c9cca07c4f77746dbb93cfefd066b8a1ee61be8fe5d592c18b153f40f41ffdd8020f11c", + "0xb382fa28670a5e14dc954b2db8ace250c73df71ab095304bd8ee28f455ab26cc54f82775a831428e110d1a3a2af709bb", + "0xb33de3de106be61481ccb7f07a7a63cf4d1674010e462388fb8ab5ea08f444ed7a277905207e0b3aa2f00bb9efca984f", + "0x86ca8ed7c475d33455fae4242b05b1b3576e6ec05ac512ca7d3f9c8d44376e909c734c25cd0e33f0f6b4857d40452024", + "0x9545f94c4e9056e360dd999985f8ad06210556fa6f07cff77136a2460605afb0ff1fb1d1a2abe4a4e319fd6c29fff80f", + "0x8be72c12bfaa845ea0c736b7ebe6d4dcb04ee9535c0d016382754e35a898c574fd5de3fe8f0ab6f7e58ba07500536e9f", + "0x951b27456e2af80436608aadec54ebd03bda37fa58452631da63bc5ff3eecb5ffb73d356b19f6c9c4225fcb0da8fda20", + "0x91c5e0b9146fe5403fcc309b8c0eede5933b0ab1de71ab02fac6614753caac5d1097369bdeed3a101f62bbcae258e927", + "0xa7a4330db26ada2aba7de071bd4cfc08a8a8681d6723fa209bbd0e852a7cf315b37ec719289afab0970dd0ff00dbe935", + "0x8368a0f17c8427beb71dbf11a09a2fe8495a33f08c29c74a9a996a88aa01c0a09f9555abeb1ef1592cab99a9e05875cf", + "0x850515e1671f869ad1e207d44867f29b1fe3ec2bd736dbe053b5b72d53ff97d79c28218a7ace24c72d7972ed264f7356", + "0x89d9fb1eded5b0855f66bbb31f192cf63aff013f8400d2d7da90fe764b7ea3c14bb09d632d1b5962c98085258d1277b7", + "0xb7ac87da14b783914ab2e914fb7b536893b7a650cdc5baa1f3b4aca9da77b93a3336671335250e6467a8cd4aa8dc61e9", + "0x8903f7e0c9764ce844b15d84feea04406dc66b195a5f82ff4027f27361e11cf368538137d139368f5a6f42876b04f056", + "0x880b99e77a6efb26c0a69583abb8e1e09a5307ac037962ddf752407cacaf8f46b5a67faf9126bdbcb9b75abf854f1c89", + "0x980a54f9e9d88a7ec08d04edbdd7c9222e99f270b1e978ce7140cc67e38a2e60cc1034dc5b0deb5b60e10697d3bc7295", + "0xb880555398668dc7d064a18ba82d574999a93a6843423703aa8e543fc196607239de7a4258710b85563f2889eacdd0fb", + "0x8f9f85ae6377414fcf8297ed45a736210cd3803f54f33116b0f290b853dc61e99ea08f3c422ed9bc6bdc2f42ab4f56ba", + "0xa77e6e0de5381d8df6a79cfb8c606e3cd92ff937f4589222bca6ff3a18aa10f408c8463a500fd094bde5eddf12c1dfc2", + "0xa92dfa798798ba9e92f9886bfeb6d659b11ddc1228c3e4b8dd804bffa089d648173dc286846679df30acb4b5b5f4fd11", + "0x852ab89dc28bc26f6300800d9a3046bccfb3fe1491f29030f1389f40ca452f6b8a2f6d1541c1e523f1b59f8730823488", + "0xaa19a75f21a14ad5f170e336a0bd07e0c98b9f5d71f91e784d1dc28a5f5eb6870a4eb35bb41edcf9e6efe982ae5c2c5b", + "0xad9e7aa9afc2aa9d0ea6599dd5b1be5a8fedfc899567701b7ceb5f15861de664529e43d41f29ed32352856064b109e44", + "0xa16c910646638c4a57e94129a333ea61b8586d7fcedcd522904c9d019befd6e58344fd5e8f71819cfa841c34b3c812f5", + "0xb53fb1956a2a34a840de4ff0b5b1e0e2fb78a21ac8edbce6be6c26a4b4de6d37e9dce799110a802a344e8541912353d7", + "0xa6dd7816a96af369540013a456722434a5a918673564519a253ae5669ea3afeef509e29f35c6cd3ca7fd29f97987cfe3", + "0x89c0ef0b29b91181a0a2cd13944dcc8e3570a366e5858dad90894b47cd8158b4c4943aa0a293f187f12a663673aa8656", + "0x812d3ded3a3c9e58eecf13a29bb4cc13b01b2a0af322423a29bb0e4f6d9021d1d87ac4af7a2a6b88d34f44a8bc1b3c55", + "0xaf61f03e3ceef5bef36afa29ba2edc7a3b01ca26cec2589edbc9d124dd46e41410e0e3afbae959c83a6f839bbcf8049a", + "0xb31949c4a21181a54928f25f8598ea3dfcacab697a5653beb288d218d312133e5a93f434010ffdab3f3ebd0b43b207dd", + "0x80637db55287f891baa0e865d2423191b9a575620bc4493ea76166d47b99fd89ad8625c21f446b01e3ae17292c78f7ef", + "0x893272a63650b08e5b8f9b3f17f8547b456192ad649c168bafd7166b4c08c5adf795c508b88fd2425f7be8334592afb2", + "0x99efc1b9c40aafca602efa4ea00d8d9dfadcd77a962c833e347a928d8d52da51fb000f673cd17dadc80e9115ba04f91e", + "0xb3acfe8f25eb5153b880a03e07760f7fa30beca475843581b4878ac0412cd2038117f25a48c152e6d60ec16e4b1e9a45", + "0xa53d2a4bef5f3d412fed35ac375f632eb72a6650efe811e2131a6ddcb530f88044f65b80b7d739998115b9f961bbe391", + "0x841d9c04009af59c646e65cb79be10bff240fec75d756c8b8b9c4f54a2463561510f5b2f3d09eacce57cfa4a856d72f7", + "0x9604659740f6d473bd2c470c6751f2a129328e74e01b23368f692ad9b6cce0fe1509c3f82e9f01019b72f6bf3a8e4600", + "0xa7be457b8bc1bfde4865a35b7b1826118edba213b0f0d3cf5d877267cc1559cabe61cefb1e300142a978c29676036179", + "0xb4b80d7fbdb1dbf1567dfb30d8e814e63de670839a8f6ff434fe171416599fef831b8e978d6498851b8a81e0bc8dfb85", + "0x839d65a5c224c5d04352529a5071ea997ff39916dabb38b7adfb2b10b7bf09d83e052d32a5cd56f06b61836d95a1d997", + "0xa639587654e9363590ddda70a97a3ec746652eb1463925f5ec3bd31f831e83db6fccc6b466ba4b9f100aa6be958ed0aa", + "0xade111be80b4791e6d03c55ce80c1f857f06b04e598e9c6c5a4c21809f703ea704387683f0795858af28a0f53b28aec4", + "0x806efb61d1c948efc10dbf9bef30197d1c269e5e7fcf20a84367b26223d33fade413a0bbf4e33f0d1f1a00967289015e", + "0x9267c0e9c176eefab67362ddfcd423a3986b5301c9a7c1c8c0dab93fdb15e562d343a7a9884a0a3378818b1aa1e4091a", + "0xaaca0ec6ad3fa90873674efc2bcd5bcd573be4a356f607ef53fd2f82e8592a2e12525badb89d018ff99755b599e9d321", + "0x941f73b2138b4347ecafcc7b8c3d03f2a54dc49f580394ed08f22b0878ee7cb63d42978f1d320c09e7dbc67648c06f8c", + "0xb3e313e79d905a3cc9cc8a86bd4dba7286fb641c2f93706adb3b932443e32eff2cbed695beeb26d93101c53d5f49d7db", + "0x95fa868db7592c5fb651d5d9971fc4e354dff969d6b05085f5d01fb4da1abb420ecad5ecb0e886e0ced1c9de8f3d5cfe", + "0x8db8b6e067931e8923f8c1d95fda2fa2ebe6ce17a04f420f106eaeb08e98748e3865b9e5fca18494c2359d35627c00b8", + "0xa6e1951cbbb19c0aad6e9251c2c4dcae1d2e50550a32813a47dde9f41e42e2dd0433cddf7e63ab3d320edca48a6d34fb", + "0x82714b00a822c30b317ffc1d4ba163990cc1ffe5769f91906a7f71ad1f62b39865a5314433a4ab2ba762b1d62b01003e", + "0x97c36f7b0edf0b51bbb2ccb04494adbc944406ab4ff31b2195565b766688b7b7047c2be68a853436b3de3ee1ae449937", + "0xa86be58fef115445b909dffac6f51da3fe9214afd9c31fd564bb8f39b1dc3cb895b1222f2c63226b54b60b278ec45edb", + "0x91f870f372e11a473cd0e1265c2675721413d4910f6edf5433a5d8b7f6b7d0c1780b5fa8651fa7966b55bf59cb0e61fd", + "0x8c722aaf5d5dad1845056bf5e56dbff0f8b501f4846610f99da01130a49c96db9962bfd9be20670658cf276cc308be08", + "0x931923f0c1f75a197e6244d67525b524ceb07510a6aae8cb3d56167cc1aacc76d26fadfa1bdfc55d8439c6ee4d4d8174", + "0xaa5d1c1f0a7f6b9b3c3734f85864aa60bddad5121450218d76d82edefd2602685a820965c56d7eefe789d5115cb41e01", + "0xa71d2c8374776f773bad4de6edfc5f3ff1ea41f06eb807787d3fba5b1f0f741aae63503dbca533e7d4d7d46ab8e4988a", + "0xa60642ede2da19e9e4a2fe5a31360fba2c871c25ceb8a867c8189fc62c191a5494cbe59a4a53f643d3025ab264e9cee8", + "0xa8b742cb7f497adfb99bdc6bcaf7f4bdadded2a6d5958680406b3b00545e1812d78e03e20be42b471b1daba84587d574", + "0xb6cacc458ca5a0f04836c5640d34c70cab34cb5c87df28579a0d5e2c72edbc092814bdbe902747ebe3ce36808d8f4dac", + "0x8e2c1e17e7d9c7ffe56334195256b353854b2724bac6fcd6ab2a595cb34d541ae5e0a863968d42b0a07971fc26323251", + "0x8d5e0b8cde1f62cc8f15d9f596e31de09c221da91b10335b92ef1155802e742442def161223333573158723f3408bbd3", + "0xa8bbea7eb6c75bf058c421a3735d8c651e9ae6b1931593b13a588e00aa7dfa62d0982c7cdcbde1d9800fb75a208ed0ab", + "0x880b4ef2b278e1b2cccf36a3b5b7fbce94f106ed9fa2820cb9099a7a540a57e9fdeef5c0fb0a743049828fc2b8c46163", + "0xb4745c71c45bcc30163ed4fad7ad706b188fc1e19cf962f547d5500ff1972493539d2787c0e5ace5a85f7c39d1be4bbb", + "0x903b9bf66c147ddfddacce63c8f12f62e45638383bf91b50e2fef29013ce54a3fd8c3eccc9b8961d91ca2920ba5b0c1e", + "0xa92beb343caf6a945990adcf84302c55d1fccdef96c34a21f2c00d3e206a9b2c6c6b412f66e5d4fafe26ef6446cde705", + "0x96be7deae0729f3d4bbd39b46d028a9a1e83ce863730b97e59422bb2508d88642393d544701b90bc15c33dab8e663297", + "0xa5fe3dfb5031517bb8db0d5ade1e9f438e84bcf23221de003b03d2a2f4ea97629e81c79abc3769bdb8c69a512c189b91", + "0x875133b542cd93b7ca5c236a14dec59d2e2fadcdf7673f09fcbb2282ec50b81410de244229701501d2a33802f751b458", + "0x8804338968d999be8bc1466b29a928a7a52dad4e8332599d38879c0d7d202c248ebde96fab8b00efaf196c67263bb481", + "0x8d50e904d851a5d8e01d7902d8a67b978571705caa5e58db3037350906f96db7bb141354e29ed9a47ef5e59914dcbdc4", + "0xb505d99f6a9492641c6a3d62144a70fd5d83ca74b20b61d173e9aa83a88a0cbd0cf48aa8fa1b3621e15ff43646152912", + "0xa06d4fb6dd8bbbc69e792150a52a0eec8d5eedf1ee155bc3163cb0ba2003d812a031bad35eab535551e858f7683ed02d", + "0x8c6fc89428c74f0c025e980c5a1e576deadf8685f57136e50600175fa2d19389c853d532bb45a3e22b4a879fab1fcb0d", + "0xac2955c1d48354e1f95f1b36e085b9ea9829e8de4f2a3e2418a403cb1286e2599ba00a6b82609dd489eda370218dcf4c", + "0xad40217a1856d77fe520ce6b97a089b2a399ae6b314139cd65d1990e363ef4ceb8d7be2d8152646ed3a9f0b0762dd4f1", + "0x830e70476c6093d8b9c621ddf0468a7890942589cae744300416639a8b3bc59a57a7e1150b8207b6ab83dafcc5b65d3c", + "0x946d585d7aa452d37a8c89d404757c3cce2adf2410e18613483c19199abd88f7a12e206f87a43f6009e42f4e31ed20c0", + "0xa0e072aca8345464ff5156931f804d39c6578c5c47e57b53d0cfdab0fa8f49f35f4ad17284606b342c7cb54debec5ee2", + "0xac4b39bb8f0f62666a50574632764f8b6a1dc98afba5a5dad4409c920a0c0d5d2b5c2506c3a0d2f8727b7b7dce2ba1a8", + "0x83eb2f58e5d1775a8d92ea9eec121a1917dac431ced3b2e9ef7dd670cf719f82c1d0694b312150ced991114925a4912e", + "0xb49c45d9da4aaa64967c28f1fd77b7f709f5a331b58823eb1613856fd8f92635135981830a287e8dbda3a0e0fc481c5b", + "0x921109a390e4d7fbc94dff3228db755f71cb00df70a1d48f92d1a6352f5169025bb68bcd04d96ac72f40000cc140f863", + "0x8d38b9c5873ea4e7beb06a669587d6da8298160bb0fac7fd0ca5201a899392013a9a9eddf6da8e416b52cebf6c85cdc5", + "0xa8f2572a2cc2ecba151a3d5f4040a70172067ddadd8c12ba9d60f993eb0eab6698cb35932949c9a42e45b36a822af40e", + "0x96f1a36134e0d4137a7fe8bbb354f50aaa67f28f194ae2fdbe8be3eb24596678d8c9287765ee90c1f2778d0d607931e0", + "0x99cb1728157a1b7cdd9607cf15911bbcb56b64d52fb0d0117b457853a81ec55913f977850f26e188fa2652579efe9ddf", + "0x8e2e9a1a8bae9fffa594324a2c643ba0609f291146a104ceb9fc1f26d4a25604b97e9fb392c01689c88cac90c310333c", + "0xa0e68d24f784fcb2b71acc2d5871285623c829d0e939146b145e04908b904468a67c07a2f156e6b17bf531adc5777c4b", + "0x801c126abff96fe9b042be8869d2907d0c6963a79901f9db46577a445418b7465a1f4b346933d433e539536a9a2df01c", + "0xa77f96ae68fe39b3ae3260de804cf348d12c954c3320c07e411b95104da25882b414d282a98bbfbf3dff77442244e887", + "0xb87a03970caa520f0026a0320c6c687dd50c22a7a59cca13275852c3c78e77f3c381ba23fc92d36b262c6e8544f7c8dd", + "0xabf72ec0280d56971e599b3be7915f5f224c0ccde2c440237e67b95489f0c9154ace04b7763db228473715f68053f071", + "0x97a16c696787a99fd243193ef8edc43285d9d9b5911a27d057186a0b80b2593236d1dd48baaba1e9a0467114aeb776e8", + "0xa413befdecf9441fa6e6dd318af49173f19e8b95b8d928ebe1cc46cacc78b1377afa8867083be473457cd31dfff88221", + "0xae78b7743d919518bc674f3deac5ea3d0ab05ff0a5494417f5fa91b19413bad5d669fda2f5e630e360d42e2c49597796", + "0xa6d9f67ca319ea9de50c3fed513269b83fa067977adfd1e9d9ee07ad61b2ac1de64a39d7b6897ab55870cf982fe481dd", + "0xad287ead156048967ee1f166f023defcd756681f7fcb24d4eb643a2e2f17a102392fc5f60fb4027805ab1631084cdcc2", + "0xa57d5de556853484b1d88808d2529450238bc467376ded84cfd7b4a1ba258f6d43b5958220f962c57b033abcef1d5158", + "0x982691766a549df56436acd0fe76da78132e027515f27174c10d117bfcc20ed73fc31f5465bd7a22a101094fe913e221", + "0x8658a15df961c25648fd444bdf48a8f7bb382d9212c0c65d56bf9cdb61aab3bd86604c687fb682260dbc0ad2dc84bf01", + "0x81d6fc2f01633e8eab3ba4d72588e14f45b00e68ab887bdd4ec5e8558965db21189310df973837106216777b07fc0805", + "0xae0beb452af7479134a7fbc31a5f59d248e8a67d4c7f73a0e30a51db9cd33a1da3f0ae947fa7e5983aea1343e7daf06a", + "0xb75ac3d5b3dad1edf40a9f6b5d8923a81872832eb3a38e515539cec871a353b07cb477f6d55cf15ba2815a70458aac32", + "0xb306bec1a3a64231530aecb8e62b75ddc63abf0193496cb8bf0c84ac8a1c018d4fe91aa1c65871e7e05b26b6a5ec61ad", + "0x8f72b5243a8c4f200c1041f6d8180c3e2cb6ea83143a7b3f279452ec2c8da5eee758149fb31f394a14c232bf797c9186", + "0x805c06e565ee67cab0cbccb92b6656fdb240b430766eade3c6b0a0b1b93c840e2b4f028601451dca135c783239463880", + "0xb79b9289dbc045e1d6ab747360696e0a2e4ba4ab7013ca7f977b6ef6e9ce9c4aa41f2b526ec3e5209df3d2cacd548da6", + "0xa985148687bf844e129357ec354eb46da54e5ef9539e9b7b46ccd6aa6a2018dfefdb85899809d0e4b844bea831b3d6ba", + "0x83bbd31e799ac14686085868e8ea7587c7c7969c7015bfe45fd8e3a3847ad5338005f9cdf58396b2ea833c4af98bd9ca", + "0xa6b434ac201b511dceeed63b731111d2b985934884f07d65c9d7642075b581604e8a66afc7164fbc0eb556282e8d83d2", + "0xa3ffc3dad920d41ec3f4c39743ef571bcabb4430465d9aa811d0f0a7daa12bee4ed256527d16a6e937bf709ebb560ebd", + "0xb4f4ed1bd274a852189719a8808a8f214c8386e844ca9ba13161b75d04c74633b1d8a758ce0b23ccbce8052494c81c3f", + "0x80822499f96a1a8c0048f01f389dfcaaa5d8269c332dbb507fe46f270bcfd5f67c53f827fd867221592dbde77b6b37ab", + "0x8ff5d2e6c98b1fea70cb36ea8ed497fd1233b9418948ac58c6c379ed35fb10f8253ef188c909d5e77e81b5b8e2a4ad17", + "0x8c016e86b7aa752edd697c022116713d6a6b61538c7e46f4d76c99c29313615ec18cd21f48d99d495db3d9ed09fe946d", + "0x8222c8b91834f5f9dd76115d0dcc354f00ab603a672fa4b4da338a876a3bee70df9f3bd8e3b39e0fe93c3f0f889b210e", + "0x8cbbc2d0e840d91f2c7d6f18303180ef8b2251438d4dee08dccae55a2926c5d2db0562375ba8252bcb9c850666cb6db4", + "0x92aacbfc412bcaa0fef865869a76f290b7d568ae177314b4a2d8ff26ff1dcdd384dd6b49bbc924dd078ccce9ccf43332", + "0x904d722d7ec51a476a852428d9a246a5ca3be87ae2281e2716e999f82cb9d8d75ade0929ad80c186ada55f839a78f57c", + "0xa789e9c3adb59961b2b8c2f733dbba03ec0476bdfe8c4f139600d5d4ff44658e42d33f4f08c91719b8a33fe8cf0eb270", + "0x8c9fefe233d0d657349b7efcdc368f5aaead27071d224af780874751e7d241f6b88f7650fbb4133043b24bbebc12aa48", + "0x886eb6dc3be8f658889c928111c6301d91eaeda1ff3e368b7a33e3c5b10d2812f831f5de61a68ed79179a470ab2b0d5c", + "0x8d6e3df29419bd0da1deba52c1feebe37744108685b49ca703e1b76fb4d612e3959d3b60b822506e5c0aac50b2f5eee2", + "0x94bb68c8180496472262455fd6ab338697810825fa4e82fc673f3ac2dacfd29ee539ac0bfe97eb39d4ef118db875bab6", + "0xb156d9d22722bb6e3b75b3b885b64642fa510ba7e6057657cd61bac43fb9c284d05bb09e2d4b78a2a4ddada85da9c702", + "0x963a298fc8876b702424a697929c7a1938d298075e38b616c8711f1c7116f74868113a7617e0b4783fc00f88c614e72d", + "0x8effe3fb27c9f76bbd78687b743b52e6f3330eddc81bc9006ca81fd640f149d73630af578694f4530833c2151522dcc1", + "0xb9e6c9f2562e90bd3008669a42151538b70faf028cc5bbc09fd6ab3febc626df911fcc65744a2ad793ecaf3f91a1f701", + "0xb932153d28a8fbb79da2d5f14bb58ad025d19c4886b5814fd7c55f8e3510f2eb339ac6c1cc5ffd23cf777d8fbac9a94f", + "0x85e8259980319bc750607f5004aa83f7d7eaf20eeb164fe3db13864e3d31e1f53ea42dd6d9b30ce710089f193c895d51", + "0x952a95612aecce4321d2c17aabd2fb260b1cb41df5f76f5b82b46cf818d7a4f18e5e2944cddcd2280a993c0af4f834fe", + "0x90e5db75f3787b819df471712f87b6f3281437090f5db7a2c21b07164446292a414c687e41de2d1ca00786b093239c64", + "0xb0a47515752c15e4dbeaf9ee27fab3b5c0db82f5c685e8f716fd7d8764164944340430fe3db1a5679e6ffea5a16dd919", + "0xa650864b7eb6769aaf0625c254891447351e702e40d2be34dfd25f3b5367370de354318d8935ba18db7929270455ae6a", + "0xadcb5800f23406e752002d49d5edfdcf48466e6d3f2c39169693cc9a043ef5d2ee960ed767a12cfcf1ce5f4cd25ac11f", + "0x88b2c68b425269850c1a4f4608aca194da5c641adeb99e2f7fb92e34b8245dff066e73bde072be60f7f2c3d3d13de3b6", + "0x942a12ba2f7b8708afb97e8ecba8f4ce66df1f862ceb86b3452f9b80eff581ee729f0f3122c6234075c6970270e2c367", + "0x8027bc62b59f9f15613e38da74ccc71fc3eaee26f096d187c613068195ce6eb64176013f2d86b00c4b0b6a7c11b9a9e5", + "0x997f2b2bc0b67fba72980631b2f739196b503923d42347ae57659bb455801b6763ed4032fe59837a5abb475e4cfc79fe", + "0x8d6bed5f6b3f47b1428f00c306df550784cd24212ebac7e6384a0b1226ab50129c0341d0a10d990bd59b229869e7665a", + "0xadbc658d54f46fc805767257f5e87d013112f0c6335605e9e763cd4745a1271b0e0b83902d5aaea6f8b46485d2e82042", + "0xa6266fca079b955d49cccb8532fad7e44d5e7656c54613d415d2fe28702b4dcbc2e43e280a919320a4fcf789fbf3e2f6", + "0x8370c38104527d5b510faea45b92b1d077f9a43558178fc11204e4d0486fa94dee0c1d072b42c9f49770e63673c33fdc", + "0xb3285148b91dab139b053442bdd14d627ba1e1250fe469f0f2df854b6e6ff4a18671ae3879ec9f7d8091f99f092162e9", + "0xa9300a33927335f482dd0e44d0d57704ebeb278f732ae8301073cb7d5e457f02a0cb03268de71d284b8c23fb96947469", + "0xb60df25a7ac1ad14aef7e8809c4bfc190b715f94f14b0534cc2e4015ff6c322883cbdc5309e05d67dca4bc641c69725a", + "0x8ee8873de7cd28a54ba2c63a80b63399effed76b154e96ed26e7c0668b9f2476e298688b6a00c4b2ab9d020a897695d7", + "0xa59249e4dfb674dfdc648ae00b4226f85f8374076ecfccb43dfde2b9b299bb880943181e8b908ddeba2411843e288085", + "0xb31e89b4a034c1b73d43b3d63ea3bddea682a6a5327eff389c70b13e9e72185b0327682a0cb1ff3c4a4f8ba08b13d898", + "0x8cd9d7e953c7ae07ee785d68a999e702565960d376692d9ea468556ad141229b1f3bc97926818c078901f73ecc578e93", + "0x87a14f1c57cd287ee02d13b94a592c89f43e56400571a59f44b2681c0be0f2d31442d2b64ca717d8bc9a4a61c65590e6", + "0x89ca7b7aecbb224d04839d36e4b323ae613c548a942830317aa0d51a111cb40d7e6d98600dc1a51e5a32f437951d6c7c", + "0x8e58219fde5e9525e525b16b5332ef27fb6269e08e8c0bd3c20abb89397864b2c5bb55f5b6e03e8f0a0e0b04e5f72b14", + "0xb6e6277b86cd5284299ced867d37ab98090ac44a94deef6898aeadd177e64605440c15b9609c07e71fe54c95b61873b0", + "0xb2349265be33d90aaf51362d015ce47c5ffe33e9e6e018c8c6e39336d9327ccdd13d25e792eb33b43ed89a162f6ac2fd", + "0x93418c312300d4431dd7c304fab1639d8ef927d4a36518642c574769953321cd0516e0dad739d6e2ccd315ff1257275a", + "0x8a277710379ba4fababb423026d9db3d8dcd484b2ee812439eb91b4b5177d03433b7a4486e43efbf2d2ce8ccfeabf323", + "0x973091c0e72354e0df4488c9078d11eec554c8cc84771955595aa1dd7a7a9dc9e29597924678aa20ecefe5be394fd2ae", + "0xafbb939073c28492a46f8028a010297e395c7449fd8a1e24322e605c1db6cda1581f2810cdb45c273189084b82e74b22", + "0xa6786ee290d753ebdb1dfbab50579b4769974143cc7ba8558235ea4208e848b2bef2c2d719ce34b05ff026ca40d8f35b", + "0x89461cb2dadf51d6f1208b0965c8eabec895d7b19b7d90d3c6e49dbe75a75c30fd26db3dfb169dd46a4342280225032a" + ], + "aggregate_pubkey": "0x9917629eefcd5957549986dab788000fcf7a868133f81282c61435f6ff4705769f12439953156e78515b40205837822b" + }, + "current_sync_committee_branch": [ + "0x0e2e7568f901fe8fbc20543037b8cc705ff03be463de45e688e5000c051757d8", + "0x6bfbd2cd311875622c431b3c1d1844aa189dcf02f720485659186c5042e36699", + "0x38148bfeca085c76f1675a45199b2dc80e0b3afc81038addde51d0f230010b88", + "0x2655779b8b6e5a1db17d3e12fd3f6bdf5784a552df3c20ee01b3f767a4972536", + "0xdaf97a995588d51d9d6dfbb077b22eafa39ee2f19eab7e3964cfd9f01a125779" + ], + "validators_root": "0xd8ea171f3c94aea21ebc42a1ed61052acf3f9209c00e4efbaaddac09ed9b8078", + "block_roots_root": "0x7b798b0fc9a3490fb5eb8afe64d8796f5cd0344308d881d411cfec144e3164d8", + "block_roots_branch": [ + "0xef23b92301fd7566f4284de6bfe779993de1e960af244561dc96d6739a697032", + "0x3e89227b6d95e3551fb4b4801d0303f2b27625d542bf6e580573f3ab912f50f3", + "0x9a655a3d1126b4f740c9f483057ad150618a5cd174de3a04a2c55df3e050b923", + "0x198e7330e9c34d6961a9b8523073b20d9403f008811f98b88494e861f2c4c73c", + "0x9aa46d0c5b8954bd7064aabede2bea1987961413edb40aa7d8607a2262949865" + ] +} \ No newline at end of file diff --git a/control/preimage/Cargo.toml b/control/preimage/Cargo.toml index 54650be4c8..952d46ab85 100644 --- a/control/preimage/Cargo.toml +++ b/control/preimage/Cargo.toml @@ -37,8 +37,12 @@ serde_json = "1.0.114" sp-crypto-hashing = "0.1.0" handlebars = "5.1.2" +westend-runtime = { path = "../runtimes/westend", optional = true } +bridge-hub-westend-runtime = { path = "../runtimes/bridge-hub-westend", optional = true } +asset-hub-westend-runtime = { path = "../runtimes/asset-hub-westend", optional = true } + [features] -default = ["polkadot"] +default = [] rococo = [ "rococo-runtime", "asset-hub-rococo-runtime", @@ -50,3 +54,8 @@ polkadot = [ "asset-hub-polkadot-runtime", "bridge-hub-polkadot-runtime", ] +westend = [ + "westend-runtime", + "asset-hub-westend-runtime", + "bridge-hub-westend-runtime", +] diff --git a/control/preimage/src/asset_hub_runtime.rs b/control/preimage/src/asset_hub_runtime.rs index 18bad3b5ed..bed56b85f0 100644 --- a/control/preimage/src/asset_hub_runtime.rs +++ b/control/preimage/src/asset_hub_runtime.rs @@ -7,3 +7,8 @@ pub use asset_hub_rococo_runtime::*; pub use asset_hub_polkadot_runtime::runtime_types::asset_hub_polkadot_runtime::RuntimeCall; #[cfg(feature = "polkadot")] pub use asset_hub_polkadot_runtime::*; + +#[cfg(feature = "westend")] +pub use asset_hub_westend_runtime::runtime_types::asset_hub_westend_runtime::RuntimeCall; +#[cfg(feature = "westend")] +pub use asset_hub_westend_runtime::*; diff --git a/control/preimage/src/bridge_hub_runtime.rs b/control/preimage/src/bridge_hub_runtime.rs index 79406971b0..0b574870a9 100644 --- a/control/preimage/src/bridge_hub_runtime.rs +++ b/control/preimage/src/bridge_hub_runtime.rs @@ -7,3 +7,8 @@ pub use bridge_hub_rococo_runtime::*; pub use bridge_hub_polkadot_runtime::runtime_types::bridge_hub_polkadot_runtime::RuntimeCall; #[cfg(feature = "polkadot")] pub use bridge_hub_polkadot_runtime::*; + +#[cfg(feature = "westend")] +pub use bridge_hub_westend_runtime::runtime_types::bridge_hub_westend_runtime::RuntimeCall; +#[cfg(feature = "westend")] +pub use bridge_hub_westend_runtime::*; diff --git a/control/preimage/src/commands.rs b/control/preimage/src/commands.rs index 1e64e7c79c..83e6032262 100644 --- a/control/preimage/src/commands.rs +++ b/control/preimage/src/commands.rs @@ -28,6 +28,48 @@ use crate::bridge_hub_runtime::runtime_types::{ }; use crate::bridge_hub_runtime::RuntimeCall as BridgeHubRuntimeCall; +#[cfg(feature = "polkadot")] +pub mod asset_hub_polkadot_types { + pub use crate::asset_hub_runtime::runtime_types::staging_xcm::v3::multilocation::MultiLocation; + pub use crate::asset_hub_runtime::runtime_types::xcm::v3::{ + junction::Junction::AccountKey20, junction::Junction::GlobalConsensus, junction::NetworkId, + junctions::Junctions::X2, + }; + pub fn get_asset_id(chain_id: u64, key: [u8; 20]) -> MultiLocation { + return MultiLocation { + parents: 2, + interior: X2( + GlobalConsensus(NetworkId::Ethereum { chain_id: chain_id }), + AccountKey20 { + network: None, + key: key, + }, + ), + }; + } +} + +#[cfg(feature = "westend")] +pub mod asset_hub_westend_types { + pub use crate::asset_hub_runtime::runtime_types::staging_xcm::v4::location::Location; + pub use crate::asset_hub_runtime::runtime_types::staging_xcm::v4::{ + junction::Junction::AccountKey20, junction::Junction::GlobalConsensus, junction::NetworkId, + junctions::Junctions::X2, + }; + pub fn get_asset_id(chain_id: u64, key: [u8; 20]) -> Location { + return Location { + parents: 2, + interior: X2([ + GlobalConsensus(NetworkId::Ethereum { chain_id: chain_id }), + AccountKey20 { + network: None, + key: key, + }, + ]), + }; + } +} + pub fn gateway_operating_mode(operating_mode: &GatewayOperatingModeEnum) -> BridgeHubRuntimeCall { let mode = match operating_mode { GatewayOperatingModeEnum::Normal => OperatingMode::Normal, @@ -218,23 +260,14 @@ pub fn set_gateway_address(params: &GatewayAddressArgs) -> BridgeHubRuntimeCall } pub fn make_asset_sufficient(params: &UpdateAssetArgs) -> AssetHubRuntimeCall { - use crate::asset_hub_runtime::runtime_types::staging_xcm::v3::multilocation::MultiLocation; - use crate::asset_hub_runtime::runtime_types::xcm::v3::{ - junction::Junction::AccountKey20, junction::Junction::GlobalConsensus, junction::NetworkId, - junctions::Junctions::X2, - }; use subxt::utils::AccountId32; let chain_id = crate::bridge_hub_runtime::CHAIN_ID; - let asset_id = MultiLocation { - parents: 2, - interior: X2( - GlobalConsensus(NetworkId::Ethereum { chain_id: chain_id }), - AccountKey20 { - network: None, - key: params.contract_id.into_array().into(), - }, - ), - }; + #[cfg(feature = "polkadot")] + use asset_hub_polkadot_types::*; + #[cfg(feature = "westend")] + use asset_hub_westend_types::*; + + let asset_id = get_asset_id(chain_id, params.contract_id.into_array().into()); let owner = GlobalConsensusEthereumConvertsFor::<[u8; 32]>::from_chain_id(&chain_id); AssetHubRuntimeCall::ForeignAssets(pallet_assets::pallet::Call2::force_asset_status { id: asset_id, @@ -249,22 +282,12 @@ pub fn make_asset_sufficient(params: &UpdateAssetArgs) -> AssetHubRuntimeCall { } pub fn force_set_metadata(params: &UpdateAssetArgs) -> AssetHubRuntimeCall { - use crate::asset_hub_runtime::runtime_types::staging_xcm::v3::multilocation::MultiLocation; - use crate::asset_hub_runtime::runtime_types::xcm::v3::{ - junction::Junction::AccountKey20, junction::Junction::GlobalConsensus, junction::NetworkId, - junctions::Junctions::X2, - }; let chain_id = crate::bridge_hub_runtime::CHAIN_ID; - let asset_id = MultiLocation { - parents: 2, - interior: X2( - GlobalConsensus(NetworkId::Ethereum { chain_id: chain_id }), - AccountKey20 { - network: None, - key: params.contract_id.into_array().into(), - }, - ), - }; + #[cfg(feature = "polkadot")] + use asset_hub_polkadot_types::*; + #[cfg(feature = "westend")] + use asset_hub_westend_types::*; + let asset_id = get_asset_id(chain_id, params.contract_id.into_array().into()); AssetHubRuntimeCall::ForeignAssets(pallet_assets::pallet::Call2::force_set_metadata { id: asset_id, name: params.name.as_bytes().to_vec(), diff --git a/control/preimage/src/constants.rs b/control/preimage/src/constants.rs index a45a1ebe84..2026906c73 100644 --- a/control/preimage/src/constants.rs +++ b/control/preimage/src/constants.rs @@ -24,3 +24,17 @@ mod polkadot { #[cfg(feature = "polkadot")] pub use polkadot::*; + +#[cfg(feature = "westend")] +mod westend { + pub const POLKADOT_SYMBOL: &str = "WND"; + pub const POLKADOT_DECIMALS: u8 = 12; + pub const ASSET_HUB_ID: u32 = 1000; + pub const ASSET_HUB_API: &str = "wss://westend-asset-hub-rpc.polkadot.io"; + pub const BRIDGE_HUB_ID: u32 = 1002; + pub const BRIDGE_HUB_API: &str = "wss://westend-bridge-hub-rpc.polkadot.io"; + pub const RELAY_API: &str = "wss://westend-rpc.polkadot.io"; +} + +#[cfg(feature = "westend")] +pub use westend::*; diff --git a/control/preimage/src/helpers.rs b/control/preimage/src/helpers.rs index 3f0ee1c7ef..907c451b0e 100644 --- a/control/preimage/src/helpers.rs +++ b/control/preimage/src/helpers.rs @@ -8,8 +8,11 @@ use crate::Context; use crate::bridge_hub_runtime::{self, RuntimeCall as BridgeHubRuntimeCall}; #[cfg(feature = "polkadot")] -use crate::relay_runtime::api::runtime_types::xcm::v2::OriginKind; -use crate::relay_runtime::api::runtime_types::{ +use crate::relay_runtime::runtime_types::xcm::v2::OriginKind; +#[cfg(feature = "westend")] +use crate::relay_runtime::runtime_types::xcm::v3::OriginKind; + +use crate::relay_runtime::runtime_types::{ pallet_xcm, sp_weights::weight_v2::Weight, staging_xcm::v3::multilocation::MultiLocation, @@ -24,8 +27,6 @@ use crate::relay_runtime::api::runtime_types::{ VersionedLocation, VersionedXcm, }, }; -#[cfg(feature = "rococo")] -use crate::relay_runtime::runtime_types::xcm::v3::OriginKind; use crate::relay_runtime::RuntimeCall as RelayRuntimeCall; @@ -172,7 +173,7 @@ pub async fn query_weight_asset_hub( pub fn utility_force_batch(calls: Vec) -> RelayRuntimeCall { RelayRuntimeCall::Utility( - crate::relay_runtime::api::runtime_types::pallet_utility::pallet::Call::batch_all { calls }, + crate::relay_runtime::runtime_types::pallet_utility::pallet::Call::batch_all { calls }, ) } @@ -181,9 +182,10 @@ pub fn force_xcm_version() -> AssetHubRuntimeCall { junction::Junction::GlobalConsensus, junction::NetworkId, junctions::Junctions::X1, location::Location, }; + let chain_id = crate::bridge_hub_runtime::CHAIN_ID; let location = Box::new(Location { parents: 2, - interior: X1([GlobalConsensus(NetworkId::Ethereum { chain_id: 1 })]), + interior: X1([GlobalConsensus(NetworkId::Ethereum { chain_id })]), }); AssetHubRuntimeCall::PolkadotXcm( diff --git a/control/preimage/src/main.rs b/control/preimage/src/main.rs index c3e07721d6..121622683c 100644 --- a/control/preimage/src/main.rs +++ b/control/preimage/src/main.rs @@ -265,7 +265,7 @@ pub enum Format { struct Context { bridge_hub_api: Box>, asset_hub_api: Box>, - relay_api: Box>, + _relay_api: Box>, } #[tokio::main] @@ -298,7 +298,7 @@ async fn run() -> Result<(), Box> { let context = Context { bridge_hub_api: Box::new(bridge_hub_api), asset_hub_api: Box::new(asset_hub_api), - relay_api: Box::new(relay_api), + _relay_api: Box::new(relay_api), }; let call = match &cli.command { diff --git a/control/preimage/src/relay_runtime.rs b/control/preimage/src/relay_runtime.rs index 216d6c4383..406dabb768 100644 --- a/control/preimage/src/relay_runtime.rs +++ b/control/preimage/src/relay_runtime.rs @@ -4,6 +4,11 @@ pub use rococo_runtime::runtime_types::rococo_runtime::RuntimeCall; pub use rococo_runtime::*; #[cfg(feature = "polkadot")] -pub use polkadot_runtime::runtime::api::runtime_types::polkadot_runtime::RuntimeCall; +pub use polkadot_runtime::runtime_types::polkadot_runtime::RuntimeCall; #[cfg(feature = "polkadot")] pub use polkadot_runtime::*; + +#[cfg(feature = "westend")] +pub use westend_runtime::runtime_types::westend_runtime::RuntimeCall; +#[cfg(feature = "westend")] +pub use westend_runtime::*; diff --git a/control/preimage/src/treasury_commands.rs b/control/preimage/src/treasury_commands.rs index 59fb738af5..b48b961e92 100644 --- a/control/preimage/src/treasury_commands.rs +++ b/control/preimage/src/treasury_commands.rs @@ -1,7 +1,7 @@ use crate::{constants::*, TreasuryProposal2024Args}; use crate::helpers::utility_force_batch; -use crate::relay_runtime::api::runtime_types::{ +use crate::relay_runtime::runtime_types::{ pallet_treasury, polkadot_runtime_common::impls::VersionedLocatableAsset, staging_xcm::v4::{ diff --git a/control/runtimes/asset-hub-westend/Cargo.toml b/control/runtimes/asset-hub-westend/Cargo.toml new file mode 100644 index 0000000000..f606cc7695 --- /dev/null +++ b/control/runtimes/asset-hub-westend/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "asset-hub-westend-runtime" +version = "0.1.0" +edition = "2021" + +[dependencies] +codec = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +subxt= { workspace = true } +sp-arithmetic = "24.0.0" diff --git a/control/runtimes/asset-hub-westend/asset-hub-metadata.bin b/control/runtimes/asset-hub-westend/asset-hub-metadata.bin new file mode 100644 index 0000000000..9e94c484f1 Binary files /dev/null and b/control/runtimes/asset-hub-westend/asset-hub-metadata.bin differ diff --git a/control/runtimes/asset-hub-westend/build.rs b/control/runtimes/asset-hub-westend/build.rs new file mode 100644 index 0000000000..1aaec9dcb5 --- /dev/null +++ b/control/runtimes/asset-hub-westend/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rerun-if-changed=asset-hub-metadata.bin"); +} diff --git a/control/runtimes/asset-hub-westend/src/lib.rs b/control/runtimes/asset-hub-westend/src/lib.rs new file mode 100644 index 0000000000..db14278410 --- /dev/null +++ b/control/runtimes/asset-hub-westend/src/lib.rs @@ -0,0 +1,7 @@ +#[subxt::subxt( + runtime_metadata_path = "asset-hub-metadata.bin", + derive_for_all_types = "Clone" +)] +mod runtime {} + +pub use runtime::*; diff --git a/control/runtimes/bridge-hub-westend/Cargo.toml b/control/runtimes/bridge-hub-westend/Cargo.toml new file mode 100644 index 0000000000..9556706913 --- /dev/null +++ b/control/runtimes/bridge-hub-westend/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "bridge-hub-westend-runtime" +version = "0.1.0" +edition = "2021" + +[dependencies] +codec = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +subxt= { workspace = true } +snowbridge-beacon-primitives = "0.2.0" +sp-arithmetic = "24.0.0" diff --git a/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin b/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin new file mode 100644 index 0000000000..cf58cacd72 Binary files /dev/null and b/control/runtimes/bridge-hub-westend/bridge-hub-metadata.bin differ diff --git a/control/runtimes/bridge-hub-westend/build.rs b/control/runtimes/bridge-hub-westend/build.rs new file mode 100644 index 0000000000..31865465d0 --- /dev/null +++ b/control/runtimes/bridge-hub-westend/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rerun-if-changed=bridge-hub-metadata.bin"); +} diff --git a/control/runtimes/bridge-hub-westend/src/lib.rs b/control/runtimes/bridge-hub-westend/src/lib.rs new file mode 100644 index 0000000000..b315939ab5 --- /dev/null +++ b/control/runtimes/bridge-hub-westend/src/lib.rs @@ -0,0 +1,17 @@ +#[subxt::subxt( + runtime_metadata_path = "bridge-hub-metadata.bin", + derive_for_all_types = "Clone", + substitute_type( + path = "snowbridge_beacon_primitives::updates::CheckpointUpdate", + with = "::subxt::utils::Static<::snowbridge_beacon_primitives::updates::CheckpointUpdate<512>>", + ), + substitute_type( + path = "sp_arithmetic::fixed_point::FixedU128", + with = "::subxt::utils::Static<::sp_arithmetic::fixed_point::FixedU128>", + ) +)] +mod runtime {} + +pub use runtime::*; + +pub const CHAIN_ID: u64 = 11155111; diff --git a/control/runtimes/polkadot/src/lib.rs b/control/runtimes/polkadot/src/lib.rs index 027fdec613..122d66008a 100644 --- a/control/runtimes/polkadot/src/lib.rs +++ b/control/runtimes/polkadot/src/lib.rs @@ -1,3 +1,7 @@ -pub mod runtime; +#[subxt::subxt( + runtime_metadata_path = "polkadot-metadata.bin", + derive_for_all_types = "Clone" +)] +mod runtime {} pub use runtime::*; diff --git a/control/runtimes/westend/Cargo.toml b/control/runtimes/westend/Cargo.toml new file mode 100644 index 0000000000..4415312c2d --- /dev/null +++ b/control/runtimes/westend/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "westend-runtime" +version = "0.1.0" +edition = "2021" + +[dependencies] +codec = { workspace = true } +scale-info = { workspace = true } +serde = { workspace = true } +subxt= { workspace = true } diff --git a/control/runtimes/westend/build.rs b/control/runtimes/westend/build.rs new file mode 100644 index 0000000000..d86c71c05c --- /dev/null +++ b/control/runtimes/westend/build.rs @@ -0,0 +1,3 @@ +fn main() { + println!("cargo:rerun-if-changed=polkadot-metadata.bin"); +} diff --git a/control/runtimes/westend/polkadot-metadata.bin b/control/runtimes/westend/polkadot-metadata.bin new file mode 100644 index 0000000000..8badb6fce7 Binary files /dev/null and b/control/runtimes/westend/polkadot-metadata.bin differ diff --git a/control/runtimes/westend/src/lib.rs b/control/runtimes/westend/src/lib.rs new file mode 100644 index 0000000000..122d66008a --- /dev/null +++ b/control/runtimes/westend/src/lib.rs @@ -0,0 +1,7 @@ +#[subxt::subxt( + runtime_metadata_path = "polkadot-metadata.bin", + derive_for_all_types = "Clone" +)] +mod runtime {} + +pub use runtime::*;