test(integration): seed a genesis vesting fixture for the solo-precompile suite - #498
Conversation
…pile suite The release-test solo-precompile suite verifies the solo precompile cannot drain a vested (locked) balance. sei-chain deprecated live MsgCreateVestingAccount on fresh chains, so that fixture can no longer be built by a tx mid-test — seed it in genesis instead, via the new SeiNetwork spec.genesis.accounts[].vesting field (seictl v0.0.68). Both TestNightlyRelease and TestNightlyGigaMixedRelease (solo.spec.ts runs in both) now derive a second identity and fund it with a continuous vesting schedule (1000000usei locked of a 2000000usei balance, unlocking to 2030), and hand its address + mnemonic to the release-test Job via SEI_VESTING_ADDRESS / SEI_VESTING_MNEMONIC (mirroring the SEI_ADMIN_* pair + the unprefixed VESTING_ADDRESS alias). Consumer side (qa-testing solo.spec.ts rewrite to use this fixture) lands separately; both are gated together by xreview before merge.
…ants Per step-4 xreview (solidity-developer + kubernetes-specialist both flagged): note that Balance must exceed Locked (spendable remainder pays the test's association fee) and that the lock depends on seictl's assembler anchoring StartTime at genesis time. A run-time nonzero-locked guard is a tracked follow-up (deferred: StartTime=genesis is confirmed in the v0.0.68 assembler).
PR SummaryLow Risk Overview The harness derives a vesting identity alongside the admin, provisions Reviewed by Cursor Bugbot for commit def5c41. Bugbot is set up for automated code reviews on this repo. Configure here. |
Summary
Restores the solo-precompile locked-balance coverage that qa-testing#149 had to skip.
TestNightlyReleaseandTestNightlyGigaMixedRelease(solo.spec.ts runs in both) now derive a second identity and fund it in genesis with a continuous vesting schedule (1000000useilocked of a2000000useibalance, unlocking to 2030) via the newSeiNetwork spec.genesis.accounts[].vestingfield (from #496 / seictl v0.0.68), then hand its address + mnemonic to the release-test Job asSEI_VESTING_ADDRESS/SEI_VESTING_MNEMONIC(+ the unprefixedVESTING_ADDRESSalias) — mirroring the existing admin-identity pattern exactly.This replaces the deprecated live
seid tx vesting create-vesting-accountthe test used to build its fixture (sei-chain #3714 rejects it on nightly's chain-id).Consumer
The qa-testing test that reads this fixture: sei-protocol/qa-testing
tests/vesting-genesis-fixture(companion PR). That PR un-skips the test and consumesSEI_VESTING_MNEMONIC.Merge + deploy ordering (important)
This PR builds against main (which has #496's SDK
Vestingfield + seictl v0.0.68). But the restored test only runs correctly once all of these are true at nightly time:integration-harnessimage built,release-testimage built,vesting), andRELEASE_TEST_IMAGE(+ harness image) bumped to pick up 1–2.Items 3–4 are platform/Flux changes tracked separately (steps 3 + 5 of the workstream).
xreview
Gated by a 4-lens xreview (kubernetes-specialist [dissenter], solidity-developer, security-specialist, idiomatic-reviewer) — RESOLVED, unanimous. Key-derivation parity (Go keygen ↔ cosmjs/CLI) verified airtight; the continuous schedule keeps ~999.9k of the 1 sei locked for the whole run; the
solo Claimis all-or-nothing and reverts. One non-blocking follow-up filed: a run-time nonzero-locked guard (deferred — StartTime=genesis is confirmed in the assembler; the two load-bearing invariants are documented in the fixture comment).Test plan
go vet -tags integration ./test/integration/...,gofmt,golangci-lint --build-tags=integrationclean on the diff🤖 Generated with Claude Code