Tracks readiness for the first real-value Mainnet deployment of MyToken +
PromptMarketplace (Market V1). This is the release gate for
#26 and
must be fully green — no unresolved [ ] items — before running
scripts/deploy-mainnet.sh against --network mainnet with real funds.
A green CI run or a successful script execution is not evidence of Mainnet safety by itself. This checklist exists so that claim is never made implicitly.
[x]— done, with evidence linked.[ ]— not done. Requires a human action outside this repository (an external audit, a funded multisig, a real Mainnet transaction) and cannot be marked done by a code change alone.
- #9 — Security: define dependency provenance and reproducible audit policy is closed and the locked dependency graph is reproducible.
This item is out of scope for this PR — it is tracked and resolved in #9, not duplicated here. This checklist will not be marked ready for Mainnet while #9 is open, per the acceptance criteria of #26.
- Release commit is the tip of
mainat the momentdeploy-mainnet.shis run; the script fails closed if the working tree does not build. - Toolchain is pinned and documented: Soroban SDK
25.3.0, Stellar CLI26.1.0+, targetwasm32v1-none,SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2=1(seeREADME.md). - WASM hashes (SHA-256) are computed at build time and re-verified
on-chain by
scripts/deploy-mainnet.shandscripts/verify-mainnet.sh. - Public interfaces (constructor args,
set_marketplace,mint/sell/sell_forwarded/mint_forwarded,pause/unpause) are documented inREADME.mdand covered by the 58 unit tests. - Migration plan for pre-
set_marketplaceinstances is documented inREADME.mdunder "Migración de instancias existentes": redeploy both contracts, bind once withset_marketplace, no automatic balance reinterpretation, any balance migration must be explicit and auditable. - The frozen commit hash, toolchain versions, and WASM hashes for the
actual Mainnet release candidate are recorded in a signed release note
(template:
docs/security/AUDIT_PROCESS.md#sign-off-record) before deploying.
- Independent review/audit completed. Process, scope, and severity SLA
are defined in
docs/security/AUDIT_PROCESS.md; the sign-off record in that document is intentionally blank until a real review happens. - All critical/high findings resolved and re-reviewed.
This repository cannot generate or simulate this review — it requires an external reviewer with no stake in the code.
-
scripts/testnet-dry-run.shdeploys a fresh Testnet pair from the release commit and runs, against real Testnet transactions:- adversarial calls (
mint_forwarded/sell_forwardedinvoked directly, bypassing the marketplace — must fail), - a pause/recovery drill (
pause()blocksbuy_prompt,unpause()restores it), - a resource-budget capture (
--costoutput per invocation, logged for review against the account's expected fee budget), - a reconciliation check (on-chain
total_supplymatches the expected mint/burn/remint ledger the script keeps).
- adversarial calls (
- The dry run has actually been executed against a live Testnet RPC for
this release commit and its JSON report
(
deploy-artifacts/testnet-dry-run-report-*.json) is attached to the release sign-off. Running it is a maintainer action; this PR provides the tool, not the run.
-
scripts/deploy-mainnet.shandscripts/verify-mainnet.shrequire distinctMAINNET_DEPLOYER_SOURCE/MAINNET_ADMIN_SOURCE/MAINNET_ADMIN_ADDRand never accept inline private keys. - Multisig/hardware-wallet policy for the admin identity is documented
in
docs/security/MAINNET_CUSTODY_POLICY.md, including quorum, key storage, and rotation-on-compromise procedure. - The actual Mainnet admin account is a multisig/hardware-backed account matching that policy, and a test transaction proving the quorum works has been executed and recorded.
-
scripts/deploy-mainnet.shdeploys, initializes, binds, and validates on-chain state/hashes, writing a JSON deploy summary. -
scripts/verify-mainnet.shindependently re-verifies a deployed pair without redeploying, for CI or periodic checks. -
scripts/canary-mainnet.shruns one capped, real-value purchase (hard-capped price, requires an explicit confirmation phrase, refuses to run unlessverify-mainnet.shpasses first) and checks settlement,has_accessdelivery, and balance reconciliation. - Contract IDs and supported interfaces for the actual Mainnet deployment are published (README table + release note).
- The canary has actually been run on Mainnet and its report attached to the release sign-off.
-
docs/operations/MONITORING_AND_INCIDENT_RESPONSE.mddefines monitoring signals, alert thresholds, incident severity levels, pause criteria (using the existing owner-gatedpause()/unpause()onMyToken, which also blockssell_forwarded/mint_forwardedand therefore the entire purchase flow), the rollback/migration procedure, and a named-operator template. - The named-operator table in that document is filled in with real people/roles (not placeholders) and the pause/recovery drill has been exercised end-to-end by those operators, not just by the script in CI.
- A passing script run is not a security audit.
- This checklist does not authorize deploying before Backend/UI staging proves the complete purchase journey end-to-end.