Skip to content

test(integration): seed a genesis vesting fixture for the solo-precompile suite - #498

Merged
bdchatham merged 2 commits into
mainfrom
feat/nightly-vesting-fixture
Jul 23, 2026
Merged

test(integration): seed a genesis vesting fixture for the solo-precompile suite#498
bdchatham merged 2 commits into
mainfrom
feat/nightly-vesting-fixture

Conversation

@bdchatham

Copy link
Copy Markdown
Collaborator

Summary

Restores the solo-precompile locked-balance coverage that qa-testing#149 had to skip. TestNightlyRelease and TestNightlyGigaMixedRelease (solo.spec.ts runs in both) now derive a second identity and fund it in genesis with a continuous vesting schedule (1000000usei locked of a 2000000usei balance, unlocking to 2030) via the new SeiNetwork spec.genesis.accounts[].vesting field (from #496 / seictl v0.0.68), then hand its address + mnemonic to the release-test Job as SEI_VESTING_ADDRESS / SEI_VESTING_MNEMONIC (+ the unprefixed VESTING_ADDRESS alias) — mirroring the existing admin-identity pattern exactly.

This replaces the deprecated live seid tx vesting create-vesting-account the 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 consumes SEI_VESTING_MNEMONIC.

Merge + deploy ordering (important)

This PR builds against main (which has #496's SDK Vesting field + seictl v0.0.68). But the restored test only runs correctly once all of these are true at nightly time:

  1. this PR merged → a new integration-harness image built,
  2. the qa-testing companion PR merged → a new release-test image built,
  3. the nightly sidecar image is built from seictl ≥ v0.0.68 (so the assembler honors vesting), and
  4. the nightly cronjob's RELEASE_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 Claim is 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=integration clean on the diff
  • Integration run (needs a live cluster + a ≥v0.0.68 sidecar) — validated at nightly once the deploy items above land

🤖 Generated with Claude Code

…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).
@cursor

cursor Bot commented Jul 23, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Changes are limited to integration test provisioning and K8s job env/secrets; no production controller or runtime behavior is modified.

Overview
Nightly integration (TestNightlyRelease and TestNightlyGigaMixedRelease) now seeds a second genesis account with a continuous vesting schedule so the external release-test harness can run solo-precompile locked-balance coverage without live MsgCreateVestingAccount.

The harness derives a vesting identity alongside the admin, provisions 2M usei with 1M usei locked until 2030 via sei.GenesisAccount.Vesting, and passes address + mnemonic into the release-test Job through a dedicated Secret and SEI_VESTING_* / VESTING_* env vars, mirroring the existing admin wiring. vestingFixture* constants and comments document the balance vs. locked invariants and the seictl StartTime dependency.

Reviewed by Cursor Bugbot for commit def5c41. Bugbot is set up for automated code reviews on this repo. Configure here.

@bdchatham
bdchatham merged commit da832dd into main Jul 23, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant