125 lines
3.4 KiB
Markdown
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.
|