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

125 lines
3.4 KiB
Markdown

# 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:
```text
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:
```bash
./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:
```bash
./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:
```bash
tail -n 120 .local/wire-batch-operators/sol/1/log/relay.log
```
Expected current failure:
```text
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:
```bash
./local-compose.sh exec -T wire-nodeop clio -u http://127.0.0.1:8887 get info
```
Wire ETH depot inbound epochs:
```bash
./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:
```bash
./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:
```bash
./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.