Merge build/master into driver-check (the box mirror; GitHub suspended): the build-remote.sh router fix 721e0f3a and the rest of master over release-0.3.21
Conflicts resolved: the release notes and the FUD ledger by union (the 0.3.21 branch's text first, master's after; release-0.3.21.md's node-line section kept as 6a under master's section 6); release-rules.md takes master's 4c row; tools/ci/pre-push.sh keeps both the overlap sweep and the money test; site/yourcard.js carries the currency picker (currency-21) with master's vendor badge folded in (badge-slot span, marks JSON, vendorOf, badge on change). Nothing else changed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
45
.github/workflows/ci-red.yml
vendored
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# The red watcher as its own workflow, on workflow_run, so the copy on master watches EVERY branch's ci run whatever
|
||||
# ci.yml that branch carries: GitHub runs a workflow_run workflow from the default branch only, and the branch's own
|
||||
# ci.yml never enters it (7 October 2026: the inline `red` job of ci.yml was conditioned on master and release-*, and
|
||||
# a feature branch would have waited for a merge of master before its reds were posted at all).
|
||||
#
|
||||
# One line per failed run (tools/ci/red-watch.mjs record, idempotent per run attempt) to /srv/ci-red/red.jsonl on the
|
||||
# box; the box's igneum-ci-red.timer posts each new line once to the hidden updates channel, naming the branch, the
|
||||
# commit, the red check and the pushing author. Runs on the box's own runner (not a GitHub-hosted machine: the billing
|
||||
# block of 6 October 2026, 18:37Z to 20:10Z, failed every hosted job at start and nobody was told). Never blocks a
|
||||
# release: it reads the run, writes one line, and ends.
|
||||
name: ci-red
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [ci]
|
||||
types: [completed]
|
||||
jobs:
|
||||
red:
|
||||
name: red watcher (every branch; one line per failed run, with the branch, commit, red check and pushing author, to the updates channel and the box file)
|
||||
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
|
||||
# the label ci-red is on igneum-build-1 only (added through the runners API on 7 October 2026; the default of
|
||||
# RUNNER_LABELS in provision.sh carries it): the record file and the poster (igneum-ci-red.timer, the webhook file)
|
||||
# live on that box, and the pool label igneum-build-1 is shared with igneum-build-2 since the same day
|
||||
runs-on: [self-hosted, linux, x64, ci-red]
|
||||
timeout-minutes: 5
|
||||
permissions:
|
||||
actions: read # the failed run's jobs API (the first real red run, 21:19Z on 6 October: the default token answered 403 and the line carried no step)
|
||||
contents: read
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: tools/ci
|
||||
- name: record the failed run (one line, the branch, the commit, the failed jobs and their first failed step from the run's own API, the pushing author)
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
RED_WATCH_RUN_ID: ${{ github.event.workflow_run.id }}
|
||||
RED_WATCH_ATTEMPT: ${{ github.event.workflow_run.run_attempt }}
|
||||
RED_WATCH_WORKFLOW: ${{ github.event.workflow_run.name }}
|
||||
RED_WATCH_BRANCH: ${{ github.event.workflow_run.head_branch }}
|
||||
RED_WATCH_SHA: ${{ github.event.workflow_run.head_sha }}
|
||||
RED_WATCH_EVENT: ${{ github.event.workflow_run.event }}
|
||||
RED_WATCH_URL: ${{ github.event.workflow_run.html_url }}
|
||||
RED_WATCH_ACTOR: ${{ github.event.workflow_run.actor.login }}
|
||||
RED_WATCH_TITLE: ${{ github.event.workflow_run.head_commit.message }}
|
||||
RED_WATCH_AUTHOR: ${{ github.event.workflow_run.head_commit.author.name }}
|
||||
run: node tools/ci/red-watch.mjs record --file /srv/ci-red/red.jsonl
|
||||
80
.github/workflows/ci.yml
vendored
|
|
@ -8,13 +8,16 @@
|
|||
# local gate and CI cannot drift (6 October 2026: 131 red `ci` runs in three days, 92 of them on master, every one a
|
||||
# tree check that would have failed on the pushing machine in under 25 s; docs/analysis/ci-failures-2026-10-06.md).
|
||||
#
|
||||
# Where it runs: `pow` and `sims` go to the box's runner (igneum-build-1, rustc pinned, sccache read-only, 48 jobs)
|
||||
# Where it runs: `pow` and `sims` go to the self-hosted pool (label igneum-build-1: the runners on igneum-build-1 and, since
|
||||
# 7 October 2026, igneum-build-2, which carries that label too; rustc pinned, sccache read-only) and only when the push
|
||||
# touched code (the `changes` job; a docs-only push skips them)
|
||||
# when the repository variable IGNEUM_CI_RUNNER is `box`, else to ubuntu-latest (docs/plans/ci-self-hosted.md; GitHub
|
||||
# has no fallback in runs-on, the variable is the switch). The `site` job stays on GitHub's machines. The `red` job
|
||||
# runs on the box after any failed run on ANY branch and records the failure for the watcher
|
||||
# (tools/ci/red-watch.mjs; infra/build-server/ci-red): one line per run, naming the branch, the commit, the red check
|
||||
# and the pushing author, to the hidden updates channel and to /srv/ci-red/red.jsonl, so nobody opens the Actions page
|
||||
# to learn a branch is red (master and release-* only until 7 October 2026, when eight red runs on ca3-v4-node went unseen).
|
||||
# has no fallback in runs-on, the variable is the switch). The `site` job stays on GitHub's machines. The red watcher
|
||||
# is its own workflow, .github/workflows/ci-red.yml (workflow_run, so the copy on master watches every branch's run
|
||||
# whatever ci.yml that branch carries): one line per failed run, naming the branch, the commit, the red check and the
|
||||
# pushing author, to the hidden updates channel and to /srv/ci-red/red.jsonl (tools/ci/red-watch.mjs;
|
||||
# infra/build-server/ci-red), so nobody opens the Actions page to learn a branch is red (the inline `red` job here
|
||||
# watched master and release-* only until 7 October 2026, when eight red runs on ca3-v4-node went unseen).
|
||||
#
|
||||
# What does not run, on purpose: the node fork (vendor/igneum-node*, a rusty-kaspa fork of about 500 crates with
|
||||
# rocksdb, blst and the execution layer) is gitignored here and too big for the free runners today (a cold build is
|
||||
|
|
@ -25,8 +28,39 @@ on:
|
|||
push:
|
||||
pull_request:
|
||||
jobs:
|
||||
changes:
|
||||
# What the push touched (tools/ci/docs-only-check.sh): a push of documents only (docs/, site/, *.md) skips the two
|
||||
# compile-or-compute jobs below, which read none of those paths, so the self-hosted queue carries only runs that can
|
||||
# change their result (7 October 2026: 31 runs queued on one runner, most of them status-document pushes). The tree
|
||||
# gate (the `site` job) runs on ubuntu-latest for every push. A pull request, a new branch or a force push answers
|
||||
# code=true (no `before` to compare from), as does any error reading the compare API: when in doubt, run.
|
||||
name: what the push touched (docs-only runs skip the Rust and simulator jobs)
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
code: ${{ steps.classify.outputs.code }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: tools/ci
|
||||
- id: classify
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
BEFORE: ${{ github.event.before }}
|
||||
AFTER: ${{ github.sha }}
|
||||
REPO: ${{ github.repository }}
|
||||
EVENT: ${{ github.event_name }}
|
||||
run: |
|
||||
if [ "$EVENT" != push ] || [ -z "$BEFORE" ] || [ "$BEFORE" = 0000000000000000000000000000000000000000 ]; then
|
||||
echo "code=true" >> "$GITHUB_OUTPUT"; echo "no base to compare from ($EVENT): the compile jobs run"; exit 0
|
||||
fi
|
||||
files="$(gh api "repos/$REPO/compare/$BEFORE...$AFTER" --paginate --jq '.files[].filename' 2>/dev/null || true)"
|
||||
line="$(printf '%s\n' "$files" | bash tools/ci/docs-only-check.sh)"
|
||||
echo "$line" >> "$GITHUB_OUTPUT"
|
||||
echo "$line: $(printf '%s\n' "$files" | grep -c .) changed path(s) between ${BEFORE:0:8} and ${AFTER:0:8}"
|
||||
pow:
|
||||
name: igneum-pow tests, igneum-census build
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.code == 'true' }}
|
||||
runs-on: ${{ vars.IGNEUM_CI_RUNNER == 'box' && fromJSON('["self-hosted", "linux", "x64", "igneum-build-1"]') || 'ubuntu-latest' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
@ -42,6 +76,10 @@ jobs:
|
|||
run: cargo build --release
|
||||
sims:
|
||||
name: simulators, quick modes
|
||||
needs: changes
|
||||
# master and release-* pushes, and pull requests into them, only (main, 7 October 2026: every code push cost two box jobs and the
|
||||
# queue read 22); a feature-branch code push runs the igneum-pow tests alone. tools/ci/sims-branch-check.sh holds this rule.
|
||||
if: ${{ needs.changes.outputs.code == 'true' && ((github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release-'))) || (github.event_name == 'pull_request' && (github.base_ref == 'master' || startsWith(github.base_ref, 'release-')))) }}
|
||||
runs-on: ${{ vars.IGNEUM_CI_RUNNER == 'box' && fromJSON('["self-hosted", "linux", "x64", "igneum-build-1"]') || 'ubuntu-latest' }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
@ -71,33 +109,13 @@ jobs:
|
|||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '22'
|
||||
- name: a headless Chromium for the text-overlap sweep (Playwright outside the tree; the gate finds it through IGNEUM_PLAYWRIGHT_DIR)
|
||||
run: |
|
||||
mkdir -p /tmp/pw && cd /tmp/pw && npm init -y >/dev/null && npm i --no-audit --no-fund playwright@1.56 | tail -1
|
||||
npx playwright install --with-deps chromium | tail -1
|
||||
echo "IGNEUM_PLAYWRIGHT_DIR=/tmp/pw" >> "$GITHUB_ENV"
|
||||
- name: the tree gate, tools/ci/pre-push.sh --ci (the same script the pre-push hook runs; one line per check, a red check prints its output)
|
||||
run: bash tools/ci/pre-push.sh --ci
|
||||
- name: public stats API answers with the documented fields (the live site; master only, the endpoints exist there after the merge)
|
||||
if: github.ref == 'refs/heads/master'
|
||||
run: node tools/ci/public-api-check.mjs https://igneum.network
|
||||
|
||||
red:
|
||||
# Runs when a run on any branch has a failed job, on the box's own runner (not a GitHub-hosted machine:
|
||||
# the billing block of 6 October 2026, 18:37Z to 20:10Z, failed every hosted job at start and nobody was told).
|
||||
# tools/ci/red-watch.mjs record appends ONE line for this run to /srv/ci-red/red.jsonl (idempotent per run attempt);
|
||||
# the box's igneum-ci-red.timer posts each new line once to the hidden updates channel. Never blocks a release:
|
||||
# it reads the run, writes one line, and ends.
|
||||
name: red watcher (every branch; one line per failed run, with the branch, commit, red check and pushing author, to the updates channel and the box file)
|
||||
needs: [pow, sims, site]
|
||||
if: ${{ failure() }}
|
||||
runs-on: [self-hosted, linux, x64, igneum-build-1]
|
||||
timeout-minutes: 5
|
||||
permissions:
|
||||
actions: read # the run's jobs API (the first real red run, 21:19Z: the default token answered 403 and the line carried no step)
|
||||
contents: read
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
sparse-checkout: tools/ci
|
||||
- name: record this run (one line, the branch, the commit, the failed jobs and their first failed step from the run's own API, the pushing author)
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
RED_WATCH_TITLE: ${{ github.event.head_commit.message }}
|
||||
RED_WATCH_AUTHOR: ${{ github.event.head_commit.author.name }}
|
||||
run: node tools/ci/red-watch.mjs record --file /srv/ci-red/red.jsonl
|
||||
|
|
|
|||
29
docs/design/genesis-forward-harness/digest-base-dc141409.log
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Latency ladder inactive (no activation in the override file): every class v4 program at rung 0, 27 shadow passes; no ladder bits in the header
|
||||
Program class signal inactive (the window or the floor is absent from the override file): headers carry block version 2 exactly
|
||||
Fees on igneum-devnet-973: pgas table v0, B_p 30000000 pgas, S_p 7500000 pgas, floors 1000000000 wei per gas and 1000000000 wei per pgas; calibrated v1 from DAA score never
|
||||
Consensus params digest: 079d8a7e736abbd4b135eb1d652466ca7906ea1b200e22eac97f795e626356e7 (exchanged in the p2p handshake; a peer with another digest is refused)
|
||||
2026-10-07 15:14:29.331+02:00 [INFO ] igneumd/2.1.0-dc141409
|
||||
2026-10-07 15:14:29.331+02:00 [INFO ] Application directory: gf-digest/d-base
|
||||
2026-10-07 15:14:29.331+02:00 [INFO ] Data directory: gf-digest/d-base/igneum-devnet-973/datadir
|
||||
2026-10-07 15:14:29.331+02:00 [INFO ] Logs to console only
|
||||
2026-10-07 15:14:29.350+02:00 [INFO ] Finality v2 (igneum-devnet-973): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 (frozen table, certificate fold) from checkpoint DAA never; 0 checkpoints known, next index 1, 0 locks, 0 keys; C1 in DAA seconds from DAA never; weight-gated deep fork choice from DAA never; leave rule (W7, delay 3600 DAA) from checkpoint DAA never, 0 leaves
|
||||
2026-10-07 15:14:29.363+02:00 [INFO ] [igneum-exec] proving v0: payouts from DAA score never, window 7200 DAA, dust 5, verifier Off
|
||||
2026-10-07 15:14:29.363+02:00 [INFO ] [igneum-exec] proving v1: segment records from DAA score never, 8 blocks a segment, unproven after 600 DAA, aggregator share 1000 bps, shard program id unknown, aggregator id unknown
|
||||
2026-10-07 15:14:29.364+02:00 [INFO ] [igneum-exec] verifying keys embedded: shard program id 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a aggregator id 0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896
|
||||
2026-10-07 15:14:29.370+02:00 [INFO ] template prewarm: on (the cached block template is rebuilt on every virtual change; IGNEUM_TEMPLATE_PREWARM=0 turns it off)
|
||||
2026-10-07 15:14:29.371+02:00 [INFO ] GRPC Server starting on: 127.0.0.1:29770
|
||||
2026-10-07 15:14:29.372+02:00 [INFO ] P2P Server starting on: 127.0.0.1:29771
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] chain follower started
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] proof verifier: Off (no SP1 verification on this node)
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] exec sync: sink edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block 0; pruning point edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0); retention root edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0), its body held
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] eth_ JSON-RPC listening on 127.0.0.1:26790
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] exec sync: no snapshot to resume from (no snapshot file); the follower starts at genesis
|
||||
2026-10-07 15:14:29.373+02:00 [INFO ] [igneum-exec] exec sync: waiting for consensus to sync before the executor starts (the sink is 393269 s old)
|
||||
2026-10-07 15:14:29.373+02:00 [WARN ] [igneum-exec] cannot bind the eth_ JSON-RPC server on 127.0.0.1:26790: Address already in use (os error 98)
|
||||
2026-10-07 15:14:29.374+02:00 [INFO ] WRPC Server starting on: 127.0.0.1:29772
|
||||
2026-10-07 15:14:29.474+02:00 [INFO ] [igneum-exec] chain follower stopped
|
||||
^SIGTERM - shutting down...
|
||||
2026-10-07 15:14:54.316+02:00 [INFO ] P2P Server stopped: 127.0.0.1:29771
|
||||
2026-10-07 15:14:54.316+02:00 [INFO ] WRPC Server stopped on: 127.0.0.1:29772
|
||||
2026-10-07 15:14:54.317+02:00 [INFO ] GRPC Server stopped on: 127.0.0.1:29770
|
||||
2026-10-07 15:14:54.824+02:00 [INFO ] igneumd has stopped...
|
||||
29
docs/design/genesis-forward-harness/digest-no-file.log
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Latency ladder inactive (no activation in the override file): every class v4 program at rung 0, 27 shadow passes; no ladder bits in the header
|
||||
Program class signal inactive (the window or the floor is absent from the override file): headers carry block version 2 exactly
|
||||
Fees on igneum-devnet-973: pgas table v0, B_p 30000000 pgas, S_p 7500000 pgas, floors 1000000000 wei per gas and 1000000000 wei per pgas; calibrated v1 from DAA score never
|
||||
Consensus params digest: 079d8a7e736abbd4b135eb1d652466ca7906ea1b200e22eac97f795e626356e7 (exchanged in the p2p handshake; a peer with another digest is refused)
|
||||
2026-10-07 15:12:35.092+02:00 [INFO ] igneumd/2.1.0-75810130
|
||||
2026-10-07 15:12:35.093+02:00 [INFO ] Application directory: gf-digest/d-none
|
||||
2026-10-07 15:12:35.093+02:00 [INFO ] Data directory: gf-digest/d-none/igneum-devnet-973/datadir
|
||||
2026-10-07 15:12:35.093+02:00 [INFO ] Logs to console only
|
||||
2026-10-07 15:12:35.128+02:00 [INFO ] Finality v2 (igneum-devnet-973): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 (frozen table, certificate fold) from checkpoint DAA never; 0 checkpoints known, next index 1, 0 locks, 0 keys; C1 in DAA seconds from DAA never; weight-gated deep fork choice from DAA never; leave rule (W7, delay 3600 DAA) from checkpoint DAA never, 0 leaves; key succession (W5) from checkpoint DAA never, 0 successions; signature scheme 0 (0 = BLS12-381), any other refused until a class names it
|
||||
2026-10-07 15:12:35.136+02:00 [INFO ] [igneum-exec] proving v0: payouts from DAA score never, window 7200 DAA, dust 5, verifier Off
|
||||
2026-10-07 15:12:35.136+02:00 [INFO ] [igneum-exec] proving v1: segment records from DAA score never, 8 blocks a segment, unproven after 600 DAA, aggregator share 1000 bps, shard program id unknown, aggregator id unknown
|
||||
2026-10-07 15:12:35.136+02:00 [INFO ] [igneum-exec] proof archive at gf-digest/d-none/igneum-devnet-973/datadir/evm/proofs: 0 proofs
|
||||
2026-10-07 15:12:35.136+02:00 [INFO ] [igneum-exec] verifying keys embedded: shard program id 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a aggregator id 0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896
|
||||
2026-10-07 15:12:35.141+02:00 [INFO ] template prewarm: on (the cached block template is rebuilt on every virtual change; IGNEUM_TEMPLATE_PREWARM=0 turns it off)
|
||||
2026-10-07 15:12:35.141+02:00 [INFO ] GRPC Server starting on: 127.0.0.1:29760
|
||||
2026-10-07 15:12:35.141+02:00 [INFO ] P2P Server starting on: 127.0.0.1:29761
|
||||
2026-10-07 15:12:35.141+02:00 [INFO ] [igneum-exec] eth_ JSON-RPC listening on 127.0.0.1:26790
|
||||
2026-10-07 15:12:35.141+02:00 [INFO ] [igneum-exec] proof verifier: Off (no SP1 verification on this node)
|
||||
2026-10-07 15:12:35.142+02:00 [INFO ] [igneum-exec] chain follower started
|
||||
2026-10-07 15:12:35.142+02:00 [INFO ] WRPC Server starting on: 127.0.0.1:29762
|
||||
2026-10-07 15:12:35.142+02:00 [WARN ] [igneum-exec] cannot bind the eth_ JSON-RPC server on 127.0.0.1:26790: Address already in use (os error 98)
|
||||
2026-10-07 15:12:35.142+02:00 [INFO ] [igneum-exec] exec sync: sink edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block 0; pruning point edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0); retention root edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0), its body held
|
||||
2026-10-07 15:12:35.142+02:00 [INFO ] [igneum-exec] exec sync: no snapshot to resume from (no snapshot file); the follower starts at genesis
|
||||
2026-10-07 15:12:35.142+02:00 [INFO ] [igneum-exec] chain follower stopped
|
||||
^SIGTERM - shutting down...
|
||||
2026-10-07 15:13:00.089+02:00 [INFO ] P2P Server stopped: 127.0.0.1:29761
|
||||
2026-10-07 15:13:00.089+02:00 [INFO ] GRPC Server stopped on: 127.0.0.1:29760
|
||||
2026-10-07 15:13:00.089+02:00 [INFO ] WRPC Server stopped on: 127.0.0.1:29762
|
||||
2026-10-07 15:13:00.597+02:00 [INFO ] igneumd has stopped...
|
||||
32
docs/design/genesis-forward-harness/digest-testnet-shape.log
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
Signature scheme byte from the override file: genesis scheme 0 (0 = BLS12-381); every vote item and key reveal carries its scheme byte on the wire from DAA score 0; any other scheme refused until a class the 95 percent signal moves to names it
|
||||
Key succession (W5) from the override file: a vote key hands its window weight and its forfeit term to a successor key once, from checkpoint DAA score 0; the successor inherits the window
|
||||
Latency ladder from the override file: rungs 27, 35, 53, [88], [173], [267] shadow passes, cache [512 MiB] beside them (brackets: inadmissible, never entered), active from epoch 0 (DAA score 0 rounded up to the epoch boundary at 0), one rung per decision at 90 percent of blue blocks in each of 7 consecutive windows of 86400 DAA ending at an epoch's seed block
|
||||
Latency ladder active: rungs 27, 35, 53, [88], [173], [267] shadow passes, cache [512 MiB] beside them, this node signals none (header version bits 15 and 14; both set asks for the cache rung)
|
||||
Program class signal inactive (the window or the floor is absent from the override file): headers carry block version 2 exactly
|
||||
Fees on igneum-devnet-973: pgas table v0, B_p 30000000 pgas, S_p 7500000 pgas, floors 1000000000 wei per gas and 1000000000 wei per pgas; calibrated v1 from DAA score never
|
||||
Consensus params digest: 60e842a738c7dea04543af93e990fb962618ace0b76b38013a63cb29dd45644a (exchanged in the p2p handshake; a peer with another digest is refused)
|
||||
2026-10-07 15:13:26.156+02:00 [INFO ] igneumd/2.1.0-75810130
|
||||
2026-10-07 15:13:26.156+02:00 [INFO ] Application directory: gf-digest/d-testnet-shape
|
||||
2026-10-07 15:13:26.156+02:00 [INFO ] Data directory: gf-digest/d-testnet-shape/igneum-devnet-973/datadir
|
||||
2026-10-07 15:13:26.156+02:00 [INFO ] Logs to console only
|
||||
2026-10-07 15:13:26.172+02:00 [INFO ] Finality v2 (igneum-devnet-973): interval 30 depth 20 window 7200 DAA dust 5 presence 20 aggregators 8 ban 7200 fold 3; rule v3 (frozen table, certificate fold) from checkpoint DAA never; 0 checkpoints known, next index 1, 0 locks, 0 keys; C1 in DAA seconds from DAA never; weight-gated deep fork choice from DAA never; leave rule (W7, delay 3600 DAA) from checkpoint DAA never, 0 leaves; key succession (W5) from checkpoint DAA 0, 0 successions; signature scheme 0 (0 = BLS12-381), any other refused until a class names it
|
||||
2026-10-07 15:13:26.180+02:00 [INFO ] [igneum-exec] proving v0: payouts from DAA score never, window 7200 DAA, dust 5, verifier Off
|
||||
2026-10-07 15:13:26.180+02:00 [INFO ] [igneum-exec] proving v1: segment records from DAA score never, 8 blocks a segment, unproven after 600 DAA, aggregator share 1000 bps, shard program id unknown, aggregator id unknown
|
||||
2026-10-07 15:13:26.180+02:00 [INFO ] [igneum-exec] proof archive at gf-digest/d-testnet-shape/igneum-devnet-973/datadir/evm/proofs: 0 proofs
|
||||
2026-10-07 15:13:26.181+02:00 [INFO ] [igneum-exec] verifying keys embedded: shard program id 0x2b1a81cb413236cf063077b46ed3111628f6c41036bcf6e23ee4cbbf5679ef7a aggregator id 0x474678f35f7545db28055d5e5bbc308231d84a5a072202087a2a8d5b09123896
|
||||
2026-10-07 15:13:26.185+02:00 [INFO ] template prewarm: on (the cached block template is rebuilt on every virtual change; IGNEUM_TEMPLATE_PREWARM=0 turns it off)
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] GRPC Server starting on: 127.0.0.1:29760
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] P2P Server starting on: 127.0.0.1:29761
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] eth_ JSON-RPC listening on 127.0.0.1:26790
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] WRPC Server starting on: 127.0.0.1:29762
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] chain follower started
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] proof verifier: Off (no SP1 verification on this node)
|
||||
2026-10-07 15:13:26.186+02:00 [WARN ] [igneum-exec] cannot bind the eth_ JSON-RPC server on 127.0.0.1:26790: Address already in use (os error 98)
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] exec sync: sink edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block 0; pruning point edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0); retention root edc4fa844da9dc98d37e965176f6558a31560e40502ab3ae5491b21aaaabfb07 is chain block Some(0) (DAA 0), its body held
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] exec sync: no snapshot to resume from (no snapshot file); the follower starts at genesis
|
||||
2026-10-07 15:13:26.186+02:00 [INFO ] [igneum-exec] chain follower stopped
|
||||
^SIGTERM - shutting down...
|
||||
2026-10-07 15:13:51.152+02:00 [INFO ] P2P Server stopped: 127.0.0.1:29761
|
||||
2026-10-07 15:13:51.152+02:00 [INFO ] WRPC Server stopped on: 127.0.0.1:29762
|
||||
2026-10-07 15:13:51.152+02:00 [INFO ] GRPC Server stopped on: 127.0.0.1:29760
|
||||
2026-10-07 15:13:51.660+02:00 [INFO ] igneumd has stopped...
|
||||
|
|
@ -0,0 +1,695 @@
|
|||
{
|
||||
"expect": "no-succession",
|
||||
"pass": false,
|
||||
"checks": {
|
||||
"window_filled_before_the_succession": true,
|
||||
"succession_accepted_on_submit": true,
|
||||
"carried_once_on_every_node": false,
|
||||
"successor_inherits_on_every_node": false,
|
||||
"old_key_handed_over_on_every_node": false,
|
||||
"nodes_agree_on_the_successor_weight": false,
|
||||
"refused_old_again_on_n2": false,
|
||||
"refused_old_again_on_n0": false,
|
||||
"refused_successor_that_handed_over": false,
|
||||
"scheme_1_refused_by_every_node": true,
|
||||
"locks_continue_after_the_fold": true,
|
||||
"zero_rejected_by_nodes": true,
|
||||
"sinks_agree": true
|
||||
},
|
||||
"old_key": "e4036b1e79c817f2",
|
||||
"new_key": "2f031ed35a29ced8",
|
||||
"old_blocks_before": 41,
|
||||
"succeeded_at_daa": 261,
|
||||
"carried_seen_at_daa": null,
|
||||
"new_mined_alone": 112,
|
||||
"rows": [
|
||||
{
|
||||
"new": {
|
||||
"blocks": 37,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 1,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "",
|
||||
"voter": true
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "6543d321fd61aedb",
|
||||
"voter": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"new": {
|
||||
"blocks": 0,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 0,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "e4036b1e79c817f2",
|
||||
"voter": false
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "6543d321fd61aedb",
|
||||
"voter": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"new": {
|
||||
"blocks": 37,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 1,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "",
|
||||
"voter": true
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "6543d321fd61aedb",
|
||||
"voter": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"locks": [
|
||||
12,
|
||||
12,
|
||||
12
|
||||
],
|
||||
"locks_at_fold": 9,
|
||||
"refusals": [
|
||||
{
|
||||
"what": "w5-old -> w5-third on n2",
|
||||
"code": 0,
|
||||
"line": "1791378723.612 SUCCEED old=e4036b1e79c817f2 new=6543d321fd61aedb daa=502 (accepted: carried in this node's next block)"
|
||||
},
|
||||
{
|
||||
"what": "w5-old -> w5-third on n0",
|
||||
"code": 0,
|
||||
"line": "1791378723.629 SUCCEED old=e4036b1e79c817f2 new=6543d321fd61aedb daa=502 (accepted: carried in this node's next block)"
|
||||
},
|
||||
{
|
||||
"what": "w5-new -> w5-old on n1",
|
||||
"code": 0,
|
||||
"line": "1791378723.645 SUCCEED old=2f031ed35a29ced8 new=e4036b1e79c817f2 daa=502 (accepted: carried in this node's next block)"
|
||||
}
|
||||
],
|
||||
"probes": [
|
||||
{
|
||||
"node": 0,
|
||||
"code": 0,
|
||||
"line": "1791378723.659 SCHEME 1 REFUSED key=b875b095c1b5d559 index=16 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
},
|
||||
{
|
||||
"node": 1,
|
||||
"code": 0,
|
||||
"line": "1791378723.672 SCHEME 1 REFUSED key=b875b095c1b5d559 index=16 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
},
|
||||
{
|
||||
"node": 2,
|
||||
"code": 0,
|
||||
"line": "1791378723.687 SCHEME 1 REFUSED key=b875b095c1b5d559 index=16 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
}
|
||||
],
|
||||
"samples": [
|
||||
{
|
||||
"t": 5.7,
|
||||
"daa": 0,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 20.7,
|
||||
"daa": 7,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 35.7,
|
||||
"daa": 17,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 50.7,
|
||||
"daa": 36,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 65.7,
|
||||
"daa": 57,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"29/3",
|
||||
"29/3",
|
||||
"29/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 80.8,
|
||||
"daa": 79,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"29/3",
|
||||
"29/3",
|
||||
"29/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 95.8,
|
||||
"daa": 92,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"59/3",
|
||||
"59/3",
|
||||
"59/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 110.8,
|
||||
"daa": 104,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"59/3",
|
||||
"59/3",
|
||||
"59/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 125.8,
|
||||
"daa": 114,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"89/3",
|
||||
"89/3",
|
||||
"89/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 140.8,
|
||||
"daa": 123,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"89/3",
|
||||
"89/3",
|
||||
"89/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 155.8,
|
||||
"daa": 135,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"89/3",
|
||||
"89/3",
|
||||
"89/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 170.9,
|
||||
"daa": 152,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"119/3",
|
||||
"119/3",
|
||||
"119/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 185.9,
|
||||
"daa": 173,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 200.9,
|
||||
"daa": 187,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 215.9,
|
||||
"daa": 203,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 230.9,
|
||||
"daa": 224,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 246,
|
||||
"daa": 242,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
3,
|
||||
3,
|
||||
3
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 261,
|
||||
"daa": 258,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
3,
|
||||
3,
|
||||
3
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 276.5,
|
||||
"daa": 270,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 291.6,
|
||||
"daa": 285,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 306.6,
|
||||
"daa": 308,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"118/3",
|
||||
"118/3",
|
||||
"118/3"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 321.7,
|
||||
"daa": 338,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/4",
|
||||
"120/4",
|
||||
"120/4"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 336.7,
|
||||
"daa": 357,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/4",
|
||||
"120/4",
|
||||
"120/4"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 351.8,
|
||||
"daa": 368,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/4",
|
||||
"120/4",
|
||||
"120/4"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 366.9,
|
||||
"daa": 385,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/4",
|
||||
"120/4",
|
||||
"120/4"
|
||||
],
|
||||
"locks": [
|
||||
5,
|
||||
5,
|
||||
5
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 382,
|
||||
"daa": 406,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/4",
|
||||
"120/4",
|
||||
"120/4"
|
||||
],
|
||||
"locks": [
|
||||
5,
|
||||
5,
|
||||
5
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 397,
|
||||
"daa": 424,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
6,
|
||||
6,
|
||||
6
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 412.1,
|
||||
"daa": 441,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
7,
|
||||
7,
|
||||
7
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 427.2,
|
||||
"daa": 454,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
7,
|
||||
7,
|
||||
7
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 442.3,
|
||||
"daa": 469,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
7,
|
||||
7,
|
||||
7
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 457.3,
|
||||
"daa": 485,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 472.4,
|
||||
"daa": 494,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
8,
|
||||
8,
|
||||
8
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 487.6,
|
||||
"daa": 509,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
9,
|
||||
9,
|
||||
9
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 502.6,
|
||||
"daa": 526,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
9,
|
||||
9,
|
||||
9
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 517.6,
|
||||
"daa": 545,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
10,
|
||||
10,
|
||||
10
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 532.7,
|
||||
"daa": 561,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
11,
|
||||
11,
|
||||
11
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 547.7,
|
||||
"daa": 578,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
11,
|
||||
11,
|
||||
11
|
||||
]
|
||||
}
|
||||
],
|
||||
"wall_s": 560.2,
|
||||
"binaries": {
|
||||
"igneumd": "/srv/builds/igneum-wt-genesis-forward/vendor/igneum-node-gf/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-genesis-forward/vendor/igneum-node-gf/target/release/igneum-miner"
|
||||
}
|
||||
}
|
||||
455
docs/design/genesis-forward-harness/pass-succession.json
Normal file
|
|
@ -0,0 +1,455 @@
|
|||
{
|
||||
"expect": "succession",
|
||||
"pass": true,
|
||||
"checks": {
|
||||
"window_filled_before_the_succession": true,
|
||||
"succession_accepted_on_submit": true,
|
||||
"carried_once_on_every_node": true,
|
||||
"successor_inherits_on_every_node": true,
|
||||
"old_key_handed_over_on_every_node": true,
|
||||
"nodes_agree_on_the_successor_weight": true,
|
||||
"refused_old_again_on_n2": true,
|
||||
"refused_old_again_on_n0": true,
|
||||
"refused_successor_that_handed_over": true,
|
||||
"scheme_1_refused_by_every_node": true,
|
||||
"locks_continue_after_the_fold": true,
|
||||
"zero_rejected_by_nodes": true,
|
||||
"sinks_agree": true
|
||||
},
|
||||
"old_key": "e4036b1e79c817f2",
|
||||
"new_key": "2f031ed35a29ced8",
|
||||
"old_blocks_before": 42,
|
||||
"succeeded_at_daa": 260,
|
||||
"carried_seen_at_daa": 266,
|
||||
"new_mined_alone": 29,
|
||||
"rows": [
|
||||
{
|
||||
"new": {
|
||||
"blocks": 37,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 1,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "e4036b1e79c817f2",
|
||||
"succeededTo": "",
|
||||
"voter": true
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "2f031ed35a29ced8",
|
||||
"voter": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"new": {
|
||||
"blocks": 37,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 1,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "e4036b1e79c817f2",
|
||||
"succeededTo": "",
|
||||
"voter": true
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "2f031ed35a29ced8",
|
||||
"voter": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"new": {
|
||||
"blocks": 37,
|
||||
"keyHash": "2f031ed35a29ced8",
|
||||
"participation": 1,
|
||||
"pubkey": "80ab38c523736ad8944c7d3375e7563ba3b0d5a3ab149bec568cf207edcc9e1ab1ee2566e06ff422a5ec4c85a4049976",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "e4036b1e79c817f2",
|
||||
"succeededTo": "",
|
||||
"voter": true
|
||||
},
|
||||
"old": {
|
||||
"blocks": 0,
|
||||
"keyHash": "e4036b1e79c817f2",
|
||||
"participation": 0,
|
||||
"pubkey": "b0fd8eebbbaad96268e5f7b8a86090ca0c723954a0a5cb81c92b633094c1742b2505c4f7cea646c5c96bb52e57400067",
|
||||
"strippedUntilDaa": 0,
|
||||
"succeededFrom": "",
|
||||
"succeededTo": "2f031ed35a29ced8",
|
||||
"voter": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"locks": [
|
||||
7,
|
||||
7,
|
||||
7
|
||||
],
|
||||
"locks_at_fold": 4,
|
||||
"refusals": [
|
||||
{
|
||||
"what": "w5-old -> w5-third on n2",
|
||||
"code": 3,
|
||||
"line": "1791379651.057 SUCCEED REFUSED old=e4036b1e79c817f2 new=6543d321fd61aedb daa=290 (refused: key e4036b1e79c817f2 has already handed its weight to 2f031ed35a29ced8; a key hands over once)"
|
||||
},
|
||||
{
|
||||
"what": "w5-old -> w5-third on n0",
|
||||
"code": 3,
|
||||
"line": "1791379651.072 SUCCEED REFUSED old=e4036b1e79c817f2 new=6543d321fd61aedb daa=290 (refused: key e4036b1e79c817f2 has already handed its weight to 2f031ed35a29ced8; a key hands over once)"
|
||||
},
|
||||
{
|
||||
"what": "w5-new -> w5-old on n1",
|
||||
"code": 3,
|
||||
"line": "1791379651.085 SUCCEED REFUSED old=2f031ed35a29ced8 new=e4036b1e79c817f2 daa=290 (refused: successor e4036b1e79c817f2 has itself handed its weight to 2f031ed35a29ced8; it signs nothing and can inherit nothing)"
|
||||
}
|
||||
],
|
||||
"probes": [
|
||||
{
|
||||
"node": 0,
|
||||
"code": 0,
|
||||
"line": "1791379651.097 SCHEME 1 REFUSED key=b875b095c1b5d559 index=9 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
},
|
||||
{
|
||||
"node": 1,
|
||||
"code": 0,
|
||||
"line": "1791379651.110 SCHEME 1 REFUSED key=b875b095c1b5d559 index=9 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
},
|
||||
{
|
||||
"node": 2,
|
||||
"code": 0,
|
||||
"line": "1791379651.123 SCHEME 1 REFUSED key=b875b095c1b5d559 index=9 (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)"
|
||||
}
|
||||
],
|
||||
"samples": [
|
||||
{
|
||||
"t": 5.6,
|
||||
"daa": 0,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 20.6,
|
||||
"daa": 37,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"?",
|
||||
"?",
|
||||
"?"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 35.6,
|
||||
"daa": 56,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"28/3",
|
||||
"28/3",
|
||||
"28/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 50.6,
|
||||
"daa": 71,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"28/3",
|
||||
"28/3",
|
||||
"28/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 65.6,
|
||||
"daa": 85,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"58/3",
|
||||
"58/3",
|
||||
"58/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 80.6,
|
||||
"daa": 106,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"58/3",
|
||||
"58/3",
|
||||
"58/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 95.6,
|
||||
"daa": 126,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"88/3",
|
||||
"88/3",
|
||||
"88/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 110.6,
|
||||
"daa": 141,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"118/3",
|
||||
"118/3",
|
||||
"118/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 125.6,
|
||||
"daa": 155,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"118/3",
|
||||
"118/3",
|
||||
"118/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 140.6,
|
||||
"daa": 166,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"118/3",
|
||||
"118/3",
|
||||
"118/3"
|
||||
],
|
||||
"locks": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 155.7,
|
||||
"daa": 185,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
1,
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 170.7,
|
||||
"daa": 202,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 185.7,
|
||||
"daa": 213,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 200.7,
|
||||
"daa": 229,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
2,
|
||||
2,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 215.7,
|
||||
"daa": 244,
|
||||
"phase": "fill",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
3,
|
||||
3,
|
||||
3
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 233.2,
|
||||
"daa": 261,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 248.3,
|
||||
"daa": 280,
|
||||
"phase": "carry",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
4,
|
||||
4,
|
||||
4
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 263.4,
|
||||
"daa": 300,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
5,
|
||||
5,
|
||||
5
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 278.4,
|
||||
"daa": 316,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
5,
|
||||
5,
|
||||
5
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 293.4,
|
||||
"daa": 328,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
6,
|
||||
6,
|
||||
6
|
||||
]
|
||||
},
|
||||
{
|
||||
"t": 308.4,
|
||||
"daa": 343,
|
||||
"phase": "after",
|
||||
"weights": [
|
||||
"120/3",
|
||||
"120/3",
|
||||
"120/3"
|
||||
],
|
||||
"locks": [
|
||||
6,
|
||||
6,
|
||||
6
|
||||
]
|
||||
}
|
||||
],
|
||||
"wall_s": 317,
|
||||
"binaries": {
|
||||
"igneumd": "/srv/builds/igneum-wt-genesis-forward/vendor/igneum-node-gf/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-genesis-forward/vendor/igneum-node-gf/target/release/igneum-miner"
|
||||
}
|
||||
}
|
||||
85
docs/design/genesis-forward.md
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
# Genesis forward-compatibility: the scheme byte, key succession, the cache rung
|
||||
|
||||
7 October 2026, 10:1x UK, the project lead's order to build mission item 8 now (`docs/analysis/mission/mission.md` section 2.8; the research in `docs/analysis/mission/future.md` sections 1.3, 7 and 10 and `docs/design/finality-in-proof.md` section 7). Branch `genesis-forward` on the node fork (from release-0.3.19-node dc141409, the merged line that carries the ladder and the W7 leave item, which ca3-v4-0318 alone does not) and `genesis-forward` on the repo. Three genesis fields, every switch never on the devnet (its digest does not move), all three set at the testnet genesis by the testnet lane, which holds the cut and re-pins. The class-group VDF's quantum fallback is flagged in spec 04 section 4.8, not built.
|
||||
|
||||
## 1. The scheme byte
|
||||
|
||||
| Item | Place | Value |
|
||||
|---|---|---|
|
||||
| The byte | `finality::Vote::sig_scheme`, `finality::KeyReveal::sig_scheme`, `finality::Succession::successor_scheme` | `SIG_SCHEME_BLS12_381` = 0 everywhere today |
|
||||
| The genesis value | `Params::sig_scheme` (override key `sig_scheme`) | 0 on every network |
|
||||
| The switch | `Params::sig_scheme_activation_daa` (override key `sig_scheme_activation_daa`; `u64::MAX` = never) | never on devnet, simnet, mainnet; 0 at the testnet genesis |
|
||||
| The digest | both fields enter once the switch is set (the 0.3.15 rule) | the devnet's digest unchanged; the testnet's moves at the cut |
|
||||
| The wire, plain | vote item tag 1 (`Vote::LEN` = 280 bytes), evidence tag 3, reveal `IGNK` + 288 hex: scheme 0 implied | byte for byte what every live network carries |
|
||||
| The wire, explicit | vote item tag 5 = `scheme \|\| vote`, evidence tag 6 = `scheme \|\| first \|\| second`, reveal `IGNS` + 2 hex of the scheme + 288 hex | written by every template once the switch is active (`encode_section_explicit_within`); a vote of any other scheme is always explicit, so a scheme the node does not run is never mistaken for one it does |
|
||||
| The active scheme | `igneum::active_sig_scheme(genesis, class)` = the scheme the program class at the sink names (`SIG_SCHEME_OF_CLASS`, a genesis table with no row today), else the genesis byte; the finality manager re-reads it at every virtual change | 0 |
|
||||
| The refusal | `FinalityManager::scheme_refusal`: a reveal is not registered, a vote is not recorded, carried or gossiped, a successor is refused; the RPC answers `refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one` | every node, whatever its switch |
|
||||
|
||||
Why a class change names the scheme: the flip is the P2 mechanism (95 percent of mining weight over a window with a floor height, the one path a consensus change takes on this chain), and the aggregated-vote format must ship first (naive ML-DSA-44 votes at 8,192 voters cost 19.4 MB a checkpoint and 57 GB a day, `future.md` 7.3; with 250x SNARK aggregation about 223 MB a day). Adding a row to the table is a code change under the class path; the byte is in every item from genesis so the row costs no fork.
|
||||
|
||||
## 2. Key succession, W5
|
||||
|
||||
| Item | Place | Value |
|
||||
|---|---|---|
|
||||
| The item | `finality::Succession` (tag 7, 297 bytes): `daa`, old key, successor key, successor scheme, the old key's signature, the successor's signature, both over `"igneum-succeed-v1/" \|\| chain_id \|\| 0 \|\| daa \|\| old \|\| new \|\| scheme` under `IGNEUM_SUCCEED_V1_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_` | the successor's signature is its consent and its proof of possession in one |
|
||||
| The switch | `Params::finality_succession_activation_daa` (override key of the same name) | never everywhere; 0 at the testnet genesis; in the digest once set |
|
||||
| Submission | `submitFinalitySuccession` (RPC op 158, gRPC 1131/1132, wRPC, `igneum-miner succeed <grpc url> <old label> <new label>`) | carried after the leaves in the templates of the node that holds it; no p2p gossip kind (the successor's own node mines it) |
|
||||
| The fold | `successions_at` (deterministic like `leaves_at`: the lowest-DAA carrier in C's past dates it) and `fold_successions` inside `voters_at`: the old key's window blocks are credited to the successor as they stand (count and oldest block), the old key leaves the table, a ban or a leave on the old key lands on the successor; the successor's presence counts the old key's carried votes | from the first checkpoint whose past holds the carrier; the window inherited, not a fresh one |
|
||||
| Once | one record per old key: a second succession from a key that handed over is refused (`already handed its weight to`), a successor that has itself handed over is refused (`has itself handed`), which also refuses every cycle; a chain old to new to newer is legal | a record outlives the weight it moved by one window, then is trimmed |
|
||||
| After | the old key's votes are refused (`handed its weight to`), never counted, never carried | the old key is dead |
|
||||
| The report | `getFinalityWeights`: `succeededFrom` on the successor's row, a weightless row for the old key with `succeededTo` | both nodes of the unit test agree on every voter list |
|
||||
|
||||
Not in this round: a p2p gossip kind for successions (the leave's shape, protocol version bump); the app's "rotate key" button, which signs the item from the old key's label and restarts the miner under the new label (the `succeed` subcommand is the primitive); the aggregated-vote format.
|
||||
|
||||
## 3. The cache rung beside N
|
||||
|
||||
| Item | Place | Value |
|
||||
|---|---|---|
|
||||
| The rung | `igneum::CacheRung { mib, admissible }` as `LatencyLadder::cache_rung` (override key `latency_ladder_cache_rung`) | `{512, false}` at genesis; a power of two above the 256 MiB genesis cache |
|
||||
| The signal | `LadderSignal::Cache` = both ladder bits set (header version 0xc000; until today both set was "no signal" and no node ever stamped it, so no block written so far changes meaning); `IGNEUM_LADDER_SIGNAL=cache` | code 3 in `PowEpochInfo::latency_ladder_signal` |
|
||||
| The rule | `latency_ladder_step_signalled_with_cache`: the cache step moves 0 to 1 when every one of the newest seven windows reaches 90 percent for the cache rung, the rung is admissible and the cool-down holds (the oldest window begins after the last decision, shared with N); never back; never in the same decision as N (one signal per block, exclusive shares) | `LadderState::cache_step` |
|
||||
| The digest | the rung's size and flag enter with the ladder, once `latency_ladder_activation_daa` is set | the testnet's digest moves at the cut |
|
||||
| The RPC | `powEpoch.latencyLadderCacheStep`, `nextLatencyLadderCacheStep`, `latencyLadderCacheMib`, `nextLatencyLadderCacheMib`, `latencyLadderCacheBps`, `latencyLadderCacheWeakestBps`, `latencyLadderCacheAdmissible` (proto fields 37 to 43); the daemon's ladder line (`cache [512 MiB]`) | the rung visible on every node |
|
||||
| The gate | `admissible` in the genesis list, false until measured: the cold verify of one warp with the 512 MiB cache on the reference core with its SMT sibling loaded under 10 ms (the verifier reads the cache, so this is the bound), the day-cache build on a 2019-class core under twice today's, and the 8 GB tier still holding dataset, cache and the prover footprint | the rule never enters an inadmissible rung (tested) |
|
||||
|
||||
Why beside N and not a seventh N rung: the six approved rungs and their indices stand (the project lead, 7 October 2026, 09:3x UK); a rung inserted in the list would either sit behind the three inadmissible rungs (unreachable) or shift the approved indices. A second lever on the same signal carrier keeps the list as approved and the cool-down shared.
|
||||
|
||||
Owed with the measurement: the engine's consumption of `cache_mib` (`EpochSeeds` carries `shadow_reps` today and no cache size; the pack and the three hosts build a 256 MiB cache), so the flag stays false until the path exists and is measured. Per tier what the rung means: every tier from 8 GB holds a 512 MiB cache; the day-cache build doubles (about 0.7 s on the reference core today, approximate, from the class v4 fill line); the Apple tier's unified memory holds it; a pool user does nothing.
|
||||
|
||||
## 4. The class-group VDF under a quantum computer
|
||||
|
||||
Flagged in spec 04 section 4.8, not sized: Shor computes the class-group order, which removes the sequentiality assumption of the Wesolowski VDF, so an attacker with a cryptographically relevant quantum computer grinds the hourly seed (a liveness nuisance against the lottery, not a safety break; finality rests on the vote keys of section 1). The fallback is a hash-chain delay behind the same version byte, designed when the scheme flip is scheduled.
|
||||
|
||||
## 5. Gates
|
||||
|
||||
| Gate | Where | Result |
|
||||
|---|---|---|
|
||||
| The digest test | `consensus_digest_covers_every_consensus_field_and_nothing_else` (30 edits; the scheme byte and the cache rung alone move nothing), `override_params_carry_the_genesis_forward_fields_and_the_digest_moves_only_when_set` | section 6 |
|
||||
| Scheme 1 refused by every node until the signal | unit: `a_vote_reveal_or_successor_of_another_signature_scheme_is_refused_until_a_class_names_it` (RPC, in a block, a reveal, a successor; the explicit template form); fast-time: `probe-scheme` on three nodes | section 6 |
|
||||
| A succession carried once and refused twice | unit: `a_key_hands_its_window_to_a_successor_once_and_a_second_succession_is_refused` (two nodes); fast-time: `infra/fast-time/key-succession.mjs` (the known-failed case `--expect no-succession` first) | section 6 |
|
||||
| The ladder rung visible in the RPC | `powEpoch.latencyLadderCache*` on `getBlockTemplate`, the daemon line; unit: `latency_ladder_rule` (an inadmissible cache rung never entered; with the flag, 90 percent in seven windows enters it, N still steps after it, one rung, never back) | section 6 |
|
||||
| The codec | `scheme_byte_and_succession_items_round_trip_and_an_older_decoder_stops_at_them` | section 6 |
|
||||
|
||||
## 6. Results (7 October 2026, 12:5x to 14:3x UK; igneum-build-1 for the gate build, the harness and the digests, igneum-build-2 for the suites)
|
||||
|
||||
| Gate | Run | Result |
|
||||
|---|---|---|
|
||||
| The digest test | `cargo test --release -p kaspa-consensus-core --lib` on build-2 at 75810130 | 124 passed, 0 failed, 2 ignored (`consensus_digest_covers_every_consensus_field_and_nothing_else` with 30 edits, `override_params_carry_the_genesis_forward_fields_and_the_digest_moves_only_when_set`, `latency_ladder_rule` with the cache rung) |
|
||||
| The 60x keeper test | `fast_time_60x_file_is_the_devnet_at_60x` on build-2 against the completed file (repo 9c9a1f52) | 1 passed (the file had lacked 17 fields on master, `emission` and `proving_consensus_verify_daa` among them; the box mirrors carry no `infra/`, so the test skips there unless the file is shipped) |
|
||||
| Scheme 1 refused by every node | unit `a_vote_reveal_or_successor_of_another_signature_scheme_is_refused_until_a_class_names_it`; fast-time `probe-scheme` on three nodes, both harness cases | green in the suite runs; every node: `SCHEME 1 REFUSED ... (refused: vote carries signature scheme 1; the active scheme is 0 (BLS12-381); another scheme is named only by a program class the 95 percent signal moves to, and none names one)` |
|
||||
| A succession carried once and refused twice | unit `a_key_hands_its_window_to_a_successor_once_and_a_second_succession_is_refused` (two nodes); fast-time `infra/fast-time/key-succession.mjs` on build-1 (3 nodes, one CPU miner each, override-60x with the three switches at 0) | known-failed case first (`--expect no-succession`, 13:04 to 13:13 UK, `genesis-forward-harness/known-failed-no-succession.json`): FAIL as it must on every carried-once check with the probe, the locks and the sinks holding. Pass case (`--expect succession`, node bdb34f62, 13:23 to 13:28 UK, `pass-succession.json`): PASS, every check holds: w5-old held 42 blocks at DAA 260; the succession accepted on n2 at DAA 261 and carried by a block at DAA 266 on every node; at the fold (DAA 290) every node reads w5-new 37 blocks (7 mined alone) and w5-old 0 with `succeededTo`; w5-old to w5-third refused on n2 and n0 (`already handed`), w5-new to w5-old refused on n1 (`has itself handed`); locks 4 to 7 on every node after the fold; 0 rejected blocks, sinks agree; 317 s wall |
|
||||
| The cache rung visible in the RPC | `powEpoch.latencyLadderCache*` (proto fields 37 to 43); the daemon's ladder line | the testnet-shaped file prints `rungs 27, 35, 53, [88], [173], [267] shadow passes, cache [512 MiB] beside them` (`digest-testnet-shape.log`) |
|
||||
| The codec | `scheme_byte_and_succession_items_round_trip_and_an_older_decoder_stops_at_them` | green in the suite runs |
|
||||
| The digest, cross-binary | igneumd 75810130 against the 0.3.20 base dc141409 (bs0319's build), both with no file, devnet suffix 973 | both `079d8a7e736abbd4` (`digest-no-file.log`, `digest-base-dc141409.log`): the three fields at never move nothing; the ladder alone at 0 reads `772f9f8e3ef59ca1`, the testnet-shaped file (ladder at 0, scheme switch at 0, succession at 0, the cache rung) `60e842a738c7dea0`, on devnet params; the testnet lane's own number comes from `TESTNET_PARAMS` at its cut. The 0.3.18 line's `c562d70e` is behind the decimals, tail-emission and subsidy fields of the 0.3.19 and 0.3.20 lines, not behind these |
|
||||
| The gate build | `tools/build-remote.sh --priority gate` on build-1 at bdb34f62 | igneumd 57,554,336 B sha256 6d0aa37b..., igneum-miner 10,240,768 B sha256 69fc3c63... (commit string carried) |
|
||||
| The consensus suite | `cargo test --release -p kaspa-consensus` (all targets) on build-2 at f95178a1, twice | 114 passed, 0 failed, 3 ignored in the lib binary both times, the two moved targets 1 each; `cargo check -p kaspad` clean. Before the fix below the lib binary failed 1 of 114 on one of the two-node tests in three of four runs (the succession test once, the pre-existing F23 test twice), node 1 refusing block 61 at DAA 60 with `UnexpectedDifficulty`, the two nodes' bits about 17,000 apart in the mantissa |
|
||||
|
||||
Faults found on the way, both mine: (1) rule v3's frozen table stood at the lock before the carrier, where the old key still weighed and signed nothing, so nothing locked after the fold (fixed in `frozen_table`, 9322cc1d); (2) the template read the explicit-form switch from the process-wide static that only the daemon installs, so `TestConsensus` wrote the plain form (the manager holds the activation now, daa61847).
|
||||
|
||||
### 6a. The two-node refusal: found and fixed (f95178a1)
|
||||
|
||||
The probe on build-2: F23 alone three times, green each time; the three two-node tests together three times, green each time; so the refusal needed the rest of the lib binary. The cause: `consensus/src/consensus/services.rs` built the difficulty manager with `igneum::pow_epoch_blocks()`, the process-wide static, where every other argument of that constructor comes from `params`; two pruning-proof tests in the same binary (`igneum_m20_tests.rs:27`, `igneum_pow.rs:346`) install a 60-block schedule process-wide, so a `TestConsensus` built inside that window read a 60-block epoch into its difficulty manager while its partner read 3,600, the two disagreed on `reference_window` from DAA 60, and the second node refused block 61, the exact block of every refusal. The fix is the manager's own field, `params.pow_epoch_blocks`. The node's behaviour is unchanged (the daemon installs the static from the same params before building the consensus); the class is the static-at-construction read, the sibling of the signal-table race the node lane moved two installing tests for on 7 October 2026. The test helper now names the node and the block it refuses, which is what found it.
|
||||
|
||||
## 7. For the testnet lane
|
||||
|
||||
Override keys and testnet values: `sig_scheme: 0`, `sig_scheme_activation_daa: 0`, `finality_succession_activation_daa: 0`, `latency_ladder_cache_rung: {"mib": 512, "admissible": false}` (the six N rungs unchanged). Digest: with the ladder already active from genesis the cache rung's two fields enter after the six rungs' fields; the scheme switch adds two fields, the succession switch one. `print_testnet_object` prints the four keys.
|
||||
|
|
@ -377,3 +377,28 @@ spill-over. Now (lib.sh `bs_route_spill`, master from this commit):
|
|||
them keeps its number; since this commit a bounded run takes the band its slot owns (slot 0 the last 32 cores, slot 1 the 32
|
||||
below, slot 2 the 32 below that), so three bounded runs never share a core. A gate still takes its slot ahead of queued suites.
|
||||
- `--box N` still pins. Self-test: tools/ci/route-spill-check.sh (thirteen cases through `BS_ROUTE_STATE_<n>`, no ssh), in the gate.
|
||||
|
||||
## 8. The measure file is retired: per-core leases and the quiet class (7 October 2026, 15:07 UK)
|
||||
|
||||
Main's reading at 15:07 UK: on build-1 a sync-fuzz probe (the capacity lane's, SIGSTOPped since 09:45Z, no owner) held the global
|
||||
measure flock for five and a half hours; beside it attack-f6's phase2b waited exclusive on the same file behind seven F2 solvers
|
||||
holding it shared on cores 6-11,54-59, and every new shared taker (every build) queued behind the exclusive waiter: load 120, slots
|
||||
free, nine waiting. On build-2 the era VDF bench held the file exclusive while pinned to one core and five jobs waited. One global
|
||||
exclusive lock across unrelated measurements was the wrong design. Now:
|
||||
|
||||
- `infra/build-server/lease.sh`, installed on every box at `/srv/builds/_bin/lease` (provision.sh; by hand on build-1 and build-2
|
||||
at 14:2x BST): `lease cores <set> --label "..." [--owner <agent>] -- <cmd>` takes a lease on THOSE CORES ONLY (one flock per
|
||||
core, `_locks/core-<n>`, a `wait-<pid>` file with the label while it waits), runs the command under nice 10 and taskset, and
|
||||
releases. Nothing else is excluded. `lease quiet --label "..." --owner <agent> -- <cmd>` is the whole-box class: refused (exit
|
||||
73) while any slot or core lease is held, capped at 20 minutes, holder line with the owner in `_locks/quiet`. `lease status`,
|
||||
`lease reap`.
|
||||
- remote-run.sh: an unbounded run (nice 0, the full set) takes `quiet` shared and waits for it; a bounded run (suites, benches,
|
||||
everything on box 2) never takes it. Every run keeps off leased cores (its set minus the `core-<n>` flocks, said once). A run's
|
||||
keeper refreshes its holder file's mtime every 20 s and calls `lease reap`: a holder of a lease, the quiet file or a slot whose
|
||||
process has been STOPPED for 5 minutes is killed and its file cleared, one line each in `_log/reaped.log`. The keeper closes the
|
||||
lock descriptors it inherits (an orphaned `sleep 20` held a slot and a worktree lock 20 s past the release). BR_MEASURE=1 is the
|
||||
quiet class with the same refusals; it needs a named owner (IGNEUM_AGENT).
|
||||
- The lanes' own `flock -s /srv/builds/_locks/measure -c "nice -n 10 taskset -c <set> ..."` lines no longer hold anything a build
|
||||
waits for; they become `/srv/builds/_bin/lease cores <set> --label "..." -- <cmd>`, and `flock -x .../measure` becomes
|
||||
`lease quiet`. Self-tests: lease.sh --self-test and remote-run.sh --self-test-slots, run on build-1 by tools/ci/box-locks-check.sh
|
||||
in the gate.
|
||||
|
|
|
|||
21
docs/plans/mission-item-12-gate/case-off-eight.log
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
13:27:58.207 pd1 case switch-off-expect-eight: switch off, 10 listing nodes, joint 200 s, watch 180 s, expect eight
|
||||
13:27:59.744 pd1 n0 up pid 690270 json 31292 p2p 31291
|
||||
13:28:01.258 pd1 n1 up pid 690864 json 31302 p2p 31301 addpeer 31291,31291
|
||||
13:28:02.766 pd1 n2 up pid 691561 json 31312 p2p 31311 addpeer 31291,31301
|
||||
13:28:04.272 pd1 n3 up pid 692232 json 31322 p2p 31321 addpeer 31291,31311
|
||||
13:28:05.777 pd1 n4 up pid 692823 json 31332 p2p 31331 addpeer 31291,31321
|
||||
13:28:07.281 pd1 n5 up pid 693470 json 31342 p2p 31341 addpeer 31291,31331
|
||||
13:28:08.785 pd1 n6 up pid 694063 json 31352 p2p 31351 addpeer 31291,31341
|
||||
13:28:10.290 pd1 n7 up pid 694656 json 31362 p2p 31361 addpeer 31291,31351
|
||||
13:28:11.797 pd1 n8 up pid 695316 json 31372 p2p 31371 addpeer 31291,31361
|
||||
13:28:13.304 pd1 n9 up pid 695947 json 31382 p2p 31381 addpeer 31291,31371
|
||||
13:31:35.437 pd1 phase 1 done at 200.1 s: node 0 at 243 blocks DAA 243; 0 directory listing line(s) on node 0
|
||||
13:31:36.962 pd1 fresh up pid 705981 json 31392 p2p 31391 addpeer 31291
|
||||
13:32:07.031 pd1 t=231.7 s fresh: 1 outbound, 0 inbound, 272 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:32:37.109 pd1 t=261.8 s fresh: 1 outbound, 0 inbound, 314 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:33:07.190 pd1 t=291.9 s fresh: 1 outbound, 0 inbound, 332 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:33:37.273 pd1 t=322.0 s fresh: 1 outbound, 0 inbound, 359 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:07.348 pd1 t=352.0 s fresh: 1 outbound, 0 inbound, 379 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:37.426 pd1 t=382.1 s fresh: 1 outbound, 0 inbound, 420 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:37.428 pd1 SUMMARY FAIL (switch-off-expect-eight): node 0 logged 0 listings; the fresh node never reached 8 outbound (last 1), 0 connection(s) from the directory, 0 draw line(s), 420 blocks; FAILED CHECK listing_lines_on_node_0, fresh_reached_eight_outbound, fresh_connected_from_directory
|
||||
13:34:37.428 pd1 summary: /srv/builds/igneum-wt-peer-directory/docs/plans/mission-item-12-gate/peer-directory-switch-off-expect-eight.json
|
||||
21
docs/plans/mission-item-12-gate/case-off-one.log
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
13:27:58.206 pd0 case switch-off-expect-one: switch off, 10 listing nodes, joint 200 s, watch 180 s, expect one
|
||||
13:27:59.744 pd0 n0 up pid 690269 json 31092 p2p 31091
|
||||
13:28:01.255 pd0 n1 up pid 690863 json 31102 p2p 31101 addpeer 31091,31091
|
||||
13:28:02.763 pd0 n2 up pid 691557 json 31112 p2p 31111 addpeer 31091,31101
|
||||
13:28:04.270 pd0 n3 up pid 692228 json 31122 p2p 31121 addpeer 31091,31111
|
||||
13:28:05.775 pd0 n4 up pid 692819 json 31132 p2p 31131 addpeer 31091,31121
|
||||
13:28:07.280 pd0 n5 up pid 693466 json 31142 p2p 31141 addpeer 31091,31131
|
||||
13:28:08.786 pd0 n6 up pid 694058 json 31152 p2p 31151 addpeer 31091,31141
|
||||
13:28:10.292 pd0 n7 up pid 694658 json 31162 p2p 31161 addpeer 31091,31151
|
||||
13:28:11.800 pd0 n8 up pid 695318 json 31172 p2p 31171 addpeer 31091,31161
|
||||
13:28:13.306 pd0 n9 up pid 695955 json 31182 p2p 31181 addpeer 31091,31171
|
||||
13:31:35.436 pd0 phase 1 done at 200.1 s: node 0 at 250 blocks DAA 250; 0 directory listing line(s) on node 0
|
||||
13:31:36.969 pd0 fresh up pid 705982 json 31192 p2p 31191 addpeer 31091
|
||||
13:32:07.034 pd0 t=231.7 s fresh: 1 outbound, 0 inbound, 288 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:32:37.118 pd0 t=261.8 s fresh: 1 outbound, 0 inbound, 308 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:33:07.199 pd0 t=291.9 s fresh: 1 outbound, 0 inbound, 349 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:33:37.276 pd0 t=322.0 s fresh: 1 outbound, 0 inbound, 377 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:07.351 pd0 t=352.0 s fresh: 1 outbound, 0 inbound, 405 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:37.431 pd0 t=382.1 s fresh: 1 outbound, 0 inbound, 448 blocks, 0 draw line(s), 0 directory connection(s)
|
||||
13:34:37.432 pd0 SUMMARY PASS (switch-off-expect-one): node 0 logged 0 listings; the fresh node never reached 8 outbound (last 1), 0 connection(s) from the directory, 0 draw line(s), 448 blocks
|
||||
13:34:37.432 pd0 summary: /srv/builds/igneum-wt-peer-directory/docs/plans/mission-item-12-gate/peer-directory-switch-off-expect-one.json
|
||||
22
docs/plans/mission-item-12-gate/case-on-eight.log
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
13:27:58.204 pd2 case switch-on-expect-eight: switch on, 10 listing nodes, joint 200 s, watch 180 s, expect eight
|
||||
13:27:59.743 pd2 n0 up pid 690268 json 31492 p2p 31491
|
||||
13:28:01.254 pd2 n1 up pid 690860 json 31502 p2p 31501 addpeer 31491,31491
|
||||
13:28:02.762 pd2 n2 up pid 691556 json 31512 p2p 31511 addpeer 31491,31501
|
||||
13:28:04.268 pd2 n3 up pid 692227 json 31522 p2p 31521 addpeer 31491,31511
|
||||
13:28:05.773 pd2 n4 up pid 692818 json 31532 p2p 31531 addpeer 31491,31521
|
||||
13:28:07.279 pd2 n5 up pid 693462 json 31542 p2p 31541 addpeer 31491,31531
|
||||
13:28:08.787 pd2 n6 up pid 694062 json 31552 p2p 31551 addpeer 31491,31541
|
||||
13:28:10.291 pd2 n7 up pid 694659 json 31562 p2p 31561 addpeer 31491,31551
|
||||
13:28:11.800 pd2 n8 up pid 695317 json 31572 p2p 31571 addpeer 31491,31561
|
||||
13:28:13.304 pd2 n9 up pid 695954 json 31582 p2p 31581 addpeer 31491,31571
|
||||
13:31:35.435 pd2 phase 1 done at 200.1 s: node 0 at 233 blocks DAA 233; 10 directory listing line(s) on node 0
|
||||
13:31:36.954 pd2 fresh up pid 705980 json 31592 p2p 31591 addpeer 31491
|
||||
13:32:07.025 pd2 the fresh node holds 10 outbound peers at 231.7 s (9 from the directory)
|
||||
13:32:07.025 pd2 t=231.7 s fresh: 10 outbound, 0 inbound, 262 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:32:37.102 pd2 t=261.8 s fresh: 10 outbound, 0 inbound, 290 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:33:07.182 pd2 t=291.9 s fresh: 10 outbound, 0 inbound, 323 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:33:37.265 pd2 t=322.0 s fresh: 10 outbound, 0 inbound, 357 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:34:07.342 pd2 t=352.0 s fresh: 10 outbound, 0 inbound, 391 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:34:37.418 pd2 t=382.1 s fresh: 10 outbound, 0 inbound, 414 blocks, 1 draw line(s), 9 directory connection(s)
|
||||
13:34:37.418 pd2 SUMMARY PASS (switch-on-expect-eight): node 0 logged 10 listings; the fresh node reached 8 outbound at 231.7 s, 9 connection(s) from the directory, 1 draw line(s), 414 blocks
|
||||
13:34:37.419 pd2 summary: /srv/builds/igneum-wt-peer-directory/docs/plans/mission-item-12-gate/peer-directory-switch-on-expect-eight.json
|
||||
|
|
@ -0,0 +1,370 @@
|
|||
{
|
||||
"pass": false,
|
||||
"expect": "eight",
|
||||
"case": "switch-off-expect-eight",
|
||||
"switch": "off",
|
||||
"listing": 10,
|
||||
"joint": 200,
|
||||
"watch": 180,
|
||||
"node0": {
|
||||
"blocks": 243,
|
||||
"daa": 243
|
||||
},
|
||||
"listing_lines_on_node_0": 0,
|
||||
"eight_outbound_at_s": null,
|
||||
"last": {
|
||||
"t": 382.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 420,
|
||||
"daa": 420,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
"checks": {
|
||||
"listing_lines_on_node_0": false,
|
||||
"fresh_synced": true,
|
||||
"fresh_reached_eight_outbound": false,
|
||||
"fresh_connected_from_directory": false,
|
||||
"fresh_held_one_outbound": true,
|
||||
"no_directory_line_on_fresh": true
|
||||
},
|
||||
"failed_checks": [
|
||||
"listing_lines_on_node_0",
|
||||
"fresh_reached_eight_outbound",
|
||||
"fresh_connected_from_directory"
|
||||
],
|
||||
"samples": [
|
||||
{
|
||||
"t": 206.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 250,
|
||||
"daa": 250,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 211.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 255,
|
||||
"daa": 255,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 216.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 258,
|
||||
"daa": 258,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 221.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 264,
|
||||
"daa": 264,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 226.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 271,
|
||||
"daa": 271,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 231.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 272,
|
||||
"daa": 272,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 236.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 276,
|
||||
"daa": 276,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 241.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 284,
|
||||
"daa": 284,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 246.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 289,
|
||||
"daa": 289,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 251.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 292,
|
||||
"daa": 292,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 256.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 302,
|
||||
"daa": 302,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 261.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 314,
|
||||
"daa": 314,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 266.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 317,
|
||||
"daa": 317,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 271.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 321,
|
||||
"daa": 321,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 276.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 322,
|
||||
"daa": 322,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 281.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 326,
|
||||
"daa": 326,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 286.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 331,
|
||||
"daa": 331,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 291.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 332,
|
||||
"daa": 332,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 296.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 338,
|
||||
"daa": 338,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 301.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 341,
|
||||
"daa": 341,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 306.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 344,
|
||||
"daa": 344,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 311.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 349,
|
||||
"daa": 349,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 317,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 355,
|
||||
"daa": 355,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 322,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 359,
|
||||
"daa": 359,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 327,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 361,
|
||||
"daa": 361,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 332,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 369,
|
||||
"daa": 369,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 337,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 371,
|
||||
"daa": 371,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 342,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 374,
|
||||
"daa": 374,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 347,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 378,
|
||||
"daa": 378,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 352,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 379,
|
||||
"daa": 379,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 357.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 389,
|
||||
"daa": 389,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 362.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 400,
|
||||
"daa": 400,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 367.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 406,
|
||||
"daa": 406,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 372.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 410,
|
||||
"daa": 410,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 377.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 416,
|
||||
"daa": 416,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 382.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 420,
|
||||
"daa": 420,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneum-miner",
|
||||
"slot": 1,
|
||||
"ports": {
|
||||
"base": 31290,
|
||||
"suffix": 976
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,366 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "one",
|
||||
"case": "switch-off-expect-one",
|
||||
"switch": "off",
|
||||
"listing": 10,
|
||||
"joint": 200,
|
||||
"watch": 180,
|
||||
"node0": {
|
||||
"blocks": 250,
|
||||
"daa": 250
|
||||
},
|
||||
"listing_lines_on_node_0": 0,
|
||||
"eight_outbound_at_s": null,
|
||||
"last": {
|
||||
"t": 382.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 448,
|
||||
"daa": 448,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
"checks": {
|
||||
"listing_lines_on_node_0": false,
|
||||
"fresh_synced": true,
|
||||
"fresh_reached_eight_outbound": false,
|
||||
"fresh_connected_from_directory": false,
|
||||
"fresh_held_one_outbound": true,
|
||||
"no_directory_line_on_fresh": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"samples": [
|
||||
{
|
||||
"t": 206.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 261,
|
||||
"daa": 261,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 211.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 271,
|
||||
"daa": 271,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 216.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 276,
|
||||
"daa": 276,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 221.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 278,
|
||||
"daa": 278,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 226.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 282,
|
||||
"daa": 282,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 231.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 288,
|
||||
"daa": 288,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 236.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 294,
|
||||
"daa": 294,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 241.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 296,
|
||||
"daa": 296,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 246.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 303,
|
||||
"daa": 303,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 251.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 305,
|
||||
"daa": 305,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 256.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 307,
|
||||
"daa": 307,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 261.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 308,
|
||||
"daa": 308,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 266.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 311,
|
||||
"daa": 311,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 271.8,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 315,
|
||||
"daa": 315,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 276.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 322,
|
||||
"daa": 322,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 281.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 331,
|
||||
"daa": 331,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 286.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 341,
|
||||
"daa": 341,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 291.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 349,
|
||||
"daa": 349,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 296.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 357,
|
||||
"daa": 357,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 301.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 364,
|
||||
"daa": 364,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 306.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 369,
|
||||
"daa": 369,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 311.9,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 372,
|
||||
"daa": 372,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 317,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 374,
|
||||
"daa": 374,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 322,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 377,
|
||||
"daa": 377,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 327,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 384,
|
||||
"daa": 384,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 332,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 393,
|
||||
"daa": 393,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 337,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 396,
|
||||
"daa": 396,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 342,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 397,
|
||||
"daa": 397,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 347,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 402,
|
||||
"daa": 402,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 352,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 405,
|
||||
"daa": 405,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 357.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 413,
|
||||
"daa": 413,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 362.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 422,
|
||||
"daa": 422,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 367.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 428,
|
||||
"daa": 428,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 372.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 433,
|
||||
"daa": 433,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 377.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 440,
|
||||
"daa": 440,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 382.1,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 448,
|
||||
"daa": 448,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneum-miner",
|
||||
"slot": 0,
|
||||
"ports": {
|
||||
"base": 31090,
|
||||
"suffix": 975
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,366 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "eight",
|
||||
"case": "switch-on-expect-eight",
|
||||
"switch": "on",
|
||||
"listing": 10,
|
||||
"joint": 200,
|
||||
"watch": 180,
|
||||
"node0": {
|
||||
"blocks": 233,
|
||||
"daa": 233
|
||||
},
|
||||
"listing_lines_on_node_0": 10,
|
||||
"eight_outbound_at_s": 231.7,
|
||||
"last": {
|
||||
"t": 382.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 414,
|
||||
"daa": 414,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
"checks": {
|
||||
"listing_lines_on_node_0": true,
|
||||
"fresh_synced": true,
|
||||
"fresh_reached_eight_outbound": true,
|
||||
"fresh_connected_from_directory": true,
|
||||
"fresh_held_one_outbound": false,
|
||||
"no_directory_line_on_fresh": false
|
||||
},
|
||||
"failed_checks": [],
|
||||
"samples": [
|
||||
{
|
||||
"t": 206.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 242,
|
||||
"daa": 242,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 211.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 246,
|
||||
"daa": 246,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 216.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 253,
|
||||
"daa": 253,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 221.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 256,
|
||||
"daa": 256,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 226.7,
|
||||
"outbound": 1,
|
||||
"inbound": 0,
|
||||
"blocks": 260,
|
||||
"daa": 260,
|
||||
"drawn": 0,
|
||||
"connected_from_directory": 0
|
||||
},
|
||||
{
|
||||
"t": 231.7,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 262,
|
||||
"daa": 262,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 236.7,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 269,
|
||||
"daa": 269,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 241.7,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 277,
|
||||
"daa": 277,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 246.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 280,
|
||||
"daa": 280,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 251.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 283,
|
||||
"daa": 283,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 256.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 286,
|
||||
"daa": 286,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 261.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 290,
|
||||
"daa": 290,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 266.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 298,
|
||||
"daa": 298,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 271.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 303,
|
||||
"daa": 303,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 276.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 311,
|
||||
"daa": 311,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 281.8,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 316,
|
||||
"daa": 316,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 286.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 317,
|
||||
"daa": 317,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 291.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 323,
|
||||
"daa": 323,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 296.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 334,
|
||||
"daa": 334,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 301.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 337,
|
||||
"daa": 337,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 306.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 342,
|
||||
"daa": 342,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 311.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 348,
|
||||
"daa": 348,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 316.9,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 350,
|
||||
"daa": 350,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 322,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 357,
|
||||
"daa": 357,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 327,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 359,
|
||||
"daa": 359,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 332,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 362,
|
||||
"daa": 362,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 337,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 364,
|
||||
"daa": 364,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 342,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 368,
|
||||
"daa": 368,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 347,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 380,
|
||||
"daa": 380,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 352,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 391,
|
||||
"daa": 391,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 357.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 393,
|
||||
"daa": 393,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 362.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 399,
|
||||
"daa": 399,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 367.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 401,
|
||||
"daa": 401,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 372.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 403,
|
||||
"daa": 403,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 377.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 409,
|
||||
"daa": 409,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
},
|
||||
{
|
||||
"t": 382.1,
|
||||
"outbound": 10,
|
||||
"inbound": 0,
|
||||
"blocks": 414,
|
||||
"daa": 414,
|
||||
"drawn": 1,
|
||||
"connected_from_directory": 9
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-peer-directory/vendor/igneum-node-pd/target/release/igneum-miner",
|
||||
"slot": 2,
|
||||
"ports": {
|
||||
"base": 31490,
|
||||
"suffix": 977
|
||||
}
|
||||
}
|
||||
112
docs/plans/mission-item-12-peer-directory.md
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# Mission item 12: the weight-backed peer directory, prototype (status log)
|
||||
|
||||
Lane: horizon (mission items 4 and 12), 7 October 2026, after item 4's gate line. Branches: `peer-directory` (this repo, on
|
||||
master) and `peer-directory-node` (the fork, on release-0.3.20-node dc141409; targets 0.3.21). Times UK (BST) unless marked Z.
|
||||
|
||||
The item (mission.md 2.12, invent.md 7.1): a coinbase section where a key above dust may publish its node's address; a fresh
|
||||
node dials from that list weighted by 30-day weight, beside the DNS seeds. Gate: a fresh node with genesis peers only reaches 8
|
||||
outbound from the directory; a 34 percent attacker eclipses under 0.1 percent of 1,000 fresh starts (simulation is fine); the NAT
|
||||
fraction measured on the fleet (owed to the fleet lane, asked 7 October 13:0x UK; nothing rented). Dropped if the NAT fraction
|
||||
makes the list useless: this lane reports, it does not decide.
|
||||
|
||||
## 1. What exists to build on (read before writing)
|
||||
|
||||
| Where | What | Used how |
|
||||
|---|---|---|
|
||||
| fork `consensus/core/src/finality.rs` `FinalityItem` (tags 1 vote, 2 certificate, 3 evidence, 4 leave), `encode_section` / `decode_section` (`items || len || "IGNF"` at the end of the coinbase payload), `Leave` (W7: `daa || pubkey || signature`, signed by the vote key, carried LAST so a decoder from before its tag stops at it) | the section codec and the item shape to copy | the address item is tag 5 with the same carriage rule: last, after leaves, and only once its switch is on |
|
||||
| fork `consensus/src/processes/finality.rs` `ingest_leave` (block-carried, dated by the lowest carrier), `template_candidates` / `section_from` (what a template carries), `leave_active` (switch by DAA), `FinalityState.leaves` (persisted) | the ingest, the carriage and the switch pattern | the directory is a map key hash to (address, carrier DAA), persisted in the state the same way |
|
||||
| fork `components/connectionmanager/src/lib.rs` `handle_outbound_connections` | dials from the address manager's prioritised random iterator, then the DNS seeders when connections are still missing | the directory draw goes between the two: addresses drawn by weight from the directory are fed to the address manager and dialled before the seeders are asked |
|
||||
| fork `components/addressmanager/src/lib.rs` `add_address`, `iterate_prioritized_random_addresses` (weighted by failure count and prefix bucket) | the store a dialled address lives in | directory addresses enter it like seeder answers; the weight decides which enter, the store's own rule decides the order |
|
||||
| fork `consensus/core/src/config/params.rs` `consensus_digest` (a switch at never is outside the digest; set, it is in) | the activation pattern every 0.3.16 switch follows | `peer_directory_activation_daa`, never on every network |
|
||||
|
||||
## 2. Design, as built (prototype; fork branch peer-directory-node on release-0.3.20-node dc141409, commits 0cad5106 and db28d331 (tests); repo branch peer-directory on master 819d536b, commits 9a64d18c and 3e0dfa17 (gate), pushed to origin)
|
||||
|
||||
| Item | Rule |
|
||||
|---|---|
|
||||
| Wire | `AddressAnnounce { daa, ip: [u8; 16], port, pubkey, signature }` (core `finality.rs`), 171 B, signed by the vote key the header names under `IGNEUM_ADDR_V1` over `"igneum-addr-v1/" || chain_id || 0 || daa || ip || port` |
|
||||
| Carriage | in the MINER's extra data as `IGNP || hex(body)`, the key reveal's form (`IGNA` is already the EVM payout tag), never in the finality section: no switch for carriage, a node without the tag never meets it; `igneum-miner mine --announce <ip:port>` puts one in every template of every identity (`announced`, dated at the sink's DAA score when the run began) |
|
||||
| Reading | `FinalityManager::on_block_body` at or above `peer_directory_activation_daa`: the announcement must be by the block's own key, verify, and name a routable-in-form address; one node-local entry per key, the newest carrier wins (not persisted: a restarted node refills it from the blocks it sees; a prototype's gap) |
|
||||
| Report | `ConsensusApi::peer_directory()` rows with each key's weight at the latest determined checkpoint (0 under dust); entries older than a weight window dropped on the way |
|
||||
| Draw | `ConsensusApi::peer_directory_draw(n, exclude)`: without replacement, proportional to weight, keys under dust never drawn |
|
||||
| Dialling | `ConnectionManager::handle_outbound_connections`: after the address store's own iterator and before the DNS seeders, when connections are still missing, 2 x missing addresses from the draw enter the address store and are dialled at once (`DirectoryDraw` closure wired in `protocol/flows/src/service.rs` through the consensus's blocking session) |
|
||||
| Switch | `peer_directory_activation_daa`, never on every network (the four network constants), in the digest once set, in `OverrideParams` and the 60x file |
|
||||
| Not done | the RPC that lists the directory (the harness reads `getConnectedPeerInfo` and the node log instead); persistence across restarts; Ember and the phone's use of the list (invent.md 7.1's third hour) |
|
||||
|
||||
## 3. Gate plan
|
||||
|
||||
| Gate | How |
|
||||
|---|---|
|
||||
| a fresh node with genesis peers only reaches 8 outbound from the directory | fast-time network of 10 listing nodes (each announcing its loopback address) plus one fresh node started with `--outpeers=8`, `--nodnsseed` and one `--addpeer` to a genesis peer that serves blocks only; the fresh node's `getConnectedPeerInfo` shows 8 outbound within 5 min, all from the directory |
|
||||
| a 34 percent attacker eclipses under 0.1 percent of 1,000 fresh starts | `sim/peer-directory/eclipse.py`: the draw as implemented (weighted, without replacement, 8 peers) over a table where the attacker's keys hold 34 percent of the weight and list 34 percent of the addresses; 1,000 starts; expected 1.8e-4 at 8 peers (invent.md model E); also 16 peers and the honest-majority-of-peers reading |
|
||||
| the NAT fraction | RECEIVED from the fleet lane (ac055d60427caab99) at 13:1x UK, read at 12:06Z from each standing live-devnet node's own log, nothing rented: reachable from outside 2 of 14 (hub-1, RunPod, 26611 mapped: 2,844 inbound peer connections against 86 outbound; pool-1, RunPod, mapped 4463: 1,692 against 99); not reachable 12 of 14 (every Vast box: 0 inbound peer connections each, 96 to 542 outbound, no `--externalip`, no mapped port). So 86 percent of the fleet's nodes sit behind NAT and hold their 4 to 5 peers by dialling out; the two reachable nodes carry every inbound connection. Caveat (theirs): a rented fleet overstates the NAT share for datacentre operators and understates it for home miners; a fair read for "a node started with the defaults". Left out: the four Devnet 2 pods and the Hetzner seed. The marker was "Connected to incoming peer" against "Connected to outgoing peer" (the RPC server's local accepts are not peers). |
|
||||
|
||||
## 4. Runs
|
||||
|
||||
### The eclipse simulation (`sim/peer-directory/eclipse.py`, box 2, nice 10, 13:5x to 14:0x UK)
|
||||
|
||||
The draw as implemented (without replacement, proportional to weight at the latest checkpoint), 200 honest keys with Zipf
|
||||
weights, the attacker at 34 percent of the weight split over `m` keys of equal weight, seed 7.
|
||||
|
||||
| starts | peers | attacker keys | eclipsed | rate | model E a^n | attacker majority of the peers |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1,000 | 8 | 8 | 0 | 0 | 1.79e-4 | 4.0 percent |
|
||||
| 1,000 | 8 | 64 | 1 | 1.0e-3 | 1.79e-4 | 9.8 percent |
|
||||
| 1,000 | 8 | 1,000 | 0 | 0 | 1.79e-4 | 10.7 percent |
|
||||
| 1,000 | 16 | 8, 64, 1,000 | 0, 0, 0 | 0 | 3.19e-8 | 0, 9.2, 9.2 percent |
|
||||
| 100,000 | 8 | 8 | 0 | 0 | 1.79e-4 | 4.8 percent |
|
||||
| 100,000 | 8 | 64 | 14 | 1.4e-4 | 1.79e-4 | 10.7 percent |
|
||||
| 100,000 | 8 | 1,000 | 22 | 2.2e-4 | 1.79e-4 | 11.6 percent |
|
||||
|
||||
The gate's line (under 0.1 percent of 1,000 fresh starts) is met at 100,000 starts: 1.4e-4 and 2.2e-4, where 1,000 starts
|
||||
cannot resolve it (1 in 1,000 is exactly the line). Two readings beyond model E: with fewer attacker keys than peers an eclipse
|
||||
is impossible under the draw without replacement (the dust threshold, 100 blocks a window on mainnet, prices each attacker
|
||||
key at 100 blocks), and the attacker holds a MAJORITY of a fresh node's peers in about 11 percent of starts at 8 peers, which
|
||||
is the number that matters for a relay-level attack rather than a full eclipse; 16 peers takes that to 9 percent and the
|
||||
eclipse to zero in 1,000.
|
||||
|
||||
### Unit tests (box 2)
|
||||
|
||||
| Test | Result |
|
||||
|---|---|
|
||||
| core `address_announce_round_trips_and_verifies_under_its_key_only` | 1 of 1 |
|
||||
| node `the_peer_directory_lists_a_blocks_own_key_at_its_newest_address_only_when_switched_on` (known-failed first: the switch at never lists nothing) | 1 of 1 |
|
||||
| `cargo check -p kaspad -p igneum-miner --features kaspad/igneum-pow` on the branch | ok |
|
||||
|
||||
### The fast-time gate (box 2, `tools/fast-time-remote.sh --box 2`, binary of peer-directory-node 0cad5106, 13:27 to 13:34 UK)
|
||||
|
||||
`infra/fast-time/peer-directory.mjs`: ten listing nodes at one CPU thread each, every miner announcing its node's loopback
|
||||
p2p address, every node advertising an unroutable external ip (10.255.0.0/16) so ordinary address gossip hands a fresh node
|
||||
dead addresses only; after 200 s a fresh node starts with `--outpeers=8` and one `--addpeer` to node 0 and is watched 180 s.
|
||||
|
||||
| Case | Must | Got | Numbers |
|
||||
|---|---|---|---|
|
||||
| switch off, expect one (the known-failed case) | PASS | PASS | node 0 logged 0 listings; the fresh node held 1 outbound (node 0) for the whole watch, 0 draw lines, synced 448 blocks |
|
||||
| switch off, expect eight (the harness's own failed shape) | FAIL | FAIL | 1 outbound, 0 from the directory |
|
||||
| switch on, expect eight (THE GATE LINE) | PASS | PASS | node 0 logged 10 listings; the fresh node reached 8 outbound at 231.7 s (about 30 s after it started), 9 connections from the directory in one draw, synced 414 blocks |
|
||||
|
||||
Three harness faults on the way, each fixed: the log directory missing on the box (every case died at the redirect); the
|
||||
peer count read `isOutbound` where the fork's `RpcPeerInfo` is `is_outbound`; and the wrapper's first run checking the
|
||||
worktree root out on the box (fixed on horizon, 10140f9f, carried here).
|
||||
|
||||
## 5. Verdict line for main
|
||||
|
||||
The prototype does what invent.md 7.1 asked, on the numbers: a fresh node with one genesis peer and dead gossip reached 8
|
||||
outbound from the directory in about 30 s; the eclipse by a 34 percent attacker is 1.4e-4 to 2.2e-4 at 8 peers over 100,000
|
||||
starts (under the 0.1 percent line; 0 with 8 or fewer attacker keys, since the draw is without replacement), and the attacker
|
||||
holds a majority of a fresh node's peers in about 11 percent of starts, which is the number to watch. The NAT reading (2 of 14
|
||||
standing nodes reachable, 86 percent behind NAT with no inbound path) makes the list a SEED SUPPLEMENT, not a replacement:
|
||||
today it would list the two reachable fleet nodes beside the seeds, and a home miner's node (the 12-of-14 class unless the app
|
||||
maps a port) is a reader of the list, never a listing. Per tier: a home miner's node gains weight-backed peers beside the seeds
|
||||
at no cost and lists nothing by default; a rig or a pool node with a mapped port opts in with `--announce` and 171 bytes a block;
|
||||
the phone and Ember verify mode are not wired (not done). Listed as useful or dropped is main's and the project lead's call; this lane's
|
||||
reading is "keep as a seed supplement behind its switch", which costs 1.7 MB a day per node at 10,000 listing keys (approximate,
|
||||
from the item size) and nothing while the switch is never.
|
||||
|
||||
Open: an RPC that lists the directory; persistence across restarts; Ember and the phone; the testnet object and every network
|
||||
file carry no `peer_directory` field (the switch stays never until a cut sets it).
|
||||
|
||||
## 6. Rebase for 0.3.21 (14:0x UK, the shipper's order)
|
||||
|
||||
peer-directory-node rebased onto release-0.3.20-node c4459193 in one round, no conflict: tip 2e32d5f6, on both box mirrors under its name. Suite on build-2 at 2e32d5f6: igneum-miner 19 of 19, connectionmanager 0 tests, consensus lib 116 of 117 (the ban flake only; cargo stopped before consensus-core's target). Digest on tools/fleet/override.json: 7bd98cc4..., the same as the pin's binary. Handed to the node lane a283f5f0d364ceef0.
|
||||
|
||||
Digest on the file hub-1 runs (/root/fleet/override.json, sixteen fields, the copy at /tmp/igneum-devnet/override-v3-live.json on build-1): eada4bda8aa8368c2b2c3d17744bc7a70a0ff0e996dad681884d3ac5de1207eb, the shipper's string, read 14:1x UK from the branch binary on build-2; 7bd98cc4 was master's tools/fleet/override.json, another file. The live digest is unchanged by this branch.
|
||||
142
docs/plans/mission-item-4-fork-gate.md
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
# Mission item 4: weight-gated deep fork choice, the gate (status log)
|
||||
|
||||
Lane: horizon (mission items 4 and 12), started 7 October 2026, 12:41 UK, on main's brief. Branches: `horizon` (this repo, on master
|
||||
d1285cef) and `horizon-node` (the fork, on release-0.3.20-node dc141409, the 0.3.20 line; this work targets 0.3.21). Worktrees
|
||||
`igneum-wt-horizon` and `igneum-wt-horizon/vendor/igneum-node-horizon`. Times are UK (BST) unless marked Z.
|
||||
|
||||
The item (mission.md 2.4): a tip whose fork point is older than D (10 min of past-median time) is a fork-choice candidate only
|
||||
if the keys that built it hold at least a third of the weight table at the fork point. Gate, fast time: a 51 percent fresh-key
|
||||
fork from 15 min back is refused by every honest node; a one-third-weight fork is accepted; partition heal unchanged. Known-failed
|
||||
cases first.
|
||||
|
||||
## 1. What already existed (read before writing anything)
|
||||
|
||||
| Where | What | State |
|
||||
|---|---|---|
|
||||
| fork `consensus/src/processes/finality.rs` `deep_fork_refusal`, asked by `sink_search_algorithm` for every popped candidate | the rule, behind `fork_gate_activation_daa` (never on every network; in the digest once set) with `fork_gate_window_daa` 600 s; the fork point is the highest chain ancestor of the candidate on the sink's chain; depth = the larger of sink minus fork and candidate minus fork; builders = the vote keys of every block of the candidate's chain since the fork (chain blocks and mergesets); the table = `voters_at(fork)`; refused under `3 x weight < total`; node-local memo per refused block | on the 0.3.20 line since 61b22057 (6 October), fixes 3301cf32 (depth along both chains) and aa0182aa (no extension shortcut) |
|
||||
| fork unit tests | `without_the_fork_gate_a_minor_keys_deep_fork_wins` (known-failed), `the_fork_gate_refuses_a_deep_fork_under_a_third_and_passes_the_rest` (25 percent refused, 75 percent passes, inside the window passes) | green on that line |
|
||||
| `infra/fast-time/fork-gate.mjs` on branch ca3-v4-node (never on master) | a TWO-node harness: A at 75 percent, B at 25 percent, A IDLE through the split; cases gate-on hold (PASS 23:45Z 6 Oct), gate-off reorg (PASS), gate-off hold (FAIL as it must); run on the Mac; a `pkill -f` on the devnet suffix | the record in `docs/plans/counter-asic-3-node.md` 7.5 |
|
||||
| the live devnet and Devnet 2 override files, the testnet object | no `fork_gate` field anywhere: the switch is never on every network | unchanged by this lane |
|
||||
|
||||
What the mission gate asks beyond that record: a FRESH key (0 of the table, not 25 percent), the honest side MINING through the
|
||||
split (the record idled it), EVERY honest node (two, not one), the one-third case accepted, and the partition heal shown unchanged
|
||||
with the gate on and off. Nothing in the rule needed to change for any of these; this lane adds the proof.
|
||||
|
||||
## 2. What this lane added
|
||||
|
||||
| Piece | Where | What |
|
||||
|---|---|---|
|
||||
| Fresh-key unit test | fork `a_fresh_keys_deep_fork_wins_only_with_the_gate_off` | known-failed first: at never a key with no block in the table wins by blue work; at 0 it is refused with weight 0 of the table |
|
||||
| One-third line unit test | fork `the_gate_passes_at_one_third_of_the_table_and_refuses_under_it` | eight (honest mix, fork height) pairs; each outcome equals `3 x weight >= total` read from the table the gate reads; both sides seen |
|
||||
| Three-node harness | `infra/fast-time/fork-gate.mjs` (new on master's line) | H1 and H2 honest and mining through every phase, B the third node; modes attack (B fresh, 3 of 5 threads), third (B at about half of the table), partition (H1 against H2); a reorg is read from the chain (`getVirtualChainFromBlock` of the pre-cut tip lists removed blocks), never from a key; blue work compared as BigInt; leftovers stopped by pid file |
|
||||
| The six-case runner | `infra/fast-time/fork-gate-gate.mjs` | known-failed cases first, then the gate line, the one-third case, the two partition heals; GREEN only when every case gives the verdict it must and the two heals agree |
|
||||
| Box wrapper | `tools/fast-time-remote.sh` (whole-body block; listed in `tools/ci/whole-body-check.sh`) | runs a harness on a box under a slot with a holder line and a JSONL row, the node binaries from a fork worktree's target on the box, results fetched back |
|
||||
|
||||
## 2a. The hole the known-failed cases found (13:1x to 13:3x UK)
|
||||
|
||||
The one-third unit test failed on box 2 at its second pair: B on every fourth block, fork at height 50, B holding 12 of 49 at
|
||||
the fork, and the private tip WON. A probe test (temporary, since removed) read the gate's own answer at fork heights 40, 45,
|
||||
48, 50, 55, 60 and 65: refused at 40, 48 and 60; let through at 45, 50 and 55 (65 is inside the window, a legitimate pass).
|
||||
The let-through rows read "keys 2, signed 44 of 44": the honest key A was in the attacker's builders. The pattern is the fork
|
||||
block's own key: heights that are multiples of 4 sit on B's blocks and were refused; the others sit on A's blocks and passed.
|
||||
|
||||
Cause: `collect_builders` took each chain block's mergeset (blues and reds) and GHOSTDAG's `mergeset_blues[0]` is the block's
|
||||
selected parent, so the first private block above the fork carried the FORK block into the builders, and the fork block was
|
||||
A's. A 25 percent key forking right after a 75 percent key's block walked through the gate with A's weight on its side. The
|
||||
same reading let a private chain that merges honest blocks as side parents inherit every merged key. The 6 October harness
|
||||
PASS (23:45Z) was luck: its pre-cut sink was B-built, so the leaked key was B's own.
|
||||
|
||||
Fix (fork, `collect_builders(block, sink, keys)`): a builder is the key of a block the sink does NOT have (not a DAG ancestor
|
||||
of the sink, the sink itself included). The fork block is the sink's; honest blocks the attacker merged are the sink's; a
|
||||
partition side's own blocks are not, so a heal is unchanged. New unit test, known-failed shape first:
|
||||
`a_deep_fork_counts_only_the_blocks_the_sink_lacks_as_builders` (B from A's block at 45 refused; a private chain merging
|
||||
honest blocks 46 to 80 wins at never and is refused at 0).
|
||||
|
||||
Also seen: `ban_is_decided_by_the_carrying_block_so_nodes_agree_on_every_voter_list` died with `UnexpectedDifficulty` in the
|
||||
full crate run (box 2 under load 65) and passed alone (1 of 1, 13:1x UK); not this lane's change, noted for the suite count.
|
||||
|
||||
## 3. Runs
|
||||
|
||||
### Commits
|
||||
|
||||
| Repo | Branch | Commit | What |
|
||||
|---|---|---|---|
|
||||
| fork | horizon-node (on release-0.3.20-node dc141409) | eb32d2e0 | the builders fix (`collect_builders` skips every block the sink has) and the fork-gate tests on the two-instance lab |
|
||||
| fork | horizon-node | a6a71ac2 | the lab inserts into the judge first and rebuilds a block refused on `UnexpectedDifficulty` (the suite's flake class) |
|
||||
| repo | horizon (on master d1285cef) | 0dc2adff | the three-node harness, the six-case runner, the box wrapper, the whole-body check row |
|
||||
|
||||
### Suites (box 2, igneum-build-2, nice 10 on 32 cores)
|
||||
|
||||
| Run (UK) | Command | Result |
|
||||
|---|---|---|
|
||||
| 12:5x | `-- test --release -p kaspa-consensus` (the first test version, no fix) | 111 of 113: my one-third test FAIL (the hole), `ban_is_decided_by_the_carrying_block...` FAIL on `UnexpectedDifficulty` (load 65; passes alone 13:1x, 1 of 1) |
|
||||
| 13:2x | `-- test --release -p kaspa-consensus --lib processes::finality::tests` (the fix, the lab) | 24 of 24 |
|
||||
| 13:3x | `-- test --release -p kaspa-consensus` (eb32d2e0 content) | 112 of 114: two lab tests FAIL on `UnexpectedDifficulty` (the same flake class, now reachable by the lab's second instance) |
|
||||
| 13:3x | `-- test --release -p kaspa-consensus` at a6a71ac2, 0dcaf4c5, ca7acb99 (the lab's rebuild, a pause between rebuilds, salted hashes) | 111 or 112 of 114 each: the two labs whose instances share one config still FAIL at block 61 under load; the probes showed `UnexpectedDifficulty` thirty times over 7.5 s, so neither clock nor hash memo |
|
||||
| 13:38 | `-- test --release -p kaspa-consensus` at 6eb21fc9 (the lab on `DifficultyRule::KaspaSampled`, DAG-only bits) | 113 of 114 in the lib target, 3 ignored; the one FAIL is the pre-existing `ban_is_decided_by_the_carrying_block_so_nodes_agree_on_every_voter_list` (the same class: the dual rule's template bits and header stamp disagree at block 61, the first retarget, under load; passes alone). The lib target failing stops cargo before the integration targets. |
|
||||
|
||||
Fork commits after eb32d2e0, test-only: a6a71ac2, 0dcaf4c5, ca7acb99, f225ed9f, 6eb21fc9 (the lab inserts into the judge first and rebuilds on the flake; a pause between rebuilds; every lab its own hash words; the DAG-only difficulty rule; the import). The binary content of kaspad and igneum-miner is the same from eb32d2e0 on; the gate binary carries 6eb21fc9.
|
||||
|
||||
### Build (box 1, igneum-build-1)
|
||||
|
||||
| Run (UK) | Command | Result |
|
||||
|---|---|---|
|
||||
| (pending) | `tools/build-remote.sh --no-fetch -- build --release -p kaspad -p igneum-miner --features kaspad/igneum-pow` from the fork worktree at a6a71ac2 (igneum-pow at 8c728ca3 through an untracked paths override to `igneum-pow-amend`, the 0.3.20 pairing); two earlier submissions of the uncommitted tree were stopped by pid so the gate binary carries the commit | |
|
||||
|
||||
### Tree checks (the Mac, checks only)
|
||||
|
||||
`tools/ci/pre-push.sh --ci` on horizon 0dc2adff: GREEN, 43 checks in 31 s (13:3x UK).
|
||||
|
||||
### The gate (box 2, igneum-build-2, by main's word at 13:4x UK: box 1's slots stay with the 0.3.20 pin)
|
||||
|
||||
Binary: `igneumd` and `igneum-miner` of horizon-node 6eb21fc9 (igneum-pow 8c728ca3), built on box 2 at 13:5x UK
|
||||
(`tools/build-remote.sh --box 2`, 113 s); run through `tools/fast-time-remote.sh --box 2` (one slot, the bounded class, 583 s
|
||||
for the six cases side by side), case summaries and logs in `docs/plans/mission-item-4-gate/`. Window 60 DAA, joint 240 s,
|
||||
split 180 s, watch 150 s; honest nodes H1 and H2 at one CPU thread each through every phase; the attacker at 3 threads in
|
||||
the split (60 percent of the CPU hash: the refusal reads weight, not how much heavier the chain is).
|
||||
|
||||
| Case | Must | Got | Side 2 at the fork | Fork depth (DAA) | Blue work at the heal, side 2 against H1 | Honest nodes after the heal |
|
||||
|---|---|---|---|---|---|---|
|
||||
| attack, gate off, expect reorg (the rule's known-failed case) | PASS | PASS | 0 bps (fresh key) | 191 | 17,470,131 against 14,893,198 | H1 and H2 reorged at 510 s, 0 refusal lines |
|
||||
| attack, gate off, expect hold (the harness's own failed shape) | FAIL | FAIL | 0 bps | 179 | 19,683,187 against 17,459,678 | H1 and H2 reorged at 480 s, 0 refusal lines |
|
||||
| attack, gate on, expect hold (THE GATE LINE) | PASS | PASS | 0 bps | 197 | 20,297,242 against 14,807,915 | H1 and H2 HELD for the whole watch, 177 refusal lines each, both know side 2's tip; side 2 kept its chain |
|
||||
| third, gate on, expect reorg (a one-third-weight fork accepted) | PASS | PASS | 6,000 bps | 166 | 28,969,222 against 24,628,833 | H1 and H2 reorged at 477 s, 0 refusal lines |
|
||||
| partition, gate on, expect reorg | PASS | PASS | 3,719 bps | 194 | 18,089,683 against 11,490,863 | H1 reorged at 507 s, 0 refusal lines; H2 kept its chain |
|
||||
| partition, gate off, expect reorg (the same outcome) | PASS | PASS | 5,583 bps | 191 | 19,576,159 against 12,270,631 | H1 reorged at 507 s, 0 refusal lines; H2 kept its chain |
|
||||
|
||||
GATE GREEN, 13:58 UK: 6 of 6 cases gave the verdict they must; the partition heal is the same with the gate on and off
|
||||
(both reorg H1 onto the heavier side, 0 refusals). Reading "15 min back" at fast time: the devnet window is 600 s and the
|
||||
mission's 15 min is one and a half windows; the harness keeps the window at 60 DAA and the split at 180 s, three windows
|
||||
deep, so the refusal was asked from 61 s of the split on and held for its whole second half.
|
||||
|
||||
## 4. Consequences per tier
|
||||
|
||||
One sentence: with the fix, a renter's or a chain-splitter's deep reorg is bounded by weight for every tier alike, and an
|
||||
honest key's own blocks are never refused.
|
||||
|
||||
| Tier | What the number means |
|
||||
|---|---|
|
||||
| Home miner (one card, any size, Windows, Linux or macOS, any vendor) | its node refuses the same tips a rig's or a pool's node refuses; a fresh-key chain from more than ten minutes back never becomes its sink while the key that built it holds under a third of the window; nothing to configure, nothing to pay; the memo costs one mergeset per refused block |
|
||||
| Rig | the same; a rig's own blocks after a connectivity gap are built by its own keys and pass on share |
|
||||
| Pool user | the pool's node holds the chain the pool mined; a renter cannot reorganise the pool's payouts past ten minutes without a third of the weight |
|
||||
| Exchange and holder | a 12-hour double spend during a pause or in the first month (51-percent.md section 5 rank 2, USD 146 at 1 GH/s) is gone: the deep fork is refused at every honest node, lock or no lock |
|
||||
| The rule's cost | none for certificates; a partition side under a third cannot reorg the other past the window (the intended outcome, unchanged by the fix) |
|
||||
|
||||
Before the fix the bound held only when the fork sat on a block of a small key; a renter forking right after a large
|
||||
miner's block, or merging honest blocks into its chain, walked through on every tier.
|
||||
|
||||
## 5. Open
|
||||
|
||||
| Item | Owner |
|
||||
|---|---|
|
||||
| Merge: horizon-node is on release-0.3.20-node dc141409; main's word is to rebase onto the 0.3.20 pin once named (c4459193 the candidate) for 0.3.21; never a push to a release branch | this lane, when main names the pin |
|
||||
| The difficulty red: `ban_is_decided_by_the_carrying_block...` and, before the lab moved to the DAG-only rule, two lab tests, on `UnexpectedDifficulty` at block 61 (the first retarget) under the full suite's load; the dual rule's template bits come from a virtual resolved at one instant and the header is stamped at a later one | the node lane for 0.3.21 (main's word: logged, not fixed here) |
|
||||
| The fork's test block builder asks the gate (it runs the sink search from the parents it is given): any future test that builds a private chain on a gated instance builds it on the fork block instead; the lab's two-instance shape is the pattern | the node lane; a note in `consensus/src/consensus/test_consensus.rs` is owed |
|
||||
| `tools/box` named in the brief does not exist; the box tooling is `tools/build-remote.sh` on `infra/build-server/lib.sh`, which `tools/fast-time-remote.sh` uses; the wrapper's first run checked the worktree root out on box 2 and took the fork sources with it (fixed the same hour: overlay only, 10140f9f) | main's reading |
|
||||
| The devnet, Devnet 2 and the testnet object carry no `fork_gate` field: the switch stays never everywhere until a cut sets it (in the digest once set) | the shipper and the project lead |
|
||||
|
||||
## 6. Rebase for 0.3.21 (14:0x UK, the shipper's order)
|
||||
|
||||
horizon-node rebased onto release-0.3.20-node c4459193 (the 0.3.20 pin) in one round, no conflict: tip 437f0438, on both box mirrors under its name. Suite on build-2 at 437f0438: `-p kaspa-consensus` lib 117 of 119, 3 ignored (the ban difficulty flake and `a_chain_that_misses_an_adopted_lock_never_locks_here`, which passes alone 1 of 1 and passed in every earlier full run; load 113). Digest on tools/fleet/override.json (origin/master): 7bd98cc4..., the same as the pin's own binary on that file. Handed to the node lane a283f5f0d364ceef0 for the 0.3.21 merge after 55768f88, miner-reliability-20 and pool-finish-node.
|
||||
|
||||
Digest on the file hub-1 runs (/root/fleet/override.json, sixteen fields, the copy at /tmp/igneum-devnet/override-v3-live.json on build-1): eada4bda8aa8368c2b2c3d17744bc7a70a0ff0e996dad681884d3ac5de1207eb, the shipper's string, read 14:1x UK from the branch binary on build-2; 7bd98cc4 was master's tools/fleet/override.json, another file. The live digest is unchanged by this branch.
|
||||
|
|
@ -0,0 +1,933 @@
|
|||
{
|
||||
"pass": false,
|
||||
"expect": "hold",
|
||||
"case": "attack-gate-off-expect-hold",
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 120,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 247,
|
||||
"fork_depth_daa_at_heal": 179,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "d5347d2cd3468901fda8e5a1caffe0be55d45eb12739577fadb0141d2291c2ba",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "17459678",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "d5347d2cd3468901fda8e5a1caffe0be55d45eb12739577fadb0141d2291c2ba",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "17459678",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "bfdb75e384417228a85f4098f8f2bb65d40c271ce674bea2d1cc8a3c6c335f53",
|
||||
"blocks": 427,
|
||||
"daa": 426,
|
||||
"blue": 427,
|
||||
"blueWork": "19683187",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 480.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 480.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [
|
||||
"every_honest_node_held",
|
||||
"every_honest_node_logged_a_refusal"
|
||||
],
|
||||
"refusal_example": null,
|
||||
"samples": [
|
||||
{
|
||||
"t": 425.2,
|
||||
"h1": {
|
||||
"blocks": 416,
|
||||
"sink": "7b85c0879ec1a3f0",
|
||||
"daa": 414,
|
||||
"blue": 415,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 416,
|
||||
"sink": "7b85c0879ec1a3f0",
|
||||
"daa": 414,
|
||||
"blue": 415,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 435,
|
||||
"sink": "8bb7e69cea95ecaa",
|
||||
"blue": 435,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 430.2,
|
||||
"h1": {
|
||||
"blocks": 423,
|
||||
"sink": "44ee221996bf6519",
|
||||
"daa": 422,
|
||||
"blue": 423,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 423,
|
||||
"sink": "44ee221996bf6519",
|
||||
"daa": 422,
|
||||
"blue": 423,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 441,
|
||||
"sink": "46ee56ca78abcfa4",
|
||||
"blue": 441,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 435.2,
|
||||
"h1": {
|
||||
"blocks": 430,
|
||||
"sink": "fe81d0b598b34760",
|
||||
"daa": 429,
|
||||
"blue": 430,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 430,
|
||||
"sink": "fe81d0b598b34760",
|
||||
"daa": 429,
|
||||
"blue": 430,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 445,
|
||||
"sink": "bf71c714df908384",
|
||||
"blue": 445,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 440.2,
|
||||
"h1": {
|
||||
"blocks": 440,
|
||||
"sink": "acab21ca95900afc",
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 440,
|
||||
"sink": "acab21ca95900afc",
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 448,
|
||||
"sink": "b8fccb90e479e8a5",
|
||||
"blue": 448,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 445.3,
|
||||
"h1": {
|
||||
"blocks": 443,
|
||||
"sink": "d9051d6139ae8afa",
|
||||
"daa": 442,
|
||||
"blue": 443,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 443,
|
||||
"sink": "d9051d6139ae8afa",
|
||||
"daa": 442,
|
||||
"blue": 443,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 456,
|
||||
"sink": "2cc48c7a2084d5e4",
|
||||
"blue": 456,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 450.3,
|
||||
"h1": {
|
||||
"blocks": 450,
|
||||
"sink": "cea4dc9c673bd13a",
|
||||
"daa": 449,
|
||||
"blue": 450,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 450,
|
||||
"sink": "cea4dc9c673bd13a",
|
||||
"daa": 449,
|
||||
"blue": 450,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 466,
|
||||
"sink": "4f46263c45d1d32a",
|
||||
"blue": 466,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 455.3,
|
||||
"h1": {
|
||||
"blocks": 452,
|
||||
"sink": "1a8679962a368c21",
|
||||
"daa": 451,
|
||||
"blue": 452,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 452,
|
||||
"sink": "1a8679962a368c21",
|
||||
"daa": 451,
|
||||
"blue": 452,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 472,
|
||||
"sink": "12dcc825edc2fa17",
|
||||
"blue": 472,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 460.3,
|
||||
"h1": {
|
||||
"blocks": 454,
|
||||
"sink": "2a7c0240cfe56042",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 454,
|
||||
"sink": "2a7c0240cfe56042",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 480,
|
||||
"sink": "bbb6cf12cfd7419f",
|
||||
"blue": 480,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 465.3,
|
||||
"h1": {
|
||||
"blocks": 454,
|
||||
"sink": "2a7c0240cfe56042",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 454,
|
||||
"sink": "2a7c0240cfe56042",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 488,
|
||||
"sink": "f443140c40db1ff4",
|
||||
"blue": 488,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 470.3,
|
||||
"h1": {
|
||||
"blocks": 456,
|
||||
"sink": "2c2bf05b3992cb6b",
|
||||
"daa": 455,
|
||||
"blue": 456,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 456,
|
||||
"sink": "2c2bf05b3992cb6b",
|
||||
"daa": 455,
|
||||
"blue": 456,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 493,
|
||||
"sink": "0dd0e90fa5bb4330",
|
||||
"blue": 493,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 475.3,
|
||||
"h1": {
|
||||
"blocks": 458,
|
||||
"sink": "cde3915508aeb008",
|
||||
"daa": 457,
|
||||
"blue": 458,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 458,
|
||||
"sink": "cde3915508aeb008",
|
||||
"daa": 457,
|
||||
"blue": 458,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 496,
|
||||
"sink": "7adc2714fa7a10c9",
|
||||
"blue": 496,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 480.3,
|
||||
"h1": {
|
||||
"blocks": 505,
|
||||
"sink": "f08f99c6711510d7",
|
||||
"daa": 504,
|
||||
"blue": 505,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 505,
|
||||
"sink": "f08f99c6711510d7",
|
||||
"daa": 504,
|
||||
"blue": 505,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 505,
|
||||
"sink": "f08f99c6711510d7",
|
||||
"blue": 505,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 485.3,
|
||||
"h1": {
|
||||
"blocks": 509,
|
||||
"sink": "9dfb826d38e1f6a4",
|
||||
"daa": 508,
|
||||
"blue": 509,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 509,
|
||||
"sink": "9dfb826d38e1f6a4",
|
||||
"daa": 508,
|
||||
"blue": 509,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 509,
|
||||
"sink": "9dfb826d38e1f6a4",
|
||||
"blue": 509,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 490.4,
|
||||
"h1": {
|
||||
"blocks": 511,
|
||||
"sink": "a9bdeeb2148190f1",
|
||||
"daa": 510,
|
||||
"blue": 511,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 511,
|
||||
"sink": "a9bdeeb2148190f1",
|
||||
"daa": 510,
|
||||
"blue": 511,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 511,
|
||||
"sink": "a9bdeeb2148190f1",
|
||||
"blue": 511,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 495.4,
|
||||
"h1": {
|
||||
"blocks": 522,
|
||||
"sink": "fa5aefefc31e1c4c",
|
||||
"daa": 521,
|
||||
"blue": 522,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 522,
|
||||
"sink": "fa5aefefc31e1c4c",
|
||||
"daa": 521,
|
||||
"blue": 522,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 522,
|
||||
"sink": "fa5aefefc31e1c4c",
|
||||
"blue": 522,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 500.4,
|
||||
"h1": {
|
||||
"blocks": 525,
|
||||
"sink": "3f659b8355cf6fb8",
|
||||
"daa": 524,
|
||||
"blue": 525,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 525,
|
||||
"sink": "3f659b8355cf6fb8",
|
||||
"daa": 524,
|
||||
"blue": 525,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 525,
|
||||
"sink": "3f659b8355cf6fb8",
|
||||
"blue": 525,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 505.4,
|
||||
"h1": {
|
||||
"blocks": 528,
|
||||
"sink": "2b00a2431aecf64d",
|
||||
"daa": 527,
|
||||
"blue": 528,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 528,
|
||||
"sink": "2b00a2431aecf64d",
|
||||
"daa": 527,
|
||||
"blue": 528,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 528,
|
||||
"sink": "2b00a2431aecf64d",
|
||||
"blue": 528,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 510.4,
|
||||
"h1": {
|
||||
"blocks": 534,
|
||||
"sink": "f10f202f1b8adf79",
|
||||
"daa": 533,
|
||||
"blue": 534,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 534,
|
||||
"sink": "f10f202f1b8adf79",
|
||||
"daa": 533,
|
||||
"blue": 534,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 534,
|
||||
"sink": "f10f202f1b8adf79",
|
||||
"blue": 534,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 515.4,
|
||||
"h1": {
|
||||
"blocks": 541,
|
||||
"sink": "d70cd34944d6d565",
|
||||
"daa": 540,
|
||||
"blue": 541,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 541,
|
||||
"sink": "d70cd34944d6d565",
|
||||
"daa": 540,
|
||||
"blue": 541,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 541,
|
||||
"sink": "d70cd34944d6d565",
|
||||
"blue": 541,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 520.4,
|
||||
"h1": {
|
||||
"blocks": 546,
|
||||
"sink": "35d62b928d603bac",
|
||||
"daa": 545,
|
||||
"blue": 546,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 546,
|
||||
"sink": "35d62b928d603bac",
|
||||
"daa": 545,
|
||||
"blue": 546,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 546,
|
||||
"sink": "35d62b928d603bac",
|
||||
"blue": 546,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 525.4,
|
||||
"h1": {
|
||||
"blocks": 552,
|
||||
"sink": "11ee723145434436",
|
||||
"daa": 551,
|
||||
"blue": 552,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 552,
|
||||
"sink": "11ee723145434436",
|
||||
"daa": 551,
|
||||
"blue": 552,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 552,
|
||||
"sink": "11ee723145434436",
|
||||
"blue": 552,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 530.4,
|
||||
"h1": {
|
||||
"blocks": 561,
|
||||
"sink": "096fe4e02ba023a4",
|
||||
"daa": 560,
|
||||
"blue": 561,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 561,
|
||||
"sink": "096fe4e02ba023a4",
|
||||
"daa": 560,
|
||||
"blue": 561,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 561,
|
||||
"sink": "096fe4e02ba023a4",
|
||||
"blue": 561,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 535.4,
|
||||
"h1": {
|
||||
"blocks": 566,
|
||||
"sink": "58b6d24c4920da55",
|
||||
"daa": 565,
|
||||
"blue": 566,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 566,
|
||||
"sink": "58b6d24c4920da55",
|
||||
"daa": 565,
|
||||
"blue": 566,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 566,
|
||||
"sink": "58b6d24c4920da55",
|
||||
"blue": 566,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 540.4,
|
||||
"h1": {
|
||||
"blocks": 567,
|
||||
"sink": "3a757d2721963b97",
|
||||
"daa": 566,
|
||||
"blue": 567,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 567,
|
||||
"sink": "3a757d2721963b97",
|
||||
"daa": 566,
|
||||
"blue": 567,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 567,
|
||||
"sink": "3a757d2721963b97",
|
||||
"blue": 567,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 545.4,
|
||||
"h1": {
|
||||
"blocks": 572,
|
||||
"sink": "40cb1b5ff6ffa6e2",
|
||||
"daa": 571,
|
||||
"blue": 572,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 572,
|
||||
"sink": "40cb1b5ff6ffa6e2",
|
||||
"daa": 571,
|
||||
"blue": 572,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 572,
|
||||
"sink": "40cb1b5ff6ffa6e2",
|
||||
"blue": 572,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 550.4,
|
||||
"h1": {
|
||||
"blocks": 577,
|
||||
"sink": "e3f1416a5521d05a",
|
||||
"daa": 576,
|
||||
"blue": 577,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 577,
|
||||
"sink": "e3f1416a5521d05a",
|
||||
"daa": 576,
|
||||
"blue": 577,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 577,
|
||||
"sink": "e3f1416a5521d05a",
|
||||
"blue": 577,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 555.5,
|
||||
"h1": {
|
||||
"blocks": 584,
|
||||
"sink": "38b6a8056ad74b9d",
|
||||
"daa": 583,
|
||||
"blue": 584,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 584,
|
||||
"sink": "38b6a8056ad74b9d",
|
||||
"daa": 583,
|
||||
"blue": 584,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 584,
|
||||
"sink": "38b6a8056ad74b9d",
|
||||
"blue": 584,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 560.5,
|
||||
"h1": {
|
||||
"blocks": 589,
|
||||
"sink": "69c3e39a47332124",
|
||||
"daa": 588,
|
||||
"blue": 589,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 589,
|
||||
"sink": "69c3e39a47332124",
|
||||
"daa": 588,
|
||||
"blue": 589,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 589,
|
||||
"sink": "69c3e39a47332124",
|
||||
"blue": 589,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 565.5,
|
||||
"h1": {
|
||||
"blocks": 592,
|
||||
"sink": "6fe943b09aa71ffa",
|
||||
"daa": 591,
|
||||
"blue": 592,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 592,
|
||||
"sink": "6fe943b09aa71ffa",
|
||||
"daa": 591,
|
||||
"blue": 592,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 592,
|
||||
"sink": "6fe943b09aa71ffa",
|
||||
"blue": 592,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 570.5,
|
||||
"h1": {
|
||||
"blocks": 595,
|
||||
"sink": "b5217027de64f1a2",
|
||||
"daa": 594,
|
||||
"blue": 595,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 595,
|
||||
"sink": "b5217027de64f1a2",
|
||||
"daa": 594,
|
||||
"blue": 595,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 595,
|
||||
"sink": "b5217027de64f1a2",
|
||||
"blue": 595,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 1,
|
||||
"ports": {
|
||||
"base": 30730,
|
||||
"suffix": 981
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
12:48:26.701 fg1 case attack-gate-off-expect-hold: mode attack, gate off (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 0), expect hold
|
||||
12:48:28.281 fg1 h1 up pid 480222 json 30732 p2p 30731
|
||||
12:48:29.791 fg1 h2 up pid 481550 json 30742 p2p 30741 addpeer 30731
|
||||
12:48:31.307 fg1 b up pid 482808 json 30752 p2p 30751 addpeer 30761,30762
|
||||
12:52:34.325 fg1 phase 1 done at 240.0 s: H1 248 blocks sink 0535d8ae daa 247; H2 248 sink 0535d8ae; side 2 (b) 248 sink 0535d8ae; keys H1 8da9ddee H2 eda9cde4 side2 fresh (none yet)
|
||||
12:52:34.384 fg1 weight at the fork (last 120 blue blocks of H1's chain): side 2 0, others 120, side 2 0 bps
|
||||
12:52:34.387 fg1 links cut at 240.1 s; side 2 (b) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:34.491 fg1 phase 2 done at 420.2 s: H1 412 blocks sink d5347d2c daa 411 blue 412 work 17459678; side 2 427 sink bfdb75e3 daa 426 blue 427 work 19683187 (side 2 heavier: true); fork depth 179 DAA against window 60
|
||||
12:55:34.491 fg1 links restored at 420.2 s; watching H1 and H2 for 150 s
|
||||
12:56:04.581 fg1 t=450.3 s H1 450 blocks sink cea4dc9c held; H2 450 blocks sink cea4dc9c held; side 2 466 blocks sink 4f46263c
|
||||
12:56:34.656 fg1 H1 left its pre-cut chain at 480.3 s: sink f08f99c6711510d7 by 0e2c6fe2
|
||||
12:56:34.659 fg1 H2 left its pre-cut chain at 480.3 s: sink f08f99c6711510d7 by 0e2c6fe2
|
||||
12:56:34.661 fg1 t=480.3 s H1 505 blocks sink f08f99c6 REORGED; H2 505 blocks sink f08f99c6 REORGED; side 2 505 blocks sink f08f99c6
|
||||
12:57:04.702 fg1 t=510.4 s H1 534 blocks sink f10f202f REORGED; H2 534 blocks sink f10f202f REORGED; side 2 534 blocks sink f10f202f
|
||||
12:57:34.751 fg1 t=540.4 s H1 567 blocks sink 3a757d27 REORGED; H2 567 blocks sink 3a757d27 REORGED; side 2 567 blocks sink 3a757d27
|
||||
12:58:04.813 fg1 t=570.5 s H1 595 blocks sink b5217027 REORGED; H2 595 blocks sink b5217027 REORGED; side 2 595 blocks sink b5217027
|
||||
12:58:04.825 fg1 SUMMARY FAIL (attack-gate-off-expect-hold): side 2 held 0 bps of the blue blocks at the fork; fork depth 179 DAA against window 60; side 2 blue work 19683187 against H1 17459678 at the heal; H1 reorged at 480.3 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 480.3 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true; FAILED CHECK every_honest_node_held, every_honest_node_logged_a_refusal
|
||||
12:58:04.825 fg1 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-off-expect-hold.json
|
||||
|
|
@ -0,0 +1,930 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "attack-gate-off-expect-reorg",
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 120,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 240,
|
||||
"fork_depth_daa_at_heal": 191,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "6e932c389f2ad01a39873317f9549f0a336e66a7c840669dd5bcb44a979a19ad",
|
||||
"blocks": 421,
|
||||
"daa": 420,
|
||||
"blue": 421,
|
||||
"blueWork": "14893198",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "6e932c389f2ad01a39873317f9549f0a336e66a7c840669dd5bcb44a979a19ad",
|
||||
"blocks": 421,
|
||||
"daa": 420,
|
||||
"blue": 421,
|
||||
"blueWork": "14893198",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "d93a1238a397f68337f4bc28d6197a61a32fbca176f3e7f4248b6b330e239cc8",
|
||||
"blocks": 432,
|
||||
"daa": 431,
|
||||
"blue": 432,
|
||||
"blueWork": "17470131",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 510.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 510.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"samples": [
|
||||
{
|
||||
"t": 425.2,
|
||||
"h1": {
|
||||
"blocks": 426,
|
||||
"sink": "719c3c11c14e54ed",
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 426,
|
||||
"sink": "719c3c11c14e54ed",
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 438,
|
||||
"sink": "c704e731f479e045",
|
||||
"blue": 438,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 430.2,
|
||||
"h1": {
|
||||
"blocks": 432,
|
||||
"sink": "fe308e06a3529e00",
|
||||
"daa": 431,
|
||||
"blue": 432,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 432,
|
||||
"sink": "fe308e06a3529e00",
|
||||
"daa": 431,
|
||||
"blue": 432,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 442,
|
||||
"sink": "7ca72d6ee8a28b46",
|
||||
"blue": 442,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 435.2,
|
||||
"h1": {
|
||||
"blocks": 436,
|
||||
"sink": "ba7e8b5f41caf493",
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 436,
|
||||
"sink": "ba7e8b5f41caf493",
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 446,
|
||||
"sink": "5459e40a1e9137e0",
|
||||
"blue": 446,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 440.2,
|
||||
"h1": {
|
||||
"blocks": 438,
|
||||
"sink": "19432a8a37b593ad",
|
||||
"daa": 437,
|
||||
"blue": 438,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 438,
|
||||
"sink": "19432a8a37b593ad",
|
||||
"daa": 437,
|
||||
"blue": 438,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 455,
|
||||
"sink": "5fdf67fc248f6500",
|
||||
"blue": 455,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 445.3,
|
||||
"h1": {
|
||||
"blocks": 446,
|
||||
"sink": "aada7bf1e3d16b25",
|
||||
"daa": 445,
|
||||
"blue": 446,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 446,
|
||||
"sink": "aada7bf1e3d16b25",
|
||||
"daa": 445,
|
||||
"blue": 446,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 466,
|
||||
"sink": "85ccafa8a9d39de0",
|
||||
"blue": 466,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 450.3,
|
||||
"h1": {
|
||||
"blocks": 447,
|
||||
"sink": "1761d6112c00d161",
|
||||
"daa": 446,
|
||||
"blue": 447,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 447,
|
||||
"sink": "1761d6112c00d161",
|
||||
"daa": 446,
|
||||
"blue": 447,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 475,
|
||||
"sink": "594fe7ff929c559f",
|
||||
"blue": 475,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 455.3,
|
||||
"h1": {
|
||||
"blocks": 455,
|
||||
"sink": "3d694806975e096e",
|
||||
"daa": 454,
|
||||
"blue": 455,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 455,
|
||||
"sink": "3d694806975e096e",
|
||||
"daa": 454,
|
||||
"blue": 455,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 480,
|
||||
"sink": "bf92fbb2a472d205",
|
||||
"blue": 480,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 460.3,
|
||||
"h1": {
|
||||
"blocks": 461,
|
||||
"sink": "4c2da8fcb362f14d",
|
||||
"daa": 460,
|
||||
"blue": 461,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 461,
|
||||
"sink": "4c2da8fcb362f14d",
|
||||
"daa": 460,
|
||||
"blue": 461,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 482,
|
||||
"sink": "90cc4fd0fac9bef2",
|
||||
"blue": 482,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 465.3,
|
||||
"h1": {
|
||||
"blocks": 467,
|
||||
"sink": "4cd5d4fda0703837",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 467,
|
||||
"sink": "4cd5d4fda0703837",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 484,
|
||||
"sink": "8d822c253a2939d6",
|
||||
"blue": 484,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 470.3,
|
||||
"h1": {
|
||||
"blocks": 473,
|
||||
"sink": "beeb70fa234a9a4b",
|
||||
"daa": 472,
|
||||
"blue": 473,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 473,
|
||||
"sink": "beeb70fa234a9a4b",
|
||||
"daa": 472,
|
||||
"blue": 473,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 487,
|
||||
"sink": "ed057653dec1d416",
|
||||
"blue": 487,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 475.3,
|
||||
"h1": {
|
||||
"blocks": 480,
|
||||
"sink": "47c9ab35c01f2f7d",
|
||||
"daa": 479,
|
||||
"blue": 480,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 480,
|
||||
"sink": "47c9ab35c01f2f7d",
|
||||
"daa": 479,
|
||||
"blue": 480,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 495,
|
||||
"sink": "072c31cf3c13877b",
|
||||
"blue": 495,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 480.3,
|
||||
"h1": {
|
||||
"blocks": 486,
|
||||
"sink": "918c05c7a79ce8ed",
|
||||
"daa": 485,
|
||||
"blue": 486,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 486,
|
||||
"sink": "918c05c7a79ce8ed",
|
||||
"daa": 485,
|
||||
"blue": 486,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 504,
|
||||
"sink": "6ab8526912a92786",
|
||||
"blue": 504,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 485.4,
|
||||
"h1": {
|
||||
"blocks": 491,
|
||||
"sink": "5b94825a96af8031",
|
||||
"daa": 490,
|
||||
"blue": 491,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 491,
|
||||
"sink": "5b94825a96af8031",
|
||||
"daa": 490,
|
||||
"blue": 491,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 511,
|
||||
"sink": "e5d2d2cf5ca14138",
|
||||
"blue": 511,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 490.4,
|
||||
"h1": {
|
||||
"blocks": 494,
|
||||
"sink": "7d0fd0b857ad553d",
|
||||
"daa": 493,
|
||||
"blue": 494,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 494,
|
||||
"sink": "7d0fd0b857ad553d",
|
||||
"daa": 493,
|
||||
"blue": 494,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 518,
|
||||
"sink": "6acadef70d9d2b7e",
|
||||
"blue": 518,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 495.4,
|
||||
"h1": {
|
||||
"blocks": 500,
|
||||
"sink": "4e35f238846e9802",
|
||||
"daa": 499,
|
||||
"blue": 500,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 500,
|
||||
"sink": "4e35f238846e9802",
|
||||
"daa": 499,
|
||||
"blue": 500,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 524,
|
||||
"sink": "a0e5e0544388677b",
|
||||
"blue": 524,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 500.4,
|
||||
"h1": {
|
||||
"blocks": 502,
|
||||
"sink": "1f3cf87f97e6661c",
|
||||
"daa": 501,
|
||||
"blue": 502,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 502,
|
||||
"sink": "1f3cf87f97e6661c",
|
||||
"daa": 501,
|
||||
"blue": 502,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 530,
|
||||
"sink": "f0ba9826edcf48e7",
|
||||
"blue": 530,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 505.4,
|
||||
"h1": {
|
||||
"blocks": 509,
|
||||
"sink": "532a873c7ad783c5",
|
||||
"daa": 508,
|
||||
"blue": 509,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 509,
|
||||
"sink": "532a873c7ad783c5",
|
||||
"daa": 508,
|
||||
"blue": 509,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 537,
|
||||
"sink": "b138a9d8ba0b3454",
|
||||
"blue": 537,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 510.4,
|
||||
"h1": {
|
||||
"blocks": 545,
|
||||
"sink": "b878077d471c2a73",
|
||||
"daa": 544,
|
||||
"blue": 545,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 545,
|
||||
"sink": "b878077d471c2a73",
|
||||
"daa": 544,
|
||||
"blue": 545,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 545,
|
||||
"sink": "b878077d471c2a73",
|
||||
"blue": 545,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 515.4,
|
||||
"h1": {
|
||||
"blocks": 556,
|
||||
"sink": "95bd60b5bf755ef1",
|
||||
"daa": 555,
|
||||
"blue": 556,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 556,
|
||||
"sink": "95bd60b5bf755ef1",
|
||||
"daa": 555,
|
||||
"blue": 556,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 556,
|
||||
"sink": "95bd60b5bf755ef1",
|
||||
"blue": 556,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 520.4,
|
||||
"h1": {
|
||||
"blocks": 569,
|
||||
"sink": "258f2c477b49756d",
|
||||
"daa": 568,
|
||||
"blue": 569,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 569,
|
||||
"sink": "258f2c477b49756d",
|
||||
"daa": 568,
|
||||
"blue": 569,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 569,
|
||||
"sink": "258f2c477b49756d",
|
||||
"blue": 569,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 525.4,
|
||||
"h1": {
|
||||
"blocks": 571,
|
||||
"sink": "e8cc9969d5d1dc10",
|
||||
"daa": 570,
|
||||
"blue": 571,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 571,
|
||||
"sink": "e8cc9969d5d1dc10",
|
||||
"daa": 570,
|
||||
"blue": 571,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 571,
|
||||
"sink": "e8cc9969d5d1dc10",
|
||||
"blue": 571,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 530.5,
|
||||
"h1": {
|
||||
"blocks": 573,
|
||||
"sink": "da3da53755578a2d",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 573,
|
||||
"sink": "da3da53755578a2d",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 573,
|
||||
"sink": "da3da53755578a2d",
|
||||
"blue": 573,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 535.5,
|
||||
"h1": {
|
||||
"blocks": 576,
|
||||
"sink": "65ba87e325c66754",
|
||||
"daa": 575,
|
||||
"blue": 576,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 576,
|
||||
"sink": "65ba87e325c66754",
|
||||
"daa": 575,
|
||||
"blue": 576,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 576,
|
||||
"sink": "65ba87e325c66754",
|
||||
"blue": 576,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 540.5,
|
||||
"h1": {
|
||||
"blocks": 580,
|
||||
"sink": "11e564345e74f2cb",
|
||||
"daa": 579,
|
||||
"blue": 580,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 580,
|
||||
"sink": "11e564345e74f2cb",
|
||||
"daa": 579,
|
||||
"blue": 580,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 580,
|
||||
"sink": "11e564345e74f2cb",
|
||||
"blue": 580,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 545.5,
|
||||
"h1": {
|
||||
"blocks": 585,
|
||||
"sink": "b1d2689648b6d765",
|
||||
"daa": 584,
|
||||
"blue": 585,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 585,
|
||||
"sink": "b1d2689648b6d765",
|
||||
"daa": 584,
|
||||
"blue": 585,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 585,
|
||||
"sink": "b1d2689648b6d765",
|
||||
"blue": 585,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 550.5,
|
||||
"h1": {
|
||||
"blocks": 594,
|
||||
"sink": "0856bc8c348725e9",
|
||||
"daa": 593,
|
||||
"blue": 594,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 594,
|
||||
"sink": "0856bc8c348725e9",
|
||||
"daa": 593,
|
||||
"blue": 594,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 594,
|
||||
"sink": "0856bc8c348725e9",
|
||||
"blue": 594,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 555.5,
|
||||
"h1": {
|
||||
"blocks": 597,
|
||||
"sink": "b0b25422dae4fab7",
|
||||
"daa": 596,
|
||||
"blue": 597,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 597,
|
||||
"sink": "b0b25422dae4fab7",
|
||||
"daa": 596,
|
||||
"blue": 597,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 597,
|
||||
"sink": "b0b25422dae4fab7",
|
||||
"blue": 597,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 560.5,
|
||||
"h1": {
|
||||
"blocks": 606,
|
||||
"sink": "733de568ec588157",
|
||||
"daa": 605,
|
||||
"blue": 606,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 606,
|
||||
"sink": "733de568ec588157",
|
||||
"daa": 605,
|
||||
"blue": 606,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 606,
|
||||
"sink": "733de568ec588157",
|
||||
"blue": 606,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 565.5,
|
||||
"h1": {
|
||||
"blocks": 608,
|
||||
"sink": "ad3c86d071a93e75",
|
||||
"daa": 607,
|
||||
"blue": 608,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 608,
|
||||
"sink": "ad3c86d071a93e75",
|
||||
"daa": 607,
|
||||
"blue": 608,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 608,
|
||||
"sink": "ad3c86d071a93e75",
|
||||
"blue": 608,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 570.5,
|
||||
"h1": {
|
||||
"blocks": 613,
|
||||
"sink": "a38c3c8af9f6290d",
|
||||
"daa": 612,
|
||||
"blue": 613,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 613,
|
||||
"sink": "a38c3c8af9f6290d",
|
||||
"daa": 612,
|
||||
"blue": 613,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 613,
|
||||
"sink": "a38c3c8af9f6290d",
|
||||
"blue": 613,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 0,
|
||||
"ports": {
|
||||
"base": 30690,
|
||||
"suffix": 980
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
12:48:26.701 fg0 case attack-gate-off-expect-reorg: mode attack, gate off (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 0), expect reorg
|
||||
12:48:28.258 fg0 h1 up pid 480223 json 30692 p2p 30691
|
||||
12:48:29.769 fg0 h2 up pid 481517 json 30702 p2p 30701 addpeer 30691
|
||||
12:48:31.285 fg0 b up pid 482726 json 30712 p2p 30711 addpeer 30721,30722
|
||||
12:52:34.300 fg0 phase 1 done at 240.0 s: H1 242 blocks sink e66998c6 daa 240; H2 242 sink e66998c6; side 2 (b) 242 sink e66998c6; keys H1 8da9ddee H2 eda9cde4 side2 fresh (none yet)
|
||||
12:52:34.368 fg0 weight at the fork (last 120 blue blocks of H1's chain): side 2 0, others 120, side 2 0 bps
|
||||
12:52:34.370 fg0 links cut at 240.1 s; side 2 (b) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:34.480 fg0 phase 2 done at 420.2 s: H1 421 blocks sink 6e932c38 daa 420 blue 421 work 14893198; side 2 432 sink d93a1238 daa 431 blue 432 work 17470131 (side 2 heavier: true); fork depth 191 DAA against window 60
|
||||
12:55:34.481 fg0 links restored at 420.2 s; watching H1 and H2 for 150 s
|
||||
12:56:04.569 fg0 t=450.3 s H1 447 blocks sink 1761d611 held; H2 447 blocks sink 1761d611 held; side 2 475 blocks sink 594fe7ff
|
||||
12:56:34.644 fg0 t=480.4 s H1 486 blocks sink 918c05c7 held; H2 486 blocks sink 918c05c7 held; side 2 504 blocks sink 6ab85269
|
||||
12:57:04.714 fg0 H1 left its pre-cut chain at 510.4 s: sink b878077d471c2a73 by eda9cde4
|
||||
12:57:04.717 fg0 H2 left its pre-cut chain at 510.4 s: sink b878077d471c2a73 by eda9cde4
|
||||
12:57:04.719 fg0 t=510.4 s H1 545 blocks sink b878077d REORGED; H2 545 blocks sink b878077d REORGED; side 2 545 blocks sink b878077d
|
||||
12:57:34.769 fg0 t=540.5 s H1 580 blocks sink 11e56434 REORGED; H2 580 blocks sink 11e56434 REORGED; side 2 580 blocks sink 11e56434
|
||||
12:58:04.814 fg0 t=570.5 s H1 613 blocks sink a38c3c8a REORGED; H2 613 blocks sink a38c3c8a REORGED; side 2 613 blocks sink a38c3c8a
|
||||
12:58:04.822 fg0 SUMMARY PASS (attack-gate-off-expect-reorg): side 2 held 0 bps of the blue blocks at the fork; fork depth 191 DAA against window 60; side 2 blue work 17470131 against H1 14893198 at the heal; H1 reorged at 510.4 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 510.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true
|
||||
12:58:04.822 fg0 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-off-expect-reorg.json
|
||||
|
|
@ -0,0 +1,930 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "hold",
|
||||
"case": "attack-gate-on-expect-hold",
|
||||
"mode": "attack",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 121,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 233,
|
||||
"fork_depth_daa_at_heal": 197,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "036cfe568f3d403351b338ea41b7069ad4eae0ce95308436a25b6c7aa4c1372a",
|
||||
"blocks": 396,
|
||||
"daa": 395,
|
||||
"blue": 396,
|
||||
"blueWork": "14807915",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "036cfe568f3d403351b338ea41b7069ad4eae0ce95308436a25b6c7aa4c1372a",
|
||||
"blocks": 396,
|
||||
"daa": 395,
|
||||
"blue": 396,
|
||||
"blueWork": "14807915",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "abb93c2318f6c2ebdbd4e14a50b3d73ba7f483b8b06b18666e1015d038d4011a",
|
||||
"blocks": 431,
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"blueWork": "20297242",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": true,
|
||||
"reorged": false,
|
||||
"reorg_at_s": null,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 177
|
||||
},
|
||||
"h2": {
|
||||
"held": true,
|
||||
"reorged": false,
|
||||
"reorg_at_s": null,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 177
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": true,
|
||||
"every_honest_node_reorged": false,
|
||||
"every_honest_node_logged_a_refusal": true,
|
||||
"no_honest_node_logged_a_refusal": false,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": "Fork choice: block 41225a00fb38b6394540a5707443bd70e678484cbd20aa3fa8e807bb24df8d4a forks 252 DAA back from the sink's chain and its builders hold 0.00% of the weight table at the fork (under one third); not a sink candidate (ledger 51-percent rank 2)",
|
||||
"samples": [
|
||||
{
|
||||
"t": 425.2,
|
||||
"h1": {
|
||||
"blocks": 407,
|
||||
"sink": "b9b5fef0daea5b74",
|
||||
"daa": 406,
|
||||
"blue": 407,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 407,
|
||||
"sink": "b9b5fef0daea5b74",
|
||||
"daa": 406,
|
||||
"blue": 407,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 436,
|
||||
"sink": "b87c6327c3fc8298",
|
||||
"blue": 436,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 430.2,
|
||||
"h1": {
|
||||
"blocks": 412,
|
||||
"sink": "cd9991f248c9bf46",
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 412,
|
||||
"sink": "cd9991f248c9bf46",
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 439,
|
||||
"sink": "4c1b609fad53a391",
|
||||
"blue": 439,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 435.2,
|
||||
"h1": {
|
||||
"blocks": 417,
|
||||
"sink": "b2bb0dc00c197917",
|
||||
"daa": 416,
|
||||
"blue": 417,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 417,
|
||||
"sink": "b2bb0dc00c197917",
|
||||
"daa": 416,
|
||||
"blue": 417,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 444,
|
||||
"sink": "e382cbd3ac4dcf26",
|
||||
"blue": 444,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 440.2,
|
||||
"h1": {
|
||||
"blocks": 422,
|
||||
"sink": "b711c4c23605870d",
|
||||
"daa": 421,
|
||||
"blue": 422,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 422,
|
||||
"sink": "b711c4c23605870d",
|
||||
"daa": 421,
|
||||
"blue": 422,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 446,
|
||||
"sink": "c35dab954cd4acf4",
|
||||
"blue": 446,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 445.2,
|
||||
"h1": {
|
||||
"blocks": 428,
|
||||
"sink": "f99b9d3dbc93d6c8",
|
||||
"daa": 427,
|
||||
"blue": 428,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 428,
|
||||
"sink": "f99b9d3dbc93d6c8",
|
||||
"daa": 427,
|
||||
"blue": 428,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 449,
|
||||
"sink": "d92f53e2d140db35",
|
||||
"blue": 449,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 450.3,
|
||||
"h1": {
|
||||
"blocks": 431,
|
||||
"sink": "1e9a17dfc27a2670",
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 431,
|
||||
"sink": "1e9a17dfc27a2670",
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 456,
|
||||
"sink": "162c5de6d4f74ea9",
|
||||
"blue": 456,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 455.3,
|
||||
"h1": {
|
||||
"blocks": 438,
|
||||
"sink": "65be332f457b64e0",
|
||||
"daa": 437,
|
||||
"blue": 438,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 438,
|
||||
"sink": "65be332f457b64e0",
|
||||
"daa": 437,
|
||||
"blue": 438,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 461,
|
||||
"sink": "6b7998086b33a85d",
|
||||
"blue": 461,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 460.3,
|
||||
"h1": {
|
||||
"blocks": 446,
|
||||
"sink": "5ee05b91ff342422",
|
||||
"daa": 445,
|
||||
"blue": 446,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 446,
|
||||
"sink": "5ee05b91ff342422",
|
||||
"daa": 445,
|
||||
"blue": 446,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 468,
|
||||
"sink": "2ef3594b2514a766",
|
||||
"blue": 468,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 465.3,
|
||||
"h1": {
|
||||
"blocks": 451,
|
||||
"sink": "faad0b35cf941017",
|
||||
"daa": 450,
|
||||
"blue": 451,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 451,
|
||||
"sink": "faad0b35cf941017",
|
||||
"daa": 450,
|
||||
"blue": 451,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 471,
|
||||
"sink": "e57eb146c13fa041",
|
||||
"blue": 471,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 470.3,
|
||||
"h1": {
|
||||
"blocks": 454,
|
||||
"sink": "b5f88fdf5097139b",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 454,
|
||||
"sink": "b5f88fdf5097139b",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 479,
|
||||
"sink": "bac0a7b389fb2418",
|
||||
"blue": 479,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 475.3,
|
||||
"h1": {
|
||||
"blocks": 463,
|
||||
"sink": "e93acb17237cc9b3",
|
||||
"daa": 462,
|
||||
"blue": 463,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 463,
|
||||
"sink": "e93acb17237cc9b3",
|
||||
"daa": 462,
|
||||
"blue": 463,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 481,
|
||||
"sink": "7a533b847de36a0c",
|
||||
"blue": 481,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 480.3,
|
||||
"h1": {
|
||||
"blocks": 467,
|
||||
"sink": "ea2b7270dba4deba",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 467,
|
||||
"sink": "ea2b7270dba4deba",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 485,
|
||||
"sink": "5f36be5a27dc4f1f",
|
||||
"blue": 485,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 485.3,
|
||||
"h1": {
|
||||
"blocks": 470,
|
||||
"sink": "caab7c55e1185c44",
|
||||
"daa": 469,
|
||||
"blue": 470,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 470,
|
||||
"sink": "caab7c55e1185c44",
|
||||
"daa": 469,
|
||||
"blue": 470,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 490,
|
||||
"sink": "9b058d11e4a8a864",
|
||||
"blue": 490,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 490.4,
|
||||
"h1": {
|
||||
"blocks": 472,
|
||||
"sink": "19057874449c22ea",
|
||||
"daa": 471,
|
||||
"blue": 472,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 472,
|
||||
"sink": "19057874449c22ea",
|
||||
"daa": 471,
|
||||
"blue": 472,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 493,
|
||||
"sink": "422c79a9ec4780dd",
|
||||
"blue": 493,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 495.4,
|
||||
"h1": {
|
||||
"blocks": 475,
|
||||
"sink": "b6f0161d81faa3e9",
|
||||
"daa": 474,
|
||||
"blue": 475,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 475,
|
||||
"sink": "b6f0161d81faa3e9",
|
||||
"daa": 474,
|
||||
"blue": 475,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 497,
|
||||
"sink": "33c53267da1c7bd5",
|
||||
"blue": 497,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 500.4,
|
||||
"h1": {
|
||||
"blocks": 482,
|
||||
"sink": "6e821ff35e24b700",
|
||||
"daa": 481,
|
||||
"blue": 482,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 482,
|
||||
"sink": "6e821ff35e24b700",
|
||||
"daa": 481,
|
||||
"blue": 482,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 501,
|
||||
"sink": "6536fa666794da92",
|
||||
"blue": 501,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 505.4,
|
||||
"h1": {
|
||||
"blocks": 486,
|
||||
"sink": "bee5af11ed677228",
|
||||
"daa": 485,
|
||||
"blue": 486,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 486,
|
||||
"sink": "bee5af11ed677228",
|
||||
"daa": 485,
|
||||
"blue": 486,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 510,
|
||||
"sink": "be1419603638e1fb",
|
||||
"blue": 510,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 510.4,
|
||||
"h1": {
|
||||
"blocks": 491,
|
||||
"sink": "ed71ec00678a9e10",
|
||||
"daa": 490,
|
||||
"blue": 491,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 491,
|
||||
"sink": "ed71ec00678a9e10",
|
||||
"daa": 490,
|
||||
"blue": 491,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 515,
|
||||
"sink": "7b32f850c803ef02",
|
||||
"blue": 515,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 515.4,
|
||||
"h1": {
|
||||
"blocks": 499,
|
||||
"sink": "ed904ccbc28c9980",
|
||||
"daa": 498,
|
||||
"blue": 499,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 499,
|
||||
"sink": "ed904ccbc28c9980",
|
||||
"daa": 498,
|
||||
"blue": 499,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 519,
|
||||
"sink": "a26ebf100dcba0c2",
|
||||
"blue": 519,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 520.4,
|
||||
"h1": {
|
||||
"blocks": 503,
|
||||
"sink": "462b0c2c35c67c54",
|
||||
"daa": 502,
|
||||
"blue": 503,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 503,
|
||||
"sink": "462b0c2c35c67c54",
|
||||
"daa": 502,
|
||||
"blue": 503,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 526,
|
||||
"sink": "aaaebc1389fe11fd",
|
||||
"blue": 526,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 525.4,
|
||||
"h1": {
|
||||
"blocks": 504,
|
||||
"sink": "87f25e6a386a8165",
|
||||
"daa": 503,
|
||||
"blue": 504,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 504,
|
||||
"sink": "87f25e6a386a8165",
|
||||
"daa": 503,
|
||||
"blue": 504,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 529,
|
||||
"sink": "c096bda65c99e6f8",
|
||||
"blue": 529,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 530.4,
|
||||
"h1": {
|
||||
"blocks": 510,
|
||||
"sink": "6c5d1398a7445010",
|
||||
"daa": 509,
|
||||
"blue": 510,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 510,
|
||||
"sink": "6c5d1398a7445010",
|
||||
"daa": 509,
|
||||
"blue": 510,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 533,
|
||||
"sink": "3341a65b2b284f17",
|
||||
"blue": 533,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 535.4,
|
||||
"h1": {
|
||||
"blocks": 514,
|
||||
"sink": "0d661c0b8cc34ab8",
|
||||
"daa": 513,
|
||||
"blue": 514,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 514,
|
||||
"sink": "0d661c0b8cc34ab8",
|
||||
"daa": 513,
|
||||
"blue": 514,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 542,
|
||||
"sink": "7c3a8038df112ee7",
|
||||
"blue": 542,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 540.4,
|
||||
"h1": {
|
||||
"blocks": 525,
|
||||
"sink": "f2b83fc149654b8d",
|
||||
"daa": 524,
|
||||
"blue": 525,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 525,
|
||||
"sink": "f2b83fc149654b8d",
|
||||
"daa": 524,
|
||||
"blue": 525,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 545,
|
||||
"sink": "36e6ba6e49e7c6f2",
|
||||
"blue": 545,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 545.5,
|
||||
"h1": {
|
||||
"blocks": 533,
|
||||
"sink": "8f1d9ad77edf47d0",
|
||||
"daa": 532,
|
||||
"blue": 533,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 533,
|
||||
"sink": "8f1d9ad77edf47d0",
|
||||
"daa": 532,
|
||||
"blue": 533,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 554,
|
||||
"sink": "857f2b7d99ddcba6",
|
||||
"blue": 554,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 550.5,
|
||||
"h1": {
|
||||
"blocks": 537,
|
||||
"sink": "4cd35471c65af8ff",
|
||||
"daa": 536,
|
||||
"blue": 537,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 537,
|
||||
"sink": "4cd35471c65af8ff",
|
||||
"daa": 536,
|
||||
"blue": 537,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 560,
|
||||
"sink": "5ed4bc501713930a",
|
||||
"blue": 560,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 555.5,
|
||||
"h1": {
|
||||
"blocks": 544,
|
||||
"sink": "1174f796fda59e3e",
|
||||
"daa": 543,
|
||||
"blue": 544,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 544,
|
||||
"sink": "1174f796fda59e3e",
|
||||
"daa": 543,
|
||||
"blue": 544,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 565,
|
||||
"sink": "f7d136350536fa6b",
|
||||
"blue": 565,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 560.5,
|
||||
"h1": {
|
||||
"blocks": 548,
|
||||
"sink": "f6ed678d1b0a96f8",
|
||||
"daa": 547,
|
||||
"blue": 548,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 548,
|
||||
"sink": "f6ed678d1b0a96f8",
|
||||
"daa": 547,
|
||||
"blue": 548,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 568,
|
||||
"sink": "37ac0328bf8f53e4",
|
||||
"blue": 568,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 565.5,
|
||||
"h1": {
|
||||
"blocks": 556,
|
||||
"sink": "86f4c28c6ba82275",
|
||||
"daa": 555,
|
||||
"blue": 556,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 556,
|
||||
"sink": "86f4c28c6ba82275",
|
||||
"daa": 555,
|
||||
"blue": 556,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 572,
|
||||
"sink": "9d9ec576b2742464",
|
||||
"blue": 572,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 570.5,
|
||||
"h1": {
|
||||
"blocks": 560,
|
||||
"sink": "3210de1f85cbfc76",
|
||||
"daa": 559,
|
||||
"blue": 560,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 560,
|
||||
"sink": "3210de1f85cbfc76",
|
||||
"daa": 559,
|
||||
"blue": 560,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 574,
|
||||
"sink": "3496b576346db4bb",
|
||||
"blue": 574,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 2,
|
||||
"ports": {
|
||||
"base": 30770,
|
||||
"suffix": 982
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
12:48:26.709 fg2 case attack-gate-on-expect-hold: mode attack, gate on (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 0), expect hold
|
||||
12:48:28.273 fg2 h1 up pid 480230 json 30772 p2p 30771
|
||||
12:48:29.784 fg2 h2 up pid 481529 json 30782 p2p 30781 addpeer 30771
|
||||
12:48:31.299 fg2 b up pid 482751 json 30792 p2p 30791 addpeer 30801,30802
|
||||
12:52:34.314 fg2 phase 1 done at 240.0 s: H1 234 blocks sink 7ed68743 daa 233; H2 234 sink 7ed68743; side 2 (b) 234 sink 7ed68743; keys H1 8da9ddee H2 eda9cde4 side2 fresh (none yet)
|
||||
12:52:34.371 fg2 weight at the fork (last 121 blue blocks of H1's chain): side 2 0, others 121, side 2 0 bps
|
||||
12:52:34.375 fg2 links cut at 240.1 s; side 2 (b) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:34.483 fg2 phase 2 done at 420.2 s: H1 396 blocks sink 036cfe56 daa 395 blue 396 work 14807915; side 2 431 sink abb93c23 daa 430 blue 431 work 20297242 (side 2 heavier: true); fork depth 197 DAA against window 60
|
||||
12:55:34.484 fg2 links restored at 420.2 s; watching H1 and H2 for 150 s
|
||||
12:56:04.568 fg2 t=450.3 s H1 431 blocks sink 1e9a17df held; H2 431 blocks sink 1e9a17df held; side 2 456 blocks sink 162c5de6
|
||||
12:56:34.640 fg2 t=480.3 s H1 467 blocks sink ea2b7270 held; H2 467 blocks sink ea2b7270 held; side 2 485 blocks sink 5f36be5a
|
||||
12:57:04.717 fg2 t=510.4 s H1 491 blocks sink ed71ec00 held; H2 491 blocks sink ed71ec00 held; side 2 515 blocks sink 7b32f850
|
||||
12:57:34.757 fg2 t=540.5 s H1 525 blocks sink f2b83fc1 held; H2 525 blocks sink f2b83fc1 held; side 2 545 blocks sink 36e6ba6e
|
||||
12:58:04.809 fg2 t=570.5 s H1 560 blocks sink 3210de1f held; H2 560 blocks sink 3210de1f held; side 2 574 blocks sink 3496b576
|
||||
12:58:04.822 fg2 SUMMARY PASS (attack-gate-on-expect-hold): side 2 held 0 bps of the blue blocks at the fork; fork depth 197 DAA against window 60; side 2 blue work 20297242 against H1 14807915 at the heal; H1 held (177 refusal lines, knows side 2's tip: true); H2 held (177 refusal lines, knows side 2's tip: true); side 2 kept its chain: true
|
||||
12:58:04.822 fg2 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-on-expect-hold.json
|
||||
|
|
@ -0,0 +1,653 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "partition-gate-off-expect-reorg",
|
||||
"mode": "partition",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 1
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": null,
|
||||
"side2": "eda9cde4…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 67,
|
||||
"others": 53,
|
||||
"side2_bps": 5583
|
||||
},
|
||||
"fork_daa": 244,
|
||||
"fork_depth_daa_at_heal": 191,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "a27a341c694aacf22b1a78f44d433e4104f58b23533afb73b7ee6fb9aa37afe4",
|
||||
"blocks": 405,
|
||||
"daa": 404,
|
||||
"blue": 405,
|
||||
"blueWork": "12270631",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "f9181a06c0db716fe4ed200f6f0046c9cb8fae2eb57dd7da4697a268c434a232",
|
||||
"blocks": 436,
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"blueWork": "19576159",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "f9181a06c0db716fe4ed200f6f0046c9cb8fae2eb57dd7da4697a268c434a232",
|
||||
"blocks": 436,
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"blueWork": "19576159",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 507.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"samples": [
|
||||
{
|
||||
"t": 427.2,
|
||||
"h1": {
|
||||
"blocks": 411,
|
||||
"sink": "d783538ac11687a9",
|
||||
"daa": 410,
|
||||
"blue": 411,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 439,
|
||||
"sink": "aa3da0091db61498",
|
||||
"blue": 439,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 432.2,
|
||||
"h1": {
|
||||
"blocks": 416,
|
||||
"sink": "5084ccaac5b21e34",
|
||||
"daa": 415,
|
||||
"blue": 416,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 448,
|
||||
"sink": "c98585f0a1f24913",
|
||||
"blue": 448,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 437.2,
|
||||
"h1": {
|
||||
"blocks": 421,
|
||||
"sink": "950f8b1c7d4cac21",
|
||||
"daa": 420,
|
||||
"blue": 421,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 452,
|
||||
"sink": "c4ad3925b38e9285",
|
||||
"blue": 452,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 442.2,
|
||||
"h1": {
|
||||
"blocks": 424,
|
||||
"sink": "767cbc91083a48b0",
|
||||
"daa": 423,
|
||||
"blue": 424,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 455,
|
||||
"sink": "c91b500a6d256eb3",
|
||||
"blue": 455,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 447.3,
|
||||
"h1": {
|
||||
"blocks": 429,
|
||||
"sink": "d36268f977a04b6a",
|
||||
"daa": 428,
|
||||
"blue": 429,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 465,
|
||||
"sink": "c5a91c0c5352b0d6",
|
||||
"blue": 465,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 452.3,
|
||||
"h1": {
|
||||
"blocks": 438,
|
||||
"sink": "a7ecf244074b481d",
|
||||
"daa": 437,
|
||||
"blue": 438,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 468,
|
||||
"sink": "cd8cfb427f0c78e4",
|
||||
"blue": 468,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 457.3,
|
||||
"h1": {
|
||||
"blocks": 441,
|
||||
"sink": "29f8733c4ec6fa4b",
|
||||
"daa": 440,
|
||||
"blue": 441,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 473,
|
||||
"sink": "277bfdb7682804f9",
|
||||
"blue": 473,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 462.3,
|
||||
"h1": {
|
||||
"blocks": 451,
|
||||
"sink": "ae072b1106d34635",
|
||||
"daa": 450,
|
||||
"blue": 451,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 476,
|
||||
"sink": "d0f88a7c220ff170",
|
||||
"blue": 476,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 467.3,
|
||||
"h1": {
|
||||
"blocks": 458,
|
||||
"sink": "9fcfa1edabf60dd7",
|
||||
"daa": 457,
|
||||
"blue": 458,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 486,
|
||||
"sink": "9f66b943e3b972b7",
|
||||
"blue": 486,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 472.3,
|
||||
"h1": {
|
||||
"blocks": 462,
|
||||
"sink": "8dcef0d603690a6e",
|
||||
"daa": 461,
|
||||
"blue": 462,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 493,
|
||||
"sink": "a70a07e96280ab1e",
|
||||
"blue": 493,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 477.3,
|
||||
"h1": {
|
||||
"blocks": 464,
|
||||
"sink": "c6dceb1dfe662639",
|
||||
"daa": 463,
|
||||
"blue": 464,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 495,
|
||||
"sink": "1b6074e848285a01",
|
||||
"blue": 495,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 482.4,
|
||||
"h1": {
|
||||
"blocks": 468,
|
||||
"sink": "97b7a7a0a8248207",
|
||||
"daa": 467,
|
||||
"blue": 468,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 500,
|
||||
"sink": "a4045188d0e6fb97",
|
||||
"blue": 500,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 487.4,
|
||||
"h1": {
|
||||
"blocks": 472,
|
||||
"sink": "2326f1a0ffea21d8",
|
||||
"daa": 471,
|
||||
"blue": 472,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 504,
|
||||
"sink": "813c0c0f3fe0d62b",
|
||||
"blue": 504,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 492.4,
|
||||
"h1": {
|
||||
"blocks": 476,
|
||||
"sink": "2e8644b1907a9120",
|
||||
"daa": 475,
|
||||
"blue": 476,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 508,
|
||||
"sink": "9345acb132973ee6",
|
||||
"blue": 508,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 497.4,
|
||||
"h1": {
|
||||
"blocks": 481,
|
||||
"sink": "04a443536671ab8f",
|
||||
"daa": 480,
|
||||
"blue": 481,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 512,
|
||||
"sink": "0db73c40f531667d",
|
||||
"blue": 512,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 502.4,
|
||||
"h1": {
|
||||
"blocks": 487,
|
||||
"sink": "9afd673d306dc43c",
|
||||
"daa": 486,
|
||||
"blue": 487,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 519,
|
||||
"sink": "e749191f14932323",
|
||||
"blue": 519,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 507.4,
|
||||
"h1": {
|
||||
"blocks": 527,
|
||||
"sink": "afed1d222ea7304d",
|
||||
"daa": 526,
|
||||
"blue": 527,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 527,
|
||||
"sink": "afed1d222ea7304d",
|
||||
"blue": 527,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 512.4,
|
||||
"h1": {
|
||||
"blocks": 538,
|
||||
"sink": "54deb8450401f863",
|
||||
"daa": 537,
|
||||
"blue": 538,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 538,
|
||||
"sink": "54deb8450401f863",
|
||||
"blue": 538,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 517.4,
|
||||
"h1": {
|
||||
"blocks": 543,
|
||||
"sink": "089737446a988ecf",
|
||||
"daa": 542,
|
||||
"blue": 543,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 543,
|
||||
"sink": "089737446a988ecf",
|
||||
"blue": 543,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 522.4,
|
||||
"h1": {
|
||||
"blocks": 547,
|
||||
"sink": "fddba72379711067",
|
||||
"daa": 546,
|
||||
"blue": 547,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 547,
|
||||
"sink": "fddba72379711067",
|
||||
"blue": 547,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 527.4,
|
||||
"h1": {
|
||||
"blocks": 553,
|
||||
"sink": "d090e72490be6b7a",
|
||||
"daa": 552,
|
||||
"blue": 553,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 553,
|
||||
"sink": "d090e72490be6b7a",
|
||||
"blue": 553,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 532.4,
|
||||
"h1": {
|
||||
"blocks": 561,
|
||||
"sink": "1caf40533f6a2857",
|
||||
"daa": 560,
|
||||
"blue": 561,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 561,
|
||||
"sink": "1caf40533f6a2857",
|
||||
"blue": 561,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 537.4,
|
||||
"h1": {
|
||||
"blocks": 573,
|
||||
"sink": "e5b85c33b2b6aa09",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 573,
|
||||
"sink": "e5b85c33b2b6aa09",
|
||||
"blue": 573,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 542.4,
|
||||
"h1": {
|
||||
"blocks": 578,
|
||||
"sink": "317e329b8505cf1e",
|
||||
"daa": 577,
|
||||
"blue": 578,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 578,
|
||||
"sink": "317e329b8505cf1e",
|
||||
"blue": 578,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 547.5,
|
||||
"h1": {
|
||||
"blocks": 581,
|
||||
"sink": "e19cd0330c3cdf25",
|
||||
"daa": 580,
|
||||
"blue": 581,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 581,
|
||||
"sink": "e19cd0330c3cdf25",
|
||||
"blue": 581,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 552.5,
|
||||
"h1": {
|
||||
"blocks": 586,
|
||||
"sink": "38f228d7ffc3d0c1",
|
||||
"daa": 585,
|
||||
"blue": 586,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 586,
|
||||
"sink": "38f228d7ffc3d0c1",
|
||||
"blue": 586,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 557.5,
|
||||
"h1": {
|
||||
"blocks": 592,
|
||||
"sink": "ae515bf3d13e4865",
|
||||
"daa": 591,
|
||||
"blue": 592,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 592,
|
||||
"sink": "ae515bf3d13e4865",
|
||||
"blue": 592,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 562.5,
|
||||
"h1": {
|
||||
"blocks": 595,
|
||||
"sink": "eeade53e9149c05a",
|
||||
"daa": 594,
|
||||
"blue": 595,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 595,
|
||||
"sink": "eeade53e9149c05a",
|
||||
"blue": 595,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 567.5,
|
||||
"h1": {
|
||||
"blocks": 597,
|
||||
"sink": "a939e8caebf875d6",
|
||||
"daa": 596,
|
||||
"blue": 597,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 597,
|
||||
"sink": "a939e8caebf875d6",
|
||||
"blue": 597,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 572.5,
|
||||
"h1": {
|
||||
"blocks": 605,
|
||||
"sink": "1e585f80dc1050fa",
|
||||
"daa": 604,
|
||||
"blue": 605,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 605,
|
||||
"sink": "1e585f80dc1050fa",
|
||||
"blue": 605,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 5,
|
||||
"ports": {
|
||||
"base": 30890,
|
||||
"suffix": 985
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
12:48:26.732 fg5 case partition-gate-off-expect-reorg: mode partition, gate off (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 1), expect reorg
|
||||
12:48:28.310 fg5 h1 up pid 480280 json 30892 p2p 30891
|
||||
12:48:29.828 fg5 h2 up pid 481840 json 30902 p2p 30901 addpeer 30921
|
||||
12:52:32.849 fg5 phase 1 done at 240.0 s: H1 245 blocks sink 58126c35 daa 244; H2 245 sink 58126c35; side 2 (h2) 245 sink 58126c35; keys H1 8da9ddee H2 undefined side2 eda9cde4
|
||||
12:52:32.909 fg5 weight at the fork (last 120 blue blocks of H1's chain): side 2 67, others 53, side 2 5583 bps
|
||||
12:52:34.922 fg5 links cut at 242.1 s; side 2 (h2) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:35.025 fg5 phase 2 done at 422.2 s: H1 405 blocks sink a27a341c daa 404 blue 405 work 12270631; side 2 436 sink f9181a06 daa 435 blue 436 work 19576159 (side 2 heavier: true); fork depth 191 DAA against window 60
|
||||
12:55:35.026 fg5 links restored at 422.2 s; watching H1 for 150 s
|
||||
12:56:05.117 fg5 t=452.3 s H1 438 blocks sink a7ecf244 held; side 2 468 blocks sink cd8cfb42
|
||||
12:56:35.193 fg5 t=482.4 s H1 468 blocks sink 97b7a7a0 held; side 2 500 blocks sink a4045188
|
||||
12:57:00.247 fg5 H1 left its pre-cut chain at 507.4 s: sink afed1d222ea7304d by eda9cde4
|
||||
12:57:05.255 fg5 t=512.4 s H1 538 blocks sink 54deb845 REORGED; side 2 538 blocks sink 54deb845
|
||||
12:57:35.285 fg5 t=542.5 s H1 578 blocks sink 317e329b REORGED; side 2 578 blocks sink 317e329b
|
||||
12:58:05.313 fg5 t=572.5 s H1 605 blocks sink 1e585f80 REORGED; side 2 605 blocks sink 1e585f80
|
||||
12:58:05.317 fg5 SUMMARY PASS (partition-gate-off-expect-reorg): side 2 held 5583 bps of the blue blocks at the fork; fork depth 191 DAA against window 60; side 2 blue work 19576159 against H1 12270631 at the heal; H1 reorged at 507.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true
|
||||
12:58:05.318 fg5 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-partition-gate-off-expect-reorg.json
|
||||
|
|
@ -0,0 +1,653 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "partition-gate-on-expect-reorg",
|
||||
"mode": "partition",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 1
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": null,
|
||||
"side2": "eda9cde4…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 45,
|
||||
"others": 76,
|
||||
"side2_bps": 3719
|
||||
},
|
||||
"fork_daa": 245,
|
||||
"fork_depth_daa_at_heal": 194,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "753507c15705f4ea8ed19bc2697a11c489a052a45f28c64f9ac3d8400fa66647",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "11490863",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "32b7c1757fa288eed0a8ab709e49fd86f72be531db19c58e63d0aeca7a34c4f6",
|
||||
"blocks": 440,
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"blueWork": "18089683",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "32b7c1757fa288eed0a8ab709e49fd86f72be531db19c58e63d0aeca7a34c4f6",
|
||||
"blocks": 440,
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"blueWork": "18089683",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 507.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"samples": [
|
||||
{
|
||||
"t": 427.2,
|
||||
"h1": {
|
||||
"blocks": 420,
|
||||
"sink": "3c08068c8a93e490",
|
||||
"daa": 419,
|
||||
"blue": 420,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 443,
|
||||
"sink": "5058df4580954747",
|
||||
"blue": 443,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 432.2,
|
||||
"h1": {
|
||||
"blocks": 424,
|
||||
"sink": "de896377901e94a8",
|
||||
"daa": 423,
|
||||
"blue": 424,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 455,
|
||||
"sink": "a07d00aee9d3376d",
|
||||
"blue": 455,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 437.2,
|
||||
"h1": {
|
||||
"blocks": 435,
|
||||
"sink": "eaff2cb616a46c0e",
|
||||
"daa": 434,
|
||||
"blue": 435,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 461,
|
||||
"sink": "4783198d038613db",
|
||||
"blue": 461,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 442.2,
|
||||
"h1": {
|
||||
"blocks": 439,
|
||||
"sink": "103fa3b3ea629ad7",
|
||||
"daa": 438,
|
||||
"blue": 439,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 465,
|
||||
"sink": "91ba868ec4f84eef",
|
||||
"blue": 465,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 447.3,
|
||||
"h1": {
|
||||
"blocks": 448,
|
||||
"sink": "8437327aa78561ba",
|
||||
"daa": 447,
|
||||
"blue": 448,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 474,
|
||||
"sink": "bb9ac90349a213e3",
|
||||
"blue": 474,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 452.3,
|
||||
"h1": {
|
||||
"blocks": 450,
|
||||
"sink": "03bd0f5a924e03ee",
|
||||
"daa": 449,
|
||||
"blue": 450,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 478,
|
||||
"sink": "eca80f2c1a2106d5",
|
||||
"blue": 478,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 457.3,
|
||||
"h1": {
|
||||
"blocks": 461,
|
||||
"sink": "3fc505f8af71ea5f",
|
||||
"daa": 460,
|
||||
"blue": 461,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 481,
|
||||
"sink": "017216a3976533dd",
|
||||
"blue": 481,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 462.3,
|
||||
"h1": {
|
||||
"blocks": 463,
|
||||
"sink": "a1b1d645d944446d",
|
||||
"daa": 462,
|
||||
"blue": 463,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 488,
|
||||
"sink": "3ade2bb97b8e7548",
|
||||
"blue": 488,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 467.3,
|
||||
"h1": {
|
||||
"blocks": 466,
|
||||
"sink": "5b046e8c04baa74e",
|
||||
"daa": 465,
|
||||
"blue": 466,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 494,
|
||||
"sink": "179ad98b8bcc4ea5",
|
||||
"blue": 494,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 472.3,
|
||||
"h1": {
|
||||
"blocks": 470,
|
||||
"sink": "aaf64f90ccac9c8a",
|
||||
"daa": 469,
|
||||
"blue": 470,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 498,
|
||||
"sink": "1970740c1d9b0f6c",
|
||||
"blue": 498,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 477.3,
|
||||
"h1": {
|
||||
"blocks": 473,
|
||||
"sink": "b557fc4c16174c35",
|
||||
"daa": 472,
|
||||
"blue": 473,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 506,
|
||||
"sink": "078df046b3a9953f",
|
||||
"blue": 506,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 482.3,
|
||||
"h1": {
|
||||
"blocks": 480,
|
||||
"sink": "7d7d5f6734e2c727",
|
||||
"daa": 479,
|
||||
"blue": 480,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 510,
|
||||
"sink": "9e0f40b6766308e8",
|
||||
"blue": 510,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 487.4,
|
||||
"h1": {
|
||||
"blocks": 485,
|
||||
"sink": "6d3ff10f4556a1ca",
|
||||
"daa": 484,
|
||||
"blue": 485,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 512,
|
||||
"sink": "aecf9f8ea6485764",
|
||||
"blue": 512,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 492.4,
|
||||
"h1": {
|
||||
"blocks": 489,
|
||||
"sink": "1196cd92a2989963",
|
||||
"daa": 488,
|
||||
"blue": 489,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 518,
|
||||
"sink": "0a3a90068c2d74c0",
|
||||
"blue": 518,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 497.4,
|
||||
"h1": {
|
||||
"blocks": 494,
|
||||
"sink": "27ca83564fbe47ce",
|
||||
"daa": 493,
|
||||
"blue": 494,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 524,
|
||||
"sink": "42b2b2dc9f1e4be2",
|
||||
"blue": 524,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 502.4,
|
||||
"h1": {
|
||||
"blocks": 498,
|
||||
"sink": "3f2c6e34b36b890e",
|
||||
"daa": 497,
|
||||
"blue": 498,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 531,
|
||||
"sink": "d19320eebc86c66d",
|
||||
"blue": 531,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 507.4,
|
||||
"h1": {
|
||||
"blocks": 535,
|
||||
"sink": "126029df2f9caa4a",
|
||||
"daa": 534,
|
||||
"blue": 535,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 535,
|
||||
"sink": "126029df2f9caa4a",
|
||||
"blue": 535,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 512.4,
|
||||
"h1": {
|
||||
"blocks": 543,
|
||||
"sink": "533898421902f564",
|
||||
"daa": 542,
|
||||
"blue": 543,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 543,
|
||||
"sink": "533898421902f564",
|
||||
"blue": 543,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 517.4,
|
||||
"h1": {
|
||||
"blocks": 546,
|
||||
"sink": "85a43553233cf34b",
|
||||
"daa": 545,
|
||||
"blue": 546,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 546,
|
||||
"sink": "85a43553233cf34b",
|
||||
"blue": 546,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 522.4,
|
||||
"h1": {
|
||||
"blocks": 554,
|
||||
"sink": "bed61271f9a8252d",
|
||||
"daa": 553,
|
||||
"blue": 554,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 554,
|
||||
"sink": "bed61271f9a8252d",
|
||||
"blue": 554,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 527.4,
|
||||
"h1": {
|
||||
"blocks": 560,
|
||||
"sink": "9e91960a30057229",
|
||||
"daa": 559,
|
||||
"blue": 560,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 560,
|
||||
"sink": "9e91960a30057229",
|
||||
"blue": 560,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 532.4,
|
||||
"h1": {
|
||||
"blocks": 564,
|
||||
"sink": "cd6d1240dc30d2e4",
|
||||
"daa": 563,
|
||||
"blue": 564,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 564,
|
||||
"sink": "cd6d1240dc30d2e4",
|
||||
"blue": 564,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 537.4,
|
||||
"h1": {
|
||||
"blocks": 570,
|
||||
"sink": "0208b9cbd8adfa78",
|
||||
"daa": 569,
|
||||
"blue": 570,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 570,
|
||||
"sink": "0208b9cbd8adfa78",
|
||||
"blue": 570,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 542.4,
|
||||
"h1": {
|
||||
"blocks": 573,
|
||||
"sink": "627692d65f09e879",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 573,
|
||||
"sink": "627692d65f09e879",
|
||||
"blue": 573,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 547.5,
|
||||
"h1": {
|
||||
"blocks": 576,
|
||||
"sink": "84b34763f034804b",
|
||||
"daa": 575,
|
||||
"blue": 576,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 576,
|
||||
"sink": "84b34763f034804b",
|
||||
"blue": 576,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 552.5,
|
||||
"h1": {
|
||||
"blocks": 580,
|
||||
"sink": "4ce7dce8da22296a",
|
||||
"daa": 579,
|
||||
"blue": 580,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 580,
|
||||
"sink": "4ce7dce8da22296a",
|
||||
"blue": 580,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 557.5,
|
||||
"h1": {
|
||||
"blocks": 585,
|
||||
"sink": "f8c7fb1089532dde",
|
||||
"daa": 584,
|
||||
"blue": 585,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 585,
|
||||
"sink": "f8c7fb1089532dde",
|
||||
"blue": 585,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 562.5,
|
||||
"h1": {
|
||||
"blocks": 590,
|
||||
"sink": "07d408946584e422",
|
||||
"daa": 589,
|
||||
"blue": 590,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 590,
|
||||
"sink": "07d408946584e422",
|
||||
"blue": 590,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 567.5,
|
||||
"h1": {
|
||||
"blocks": 598,
|
||||
"sink": "3ffc006b66a221b9",
|
||||
"daa": 597,
|
||||
"blue": 598,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 598,
|
||||
"sink": "3ffc006b66a221b9",
|
||||
"blue": 598,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 572.5,
|
||||
"h1": {
|
||||
"blocks": 602,
|
||||
"sink": "b3827232c44b06d2",
|
||||
"daa": 601,
|
||||
"blue": 602,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 602,
|
||||
"sink": "b3827232c44b06d2",
|
||||
"blue": 602,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 4,
|
||||
"ports": {
|
||||
"base": 30850,
|
||||
"suffix": 984
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
12:48:26.723 fg4 case partition-gate-on-expect-reorg: mode partition, gate on (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 1), expect reorg
|
||||
12:48:28.322 fg4 h1 up pid 480248 json 30852 p2p 30851
|
||||
12:48:29.844 fg4 h2 up pid 481994 json 30862 p2p 30861 addpeer 30881
|
||||
12:52:32.858 fg4 phase 1 done at 240.0 s: H1 246 blocks sink 5c4cb584 daa 245; H2 246 sink 5c4cb584; side 2 (h2) 246 sink 5c4cb584; keys H1 8da9ddee H2 undefined side2 eda9cde4
|
||||
12:52:32.918 fg4 weight at the fork (last 121 blue blocks of H1's chain): side 2 45, others 76, side 2 3719 bps
|
||||
12:52:34.929 fg4 links cut at 242.1 s; side 2 (h2) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:35.033 fg4 phase 2 done at 422.2 s: H1 412 blocks sink 753507c1 daa 411 blue 412 work 11490863; side 2 440 sink 32b7c175 daa 439 blue 440 work 18089683 (side 2 heavier: true); fork depth 194 DAA against window 60
|
||||
12:55:35.035 fg4 links restored at 422.2 s; watching H1 for 150 s
|
||||
12:56:05.124 fg4 t=452.3 s H1 450 blocks sink 03bd0f5a held; side 2 478 blocks sink eca80f2c
|
||||
12:56:35.198 fg4 t=482.4 s H1 480 blocks sink 7d7d5f67 held; side 2 510 blocks sink 9e0f40b6
|
||||
12:57:00.246 fg4 H1 left its pre-cut chain at 507.4 s: sink 126029df2f9caa4a by eda9cde4
|
||||
12:57:05.255 fg4 t=512.4 s H1 543 blocks sink 53389842 REORGED; side 2 543 blocks sink 53389842
|
||||
12:57:35.298 fg4 t=542.5 s H1 573 blocks sink 627692d6 REORGED; side 2 573 blocks sink 627692d6
|
||||
12:58:05.330 fg4 t=572.5 s H1 602 blocks sink b3827232 REORGED; side 2 602 blocks sink b3827232
|
||||
12:58:05.334 fg4 SUMMARY PASS (partition-gate-on-expect-reorg): side 2 held 3719 bps of the blue blocks at the fork; fork depth 194 DAA against window 60; side 2 blue work 18089683 against H1 11490863 at the heal; H1 reorged at 507.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true
|
||||
12:58:05.334 fg4 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-partition-gate-on-expect-reorg.json
|
||||
|
|
@ -0,0 +1,930 @@
|
|||
{
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "third-gate-on-expect-reorg",
|
||||
"mode": "third",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 2
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 72,
|
||||
"others": 48,
|
||||
"side2_bps": 6000
|
||||
},
|
||||
"fork_daa": 268,
|
||||
"fork_depth_daa_at_heal": 166,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "06f666ba3c449f2fab804e75612a00c748a8d56568806c30a7006aae175bb27d",
|
||||
"blocks": 426,
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"blueWork": "24628833",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "06f666ba3c449f2fab804e75612a00c748a8d56568806c30a7006aae175bb27d",
|
||||
"blocks": 426,
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"blueWork": "24628833",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "71396cf73521295ad0fbeb320de980989ea0788dbc859129d8972a9e091e0a3c",
|
||||
"blocks": 435,
|
||||
"daa": 434,
|
||||
"blue": 435,
|
||||
"blueWork": "28969222",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 477.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 477.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"samples": [
|
||||
{
|
||||
"t": 427.2,
|
||||
"h1": {
|
||||
"blocks": 431,
|
||||
"sink": "9a61020b8d49143a",
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 431,
|
||||
"sink": "9a61020b8d49143a",
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 441,
|
||||
"sink": "05e6f9d4ef677d31",
|
||||
"blue": 441,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 432.2,
|
||||
"h1": {
|
||||
"blocks": 439,
|
||||
"sink": "a4130e66a3d4a3df",
|
||||
"daa": 438,
|
||||
"blue": 439,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 439,
|
||||
"sink": "a4130e66a3d4a3df",
|
||||
"daa": 438,
|
||||
"blue": 439,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 449,
|
||||
"sink": "f7d08aee6cf90b41",
|
||||
"blue": 449,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 437.2,
|
||||
"h1": {
|
||||
"blocks": 442,
|
||||
"sink": "e1cc039c584559d7",
|
||||
"daa": 441,
|
||||
"blue": 442,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 442,
|
||||
"sink": "e1cc039c584559d7",
|
||||
"daa": 441,
|
||||
"blue": 442,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 455,
|
||||
"sink": "fa56a0ac4e5fb99c",
|
||||
"blue": 455,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 442.2,
|
||||
"h1": {
|
||||
"blocks": 444,
|
||||
"sink": "6904c2a75c7344fe",
|
||||
"daa": 443,
|
||||
"blue": 444,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 444,
|
||||
"sink": "6904c2a75c7344fe",
|
||||
"daa": 443,
|
||||
"blue": 444,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 459,
|
||||
"sink": "04b09f8a190c4051",
|
||||
"blue": 459,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 447.2,
|
||||
"h1": {
|
||||
"blocks": 449,
|
||||
"sink": "d55f8f3f03247788",
|
||||
"daa": 448,
|
||||
"blue": 449,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 449,
|
||||
"sink": "d55f8f3f03247788",
|
||||
"daa": 448,
|
||||
"blue": 449,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 462,
|
||||
"sink": "a6fa74e0833a3e0c",
|
||||
"blue": 462,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 452.2,
|
||||
"h1": {
|
||||
"blocks": 454,
|
||||
"sink": "feb2905b292ab9c7",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 454,
|
||||
"sink": "feb2905b292ab9c7",
|
||||
"daa": 453,
|
||||
"blue": 454,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 464,
|
||||
"sink": "093014496d558f65",
|
||||
"blue": 464,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 457.3,
|
||||
"h1": {
|
||||
"blocks": 462,
|
||||
"sink": "b10ed98591f50ec6",
|
||||
"daa": 461,
|
||||
"blue": 462,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 462,
|
||||
"sink": "b10ed98591f50ec6",
|
||||
"daa": 461,
|
||||
"blue": 462,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 469,
|
||||
"sink": "7a00df10d8b78e18",
|
||||
"blue": 469,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 462.3,
|
||||
"h1": {
|
||||
"blocks": 467,
|
||||
"sink": "ebf8c4bd560f2ccf",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 467,
|
||||
"sink": "ebf8c4bd560f2ccf",
|
||||
"daa": 466,
|
||||
"blue": 467,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 474,
|
||||
"sink": "ade976380c06a8d8",
|
||||
"blue": 474,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 467.3,
|
||||
"h1": {
|
||||
"blocks": 471,
|
||||
"sink": "311bf74ecfb1cb33",
|
||||
"daa": 470,
|
||||
"blue": 471,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 471,
|
||||
"sink": "311bf74ecfb1cb33",
|
||||
"daa": 470,
|
||||
"blue": 471,
|
||||
"key": "8da9ddee",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 482,
|
||||
"sink": "a1dc4abe41431122",
|
||||
"blue": 482,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 472.3,
|
||||
"h1": {
|
||||
"blocks": 476,
|
||||
"sink": "0fc8726976801d2b",
|
||||
"daa": 475,
|
||||
"blue": 476,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 476,
|
||||
"sink": "0fc8726976801d2b",
|
||||
"daa": 475,
|
||||
"blue": 476,
|
||||
"key": "eda9cde4",
|
||||
"reorged": false,
|
||||
"knows_side2_tip": false
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 487,
|
||||
"sink": "c2c737c0d473f009",
|
||||
"blue": 487,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 477.3,
|
||||
"h1": {
|
||||
"blocks": 492,
|
||||
"sink": "df2ecca49796b69c",
|
||||
"daa": 491,
|
||||
"blue": 492,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 492,
|
||||
"sink": "df2ecca49796b69c",
|
||||
"daa": 491,
|
||||
"blue": 492,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 492,
|
||||
"sink": "df2ecca49796b69c",
|
||||
"blue": 492,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 482.3,
|
||||
"h1": {
|
||||
"blocks": 498,
|
||||
"sink": "33ab64dbbd41433e",
|
||||
"daa": 497,
|
||||
"blue": 498,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 498,
|
||||
"sink": "33ab64dbbd41433e",
|
||||
"daa": 497,
|
||||
"blue": 498,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 498,
|
||||
"sink": "33ab64dbbd41433e",
|
||||
"blue": 498,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 487.3,
|
||||
"h1": {
|
||||
"blocks": 506,
|
||||
"sink": "4fa4f31a124990c1",
|
||||
"daa": 505,
|
||||
"blue": 506,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 506,
|
||||
"sink": "4fa4f31a124990c1",
|
||||
"daa": 505,
|
||||
"blue": 506,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 506,
|
||||
"sink": "4fa4f31a124990c1",
|
||||
"blue": 506,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 492.3,
|
||||
"h1": {
|
||||
"blocks": 510,
|
||||
"sink": "4121ec5f7e04b3a2",
|
||||
"daa": 509,
|
||||
"blue": 510,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 510,
|
||||
"sink": "4121ec5f7e04b3a2",
|
||||
"daa": 509,
|
||||
"blue": 510,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 510,
|
||||
"sink": "4121ec5f7e04b3a2",
|
||||
"blue": 510,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 497.3,
|
||||
"h1": {
|
||||
"blocks": 518,
|
||||
"sink": "217d584ac3d48f32",
|
||||
"daa": 517,
|
||||
"blue": 518,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 518,
|
||||
"sink": "217d584ac3d48f32",
|
||||
"daa": 517,
|
||||
"blue": 518,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 518,
|
||||
"sink": "217d584ac3d48f32",
|
||||
"blue": 518,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 502.3,
|
||||
"h1": {
|
||||
"blocks": 527,
|
||||
"sink": "d14ed2e5f11c7df7",
|
||||
"daa": 526,
|
||||
"blue": 527,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 527,
|
||||
"sink": "d14ed2e5f11c7df7",
|
||||
"daa": 526,
|
||||
"blue": 527,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 527,
|
||||
"sink": "d14ed2e5f11c7df7",
|
||||
"blue": 527,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 507.3,
|
||||
"h1": {
|
||||
"blocks": 533,
|
||||
"sink": "23cf4405d058110e",
|
||||
"daa": 532,
|
||||
"blue": 533,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 533,
|
||||
"sink": "23cf4405d058110e",
|
||||
"daa": 532,
|
||||
"blue": 533,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 533,
|
||||
"sink": "23cf4405d058110e",
|
||||
"blue": 533,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 512.4,
|
||||
"h1": {
|
||||
"blocks": 537,
|
||||
"sink": "ec6ff75c8617a6c0",
|
||||
"daa": 535,
|
||||
"blue": 536,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 537,
|
||||
"sink": "ec6ff75c8617a6c0",
|
||||
"daa": 535,
|
||||
"blue": 536,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 537,
|
||||
"sink": "ec6ff75c8617a6c0",
|
||||
"blue": 536,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 517.4,
|
||||
"h1": {
|
||||
"blocks": 542,
|
||||
"sink": "53152f1d8342a7ba",
|
||||
"daa": 541,
|
||||
"blue": 542,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 542,
|
||||
"sink": "53152f1d8342a7ba",
|
||||
"daa": 541,
|
||||
"blue": 542,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 542,
|
||||
"sink": "53152f1d8342a7ba",
|
||||
"blue": 542,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 522.4,
|
||||
"h1": {
|
||||
"blocks": 548,
|
||||
"sink": "1425827f8f967320",
|
||||
"daa": 547,
|
||||
"blue": 548,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 548,
|
||||
"sink": "1425827f8f967320",
|
||||
"daa": 547,
|
||||
"blue": 548,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 548,
|
||||
"sink": "1425827f8f967320",
|
||||
"blue": 548,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 527.4,
|
||||
"h1": {
|
||||
"blocks": 554,
|
||||
"sink": "12bc21c9e6549a42",
|
||||
"daa": 553,
|
||||
"blue": 554,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 554,
|
||||
"sink": "12bc21c9e6549a42",
|
||||
"daa": 553,
|
||||
"blue": 554,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 554,
|
||||
"sink": "12bc21c9e6549a42",
|
||||
"blue": 554,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 532.4,
|
||||
"h1": {
|
||||
"blocks": 559,
|
||||
"sink": "b17be188847a071b",
|
||||
"daa": 558,
|
||||
"blue": 559,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 559,
|
||||
"sink": "b17be188847a071b",
|
||||
"daa": 558,
|
||||
"blue": 559,
|
||||
"key": "8da9ddee",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 559,
|
||||
"sink": "b17be188847a071b",
|
||||
"blue": 559,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 537.4,
|
||||
"h1": {
|
||||
"blocks": 564,
|
||||
"sink": "bcf3066ae7329fb1",
|
||||
"daa": 563,
|
||||
"blue": 564,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 564,
|
||||
"sink": "bcf3066ae7329fb1",
|
||||
"daa": 563,
|
||||
"blue": 564,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 564,
|
||||
"sink": "bcf3066ae7329fb1",
|
||||
"blue": 564,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 542.4,
|
||||
"h1": {
|
||||
"blocks": 571,
|
||||
"sink": "3c8486f382c004a4",
|
||||
"daa": 570,
|
||||
"blue": 571,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 571,
|
||||
"sink": "3c8486f382c004a4",
|
||||
"daa": 570,
|
||||
"blue": 571,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 571,
|
||||
"sink": "3c8486f382c004a4",
|
||||
"blue": 571,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 547.4,
|
||||
"h1": {
|
||||
"blocks": 573,
|
||||
"sink": "55eb5bc461792e81",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 573,
|
||||
"sink": "55eb5bc461792e81",
|
||||
"daa": 572,
|
||||
"blue": 573,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 573,
|
||||
"sink": "55eb5bc461792e81",
|
||||
"blue": 573,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 552.4,
|
||||
"h1": {
|
||||
"blocks": 577,
|
||||
"sink": "c5812db6a85bdadb",
|
||||
"daa": 576,
|
||||
"blue": 577,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 577,
|
||||
"sink": "c5812db6a85bdadb",
|
||||
"daa": 576,
|
||||
"blue": 577,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 577,
|
||||
"sink": "c5812db6a85bdadb",
|
||||
"blue": 577,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 557.4,
|
||||
"h1": {
|
||||
"blocks": 579,
|
||||
"sink": "a43cb662dec21b79",
|
||||
"daa": 578,
|
||||
"blue": 579,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 579,
|
||||
"sink": "a43cb662dec21b79",
|
||||
"daa": 578,
|
||||
"blue": 579,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 579,
|
||||
"sink": "a43cb662dec21b79",
|
||||
"blue": 579,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 562.4,
|
||||
"h1": {
|
||||
"blocks": 586,
|
||||
"sink": "a5490f8482cfcac1",
|
||||
"daa": 585,
|
||||
"blue": 586,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 586,
|
||||
"sink": "a5490f8482cfcac1",
|
||||
"daa": 585,
|
||||
"blue": 586,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 586,
|
||||
"sink": "a5490f8482cfcac1",
|
||||
"blue": 586,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 567.5,
|
||||
"h1": {
|
||||
"blocks": 590,
|
||||
"sink": "85ff280e3c193276",
|
||||
"daa": 589,
|
||||
"blue": 590,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 590,
|
||||
"sink": "85ff280e3c193276",
|
||||
"daa": 589,
|
||||
"blue": 590,
|
||||
"key": "eda9cde4",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 590,
|
||||
"sink": "85ff280e3c193276",
|
||||
"blue": 590,
|
||||
"reorged": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"t": 572.5,
|
||||
"h1": {
|
||||
"blocks": 591,
|
||||
"sink": "eb3dbbc60e30ebba",
|
||||
"daa": 590,
|
||||
"blue": 591,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"h2": {
|
||||
"blocks": 591,
|
||||
"sink": "eb3dbbc60e30ebba",
|
||||
"daa": 590,
|
||||
"blue": 591,
|
||||
"key": "0e2c6fe2",
|
||||
"reorged": true,
|
||||
"knows_side2_tip": true
|
||||
},
|
||||
"side2": {
|
||||
"blocks": 591,
|
||||
"sink": "eb3dbbc60e30ebba",
|
||||
"blue": 591,
|
||||
"reorged": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 3,
|
||||
"ports": {
|
||||
"base": 30810,
|
||||
"suffix": 983
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
12:48:26.802 fg3 case third-gate-on-expect-reorg: mode third, gate on (window 60 DAA), joint 240 s, split 180 s, watch 150 s, honest 1 thread(s) each, attacker 3 (joint 2), expect reorg
|
||||
12:48:28.386 fg3 h1 up pid 480989 json 30812 p2p 30811
|
||||
12:48:29.896 fg3 h2 up pid 482351 json 30822 p2p 30821 addpeer 30811
|
||||
12:48:31.410 fg3 b up pid 483327 json 30832 p2p 30831 addpeer 30841,30842
|
||||
12:52:34.426 fg3 phase 1 done at 240.0 s: H1 269 blocks sink 037edd2a daa 268; H2 269 sink 037edd2a; side 2 (b) 269 sink 037edd2a; keys H1 8da9ddee H2 eda9cde4 side2 0e2c6fe2
|
||||
12:52:34.451 fg3 weight at the fork (last 120 blue blocks of H1's chain): side 2 72, others 48, side 2 6000 bps
|
||||
12:52:36.465 fg3 links cut at 242.1 s; side 2 (b) now mines with 3 thread(s), the honest side with 1 each
|
||||
12:55:36.572 fg3 phase 2 done at 422.2 s: H1 426 blocks sink 06f666ba daa 425 blue 426 work 24628833; side 2 435 sink 71396cf7 daa 434 blue 435 work 28969222 (side 2 heavier: true); fork depth 166 DAA against window 60
|
||||
12:55:36.573 fg3 links restored at 422.2 s; watching H1 and H2 for 150 s
|
||||
12:56:06.662 fg3 t=452.2 s H1 454 blocks sink feb2905b held; H2 454 blocks sink feb2905b held; side 2 464 blocks sink 09301449
|
||||
12:56:31.716 fg3 H1 left its pre-cut chain at 477.3 s: sink df2ecca49796b69c by 0e2c6fe2
|
||||
12:56:31.720 fg3 H2 left its pre-cut chain at 477.3 s: sink df2ecca49796b69c by 0e2c6fe2
|
||||
12:56:36.729 fg3 t=482.3 s H1 498 blocks sink 33ab64db REORGED; H2 498 blocks sink 33ab64db REORGED; side 2 498 blocks sink 33ab64db
|
||||
12:57:06.776 fg3 t=512.4 s H1 537 blocks sink ec6ff75c REORGED; H2 537 blocks sink ec6ff75c REORGED; side 2 537 blocks sink ec6ff75c
|
||||
12:57:36.826 fg3 t=542.4 s H1 571 blocks sink 3c8486f3 REORGED; H2 571 blocks sink 3c8486f3 REORGED; side 2 571 blocks sink 3c8486f3
|
||||
12:58:06.880 fg3 t=572.5 s H1 591 blocks sink eb3dbbc6 REORGED; H2 591 blocks sink eb3dbbc6 REORGED; side 2 591 blocks sink eb3dbbc6
|
||||
12:58:06.890 fg3 SUMMARY PASS (third-gate-on-expect-reorg): side 2 held 6000 bps of the blue blocks at the fork; fork depth 166 DAA against window 60; side 2 blue work 28969222 against H1 24628833 at the heal; H1 reorged at 477.3 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 477.3 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true
|
||||
12:58:06.890 fg3 summary: /srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-third-gate-on-expect-reorg.json
|
||||
796
docs/plans/mission-item-4-gate/summary.json
Normal file
|
|
@ -0,0 +1,796 @@
|
|||
{
|
||||
"green": true,
|
||||
"at": "2026-10-07T12:58:08.407Z",
|
||||
"heal_unchanged": true,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"cases": [
|
||||
{
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"expect": "reorg",
|
||||
"must": "PASS",
|
||||
"line": "the rule's known-failed case: without the gate a fresh key's heavier deep fork wins on every honest node",
|
||||
"slot": 0,
|
||||
"name": "attack-gate-off-expect-reorg",
|
||||
"verdict": "PASS",
|
||||
"as_it_must": true,
|
||||
"secs": 581,
|
||||
"exit": 0,
|
||||
"summary_line": "SUMMARY PASS (attack-gate-off-expect-reorg): side 2 held 0 bps of the blue blocks at the fork; fork depth 191 DAA against window 60; side 2 blue work 17470131 against H1 14893198 at the heal; H1 reorged at 510.4 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 510.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true",
|
||||
"summary": {
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "attack-gate-off-expect-reorg",
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 120,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 240,
|
||||
"fork_depth_daa_at_heal": 191,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "e66998c63f8f5d2f3f9108a5c61730f3d5ee06a0553f47e3bce314a0e4d7228e",
|
||||
"blocks": 242,
|
||||
"daa": 240,
|
||||
"blue": 241,
|
||||
"blueWork": "8689541",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "6e932c389f2ad01a39873317f9549f0a336e66a7c840669dd5bcb44a979a19ad",
|
||||
"blocks": 421,
|
||||
"daa": 420,
|
||||
"blue": 421,
|
||||
"blueWork": "14893198",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "6e932c389f2ad01a39873317f9549f0a336e66a7c840669dd5bcb44a979a19ad",
|
||||
"blocks": 421,
|
||||
"daa": 420,
|
||||
"blue": 421,
|
||||
"blueWork": "14893198",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "d93a1238a397f68337f4bc28d6197a61a32fbca176f3e7f4248b6b330e239cc8",
|
||||
"blocks": 432,
|
||||
"daa": 431,
|
||||
"blue": 432,
|
||||
"blueWork": "17470131",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 510.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 510.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 0,
|
||||
"ports": {
|
||||
"base": 30690,
|
||||
"suffix": 980
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-off-expect-reorg.log"
|
||||
},
|
||||
{
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"expect": "hold",
|
||||
"must": "FAIL",
|
||||
"line": "the harness's own failed shape: with the gate off it must not report a hold",
|
||||
"slot": 1,
|
||||
"name": "attack-gate-off-expect-hold",
|
||||
"verdict": "FAIL",
|
||||
"as_it_must": true,
|
||||
"secs": 581,
|
||||
"exit": 1,
|
||||
"summary_line": "SUMMARY FAIL (attack-gate-off-expect-hold): side 2 held 0 bps of the blue blocks at the fork; fork depth 179 DAA against window 60; side 2 blue work 19683187 against H1 17459678 at the heal; H1 reorged at 480.3 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 480.3 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true; FAILED CHECK every_honest_node_held, every_honest_node_logged_a_refusal",
|
||||
"summary": {
|
||||
"pass": false,
|
||||
"expect": "hold",
|
||||
"case": "attack-gate-off-expect-hold",
|
||||
"mode": "attack",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 120,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 247,
|
||||
"fork_depth_daa_at_heal": 179,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "0535d8ae67287238ee528bae5ab1f366273bd1c65c6a94342ec3879a40b81c88",
|
||||
"blocks": 248,
|
||||
"daa": 247,
|
||||
"blue": 248,
|
||||
"blueWork": "11209205",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "d5347d2cd3468901fda8e5a1caffe0be55d45eb12739577fadb0141d2291c2ba",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "17459678",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "d5347d2cd3468901fda8e5a1caffe0be55d45eb12739577fadb0141d2291c2ba",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "17459678",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "bfdb75e384417228a85f4098f8f2bb65d40c271ce674bea2d1cc8a3c6c335f53",
|
||||
"blocks": 427,
|
||||
"daa": 426,
|
||||
"blue": 427,
|
||||
"blueWork": "19683187",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 480.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 480.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [
|
||||
"every_honest_node_held",
|
||||
"every_honest_node_logged_a_refusal"
|
||||
],
|
||||
"refusal_example": null,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 1,
|
||||
"ports": {
|
||||
"base": 30730,
|
||||
"suffix": 981
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-off-expect-hold.log"
|
||||
},
|
||||
{
|
||||
"mode": "attack",
|
||||
"gate": "on",
|
||||
"expect": "hold",
|
||||
"must": "PASS",
|
||||
"line": "the gate line: a fresh-key fork from three windows back, heavier by blue work, refused by every honest node",
|
||||
"slot": 2,
|
||||
"name": "attack-gate-on-expect-hold",
|
||||
"verdict": "PASS",
|
||||
"as_it_must": true,
|
||||
"secs": 581,
|
||||
"exit": 0,
|
||||
"summary_line": "SUMMARY PASS (attack-gate-on-expect-hold): side 2 held 0 bps of the blue blocks at the fork; fork depth 197 DAA against window 60; side 2 blue work 20297242 against H1 14807915 at the heal; H1 held (177 refusal lines, knows side 2's tip: true); H2 held (177 refusal lines, knows side 2's tip: true); side 2 kept its chain: true",
|
||||
"summary": {
|
||||
"pass": true,
|
||||
"expect": "hold",
|
||||
"case": "attack-gate-on-expect-hold",
|
||||
"mode": "attack",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 0
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 0,
|
||||
"others": 121,
|
||||
"side2_bps": 0
|
||||
},
|
||||
"fork_daa": 233,
|
||||
"fork_depth_daa_at_heal": 197,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "7ed68743f22e711490406bd380cf66fff94579fcc981344c317a46c18cbc61bb",
|
||||
"blocks": 234,
|
||||
"daa": 233,
|
||||
"blue": 234,
|
||||
"blueWork": "8862250",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "036cfe568f3d403351b338ea41b7069ad4eae0ce95308436a25b6c7aa4c1372a",
|
||||
"blocks": 396,
|
||||
"daa": 395,
|
||||
"blue": 396,
|
||||
"blueWork": "14807915",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "036cfe568f3d403351b338ea41b7069ad4eae0ce95308436a25b6c7aa4c1372a",
|
||||
"blocks": 396,
|
||||
"daa": 395,
|
||||
"blue": 396,
|
||||
"blueWork": "14807915",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "abb93c2318f6c2ebdbd4e14a50b3d73ba7f483b8b06b18666e1015d038d4011a",
|
||||
"blocks": 431,
|
||||
"daa": 430,
|
||||
"blue": 431,
|
||||
"blueWork": "20297242",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": true,
|
||||
"reorged": false,
|
||||
"reorg_at_s": null,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 177
|
||||
},
|
||||
"h2": {
|
||||
"held": true,
|
||||
"reorged": false,
|
||||
"reorg_at_s": null,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 177
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": true,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": true,
|
||||
"every_honest_node_reorged": false,
|
||||
"every_honest_node_logged_a_refusal": true,
|
||||
"no_honest_node_logged_a_refusal": false,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": "Fork choice: block 41225a00fb38b6394540a5707443bd70e678484cbd20aa3fa8e807bb24df8d4a forks 252 DAA back from the sink's chain and its builders hold 0.00% of the weight table at the fork (under one third); not a sink candidate (ledger 51-percent rank 2)",
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 2,
|
||||
"ports": {
|
||||
"base": 30770,
|
||||
"suffix": 982
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-attack-gate-on-expect-hold.log"
|
||||
},
|
||||
{
|
||||
"mode": "third",
|
||||
"gate": "on",
|
||||
"expect": "reorg",
|
||||
"must": "PASS",
|
||||
"line": "a fork whose builder holds at least a third of the table at the fork is accepted",
|
||||
"slot": 3,
|
||||
"name": "third-gate-on-expect-reorg",
|
||||
"verdict": "PASS",
|
||||
"as_it_must": true,
|
||||
"secs": 583,
|
||||
"exit": 0,
|
||||
"summary_line": "SUMMARY PASS (third-gate-on-expect-reorg): side 2 held 6000 bps of the blue blocks at the fork; fork depth 166 DAA against window 60; side 2 blue work 28969222 against H1 24628833 at the heal; H1 reorged at 477.3 s (0 refusal lines, knows side 2's tip: true); H2 reorged at 477.3 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true",
|
||||
"summary": {
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "third-gate-on-expect-reorg",
|
||||
"mode": "third",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 2
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": "eda9cde4…",
|
||||
"side2": "0e2c6fe2…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 72,
|
||||
"others": 48,
|
||||
"side2_bps": 6000
|
||||
},
|
||||
"fork_daa": 268,
|
||||
"fork_depth_daa_at_heal": 166,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "037edd2a2976af7aec3f6b00d0532706f2c4bc48a2ace2d4e92f027492aa42af",
|
||||
"blocks": 269,
|
||||
"daa": 268,
|
||||
"blue": 269,
|
||||
"blueWork": "17483286",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "06f666ba3c449f2fab804e75612a00c748a8d56568806c30a7006aae175bb27d",
|
||||
"blocks": 426,
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"blueWork": "24628833",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "06f666ba3c449f2fab804e75612a00c748a8d56568806c30a7006aae175bb27d",
|
||||
"blocks": 426,
|
||||
"daa": 425,
|
||||
"blue": 426,
|
||||
"blueWork": "24628833",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "71396cf73521295ad0fbeb320de980989ea0788dbc859129d8972a9e091e0a3c",
|
||||
"blocks": 435,
|
||||
"daa": 434,
|
||||
"blue": 435,
|
||||
"blueWork": "28969222",
|
||||
"key": "0e2c6fe2…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 477.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
},
|
||||
"h2": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 477.3,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 3,
|
||||
"ports": {
|
||||
"base": 30810,
|
||||
"suffix": 983
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-third-gate-on-expect-reorg.log"
|
||||
},
|
||||
{
|
||||
"mode": "partition",
|
||||
"gate": "on",
|
||||
"expect": "reorg",
|
||||
"must": "PASS",
|
||||
"line": "partition heal with the gate on: the heavier side wins",
|
||||
"slot": 4,
|
||||
"name": "partition-gate-on-expect-reorg",
|
||||
"verdict": "PASS",
|
||||
"as_it_must": true,
|
||||
"secs": 581,
|
||||
"exit": 0,
|
||||
"summary_line": "SUMMARY PASS (partition-gate-on-expect-reorg): side 2 held 3719 bps of the blue blocks at the fork; fork depth 194 DAA against window 60; side 2 blue work 18089683 against H1 11490863 at the heal; H1 reorged at 507.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true",
|
||||
"summary": {
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "partition-gate-on-expect-reorg",
|
||||
"mode": "partition",
|
||||
"gate": "on",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 1
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": null,
|
||||
"side2": "eda9cde4…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 45,
|
||||
"others": 76,
|
||||
"side2_bps": 3719
|
||||
},
|
||||
"fork_daa": 245,
|
||||
"fork_depth_daa_at_heal": 194,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "5c4cb584dc015892ddff89337412ed0883d9f97b4e791e7af2f7f64764f4f1e8",
|
||||
"blocks": 246,
|
||||
"daa": 245,
|
||||
"blue": 246,
|
||||
"blueWork": "8723556",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "753507c15705f4ea8ed19bc2697a11c489a052a45f28c64f9ac3d8400fa66647",
|
||||
"blocks": 412,
|
||||
"daa": 411,
|
||||
"blue": 412,
|
||||
"blueWork": "11490863",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "32b7c1757fa288eed0a8ab709e49fd86f72be531db19c58e63d0aeca7a34c4f6",
|
||||
"blocks": 440,
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"blueWork": "18089683",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "32b7c1757fa288eed0a8ab709e49fd86f72be531db19c58e63d0aeca7a34c4f6",
|
||||
"blocks": 440,
|
||||
"daa": 439,
|
||||
"blue": 440,
|
||||
"blueWork": "18089683",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 507.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 4,
|
||||
"ports": {
|
||||
"base": 30850,
|
||||
"suffix": 984
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-partition-gate-on-expect-reorg.log"
|
||||
},
|
||||
{
|
||||
"mode": "partition",
|
||||
"gate": "off",
|
||||
"expect": "reorg",
|
||||
"must": "PASS",
|
||||
"line": "partition heal with the gate off: the same outcome, so the heal is unchanged",
|
||||
"slot": 5,
|
||||
"name": "partition-gate-off-expect-reorg",
|
||||
"verdict": "PASS",
|
||||
"as_it_must": true,
|
||||
"secs": 581,
|
||||
"exit": 0,
|
||||
"summary_line": "SUMMARY PASS (partition-gate-off-expect-reorg): side 2 held 5583 bps of the blue blocks at the fork; fork depth 191 DAA against window 60; side 2 blue work 19576159 against H1 12270631 at the heal; H1 reorged at 507.4 s (0 refusal lines, knows side 2's tip: true); side 2 kept its chain: true",
|
||||
"summary": {
|
||||
"pass": true,
|
||||
"expect": "reorg",
|
||||
"case": "partition-gate-off-expect-reorg",
|
||||
"mode": "partition",
|
||||
"gate": "off",
|
||||
"window": 60,
|
||||
"joint": 240,
|
||||
"split": 180,
|
||||
"watch": 150,
|
||||
"threads": {
|
||||
"honest_each": 1,
|
||||
"attacker_split": 3,
|
||||
"attacker_joint": 1
|
||||
},
|
||||
"keys": {
|
||||
"h1": "8da9ddee…",
|
||||
"h2": null,
|
||||
"side2": "eda9cde4…"
|
||||
},
|
||||
"share_at_fork": {
|
||||
"side2": 67,
|
||||
"others": 53,
|
||||
"side2_bps": 5583
|
||||
},
|
||||
"fork_daa": 244,
|
||||
"fork_depth_daa_at_heal": 191,
|
||||
"sinks": {
|
||||
"joint": {
|
||||
"h1": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "58126c351aa6324a992a47fa66cca22369450c9835d312772c87d3e1aeb409a0",
|
||||
"blocks": 245,
|
||||
"daa": 244,
|
||||
"blue": 245,
|
||||
"blueWork": "9558440",
|
||||
"key": "8da9ddee…"
|
||||
}
|
||||
},
|
||||
"split": {
|
||||
"h1": {
|
||||
"hash": "a27a341c694aacf22b1a78f44d433e4104f58b23533afb73b7ee6fb9aa37afe4",
|
||||
"blocks": 405,
|
||||
"daa": 404,
|
||||
"blue": 405,
|
||||
"blueWork": "12270631",
|
||||
"key": "8da9ddee…"
|
||||
},
|
||||
"h2": {
|
||||
"hash": "f9181a06c0db716fe4ed200f6f0046c9cb8fae2eb57dd7da4697a268c434a232",
|
||||
"blocks": 436,
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"blueWork": "19576159",
|
||||
"key": "eda9cde4…"
|
||||
},
|
||||
"side2": {
|
||||
"hash": "f9181a06c0db716fe4ed200f6f0046c9cb8fae2eb57dd7da4697a268c434a232",
|
||||
"blocks": 436,
|
||||
"daa": 435,
|
||||
"blue": 436,
|
||||
"blueWork": "19576159",
|
||||
"key": "eda9cde4…"
|
||||
}
|
||||
}
|
||||
},
|
||||
"per_node": {
|
||||
"h1": {
|
||||
"held": false,
|
||||
"reorged": true,
|
||||
"reorg_at_s": 507.4,
|
||||
"knows_side2_tip": true,
|
||||
"refusal_lines": 0
|
||||
}
|
||||
},
|
||||
"checks": {
|
||||
"side2_under_a_third_at_fork": false,
|
||||
"fork_deeper_than_window": true,
|
||||
"side2_heavier_at_heal": true,
|
||||
"every_honest_node_learned_side2_chain": true,
|
||||
"every_honest_node_held": false,
|
||||
"every_honest_node_reorged": true,
|
||||
"every_honest_node_logged_a_refusal": false,
|
||||
"no_honest_node_logged_a_refusal": true,
|
||||
"side2_kept_its_chain": true
|
||||
},
|
||||
"failed_checks": [],
|
||||
"refusal_example": null,
|
||||
"node": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneumd",
|
||||
"miner": "/srv/builds/igneum-wt-horizon/vendor/igneum-node-horizon/target/release/igneum-miner",
|
||||
"slot": 5,
|
||||
"ports": {
|
||||
"base": 30890,
|
||||
"suffix": 985
|
||||
}
|
||||
},
|
||||
"log": "/srv/builds/igneum-wt-horizon/docs/plans/mission-item-4-gate/fork-gate-partition-gate-off-expect-reorg.log"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -467,3 +467,37 @@ Speculative builds on the candidate from the ship worktree, box only, sequential
|
|||
## 35. the project lead's orders (15:1x UK by main's stamp; 14:0x BST on `date`): the floor file publishes, the sweep in waves, 0.3.21 tonight
|
||||
|
||||
(1) The floor-moved file publishes WITH 0.3.20: floor = live DAA at the publish + 604,800 rounded up to the epoch (3,600), window unchanged, the digest read back on c4459193's binary, the one-line diff against eada4bda in the publish record. Dry run at 14:07 BST, DAA 286,227: floor 892,800, digest 43725627 on c4459193 (the live file reads eada4bda on the same binary). Consequence: a node on the old file refuses a node on the new one as a peer, so an unswept box is isolated, not forked, until its turn. (2) Fast: the cut word on CASES END, everything staged so the publish is one step; the sweep in parallel waves as the lock lines allow (PC 1 first by the app's poller, then PC 2, the Mac, the seed, the hands and the fleet), each box read back by commit string; with the moved file the seed, the hands and the fleet move in the first wave. (3) Build-2 for anything that still builds. (4) The Windows OpenCL worker: the Intel lane's exe af53f194 (built on build-1 by build-windows.sh's line, static, KERNEL32 and msvcrt only; the Arc self-test PASS 96 of 96 on v4-devnet-epoch0 867dbc45cfb36b4d, the mx8 control and the live pack; 11.008 MH/s on v4) ships in place of the shipper's own box build 618a2b10 (same source, not Arc-tested); the inputs re-pushed with it and windows.yml re-dispatched: run 37625870876 (37625030022 and 37625590021 cancelled). (5) Standing rules from 0.3.21 (release-rules.md 4a, 4b, 5 at a36298c4): every gate starts on every candidate as it builds; warm pods per gate class; the sweep in waves. (6) 0.3.21 starts the moment the sweep ends: sub-version 2 (07a809a7, byte 7, pending the F8 census), miner-reliability both halves, driver-check 1982dbc7, the fork gate from horizon-node, the under-12 GB prove-instead routing, the per-architecture prover server; the tree staged tonight, the first gate about 19:30 BST (app, build-2), the node candidate's parallel gates from its first binary.
|
||||
|
||||
**The sweep's wave plan (the fleet, 14:1x BST), accepted:** from a 16:15 BST publish, each box's move = override.json replaced, c4459193 put as in/igneumd-45be9b02d1b002f5 with the sha asserted, the node killed by its kill file and started on its kept datadir (the rewrite line once, about 80 s to the tip), read back by the commit string in its log line and the digest from its handshake line, synced, the miner back; the prover pair under bin-0320 and the prover restarted by file after synced. Wave 1, 16:15 to 16:21, read back by 16:23: hub-1 first, pool-1 (its daemon stopped first), the eight heaviest voters (p1-5090, p1-4090, p2-4090-3, p2-4090-1b, p2-3090-1 to 4), with the seed and the hands in the same minutes from the build-server lane: more than two thirds of the live table's weight on the new digest at once; the first lock on the new side (the folded certificate on hub-1, about 16:27) is the line between waves. Wave 2, 16:27 to 16:32: p1-a5000, p1-4070, p2-4070-1, p1-3080; the lock line by 16:35. Wave 3, 16:35 to 16:40: the Devnet 2 six (dn2-seed first). The prover roll behind each wave's synced reads, 16:25 to 16:50. PC 1, PC 2 and the Mac on their pollers. Sweep end about 16:42 BST; provers paid on the pair by about 16:50. Risk named: a refusing datadir would cost a 98-minute resync (today's two kept reads say none will). The go = the override file with its sha256 and digest at the cut word. Warm pods for 0.3.21 (rule 4b): w-target and w-relay syncing on the kept copy, w-poison when a 3070 frees, p12-vast kept; USD 11.52 a day.
|
||||
|
||||
**0.3.21's clocks (14:1x BST):** the F8 census on byte 7 (07a809a7) lands about 15:00 BST; the pass line is all 64 seeds under 1.2x of the window model plus the hash lane's suite and G1; if it fails or slips past 20:00 BST, 0.3.21's node ships byte 5 again with the re-pin dropped. The node lane's dry merges into c4459193 are clean (miner-reliability-20 f067f7c1 one file, horizon-node 6eb21fc9 six commits on finality.rs); at the sweep-end word the branch commits, suites on build-2 about 16:50 to 17:05 BST, the first candidate binary on build-1 about 17:10 BST with every gate started from the build. App side: release-0.3.21 on origin at 0b75cf52 (release-0.3.20's closed tree, driver-check 1982dbc7's three commits, the 0.3.21 version strings, master 819d536b merged with its 51-check gate; the hands script's pgrep in the bracket form); the reliability lane rebases its app half by cherry-pick onto it as miner-reliability-21 (tip fb3a4a40, gate on build-2 running). Still to write on the app side: the under-12 GB prove-instead routing and the per-architecture prover server.
|
||||
|
||||
**The 12 GB settled-claim line, first half (the fleet, 13:23Z):** p12-vast (RTX 3060 12 GB) on c4459193 (45be9b02d1b002f5, the string read back) on pool-1's kept copy from 12:36:35Z (first-try start, the copy already rewritten by b7cc37e7's read), synced 13:22:47Z; box-prover (cf335220, the settled filter) started 13:23:01Z with the sm_86 server; first claim "segment 164198..164205 (8 shards, fresh) margin=414 tip=287564 settledNumber=0x28185 settledDaa=0x46317 settledBy=finality candidates=5 rank_by=fnv", pair ok. The floor read: settled number 164,229 at settled DAA 287,511 by finality, 31 blocks above the claimed segment, the claim behind the floor as the rule wants. The paid record by the pod's key is the second half, about 3 to 10 minutes.
|
||||
|
||||
**Main (14:3x BST):** the project lead withdrew the Harmony overlay; apps-harmony is parked. 0.3.21's UI branches in order: gpu-logos (a414b6bdc81d348d8, takes the Prove switch fix), ui-overlap-fixes (a7aa33bf8ae230f46; its wallet half is the wallet's cut), scene-parity (a75edb2ef8015f21c; live-dag.js and proof-core.js, the blank-canvas fix first); each instructed: rebase onto release-0.3.21, push as <name>-21, UI tests and the app gate on build-2, tip and lines to the shipper; 19:30 BST stands. A site rebuild lane ships through the site gate on master, outside 0.3.21. The Windows installer run 37625870876 failed its inputs check on the stale node-source pin (e69e8a39 at a255b095 against the payload's c4459193); the pin pushed (4ae4a54e) and run 37627661560 dispatched 14:20 BST.
|
||||
|
||||
## 36. CUT BLOCKER (the fleet's 12 GB line, 13:25Z; 14:3x BST): the 0.3.20 node reads the proving ids as unknown
|
||||
|
||||
On p12-vast, c4459193 (45be9b02, string read back) over pool-1's kept copy with the hub's override-16.json: the node's start lines read "[igneum-exec] proving v1: ... shard program id unknown, aggregator id unknown", then "verifying keys embedded: shard program id 0x2b1a81cb... aggregator id 0x474678f3..."; hub-1 on 5899f603 prints the ids in the proving v1 line. The node builds its segment statement with zeros for the ids and the pair's proof is refused: "RESULT seg 164198 FAILED: statement differs from the node's at hex offset 472 (lengths 616 vs 616); ours ...2b1a81cb413236cf... node ...0000000000" (the claim behind the settled floor was right: settledNumber 0x28185 by finality, margin 414; the 3060 proved 8 of 8 shards in 135.9 s at 8,487 MiB). Per tier: swept as it stands, every standing prover stops paying from the sweep minute and the feed goes to zero while the miners run on; a 0.3.20 home prover earns nothing. The pin HOLDS. Asked of the node lane: the cause (where 5899f603 takes the ids from, which of the five commits since dc141409 loses them), a fix with a test (a node on the live override file reports the ids; a zero-id statement the known-failed shape) as c4459193's child, its time; the fixed binary takes the full gate set from its build (rule 4a; the warm pods are up, about 80 minutes). The sweep plan, the floor file, the installer and the app tree are unaffected. Earliest publish by the shipper's read: about 17:30 BST if the cause is small. Main told.
|
||||
|
||||
**Main (14:3x BST):** the hold agreed (a prover cannot be split from its node); the pin waits for the ids fix as c4459193's child and takes the full set from its build; new rule 4c (release-rules.md 706b46d3): on every candidate a node on the live override file reports both proving ids on its start line and a prover's first statement is accepted, a zero-id statement the known-failed shape, run beside the kept-datadir read on the warm pod; the fleet has it. Publish on green with the clock; the 16:00 report carries the slip and the cause.
|
||||
|
||||
**The Windows installer (14:26 BST):** run 37627661560 on 4ae4a54e success; Igneum-Miner-Setup-0.3.20.exe 63,025,372 B sha256 45b2f3fb54f40f83 and igneum-windows-app.zip 91,038,211 B; inside the zip igneumd.exe 49502cc7 and igneum-worker-opencl.exe af53f194 (the Arc-proven worker), as pushed. fetch-ci-artifacts.sh copies into the live downloads folder by design; both files moved out to scratch r0320/win at once (rule 2: the live folder changes only in the deploy step). The installer carries c4459193's node: if the ids fix lands as a child commit, the node's Windows exe, the payload inputs and this installer are rebuilt on it (about 35 minutes: the cross on the box, push-inputs, one windows.yml run), as are the native, hive, seed, hands and Mac binaries and the DMG.
|
||||
|
||||
**The blocker is the start environment (the node lane's read of the code and hub-1's process, the fleet's restart on the pod, 14:3x to 14:4x BST):** the statement's ids come from the override object's two fields, then IGNEUM_PROOF_PROGRAM_IDS, then the verifier host's `--mode id` under IGNEUM_PROOF_VERIFIER; the live file carries no id fields; every standing box's supervisor sets the host (hub-1 included), and the app sets it whenever it finds igneum-prove-host. The pod's node was started bare for the kept read; 5899f603 bare reads the same. Restarted on p12-vast with the env at 13:30:28Z, the same c4459193 prints both ids and the 3060's first statement is accepted at 13:33:56Z (8 of 8 shards); the paid half then lost the claim race ("segment already paid; end to end 113.1 s", p2-4070-1's shape) and runs on. The swept fleet keeps the env through box-standing.sh. The node lane's child commit (`resolve_program_ids`: the override first, then the env or host, then the embedded keys; test known-failed first) makes a bare node self-sufficient; it is the fix for a hand-started node without the host, which has no prover to submit to it. Put to main: pin c4459193 as it stands (its gates landing: c19-1 synced about 14:40 BST, c20-1 synced 13:33:08Z and the cases form running, CASES END about 15:50 BST), publish about 15:55 BST, the ids commit as 0.3.21's first node commit with rule 4c's gate on every 0.3.21 candidate (ids-gate.py, the fleet's README item 19); or the child now with the full set again, publish about 16:35. The shipper's read: pin c4459193. The pool window ended 13:30:23Z with 0 shares (the daemon's template RPC timed out from 12:54Z; the members' prepare stall at the epoch boundary): the pool lane's, not 0.3.20's.
|
||||
|
||||
**Main (14:3x BST): THE PIN IS c4459193 as it stands.** The ids commit (55768f88, `resolve_program_ids`, the exec suite 32 with `a_bare_node_resolves_its_program_ids_from_the_embedded_keys`) is 0.3.21's first node commit, with the ids gate on every candidate from now. Publish on CASES END about 15:55 BST. The sweep: the project lead is taking PC 1 offline for cable work (a Mac mini comes online), so PC 1 is not first and not in the waves; its app updates on its poller when it returns, its lock line "PC 1 offline at the sweep, updates on return". First wave: this Mac, the fleet, the seed, the hands, and PC 2 if it polls. The Mac mini is a new machine and takes the 0.3.20 DMG as a fresh install when the project lead has it up. The shipper's parallel builds on 55768f88 (box and Mac, started 14:36) stopped by pid; the vendor worktree back on c4459193; the pinned Mac binaries and the DMG 73796c5f kept.
|
||||
|
||||
## 37. The pin's canary lines on c4459193 (c19-1; the fleet, 14:4x BST)
|
||||
|
||||
sha256 45be9b02d1b002f5 asserted at the put, igneumd/2.1.0-c4459193 in the node's log, digest eada4bda8aa8368c. **The wipe (decisive):** IBD from the pruning-point proof 12:38:55Z, synced 13:35:50Z (156,046 blocks, 3 peers), 57 minutes; the IBD-end line "finality time: bodies 3864115 ms over 156238 blocks, virtual 373190 ms over 16695 changes, weight tables 48145 ms over 5595 tables (53495046 blocks walked), signatures 607815 ms over 473073"; proof-asking 0, carried records 0, pings 0, idle drops 0; the exec poller 682 calls, 0 errors, the first non-null answer at the synced line (exec synced true). **Mining** from 13:36:00Z: at +166 s 34.2 MH/s, mined 16, accepted 12, rejected 0, got_reject 0, wrong_version 0, isSynced true at the tip on every read (the dc141409 flap is gone: 8097d600's fix). The ten-minute and hub reads about 13:46Z, the restart read about 13:50Z. **The kept read (rule 4):** pool-1's 0.3.17 copy on the same pod, first start 13:38:14Z with the N13 rewrite line and the finality blob converted (1,747 locks), no panic; second start 13:38:33Z first-try, no panic: PASS, c20-1's shape. **The cut word:** c20-1's CASES END about 14:50Z (15:50 BST; the poison pod's IBD from the relay started 13:38Z).
|
||||
|
||||
**The seeds (main's ruling, 14:4x BST):** the three testnet seeds run `--testnet --netsuffix=1` with no override at height 0 on 1c19441d; c4459193's seed-class build prints testnet digest 9537868d against 1c19441d's b7d8c915, so a swap would move the pre-go testnet's digest. Ruling (b): the seeds stay on 1c19441d and the RPC blocklist stays; the testnet genesis re-cut replaces the seeds' line at the go on the project lead's word. The devnet floor file has nothing to do with the seeds (the shipper's earlier order corrected). Wave 1 is the Mac, the hands and the fleet, PC 2 on its poller.
|
||||
|
||||
**PC 2 is back and the Windows kept-datadir gate PASSED (13:38 to 13:39Z):** PC 2's 10:46Z silence was the whole PC losing power (Kernel-Power 41, 6008, no bugcheck; two such events today), not the 0.3.19 update-now, which had returned cleanly at 10:34:38Z; it polls again since 13:38:32Z. run-20261007-125433 on it: c4459193's igneumd.exe (df19315d) on a robocopy of the app's datadir (1,147 MB), "verdict c4459193 (pass): the N13 line seen; consensus built and the servers started", the copy removed, 0 leftover nodes; 6a3432a3 on its own copy died at virtual_state.rs:250 with InvalidBoolEncoding(20), the Windows shape of the known-failed read. A datadir cut off mid-write twice by power loss started clean on the pin. The reliability register's MF-11 is renamed to the machine going silent with nothing reporting it.
|
||||
|
||||
**The testnet digest move, for the record (the build-server lane, 14:4x BST; not a 0.3.20 item):** between 1c19441d and c4459193 the testnet's genesis, base params, finality table, fee table and pow schedule are unchanged; five additions enter the digest on c4459193 and are the whole b7d8c915 → 9537868d move: finality_leave_activation_daa 0 with finality.leave_delay 3,600; program_class_v3_activation_daa 0 (unconditional); program_class_v4_activation_daa 0 (the signal window 0 stays out); pow_genesis_dataset_log2 28 (unconditional); emission EmissionSchedule::TESTNET_1 (launch_rate 100 UNIT, ramp 90 days from 10 percent, monthly steps with step_decay_q32 4,172,697,914, tail 100 bps a year). Everything else new sits at never and stays out; dns_seeders is not a digest field. No override pins the old value (1c19441d has none of the five fields), so every testnet node swaps together or not at all: the testnet-go checklist's digest line reads 9537868d on this line, to be re-read on the genesis re-cut's binary at the go.
|
||||
|
||||
**PC 2 out of the waves too (main via the Counter lane, 14:5x BST):** the project lead is taking PC 2 down for cable work (PC 1 is back, but it is his desk and no job goes to it); both PCs update on their pollers on return, their lock lines "offline at the sweep, updates on return". The sub-version-2 Windows G1 completed on PC 2 before it went down (13:46:36 to 13:46:50Z, exit 0, eight of eight fingerprints equal to the Mac's). Wave 1 is the Mac, the hands and the fleet.
|
||||
|
||||
**c19-1's last pin lines (the fleet; FORM END rc 0 at 13:50:53Z):** mining at +666 s 34.3 MH/s, mined 66, accepted 66, rejected 0, got_reject 0, wrong_version 0, isSynced true at the tip on every read, the exec follower moving; the hub holds 41 blocks by c19-1's key 2c7cc291d38579e0 in its last 700, rejects naming the pod 0; the restart on the kept datadir 13:47:15Z: the stop and the start inside seven seconds (09124180's poll proving itself against b7cc37e7's LOCK death), synced again 13:48:39Z (157,048 blocks, 4 peers), 84 seconds after the kill, isSynced true on the first read and never false after; 109 templates in the read, max template_ms 3,432, "template fetch timed out" 0; the kept read passed at 13:38Z. Every line the rule reads is in from c19-1; CASES END from c20-1 is the one left (about 14:50Z). c19-1 stays up until the shipper's word. p1-5090 ran the sub-version-2 G1 meanwhile (eight of eight equal to the Mac's) and is back under its supervisor.
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ sha256 279b1b690e854fc9, the string read back, pairing 8c728ca3 at byte 5. The d
|
|||
|
||||
**The node order, final (16:3x BST):** on 55768f88: c631c64b first (the test-only fix of the two stale integration targets, 1026 → 1282; both green on build-2 at 15:34Z), then 52e96c94, f067f7c1, b0444f51, 437f0438, 2e32d5f6, f95178a1, a6864e36, d8bceca5; the tip's suite set runs the consensus crate whole (`-p kaspa-consensus` without `--lib`: the lib and both integration targets) beside consensus-core, the miner, kaspa-pow, the exec suite and the three checks (the suite rule from the 0.3.20 known-red finding). era-vdf-node 394a5902 is 0.3.22's.
|
||||
|
||||
## 6. The node line staged: release-0.3.21-node = 96161037 (the node lane, 16:5x BST)
|
||||
## 6a. The node line staged (superseded by 6 below: no node gate for 0.3.21): release-0.3.21-node = 96161037 (the node lane, 16:5x BST)
|
||||
|
||||
On 55768f88 in the final order, each green and pushed with the exec suite between: c631c64b → 7ee808d6, 52e96c94 → 78f0e771, f067f7c1 → be60803a, b0444f51 → 4362119b, 437f0438 → 632437a0, 2e32d5f6 → f2caa145 (the DST_ADDRESS both-add resolved), f95178a1 cherry-picked → 31407f27 (a merge would have pulled the whole genesis-forward branch; the consensus lib 120), d8bceca5 → 96161037 (the exec suite 36). Byte 5, igneum-pow 8c728ca3. On the tip: consensus-core 126, the consensus crate whole green (the lib 120 and both integration targets). The tip's set stopped twice on the boxes' inputs, not the code: the 60x file test wanted the two new switches (pool split, peer directory) in the fast-time file (added as null); the miner's pool tests read the proto-cuda packs four directories above the crate, absent on the boxes and then the 6 October stream where the node pairs 8c728ca3's amended one (the amended packs placed on both boxes). Two rules for the plan: after every merge that touches OverrideParams the 60x file's field diff is re-run; the miner's pool tests want the packs of the paired igneum-pow's stream beside the fork on every box. The set re-runs from the miner suite (miner, kaspa-pow, the three checks), then the build on build-1 and the digest pair (the previous object eada4bda, the floor-moved 4bbbe816); the binary about 17:15 BST with the node lane's two gates from that minute and the fleet's set on the warm pods.
|
||||
|
||||
|
|
@ -74,3 +74,17 @@ On 55768f88 in the final order, each green and pushed with the exec suite betwee
|
|||
**The reliability injector on 0.3.21's own binaries (the reliability lane; RunPod 3070, 15:44 to 16:13Z): nine steps PASS.** kept-datadir (MF-8): the previous release's node wrote 151 blocks and stopped in 1.0 s, the new node opened the kept datadir and read synced 4.1 s after the engine started, one start, no exit line; catch-up (MF-1/2): no worker for 120 s while the execution layer held no record, the worker up 18 s after the first blocks; card-appears (MF-3): listed 58 s, mining 69 s, removed 49 s after it left, back 72 s; own-restart: no double restart; zero-ladder (MF-2): rungs 10, 30, 120 s; no-status: restart at 93 s; node-silent: node restarted at 151 s, synced 3 s later, mining at 170 s; one-card-fails (MF-4): two cards mining, the third held 30 min with the reason, 2 exports with 2 reuses; orphan-miner (MF-7): the stray killed in 14 s; 9 FAULT lines to the intake. Binaries: the app 786c3d37 from 8ed08dcf (the engine unchanged since 4a28eb59 through every later merge), node c4459193, the 0.3.17-line igneumd as the previous release. miner-reliability-21's register table and a4d557f9 merged (no engine change). The register's 0.3.21 gate list: kept-datadir start PASS, shutdown under 1 s PASS, prover server matches the card (the app's check; the per-architecture kit owed), LG-4 not run (no Windows box).
|
||||
|
||||
**96161037's pairs (the build-server lane, 17:1x BST; /srv/artefacts/0321-96161037/):** hands (native 2.39): igneumd 57,664,736 B sha256 0c39b5fab783e5765113a5df18340cc02a8a3811f868ba20830da4f765d53c43 (string twice, 6 pow paths), igneum-miner 12,052,528 B sha256 3db895d1a4dbe7073d76233dcc427a1e0134f470c2a8ddee1f2b30292f31981f (9 pow paths; the miner grew from 10.2 MB on c4459193 with MF-5's STATUS and the pool mode); seed (zigbuild 2.35, GLIBC_2.34): igneumd 56,366,032 B sha256 38dc52a11cfba9087b64c7b4f984252caaef0a178a32bdd6b9b561fd91e10d78, igneum-miner 12,015,392 B sha256 b2b6628ff878d8a02e3532ccbad7347c2c76e4190421daaffdb50f1bdfdd05c6; each pairing with igneum e7b8e543: igneum-pow 0.2.0. The Mac: igneumd a0763923 48,123,904 B (96161037 ×2), igneum-miner 8aaeaa71; the DMG Igneum-Miner-0.3.21.dmg 45,351,864 B sha256 fb517a11e64ff06c (build 202610071610, hdiutil VALID, the standing prover pair 71bc2438 / 263bf4ce in).
|
||||
|
||||
## 6. The shape that ships: the 0.3.21 app tree over the field node c4459193 (main, 17:5x BST)
|
||||
|
||||
No node gate for 0.3.21: the app tree ships over the node already in the field (c4459193, the 0.3.20 pin, digest 4bbbe816 on the floor file). The 96161037 line (N15's numbering class, the bare-node proving ids) folds into 0.3.22 and later; its canary cells (kept-datadir ids BOTH PRESENT, wipe canary c22-1 synced in 42 minutes, 23 for 23, restart synced in 1 min 24 s) stand as readings, not as this release's gate.
|
||||
|
||||
**The exact tree:** release-0.3.21 at 44b63ac9 = scaling-21 b340b904 merged (c999a104), the windows.yml smoke fix 6c4686e7 (a direct call with the exit code read, in place of Start-Process -Wait -PassThru, which raced the version read-back on run 37653903394), and the node-source pin back to c4459193 (44b63ac9). App gate GREEN on build-2 on that tree at 18:05 BST: 257 + 32 + 8, rc 0. Payload inputs on the dl host at 18:04 BST: igneumd.exe 49502cc7, igneum-miner.exe b4871b5d (c4459193's Windows pair, the 0.3.20 release's bytes), igneum-worker-cuda.exe d7a413c7, igneum-worker-opencl-intel.exe af53f194, igneum-gpu-telemetry 0d68d06e, the Linux prover pair.
|
||||
|
||||
**The GitHub exception window, from 18:02 BST:** GitHub answers "Your account was suspended" (403) to every call from the igneum-labs login, API and git; the windows.yml dispatch at 18:04 BST was that 403 and no run started. Main's ruling: no lane pushes, fetches or polls GitHub, not even a retry; the box mirror /srv/igneum.git on build-1 and build-2 is origin for every lane; the box gate stamp replaces merge-to-master.sh's CI wait; the window and its start are recorded here and closed by a row when the login is restored. release-0.3.21 44b63ac9 reached both mirrors at 18:12 BST; master a4bca198 was fast-forwarded onto the mirrors (they had sat at 83977817) so every lane's origin carries a current master.
|
||||
|
||||
**Windows without windows.yml:** the 0.3.10 shape. igneum-app.exe cross-built on build-1 from 44b63ac9 (GNU target, 151803c7, 4,232,704 B; igneum-ota-sign.exe ddfd9444; igneum-prove-verify.exe dbda5323), the payload zip igneum-windows-app-0.3.21-44b63ac9.zip 586beedd and the installer kit installer-kit-44b63ac9.zip 6d0b5437 on the dl host; the window host (MSVC, WebView2) and the installer (Inno Setup, rcedit) only build on a Windows box, so a signed job on PC 2 (run-20261007-172000, woken 18:20 BST) builds both, reads --version off the three exes and posts the installer back through the relay; the smoke (install silent, --version read, the app starts and exits clean) runs on PC 2 by a following signed job and is the gate line. PC 2's agent polled the relay at 18:23 BST while its app, node and miners had been down since 17:27 BST (the Intel driver install), so the jobs reach it; no job on PC 1.
|
||||
|
||||
**The Mac:** Igneum-Miner-0.3.21.dmg rebuilt under the build lock at 18:15 BST with c4459193's Mac node pair (igneumd-mac b306baba, igneum-miner-mac deb4d263, the 0.3.20 release's bytes): 490919d9, 44,538,877 bytes, version 0.3.21 build 202610071714. The earlier fb517a11 (96161037's Mac node) never ships.
|
||||
|
||||
**Publish reading:** about 19:15 BST on the smoke's green; the staging in a scratch copy with the live floor file and the 0.3.20 hive package unchanged; the apps on the pollers, the Mac first.
|
||||
|
|
|
|||
|
|
@ -27,3 +27,19 @@ Three commits on 96161037: bd710a36 the sub-version 3 re-pin (byte 7, igneum-pow
|
|||
**Main (17:4x BST): yes to the second node per standing box**, three waves of 5/5/4 after the genesis pair locks, nothing stopped on the old chain, with two conditions: (1) a 24-hour exception to the one-miner-per-GPU rule, not a new rule: when the apps move to Devnet 3 and the old chain's miners stop, each box is back to one miner (written as an exception with its end in the fleet notes); (2) the contention read on wave 1 decides the fallback mechanically: a live miner's rate on any of the five down more than 10 percent against its hour-before mean, or the dn3 node's template latency above the 0.3.20 gate figure, takes the 3070 set for the remaining waves without asking; spend under the USD 1,000 ceiling either way.
|
||||
|
||||
**The app side of 0.3.22 (the shipper):** the app's node starts on igneum-devnet-3 through its packaged config (Runtime.network "devnet" with devnet_suffix 3, read from igneum-app.json in the 0.3.22 package; the OTA update replaces the package, so the signed 0.3.22 update is the move), with node_dir devnet-3 (a fresh datadir beside devnet-v4, the old chain's kept for the way back), the node_override_file None on a suffixed devnet (the node refuses the file; the OTA manifest's consensus.override is ignored with a log line on devnet-3), the chain scene, the ladder, first-block and earnings reading the new chain from zero, the prover on the new chain's records; the manifest for the 0.3.22 publish carries channel "devnet-3". Cut after the genesis on its own branch release-0.3.22 off release-0.3.21's tip; published by signed update when Devnet 3 has 24 hours (main's clock).
|
||||
|
||||
## 5. The genesis: 69d1b56e, 18:06:19 BST
|
||||
|
||||
**The timestamp fault and the fix:** fa7f854f and 21d8f454 carried a genesis timestamp of 2026-10-08T00:00:00Z, so every block read "too far into the future"; the node lane's 69d1b56e sets 2026-10-07T00:00:00Z (genesis hash 4020cb4382e3fe4b…b925, test `every_compiled_genesis_lies_in_the_past_of_the_clock`). ab9af79f is void with it; the igneum-devnet-3 digest with no override file on 69d1b56e is 83eb50cdf2eda4cb…22b2.
|
||||
|
||||
**Gates on 69d1b56e, every one green:** build-1 release build 18:03:03 BST; box suites on build-2 (kaspa-consensus whole 120 + 1 + 1 at 18:02:17, igneum-exec 36 at 18:03:09, kaspa-consensus-core 152 at 18:03:40, kaspa-pow 17 at 18:04:31, igneum-miner 25 at 18:05:22 against the sub-version 3 packs); the canary set from the artefact (object 7 / 1794, era VDF from 0, ladder rung 0, fees v1, shutdown 677 ms after SIGTERM, the override file refused exit 1 while the shared devnet still takes it, two empty nodes handshaking with equal digests, the shared-devnet node rejected with the network mismatch); the pack gate PASS by construction on dn3-g1 (miner c29f33bb = the pair's, the pack exported on the box, the hive 0.3.20 miner 4050c255 refused); the program id read back fce15bf61030be57 (see the correction below).
|
||||
|
||||
**The pairs:** node-lane pair igneumd 0751598f (57,816,736 B) and igneum-miner c29f33bb under /srv/artefacts/0322-69d1b56e/node-lane/; the build-server lane's hands pair igneumd efb54938 (57,817,120 B, GLIBC_2.39) and igneum-miner 07246920 under /hands/, seed pair fb15cecf and f8c40e1c under /seed/ (the miners byte-identical to 21d8f454's: the miner does not embed the genesis). The shipper's ruling: the node-lane bytes stand as the genesis pair on dn3-g1 and dn3-g2; the hands pair goes on the joiners, hub-1 and build-1.
|
||||
|
||||
**The genesis reading:** dn3-g1 (the Devnet 3 hub, 64.119.209.250:21703) up 18:04:55 BST, "igneumd/2.1.0-69d1b56e", digest 83eb50cd, "genesis 4020cb43… executed: chain id 4463", miner from 18:05:19, FIRST BLOCK ACCEPTED 18:06:19.920 BST ("PoW accepted c313ddac… by igneum-lottery-v2-bound, daa 0, epoch seed 4020cb43…"), 85 of 85 GPU blocks by 18:10, 287 by 18:14, 0 rejected. dn3-g2 (154.64.230.67:27017) up 18:17:58 BST on the same pair, synced from g1 (639 blocks at 18:18:52), mining from 18:18:15; 702 blocks, daa 702 at 18:19:08, 0 rejected on either; finality checkpoints 20 (985353b4…), 21 (e788fac0…, blue score 631), 22 (f45336bd…, blue score 660) identical on both logs. The genesis declared on that agreement at 18:25 BST (main noted it at 18:18 BST). The object's finality window is 7,200 DAA, so no checkpoint can lock before about 20:10 BST; the first lock is a follow-up line, not a gate (the fleet's check 2 re-lettered to "first common lock within 30 minutes of DAA 7200"). The go to build-1's seed (26631), node1-dn3 (26671) and the observer unit on the hands pair went at 18:24 BST; the joiners dn3-j1, dn3-c1 (ten-minute canary) and dn3-x1 place on the hands pair. Nothing in the go path reads GitHub (both lanes confirmed: /srv/artefacts, the box mirror for the observer clone, the dl host for the hive package and the kit zip). The executor on a fresh devnet-3 node logs "waiting for consensus to sync before the executor starts (the sink is 61,000 s old)" until the first block, then executes genesis: expected (the genesis is 17 hours old by design), not a fault; runbook row.
|
||||
|
||||
**Program id correction (the Counter lane, 18:1x BST):** Devnet 3's epoch-0 class v4 program id is fce15bf61030be57 (read in the 0.3.22 miner's "cache ready" line on build-1 at 18:10:39 BST and on dn3-g1); a785001687d8688a is the SHARED devnet's epoch-0 id (genesis edc4fa84) and the kaspa-pow pairing pin, which is unchanged because the id follows the seed. Every Devnet 3 box's gate wants fce15bf61030be57 at epoch 0 and stops the miner on 1a4230699a6b9c60 or a785001687d8688a; the per-epoch form (the miner's line equals the node's seed-derived id, read each 3,600 DAA) is for after tonight. Both paired miners on dn3-g1 printed fce15bf61030be57, so the node drew Devnet 3's seed and the record is right.
|
||||
|
||||
**The nine switches:** recorded as section 6.11 of docs/plans/counter-asic-3-node.md (branch ca3-v4-node e70535fc on the box mirror, 18:15 BST), one row per switch with state, owner, gate and the earliest Devnet 3 height; signing bonus is not gateable on 69d1b56e (c7ea1e21 silent_split missing) and is 0.3.23's; every height reads as lock time + DAA seconds at 1 block/s.
|
||||
|
||||
**Found by the 0.3.21 wipe canary, fixed 18:14:35 BST:** the Hetzner live seed 188.245.5.161:26611 was still on the old sixteen-field object (digest eada4bda) one hour forty after the 0.3.20 sweep; it was never in a wave (the 15:56 go listed the hands and bps-seed, not it). Per tier: fleet voters, hub and pool-1 unaffected (they peer on the hub); every 0.3.20 app on the floor file saw a reject line at each dial of the seed and synced through the hub and node1 instead (c22-1 did); a fresh joiner configured with only the seed could not join. The build-server lane (infra/devnet/restart-seed.sh over the ops key) installed the c4459193 seed-class igneumd 4a2d8a8d and the floor file 294f1f80, unit igneumd-v4 down about 3 s, read-back "igneumd/2.1.0-c4459193", digest 4bbbe816 MATCH, 278 blocks accepted in the first minute. Rule 5 now names the seeds with a read-back line.
|
||||
|
|
|
|||
|
|
@ -6,9 +6,10 @@ Every cut of the Igneum Miner app and its node runs under these. The dated plan
|
|||
2. **Nothing is staged in the live downloads folder.** Stage in a scratch copy with `IGNEUM_DLSITE=<copy> publish-manifest.sh --no-deploy`; the live folder changes only in the deploy step. `publish-jobs.sh --deploy` is jobs-only. No lane removes a scratch directory it did not create.
|
||||
3. **The deploy gate is a full canary on the fleet's pods:** the fresh join through the headers proof on a WIPED datadir (decisive), synced, ten minutes mining, the hub holding a block, the relay and poison cases. Main may call the deploy on the decisive read plus a diff argument.
|
||||
4. **The kept-datadir start is a named gate in every release (main, 7 October 2026, after ledger N13).** Every canary runs both a wiped datadir and a KEPT one: a copy of a standing box's datadir from the live release, the pinned binary started on the copy on a scratch pod, "synced" or the store's rewrite line as the pass. The Windows shape too: the pinned Windows node once against a copy of PC 2's datadir (PC 2 only, never PC 1) before PC 1 gets the build. The miner-reliability register carries it as its own fault class. Why: every node build from 10db4b61 died at start on a kept 0.3.17 datadir (bincode ignores serde defaults) and no canary saw it because every canary wiped.
|
||||
4c. **The proving ids gate (main, 7 October 2026, after the 0.3.20 blocker).** On every candidate, a node started on the LIVE override file reports both proving ids (the shard program id and the aggregator id) on its proving v1 start line, and a prover's first statement against it is accepted; a zero-id statement is the known-failed shape. It runs beside the kept-datadir read, since both share the warm pod. Why: c4459193 read the ids as unknown, built statements with zeros and refused every proof; a sweep would have stopped every prover's pay.
|
||||
4a. **Every gate starts on every candidate the moment its binary builds, never after the pin (the project lead, 7 October 2026).** The digest and mixed-version gates, the kept-datadir start, the relay and poison cases and the wipe canary all begin on each candidate binary as it lands; a struck candidate's runs are stopped and its successor's begin. The post-pin wait is then the longest single form (about 80 minutes, the wipe), not the sum.
|
||||
4b. **Warm pods per gate class (the project lead, 7 October 2026, ordered to the fleet lane).** The fleet keeps synced pods warm for each gate class so a case form's target starts at the tip (a kept copy of the live line, caught up), never from a kept copy far behind it; the wipe canary is the only full IBD in the set.
|
||||
5. **Rollout in waves, each box read back (the project lead, 7 October 2026, replacing one-box-at-a-time):** PC 1 first, then PC 2, the Mac, the seed, the hands and the fleet in parallel waves as the lock lines allow; a lock line from the hub between waves; hold if the frozen table's signed share reads under 75; every box read back by its commit string. When the publish moves the consensus floor (a new digest), every 0.3.x node on the old file refuses the new ones as peers until it is swept, so the seed, the hands and the fleet move in the first wave with the apps' pollers, not last. Every lock line of a sweep that replaces nodes carrying a consensus floor names the date the sweep must finish (0.3.20: before 13 October 2026 09:00 UK).
|
||||
5. **Rollout in waves, each box read back (the project lead, 7 October 2026, replacing one-box-at-a-time):** PC 1 first, then PC 2, the Mac, the seed, the hands and the fleet in parallel waves as the lock lines allow; a lock line from the hub between waves; hold if the frozen table's signed share reads under 75; every box read back by its commit string. When the publish moves the consensus floor (a new digest), every 0.3.x node on the old file refuses the new ones as peers until it is swept, so the seed, the hands and the fleet move in the first wave with the apps' pollers, not last. Every lock line of a sweep that replaces nodes carrying a consensus floor names the date the sweep must finish (0.3.20: before 13 October 2026 09:00 UK). The wave list is written, not remembered: every sweep's first wave names each Hetzner seed by address (188.245.5.161:26611 for the shared devnet; the testnet seeds when they move) beside the hands and the fleet, and the seed's row closes only on its own read-back line (string, digest, first accepted block) from the lane that holds its key (the build-server lane, infra/devnet/restart-seed.sh). Added 7 October 2026 after the 0.3.20 sweep left the seed on the old object for one hour forty, found by the 0.3.21 wipe canary's reject lines.
|
||||
6. **Read-back is by commit string plus digest plus engine:** on 0.3.18+ nodes igneum_getNodeInfo powEngine must read "igneum-pow" ("stub" = FAIL); on earlier trees `strings igneumd | grep -c igneum-pow/src/` above zero. The miner embeds no commit string; its pairing is the build line and the sha.
|
||||
7. **igneum-pow pairing:** a fork build takes igneum-pow by path from the igneum worktree it sits in; build each node tree inside its own app worktree whose igneum-pow is the pinned tree; the pairing log line names it. Master's build tools need rust-toolchain.toml in the tree (the app tree's pin applies to a vendor worktree under it; a standalone node checkout is unpinned until the node line carries its own file).
|
||||
8. **glibc classes:** HiveOS 2.31 (`--ship hive`, smoke in ubuntu:20.04 on the box), seeds and generic 2.35 (`--ship seed`), fleet 24.04 boxes native 2.39.
|
||||
|
|
|
|||
BIN
docs/plans/site-ui-5-shots/404__1440-dark.png
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
docs/plans/site-ui-5-shots/404__1440-light.png
Normal file
|
After Width: | Height: | Size: 225 KiB |
BIN
docs/plans/site-ui-5-shots/404__390-dark.png
Normal file
|
After Width: | Height: | Size: 238 KiB |
BIN
docs/plans/site-ui-5-shots/404__390-light.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
docs/plans/site-ui-5-shots/app__1440-dark.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/plans/site-ui-5-shots/app__1440-light.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
docs/plans/site-ui-5-shots/app__390-dark.png
Normal file
|
After Width: | Height: | Size: 586 KiB |
BIN
docs/plans/site-ui-5-shots/app__390-light.png
Normal file
|
After Width: | Height: | Size: 597 KiB |
BIN
docs/plans/site-ui-5-shots/bench__1440-dark.png
Normal file
|
After Width: | Height: | Size: 478 KiB |
BIN
docs/plans/site-ui-5-shots/bench__1440-light.png
Normal file
|
After Width: | Height: | Size: 478 KiB |
BIN
docs/plans/site-ui-5-shots/bench__390-dark.png
Normal file
|
After Width: | Height: | Size: 367 KiB |
BIN
docs/plans/site-ui-5-shots/bench__390-light.png
Normal file
|
After Width: | Height: | Size: 364 KiB |
BIN
docs/plans/site-ui-5-shots/claims__1440-dark.png
Normal file
|
After Width: | Height: | Size: 549 KiB |
BIN
docs/plans/site-ui-5-shots/claims__1440-light.png
Normal file
|
After Width: | Height: | Size: 548 KiB |
BIN
docs/plans/site-ui-5-shots/claims__390-dark.png
Normal file
|
After Width: | Height: | Size: 549 KiB |
BIN
docs/plans/site-ui-5-shots/claims__390-light.png
Normal file
|
After Width: | Height: | Size: 547 KiB |
BIN
docs/plans/site-ui-5-shots/dev-fee__1440-dark.png
Normal file
|
After Width: | Height: | Size: 332 KiB |
BIN
docs/plans/site-ui-5-shots/dev-fee__1440-light.png
Normal file
|
After Width: | Height: | Size: 332 KiB |
BIN
docs/plans/site-ui-5-shots/dev-fee__390-dark.png
Normal file
|
After Width: | Height: | Size: 277 KiB |
BIN
docs/plans/site-ui-5-shots/dev-fee__390-light.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
docs/plans/site-ui-5-shots/download__1440-dark.png
Normal file
|
After Width: | Height: | Size: 590 KiB |
BIN
docs/plans/site-ui-5-shots/download__1440-light.png
Normal file
|
After Width: | Height: | Size: 605 KiB |
BIN
docs/plans/site-ui-5-shots/download__390-dark.png
Normal file
|
After Width: | Height: | Size: 518 KiB |
BIN
docs/plans/site-ui-5-shots/download__390-light.png
Normal file
|
After Width: | Height: | Size: 528 KiB |
BIN
docs/plans/site-ui-5-shots/evidence__1440-dark.png
Normal file
|
After Width: | Height: | Size: 517 KiB |
BIN
docs/plans/site-ui-5-shots/evidence__1440-light.png
Normal file
|
After Width: | Height: | Size: 516 KiB |
BIN
docs/plans/site-ui-5-shots/evidence__390-dark.png
Normal file
|
After Width: | Height: | Size: 309 KiB |
BIN
docs/plans/site-ui-5-shots/evidence__390-light.png
Normal file
|
After Width: | Height: | Size: 311 KiB |
BIN
docs/plans/site-ui-5-shots/explorer__1440-dark.png
Normal file
|
After Width: | Height: | Size: 381 KiB |
BIN
docs/plans/site-ui-5-shots/explorer__1440-light.png
Normal file
|
After Width: | Height: | Size: 385 KiB |
BIN
docs/plans/site-ui-5-shots/explorer__390-dark.png
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
docs/plans/site-ui-5-shots/explorer__390-light.png
Normal file
|
After Width: | Height: | Size: 266 KiB |
BIN
docs/plans/site-ui-5-shots/faucet__1440-dark.png
Normal file
|
After Width: | Height: | Size: 335 KiB |
BIN
docs/plans/site-ui-5-shots/faucet__1440-light.png
Normal file
|
After Width: | Height: | Size: 335 KiB |
BIN
docs/plans/site-ui-5-shots/faucet__390-dark.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
docs/plans/site-ui-5-shots/faucet__390-light.png
Normal file
|
After Width: | Height: | Size: 276 KiB |
BIN
docs/plans/site-ui-5-shots/home__1440-dark.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
docs/plans/site-ui-5-shots/home__1440-light.png
Normal file
|
After Width: | Height: | Size: 1.2 MiB |
BIN
docs/plans/site-ui-5-shots/home__390-dark.png
Normal file
|
After Width: | Height: | Size: 558 KiB |
BIN
docs/plans/site-ui-5-shots/home__390-light.png
Normal file
|
After Width: | Height: | Size: 586 KiB |
BIN
docs/plans/site-ui-5-shots/journey__1440-dark.png
Normal file
|
After Width: | Height: | Size: 328 KiB |
BIN
docs/plans/site-ui-5-shots/journey__1440-light.png
Normal file
|
After Width: | Height: | Size: 336 KiB |
BIN
docs/plans/site-ui-5-shots/journey__390-dark.png
Normal file
|
After Width: | Height: | Size: 327 KiB |
BIN
docs/plans/site-ui-5-shots/journey__390-light.png
Normal file
|
After Width: | Height: | Size: 337 KiB |
BIN
docs/plans/site-ui-5-shots/ledger__1440-dark.png
Normal file
|
After Width: | Height: | Size: 345 KiB |
BIN
docs/plans/site-ui-5-shots/ledger__1440-light.png
Normal file
|
After Width: | Height: | Size: 346 KiB |
BIN
docs/plans/site-ui-5-shots/ledger__390-dark.png
Normal file
|
After Width: | Height: | Size: 374 KiB |
BIN
docs/plans/site-ui-5-shots/ledger__390-light.png
Normal file
|
After Width: | Height: | Size: 372 KiB |
BIN
docs/plans/site-ui-5-shots/litepaper__1440-dark.png
Normal file
|
After Width: | Height: | Size: 488 KiB |
BIN
docs/plans/site-ui-5-shots/litepaper__1440-light.png
Normal file
|
After Width: | Height: | Size: 489 KiB |
BIN
docs/plans/site-ui-5-shots/litepaper__390-dark.png
Normal file
|
After Width: | Height: | Size: 396 KiB |
BIN
docs/plans/site-ui-5-shots/litepaper__390-light.png
Normal file
|
After Width: | Height: | Size: 398 KiB |
BIN
docs/plans/site-ui-5-shots/live__1440-dark.png
Normal file
|
After Width: | Height: | Size: 676 KiB |
BIN
docs/plans/site-ui-5-shots/live__1440-light.png
Normal file
|
After Width: | Height: | Size: 611 KiB |
BIN
docs/plans/site-ui-5-shots/live__390-dark.png
Normal file
|
After Width: | Height: | Size: 377 KiB |
BIN
docs/plans/site-ui-5-shots/live__390-light.png
Normal file
|
After Width: | Height: | Size: 386 KiB |
BIN
docs/plans/site-ui-5-shots/metamask__1440-dark.png
Normal file
|
After Width: | Height: | Size: 407 KiB |
BIN
docs/plans/site-ui-5-shots/metamask__1440-light.png
Normal file
|
After Width: | Height: | Size: 407 KiB |
BIN
docs/plans/site-ui-5-shots/metamask__390-dark.png
Normal file
|
After Width: | Height: | Size: 350 KiB |
BIN
docs/plans/site-ui-5-shots/metamask__390-light.png
Normal file
|
After Width: | Height: | Size: 351 KiB |
BIN
docs/plans/site-ui-5-shots/miner__1440-dark.png
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
docs/plans/site-ui-5-shots/miner__1440-light.png
Normal file
|
After Width: | Height: | Size: 682 KiB |
BIN
docs/plans/site-ui-5-shots/miner__390-dark.png
Normal file
|
After Width: | Height: | Size: 477 KiB |
BIN
docs/plans/site-ui-5-shots/miner__390-light.png
Normal file
|
After Width: | Height: | Size: 285 KiB |