{"entry":{"fixtureId":"xchain-federated-bridge-v0","appSlug":"xchain-federated-bridge","appName":"Nockchain<->Base Federated Bridge (withdrawal)","reportId":"lab_xchain-federated-bridge-v0_20260610225855217","generatedAt":"2026-06-10T22:58:55.217Z","status":"pass","jsonPath":"/bundle/server-functions/default/.nocklab/xchain-federated-bridge.report.json","markdownPath":"/bundle/server-functions/default/.nocklab/xchain-federated-bridge.report.md","reportHash":"sha256:035414ed3867ca0b9bb2567a24042e228ff263c35389ed0a34704667b528bd4b","snapshotRoot":"b8543bce2c13dbdd","badgeCandidate":{"id":"badge-candidate-xchain-federated-bridge","label":"Nockchain<->Base Federated Bridge (withdrawal) Verification Candidate","reportSlug":"xchain-federated-bridge","fixtureId":"xchain-federated-bridge-v0","status":"ready","evidenceKind":"model-attested","statusReDerived":"pass","statusConsistent":true,"kernelHash":null,"kernelVerified":false,"baseDeploymentHash":null,"baseVerified":false,"signatureStatus":"unsigned","evidence":{"reportHash":"sha256:035414ed3867ca0b9bb2567a24042e228ff263c35389ed0a34704667b528bd4b","snapshotRoot":"b8543bce2c13dbdd","invariantPacks":[]}},"stepsPassed":2,"stepsTotal":2,"invariantsPassed":5,"invariantsTotal":5,"alertsTriggered":0,"snapshotsCaptured":3,"adapterObservationCount":0,"invariantPackCount":0},"report":{"reportId":"lab_xchain-federated-bridge-v0_20260610225855217","fixtureId":"xchain-federated-bridge-v0","generatedAt":"2026-06-10T22:58:55.217Z","app":{"name":"Nockchain<->Base Federated Bridge (withdrawal)","slug":"xchain-federated-bridge","version":"0.0.1","kernel":"xchain-federated-bridge-model"},"environment":{"mode":"mock-fakenet","grpcEndpoint":"n/a","fakenetCommand":"model","notes":["Models the REAL Nockchain<->Base bridge: a 3-of-5 federated mint-and-burn withdrawal (nockchain/crates/bridge: Nock.sol burn -> MessageInbox.sol mint).","NOCK is burned on Nockchain, 3-of-5 authorized bridge nodes attest, then wrapped-NOCK is minted on Base once >= requiredConfirmations.","Honest limit: a single-process MODEL of two chains (model-attested), not a live two-chain execution. See docs/xchain-security-model.md."]},"summary":{"status":"pass","stepsPassed":2,"stepsFailed":0,"invariantsPassed":5,"invariantsFailed":0,"alertsClear":0,"alertsTriggered":0,"snapshotsCaptured":3,"durationMs":34,"expectRejected":false,"rawStatus":"pass"},"invariantPacks":[],"steps":[{"id":"attest-and-mint","type":"bridge","title":"3-of-5 attestation -> mint on Base after finality","status":"pass","expectation":"xchain.minted == 1000","observed":"1000","beforeHash":"22b0e4d600a479f6","afterHash":"5275697a1b8cc12c","stateDiffs":[{"path":"xchain.minted","before":"0","after":"1000"},{"path":"xchain.mints","before":"[]","after":"[{\"id\":\"wd-001\",\"amount\":1000,\"attestedBy\":[\"node-1\",\"node-2\",\"node-3\"],\"confirmations\":12}]"}],"durationMs":19},{"id":"settle","type":"bridge","title":"Withdrawal settled on both chains","status":"pass","expectation":"xchain.settlement.0 == claimed","observed":"claimed","beforeHash":"5275697a1b8cc12c","afterHash":"b8543bce2c13dbdd","stateDiffs":[{"path":"xchain.settlement","before":"[\"locked\"]","after":"[\"claimed\"]"}],"durationMs":26}],"invariants":[{"id":"supply-conserved","title":"No wrapped value minted on Base beyond what was burned on Nockchain","severity":"critical","status":"pass","observed":"minted 1000 <= burned 1000; all 1 mint(s) backed by a burn","expected":"minted <= burned and every mint backed by a recorded burn under xchain"},{"id":"quorum-authorized","title":"Every mint carries >= 3-of-5 distinct authorized attestations","severity":"critical","status":"pass","observed":"all 1 mint(s) have >= 3 distinct authorized attestations","expected":"each mint attested by >= threshold distinct authorized signers under xchain"},{"id":"replay-safe","title":"Each withdrawal id is minted at most once","severity":"critical","status":"pass","observed":"all 1 message id(s) unique","expected":"no cross-chain message id processed more than once under xchain.mints"},{"id":"finality-depth","title":"Mints only after >= requiredConfirmations on the source event","severity":"high","status":"pass","observed":"all 1 settle(s) >= 12 confirmations","expected":"every settle references a source event with >= 12 confirmations under xchain"},{"id":"atomic-settlement","title":"Terminal settlement is all-claimed or all-refunded (never one-sided)","severity":"critical","status":"pass","observed":"atomic: all 1 leg(s) claimed","expected":"terminal settlement is all-claimed or all-refunded (no mix, no stuck-locked) under xchain.settlement"}],"alerts":[],"adapterObservations":[],"stateSnapshots":[{"label":"Initial state","stateHash":"22b0e4d600a479f6","state":{"xchain":{"minted":0,"burned":1000,"signers":["node-1","node-2","node-3","node-4","node-5"],"threshold":3,"requiredConfirmations":12,"burns":[{"id":"wd-001","amount":1000}],"mints":[],"settlement":["locked"]}}},{"label":"After attest-and-mint","stateHash":"5275697a1b8cc12c","state":{"xchain":{"minted":1000,"burned":1000,"signers":["node-1","node-2","node-3","node-4","node-5"],"threshold":3,"requiredConfirmations":12,"burns":[{"id":"wd-001","amount":1000}],"mints":[{"id":"wd-001","amount":1000,"attestedBy":["node-1","node-2","node-3"],"confirmations":12}],"settlement":["locked"]}},"stepId":"attest-and-mint"},{"label":"After settle","stateHash":"b8543bce2c13dbdd","state":{"xchain":{"minted":1000,"burned":1000,"signers":["node-1","node-2","node-3","node-4","node-5"],"threshold":3,"requiredConfirmations":12,"burns":[{"id":"wd-001","amount":1000}],"mints":[{"id":"wd-001","amount":1000,"attestedBy":["node-1","node-2","node-3"],"confirmations":12}],"settlement":["claimed"]}},"stepId":"settle"}],"stateDiffs":[{"path":"xchain.minted","before":"0","after":"1000"},{"path":"xchain.mints","before":"[]","after":"[{\"id\":\"wd-001\",\"amount\":1000,\"attestedBy\":[\"node-1\",\"node-2\",\"node-3\"],\"confirmations\":12}]"},{"path":"xchain.settlement","before":"[\"locked\"]","after":"[\"claimed\"]"}],"nextActions":["Replace mock poke and peek execution with local fakenet adapter calls.","Replace command-backed fakenet metadata probes with stable gRPC-native probes once node surfaces are available.","Persist generated reports under a project workspace.","Add app-specific invariant packs as the NockApp interface stabilizes."]},"markdown":"# ✅ Nockchain<->Base Federated Bridge (withdrawal) Lab Report\n\n> **PASS** — 2/2 steps · 5/5 invariants · 0 alerts · 34ms\n\n| Field | Value |\n| --- | --- |\n| Report | `lab_xchain-federated-bridge-v0_20260610225855217` |\n| Fixture | `xchain-federated-bridge-v0` |\n| Status | ✅ pass |\n| Steps | 2 passed, 0 failed |\n| Invariants | 5 passed, 0 failed |\n| Alerts | 0 clear, 0 triggered |\n| Snapshots | 3 |\n\n## Steps\n\n- ✅ `attest-and-mint` — 1000 _(xchain.minted == 1000)_; 22b0e4d600a479f6 -> 5275697a1b8cc12c\n  - xchain.minted: 0 -> 1000\n  - xchain.mints: [] -> [{\"id\":\"wd-001\",\"amount\":1000,\"attestedBy\":[\"node-1\",\"node-2\",\"node-3\"],\"confirmations\":12}]\n- ✅ `settle` — claimed _(xchain.settlement.0 == claimed)_; 5275697a1b8cc12c -> b8543bce2c13dbdd\n  - xchain.settlement: [\"locked\"] -> [\"claimed\"]\n\n## Invariants\n\n- ✅ `supply-conserved` — minted 1000 <= burned 1000; all 1 mint(s) backed by a burn _(expected minted <= burned and every mint backed by a recorded burn under xchain)_\n- ✅ `quorum-authorized` — all 1 mint(s) have >= 3 distinct authorized attestations _(expected each mint attested by >= threshold distinct authorized signers under xchain)_\n- ✅ `replay-safe` — all 1 message id(s) unique _(expected no cross-chain message id processed more than once under xchain.mints)_\n- ✅ `finality-depth` — all 1 settle(s) >= 12 confirmations _(expected every settle references a source event with >= 12 confirmations under xchain)_\n- ✅ `atomic-settlement` — atomic: all 1 leg(s) claimed _(expected terminal settlement is all-claimed or all-refunded (no mix, no stuck-locked) under xchain.settlement)_\n\n## Alerts\n\n- No alert policies configured.\n\n## Adapter Observations\n\n- No adapter observations captured.\n\n## State Diffs\n\n- xchain.minted: 0 -> 1000\n- xchain.mints: [] -> [{\"id\":\"wd-001\",\"amount\":1000,\"attestedBy\":[\"node-1\",\"node-2\",\"node-3\"],\"confirmations\":12}]\n- xchain.settlement: [\"locked\"] -> [\"claimed\"]\n\n## Snapshot Timeline\n\n- Initial state: 22b0e4d600a479f6\n- After attest-and-mint: 5275697a1b8cc12c\n- After settle: b8543bce2c13dbdd\n\n","evidence":{"stateDiffCount":3,"snapshotCount":3,"alertCount":0,"triggeredAlertCount":0,"clearAlertCount":0,"triggeredCriticalAlertCount":0,"triggeredWarningAlertCount":0,"triggeredInfoAlertCount":0,"environmentMode":"mock-fakenet","grpcEndpoint":"n/a","environmentNoteCount":3,"nextActionCount":4,"firstNextAction":"Replace mock poke and peek execution with local fakenet adapter calls.","invariantPackCount":0,"invariantPackIds":[],"invariantPackDomains":[],"firstInvariantPackPath":"","changedPaths":["xchain.minted","xchain.mints","xchain.settlement"],"markdownPreview":"# ✅ Nockchain<->Base Federated Bridge (withdrawal) Lab Report"}}