Farklı blockchain ekosistemlerinde token ve NFT oluşturmak için örnek akıllı sözleşmeler.
web3-languages-sample/
├── solidity/
│ ├── token/ERC20Token.sol
│ └── nft/ERC721NFT.sol
├── rust/
│ ├── solana/
│ │ ├── token/src/lib.rs
│ │ └── nft/src/lib.rs
│ └── near/
│ ├── token/src/lib.rs
│ └── nft/src/lib.rs
└── move/
├── aptos/
│ ├── token/sources/token.move
│ └── nft/sources/nft.move
└── sui/
├── token/sources/token.move
└── nft/sources/nft.move
EVM uyumlu zincirler için Solidity örnekleri (Ethereum, Polygon, BNB Chain vb.).
Standart: EIP-20
Dosya: solidity/token/ERC20Token.sol
OpenZeppelin ERC20 ve Ownable kullanılarak oluşturulmuştur.
| Fonksiyon | Açıklama |
|---|---|
constructor(name, symbol, initialSupply) |
Token oluşturur ve başlangıç arzını deployer'a gönderir |
mint(to, amount) |
Yeni token basar (sadece owner) |
burn(amount) |
Çağıranın bakiyesinden token yakar |
Gereksinimler:
# Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
# OpenZeppelin kurulumu
forge install OpenZeppelin/openzeppelin-contractsBuild & Deploy (Foundry):
cd solidity
forge build
forge create --rpc-url <rpc_url> --private-key <private_key> \
token/ERC20Token.sol:MyToken \
--constructor-args "My Token" "MTK" 1000000Standart: EIP-721
Dosya: solidity/nft/ERC721NFT.sol
OpenZeppelin ERC721URIStorage kullanılarak oluşturulmuştur. Her token'a ayrı bir metadata URI atanabilir.
| Fonksiyon | Açıklama |
|---|---|
constructor(name, symbol) |
Koleksiyon oluşturur |
mint(to, tokenURI) |
NFT basar ve metadata URI atar (sadece owner) |
burn(tokenId) |
NFT'yi yakar (sadece token sahibi) |
Solana programları Anchor framework'ü kullanılarak yazılmıştır.
Gereksinimler:
# Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
# Anchor
cargo install --git https://github.com/coral-xyz/anchor anchor-cli --lockedStandart: SPL Token
Dosya: rust/solana/token/src/lib.rs
Solana'nın native SPL Token programı üzerinden Anchor CPI kullanılarak oluşturulmuştur.
| Instruction | Açıklama |
|---|---|
create_token(decimals) |
Token mint account'u oluşturur |
mint_tokens(amount) |
Token basar ve associated token account'a gönderir |
burn_tokens(amount) |
Token yakar |
Build & Deploy:
cd rust/solana/token
anchor build
anchor deploy --provider.cluster devnetStandart: Metaplex Token Metadata
Dosya: rust/solana/nft/src/lib.rs
SPL Token (decimals=0, supply=1) + Metaplex metadata + master edition kombinasyonu ile gerçek bir 1/1 NFT oluşturur.
| Instruction | Açıklama |
|---|---|
mint_nft(name, symbol, uri) |
NFT basar, metadata ve master edition oluşturur |
Not: uri alanı JSON metadata dosyasına (Arweave, IPFS vb.) işaret etmelidir.
NEAR programları near-sdk-rs kullanılarak yazılmıştır.
Gereksinimler:
# Rust + wasm target
rustup target add wasm32-unknown-unknown
# NEAR CLI
npm install -g near-cliStandart: NEP-141
Dosya: rust/near/token/src/lib.rs
NEAR'ın resmi fungible token standardını implemente eder.
| Metod | Açıklama |
|---|---|
new(owner_id, total_supply, name, symbol, decimals) |
Contract'ı başlatır |
ft_transfer(receiver_id, amount, memo) |
Token transfer eder |
ft_balance_of(account_id) |
Bakiye sorgular |
ft_total_supply() |
Toplam arzı döner |
ft_metadata() |
Token metadata'sını döner |
mint(account_id, amount) |
Token basar (sadece owner) |
burn(amount) |
Token yakar |
Build & Deploy:
cd rust/near/token
cargo build --target wasm32-unknown-unknown --release
near deploy --accountId <your-account>.testnet \
--wasmFile target/wasm32-unknown-unknown/release/token.wasmStandart: NEP-171
Dosya: rust/near/nft/src/lib.rs
NEAR'ın resmi NFT standardını implemente eder.
| Metod | Açıklama |
|---|---|
new(owner_id) |
Contract'ı başlatır |
nft_mint(receiver_id, metadata) |
NFT basar (sadece owner) |
nft_transfer(receiver_id, token_id, memo) |
NFT transfer eder |
nft_token(token_id) |
Token bilgisini döner |
nft_tokens_for_owner(account_id) |
Hesabın tüm NFT'lerini döner |
nft_total_supply() |
Toplam NFT sayısını döner |
TokenMetadata alanları: title, description, media, media_hash, copies, issued_at, extra, reference
Gereksinimler:
# Aptos CLI
curl -fsSL "https://aptos.dev/scripts/install_cli.py" | python3
# Testnet hesabı oluştur
aptos initStandart: Aptos Fungible Asset
Dosya: move/aptos/token/sources/token.move
Aptos'un modern Fungible Asset standardını kullanır (legacy coin modülünün yerini almıştır).
| Fonksiyon | Açıklama |
|---|---|
init_module |
Token'ı oluşturur, deploy sırasında otomatik çağrılır |
mint(admin, to, amount) |
Token basar |
transfer(from, to, amount, admin) |
Token transfer eder |
burn(from, amount, admin) |
Token yakar |
balance_of(account, admin) |
Bakiye sorgular |
Build & Deploy:
cd move/aptos/token
aptos move compile
aptos move publish --profile testnetStandart: Aptos Token Objects
Dosya: move/aptos/nft/sources/nft.move
aptos_token_objects framework'ü ile koleksiyon ve token nesneleri oluşturur.
| Fonksiyon | Açıklama |
|---|---|
create_collection(creator) |
NFT koleksiyonu oluşturur (bir kez çağrılır) |
mint_nft(creator, receiver, name, description, uri) |
NFT basar ve alıcıya gönderir |
update_uri(owner, token, new_uri) |
Token URI'sini günceller |
burn_nft(owner, token) |
NFT'yi yok eder |
get_token_info(token) |
Token bilgilerini döner |
Gereksinimler:
# Sui CLI
cargo install --locked --git https://github.com/MystenLabs/sui.git \
--branch testnet sui
# Testnet hesabı
sui client new-address ed25519
sui client switch --env testnetStandart: Sui Coin
Dosya: move/sui/token/sources/token.move
Sui'nin coin::create_currency ile one-time witness pattern'i kullanılarak oluşturulmuştur.
| Fonksiyon | Açıklama |
|---|---|
init |
Token'ı oluşturur, TreasuryCap deployer'a gönderilir |
mint(treasury_cap, amount, recipient) |
Token basar |
burn(treasury_cap, coin) |
Token yakar |
transfer_tokens(coin, recipient) |
Tüm coin'i transfer eder |
transfer_amount(coin, amount, recipient) |
Kısmi transfer eder |
Build & Deploy:
cd move/sui/token
sui move build
sui client publish --gas-budget 100000000Dosya: move/sui/nft/sources/nft.move
Sui'nin nesne modeli kullanılarak oluşturulmuştur. Her NFT bağımsız bir key nesnesidir. Mint, transfer ve burn işlemleri event emit eder.
| Fonksiyon | Açıklama |
|---|---|
init |
MintCap oluşturur ve deployer'a gönderir |
mint_nft(cap, name, description, url, recipient) |
NFT basar |
transfer_nft(nft, recipient) |
NFT transfer eder |
burn_nft(nft) |
NFT'yi yok eder |
Events: NFTMinted, NFTTransferred, NFTBurned
| Özellik | Solidity | Rust/Solana | Rust/NEAR | Move/Aptos | Move/Sui |
|---|---|---|---|---|---|
| VM | EVM | SVM | NEAR VM | MoveVM | MoveVM |
| Token Standardı | ERC-20 | SPL Token | NEP-141 | Fungible Asset | Coin |
| NFT Standardı | ERC-721 | Metaplex | NEP-171 | Token Objects | Object Model |
| Depolama Modeli | Account | Account | Account | Resource | Object |
| Dil | Solidity | Rust + Anchor | Rust | Move | Move |