Files
skunk-net-e2e/CHECKPOINT-2026-04-03.md
2026-04-03 17:17:40 -04:00

3.4 KiB

Checkpoint 2026-04-03

This checkpoint captures the latest live state of the local instant-swap E2E bring-up.

What Is Working

  • Clean end-to-end bootstrap through ./local-e2e-up.sh after resetting local state.
  • wire-nodeop comes up cleanly and the Wire batch operator services stay running.
  • Real Eth -> Wire delivery is working through the live ETH batch operator.
  • The Wire depot emits a real outbound Wire -> Sol epoch for the instaswap settlement.
  • Solana ingest_epoch succeeds for that outbound epoch on the fresh chain.

Current Blocker

The Solana batch operator fails on process_messages for the first live instaswap_settlement message.

Observed error:

Transaction simulation failed: Error processing Instruction 1:
custom program error: 0xbc4

0xbc4 is decimal 3012, which maps to Anchor AccountNotInitialized.

Current Diagnosis

The transport path is not the blocker anymore.

What we proved on the fresh cluster:

  • ETH emits OPPMessage / OPPEpoch
  • ETH batch operator ingests that epoch into Wire
  • Wire depot creates the xswap
  • Wire depot emits outbound Solana epoch 0
  • Solana ingest_epoch accepts that epoch

The remaining failure is inside Solana settlement execution for handle_instaswap_settlement() in:

  • capital-staking/programs/liqsol-core/src/instructions/opp/yield_hub.rs

The most likely issue is one missing or wrongly-derived account in the batch-operator process_messages remaining account list, or one account that the live deploy path did not initialize even though the test harness does.

Primary suspects:

  • extra_account_meta_list
  • distribution_state
  • bridge_vault_ata
  • bucket_token_account
  • liqsol_mint

Reproduction

Fresh bring-up:

./local-compose.sh down -v
rm -rf .local/wire-node .local/wire-batch-operators .local/e2e
./local-e2e-up.sh

Trigger the live ETH instaswap:

./local-compose.sh exec -T hardhat bash -lc \
  'cd /workspace/wire-ethereum && \
   HH_SCRIPT_ARGS="instaswap 5.0000 1.0000 B3bVKtqAJxRp4RUbzmUXVUdF4CRtaHfjnNfKzCd9Fy7T" \
   npx hardhat run src/scripts/outpost/wire_yield_hub_live.ts --network anvil_local'

Inspect the Solana batch operator log:

tail -n 120 .local/wire-batch-operators/sol/1/log/relay.log

Expected current failure:

Submitting solana process_messages for epoch 0 with 1 message(s) and 15 remaining account(s)
batch operator pass failed: -32002 ... custom program error: 0xbc4

Useful Live Checks

Wire chain health:

./local-compose.sh exec -T wire-nodeop clio -u http://127.0.0.1:8887 get info

Wire ETH depot inbound epochs:

./local-compose.sh exec -T wire-nodeop \
  clio -u http://127.0.0.1:8887 get table sysio.dpeth ............2 oppepochin --limit 20

Wire xswap rows:

./local-compose.sh exec -T wire-nodeop \
  clio -u http://127.0.0.1:8887 get table sysio.iswap sysio.iswap xswaps --limit 20

Wire Sol outbound epochs:

./local-compose.sh exec -T wire-nodeop \
  clio -u http://127.0.0.1:8887 get table sysio.dpsol ............3 oppepochout --limit 20

Suggested Next Step

Reproduce the failing Solana process_messages call with the same 15 remaining accounts in a TypeScript helper or test so the full simulation logs identify the exact uninitialized account. Once that account is known, patch either:

  • the local Solana deploy/bootstrap path, or
  • the batch operator account derivation / account ordering.