From f0c9cc523e790216f1786ca61c36b95a12c7e666 Mon Sep 17 00:00:00 2001 From: Tranquil-Flow Date: Tue, 9 Jun 2026 09:38:35 +0000 Subject: [PATCH 1/3] Add LP-0013 final submission --- solutions/LP-0013.md | 123 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 solutions/LP-0013.md diff --git a/solutions/LP-0013.md b/solutions/LP-0013.md new file mode 100644 index 0000000..8d86727 --- /dev/null +++ b/solutions/LP-0013.md @@ -0,0 +1,123 @@ +# Solution: LP-0013 — Token program improvements: authorities + +**Submitted by:** Tranquil-Flow + +## Summary + +This submission implements a mint-authority lifecycle for LEZ tokens: variable-supply minting by an authority, atomic authority rotation, permanent revocation to `None` for fixed-supply tokens, deterministic post-revocation rejection, SDK/CLI support, examples, and IDL artifacts. + +The corrected LEZ guest is deployed and exercised on the public LEZ testnet (`https://testnet.lez.logos.co/`, real consensus, `RISC0_DEV_MODE=0`). The load-bearing 2026-06-04 lifecycle proves the reviewer-critical fix: two mints to the same holding account both confirm and accumulate (`60 + 40 = 100`), then a post-revocation mint to that already-existing holding is rejected by the authority guard rather than by an account-initialization side effect. + +Fresh narrated demo video: https://youtu.be/rUgsCCPiQfo. This recording is the final video evidence for the corrected public-testnet lifecycle. + +## Repository + +- **Repo:** https://github.com/Tranquil-Flow/lp0013-token-suite +- **License:** MIT OR Apache-2.0 +- **Narrated demo video:** https://youtu.be/rUgsCCPiQfo + +## Approach + +The implementation splits the token-authority surface into reusable library and LEZ-facing layers: + +1. `mint-core` and `admin-authority-core` define mint state, authority state, deterministic errors, and offline contract tests. +2. `mint-program` implements the corrected four-instruction LEZ guest surface: `create_mint`, `create_holding`, `mint_to`, and `set_mint_authority`. +3. `mint-sdk`, `mint-cli`, and `onchain-program/examples` provide SDK/client flows for Logos-module interactions and live LEZ lifecycle execution. +4. `idl/` contains SPEL-generated IDL artifacts for the deployed four-instruction surface; the hand-written IDL is retained only as a caveated design reference. +5. `examples/` includes fixed-supply, variable-supply, and config-PDA-gated integrations. +6. `scripts/demo-localnet.sh`, `scripts/demo-testnet-live.sh`, and `scripts/ci-verify-testnet.sh` provide reproducible localnet and public-testnet verification paths. + +Public-testnet evidence: + +- Network: `https://testnet.lez.logos.co/` +- ProgramId / ImageID: `32335764e583cd45684e0100ca63a3564a02274daa6ea6a5f758fad671b0a9ce` +- Explorer-form base58 ProgramId: `4NxnuVrQBiwq2dCwZ3g3EnaD8JXGgBwEf6CR2a8L9JXF` +- Mint PDA: `HtCYkKN5K3dUVnPhJ4tCNpvDrnEcLZKgh8i4PkUjigfu` +- Final state: `authority=None`, `supply=100`, `decimals=6` + +Canonical lifecycle: + +| Step | Transaction hash | Verdict | +|---|---|---| +| deploy_program | `5b39deec38e49bb1bedf1956e5d7429ec20e3c009f0ccfe7a4fc449685cb4ce0` | `Some(ProgramDeployment)` | +| create_mint | `7d1dcb04b5f339b33f04a120b7334cf9802720d4a917e600becd62476e44da74` | `Some(Public)` | +| create_holding | `520d080b833c7e4038a1aa214bba43a3fc97328e8f379a093b74ca3e32be5893` | `Some(Public)` | +| mint_to(60) | `8c865d0184f55ce5a881e24c8c125cd3729c5f90a4b83d0484c8d1610f743f61` | `Some(Public)` | +| mint_to(40) | `c63168b7f615221ab2425b2ba003d32183f4df2e482eb4203e4e216675993d21` | `Some(Public)` | +| set_mint_authority(None) | `8c4b08b5c750c57d0dbb4e9f43c32b7c0f2627ce5508da85408e3aaf01f5a331` | `Some(Public)` | +| mint_to(post-revoke) | `6e92e605e932756332c9721a4e4754f155780069490b256fe67b35f374a972d1` | not included (`Transaction is None`) | + +Read-only re-verification: + +```bash +bash scripts/demo-testnet-live.sh verify +``` + +The verifier uses the LEZ `wallet` binary when available and falls back to `scripts/ci-verify-testnet.sh` (curl + Python JSON-RPC only) when `wallet` is not installed. + +## Success Criteria Checklist + +### Functionality + +- [x] Variable-size tokens through minting authority. +- [x] Mint authority set at token initialization. +- [x] Minting by the authority, with repeated mints to the same holding account (`60 + 40 = 100`) verified on the public testnet. +- [x] Authority rotation and permanent revocation to `None`. +- [x] Fixed-supply behavior after revocation: post-revocation mint is rejected and supply remains `100`. +- [x] Deterministic revoked-authority rejection through the authority guard, not an account-init side effect. + +### Usability + +- [x] SDK/module support through `mint-sdk`, `mint-cli`, and `onchain-program/examples`. +- [x] At least two example integrations: fixed-supply, variable-supply, and config-PDA-gated examples are included. +- [x] SPEL-generated IDL artifacts are included under `idl/`. +- [x] README and spec-compliance docs explain build, localnet, and public-testnet verification commands. + +### Reliability + +- [x] Contract tests cover repeated minting to the same holding and post-revocation guard rejection. +- [x] Offline workspace tests and validator self-tests run in CI. +- [x] Public-testnet evidence can be re-queried read-only without private keys or faucet access. + +### Performance + +- [x] CU methodology and platform limitation are documented in `docs/BENCHMARKS.md`. +- [x] The public testnet does not expose per-transaction CU, so the repository avoids inventing chain-native CU numbers and labels local sequencer/executor measurements honestly. + +### Supportability + +- [x] Deployable guest source lives in the repository under `onchain-program/`. +- [x] Public-testnet ProgramId/ImageID and tx hashes are documented. +- [x] `scripts/demo-localnet.sh` supports local sequencer reproduction under `RISC0_DEV_MODE=0`. +- [x] `scripts/demo-testnet-live.sh verify` and `scripts/ci-verify-testnet.sh` support public-testnet re-verification. +- [x] Fresh narrated demo video recorded and linked: https://youtu.be/rUgsCCPiQfo + +## FURPS Self-Assessment + +### Functionality + +The implementation delivers the requested token mint-authority lifecycle and the reviewer-critical fix. Holding creation is separated from minting, repeated mints accumulate on chain, and revocation is enforced by the authority guard. + +### Usability + +Evaluators can run library tests, inspect the SPEL-generated IDL, try the examples, run localnet verification, and re-query public-testnet evidence from a clean clone. The final narrated video is recorded and linked above. + +### Reliability + +The codebase contains deterministic contract tests for variable supply, authority rotation/revocation, repeated minting, and invalid authority paths. The public-testnet verifier checks both transaction inclusion and final mint PDA state. + +### Performance + +The submission documents the current LEZ CU visibility limitation clearly. It uses available executor/local sequencer evidence without pretending the public testnet exposes per-transaction CU telemetry. + +### Supportability + +The repository is public, dual-licensed MIT/Apache-2.0, documented, CI-backed, and includes scripts for prerequisite checks, localnet verification, and public-testnet evidence verification. The canonical proof artifacts identify the 2026-06-04 corrected public-testnet lifecycle as the final evidence for the fix. + +## Video status + +Fresh narrated demo video: https://youtu.be/rUgsCCPiQfo. This recording is the final video evidence for the corrected public-testnet lifecycle. + +## Terms & Conditions + +By submitting this solution, I confirm that I have read and agree to the [Terms & Conditions](../TERMS.md), and that the implementation is original work published under MIT OR Apache-2.0 licensing. From 1b9bd23a1845e3822c84d324f41ec2d444c4f09f Mon Sep 17 00:00:00 2001 From: Tranquil-Flow Date: Tue, 9 Jun 2026 10:33:54 +0000 Subject: [PATCH 2/3] Update LP-0013 standalone localnet evidence --- solutions/LP-0013.md | 138 +++++++++++++++++++++---------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/solutions/LP-0013.md b/solutions/LP-0013.md index 8d86727..ebbd244 100644 --- a/solutions/LP-0013.md +++ b/solutions/LP-0013.md @@ -8,32 +8,31 @@ This submission implements a mint-authority lifecycle for LEZ tokens: variable-s The corrected LEZ guest is deployed and exercised on the public LEZ testnet (`https://testnet.lez.logos.co/`, real consensus, `RISC0_DEV_MODE=0`). The load-bearing 2026-06-04 lifecycle proves the reviewer-critical fix: two mints to the same holding account both confirm and accumulate (`60 + 40 = 100`), then a post-revocation mint to that already-existing holding is rejected by the authority guard rather than by an account-initialization side effect. -Fresh narrated demo video: https://youtu.be/rUgsCCPiQfo. This recording is the final video evidence for the corrected public-testnet lifecycle. - ## Repository -- **Repo:** https://github.com/Tranquil-Flow/lp0013-token-suite -- **License:** MIT OR Apache-2.0 -- **Narrated demo video:** https://youtu.be/rUgsCCPiQfo +Public repository: + +```text +https://github.com/Tranquil-Flow/lp0013-token-suite +``` -## Approach +**License:** MIT OR Apache-2.0 -The implementation splits the token-authority surface into reusable library and LEZ-facing layers: +## Public-testnet evidence -1. `mint-core` and `admin-authority-core` define mint state, authority state, deterministic errors, and offline contract tests. -2. `mint-program` implements the corrected four-instruction LEZ guest surface: `create_mint`, `create_holding`, `mint_to`, and `set_mint_authority`. -3. `mint-sdk`, `mint-cli`, and `onchain-program/examples` provide SDK/client flows for Logos-module interactions and live LEZ lifecycle execution. -4. `idl/` contains SPEL-generated IDL artifacts for the deployed four-instruction surface; the hand-written IDL is retained only as a caveated design reference. -5. `examples/` includes fixed-supply, variable-supply, and config-PDA-gated integrations. -6. `scripts/demo-localnet.sh`, `scripts/demo-testnet-live.sh`, and `scripts/ci-verify-testnet.sh` provide reproducible localnet and public-testnet verification paths. +Network: `https://testnet.lez.logos.co/` + +ProgramId / ImageID: + +```text +32335764e583cd45684e0100ca63a3564a02274daa6ea6a5f758fad671b0a9ce +``` -Public-testnet evidence: +Explorer-form base58 ProgramId: -- Network: `https://testnet.lez.logos.co/` -- ProgramId / ImageID: `32335764e583cd45684e0100ca63a3564a02274daa6ea6a5f758fad671b0a9ce` -- Explorer-form base58 ProgramId: `4NxnuVrQBiwq2dCwZ3g3EnaD8JXGgBwEf6CR2a8L9JXF` -- Mint PDA: `HtCYkKN5K3dUVnPhJ4tCNpvDrnEcLZKgh8i4PkUjigfu` -- Final state: `authority=None`, `supply=100`, `decimals=6` +```text +4NxnuVrQBiwq2dCwZ3g3EnaD8JXGgBwEf6CR2a8L9JXF +``` Canonical lifecycle: @@ -47,77 +46,78 @@ Canonical lifecycle: | set_mint_authority(None) | `8c4b08b5c750c57d0dbb4e9f43c32b7c0f2627ce5508da85408e3aaf01f5a331` | `Some(Public)` | | mint_to(post-revoke) | `6e92e605e932756332c9721a4e4754f155780069490b256fe67b35f374a972d1` | not included (`Transaction is None`) | +Final state read from chain: + +- mint PDA `HtCYkKN5K3dUVnPhJ4tCNpvDrnEcLZKgh8i4PkUjigfu`: `authority=None`, `supply=100`, `decimals=6` +- holding PDA `4yswbZaRR1HQt4a5HS4uN7nLvAwL1txHTMSXKo1WZH2S`: `balance=100` +- signer / authority: `B6Sa77taeQgQ3FXHP88wjs15sJw3EyfcRjnSAZKnYchb` + Read-only re-verification: ```bash bash scripts/demo-testnet-live.sh verify ``` -The verifier uses the LEZ `wallet` binary when available and falls back to `scripts/ci-verify-testnet.sh` (curl + Python JSON-RPC only) when `wallet` is not installed. - -## Success Criteria Checklist - -### Functionality - -- [x] Variable-size tokens through minting authority. -- [x] Mint authority set at token initialization. -- [x] Minting by the authority, with repeated mints to the same holding account (`60 + 40 = 100`) verified on the public testnet. -- [x] Authority rotation and permanent revocation to `None`. -- [x] Fixed-supply behavior after revocation: post-revocation mint is rejected and supply remains `100`. -- [x] Deterministic revoked-authority rejection through the authority guard, not an account-init side effect. - -### Usability +Full requirements matrix: `docs/LP0013_REQUIREMENTS_MATRIX.md` in the implementation repository. -- [x] SDK/module support through `mint-sdk`, `mint-cli`, and `onchain-program/examples`. -- [x] At least two example integrations: fixed-supply, variable-supply, and config-PDA-gated examples are included. -- [x] SPEL-generated IDL artifacts are included under `idl/`. -- [x] README and spec-compliance docs explain build, localnet, and public-testnet verification commands. +If `wallet` is unavailable, build it from the LEZ `v0.1.2` tag as described in the implementation repository docs (`docs/LEZ_PROOF_LOG.md` and `onchain-program/README.md`). -### Reliability +## What was fixed after the previous review -- [x] Contract tests cover repeated minting to the same holding and post-revocation guard rejection. -- [x] Offline workspace tests and validator self-tests run in CI. -- [x] Public-testnet evidence can be re-queried read-only without private keys or faucet access. +The rejected build used `#[account(init, pda)]` on the recipient holding account inside `mint_to`. That meant: -### Performance +1. a second mint to the same holding failed because `init` rejected the already-claimed account; and +2. the post-revocation mint was rejected before the authority guard ran, so it did not prove revoked-authority enforcement. -- [x] CU methodology and platform limitation are documented in `docs/BENCHMARKS.md`. -- [x] The public testnet does not expose per-transaction CU, so the repository avoids inventing chain-native CU numbers and labels local sequencer/executor measurements honestly. +The corrected guest splits holding creation from minting: -### Supportability +- `create_holding(#[account(init, pda)] holding, #[account(signer)] payer)` claims the holding once. +- `mint_to(#[account(mut, pda)] mint, #[account(mut, pda)] recipient_holding, #[account(signer)] authority, amount)` mutates an existing holding and performs `require_authority` before any state change. -- [x] Deployable guest source lives in the repository under `onchain-program/`. -- [x] Public-testnet ProgramId/ImageID and tx hashes are documented. -- [x] `scripts/demo-localnet.sh` supports local sequencer reproduction under `RISC0_DEV_MODE=0`. -- [x] `scripts/demo-testnet-live.sh verify` and `scripts/ci-verify-testnet.sh` support public-testnet re-verification. -- [x] Fresh narrated demo video recorded and linked: https://youtu.be/rUgsCCPiQfo +The public-testnet lifecycle above demonstrates this distinction on chain: both mints land into the same holding, then the post-revocation mint targets the same existing holding and is rejected by the authority guard. -## FURPS Self-Assessment +## Success-criteria map -### Functionality - -The implementation delivers the requested token mint-authority lifecycle and the reviewer-critical fix. Holding creation is separated from minting, repeated mints accumulate on chain, and revocation is enforced by the authority guard. - -### Usability - -Evaluators can run library tests, inspect the SPEL-generated IDL, try the examples, run localnet verification, and re-query public-testnet evidence from a clean clone. The final narrated video is recorded and linked above. - -### Reliability - -The codebase contains deterministic contract tests for variable supply, authority rotation/revocation, repeated minting, and invalid authority paths. The public-testnet verifier checks both transaction inclusion and final mint PDA state. - -### Performance - -The submission documents the current LEZ CU visibility limitation clearly. It uses available executor/local sequencer evidence without pretending the public testnet exposes per-transaction CU telemetry. - -### Supportability +| LP-0013 criterion | Status | Evidence | +|---|---|---| +| Variable-size tokens through minting authority | Met | `mint-core`, `mint-program`, `mint-sdk`, examples, and public-testnet two-mint lifecycle (`60 + 40 = 100`) | +| Mint authority set at token initialization | Met | `create_mint` instruction and testnet `create_mint` tx | +| Minting by the authority | Met | `mint_to(60)` and `mint_to(40)` txs confirmed on testnet | +| Authority rotation/revocation | Met | offline rotation tests and testnet `set_mint_authority(None)` tx | +| Fixed supply via revoked authority | Met | post-revocation mint not included; final mint supply remains `100` | +| At least two example integrations | Met | `examples/fixed-supply`, `examples/variable-supply`, plus `examples/config-pda-gated` | +| Self-sufficient library for RFP-001-style approval | Met | `admin-authority-core` and config-PDA-gated example | +| SDK/module for Logos-module interactions | Met | `mint-sdk`, `mint-cli`, and LEZ lifecycle client in `onchain-program/examples` | +| IDL using SPEL | Met | `idl/admin-authority.idl.spel-generated.json` and `idl/admin-authority.idl.spel-generated.rc3-testnet.json` are generated by `spel generate-idl`; hand-written IDL is only a caveated design reference | +| Atomic rotation/revocation | Met | failed operations clone/validate before commit; covered by unit tests | +| Deterministic revoked-authority rejection | Met | `AuthorityRevoked` / `require_authority` path; exact error string visible in localnet logs, state-level guard rejection proven on public testnet | +| CU cost documented | Partially met with platform caveat | `docs/BENCHMARKS.md`; public testnet does not expose per-tx CU, so local sequencer executor-cycle methodology is documented honestly | +| Deployed and tested on LEZ testnet | Met | ProgramId/ImageID and tx hashes above | +| End-to-end tests against LEZ sequencer in CI | Met via CI-included prepared-run path | `.github/workflows/ci.yml` includes hosted `local-sequencer-e2e-preflight` and manual self-hosted `local-sequencer-e2e`; `scripts/demo-localnet.sh` passed on a prepared M4 Pro LEZ/RISC0 host on 2026-06-09 with `RISC0_DEV_MODE=0` | +| Green CI on default branch | Met | implementation repo GitHub Actions; hosted Rust workspace and local-sequencer preflight passed after the standalone-localnet CI/preflight changes | +| README end-to-end usage | Met | `README.md`, `docs/SPEC_COMPLIANCE.md`, `onchain-program/README.md` | +| Reproducible demo script | Met | `scripts/demo-localnet.sh` for standalone local sequencer; `scripts/preflight-localnet-e2e.sh --report` for prerequisite reporting; `scripts/demo-testnet-live.sh verify` for public-testnet re-verification | +| Recorded narrated demo video | Met | fresh narrated public-testnet demo: https://youtu.be/rUgsCCPiQfo | + +## Local verification commands -The repository is public, dual-licensed MIT/Apache-2.0, documented, CI-backed, and includes scripts for prerequisite checks, localnet verification, and public-testnet evidence verification. The canonical proof artifacts identify the 2026-06-04 corrected public-testnet lifecycle as the final evidence for the fix. +```bash +cargo fmt --all -- --check +cargo check --workspace +cargo test --workspace +cargo clippy --workspace --all-targets -- -D warnings +python3 scripts/validate-submission-docs.py +python3 -m pytest tests/test_validate_submission_docs.py -q +``` ## Video status Fresh narrated demo video: https://youtu.be/rUgsCCPiQfo. This recording is the final video evidence for the corrected public-testnet lifecycle. +## Honesty note + +The 2026-06-03 public-testnet run (`ProgramId 4153e159…`, `ImageID 59e15341…`) is superseded historical evidence only. It used the pre-fix single-`init` holding pattern; the load-bearing fix evidence is the 2026-06-04 corrected run documented above. + ## Terms & Conditions By submitting this solution, I confirm that I have read and agree to the [Terms & Conditions](../TERMS.md), and that the implementation is original work published under MIT OR Apache-2.0 licensing. From ee118927df985f30607790d2d29040e0256fdbcb Mon Sep 17 00:00:00 2001 From: Tranquil-Flow Date: Tue, 9 Jun 2026 10:36:06 +0000 Subject: [PATCH 3/3] Fix LP-0013 solution template sections --- solutions/LP-0013.md | 91 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 21 deletions(-) diff --git a/solutions/LP-0013.md b/solutions/LP-0013.md index ebbd244..1b7bcda 100644 --- a/solutions/LP-0013.md +++ b/solutions/LP-0013.md @@ -18,6 +18,17 @@ https://github.com/Tranquil-Flow/lp0013-token-suite **License:** MIT OR Apache-2.0 +## Approach + +The implementation splits the token-authority surface into reusable library and LEZ-facing layers: + +1. `mint-core` and `admin-authority-core` define mint state, authority state, deterministic errors, and offline contract tests. +2. `mint-program` implements the corrected four-instruction LEZ guest surface: `create_mint`, `create_holding`, `mint_to`, and `set_mint_authority`. +3. `mint-sdk`, `mint-cli`, and `onchain-program/examples` provide SDK/client flows for Logos-module interactions and live LEZ lifecycle execution. +4. `idl/` contains SPEL-generated IDL artifacts for the deployed four-instruction surface; the hand-written IDL is retained only as a caveated design reference. +5. `examples/` includes fixed-supply, variable-supply, and config-PDA-gated integrations. +6. `scripts/demo-localnet.sh`, `scripts/preflight-localnet-e2e.sh`, `scripts/demo-testnet-live.sh`, and `scripts/ci-verify-testnet.sh` provide reproducible localnet and public-testnet verification paths. + ## Public-testnet evidence Network: `https://testnet.lez.logos.co/` @@ -76,28 +87,44 @@ The corrected guest splits holding creation from minting: The public-testnet lifecycle above demonstrates this distinction on chain: both mints land into the same holding, then the post-revocation mint targets the same existing holding and is rejected by the authority guard. -## Success-criteria map +## Success Criteria Checklist -| LP-0013 criterion | Status | Evidence | -|---|---|---| -| Variable-size tokens through minting authority | Met | `mint-core`, `mint-program`, `mint-sdk`, examples, and public-testnet two-mint lifecycle (`60 + 40 = 100`) | -| Mint authority set at token initialization | Met | `create_mint` instruction and testnet `create_mint` tx | -| Minting by the authority | Met | `mint_to(60)` and `mint_to(40)` txs confirmed on testnet | -| Authority rotation/revocation | Met | offline rotation tests and testnet `set_mint_authority(None)` tx | -| Fixed supply via revoked authority | Met | post-revocation mint not included; final mint supply remains `100` | -| At least two example integrations | Met | `examples/fixed-supply`, `examples/variable-supply`, plus `examples/config-pda-gated` | -| Self-sufficient library for RFP-001-style approval | Met | `admin-authority-core` and config-PDA-gated example | -| SDK/module for Logos-module interactions | Met | `mint-sdk`, `mint-cli`, and LEZ lifecycle client in `onchain-program/examples` | -| IDL using SPEL | Met | `idl/admin-authority.idl.spel-generated.json` and `idl/admin-authority.idl.spel-generated.rc3-testnet.json` are generated by `spel generate-idl`; hand-written IDL is only a caveated design reference | -| Atomic rotation/revocation | Met | failed operations clone/validate before commit; covered by unit tests | -| Deterministic revoked-authority rejection | Met | `AuthorityRevoked` / `require_authority` path; exact error string visible in localnet logs, state-level guard rejection proven on public testnet | -| CU cost documented | Partially met with platform caveat | `docs/BENCHMARKS.md`; public testnet does not expose per-tx CU, so local sequencer executor-cycle methodology is documented honestly | -| Deployed and tested on LEZ testnet | Met | ProgramId/ImageID and tx hashes above | -| End-to-end tests against LEZ sequencer in CI | Met via CI-included prepared-run path | `.github/workflows/ci.yml` includes hosted `local-sequencer-e2e-preflight` and manual self-hosted `local-sequencer-e2e`; `scripts/demo-localnet.sh` passed on a prepared M4 Pro LEZ/RISC0 host on 2026-06-09 with `RISC0_DEV_MODE=0` | -| Green CI on default branch | Met | implementation repo GitHub Actions; hosted Rust workspace and local-sequencer preflight passed after the standalone-localnet CI/preflight changes | -| README end-to-end usage | Met | `README.md`, `docs/SPEC_COMPLIANCE.md`, `onchain-program/README.md` | -| Reproducible demo script | Met | `scripts/demo-localnet.sh` for standalone local sequencer; `scripts/preflight-localnet-e2e.sh --report` for prerequisite reporting; `scripts/demo-testnet-live.sh verify` for public-testnet re-verification | -| Recorded narrated demo video | Met | fresh narrated public-testnet demo: https://youtu.be/rUgsCCPiQfo | +### Functionality + +- [x] Variable-size tokens through minting authority. +- [x] Mint authority set at token initialization. +- [x] Minting by the authority, with repeated mints to the same holding account (`60 + 40 = 100`) verified on the public testnet. +- [x] Authority rotation and permanent revocation to `None`. +- [x] Fixed-supply behavior after revocation: post-revocation mint is rejected and supply remains `100`. +- [x] Deterministic revoked-authority rejection through the authority guard, not an account-init side effect. + +### Usability + +- [x] SDK/module support through `mint-sdk`, `mint-cli`, and `onchain-program/examples`. +- [x] At least two example integrations: fixed-supply, variable-supply, and config-PDA-gated examples are included. +- [x] SPEL-generated IDL artifacts are included under `idl/`. +- [x] README and spec-compliance docs explain build, localnet, and public-testnet verification commands. + +### Reliability + +- [x] Contract tests cover repeated minting to the same holding and post-revocation guard rejection. +- [x] Offline workspace tests and validator self-tests run in CI. +- [x] Public-testnet evidence can be re-queried read-only without private keys or faucet access. +- [x] Standalone local-sequencer e2e is included in CI config via hosted preflight plus manual self-hosted prepared-run job, and a real `RISC0_DEV_MODE=0` prepared-host run passed on 2026-06-09. + +### Performance + +- [x] CU methodology and platform limitation are documented in `docs/BENCHMARKS.md`. +- [x] The public testnet does not expose per-transaction CU, so the repository avoids inventing chain-native CU numbers and labels local sequencer/executor measurements honestly. + +### Supportability + +- [x] Deployable guest source lives in the repository under `onchain-program/`. +- [x] Public-testnet ProgramId/ImageID and tx hashes are documented. +- [x] `scripts/demo-localnet.sh` supports standalone local-sequencer reproduction under `RISC0_DEV_MODE=0`. +- [x] `.github/workflows/ci.yml` includes `local-sequencer-e2e-preflight` and manual `local-sequencer-e2e`. +- [x] `scripts/demo-testnet-live.sh verify` and `scripts/ci-verify-testnet.sh` support public-testnet re-verification. +- [x] Fresh narrated demo video recorded and linked: https://youtu.be/rUgsCCPiQfo ## Local verification commands @@ -118,6 +145,28 @@ Fresh narrated demo video: https://youtu.be/rUgsCCPiQfo. This recording is the f The 2026-06-03 public-testnet run (`ProgramId 4153e159…`, `ImageID 59e15341…`) is superseded historical evidence only. It used the pre-fix single-`init` holding pattern; the load-bearing fix evidence is the 2026-06-04 corrected run documented above. +## FURPS Self-Assessment + +### Functionality + +The implementation delivers the requested token mint-authority lifecycle and the reviewer-critical fix. Holding creation is separated from minting, repeated mints accumulate on chain, and revocation is enforced by the authority guard. + +### Usability + +Evaluators can run library tests, inspect the SPEL-generated IDL, try the examples, run localnet verification, and re-query public-testnet evidence from a clean clone. The final narrated video is recorded and linked above. + +### Reliability + +The codebase contains deterministic contract tests for variable supply, authority rotation/revocation, repeated minting, and invalid authority paths. The public-testnet verifier checks both transaction inclusion and final mint PDA state; the local-sequencer path is also represented in CI and backed by a prepared-host run. + +### Performance + +The submission documents the current LEZ CU visibility limitation clearly. It uses available executor/local sequencer evidence without pretending the public testnet exposes per-transaction CU telemetry. + +### Supportability + +The repository is public, dual-licensed MIT/Apache-2.0, documented, CI-backed, and includes scripts for prerequisite checks, localnet verification, and public-testnet evidence verification. The canonical proof artifacts identify the 2026-06-04 corrected public-testnet lifecycle and 2026-06-09 standalone local-sequencer prepared-host run as final evidence. + ## Terms & Conditions By submitting this solution, I confirm that I have read and agree to the [Terms & Conditions](../TERMS.md), and that the implementation is original work published under MIT OR Apache-2.0 licensing.