Lors d'un vote au Technical Committee pour un runtime upgrade, chaque membre doit vérifier que le hash blake2_256 de la preimage correspond bien au WASM compilé depuis le code source publié. Sans cette vérification, un upgrade malveillant pourrait se faire passer pour légitime.
Checkout la branche du runtime upgrade et compilez avec srtool :
git checkout runtime/<network>-<version>
cargo xtask release runtime build <network>Exemple pour GTest 1100 :
git checkout runtime/gtest-1100
cargo xtask release runtime build gtestLe WASM est généré dans release/gtest_runtime.compact.compressed.wasm.
La commande xtask utilise en interne le Docker paritytech/srtool dont la
version correspond au channel Rust dans rust-toolchain.toml (actuellement
1.88.0). Le build est reproductible : le même code source produit toujours
le même binaire WASM, quel que soit la machine.
Commande srtool manuelle (sans xtask)
docker run \
-i \
--rm \
-e PACKAGE=<network>-runtime \
-e RUNTIME_DIR=runtime/<network> \
-v $PWD:/build \
paritytech/srtool:1.88.0 build --app --json -cMLe WASM est dans :
runtime/<network>/target/srtool/release/wbuild/<network>-runtime/<network>_runtime.compact.compressed.wasm
cat release/srtool_output_<network>.json | grep blake2_256 | jq -r '.runtimes.compressed.blake2_256'Le grep est nécessaire car le fichier srtool contient des lignes non-JSON.
Notez ce hash, c'est la référence de votre compilation locale.
Sur Duniter Portal connecté au réseau concerné :
- Allez dans Governance > Tech. committee > Proposals
- Identifiez la proposal de runtime upgrade
- Vérifiez que la proposal référence bien une preimage contenant
upgradeOrigin.dispatchAsRoot(system.setCode(...)) - Cliquez sur le lien de la preimage pour voir le
code: Bytesdu runtime - Vérifiez que le hash de la preimage correspond bien au call
system.setCoderéférencé dans la proposal
Copiez le code: Bytes (la valeur hexadécimale complète du WASM, plusieurs Mo)
depuis la preimage et placez-le dans un script :
WASM_BYTES=0x42...
echo $WASM_BYTES | xxd -r -p | python3 -c \
"import sys, hashlib; print('0x' + hashlib.blake2b(sys.stdin.buffer.read(), digest_size=32).hexdigest())"Le hash blake2_256 affiché doit correspondre exactement à celui obtenu à l'etape 2 via srtool.
Si les deux hash blake2_256 correspondent, vous avez la certitude que le code source de la branche git produit bien le runtime proposé au vote. Vous pouvez voter en confiance.
- Runtime upgrade — Procédure complète de bout en bout
- Release — Build et publication des artifacts sur GitLab
- Post du forum — Procédure originale de vérification