Collection kinds
| Kind | Description | Transferable |
|---|---|---|
| Standard | The familiar ERC-721 / SPL-NFT model. Unique per instance, fungible per class. | Yes |
| Identity | DID-bound credentials, attestations, or roles. | No |
Token IDs
Token IDs are 64-bit unsigned integers, scoped per collection. Collection IDs are derived from the creator DID, collection name, and creation height:Transactions
| Variant | Purpose |
|---|---|
MintCollection | Create a new collection. |
MintNft | Mint a token into a collection. |
TransferNft | Move a standard NFT between DIDs. |
BurnNft | Destroy a token. |
SetRoyalty | Update the royalty policy on a collection. |
VerifyIdentityNft | Advance the verification level of an identity NFT. |
Royalty model
Sigil enforces royalties through an ERC-2981-style metadata signal plus a governance allowlist. Marketplaces that route trades through Sigil must honour the royalty record on the collection.enforced_on_chain = true, the executor rejects transfers that do not carry a royalty-payment subtransaction. When false, the policy is informational and marketplaces honour it at their discretion. The governance-allowlist gating prevents royalty griefing through micro-royalty traps.
Cross-zone NFT semantics
NFTs minted in zone A and referenced from zone B carry an explicit cross-zone token reference. The reference is verified duringsend_zone_message; the executor refuses to transmit an NFT that does not have a valid cross-zone capability proof.
The capability proof is signed by the source zone DID and pinned at the destination zone. Once accepted, the destination zone can use the NFT in its own contracts until the capability is revoked.
Identity revocation cascade
When a DID is revoked through the GAL system, identity NFTs bound to that DID enter a cascading invalidation:- The DID record is marked revoked at height
h. - All
IdentityBinding(did)NFTs are flaggedbinding_revoked = trueat heighth + 1. - Issuers can re-issue under a new DID; the previous identity NFT is dead.
RPC
| Method | Returns |
|---|---|
sigil_getCollection | Collection record. |
sigil_listCollectionsByCreator | Collections by creator DID. |
sigil_getNft | Single NFT record. |
sigil_listNftsByOwner | NFTs owned by a DID. |
sigil_getRoyaltyPolicy | Royalty record for a collection. |
Limits
| Limit | Value |
|---|---|
| Collection name | 3–64 chars |
| Max NFTs per collection | 2^64 − 1 |
| Metadata size on-chain | 64 bytes (BLAKE3 hash). Body lives off-chain in Weave. |
| Max royalty | 10% (1,000 bps). |
Implementation
- Types:
node/sigil-core/src/nft.rs. - Executor:
node/sigil-node/src/executor_nft.rs. - Durable state:
node/sigil-node/src/nft_durable.rs.
See also
- Mint an NFT — recipe.
- Custom tokens — fungible siblings.
- Identity & lineage — how revocation cascade is triggered.