2 stable releases
2.0.0 | Jun 4, 2024 |
---|---|
1.0.0 | Dec 20, 2023 |
#9 in #metaplex
402 downloads per month
Used in 2 crates
(via sns-sdk)
70KB
1.5K
SLoC
Name tokenizer
Tokenize domain name into Metaplex NFTs
Table of contents
Program ID
Mainnet program ID nftD3vbNkNqfj2Sd3HZwbpw4BxxKWr4AjGb9X38JeZk
Introduction
This program allows people to tokenize their domain name in NFTs that follow the Metaplex standard with a creation/redemption mechanism.
Reproducible build
A reproducible build script (build.sh
) can be used to build the program using docker
Security
For security disclosures or to report a bug, please visit ImmuneFi for more information on our bug bounty program.
Collection
NFTs are all part of a verified collection E5ZnBpH9DYcxRkumKdS4ayJ3Ftb6o3E8wSbXw4N92GWg
.
Mint
NFT mints are PDAs derived from the domain name key they represent. The derivation is made as follow:
pub const MINT_PREFIX: &[u8; 14] = b"tokenized_name";
// ...
let (mint, mint_nonce) = Pubkey::find_program_address(
&[MINT_PREFIX, &accounts.name_account.key.to_bytes()],
program_id,
);
NFT
When a domain name is tokenized its ownership is transfered to a PDA that will be holding the domain while it's tokenized. In exchange, the program mints an NFT for the user. When redeeming the domain is transfered back to the NFT holder and the NFT burned.
During the tokenization process an NftRecord
is created with the following state:
pub struct NftRecord {
/// Tag
pub tag: Tag,
/// Nonce
pub nonce: u8,
/// Name account of the record
pub name_account: Pubkey,
/// Record owner
pub owner: Pubkey,
/// NFT mint
pub nft_mint: Pubkey,
}
If funds are sent by mistake to the NftRecord
instead of the NFT holder while the domain is tokenized the owner has the possibility to withdraw them. The "correct owner" is determined as follow:
- If the
NftRecord
is active i.e domain is tokenized: The correct owner is the NFT holder - If
NftRecord
is inactive i.e the NFT has been redeemed: The correct owner is the last person who redeemed (owner
field in theNftRecord
)
Tests
Rust
Functional Rust tests can be run with
cargo test-bpf --features devnet
JS
End to end tests can be run with
yarn jest
Dependencies
~37MB
~633K SLoC