Generated reports

Generated report detail

Nockchain<->Base HTLC Atomic Swap

Fixture xchain-atomic-swap-v0 generated pass at 2026-06-10T22:58:55.218Z.

JSON
Status
pass
Steps
1/1
Invariants
3/3
Snapshots
2

Environment

Mode

mock-fakenet

gRPC Endpoint

n/a

Fakenet Command

model

Models a CORRECT cross-chain HTLC: both legs lock the SAME shared preimage, each under its own native hash.

Nockchain leg uses %hax = Tip5 (hoon/common/tx-engine-1.hoon); Base leg uses sha256 (an EVM precompile). The commitments DIFFER (Tip5 != sha256) but both derive from the one shared preimage, so revealing it unlocks both legs.

Timelocks are safe: the first-funded (Nockchain) refund window outlasts the Base claim window, so the counterparty cannot refund and still claim.

Honest limit: a single-process MODEL of two chains (model-attested), not live execution. The Tip5 commitment is opaque here (Tip5 is not computable in JS).

Next Actions

  1. Replace mock poke and peek execution with local fakenet adapter calls.
  2. Replace command-backed fakenet metadata probes with stable gRPC-native probes once node surfaces are available.
  3. Persist generated reports under a project workspace.
  4. Add app-specific invariant packs as the NockApp interface stabilizes.

Invariant Packs

No invariant packs referenced.

Run Steps

Reveal the shared preimage -> both legs claimed

bridge

pass

claimed

Invariant Results

Each HTLC leg locks the shared preimage under a hash its own chain can compute (Tip5 vs sha256)

critical

pass

Observed all 2 leg(s) lock the shared preimage under a chain-computable hash; commitments distinct; expected each HTLC leg locks the shared preimage under a hash its own chain can compute, with distinct per-chain commitments, under xchain.

First-funded refund window outlasts the second leg's claim window (no free option)

critical

pass

Observed first-funded nockchain=200 > all other legs; expected refund timelock on the first-funded leg > claim window on every other leg under xchain.

Both legs claimed or both refunded (never one-sided)

critical

pass

Observed atomic: all 2 leg(s) claimed; expected terminal settlement is all-claimed or all-refunded (no mix, no stuck-locked) under xchain.settlement.

Alerts

No alert policies configured.

Adapter Observations

No adapter observations captured.

State Diffs

PathBeforeAfter
xchain.settlement["locked","locked"]["claimed","claimed"]

Snapshot Timeline

Initial state

initial

6269975ab9195f51

After reveal-and-claim

reveal-and-claim

9dc19dfeda68ca5b

Artifacts

Report ID

lab_xchain-atomic-swap-v0_20260610225855218

Report Hash

sha256:e2a3982bb5339c7ef6d373570b7113c51f67ee906192ec7b3e670ff83e84d2a1

Snapshot Root

9dc19dfeda68ca5b

JSON Path

/bundle/server-functions/default/.nocklab/xchain-atomic-swap.report.json

Markdown Path

/bundle/server-functions/default/.nocklab/xchain-atomic-swap.report.md

Markdown Bytes

1468

Changed Paths

xchain.settlement

Markdown Preview

# ✅ Nockchain<->Base HTLC Atomic Swap Lab Report

Alert Summary

0 triggered, 0 clear

Verification Candidate

Candidate

Nockchain<->Base HTLC Atomic Swap Verification Candidate

Status

ready

Signature

unsigned

Invariant Packs

none

Report Hash

sha256:e2a3982bb5339c7ef6d373570b7113c51f67ee906192ec7b3e670ff83e84d2a1

Snapshot Root

9dc19dfeda68ca5b