mirror of
https://github.com/logos-blockchain/lez-programs.git
synced 2026-07-03 13:39:38 +00:00
- Add lez-authority crate: agnostic AuthoritySlot library (RFP-001) - Add mint_authority field to TokenDefinition::Fungible - Add NewFungibleDefinitionWithAuthority instruction - Add SetAuthority instruction (rotation + permanent revocation) - Update Mint to enforce authority guard - Wire new instructions into guest binary - Add 8 authority unit tests (53 total passing) - Add LP-0013 README, IDL, demo script, and example scripts
3.9 KiB
3.9 KiB
LP-0013: Token Program Mint Authority
This document describes the mint authority model added to the LEZ Token program as part of LP-0013.
Overview
The LEZ Token program now supports a mint authority model for fungible tokens:
- Mint authority set at initialization — create a token with a designated minter
- Minting by the authority — the authority can mint additional tokens at any time
- Authority rotation — transfer minting rights to a new key
- Authority revocation — permanently fix the supply by setting authority to
None
The lez-authority crate provides a reusable, program-agnostic authority library (RFP-001).
Architecture
Authority Model
mint_authority: Option<[u8; 32]> is added to TokenDefinition::Fungible:
Some(key)— the key holder can mint and rotate/revokeNone— supply is permanently fixed, minting rejected
New Instructions
| Instruction | Description |
|---|---|
NewFungibleDefinitionWithAuthority |
Create token with mint authority |
Mint (updated) |
Now authority-gated — rejects if authority is None |
SetAuthority |
Rotate or revoke mint authority |
Atomicity
SetAuthority only mutates state after all checks pass. A failed authorization check returns an error before any write occurs, leaving the prior authority intact.
Error Codes
| Condition | Message |
|---|---|
| Mint with revoked authority | Mint authority has been revoked; this token has a fixed supply |
| SetAuthority without authorization | Definition account authorization is missing |
| SetAuthority on already-revoked | Mint authority already revoked; supply is permanently fixed |
Crate Structure
lez-authority/— Agnostic AuthoritySlot library (RFP-001)programs/token/core/— TokenDefinition with mint_authority fieldprograms/token/src/mint.rs— Authority-gated mintingprograms/token/src/set_authority.rs— Rotation and revocation handlerprograms/token/src/new_definition.rs— NewFungibleDefinitionWithAuthority handlerprogram_methods/guest/src/bin/token.rs— Guest binary dispatchwallet/src/program_facades/token.rs— SDK facade methods
Deployment Steps
Prerequisites
git clone https://github.com/bristinWild/logos-execution-zone
cd logos-execution-zone
cargo install logos-scaffold
lgs new my-project && cd my-project
lgs setup
Start local sequencer
lgs localnet start
lgs wallet topup
Create accounts
lgs wallet -- account new public # definition account
lgs wallet -- account new public # supply account
Create token
lgs wallet -- token new \
--definition-account-id <definition_id> \
--supply-account-id <supply_id> \
--name "MyCoin" \
--total-supply 1000000
Mint additional tokens
lgs wallet -- token mint \
--definition <definition_id> \
--holder <holder_id> \
--amount 500000
Verify on-chain
lgs wallet -- account get --account-id <definition_id>
Running Tests
# Unit tests
cargo test -p lez-authority --lib
cargo test -p token_program --lib
# All LP-0013 tests
RISC0_DEV_MODE=1 cargo test -p lez-authority -p token_program --lib
Example Scripts
# Fixed supply token
bash scripts/examples/fixed_supply_token.sh
# Variable supply token with authority rotation
bash scripts/examples/variable_supply_token.sh
End-to-End Demo
RISC0_DEV_MODE=0 bash scripts/demo-full-flow.sh
Compute Unit Costs
| Operation | CU Cost |
|---|---|
| NewFungibleDefinitionWithAuthority | TBD |
| Mint (with authority check) | TBD |
| SetAuthority (rotate) | TBD |
| SetAuthority (revoke) | TBD |