-
Notifications
You must be signed in to change notification settings - Fork 1
NFT Standard
The upcoming protocol specification for non-fungible tokens on the Pixa blockchain.
Pixa's NFT system is being developed as a Graphene plugin — a modular extension to the core blockchain that adds new object types, new operations, and new validation rules specifically for non-fungible tokens. Unlike Ethereum-based NFTs (which use smart contracts like ERC-721), Pixa's NFTs are native protocol objects with enforced rules at the consensus level.
This guide describes the expected specification. As the NFT plugin is still in development, some details may change before launch.
This document reflects the design intent as described in Pixa's technical documentation. Final implementation may differ.
On Ethereum, NFTs are smart contract deployments — each collection is a separate contract, and the EVM executes token logic at runtime. This provides flexibility but introduces gas costs, reentrancy risks, and reliance on contract correctness.
On Pixa, NFTs are first-class protocol objects. The blockchain itself understands what an NFT is, how it transfers, and how royalties are enforced. There is no contract to audit, no bytecode to execute, and no gas to pay.
| Property | Ethereum NFT (ERC-721) | Pixa NFT (native plugin) |
|---|---|---|
| Definition | Smart contract | Protocol object type |
| Execution | EVM runtime | Consensus-level validation |
| Gas/fees | Variable (often high) | Free (RC only) |
| Royalty enforcement | Optional, bypassable | Protocol-enforced, mandatory |
| Storage | Off-chain (IPFS link in metadata) | On-chain (Base64 in linked post) |
| Flexibility | Unlimited (custom logic) | Fixed feature set (standard operations) |
Each NFT on Pixa is expected to be stored as a protocol object with the following fields:
| Field | Type | Description |
|---|---|---|
token_id |
Unique integer | Protocol-assigned unique identifier |
creator |
Account name | Original minter (immutable after creation) |
owner |
Account name | Current holder (updates on transfer/sale) |
linked_permlink |
String | Reference to the on-chain post containing the artwork |
metadata |
JSON | Title, description, attributes, and custom data |
royalty_bps |
Integer (basis points) | Creator royalty percentage (e.g., 500 = 5%) |
created_at |
Timestamp | Block time when the NFT was minted |
sale_price |
Asset (optional) | Current listing price, if on sale |
sale_currency |
Token type | PXA or PXS |
Once minted, certain fields cannot be changed:
| Field | Mutable? |
|---|---|
token_id |
No |
creator |
No |
linked_permlink |
No |
royalty_bps |
No |
created_at |
No |
owner |
Yes (transfers/sales) |
metadata |
Potentially updatable by creator |
sale_price |
Yes (listing/delisting) |
The immutability of creator, linked_permlink, and royalty_bps ensures that provenance and economic terms are permanent — they cannot be altered after the fact by anyone.
| Operation | Authority | Key parameters |
|---|---|---|
nft_mint |
Active | creator, linked_permlink, metadata, royalty_bps |
Creates a new NFT linked to an existing on-chain post. The post must be authored by the minter. The royalty percentage is set at this point and cannot be changed.
| Operation | Authority | Key parameters |
|---|---|---|
nft_transfer |
Active | from, to, token_id, memo |
Transfers ownership from one account to another. No fee is applied on direct transfers (only marketplace sales trigger fees).
| Operation | Authority | Key parameters |
|---|---|---|
nft_sell |
Active | seller, token_id, price, currency |
Lists the NFT on the marketplace at a specified price in PXA or PXS.
| Operation | Authority | Key parameters |
|---|---|---|
nft_buy |
Active | buyer, token_id |
Executes the purchase at the listed price. The protocol handles the full settlement atomically.
| Operation | Authority | Key parameters |
|---|---|---|
nft_cancel_sale |
Active | seller, token_id |
Removes the NFT from the marketplace without transferring it.
When an nft_buy operation executes, the protocol performs the following settlement in a single atomic transaction:
buyer_pays = listed_price + (listed_price × 10%)
Distribution:
→ creator receives: listed_price
→ burned: listed_price × 10%
buyer_pays = listed_price + (listed_price × 2.5%)
Distribution:
→ seller receives: listed_price - royalty_amount
→ creator receives: listed_price × royalty_bps / 10000
→ burned: listed_price × 2.5%
| Parameter | Value |
|---|---|
| Listed price | 2,000 PXA |
| Creator royalty | 5% (500 bps) |
| Marketplace fee | 2.5% |
| Flow | Amount |
|---|---|
| Buyer pays | 2,000 + 50 = 2,050 PXA |
| Creator receives (royalty) | 2,000 × 5% = 100 PXA |
| Seller receives | 2,000 − 100 = 1,900 PXA |
| Burned (marketplace fee) | 2,000 × 2.5% = 50 PXA |
All five steps (debit buyer, credit seller, credit creator, burn fee, transfer NFT ownership) execute as a single atomic operation. If any step fails, the entire transaction reverts. There is no partial settlement.
The linked_permlink field permanently connects the NFT to a specific comment operation (post) on the blockchain. This post contains the Base64-encoded pixel art in its body.
| Rule | Purpose |
|---|---|
| Post must exist on-chain | Prevents minting against nonexistent content |
| Post author must match minter | Prevents minting someone else's artwork |
| One NFT per post (expected) | Ensures 1:1 relationship between art and token |
The art and the token are inseparable at the protocol level. The NFT points to a specific on-chain post, and that post's content (the pixel art) is immutable. The result:
- The art cannot be swapped (linked_permlink is immutable)
- The art cannot be deleted (on-chain data is permanent)
- The art cannot be degraded (lossless encoding is preserved forever)
The metadata field stores descriptive information about the NFT as a JSON object. Expected structure:
{
"name": "Sunset Warrior",
"description": "A 64x64 pixel warrior at sunset",
"attributes": [
{ "trait_type": "Palette", "value": "Warm" },
{ "trait_type": "Canvas", "value": "64x64" },
{ "trait_type": "Style", "value": "Retro RPG" }
],
"image_format": "png",
"dimensions": [64, 64]
}Metadata provides the descriptive layer for marketplaces, galleries, and collection browsers. The format is inspired by the OpenSea metadata standard for interoperability, adapted for Pixa's on-chain context.
The NFT plugin will maintain its own indexes within the Graphene shared memory database:
| Index | Purpose |
|---|---|
| By token ID | Look up any NFT by its unique identifier |
| By owner | List all NFTs owned by a specific account |
| By creator | List all NFTs created by a specific artist |
| By sale status | List all NFTs currently on the marketplace |
| By price | Sort marketplace listings by price |
These indexes are maintained automatically as NFT operations are applied to blocks. API nodes expose them through query endpoints.
| Component | Specification |
|---|---|
| Implementation | Graphene plugin (native protocol objects) |
| Uniqueness | One token per minted piece |
| On-chain art link |
linked_permlink to a comment post (immutable) |
| Creator royalty | Set at mint time (basis points, immutable) |
| Primary sale fee | 10% burned |
| Secondary sale fee | 2.5% burned |
| Settlement | Atomic (all-or-nothing in a single operation) |
| Transfer cost | Free (RC only) |
| Metadata | JSON (name, description, attributes, format, dimensions) |
| Key operations |
nft_mint, nft_transfer, nft_sell, nft_buy, nft_cancel_sale
|
Pixa's NFT standard is designed for one purpose: making pixel art ownership verifiable, tradable, and permanent — with royalties guaranteed by consensus, not by contract. The native plugin approach sacrifices the flexibility of smart contracts for the certainty of protocol-level enforcement. On Pixa, the rules are not code that someone deployed. They are the law of the chain.