ops: P0 order-enforcing upgrade-582 script, columbus-5 ContractInfo probe, freeze/unfreeze runbook #584
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#584
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Gate
P0 — blocks columbus-5 rollout of factory 1.9.0 / pair 1.15.0 (invariant F6). Do not treat merge of #582 / MR 389 as production readiness. Do not close #581 with a go on 8266 / SpaceUSD listing until this issue is done and the migrate has actually run on the live factory.
Source: internal audit
INTERNAL_KIMIK3_1787230030P0 items 1–4 (findings 3.1, 3.2, 3.5, 3.7, 3.8, 3.16, F389-06, Chain A). Same ops class as prior-audit F-01/F-02 onscripts/upgrade-514-limit-discount.sh(#514) — documented order, no script enforcement, silentlimit: 60truncation.This issue bundles the three P0 rollout controls (do not split):
upgrade-582script with paginated migrate + post-migrate smoke.WasmQuery::ContractInfo/ LCDGET /cosmwasm/wasm/v1/contract/{addr}pre-flight probe.Frontend humanization / indexer frozen-pair exclusion are P1 (before #581 relies on F6) and out of scope here — file separately if not already open.
Current codebase
What F6 already does (on
fix/582-cw20-code-id-pin, not yet onmain)Factory 1.9.0 adds
IsCodeIdWhitelistedand governanceRefreshPairAssetCodeIds/RefreshPairAssetCodeIdsBatch. Pair 1.15.0 snapshots each listed asset's liveContractInfo.code_idintoASSET_CODE_IDSat instantiate (and backfills on migrate), then every fund-moving write path (swap, provide, withdraw, limit place/fill, cancel, claim) aborts unless live id equals the pin and the factory whitelist still contains it. Fail-closed on query errors (AssetCodeIdGuardUnavailable). Refresh refuses unlisted live ids. Same-txMsgMigrateContract+ swap is impossible (live query + tx atomicity).maintoday is still factory 1.8.0 / pair 1.14.0 — no pin, no write-path re-check.What is missing (ops only — docs exist, nothing executes them)
scripts/upgrade-582-*.shupgrade-514-limit-discount.sh,upgrade-518-lp-symbol.sh. F6 order is playbook-only (skills/AGENTS_CW20_CODE_ID_PIN.mdstep 5: factory 1.9.0 before pair 1.15.0).IsCodeIdWhitelisted. Against factory ≤1.8.0 that smart query fails (unknown variant) →AssetCodeIdGuardUnavailableon every gated write on every upgraded pair until factory migrates. Fail-closed (no fund loss) but protocol liveness freeze. Nothing asserts factory cw2 ≥1.9.0 before broadcasting pair migrates.query_pairsclampslimitviacalc_limittoMAX_LIMIT = 30(dex-common/src/pagination.rs).PairsResponsehas nohas_more.upgrade-514androtate-fee-treasury.shstill querylimit: 60once and migrate that page — tail silently skipped (prior F-02). Live factory currently has 14 pairs (fits one page today; will not stay true).GetPairCountexists and is unused by those scripts' migrate loops.RefreshPairAssetCodeIdsBatchsends oneWasmMsg::Executeper pair in a single tx (factoryexecute_refresh_pair_asset_code_ids_batch). The incident pair whose token migrated to an unlisted id must fail refresh (pair refuses unlisted live ids) → whole batch reverts, blocking later-indexed pairs. Workaround (single refresh for good pairs, then batch withstart_afterpast the bad index) is verified correct in code (start_idx = start_after+1,calc_limitclamps[1,30]) but not in any runbook.verify-issue-582.shis contracts + docs greps only (pin suite ×2, version strings). No on-chain rung: noGetAssetCodeIds, noSimulation, no cw2 version assert, noGetPairCountreconcile. A green check does not mean the migrate ran or ran in order.ContractInfoassumed, not probedquery_wasm_contract_info. FactoryCreatePairhas used the same query since launch (factory/src/contract.rs~220–231) and LocalTerra passed, but a columbus-5 LCD/chain miss would abort pair migrate (pair stuck on 1.14.0 — finding 3.9) or freeze writes.GET /cosmwasm/wasm/v1/contract/{addr}is used off-chain inadd-ust1-secondary-pair.sh(contract_info.code_id) andhandoff-cl8ydeploy-to-multisig.sh(admin). No F6 pre-flight records that this endpoint returnscode_idfor every listed asset on the target LCD before migrate.gate_asset_code_idsalso coversCancelLimitOrder(s),ClaimExpiredLimitOrder(s), andWithdrawLiquidity. A third-party token wasm admin (the actor F6 defends against) can freeze all user value in a pair (LP underlying, maker escrow, parked claims) until governance whitelists + refreshes. Accounting: exits could stay open under FoT (recipient bears outbound tax; pair-sidePENDING_ESCROW/RESERVESstay consistent). Maximal freeze is a conservative choice, currently undocumented as a tradeoff, untested for cancel/claim/withdraw, and has no governance SLA.Simulation/HybridSimulationstay ungated and TWAP/OBSERVATIONSgo stale (no swap → no observation write). First swap after refresh executes against stale reserves/TWAP (~5% × frozen TVL extractable, depth-limited).SetPairPausedthrough refresh + private corrective rebalance is not inemergency-commands.mdorcw20-whitelist-policy.md. Governance timing of refresh is MEV-sensitive.RemoveWhitelistedCodeId(10184)freezes essentially every pair. Milder controls already exist:SetPairPaused/BlacklistPair/BlacklistToken. Incident runbook must say so.Playbooks that describe F6 but do not enforce it:
skills/AGENTS_CW20_CODE_ID_PIN.md,docs/runbooks/cw20-code-id-ops.md,docs/runbooks/wasm-admin-migration.md(lists #518 only),docs/runbooks/launch-checklist.md.Why this is needed
Without a factory-first, count-reconciled upgrade script, an operator following the #514/#518 pattern (or a partial/retried run) can migrate pairs before factory 1.9.0 and freeze all gated writes on those pairs until a follow-up factory migrate. Without post-migrate smoke, a silent skip of the 31st pair leaves that pair on 1.14.0 (no pin; F6 hole remains for that market). Without a columbus-5
ContractInfoprobe, pair migrate can abort mid-loop and leave a mixed version set. Without an exit-path + unfreeze runbook, the first real issuer-migrate freeze (permissionless 6036 listing, or 8266 SpaceUSD after #581) strands LP/escrow with no SLA, and the unfreeze hands stale-price arb to whoever is watching the mempool — including insiders who know refresh timing.This is the production-readiness gap the #582 contract MR explicitly does not close.
Constraints / guardrails
< 1.9.0. Skip-flags must not allow pair migrate to proceed past a failed factory assert. Opposite of #514 (that one needed pairs first); do not copy that order.pairsatlimit: 30using last pageasset_infosasstart_after. Neverlimit: 60once. After the loop,migrated_count == GetPairCount.count. Fail the run on mismatch.verify-issue-582.shgreen is not FoT-at-listing coverage. Pre-whitelist source audit (docs/runbooks/cw20-whitelist-policy.md+scripts/verify-cw20-code-ids.sh) remains the only control for FoT already behind a still-whitelisted template. Do not teach operators that F6 / this script substitutes for it.RemoveWhitelistedCodeId(10184)as the default incident response (near-protocol-wide halt). PreferSetPairPaused/BlacklistPair/BlacklistTokenfor single-market incidents.wasm store/wasm migrate/ factory execute as the contract admin / factory governance — same posture as #514/#518 (terrad-host.sh,DRY_RUN,UPGRADE582_LOCAL,SKIP_STORE). Noevalof unfiltered.env.local(grep-allowlist Vite keys only, matching #518).indexer/into root Docker to run cargo (irrelevant here, but do not add a Docker cargo path to “verify” this). Hostbash -n+DRY_RUN+ LocalTerra rehearsal.RefreshPairAssetCodeIds*→ optional remove old id. Keep old id listed until Refresh finishes.Relevant files
scripts/upgrade-514-limit-discount.shlimit: 60once; noGetPairCount)scripts/upgrade-518-lp-symbol.shDRY_RUN,UPGRADE*_LOCAL, store/migrate/verify,terrad-host.shscripts/rotate-fee-treasury.shlimit: 60enumerate; do not copyscripts/lib/terrad-host.sh,terrad-tx-events.sh,lcd-smart-query.shscripts/add-ust1-secondary-pair.sh(contract_code_id)GET /cosmwasm/wasm/v1/contract/{addr}→.contract_info.code_idscripts/qa/verify-issue-582.shbash -n/DRY_RUN(keep pin tests)scripts/qa/verify-issue-514.sh/verify-issue-518.shbash -n+DRY_RUN+ docs rg)smartcontracts/packages/dex-common/src/pagination.rsMAX_LIMIT = 30,calc_limitclamps[1,30]smartcontracts/packages/dex-common/src/factory.rsIsCodeIdWhitelisted,RefreshPairAssetCodeIds(Batch),GetPairCount,QueryMsg::Pairssmartcontracts/packages/dex-common/src/pair.rsGetAssetCodeIdssmartcontracts/contracts/factory/src/contract.rsquery_wasm_contract_info; 1.9.0 handlers; batch refresh atomicitysmartcontracts/contracts/pair/src/asset_code_id_guard.rssmartcontracts/contracts/pair/src/contract.rsGetAssetCodeIdshard-error on unmigratedsmartcontracts/tests/src/asset_code_id_pin_tests.rsskills/AGENTS_CW20_CODE_ID_PIN.mddocs/runbooks/cw20-code-id-ops.md,cw20-whitelist-policy.mddocs/runbooks/wasm-admin-migration.md,launch-checklist.md,emergency-commands.mddocs/runbooks/rebalance-mint-ust1-lp.md/scripts/rebalance-mint-ust1-lp.shdocs/contracts-terraclassic.md§ Asset CW20 code_id pindocs/contracts-security-audit.mdinvariant F6audits/INTERNAL_KIMIK3_1787230030.mdMakefile/AGENTS.md/docs/testing.mdmake verify-issue-*+ new skill rowdeployments/mainnet-soft-launch/deploy-trace.mdLive columbus-5 inventory (from #582, 2026-08-20): 14 pairs, 13 unique assets; UST1/USTR/cLUNC/cUSTC + CL8Y gems on 10184; PEARL/QUARTZ on 6036. LCD default in host scripts:
https://terra-classic-lcd.publicnode.com.Recommended direction
1.
scripts/upgrade-582-code-id-pin.shMirror #514/#518 flags:
DRY_RUN=1,UPGRADE582_LOCAL=1(allowlistedVITE_FACTORY_ADDRESS/VITE_LCD_URLfromfrontend-dapp/.env.localonly),UPGRADE582_SKIP_STORE=1+ explicit code ids,UPGRADE582_SKIP_PAIR_MIGRATE=1(factory-only retry). Useset -euo pipefail.Suggested steps (must be this order):
FACTORY_ADDRESS/ LCD.ContractInfoprobe: for factory + every listed pair asset (paginate pairs, unique CW20 addrs),GET {LCD}/cosmwasm/wasm/v1/contract/{addr}must return HTTP 2xx and a numeric.contract_info.code_id. Fail the script if any probe fails. Record LCD URL, chain-id, sample payload in the deploy trace. This is the 3.16 deploy gate.contract-state rawcontract_infoor equivalent). If already ≥1.9.0, skip factory migrate but still print the version.UPGRADE582_*_CODE_ID).{"is_code_id_whitelisted":{"code_id":10184}}(or first listed id) returns parseableCodeIdWhitelistedResponse. If this fails, do not migrate pairs.{"pairs":{"start_after":...,"limit":30}}until a short page; migrate eachcontract_addr;migrated == GetPairCount.countor die. Per pair, if migrate tx fails, stop (do not continue and claim success).RefreshPairAssetCodeIdsBatch(default off for a clean upgrade — pins are backfilled from liveContractInfoat pair migrate, so refresh is a no-op unless something drifted mid-run). When enabled: loop untilhas_more=false; on batch revert, print the skip procedure (singleRefreshPairAssetCodeIdsfor known-good, thenstart_afterpast the failing index) and exit non-zero with the failing index — do not swallow.GetAssetCodeIdsreturns two u64s; each idIsCodeIdWhitelistedis true; oneSimulation(tiny amount, either direction) returns a quote (queries are ungated — this checks the pair still answers, not that F6 would allow execute). Optionally query pair cw2 == 1.15.0. Fail the script on any miss. Print a table: pair, pin0, pin1, sim ok.Idempotence: re-running after a full success must no-op or re-smoke only (
SKIP_STORE+ already-on-version). A partial run must be safely retryable without migrating factory twice into a broken state (ensure_from_older_versionalready rejects downgrade).2. Columbus-5 probe in runbooks
Add a checklist item to
launch-checklist.md(Phase 0 or a dedicated #582 F6 migrate subsection, same shape as the #518 LP-ticker BLOCK) andwasm-admin-migration.mdstep list: run the script's probe (or a tinyscripts/qa/probe-columbus5-contract-info.shthe upgrade script sources) before broadcasting pair 1.15.0. Paste output onto the deploy-trace / launch issue (#391).3. Exit-path + unfreeze runbook
Extend
docs/runbooks/cw20-code-id-ops.md(and skill) with an Incident: code-id drift / freeze section. Record an explicit policy decision (pick one, do not leave implicit):Unfreeze procedure (Chain A mitigation):
GetAssetCodeIdsvs LCDContractInfo.code_idper asset;IsCodeIdWhitelistedfor live ids.SetPairPaused { paused: true }first (keep paused through refresh). Do not refresh while the pair is unpaused if external price moved.AddWhitelistedCodeIdif the new template is accepted (keep old id until done). If the new wasm is FoT/rebase → do not whitelist; useBlacklistToken/BlacklistPair; do not Refresh.RefreshPairAssetCodeIds(single) for the incident pair. For many pairs: batch with documented skip of the unrefreshable index (start_afterpast it; single refresh for neighbors).rebalance-mint-ust1-lp.shpattern for hub pairs). Document that first-swap-after-unpause vs stale TWAP/reserves is otherwise extractable (~depth-limited).SetPairPaused { paused: false }only after rebalance/smoke. Refresh timing is MEV-sensitive — do not announce the unpause block in public chat before the txs land.RemoveWhitelistedCodeId(10184).Also document:
GetAssetCodeIdshard-errors on pre-1.15.0 pairs (notnull);CleanLimitBookstill parks during freeze while claims stay gated (stranded parked escrow until unfreeze+claim);UpdateLimitOrderPriceis ungated (no funds).4. Verification wiring
scripts/qa/verify-issue-<this>.shor extendverify-issue-582.shso it cannot pass without the upgrade script existing,bash -n, aDRY_RUNfactory-assert path (must refuse pair migrate when factory version is stubbed< 1.9.0), pagination/GetPairCountgreps, and runbook strings (SetPairPaused,start_after,GetAssetCodeIds,ContractInfo).make verify-issue-*,AGENTS.mdplaybook row,docs/testing.mdtable, skillAGENTS_CW20_CODE_ID_PIN.mdoperator sequence pointing at the script.Acceptance criteria
scripts/upgrade-582-code-id-pin.shexists,chmod +x,set -euo pipefail, usesterrad-host.sh/lcd-smart-query.sh.IsCodeIdWhitelistedsmart-query succeeds. Covered byDRY_RUNor a LocalTerra negative test, not only a comment.limit: 30withstart_after= lastasset_infos; reconciles migrated count toGetPairCount.GetAssetCodeIds+ oneSimulation; script exits non-zero on failure.GET /cosmwasm/wasm/v1/contract/{addr}for factory + every listed asset on the target LCD (columbus-5 for mainnet) and fails closed ifcode_idis missing.start_afteris written in the runbook with a copy-pastable example (good pair, bad pair,start_afterpast bad index,has_more).cw20-code-id-ops.md/cw20-whitelist-policy.md(not implied by gate placement).launch-checklist.md+wasm-admin-migration.md+ skill +AGENTS.md+docs/testing.mdcross-link the script. #518-style BLOCK on economic listing / #581 until this migrate has run (not merely merged).make verify-issue-582(and/or this issue’s verify) greps the script + runbook and runsbash -n+DRY_RUN; cannot pass if the script is deleted.Test plan (all paths)
Static / unit (no chain)
bash -n scripts/upgrade-582-code-id-pin.sh.DRY_RUN=1with dummy factory addr: prints order factory→pairs; does not require wasm ifSKIP_STORE=1.DRY_RUN=1with factory version stub / injected cw2< 1.9.0: must exit non-zero before any pair migrate log. If DRY_RUN cannot simulate queries, add aUPGRADE582_FORCE_FACTORY_VERSIONtest hook used only by verify.limit: 60in the new script; hasget_pair_count/GetPairCount/get_pair_count; hasis_code_id_whitelisted; hasget_asset_code_ids/GetAssetCodeIds; has/cosmwasm/wasm/v1/contract/.make verify-issue-582(extended) twice (existing pin tests still pass).SetPairPaused,RefreshPairAssetCodeIds,start_after, unfreeze, 10184 halt warning.LocalTerra happy path (
UPGRADE582_LOCAL=1aftermake deploy-local)1.9.0, every pair cw21.15.0,GetPairCount== number of migrated addrs == number of smoke rows.GetAssetCodeIdson a seeded pair matches LCDContractInfo.code_idfor both assets.IsCodeIdWhitelistedtrue for those ids.Simulationstill returns a quote; an actual small swap succeeds (pins match).Ordering / partial-failure paths (LocalTerra or mocked LCD)
AssetCodeIdGuardUnavailable. Confirm the real script will not do this. Then factory-migrate recovers writes.GetPairCountstill matches./cosmwasm/wasm/v1/contract/{addr}; script exits before store/migrate.GetAssetCodeIdson unmigrated pair: smoke must treat query error as failure (L-05 hard-error shape), not as “empty pins ok”.start_after=nullreverts; follow runbook skip; other pairs refresh; incident pair still frozen until policy (blacklist vs new whitelist).Pagination correctness
pairspages (two pages + short third) and asserts three queries and 31 migrates, or document a LocalTerra fixture that creates 31 pairs. Do not accept “we only have 14 on mainnet today”.Docs / operator rehearsal
make verify-issue-399pause path + F6 refresh). Record that pause remains on through refresh.launch-checklistBLOCK language matches #518 style.Test plan — attack, hack, and abuse vectors
GetPairCountreconcileMsgMigrateContractto FoT / unlisted wasmasset_code_id_pin_tests; runbook says do not Refresh onto FoTasset_code_id_pin_testsstill in verifyRefreshAssetCodeIdsstillUnauthorizedAddWhitelistedCodeIdcode_id.env.localevalinjectionVITE_*keys, matching #518verify-issue-582false-passSKIP_PAIR_MIGRATEcannot be used to mark smoke OK for unmigrated pairs;SKIP_STOREstill requires code idsSimulationsucceeding is not treated as “pair is tradable”. Runbook notes ungated queriesNo public exploit PoC against columbus-5. LocalTerra /
cw-multi-testonly.Verification criteria
Done when all of the following are true:
make verify-issue-582(extended) passes locally, includingbash -n+DRY_RUNofupgrade-582-code-id-pin.shand docs greps for the runbook/probe.#391/ this issue comment): factory 1.8→1.9 then pairs 1.14→1.15,GetPairCountmatch, per-pairGetAssetCodeIds+Simulationtable, swap still works.< 1.9.0(log attached).ContractInfo.code_idrecorded (expect 10184 / 6036 per #582 inventory). Output pasted here or on the deploy trace.wasm-admin-migration.md,launch-checklist.md, andemergency-commands.md(pause-through-refresh pointer). Exit-path decision is a complete sentence, not “TBD”.mainand launch-checklist BLOCK remains until the columbus-5 run completes (checkboxes above stay open for the live run, or a child comment tracks it).Not done if:
verify-issue-582is still contracts-only greps; pairs are migrated with a one-shotlimit: 60; factory version is a comment in a playbook; ContractInfo support is “LocalTerra passed”; unfreeze is “just Refresh”; or #581 is closed go because “F6 merged”.marked as related to #582
marked as related to #581
marked as related to #514
mentioned in commit
b2b8b52af2mentioned in merge request !1108
Implementation MR: !1108 (stacked on !1107 /
fix/582-cw20-code-id-pin).Static verify passed (
make verify-issue-584×2,make verify-issue-582×2 including pin tests). Columbus-5 read-only ContractInfo probe (no migrate):https://terra-classic-lcd.publicnode.comterra1ejpgvv7g3hj0u6fpcnxhflqp84g0w3cnaskqkg5733ygwlmf963sfchseacode_id 11585GetPairCount14Still open on this issue: LocalTerra
UPGRADE582_LOCAL=1rehearsal log, and the live columbus-5 migrate (tx hashes + smoke table). Launch-checklist BLOCK stays until that run.mentioned in issue #582
Merge of !1108 (2026-08-21)
!1108 is merged to
main(70e79508) after:584-ops-p0-…had zero unique commits (SHA matched !1107). Real work was onfix/584-upgrade-582-ops@363b17f9.fix/582-cw20-code-id-pin, which !1107 deleted).source==target, not file conflicts.git merge-tree --write-treevsmainwas clean.Local sanity:
make verify-issue-58412/12,make verify-issue-5825/5 (pin tests + ops greps). CI was not waited on.Acceptance vs this merge
Script + runbook + verify wiring are on
main. Remaining execution checkboxes stay open:UPGRADE582_LOCAL=1aftermake deploy-local(happy path + factory-first abort)PARTIAL (non-blocking):
IsCodeIdWhitelistedis enforced on the live path, but DRY_RUN skips that query when factory cw2 is already ≥1.9.0. Factory-version refuse is covered (UPGRADE582_FORCE_FACTORY_VERSION=1.8.0). OptionalUPGRADE582_REFRESH=1batch loop does not parse wasmhas_more(default off; runbook has the skip procedure).Do not close this issue on merge. Do not close #581 go on 8266 because F6 code landed.
mentioned in issue #585
marked as related to #585
P1 freeze UX (indexer route/solve + dApp humanize) filed as #585. Not required to close this issue; this issue remains the columbus-5 / LocalTerra execution tracker.
Columbus-5 F6 migrate — PARTIAL (do not close)
Factory-first order was followed. 11 / 14 pairs are on pair 1.15.0. Three RPC resets left a mixed version set. Launch BLOCK stays. Do not treat smoke
pin1=…/nullas an unlisted pin — that pair is 10184/10184; publicnode dropped the secondIsCodeIdWhitelistedread.Store (
cl8ydeploy)e38ed8441d105e0a02d9424a3b80d7e2221c071abd76eb3628e93cf7b18fe9926C44832EBE2E81B5FA0158F5203E9618332C3FD1C4ABCC32B3B3212DCE0F66F90422927baf44992848442f62065cd42685b5b1391e8e966b79687cda05c9a8b39ABEF0B2207646188BEFD6F702ED23ADE3795A592227B2A9263F2E6BAA82BF54Factory migrate (2-of-3
multisig1+multisig2)794AAB9E3AEBF32E7D0050F260EC907722CEC8CA955B00CAA1608B235D0600DBContractInfo.code_id11602IsCodeIdWhitelisted10184 → true, 6036 → trueconfig.pair_code_idis still 11586 (1.14.0). NewCreatePairwould not pin untilUpdateConfig { pair_code_id: 11601 }.Pair migrates → 11601 (cw2 1.15.0) — 11 OK, 3 still 11586 / 1.14.0
terra1klwuxas6x7p6fjde60kq70t0hu86wvt3fvyr2vgs0nn32fnv0q4qwznwp4893779ACD3BEE9CB08FB0FBB7A901B8BE07A4BDCD758E552DEE591ECB0AB6AC4terra1y5xxv980jn0qu7n7y3slhtjehta6nlpqjkgcxl80uetdx84dxa4qegjhtx5C1A17D71788659A102216D0253F0BEF08E6DDE4B842B610A5ED1894D7EC0892terra16827w2c7zcvetck9xz8d6ds3379v77gelwra6jdafqkx9q9u0r8qvkluu06DBD464BEE1E9D3C478D65C238CDA8655092AF961B1A0ECEC9F834C1688D7B32terra1ra7cugjhchr45kdupxe2al5fna0zxu6syl8xhpanfk8dsvkq9lksf6fm9l385B41C50136C7085071C547928E0054658BD0631CAFC44330EB52E6BBB2E721terra1nqjvd2xatac5ydcs6nstw7zp2yjc20p632ycxtevtf3rr2554fqswstx0nD4EE5EBC43BD1AB26FDD396D1161065F1F952BCAF73BC8B504DBF00010B96E03terra1havxdjfyphjazc342r3cj2n3kslsptac2eunvw8uzayusywg9t4shtuz7vtx signterra1p0sd0t2ggm9ye43gp0ryadx3wwkz5hzn99hnz93ve99397xvuufsvsmw73tx signterra1mp72n97rzwmqwudzycjj0e4jveetjnp622gnprv6ugqt3hfxg60sr5gkjmterra16k6huf87gzvnlgpvf85f8xfgawl6y2l5d4d5qdpyhknqaran9s5qx63c3rF6870AF7D121CF7B945785ED4CD770CC017C66B5FC663C5F088811D6B97B64BEterra1pc7dvcucrl9sr4r2nhr2rv3ywhthskqqtvtvaerx9cff7l8gesdskjgmn68C34C10DF9C779B76F3DD25A48F4CB176DC0225C40E289F97F6D10694E2220CAterra1ceprjsxp86ggftf5e38wwt34l83e5gq7penkdnv4wsatkwcs8v6qccw55f80DD60D228C82389450EB2ED1040573DEBEBF6F14BA465C18B5BEB0613408C13terra16vxrhpvpcucu05y0nr862vf9hnqeh274uaff4s7hz4n0ea74006qf5hgqy24400E8B637B9DF96AC7D4CC52E838DEE924968292D740C76948335EAD36655Eterra1su5363453fj326u4t0kqar30f35cm3n0dc9yksg379u6875z350s4mm7h4BED1CC34831E79ED2A618C1F1ACB6165DE0B2807DDCCAC435BBA8F92A15FADC8terra1q5karg99p5hc0jvplgn2fd8akg39r4ss00cu5rwkm600yqvmssgqhwqvq0ED97DCBBB158E6D1E486AB4A8E8AECDF207786F7267D07632D9008E33979F2C0GetPairCount= 14. Listed-asset ContractInfo: 10184 (hub/CL8Y/gems) + 6036 (PEARL/QUARTZ) only.Smoke
upgrade-582-code-id-pin.shwithSKIP_STORE+ skip migrates aborted on pair 3 (pin1=10184/null). Independent LCD re-query: that pair pins 10184/10184 and both ids are whitelisted. Script never reached the three unmigrated pairs (those would hard-failGetAssetCodeIdson 1.14.0 — correct).Remaining to close this issue
UpdateConfig { pair_code_id: 11601 }so new listings instantiate 1.15.0.UPGRADE582_LOCAL=1log (script already onmain).AddWhitelistedCodeId 8266/ close #581 go from this partial run.mentioned in issue #391
mentioned in issue #581
Columbus-5 F6 migrate complete — closing
Factory-first order held. Remaining three pairs migrated; smoke 14/14;
config.pair_code_idnow 11601. Independent LCD re-query matches.Leftover pair migrates → 11601 / 1.15.0
terra1havxdjfyphjazc342r3cj2n3kslsptac2eunvw8uzayusywg9t4shtuz7v8BF125B308063FE3089BAE422E7A1354DD3C0DAE89B312922DB6D6C44F84E5A6terra1p0sd0t2ggm9ye43gp0ryadx3wwkz5hzn99hnz93ve99397xvuufsvsmw732C51DB5D237D3BB072A427685EE2F695BFF704D362DD5D27544B0E1F769B8E32terra1mp72n97rzwmqwudzycjj0e4jveetjnp622gnprv6ugqt3hfxg60sr5gkjm6E145EF310A658C4F6485EB099747E96AB68BEA27391FEA814900E47BAAC7815Pins on those three: 10184 / 6036 (HybridSimulation ok).
Factory
UpdateConfig { pair_code_id: 11601 }F8F97C113758DB50B180BEA76E994CA8D1AB567A5969273161B3FAA7EE8E1787height 30039822config.pair_code_id11601 (was 11586). NewCreatePairinstantiates pair 1.15.0.Smoke (all 14, GetPairCount=14)
terra1klwux…znwp4terra1y5xxv…gjhtxterra16827w…kluu0terra1ra7cu…6fm9lterra1nqjvd…stx0nterra1havxd…tuz7vterra1p0sd0…smw73terra1mp72n…5gkjmterra16k6hu…63c3rterra1pc7dv…jgmn6terra1ceprj…cw55fterra16vxrh…5hgqyterra1su536…mm7h4terra1q5kar…wqvq0Live: factory 11602 / 1.9.0, every pair 11601 / 1.15.0. Quotes remaining ungated by design.
Not unblocked by this close
AddWhitelistedCodeId 8266.mentioned in merge request !1109
mentioned in merge request !1110
!1110 merge review (hardening follow-up)
Merged !1110 (
fix/584-upgrade-582-retry-harden) ontomainwithout automerge / without waiting for CI.Conflicts: none vs current
main(MR already contained70e79508;git merge-treeclean).Local sanity:
make verify-issue-58417/17 (syntax, greps, pagination 31/61, refresh-event parser, DRY_RUN factory-first + UpdateConfig, refuse factory 1.8.0, refuse unparseableIsCodeIdWhitelisted, probe fail-closed).CI: pipeline 2778207657 failed on
gitleakswithci_quota_exceeded(job never started). Not a script defect; project does not require a green pipeline to merge. Quota is a GitLab account/runner issue, not this diff.What this MR adds vs the columbus-5 run that closed #584: LCD
IsCodeIdWhitelistedretries (thepin1=10184/nullsmoke abort), skip pairs already on the target code id,UpdateConfig { pair_code_id }before pair migrate,UPGRADE582_REFRESH=1parses wasmhas_more/next_start_after. Invariant F6 unchanged. NoAddWhitelistedCodeId 8266.Remaining (not this MR)
route/solve).UPGRADE582_LOCAL=1rehearsal was never attached (MR test plan left unchecked; #584 closed on the live columbus-5 run). Not blocking; no new issue filed — next F6 wasm upgrade should use this script on LocalTerra first if operators want a dry rehearsal.No new tracking issue: #581 and #585 already cover the leftover product/ops gates.
mentioned in commit
86c5c0566bmentioned in merge request !1111
#585 (dApp banners +
route/solvehop exclude), which this issue deferred, is in !1111. Visibility only — does not replace on-chain F6 or change the columbus-5 migrate/runbook.mentioned in issue #592
mentioned in issue #634