mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 09:50:01 +00:00
Merge branch 'main' into feat/contracts-versioning-system
This commit is contained in:
commit
83dab47a25
29 changed files with 1553 additions and 194 deletions
|
|
@ -43,16 +43,16 @@
|
|||
"randaoCommitDelay": 4,
|
||||
"randaoCommitExpiration": 24,
|
||||
"minNumRequiredSignatures": 3,
|
||||
"startBlock": 1299215,
|
||||
"startBlock": 1303065,
|
||||
"rewardsMessageOrigin": "0x56490bd3f367447bfaf57bb18e7a45e1b2db7d538fe42098e87d2aa106c6afdd",
|
||||
"initialValidatorSetId": 2179,
|
||||
"initialValidatorSetId": 2186,
|
||||
"initialValidatorHashes": [
|
||||
"0x07ce4f2cd558f4d4b529a3362b6ff7d616ca0893b53252dc62829b8218ea5c10",
|
||||
"0xaea5344f086d3be7c94cf3a47436bcbb98de23cf1ee773a9180cfecab0453a50",
|
||||
"0xcd3a33755b27fe810dfb780b3f1df1c25efa1bb826ca618e41022fa900876087",
|
||||
"0x4f4ce8cad711a4b33d15095091f8a98eaf9bfd1b39a9159e605cf5d6783cc667"
|
||||
],
|
||||
"nextValidatorSetId": 2180,
|
||||
"nextValidatorSetId": 2187,
|
||||
"nextValidatorHashes": [
|
||||
"0x07ce4f2cd558f4d4b529a3362b6ff7d616ca0893b53252dc62829b8218ea5c10",
|
||||
"0xaea5344f086d3be7c94cf3a47436bcbb98de23cf1ee773a9180cfecab0453a50",
|
||||
|
|
|
|||
1
contracts/deployments/stagenet-hoodi-rewards-info.json
Normal file
1
contracts/deployments/stagenet-hoodi-rewards-info.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"RewardsAgent": "0x2E039a88838241d1Ac738cf2e3C5763ba12571e7","RewardsAgentOrigin": "0x56490bd3f367447bfaf57bb18e7a45e1b2db7d538fe42098e87d2aa106c6afdd"}
|
||||
1
contracts/deployments/stagenet-hoodi.json
Normal file
1
contracts/deployments/stagenet-hoodi.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"network": "stagenet-hoodi","BeefyClient": "0xE65dc4eCA2Fd428361076e1f204731224CeB4292","AgentExecutor": "0x35d3FdCB19A246a1763421168dF69dA3dE207063","Gateway": "0xE9352f1488F12bFEd722c133C129ca5F467463d1","ServiceManager": "0xED73cCaF067cebC706B2B3a6cf2b9af2c696c6d3","ServiceManagerImplementation": "0x5E1DA2eE025Dac2F8c391Ac86ebA20bd34c32465","RewardsAgent": "0x2E039a88838241d1Ac738cf2e3C5763ba12571e7","DelegationManager": "0x867837a9722C512e0862d8c2E15b8bE220E8b87d","StrategyManager": "0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41","AVSDirectory": "0xD58f6844f79eB1fbd9f7091d05f7cb30d3363926","RewardsCoordinator": "0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7","AllocationManager": "0x95a7431400F362F3647a69535C5666cA0133CAA0","PermissionController": "0xdcCF401fD121d8C542E96BC1d0078884422aFAD2"}
|
||||
268
operator/Cargo.lock
generated
268
operator/Cargo.lock
generated
|
|
@ -1521,7 +1521,7 @@ dependencies = [
|
|||
"pallet-message-queue",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"sp-core",
|
||||
"sp-runtime",
|
||||
"sp-std",
|
||||
|
|
@ -2607,7 +2607,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "datahaven-mainnet-runtime"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"bridge-hub-common 0.13.1",
|
||||
|
|
@ -2719,8 +2719,8 @@ dependencies = [
|
|||
"shp-treasury-funding",
|
||||
"shp-tx-implicits-runtime-api",
|
||||
"smallvec",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-merkle-tree",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
|
|
@ -2763,7 +2763,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "datahaven-node"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"async-channel 1.9.0",
|
||||
"clap",
|
||||
|
|
@ -2876,7 +2876,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "datahaven-runtime-common"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"fp-account",
|
||||
|
|
@ -2910,7 +2910,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "datahaven-stagenet-runtime"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"bridge-hub-common 0.13.1",
|
||||
|
|
@ -3022,8 +3022,8 @@ dependencies = [
|
|||
"shp-treasury-funding",
|
||||
"shp-tx-implicits-runtime-api",
|
||||
"smallvec",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-merkle-tree",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
|
|
@ -3066,7 +3066,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "datahaven-testnet-runtime"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"bridge-hub-common 0.13.1",
|
||||
|
|
@ -3178,8 +3178,8 @@ dependencies = [
|
|||
"shp-treasury-funding",
|
||||
"shp-tx-implicits-runtime-api",
|
||||
"smallvec",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-merkle-tree",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
|
|
@ -3371,7 +3371,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "dhp-bridge"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"frame-system",
|
||||
|
|
@ -3379,7 +3379,7 @@ dependencies = [
|
|||
"pallet-datahaven-native-transfer",
|
||||
"pallet-external-validators",
|
||||
"parity-scale-codec",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-std",
|
||||
|
|
@ -8639,8 +8639,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-bucket-nfts"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -8696,8 +8696,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-cr-randomness"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"frame-system",
|
||||
|
|
@ -8716,7 +8716,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-datahaven-native-transfer"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -8724,7 +8724,7 @@ dependencies = [
|
|||
"pallet-balances",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
|
|
@ -8828,7 +8828,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-balances-erc20"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"fp-evm",
|
||||
"frame-support",
|
||||
|
|
@ -8851,7 +8851,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-batch"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"evm",
|
||||
"fp-evm",
|
||||
|
|
@ -8890,7 +8890,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-call-permit"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"evm",
|
||||
"fp-evm",
|
||||
|
|
@ -8956,7 +8956,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-datahaven-native-transfer"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"evm",
|
||||
"fp-evm",
|
||||
|
|
@ -8970,7 +8970,7 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"precompile-utils",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
|
|
@ -8980,8 +8980,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-file-system"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"fp-account",
|
||||
"fp-evm",
|
||||
|
|
@ -9049,7 +9049,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-proxy"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"evm",
|
||||
"fp-evm",
|
||||
|
|
@ -9093,7 +9093,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-evm-precompile-registry"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"fp-evm",
|
||||
"frame-support",
|
||||
|
|
@ -9144,7 +9144,7 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"serde",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
|
|
@ -9154,7 +9154,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-external-validators"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9178,7 +9178,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-external-validators-rewards"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9191,7 +9191,7 @@ dependencies = [
|
|||
"pallet-timestamp",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
|
|
@ -9220,8 +9220,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-file-system"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9249,8 +9249,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-file-system-runtime-api"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
|
|
@ -9417,7 +9417,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-outbound-commitment-store"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"frame-system",
|
||||
|
|
@ -9445,8 +9445,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-payment-streams"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9465,8 +9465,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-payment-streams-runtime-api"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
|
|
@ -9493,8 +9493,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-proofs-dealer"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9519,8 +9519,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-proofs-dealer-runtime-api"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
|
|
@ -9541,7 +9541,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-proxy-genesis-companion"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"frame-system",
|
||||
|
|
@ -9558,8 +9558,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-randomness"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9652,7 +9652,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-session-benchmarking"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9696,8 +9696,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-storage-providers"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -9718,8 +9718,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "pallet-storage-providers-runtime-api"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
|
|
@ -13881,8 +13881,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-actors-derive"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"proc-macro2",
|
||||
|
|
@ -13894,8 +13894,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-actors-framework"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bincode",
|
||||
|
|
@ -13913,8 +13913,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-blockchain-service"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"array-bytes",
|
||||
|
|
@ -13969,8 +13969,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-blockchain-service-db"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"diesel",
|
||||
|
|
@ -13993,8 +13993,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-client"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"array-bytes",
|
||||
|
|
@ -14067,8 +14067,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-common"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bigdecimal",
|
||||
|
|
@ -14131,8 +14131,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-file-manager"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"hash-db",
|
||||
|
|
@ -14155,8 +14155,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-file-transfer-service"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"array-bytes",
|
||||
|
|
@ -14184,8 +14184,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-fisherman-service"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"diesel",
|
||||
|
|
@ -14215,8 +14215,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-forest-manager"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
|
@ -14241,8 +14241,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-indexer-db"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"bigdecimal",
|
||||
"chrono",
|
||||
|
|
@ -14269,8 +14269,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-indexer-service"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"array-bytes",
|
||||
|
|
@ -14320,8 +14320,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-rpc"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"array-bytes",
|
||||
"async-trait",
|
||||
|
|
@ -14366,8 +14366,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shc-telemetry"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"log",
|
||||
"substrate-prometheus-endpoint",
|
||||
|
|
@ -14383,8 +14383,8 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|||
|
||||
[[package]]
|
||||
name = "shp-constants"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"sp-core",
|
||||
"sp-runtime",
|
||||
|
|
@ -14392,8 +14392,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-data-price-updater"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
|
|
@ -14407,8 +14407,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-file-key-verifier"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
|
|
@ -14425,8 +14425,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-file-metadata"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"hex",
|
||||
"num-bigint",
|
||||
|
|
@ -14441,8 +14441,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-forest-verifier"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
|
|
@ -14458,16 +14458,16 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-opaque"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"sp-runtime",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "shp-session-keys"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"parity-scale-codec",
|
||||
|
|
@ -14481,8 +14481,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-traits"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
|
|
@ -14495,8 +14495,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-treasury-funding"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"log",
|
||||
"shp-traits",
|
||||
|
|
@ -14506,8 +14506,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-tx-implicits-runtime-api"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
|
|
@ -14519,8 +14519,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "shp-types"
|
||||
version = "0.4.0"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.0#ea2611cb3b47e448fa2812082e130c697b66277a"
|
||||
version = "0.4.1"
|
||||
source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.1#b5d6eb2ffa153d97e079d1fda382773b466f4702"
|
||||
dependencies = [
|
||||
"sp-core",
|
||||
"sp-runtime",
|
||||
|
|
@ -14800,7 +14800,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-beacon-primitives"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"byte-slice-cast",
|
||||
"frame-support",
|
||||
|
|
@ -14845,7 +14845,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-core"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"bp-relayers",
|
||||
"ethabi-decode",
|
||||
|
|
@ -14922,8 +14922,8 @@ dependencies = [
|
|||
"log",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-verification-primitives",
|
||||
"sp-core",
|
||||
"sp-io",
|
||||
|
|
@ -14936,7 +14936,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-merkle-tree"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"array-bytes",
|
||||
"hex",
|
||||
|
|
@ -14977,7 +14977,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-outbound-queue-primitives"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"ethabi-decode",
|
||||
|
|
@ -14989,7 +14989,7 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"polkadot-parachain-primitives",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-verification-primitives",
|
||||
"sp-arithmetic",
|
||||
"sp-core",
|
||||
|
|
@ -15003,12 +15003,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-outbound-queue-v2-runtime-api"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-merkle-tree",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"sp-api",
|
||||
|
|
@ -15018,7 +15018,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-pallet-ethereum-client"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -15031,8 +15031,8 @@ dependencies = [
|
|||
"scale-info",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-ethereum 0.3.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-pallet-ethereum-client-fixtures",
|
||||
|
|
@ -15048,8 +15048,8 @@ name = "snowbridge-pallet-ethereum-client-fixtures"
|
|||
version = "0.9.0"
|
||||
dependencies = [
|
||||
"hex-literal 0.3.4",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-std",
|
||||
|
|
@ -15057,7 +15057,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-pallet-inbound-queue-v2"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"bp-relayers",
|
||||
|
|
@ -15071,8 +15071,8 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"serde",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-pallet-ethereum-client",
|
||||
"snowbridge-pallet-inbound-queue-v2-fixtures",
|
||||
|
|
@ -15093,8 +15093,8 @@ name = "snowbridge-pallet-inbound-queue-v2-fixtures"
|
|||
version = "0.10.0"
|
||||
dependencies = [
|
||||
"hex-literal 0.3.4",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"sp-core",
|
||||
"sp-std",
|
||||
|
|
@ -15124,7 +15124,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-pallet-outbound-queue-v2"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"alloy-core",
|
||||
"bp-relayers",
|
||||
|
|
@ -15138,8 +15138,8 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"serde",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-inbound-queue-primitives",
|
||||
"snowbridge-merkle-tree",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
|
|
@ -15170,7 +15170,7 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"polkadot-primitives",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"snowbridge-pallet-outbound-queue",
|
||||
"sp-core",
|
||||
|
|
@ -15183,7 +15183,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-pallet-system-v2"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -15195,7 +15195,7 @@ dependencies = [
|
|||
"parity-scale-codec",
|
||||
"polkadot-primitives",
|
||||
"scale-info",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"snowbridge-outbound-queue-primitives",
|
||||
"snowbridge-pallet-outbound-queue-v2",
|
||||
"snowbridge-pallet-system",
|
||||
|
|
@ -15211,10 +15211,10 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-system-v2-runtime-api"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"parity-scale-codec",
|
||||
"snowbridge-core 0.23.0",
|
||||
"snowbridge-core 0.24.0",
|
||||
"sp-api",
|
||||
"sp-std",
|
||||
"staging-xcm",
|
||||
|
|
@ -15222,7 +15222,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-test-utils"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-benchmarking",
|
||||
"frame-support",
|
||||
|
|
@ -15242,12 +15242,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "snowbridge-verification-primitives"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
dependencies = [
|
||||
"frame-support",
|
||||
"parity-scale-codec",
|
||||
"scale-info",
|
||||
"snowbridge-beacon-primitives 0.23.0",
|
||||
"snowbridge-beacon-primitives 0.24.0",
|
||||
"sp-core",
|
||||
"sp-std",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ edition = "2021"
|
|||
homepage = "https://datahaven.xyz/"
|
||||
license = "GPL-3"
|
||||
repository = "https://github.com/datahavenxyz/datahaven"
|
||||
version = "0.23.0"
|
||||
version = "0.24.0"
|
||||
|
||||
[workspace]
|
||||
members = [
|
||||
|
|
@ -272,42 +272,42 @@ fc-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stabl
|
|||
|
||||
# StorageHub
|
||||
## Runtime
|
||||
pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
## Client
|
||||
shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
## Precompiles
|
||||
pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.0", default-features = false }
|
||||
pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.1", default-features = false }
|
||||
|
||||
|
||||
# Static linking
|
||||
|
|
|
|||
|
|
@ -242,6 +242,16 @@ pub struct ProviderConfigurations {
|
|||
#[arg(long, default_value = "60")]
|
||||
pub extrinsic_retry_timeout: Option<u64>,
|
||||
|
||||
/// Mortality period for extrinsics in number of blocks.
|
||||
///
|
||||
/// Determines how long a submitted transaction remains valid before expiring.
|
||||
/// Must be a power of 2 between 4 and `BlockHashCount` (4096). Non-power-of-2 values
|
||||
/// will be rounded up to the next valid power of 2. Lower values mean transactions
|
||||
/// expire faster, which helps recover from stuck nonces after block reorgs, but also
|
||||
/// reduces the window for a transaction to be included on-chain.
|
||||
#[arg(long, value_name = "BLOCKS", default_value = "256", value_parser = clap::value_parser!(u32).range(4..))]
|
||||
pub extrinsic_mortality: Option<u32>,
|
||||
|
||||
/// On blocks that are multiples of this number, the blockchain service will trigger the catch of proofs.
|
||||
#[arg(long, default_value = "4")]
|
||||
pub check_for_pending_proofs_period: Option<u32>,
|
||||
|
|
@ -607,6 +617,11 @@ impl ProviderConfigurations {
|
|||
bs_changed = true;
|
||||
}
|
||||
|
||||
if let Some(extrinsic_mortality) = self.extrinsic_mortality {
|
||||
bs_options.extrinsic_mortality = Some(extrinsic_mortality);
|
||||
bs_changed = true;
|
||||
}
|
||||
|
||||
if let Some(check_for_pending_proofs_period) = self.check_for_pending_proofs_period {
|
||||
bs_options.check_for_pending_proofs_period = Some(check_for_pending_proofs_period);
|
||||
bs_changed = true;
|
||||
|
|
@ -790,6 +805,16 @@ pub struct FishermanConfigurations {
|
|||
help_heading = "Fisherman Strategy Options"
|
||||
)]
|
||||
pub fisherman_ttl_threshold_seconds: Option<u64>,
|
||||
|
||||
/// Mortality period for extrinsics in number of blocks.
|
||||
///
|
||||
/// Determines how long a submitted transaction remains valid before expiring.
|
||||
/// Must be a power of 2 between 4 and BlockHashCount (4096). Non-power-of-2 values
|
||||
/// will be rounded to the nearest valid power of 2. Lower values mean transactions
|
||||
/// expire faster, which helps recover from stuck nonces after block reorgs, but also
|
||||
/// reduces the window for a transaction to be included.
|
||||
#[arg(long, value_name = "BLOCKS", default_value = "256", value_parser = clap::value_parser!(u32).range(4..))]
|
||||
pub fisherman_extrinsic_mortality: Option<u32>,
|
||||
}
|
||||
|
||||
impl FishermanConfigurations {
|
||||
|
|
@ -810,6 +835,20 @@ impl FishermanConfigurations {
|
|||
FishermanOrdering::Randomized => FileOrdering::Randomized,
|
||||
};
|
||||
|
||||
// Build blockchain_service options
|
||||
let mut blockchain_service = None;
|
||||
let mut bs_options = BlockchainServiceOptions::default();
|
||||
let mut bs_changed = false;
|
||||
|
||||
if let Some(extrinsic_mortality) = self.fisherman_extrinsic_mortality {
|
||||
bs_options.extrinsic_mortality = Some(extrinsic_mortality);
|
||||
bs_changed = true;
|
||||
}
|
||||
|
||||
if bs_changed {
|
||||
blockchain_service = Some(bs_options);
|
||||
}
|
||||
|
||||
Some(FishermanOptions {
|
||||
database_url: self
|
||||
.fisherman_database_url
|
||||
|
|
@ -823,6 +862,7 @@ impl FishermanConfigurations {
|
|||
maintenance_mode: false, // Skipping maintenance mode for now
|
||||
filtering,
|
||||
ordering,
|
||||
blockchain_service,
|
||||
})
|
||||
} else {
|
||||
None
|
||||
|
|
|
|||
|
|
@ -1305,6 +1305,11 @@ where
|
|||
// Set the indexer db pool
|
||||
builder.with_indexer_db_pool(Some(db_pool));
|
||||
|
||||
// Configure blockchain service options for the fisherman
|
||||
if let Some(c) = fisherman_options.blockchain_service.clone() {
|
||||
builder.with_blockchain_service_config(c);
|
||||
}
|
||||
|
||||
// Spawn the fisherman service
|
||||
builder
|
||||
.with_fisherman(client.clone(), &fisherman_options)
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||
// `spec_version`, and `authoring_version` are the same between Wasm and native.
|
||||
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
|
||||
// the compatible custom types.
|
||||
spec_version: 1200,
|
||||
spec_version: 1300,
|
||||
impl_version: 1,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 1,
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||
// `spec_version`, and `authoring_version` are the same between Wasm and native.
|
||||
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
|
||||
// the compatible custom types.
|
||||
spec_version: 1200,
|
||||
spec_version: 1300,
|
||||
impl_version: 1,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 1,
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
|
|||
// `spec_version`, and `authoring_version` are the same between Wasm and native.
|
||||
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
|
||||
// the compatible custom types.
|
||||
spec_version: 1200,
|
||||
spec_version: 1300,
|
||||
impl_version: 1,
|
||||
apis: RUNTIME_API_VERSIONS,
|
||||
transaction_version: 1,
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,7 +1,7 @@
|
|||
import { logger, parseDeploymentsFile, printDivider } from "utils";
|
||||
import { createPublicClient, createWalletClient, encodeFunctionData, http } from "viem";
|
||||
import { privateKeyToAccount } from "viem/accounts";
|
||||
import { getChainDeploymentParams } from "../../../configs/contracts/config";
|
||||
import { buildNetworkId, getChainDeploymentParams } from "../../../configs/contracts/config";
|
||||
import { dataHavenServiceManagerAbi } from "../../../contract-bindings/generated";
|
||||
|
||||
/**
|
||||
|
|
@ -10,7 +10,7 @@ import { dataHavenServiceManagerAbi } from "../../../contract-bindings/generated
|
|||
export const updateAVSMetadataURI = async (
|
||||
chain: string,
|
||||
uri: string,
|
||||
opts: { execute?: boolean; avsOwnerKey?: string } = {}
|
||||
opts: { execute?: boolean; avsOwnerKey?: string; environment?: string } = {}
|
||||
) => {
|
||||
try {
|
||||
const execute = opts.execute ?? false;
|
||||
|
|
@ -22,14 +22,15 @@ export const updateAVSMetadataURI = async (
|
|||
throw new Error("AVS owner private key is required to execute this transaction");
|
||||
}
|
||||
|
||||
// Get chain configuration
|
||||
// Get chain configuration using base chain name, and build networkId for deployment file lookup
|
||||
const networkId = buildNetworkId(chain, opts.environment);
|
||||
const deploymentParams = getChainDeploymentParams(chain);
|
||||
logger.info(`🫎 Updating AVS metadata URI on ${chain} chain`);
|
||||
logger.info(`🫎 Updating AVS metadata URI on ${networkId}`);
|
||||
logger.info(`Network: ${deploymentParams.network} (Chain ID: ${deploymentParams.chainId})`);
|
||||
logger.info(`RPC URL: ${deploymentParams.rpcUrl}`);
|
||||
logger.info(`New URI: ${uri}`);
|
||||
|
||||
const deployments = await parseDeploymentsFile(chain);
|
||||
const deployments = await parseDeploymentsFile(networkId);
|
||||
const serviceManagerAddress = deployments.ServiceManager;
|
||||
|
||||
if (!serviceManagerAddress) {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,12 @@ interface ContractToVerify {
|
|||
name: string;
|
||||
address: string;
|
||||
artifactName: string;
|
||||
/** Path to the contract source file relative to the contracts directory (e.g. "src/Foo.sol" or "lib/snowbridge/contracts/src/Bar.sol") */
|
||||
contractPath: string;
|
||||
constructorArgs: string[];
|
||||
constructorArgTypes: string[];
|
||||
/** When true, uses forge's --guess-constructor-args instead of explicit args (useful for proxies with complex init data) */
|
||||
guessConstructorArgs?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -41,11 +45,17 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
|
|||
|
||||
const deployments = await parseDeploymentsFile(networkId);
|
||||
|
||||
// Resolve the Gateway implementation address from the ERC1967 proxy storage slot
|
||||
const chainConfig = CHAIN_CONFIGS[options.chain as keyof typeof CHAIN_CONFIGS];
|
||||
const rpcUrl = options.rpcUrl || chainConfig.RPC_URL;
|
||||
const gatewayImplAddress = await getProxyImplementation(deployments.Gateway, rpcUrl);
|
||||
|
||||
const contractsToVerify: ContractToVerify[] = [
|
||||
{
|
||||
name: "ServiceManager Implementation",
|
||||
address: deployments.ServiceManagerImplementation,
|
||||
artifactName: "DataHavenServiceManager",
|
||||
contractPath: "src/DataHavenServiceManager.sol",
|
||||
constructorArgs: [
|
||||
deployments.RewardsCoordinator,
|
||||
deployments.PermissionController,
|
||||
|
|
@ -54,16 +64,41 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
|
|||
constructorArgTypes: ["address", "address", "address"]
|
||||
},
|
||||
{
|
||||
name: "Gateway",
|
||||
address: deployments.Gateway,
|
||||
artifactName: "Gateway",
|
||||
name: "ServiceManager Proxy",
|
||||
address: deployments.ServiceManager,
|
||||
artifactName: "TransparentUpgradeableProxy",
|
||||
contractPath:
|
||||
"lib/eigenlayer-contracts/lib/openzeppelin-contracts-v4.9.0/contracts/proxy/transparent/TransparentUpgradeableProxy.sol",
|
||||
constructorArgs: [],
|
||||
constructorArgTypes: []
|
||||
constructorArgTypes: [],
|
||||
guessConstructorArgs: true
|
||||
},
|
||||
...(gatewayImplAddress
|
||||
? [
|
||||
{
|
||||
name: "Gateway Implementation",
|
||||
address: gatewayImplAddress,
|
||||
artifactName: "Gateway",
|
||||
contractPath: "lib/snowbridge/contracts/src/Gateway.sol",
|
||||
constructorArgs: [deployments.BeefyClient, deployments.AgentExecutor],
|
||||
constructorArgTypes: ["address", "address"]
|
||||
}
|
||||
]
|
||||
: []),
|
||||
{
|
||||
name: "Gateway Proxy",
|
||||
address: deployments.Gateway,
|
||||
artifactName: "GatewayProxy",
|
||||
contractPath: "lib/snowbridge/contracts/src/GatewayProxy.sol",
|
||||
constructorArgs: [],
|
||||
constructorArgTypes: [],
|
||||
guessConstructorArgs: true
|
||||
},
|
||||
{
|
||||
name: "BeefyClient",
|
||||
address: deployments.BeefyClient,
|
||||
artifactName: "BeefyClient",
|
||||
contractPath: "lib/snowbridge/contracts/src/BeefyClient.sol",
|
||||
constructorArgs: [],
|
||||
constructorArgTypes: []
|
||||
},
|
||||
|
|
@ -71,11 +106,18 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
|
|||
name: "AgentExecutor",
|
||||
address: deployments.AgentExecutor,
|
||||
artifactName: "AgentExecutor",
|
||||
contractPath: "lib/snowbridge/contracts/src/AgentExecutor.sol",
|
||||
constructorArgs: [],
|
||||
constructorArgTypes: []
|
||||
}
|
||||
];
|
||||
|
||||
if (!gatewayImplAddress) {
|
||||
logger.warn(
|
||||
"⚠️ Could not resolve Gateway implementation address from proxy, skipping Gateway implementation verification"
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
logger.info("📋 Contracts to verify:");
|
||||
contractsToVerify.forEach((contract) => {
|
||||
|
|
@ -109,17 +151,29 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
|
|||
async function verifySingleContract(contract: ContractToVerify, options: ContractsVerifyOptions) {
|
||||
logger.info(`\n🔍 Verifying ${contract.name} (${contract.address})...`);
|
||||
|
||||
const { address, artifactName, constructorArgs: args, constructorArgTypes: types } = contract;
|
||||
const {
|
||||
address,
|
||||
artifactName,
|
||||
contractPath,
|
||||
constructorArgs: args,
|
||||
constructorArgTypes: types,
|
||||
guessConstructorArgs
|
||||
} = contract;
|
||||
|
||||
const abiEncodedArgs = getEncodedConstructorArgs(args, types);
|
||||
const constructorArgsStr = abiEncodedArgs ? `--constructor-args ${abiEncodedArgs}` : "";
|
||||
let constructorArgsStr: string;
|
||||
if (guessConstructorArgs) {
|
||||
constructorArgsStr = "--guess-constructor-args";
|
||||
} else {
|
||||
const abiEncodedArgs = getEncodedConstructorArgs(args, types);
|
||||
constructorArgsStr = abiEncodedArgs ? `--constructor-args ${abiEncodedArgs}` : "";
|
||||
}
|
||||
|
||||
try {
|
||||
const chainConfig = CHAIN_CONFIGS[options.chain as keyof typeof CHAIN_CONFIGS];
|
||||
const rpcUrl = options.rpcUrl || chainConfig.RPC_URL;
|
||||
const chainParameter =
|
||||
options.chain === "hoodi" ? "--chain-id 560048" : `--chain ${options.chain}`;
|
||||
const verifyCommand = `forge verify-contract ${address} src/${artifactName}.sol:${artifactName} --rpc-url ${rpcUrl} ${chainParameter} ${constructorArgsStr} --watch`;
|
||||
const verifyCommand = `forge verify-contract ${address} ${contractPath}:${artifactName} --rpc-url ${rpcUrl} ${chainParameter} ${constructorArgsStr} --watch`;
|
||||
|
||||
logger.info(`Running: ${verifyCommand}`);
|
||||
|
||||
|
|
@ -142,7 +196,7 @@ async function verifySingleContract(contract: ContractToVerify, options: Contrac
|
|||
logger.info(`Check manually at: ${chainConfig.BLOCK_EXPLORER}address/${contract.address}`);
|
||||
logger.info("You can also try running the command manually from the contracts directory:");
|
||||
const rpcUrl = options.rpcUrl || chainConfig.RPC_URL;
|
||||
const manualCommand = `forge verify-contract ${contract.address} src/${contract.artifactName}.sol:${contract.artifactName} --rpc-url ${rpcUrl} --chain ${options.chain} ${constructorArgsStr}`;
|
||||
const manualCommand = `forge verify-contract ${contract.address} ${contract.contractPath}:${contract.artifactName} --rpc-url ${rpcUrl} --chain ${options.chain} ${constructorArgsStr}`;
|
||||
logger.info(`cd ../contracts && ${manualCommand}`);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -460,12 +460,14 @@ contractsCommand
|
|||
if (!chain) {
|
||||
throw new Error("--chain parameter is required");
|
||||
}
|
||||
// Build network identifier with environment prefix if specified
|
||||
const environment = options.environment;
|
||||
const networkId = environment ? `${environment}-${chain}` : chain;
|
||||
await updateAVSMetadataURI(networkId, options.uri, {
|
||||
let environment = options.environment;
|
||||
if (!environment && command.parent) {
|
||||
environment = command.parent.getOptionValue("environment");
|
||||
}
|
||||
await updateAVSMetadataURI(chain, options.uri, {
|
||||
execute: options.execute,
|
||||
avsOwnerKey: options.avsOwnerKey
|
||||
avsOwnerKey: options.avsOwnerKey,
|
||||
environment
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
8
test/moonwall/contracts/src/FailingConstructor.sol
Normal file
8
test/moonwall/contracts/src/FailingConstructor.sol
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
pragma solidity >=0.8.3;
|
||||
|
||||
contract FailingConstructor {
|
||||
constructor() {
|
||||
require(false);
|
||||
}
|
||||
}
|
||||
17
test/moonwall/contracts/src/StorageLoop.sol
Normal file
17
test/moonwall/contracts/src/StorageLoop.sol
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// SPDX-License-Identifier: GPL-3.0
|
||||
pragma solidity >=0.8.2 <0.9.0;
|
||||
|
||||
contract StorageLoop {
|
||||
mapping(uint256 => uint256) public map;
|
||||
mapping(uint256 => uint256) public map2;
|
||||
|
||||
function store(uint16 n) public {
|
||||
for (uint16 i = 0; i < n; i++) {
|
||||
map[i] = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
function store2(uint256 i) public {
|
||||
map2[i] = i;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
import { describeSuite, expect } from "@moonwall/cli";
|
||||
import {
|
||||
ALITH_ADDRESS,
|
||||
CHARLETH_ADDRESS,
|
||||
baltathar,
|
||||
} from "@moonwall/util";
|
||||
|
||||
describeSuite({
|
||||
id: "D010502",
|
||||
title: "Proxy: Balances",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should accept known proxy",
|
||||
test: async () => {
|
||||
const beforeCharlieBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
const { result } = await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(baltathar.address, "Balances" as any, 0)
|
||||
);
|
||||
const proxyAdded = result!.events.find(
|
||||
({ event }) => event.method === "ProxyAdded"
|
||||
);
|
||||
expect(proxyAdded).to.not.be.undefined;
|
||||
expect(proxyAdded!.event.data[2].toString()).to.be.eq("Balances"); //ProxyType
|
||||
expect(result!.events.some(({ event }) => event.method === "ExtrinsicSuccess")).to.be.true;
|
||||
|
||||
const { result: result2 } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
ALITH_ADDRESS,
|
||||
null,
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100)
|
||||
)
|
||||
.signAsync(baltathar)
|
||||
);
|
||||
|
||||
const proxyExecuted = result2!.events.find(
|
||||
({ event }) => event.method === "ProxyExecuted"
|
||||
);
|
||||
expect(proxyExecuted).to.not.be.undefined;
|
||||
expect(proxyExecuted!.event.data[0].toString()).to.be.eq("Ok");
|
||||
expect(result2!.events.some(({ event }) => event.method === "ExtrinsicSuccess")).to.be
|
||||
.true;
|
||||
const afterCharlieBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlieBalance - beforeCharlieBalance).to.be.eq(100n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "shouldn't accept other proxy types",
|
||||
test: async () => {
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(baltathar.address, "Balances", 0)
|
||||
);
|
||||
|
||||
const { result } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
ALITH_ADDRESS,
|
||||
null,
|
||||
context.polkadotJs().tx.system.remark("0x")
|
||||
)
|
||||
.signAsync(baltathar)
|
||||
);
|
||||
|
||||
const proxyExecuted = result!.events.find(
|
||||
({ event }) => event.method === "ProxyExecuted"
|
||||
);
|
||||
expect(proxyExecuted).to.not.be.undefined;
|
||||
// Balances proxy type should not allow system.remark
|
||||
expect(proxyExecuted!.event.data[0].toString()).to.not.be.eq("Ok");
|
||||
expect(result!.events.some(({ event }) => event.method === "ExtrinsicSuccess")).to.be.true;
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
184
test/moonwall/suites/dev/stagenet/multisig/test-multisigs.ts
Normal file
184
test/moonwall/suites/dev/stagenet/multisig/test-multisigs.ts
Normal file
|
|
@ -0,0 +1,184 @@
|
|||
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
|
||||
import { blake2AsHex, createKeyMulti } from "@polkadot/util-crypto";
|
||||
import { u8aToHex } from "@polkadot/util";
|
||||
import {
|
||||
ALITH_ADDRESS,
|
||||
BALTATHAR_ADDRESS,
|
||||
CHARLETH_ADDRESS,
|
||||
DOROTHY_ADDRESS,
|
||||
alith,
|
||||
baltathar,
|
||||
} from "@moonwall/util";
|
||||
|
||||
// This test cases in this suite are dependent on each other, and must be run in order.
|
||||
// TODO: Make the test cases atomic
|
||||
|
||||
describeSuite({
|
||||
id: "D022101",
|
||||
title: "Multisigs - perform multisigs operations",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it }) => {
|
||||
let threshold: number;
|
||||
let call: any;
|
||||
let encodedCall: string;
|
||||
let encodedCallHash: string;
|
||||
|
||||
// multisig accountId
|
||||
let encodedMultisigId: Uint8Array;
|
||||
let multisigId: string;
|
||||
|
||||
beforeAll(async function () {
|
||||
// set threshold and create multisig accountId
|
||||
threshold = 2;
|
||||
encodedMultisigId = createKeyMulti([ALITH_ADDRESS, BALTATHAR_ADDRESS, CHARLETH_ADDRESS], 2);
|
||||
multisigId = u8aToHex(encodedMultisigId.slice(0, 20));
|
||||
|
||||
// encode and hash the call we want to dispatch as a multisig operation
|
||||
call = context.polkadotJs().tx.balances.transferKeepAlive(DOROTHY_ADDRESS, 20);
|
||||
encodedCall = call.method.toHex();
|
||||
encodedCallHash = blake2AsHex(encodedCall);
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T01",
|
||||
title: "Should create a multisig operation with asMulti",
|
||||
test: async () => {
|
||||
// set signatories
|
||||
const otherSignatories = [BALTATHAR_ADDRESS, CHARLETH_ADDRESS];
|
||||
const block = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.asMulti(threshold, otherSignatories, null, encodedCall, {})
|
||||
.signAsync(alith)
|
||||
);
|
||||
|
||||
// check the event 'NewMultisig' was emitted
|
||||
const records = await context.polkadotJs().query.system.events();
|
||||
const events = records.filter(
|
||||
({ event }) => event.section === "multisig" && event.method === "NewMultisig"
|
||||
);
|
||||
expect(events).to.have.lengthOf(1);
|
||||
expect(block.result!.successful).to.be.true;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "Should be able to approve a multisig operation with approveAsMulti",
|
||||
test: async function () {
|
||||
// signatories (sorted)
|
||||
const otherSignatories = [CHARLETH_ADDRESS, ALITH_ADDRESS];
|
||||
// create a new multisig operation
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.asMulti(threshold, otherSignatories, null, encodedCall, {})
|
||||
.signAsync(alith),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
|
||||
// take the info of the new multisig operation saved in storage
|
||||
const multisigInfo = await context
|
||||
.polkadotJs()
|
||||
.query.multisig.multisigs(multisigId, encodedCallHash);
|
||||
const block = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.approveAsMulti(
|
||||
threshold,
|
||||
otherSignatories,
|
||||
multisigInfo.unwrap().when,
|
||||
encodedCallHash,
|
||||
{}
|
||||
)
|
||||
.signAsync(baltathar),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
|
||||
// check the event 'MultisigApproval' was emitted
|
||||
const records = await context.polkadotJs().query.system.events();
|
||||
const events = records.filter(
|
||||
({ event }) => event.section === "multisig" && event.method === "MultisigApproval"
|
||||
);
|
||||
expect(events).to.have.lengthOf(1);
|
||||
expect(block.result!.successful).to.be.true;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T03",
|
||||
title: "Should be able to cancel a multisig operation",
|
||||
test: async () => {
|
||||
const otherSignatories = [BALTATHAR_ADDRESS, CHARLETH_ADDRESS];
|
||||
// create a new multisig operation
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.asMulti(threshold, otherSignatories, null, encodedCall, {})
|
||||
.signAsync(alith),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
|
||||
// take the info of the new multisig operation saved in storage
|
||||
const multisigInfo = await context
|
||||
.polkadotJs()
|
||||
.query.multisig.multisigs(multisigId, encodedCallHash);
|
||||
const block = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.cancelAsMulti(
|
||||
threshold,
|
||||
otherSignatories,
|
||||
multisigInfo.unwrap().when,
|
||||
encodedCallHash
|
||||
)
|
||||
.signAsync(alith)
|
||||
);
|
||||
|
||||
const records = await context.polkadotJs().query.system.events();
|
||||
const events = records.filter(
|
||||
({ event }) => event.section === "multisig" && event.method === "MultisigCancelled"
|
||||
);
|
||||
expect(events, "event 'MultisigCancelled' was not emitted").to.have.lengthOf(1);
|
||||
expect(block.result!.successful).to.be.true;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T04",
|
||||
title: "Should fail if signatories are out of order",
|
||||
test: async () => {
|
||||
const otherSignatories = [CHARLETH_ADDRESS, BALTATHAR_ADDRESS];
|
||||
const block = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.asMulti(threshold, otherSignatories, null, encodedCall, {})
|
||||
.signAsync(alith),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
expect(block.result!.error!.name, "signatories (they are not sorted)").to.equal(
|
||||
"SignatoriesOutOfOrder"
|
||||
);
|
||||
expect(block.result!.successful).to.be.false;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T05",
|
||||
title: "Should fail if sender is present in signatories",
|
||||
test: async () => {
|
||||
// signatories (with sender in signatories)
|
||||
const otherSignatories = [ALITH_ADDRESS, BALTATHAR_ADDRESS];
|
||||
const block = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.multisig.asMulti(threshold, otherSignatories, null, encodedCall, {})
|
||||
.signAsync(alith),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
expect(block.result!.error!.name).to.equal("SenderInSignatories");
|
||||
expect(block.result!.successful).to.be.false;
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import { customDevRpcRequest, describeSuite, expect } from "@moonwall/cli";
|
||||
|
||||
describeSuite({
|
||||
id: "D022201",
|
||||
title: "Node - RPC",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should report peer count in hex",
|
||||
test: async function () {
|
||||
// this tests that the "net_peerCount" response comes back in hex and not decimal.
|
||||
// related: frontier commits 677548c and 78fb3bc
|
||||
const result = await customDevRpcRequest("net_peerCount", []);
|
||||
|
||||
expect(result).to.be.equal("0x0");
|
||||
expect(typeof result).to.be.equal("string");
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
import { describeSuite, expect } from "@moonwall/cli";
|
||||
import { ALITH_ADDRESS, GLMR, generateKeyringPair } from "@moonwall/util";
|
||||
|
||||
describeSuite({
|
||||
id: "D022501",
|
||||
title: "Polkadot API",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should return genesis block",
|
||||
test: async function () {
|
||||
const lastHeader = await context.polkadotJs().rpc.chain.getHeader();
|
||||
expect(Number(lastHeader.number) >= 0).to.be.true;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should return latest header number",
|
||||
test: async function () {
|
||||
await context.createBlock();
|
||||
const lastHeader = await context.polkadotJs().rpc.chain.getHeader();
|
||||
expect(lastHeader.number.toNumber()).to.be.at.least(1);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T03",
|
||||
title: "transfers should be stored on chain",
|
||||
test: async function () {
|
||||
const randomAddress = generateKeyringPair().address as `0x${string}`;
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(randomAddress, 2n * GLMR)
|
||||
);
|
||||
|
||||
expect(BigInt(await context.viem().getBalance({ address: randomAddress }))).to.equal(
|
||||
2n * GLMR
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T04",
|
||||
title: "should appear in extrinsics",
|
||||
test: async function () {
|
||||
const randomAddress = generateKeyringPair().address as `0x${string}`;
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(randomAddress, 2n * GLMR)
|
||||
);
|
||||
const signedBlock = await context.polkadotJs().rpc.chain.getBlock();
|
||||
|
||||
// Expecting 3 extrinsics so far:
|
||||
// timestamp, author, the parachain validation data, randomness, and the balances transfer.
|
||||
expect(signedBlock.block.extrinsics).to.be.of.length(3);
|
||||
|
||||
signedBlock.block.extrinsics.forEach((ex, index) => {
|
||||
const {
|
||||
method: { args, method, section },
|
||||
} = ex;
|
||||
const message = `${section}.${method}(${args.map((a) => a.toString()).join(", ")})`;
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
expect(message.substring(0, 13)).to.eq(`timestamp.set`);
|
||||
break;
|
||||
case 1:
|
||||
expect(message.toLocaleLowerCase()).to.match(/^randomness\.setbaberandomness/);
|
||||
break;
|
||||
case 2:
|
||||
expect(message).to.eq(
|
||||
`balances.transferAllowDeath(${randomAddress}, 2000000000000000000)`
|
||||
);
|
||||
expect(ex.signer.toString()).to.eq(ALITH_ADDRESS);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unexpected extrinsic: ${message}`);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T05",
|
||||
title: "should appear in events",
|
||||
test: async function () {
|
||||
// Generating two transfers to ensure treasury account exists
|
||||
const randomAddress = generateKeyringPair().address as `0x${string}`;
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(randomAddress, 2n * GLMR)
|
||||
);
|
||||
|
||||
const randomAddress2 = generateKeyringPair().address as `0x${string}`;
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(randomAddress2, 2n * GLMR)
|
||||
);
|
||||
const signedBlock = await context.polkadotJs().rpc.chain.getBlock();
|
||||
const apiAt = await context.polkadotJs().at(signedBlock.block.header.hash);
|
||||
const allRecords = await apiAt.query.system.events();
|
||||
|
||||
// map between the extrinsics and events
|
||||
signedBlock.block.extrinsics.forEach((_, index) => {
|
||||
// filter the specific events based on the phase and then the
|
||||
// index of our extrinsic in the block
|
||||
const events = allRecords
|
||||
.filter(({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eq(index))
|
||||
.map(({ event }) => event);
|
||||
|
||||
switch (index) {
|
||||
// First 2 events:
|
||||
// timestamp.set:: system.ExtrinsicSuccess
|
||||
// randomness.setBabeRandomness:: system.ExtrinsicSuccess
|
||||
case 0:
|
||||
case 1:
|
||||
expect(events).to.be.of.length(1);
|
||||
expect(context.polkadotJs().events.system.ExtrinsicSuccess.is(events[0])).to.be.true;
|
||||
break;
|
||||
// balances.transferAllowDeath emits: system.NewAccount, balances.Endowed,
|
||||
// balances.Transfer, (other events), system.ExtrinsicSuccess
|
||||
case 2:
|
||||
log(events.map((e) => `${e.section}.${e.method}`).join(" - "));
|
||||
expect(events.length).to.be.at.least(7);
|
||||
expect(events.some((e) => context.polkadotJs().events.system.NewAccount.is(e))).to.be
|
||||
.true;
|
||||
expect(events.some((e) => context.polkadotJs().events.balances.Endowed.is(e))).to.be
|
||||
.true;
|
||||
expect(events.some((e) => context.polkadotJs().events.balances.Transfer.is(e))).to.be
|
||||
.true;
|
||||
// ExtrinsicSuccess should be the last event
|
||||
expect(
|
||||
context.polkadotJs().events.system.ExtrinsicSuccess.is(events[events.length - 1])
|
||||
).to.be.true;
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unexpected extrinsic`);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
import { customDevRpcRequest, describeSuite, expect } from "@moonwall/cli";
|
||||
|
||||
describeSuite({
|
||||
id: "D022502",
|
||||
title: "Web3Api Information",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should include client version",
|
||||
test: async function () {
|
||||
const version = (await customDevRpcRequest("web3_clientVersion", [])) as string;
|
||||
const specName = context.polkadotJs().runtimeVersion.specName.toString();
|
||||
const specVersion = context.polkadotJs().runtimeVersion.specVersion.toString();
|
||||
const implVersion = context.polkadotJs().runtimeVersion.implVersion.toString();
|
||||
const expected = `${specName}/v${specVersion}.${implVersion}/fc-rpc-2.0.0-dev`;
|
||||
expect(version).toBe(expected);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
import { describeSuite } from "@moonwall/cli";
|
||||
import { createViemTransaction, sendRawTransaction } from "@moonwall/util";
|
||||
/*
|
||||
* These test cases trigger bugs in the bn128 precompiles which perform a from_slice()
|
||||
* call on unchecked input.
|
||||
*
|
||||
* Fixed by:
|
||||
* https://github.com/paritytech/frontier/pull/394
|
||||
*/
|
||||
|
||||
describeSuite({
|
||||
id: "D022703",
|
||||
title: "Precompiles - bn128 bounds",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should fail gracefully (case 1)",
|
||||
test: async () => {
|
||||
// some call data which will cause bn128 to be called with insufficient input. this
|
||||
// presumably was generated through fuzzing.
|
||||
const data =
|
||||
("0x608060405234801561001057600080fd5b5060008060405180608001604052807f2243525c5eda" +
|
||||
"1401003c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703815260207f6e01001d33be6da800" +
|
||||
"00002bcc35964723180eed75f91a010001007d48f195c91581526020017f18b18acfb4c2c30276db" +
|
||||
"5411000000000000000b4691610c5d3b00010001b17f81526020017f063c909c4720840cb5134cb9" +
|
||||
"f546c80200579d040100d32efc0d288197f37266815246475b6100bf61044d505b6040604b808460" +
|
||||
"006007600019f1925082610142576000000000acd401000000000000000000000000000000000000" +
|
||||
"000000000000000000008152600401808060200182810300192c748252601e8152602001887f656c" +
|
||||
"6c967074000381327572766520616464ad74696f6e206661696c6564000081525060200191500000" +
|
||||
"000000000009fd5b7f2bd3e6d0f3b142924f5ca7b49ce5b9d585420400ae5648e61d02268b1a0a9f" +
|
||||
"b7816000600202020202020202020202020202020202fd0202020203020202020202020202020202" +
|
||||
"0202fb02020a02020202020202020202020202020202020202020202020202020202020202020202" +
|
||||
"02020202020200000000000000000a1c000000000000000000000000000000000000000901010037" +
|
||||
"190100000000000000000000f81a0100000002020202020202020202020202020202020202028a30" +
|
||||
"a82123b27db75200aedc4a45a0e84fbd1f9f3621350bb778119630350eb7a7e613058daf51e9f514" +
|
||||
"8ea65715eaac3d8019f80498112fc4860a020202020202020202fd02020202020202020202020202" +
|
||||
"02020202020202020202020202020202020202020202020202020202020202020202020202020212" +
|
||||
"02020202020202020202010202fd0202020202020202020202020202020202020202020202020202" +
|
||||
"020202020202020202020202005f02d2020202020202020202020202020202020202020202020202" +
|
||||
"02020202020202020202020302020202020202020202020202020202020202020202020202020202" +
|
||||
"0302020202020202020202020202") as `0x${string}`;
|
||||
|
||||
const tx = await createViemTransaction(context, {
|
||||
to: "0x0000000000000000000000000000000000000007",
|
||||
data,
|
||||
skipEstimation: true,
|
||||
});
|
||||
|
||||
await sendRawTransaction(context, tx);
|
||||
|
||||
// we expect that the node hasn't crashed by here. without a fix, the previous web3 request
|
||||
// would have been sufficient to crash our node. now it fails with "ExhaustsResources". if
|
||||
// we can create a block, we must not have crashed.
|
||||
await context.createBlock();
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should fail gracefully (case 2)",
|
||||
test: async () => {
|
||||
// similar to the above call data, although triggers a slightly different bug
|
||||
|
||||
const tx = await createViemTransaction(context, {
|
||||
to: "0x0000000000000000000000000000000000000007",
|
||||
data: "0x0000000000000000000000000000000000000000050000000000008303d0300d901401",
|
||||
skipEstimation: true,
|
||||
});
|
||||
|
||||
await sendRawTransaction(context, tx);
|
||||
|
||||
// we expect that the node hasn't crashed by here. without a fix, the previous web3 request
|
||||
// would have been sufficient to crash our node. now it fails with "ExhaustsResources". if
|
||||
// we can create a block, we must not have crashed.
|
||||
await context.createBlock();
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
257
test/moonwall/suites/dev/stagenet/proxy/test-proxy.ts
Normal file
257
test/moonwall/suites/dev/stagenet/proxy/test-proxy.ts
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
import { beforeEach, describeSuite, expect } from "@moonwall/cli";
|
||||
import {
|
||||
ALITH_ADDRESS,
|
||||
CHARLETH_ADDRESS,
|
||||
type KeyringPair,
|
||||
alith,
|
||||
generateKeyringPair,
|
||||
} from "@moonwall/util";
|
||||
|
||||
// In these tests Alith will allow signer to perform calls on her behalf.
|
||||
// Charleth is used as a target account when making transfers.
|
||||
|
||||
describeSuite({
|
||||
id: "D022902",
|
||||
title: "Proxy - proxy",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
let signer: KeyringPair;
|
||||
|
||||
beforeEach(async () => {
|
||||
signer = generateKeyringPair("ethereum");
|
||||
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(signer.address, 5n * 10n ** 18n)
|
||||
);
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T01",
|
||||
title: "shouldn't accept unknown proxy",
|
||||
test: async function () {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
|
||||
const expectEvents = [context.polkadotJs().events.system.ExtrinsicFailed];
|
||||
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
ALITH_ADDRESS,
|
||||
null,
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100)
|
||||
)
|
||||
.signAsync(signer),
|
||||
{ expectEvents, signer: alith, allowFailures: true }
|
||||
);
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should accept known proxy",
|
||||
test: async () => {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
|
||||
const events1 = [
|
||||
context.polkadotJs().events.system.ExtrinsicSuccess,
|
||||
context.polkadotJs().events.proxy.ProxyAdded,
|
||||
];
|
||||
|
||||
const { result } = await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(signer.address, "Any", 0),
|
||||
{ signer: alith, expectEvents: events1 }
|
||||
);
|
||||
const proxyAdded = result?.events.find(({ event }) =>
|
||||
context.polkadotJs().events.proxy.ProxyAdded.is(event)
|
||||
);
|
||||
expect(proxyAdded).to.not.be.undefined;
|
||||
expect(proxyAdded!.event.data[2].toString()).to.be.eq("Any"); //ProxyType
|
||||
|
||||
const events2 = [
|
||||
context.polkadotJs().events.system.ExtrinsicSuccess,
|
||||
context.polkadotJs().events.proxy.ProxyExecuted,
|
||||
];
|
||||
|
||||
const { result: result2 } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
alith.address,
|
||||
null,
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100)
|
||||
)
|
||||
.signAsync(signer),
|
||||
{ signer: alith, expectEvents: events2 }
|
||||
);
|
||||
const proxyExecuted = result2?.events.find(({ event }) =>
|
||||
context.polkadotJs().events.proxy.ProxyExecuted.is(event)
|
||||
);
|
||||
expect(proxyExecuted).to.not.be.undefined;
|
||||
expect(proxyExecuted!.event.data[0].toString()).to.be.eq("Ok");
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(100n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T03",
|
||||
title: "shouldn't accept removed proxy",
|
||||
test: async () => {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(signer.address, "Any", 0),
|
||||
{ signer: alith, allowFailures: false }
|
||||
);
|
||||
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.removeProxy(signer.address, "Any", 0),
|
||||
{ signer: alith, allowFailures: false }
|
||||
);
|
||||
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
alith.address,
|
||||
null,
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100)
|
||||
)
|
||||
.signAsync(signer),
|
||||
{ signer: alith, expectEvents: [context.polkadotJs().events.system.ExtrinsicFailed] }
|
||||
);
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T04",
|
||||
title: "shouldn't accept instant for delayed proxy",
|
||||
test: async () => {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(signer.address, "Any", 2),
|
||||
{ signer: alith, allowFailures: false }
|
||||
);
|
||||
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxy(
|
||||
alith.address,
|
||||
null,
|
||||
context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100)
|
||||
)
|
||||
.signAsync(signer),
|
||||
{ signer: alith, expectEvents: [context.polkadotJs().events.system.ExtrinsicFailed] }
|
||||
);
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T05",
|
||||
title: "shouldn't accept early delayed proxy",
|
||||
test: async () => {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
const { result } = await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(signer.address, "Any", 6),
|
||||
{ signer: alith, allowFailures: false }
|
||||
);
|
||||
result?.events.forEach(({ event }) => log(`1${event.method}(${event.data})`));
|
||||
|
||||
const transfer = context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100);
|
||||
|
||||
const { result: result2 } = await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.announce(alith.address, transfer.hash).signAsync(signer),
|
||||
{
|
||||
signer: alith,
|
||||
expectEvents: [context.polkadotJs().events.proxy.Announced],
|
||||
allowFailures: false,
|
||||
}
|
||||
);
|
||||
result2?.events.forEach(({ event }) => log(`2${event.method}(${event.data})`));
|
||||
|
||||
const { result: result3 } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxyAnnounced(signer.address, alith.address, null, transfer)
|
||||
.signAsync(signer),
|
||||
{
|
||||
signer: alith,
|
||||
expectEvents: [context.polkadotJs().events.system.ExtrinsicFailed],
|
||||
}
|
||||
);
|
||||
result3?.events.forEach(({ event }) => log(`3${event.method}(${event.data})`));
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(0n);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T06",
|
||||
title: "should accept on-time delayed proxy ",
|
||||
test: async () => {
|
||||
const beforeCharlethBalance = await context
|
||||
.viem()
|
||||
.getBalance({ address: CHARLETH_ADDRESS });
|
||||
await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.addProxy(signer.address, "Any", 2),
|
||||
{ signer: alith, allowFailures: false }
|
||||
);
|
||||
|
||||
const transfer = context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 100);
|
||||
const u8a = transfer.method.toU8a();
|
||||
const transfer_hash = transfer.registry.hash(u8a).toHex();
|
||||
|
||||
const { result: result2 } = await context.createBlock(
|
||||
context.polkadotJs().tx.proxy.announce(alith.address, transfer_hash).signAsync(signer),
|
||||
{
|
||||
signer: alith,
|
||||
expectEvents: [context.polkadotJs().events.proxy.Announced],
|
||||
allowFailures: false,
|
||||
}
|
||||
);
|
||||
const announced = result2?.events.find(({ event }) =>
|
||||
context.polkadotJs().events.proxy.Announced.is(event)
|
||||
);
|
||||
expect(announced).to.not.be.undefined;
|
||||
expect(announced!.event.data[2].toHex()).to.eq(transfer_hash);
|
||||
|
||||
await context.createBlock();
|
||||
await context.createBlock();
|
||||
|
||||
// On time.
|
||||
const { result: result3 } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.proxy.proxyAnnounced(signer.address, alith.address, null, transfer)
|
||||
.signAsync(signer),
|
||||
{
|
||||
signer: alith,
|
||||
expectEvents: [context.polkadotJs().events.proxy.ProxyExecuted],
|
||||
allowFailures: false,
|
||||
}
|
||||
);
|
||||
const afterCharlethBalance = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
|
||||
expect(afterCharlethBalance - beforeCharlethBalance).to.be.eq(100n);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import { describeSuite, expect } from "@moonwall/cli";
|
||||
import { getAddress } from "viem";
|
||||
|
||||
describeSuite({
|
||||
id: "D023101",
|
||||
title: "Receipt - Revert",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should generate a receipt for a reverted transaction",
|
||||
test: async function () {
|
||||
const { hash } = await context.deployContract!("FailingConstructor", { gas: 300000n });
|
||||
const receipt = await context.viem().getTransactionReceipt({ hash });
|
||||
|
||||
expect(receipt.status).toBe("reverted");
|
||||
expect(receipt.blockNumber).toBe(1n);
|
||||
expect(getAddress(receipt.contractAddress!)).toBe(
|
||||
getAddress("0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3")
|
||||
);
|
||||
expect(receipt.cumulativeGasUsed).toBe(54604n);
|
||||
expect(getAddress(receipt.from!)).toBe(
|
||||
getAddress("0xf24ff3a9cf04c71dbc94d0b566f7a27b94566cac")
|
||||
);
|
||||
expect(receipt.gasUsed).toBe(54604n);
|
||||
expect(receipt.logs).toStrictEqual([]);
|
||||
expect(receipt.transactionHash).toBe(hash);
|
||||
expect(receipt.to).toBe(null);
|
||||
expect(receipt.transactionIndex).toBe(0);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
61
test/moonwall/suites/dev/stagenet/receipt/test-receipt.ts
Normal file
61
test/moonwall/suites/dev/stagenet/receipt/test-receipt.ts
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
|
||||
import { BALTATHAR_ADDRESS, alith } from "@moonwall/util";
|
||||
|
||||
describeSuite({
|
||||
id: "D023103",
|
||||
title: "Receipt - Contract",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
let txHash: string;
|
||||
let eventContract: `0x${string}`;
|
||||
|
||||
beforeAll(async () => {
|
||||
const { contractAddress, hash } = await context.deployContract!("EventEmitter");
|
||||
eventContract = contractAddress;
|
||||
txHash = hash;
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T01",
|
||||
title: "Should generate receipt",
|
||||
test: async function () {
|
||||
const block = await context.viem().getBlock({ blockNumber: 1n });
|
||||
const receipt = await context
|
||||
.viem()
|
||||
.getTransactionReceipt({ hash: txHash as `0x${string}` });
|
||||
|
||||
expect(receipt.blockHash).toBe(block.hash);
|
||||
expect(receipt.blockNumber).toBe(block.number);
|
||||
expect(receipt.from).toBe(alith.address.toLowerCase());
|
||||
expect(receipt.logs.length).toBe(1);
|
||||
expect(receipt.logs[0].address).toBe(eventContract);
|
||||
expect(receipt.logs[0].blockHash).toBe(block.hash);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should calculate effective gas price",
|
||||
test: async function () {
|
||||
const maxFeePerGas = 10_000_000_000n * 2n;
|
||||
|
||||
const rawTxn = await context.createTxn!({
|
||||
gas: 21000n,
|
||||
libraryType: "viem",
|
||||
maxFeePerGas: maxFeePerGas,
|
||||
maxPriorityFeePerGas: maxFeePerGas,
|
||||
to: BALTATHAR_ADDRESS,
|
||||
data: "0x",
|
||||
txnType: "eip1559",
|
||||
});
|
||||
await context.createBlock(rawTxn);
|
||||
|
||||
const block = await context.viem().getBlock();
|
||||
const receipt = await context
|
||||
.viem()
|
||||
.getTransactionReceipt({ hash: block.transactions[0] as `0x${string}` });
|
||||
expect(receipt.effectiveGasPrice).to.be.eq(maxFeePerGas);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
// TODO: Constants (storage growth ratios, limits) may need adjustment for DataHaven's runtime configuration
|
||||
import {
|
||||
TransactionTypes,
|
||||
beforeAll,
|
||||
deployCreateCompiledContract,
|
||||
describeSuite,
|
||||
} from "@moonwall/cli";
|
||||
import { createEthersTransaction } from "@moonwall/util";
|
||||
import { expectEVMResult, expectOk } from "../../../../helpers";
|
||||
import { type Abi, encodeFunctionData } from "viem";
|
||||
|
||||
describeSuite({
|
||||
id: "D023403",
|
||||
title: "Storage growth limit - New Entries",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
let storageLoopAddress: `0x${string}`;
|
||||
let storageLoopAbi: Abi;
|
||||
// Number of bytes added to storage for a new entry.
|
||||
const ACCOUNT_STORAGE_SIZE = 116;
|
||||
// Ratio of gas to storage growth. (BlockGasLimit (15_000_000) / BlockStorageLimit (40kb))
|
||||
const GAS_LIMIT_STORAGE_GROWTH_RATIO = 366;
|
||||
beforeAll(async () => {
|
||||
const { contractAddress, abi } = await deployCreateCompiledContract(context, "StorageLoop");
|
||||
storageLoopAddress = contractAddress;
|
||||
storageLoopAbi = abi;
|
||||
|
||||
await context.createBlock();
|
||||
});
|
||||
|
||||
for (const txnType of TransactionTypes) {
|
||||
it({
|
||||
id: `T0${TransactionTypes.indexOf(txnType) + 1}`,
|
||||
title: "should out of gas when gas provided is not enough to cover storage growth",
|
||||
test: async function () {
|
||||
// Tx is creating 5 new storage entries. So, required gas is:
|
||||
// (5 * ACCOUNT_STORAGE_SIZE) * GAS_LIMIT_STORAGE_GROWTH_RATIO = 212_280
|
||||
// Execute tx with insufficient gas limit
|
||||
const rawSigned = await createEthersTransaction(context, {
|
||||
to: storageLoopAddress,
|
||||
data: encodeFunctionData({
|
||||
abi: storageLoopAbi,
|
||||
functionName: "store",
|
||||
// for each transaction type, we add 5 new storage entries
|
||||
args: [5 + 5 * TransactionTypes.indexOf(txnType)],
|
||||
}),
|
||||
gasLimit: 212_270,
|
||||
});
|
||||
|
||||
const { result } = await context.createBlock(rawSigned);
|
||||
// Check that the transaction failed with an out of gas error
|
||||
expectEVMResult(result!.events, "Error", "OutOfGas");
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: `T0${TransactionTypes.indexOf(txnType) + 4}`,
|
||||
title: "should successfully execute when updating existing storage entries (no growth)",
|
||||
test: async function () {
|
||||
// Update 5 existing storage entries. So, required gas should be less than 212_280
|
||||
const rawSigned = await createEthersTransaction(context, {
|
||||
to: storageLoopAddress,
|
||||
data: encodeFunctionData({
|
||||
abi: storageLoopAbi,
|
||||
functionName: "store",
|
||||
args: [5],
|
||||
}),
|
||||
gasLimit: 50_000,
|
||||
});
|
||||
|
||||
await expectOk(context.createBlock(rawSigned));
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
123
test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts
Normal file
123
test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
import { describeSuite, expect } from "@moonwall/cli";
|
||||
import {
|
||||
ALITH_ADDRESS,
|
||||
DEFAULT_GENESIS_BALANCE,
|
||||
baltathar,
|
||||
generateKeyringPair,
|
||||
} from "@moonwall/util";
|
||||
import { ALITH_GENESIS_TRANSFERABLE_BALANCE, verifyLatestBlockFees } from "../../../../helpers";
|
||||
import { CHARLETH_ADDRESS, ETHAN_ADDRESS } from "@moonwall/util";
|
||||
|
||||
describeSuite({
|
||||
id: "D023601",
|
||||
title: "Sudo - successful forceSetBalance",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it }) => {
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should be able to call sudo with the right account",
|
||||
test: async function () {
|
||||
const { result } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.sudo.sudo(context.polkadotJs().tx.balances.forceSetBalance(ETHAN_ADDRESS, 0))
|
||||
);
|
||||
|
||||
const account = await context.polkadotJs().query.system.account(ETHAN_ADDRESS);
|
||||
expect(account.data.free.toBigInt()).toBe(0n);
|
||||
|
||||
// DataHaven has 1 more event (NewChallengeSeed) than Moonbeam,
|
||||
// coming from the StorageHub ProofsDealer pallet.
|
||||
expect(result!.events.length).to.eq(8);
|
||||
console.log(result!.events.map((e) => e.event.toHuman()));
|
||||
expect(context.polkadotJs().events.balances.BalanceSet.is(result!.events[3].event)).to.be
|
||||
.true;
|
||||
expect(context.polkadotJs().events.sudo.Sudid.is(result!.events[4].event)).to.be.true;
|
||||
expect(context.polkadotJs().events.balances.Deposit.is(result!.events[5].event)).to.be.true;
|
||||
expect(context.polkadotJs().events.system.ExtrinsicSuccess.is(result!.events[7].event)).to
|
||||
.be.true;
|
||||
|
||||
expect(
|
||||
await context.viem().getBalance({ address: ALITH_ADDRESS }),
|
||||
"diff should be null for sudo - funds are sent back"
|
||||
).to.equal(ALITH_GENESIS_TRANSFERABLE_BALANCE);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should charge the correct amount of gas when calling sudo",
|
||||
test: async function () {
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.sudo.sudo(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.balances.forceSetBalance(CHARLETH_ADDRESS, DEFAULT_GENESIS_BALANCE)
|
||||
)
|
||||
);
|
||||
|
||||
await verifyLatestBlockFees(context);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T03",
|
||||
title: "should NOT be able to call sudo with another account than sudo account",
|
||||
test: async function () {
|
||||
const baltathar_before = await context.polkadotJs().query.system.account(CHARLETH_ADDRESS);
|
||||
const { result } = await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.sudo.sudo(context.polkadotJs().tx.balances.forceSetBalance(CHARLETH_ADDRESS, 0))
|
||||
.signAsync(baltathar),
|
||||
{ allowFailures: true }
|
||||
);
|
||||
|
||||
// Check that balance didn't change
|
||||
const account = await context.polkadotJs().query.system.account(CHARLETH_ADDRESS);
|
||||
expect(account.data.free.toBigInt()).toBe(DEFAULT_GENESIS_BALANCE);
|
||||
|
||||
expect(result!.events.length === 8).to.be.true;
|
||||
expect(context.polkadotJs().events.system.NewAccount.is(result!.events[3].event)).to.be
|
||||
.true;
|
||||
expect(context.polkadotJs().events.balances.Endowed.is(result!.events[4].event)).to.be.true;
|
||||
expect(context.polkadotJs().events.system.ExtrinsicFailed.is(result!.events[7].event)).to.be
|
||||
.true;
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T04",
|
||||
title: "should not be able to call sudo with no funds",
|
||||
test: async function () {
|
||||
const newSigner = generateKeyringPair();
|
||||
|
||||
await context.createBlock(context.polkadotJs().tx.sudo.setKey(newSigner.address), {
|
||||
allowFailures: false,
|
||||
});
|
||||
|
||||
expect((await context.polkadotJs().query.sudo.key()).unwrap().toString()).toBe(
|
||||
newSigner.address
|
||||
);
|
||||
|
||||
await expect(
|
||||
async () =>
|
||||
await context.createBlock(
|
||||
context
|
||||
.polkadotJs()
|
||||
.tx.sudo.sudo(context.polkadotJs().tx.balances.forceSetBalance(CHARLETH_ADDRESS, 0))
|
||||
.signAsync(newSigner)
|
||||
)
|
||||
).rejects.toThrowError(
|
||||
"1010: Invalid Transaction: Inability to pay some fees , e.g. account balance too low"
|
||||
);
|
||||
|
||||
expect(await context.viem().getBalance({ address: CHARLETH_ADDRESS })).to.equal(
|
||||
DEFAULT_GENESIS_BALANCE
|
||||
);
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
|
||||
import { alith, createEthersTransaction, sendRawTransaction } from "@moonwall/util";
|
||||
import { encodeDeployData, toHex } from "viem";
|
||||
|
||||
describeSuite({
|
||||
id: "D023802",
|
||||
title: "TxPool - Future Ethereum transaction",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
let txHash: string;
|
||||
let deployData: string;
|
||||
|
||||
beforeAll(async () => {
|
||||
const { abi, bytecode } = fetchCompiledContract("MultiplyBy7");
|
||||
deployData = encodeDeployData({
|
||||
abi,
|
||||
bytecode,
|
||||
});
|
||||
|
||||
const rawTxn = await createEthersTransaction(context, {
|
||||
data: deployData,
|
||||
gasLimit: 1048576,
|
||||
nonce: 1, // future nonce
|
||||
});
|
||||
txHash = await sendRawTransaction(context, rawTxn);
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should appear in the txpool inspection",
|
||||
test: async function () {
|
||||
const inspect = (await context
|
||||
.viem()
|
||||
.transport.request({ method: "txpool_inspect" })) as any;
|
||||
// web3 rpc returns lowercase
|
||||
const data = inspect.queued[alith.address.toLowerCase()][toHex(1)];
|
||||
expect(data).to.not.be.undefined;
|
||||
expect(data).to.be.equal(
|
||||
"0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 10000000000 wei"
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should appear in the txpool content",
|
||||
test: async function () {
|
||||
const content = (await context
|
||||
.viem()
|
||||
.transport.request({ method: "txpool_content" })) as any;
|
||||
// web3 rpc returns lowercase
|
||||
const data = content.queued[alith.address.toLowerCase()][toHex(1)];
|
||||
expect(data).toMatchObject({
|
||||
blockHash: null,
|
||||
blockNumber: null,
|
||||
from: alith.address.toLowerCase(),
|
||||
gas: "0x100000",
|
||||
gasPrice: "0x2540be400",
|
||||
hash: txHash,
|
||||
input: deployData,
|
||||
nonce: toHex(1),
|
||||
to: null,
|
||||
transactionIndex: null,
|
||||
value: "0x0",
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
|
||||
import { ALITH_ADDRESS, createEthersTransaction, sendRawTransaction } from "@moonwall/util";
|
||||
import { encodeDeployData, toHex } from "viem";
|
||||
|
||||
describeSuite({
|
||||
id: "D023807",
|
||||
title: "TxPool - Pending Ethereum transaction",
|
||||
foundationMethods: "dev",
|
||||
testCases: ({ context, it, log }) => {
|
||||
let txHash: string;
|
||||
|
||||
beforeAll(async () => {
|
||||
const { abi, bytecode } = fetchCompiledContract("MultiplyBy7");
|
||||
const deployData = encodeDeployData({
|
||||
abi,
|
||||
bytecode,
|
||||
});
|
||||
|
||||
const rawTxn = await createEthersTransaction(context, {
|
||||
data: deployData,
|
||||
gasLimit: 1048576,
|
||||
nonce: 0,
|
||||
});
|
||||
txHash = await sendRawTransaction(context, rawTxn);
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T01",
|
||||
title: "should appear in the txpool inspection",
|
||||
test: async function () {
|
||||
const inspect = (await context
|
||||
.viem()
|
||||
.transport.request({ method: "txpool_inspect" })) as any;
|
||||
|
||||
// web3 rpc returns lowercase
|
||||
const data = inspect.pending[ALITH_ADDRESS.toLowerCase()][toHex(0)];
|
||||
expect(data).to.not.be.undefined;
|
||||
expect(data).to.be.equal(
|
||||
"0x0000000000000000000000000000000000000000: 0 wei + 1048576 gas x 10000000000 wei"
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T02",
|
||||
title: "should be marked as pending",
|
||||
test: async function () {
|
||||
const pendingTransaction = await context
|
||||
.viem()
|
||||
.getTransaction({ hash: txHash as `0x${string}` });
|
||||
|
||||
// pending transactions do not know yet to which block they belong to
|
||||
expect(pendingTransaction).to.include({
|
||||
blockNumber: null,
|
||||
hash: txHash,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
it({
|
||||
id: "T03",
|
||||
title: "should appear in the txpool content",
|
||||
test: async function () {
|
||||
const content = (await context
|
||||
.viem()
|
||||
.transport.request({ method: "txpool_content" })) as any;
|
||||
|
||||
// web3 rpc returns lowercase
|
||||
const data = content.pending[ALITH_ADDRESS.toLowerCase()][toHex(0)];
|
||||
expect(data).to.include({
|
||||
blockHash: null,
|
||||
blockNumber: null,
|
||||
from: ALITH_ADDRESS.toLowerCase(),
|
||||
gas: "0x100000",
|
||||
gasPrice: "0x2540be400",
|
||||
hash: txHash,
|
||||
nonce: toHex(0),
|
||||
to: null,
|
||||
value: "0x0",
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
Loading…
Reference in a new issue