mirror of
https://github.com/datahaven-xyz/datahaven
synced 2026-05-24 01:38:32 +00:00
## Summary
- Fixes srtool build failure with `UnknownOpcode(252)` error during
metadata hash generation
- Removes hardcoded `WASM_BUILD_STD=0` to allow srtool to auto-detect
correct settings based on Rust version
- Adds `metadata-hash` feature to node Cargo.toml for CheckMetadataHash
extension
## Root Cause
The `WASM_BUILD_STD=0` setting forced srtool to use pre-built standard
library crates that were compiled with incompatible WASM features.
During metadata hash generation, the runtime builder encountered opcode
252 (likely from bulk memory operations) which the deserializer couldn't
recognize, causing the build to fail with:
```
thread 'main' panicked at metadata_hash.rs:73:10:
`Metadata::metadata_at_version` should exist.: RuntimeConstruction(Other("cannot deserialize module: UnknownOpcode(252)"))
```
## Changes
1. **operator/scripts/build-runtime-srtool.sh**: Removed hardcoded `-e
WASM_BUILD_STD=0` line
- Allows srtool to determine appropriate setting based on Rust version
- For Rust < 1.84: defaults to WASM_BUILD_STD=1 (enabled)
- For Rust >= 1.84: defaults to WASM_BUILD_STD=0 (disabled)
2. **operator/node/Cargo.toml**: Added `metadata-hash` feature
propagation
- Enables metadata-hash feature for all runtime variants (stagenet,
mainnet, testnet)
- Required for CheckMetadataHash extension support
## Test Plan
- [x] Successfully built stagenet runtime with srtool 1.88.0
- [x] Build completed in ~14 minutes without metadata hash errors
- [x] Verified WASM artifacts generated correctly
## Testing Command
```bash
GH_WORKFLOW_MATRIX_CHAIN=stagenet \
RUNTIME_BUILD_OPTS="--features=on-chain-release-build" \
RUNTIME_BUILD_PROFILE="production" \
GH_WORKFLOW_MATRIX_SRTOOL_IMAGE="paritytech/srtool" \
GH_WORKFLOW_MATRIX_SRTOOL_IMAGE_TAG="1.88.0" \
WASM_BUILD_STD=1 \
./operator/scripts/build-runtime-srtool.sh
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
174 lines
6.9 KiB
TOML
174 lines
6.9 KiB
TOML
[package]
|
|
authors = { workspace = true }
|
|
description = "A solochain node template built with Substrate, part of Polkadot Sdk."
|
|
edition = { workspace = true }
|
|
homepage = { workspace = true }
|
|
license = "Unlicense"
|
|
name = "datahaven-node"
|
|
publish = false
|
|
repository = { workspace = true }
|
|
version = { workspace = true }
|
|
|
|
build = "build.rs"
|
|
|
|
[package.metadata.docs.rs]
|
|
targets = ["x86_64-unknown-linux-gnu"]
|
|
|
|
[dependencies]
|
|
# Local
|
|
datahaven-mainnet-runtime = { workspace = true }
|
|
datahaven-runtime-common = { workspace = true }
|
|
datahaven-stagenet-runtime = { workspace = true }
|
|
datahaven-testnet-runtime = { workspace = true }
|
|
|
|
# Crates.io
|
|
clap = { features = ["derive"], workspace = true }
|
|
codec = { workspace = true }
|
|
flume = { workspace = true }
|
|
futures = { features = ["thread-pool"], workspace = true }
|
|
hex-literal = { workspace = true }
|
|
jsonrpsee = { features = ["server"], workspace = true }
|
|
log = { workspace = true }
|
|
openssl-sys = { workspace = true }
|
|
serde_json = { workspace = true, default-features = true }
|
|
url = { workspace = true }
|
|
async-channel = { workspace = true }
|
|
|
|
#MMR
|
|
mmr-rpc = { workspace = true, default-features = true }
|
|
pallet-beefy-mmr = { workspace = true, default-features = true }
|
|
pallet-mmr = { workspace = true, default-features = true }
|
|
|
|
# Polkadot SDK
|
|
frame-benchmarking-cli = { workspace = true, default-features = true }
|
|
frame-metadata-hash-extension = { workspace = true, default-features = true }
|
|
frame-system = { workspace = true, default-features = true }
|
|
frame-system-rpc-runtime-api = { workspace = true }
|
|
pallet-im-online = { workspace = true }
|
|
pallet-transaction-payment = { workspace = true, default-features = true }
|
|
pallet-transaction-payment-rpc = { workspace = true, default-features = true }
|
|
pallet-transaction-payment-rpc-runtime-api = { workspace = true, features = [
|
|
"std",
|
|
] }
|
|
sc-basic-authorship = { workspace = true, default-features = true }
|
|
sc-cli = { workspace = true, default-features = true }
|
|
sc-client-api = { workspace = true, default-features = true }
|
|
sc-consensus = { workspace = true, default-features = true }
|
|
sc-consensus-babe = { workspace = true, default-features = true }
|
|
sc-consensus-beefy = { workspace = true, default-features = true }
|
|
sc-consensus-beefy-rpc = { workspace = true, default-features = true }
|
|
sc-consensus-grandpa = { workspace = true, default-features = true }
|
|
sc-consensus-manual-seal = { workspace = true, default-features = true }
|
|
sc-executor = { workspace = true, default-features = true }
|
|
sc-network = { workspace = true, default-features = true }
|
|
sc-network-sync = { workspace = true }
|
|
sc-offchain = { workspace = true, default-features = true }
|
|
sc-rpc = { workspace = true, default-features = true }
|
|
sc-service = { workspace = true, default-features = true }
|
|
sc-telemetry = { workspace = true, default-features = true }
|
|
sc-transaction-pool = { workspace = true, default-features = true }
|
|
sc-transaction-pool-api = { workspace = true, default-features = true }
|
|
sp-api = { workspace = true, default-features = true }
|
|
sp-block-builder = { workspace = true, default-features = true }
|
|
sp-blockchain = { workspace = true, default-features = true }
|
|
sp-consensus-babe = { workspace = true, default-features = true }
|
|
sp-consensus-beefy = { workspace = true, default-features = true }
|
|
sp-consensus-grandpa = { workspace = true, default-features = true }
|
|
sp-core = { workspace = true, default-features = true }
|
|
sp-genesis-builder = { workspace = true, default-features = true }
|
|
sp-inherents = { workspace = true, default-features = true }
|
|
sp-io = { workspace = true, default-features = true }
|
|
sp-keyring = { workspace = true, default-features = true }
|
|
sp-offchain = { workspace = true, default-features = true }
|
|
sp-runtime = { workspace = true, default-features = true }
|
|
sp-session = { workspace = true, default-features = true }
|
|
sp-timestamp = { workspace = true, default-features = true }
|
|
sp-transaction-pool = { workspace = true, default-features = true }
|
|
substrate-frame-rpc-system = { workspace = true, default-features = true }
|
|
|
|
# Frontier
|
|
fc-api = { workspace = true }
|
|
fc-cli = { workspace = true }
|
|
fc-consensus = { workspace = true }
|
|
fc-db = { workspace = true }
|
|
fc-mapping-sync = { workspace = true, features = ["sql"] }
|
|
fc-rpc = { workspace = true, features = ["txpool"] }
|
|
fc-rpc-core = { workspace = true, features = ["txpool"] }
|
|
fc-storage = { workspace = true }
|
|
fp-account = { workspace = true }
|
|
fp-evm = { workspace = true }
|
|
fp-rpc = { workspace = true }
|
|
pallet-ethereum = { workspace = true }
|
|
|
|
# StorageHub
|
|
pallet-file-system = { workspace = true }
|
|
pallet-file-system-runtime-api = { workspace = true }
|
|
pallet-payment-streams = { workspace = true }
|
|
pallet-payment-streams-runtime-api = { workspace = true }
|
|
pallet-proofs-dealer = { workspace = true }
|
|
pallet-proofs-dealer-runtime-api = { workspace = true }
|
|
pallet-storage-providers = { workspace = true }
|
|
pallet-storage-providers-runtime-api = { workspace = true }
|
|
shc-actors-framework = { workspace = true }
|
|
shc-actors-derive = { workspace = true }
|
|
shc-blockchain-service = { workspace = true }
|
|
shc-file-transfer-service = { workspace = true }
|
|
shc-common = { workspace = true }
|
|
shc-file-manager = { workspace = true }
|
|
shc-fisherman-service = { workspace = true }
|
|
shc-forest-manager = { workspace = true }
|
|
shc-indexer-db = { workspace = true }
|
|
shc-indexer-service = { workspace = true }
|
|
shc-rpc = { workspace = true }
|
|
shc-client = { workspace = true }
|
|
shp-constants = { workspace = true }
|
|
shp-file-key-verifier = { workspace = true }
|
|
shp-file-metadata = { workspace = true }
|
|
shp-opaque = { workspace = true }
|
|
shp-traits = { workspace = true }
|
|
shp-types = { workspace = true }
|
|
sp-keystore = { workspace = true }
|
|
serde = { workspace = true, default-features = true }
|
|
cumulus-client-service = { workspace = true }
|
|
toml = { workspace = true }
|
|
|
|
[build-dependencies]
|
|
substrate-build-script-utils = { workspace = true, default-features = true }
|
|
|
|
[features]
|
|
default = ["std"]
|
|
std = [
|
|
"datahaven-runtime-common/std",
|
|
"datahaven-stagenet-runtime/std",
|
|
"datahaven-mainnet-runtime/std",
|
|
"datahaven-testnet-runtime/std",
|
|
"shp-opaque/std"
|
|
]
|
|
|
|
# Dependencies that are only required if runtime benchmarking should be build.
|
|
runtime-benchmarks = [
|
|
"frame-benchmarking-cli/runtime-benchmarks",
|
|
"frame-system/runtime-benchmarks",
|
|
"sc-service/runtime-benchmarks",
|
|
"datahaven-runtime-common/runtime-benchmarks",
|
|
"datahaven-stagenet-runtime/runtime-benchmarks",
|
|
"datahaven-mainnet-runtime/runtime-benchmarks",
|
|
"datahaven-testnet-runtime/runtime-benchmarks",
|
|
"sp-runtime/runtime-benchmarks",
|
|
]
|
|
# Enable features that allow the runtime to be tried and debugged. Name might be subject to change
|
|
# in the near future.
|
|
try-runtime = [
|
|
"frame-system/try-runtime",
|
|
"pallet-transaction-payment/try-runtime",
|
|
"datahaven-stagenet-runtime/try-runtime",
|
|
"datahaven-mainnet-runtime/try-runtime",
|
|
"datahaven-testnet-runtime/try-runtime",
|
|
"sp-runtime/try-runtime",
|
|
]
|
|
|
|
metadata-hash = [
|
|
"datahaven-stagenet-runtime/metadata-hash",
|
|
"datahaven-mainnet-runtime/metadata-hash",
|
|
"datahaven-testnet-runtime/metadata-hash",
|
|
]
|