Conversation
|
e2e: three runs, all green. Every one passed
Overrides on all three: The 17 are master's 15 plus
|
…ve the LIQ reward flow end to end
The bootstrap configures the swap, opens one shadow symbol per registered liq
token and sets the kicker; the mock yield pools are opt-in
(--enable-mock-liq-pools), seeded inside the epoch-0 window like the mock
reserves. Steps.contracts.sysio.{liq,swap} are the per-action factories;
Steps.user.planProvisionWire is the shared WIRE-user provisioning
flow-swap-from-wire carried locally.
flow-liq-yield: synd -> parked -> createlink sweeps it -> report_liq_yield ->
liqpending -> the batch operators' queueyield and tickyield -> claim pays
exactly owed(row, index) -> desyndicate -> DESYNDICATE_LIQ pays the liqSOL ATA.
Two harness fixes the run surfaced: confirmSignature checked a tx's err only
after returning on a confirmed status, so an on-chain failure passed as
success; WireClient.symbolCodeKeyRange reads a KV row keyed by one symbol_code
exactly (a bare code as a bound is a nodeop parse error).
.pnpmfile.cjs takes WIRE_LIBRARIES_TS_PATH / WIRE_SYSIO_PATH so a worktree links
its sibling worktrees. Pairs with wire-sysio#634 and wire-libraries-ts#84.
Change-Id: I67ceaa5927bb8deb4a71ed70426e223e41a44b22
sdk-core and shared to 1.0.92, the wire-libraries-ts release carrying the regenerated SysioContractTypes for sysio.liq and sysio.swap (wire-libraries-ts#84). Produced by scripts/update-wireio-deps.mjs. Change-Id: I803eca9e735ebf7082843418b8945adfb537fac0
482fd8f to
dea084b
Compare
f62ad4a to
2dd5236
Compare
Stacked on #98 (
simple_swap). The branch also carriesorigin/master(21 commitssimple_swaplacks, including #93's WIRE-352 harness changes), so the files view includes those until #98 catches up with master. Pairs with Wire-Network/wire-sysio#634 (the depot side:sysio.liq, the msgch handlers, the depot cranks, thecreatelinksweep hook) and Wire-Network/wire-libraries-ts#84 (the regeneratedSysioContractTypesthis harness compiles against); an e2e dispatch needs all three branch overrides.Bootstrap
SwapConfig(sysio.swap::setconfig— governancesysio, system token9,WIRE),ShadowLiqTokens(onesysio.liq::createper registered liq token:LIQETH,LIQSOL) andLiqConfig(sysio.liq::setkicker), betweenMockReservesandUnderwriterConfig.MockLiqPoolsis opt-in —--enable-mock-liq-pools/ClusterBuildOptions.enableMockLiqPools, default false at every layer and persisted inClusterConfigSchema— the same five-layer shape as--enable-mock-reserves. It seeds onesysio.liq::regliqpoolyield pool per shadow inside the epoch-0 window, minting the pool shadow from nothing, which is why a real / external depot never sets it. The pools' tick pacing (a 30 s horizon, a 30 % depth cap) lets onetickyieldsell a whole reported yield, which is what makes the flow's claim assertion exact.Steps.contracts.sysio.liq(planCreate,planSetkicker,planRegliqpool,planSweep,planClaim,planDesyndicate) andSteps.contracts.sysio.swap(planSetconfig): one write per Step, typed on the generated action data.Steps.user.planProvisionWireis the shared home of the WIRE-user provisioningflow-swap-from-wirecarried locally.flow-liq-yieldThe reward flow on the real
liqsol_corepaths and the real depot contracts, nothing injected and nothing cranked by hand:synd→ the syndication parks (the key is not linked) →createlink→ the inline sweep delivers it → bonus yield +report_liq_yield→LIQ_YIELDlands inliqpending, outside supply → the batch operators'queueyieldmints it into the swap's reservoir → theirtickyieldsells it and the index moves →claimpays exactlyowed(row, index)and the pot falls by the same →desyndicate→DESYNDICATE_LIQin aDEPOT_OUTPOST_SOLANAenvelope → the user's liqSOL ATA grows by the burned amount. The depot's epoch is asserted to keep advancing across every attestation. Reads go through the typed table accessors; every write is a Report Step; budgets derive fromProtocolTiming.Harness fixes the run surfaced
confirmSignaturereturned on aconfirmed/finalizedstatus before looking at the transaction'serr. A transaction the runtime processed with an error is still included in a block, so it reaches those statuses too — an on-chain failure was reported as success. Found when a liqSOL deposit refused byEpochRewardsActivepassed as OK andsyndthen found the ATA it never created; it also meantsubmitWithEpochRewardsRetry's on-chain-failure branch could never fire. The error is now checked first; tests added for the confirmed and finalized shapes.WireClient.symbolCodeKeyRange(field, code): the exact[code, code + 1)KV range for a row keyed by onesymbol_code(JSON key object, uint64 as a decimal string;lower_boundinclusive,upper_boundexclusive). A bare code string as a bound is a nodeop parse error, andsysio.liq::yieldidx's value carries no identity, so it can only be read this way. Tests added.Also
.pnpmfile.cjs:WIRE_LIBRARIES_TS_PATH/WIRE_SYSIO_PATHpoint the sibling links at worktrees (theLinked …lines are the record of what resolved).oppEnvelopeScan.containsDesyndicateLIQ;SolanaLiqSyndicationTool.readLiqsolBalance.flow-liq-syndication: its user never links, so under #634 the syndication parks rather than credits — the scenario and README say so, and its liveness phase is namedDepotKeepsAdvancing.Environment note
Tools master's roster seeding (#87) calls
OPPInbound.installInitialRoster, which wire-ethereumnextonly has as a private_installInitialRoster; the public one is Wire-Network/wire-ethereum#205 (wne-41_next-fix). Until #205 merges, a local run of ANY flow on this branch needs--ethereum-pathat that branch, and an e2e dispatch needsBRANCH_WIRE_ETHEREUM=wne-41_next-fixbeside the three overrides above. Not introduced here — inherited from master. Likewise from master: theStartScriptsphase copies the pre-built@wireio/debugging-serverbundle (dist/bundle/wire-debugging-server.cjs), which the roottsc -bdoes not produce — a fresh worktree needspnpm --filter @wireio/debugging-server bundle(or the package'sprepare) before a cluster is created.CI
The repo's own
Build and testcheck is red by construction until the upstream packages publish: a standalone clone resolves@wireio/opp-typescript-modelsand@wireio/sdk-corefrom npm, and the published versions carry neither theSYNDICATE_LIQ/LIQ_YIELD/DESYNDICATE_LIQattestations (Wire-Network/wire-sysio#609 / #634's bundle) nor theswap/liqcontract types (Wire-Network/wire-libraries-ts#84). #98 is red the same way. The e2e gate with the branch overrides above is the check that exercises this branch.Verification
pnpm buildpnpm run lintpnpm test(final tree)flow-liq-yield(local,run-flow.mjs+ heartbeat monitor)confirmSignature)BRANCH_WIRE_SYSIO=feature/liq-yield-claimingBRANCH_WIRE_LIBRARIES_TS=feature/liq-yield-contract-typesBRANCH_WIRE_TOOLS_TS=feature/liq-yield-flowBRANCH_WIRE_ETHEREUM=wne-41_next-fixBRANCH_WIRE_SOLANA=codex/merge-develop-into-next-20260922)liq-yield(792 s) andliq-syndication(561 s), 2026-09-22