一键导入
test-haskell-sync
Regression test - Start Yano devnet in regular BP mode, start Haskell cardano-node, verify sync stays in lock-step for 2+ epochs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Regression test - Start Yano devnet in regular BP mode, start Haskell cardano-node, verify sync stays in lock-step for 2+ epochs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Regression test - Two-node Yano devnet app chain with SCRIPT anchors (ADR 008.4 A2) and L1 observers - bootstrap the thread NFT, verify threshold co-signed anchor advances on the devnet L1, follower identity adoption, and stability-gated ~l1 deposit observations, then clean up.
Regression test - Two-node Yano devnet app chain with sequencer.mode=rotating and membership.mode=governed (ADR 008.2/008.3) - verify proposership rotates across L1-slot windows and a governed member-add activates identically on both nodes, then clean up.
Full regression of the ADR-006 app-chain extensions on a two-node devnet cluster — multi-chain (ordered-log + kv-registry), query surface, SSE, webhook sink, admin API (pause/drain/force-anchor), key rotation, evidence bundle, snapshot, metrics — then clean up.
App-chain smoke test — start a two-node Yano app-chain cluster on devnet (sequencer + member, L1 anchoring on), submit app messages, verify sequenced blocks/state roots/finality certs/MPF proofs/L1 anchor across both nodes, then clean up.
Regression test - Build Yano native image with GraalVM Java 24, start native devnet in regular BP mode, start Haskell cardano-node, verify sync stays in lock-step for 2+ epochs
Regression test - Build Yano native image with GraalVM Java 24, start native devnet in past-time-travel mode, shift epochs, catch up to wall-clock, start Haskell node, verify full sync from slot 0
| name | test-haskell-sync |
| description | Regression test - Start Yano devnet in regular BP mode, start Haskell cardano-node, verify sync stays in lock-step for 2+ epochs |
Run this end-to-end regression test to verify that a Haskell cardano-node can connect to and stay in sync with Yano devnet in regular block producer mode.
./gradlew :app:quarkusBuild (output: app/build/yano.jar)curl and tar available on PATH (used to fetch the Haskell node release)The Haskell cardano-node binary is downloaded automatically into
test-data-dir/haskell-node/ on first run by the setup script below.
Default: 11.0.1.
Override with the HASKELL_NODE_VERSION env var, e.g.:
export HASKELL_NODE_VERSION=11.1.0
Releases come from https://github.com/IntersectMBO/cardano-node. The setup
script keeps the existing binary if its version is >= the requested one;
otherwise it downloads and replaces it. macOS uses the macos-amd64 asset
(arm64 build has known compatibility issues for these tests).
app/config/network/devnet/pv10/cardano-node 11.0.x enforces strict cost-model length validation: alonzo
expects exactly 166 PlutusV1 entries and conway expects exactly 251 PlutusV3
entries. The PV11-flavoured devnet folder at app/config/network/devnet/
ships larger cost models (alonzo 332, conway 297) which 11.0.x rejects with
errors like "Number of parameters supplied 332 does not match the expected number of 166".
A Haskell-compatible PV10 drop-in lives at app/config/network/devnet/pv10/
with alonzo-genesis.json (166 entries) and conway-genesis.json (251
entries). The kes/opcert/vrf signing keys in pv10/ are byte-identical to the
ones in devnet/. Yano is started with -Dyano.genesis.*-file=…/pv10/… so
the same files reach the Haskell peer via
copy-devnet-genesis-to-haskell.sh app/config/network/devnet/pv10.
setup-haskell-test-node.sh still downloads cardano-node, the
dijkstra-genesis stub, and the topology/config scaffolding. The
test-data-dir/genesis-overrides/conway-genesis.json it writes is no longer
the source of truth for these tests — it remains only as a fallback for
callers that point at the PV11 devnet folder directly.
rm -rf app/chainstate./gradlew :app:quarkusBuildbash scripts/haskell-compatibility/setup-haskell-test-node.sh
Verify:
test-data-dir/haskell-node/bin/cardano-node exists and is executabletest-data-dir/genesis-overrides/conway-genesis.json existspv10/ genesis set:
cd app && java -Dquarkus.profile=devnet -Dquarkus.http.port=7070 \
-Dyano.genesis.shelley-genesis-file=$(pwd)/config/network/devnet/pv10/shelley-genesis.json \
-Dyano.genesis.byron-genesis-file=$(pwd)/config/network/devnet/pv10/byron-genesis.json \
-Dyano.genesis.alonzo-genesis-file=$(pwd)/config/network/devnet/pv10/alonzo-genesis.json \
-Dyano.genesis.conway-genesis-file=$(pwd)/config/network/devnet/pv10/conway-genesis.json \
-Dyano.genesis.protocol-parameters-file=$(pwd)/config/network/devnet/pv10/protocol-param.json \
-jar build/yano.jar > /tmp/yano-test-sync.log 2>&1 &
pv10/ folder:
bash scripts/haskell-compatibility/copy-devnet-genesis-to-haskell.sh app/config/network/devnet/pv10
The script copies shelley/byron/alonzo/conway from pv10/ so both nodes
load identical bytes.test-data-dir/haskell-node/files/shelley-genesis.json matches Yano's
(Yano rewrites the systemStart field inside pv10/shelley-genesis.json at startup).cd test-data-dir/haskell-node
rm -rf db && mkdir -p db
./bin/cardano-node run --topology files/topology.json --database-path db \
--socket-path db/node.socket --host-addr 0.0.0.0 --port 3002 \
--config configuration.json > /tmp/haskell-test-sync.log 2>&1 &
bash test-data-dir/haskell-node/tip.sh
Node configuration: … dump line; the harmless EKGView … Address already in use line can be ignored)Kill both test nodes (by PID) after verification.
/tmp/yano-test-sync.log/tmp/haskell-test-sync.logapp/build/yano.jar and any block-producer system
properties use the yano.block-producer.* prefix (NOT yaci.node.block-producer.*).test-data-dir/,
which is gitignored.DijkstraGenesisFile
entry in configuration.json plus a matching files/dijkstra-genesis.json.
The setup script writes both automatically (using the upstream
testnet-template-dijkstra.json parameters), so no manual action is required.
Without it cardano-node 11.0.x exits with
AesonException "Error in $: key \"DijkstraGenesisFile\" not found".test-data-dir/haskell-node/tip.sh queries the running Haskell
node's tip via the bundled cardano-cli and the local node socket. It returns
JSON like {"slot": 1246, "epoch": 2, "hash": "…", "syncProgress": "100.00"}.