Rarible ile mintleme
Rarible, birden çok EVM ağı üzerinde NFT uygulamaları oluşturmak için SDK'lar ve API'ler sağlayan çok zincirli bir NFT protokolü ve pazar yeridir.
NFT mintleme için, Rarible Multichain SDK kendi veya paylaşılan koleksiyonlarınıza mint yapmanıza ve hemen satış emirleri oluşturmanıza olanak tanır.
Rarible SDK IPFS yüklemeyi ele almadığından, burada gösterilen örneklerimiz Pinata bir IPFS barındırıcısı olarak kullanır. Bir JWT anahtarı almak için bir Pinata hesabına ihtiyacınız olacak.
Ayrıca sizden şunları isteyecekler:
Chiliz Chain üzerinde zaten dağıtılmış bir ERC-721 sözleşmesi. Kendinizin dağıtması gereken OpenZeppelin ERC-721 sözleşmesi Chiliz Chain üzerinde kendiniz dağıtmalısınız. Remix IDE bunu tarayıcı içinde yapmanızı sağlar. Bir blok gezgini kullanarak sözleşmeyi doğrulamayı unutmayın!
Bir Rarible API anahtarı. Nasıl elde edileceğini görmek için Başlarken bölümüne bakın:
Rarible SDK'yı kullanmak için birkaç kurulum yapmamız gerekiyor:
npm i @rarible/sdk @rarible/types ethers dotenv pinataKullandığımızın fark edeceksiniz ethers, ki bu bizim diğer bölümlerde kullandığımız viem alternatifidir.
Gerçekten de, Rarible geliştiricilere Web3 cüzdanlarıyla çalışmak için ethers.js veya web3.js kullanmalarını önerir — ve web3.js Mart 2025'te kullanım dışı bırakıldı, geriye sadece ethers de-facto tercih olarak kaldı.
Bir NFT koleksiyonu mintleme
Önce .env dosyanızı oluşturun:
# Chiliz RPC
RPC_URL=https://spicy-rpc.chiliz.com # veya bir Mainnet RPC
PRIVATE_KEY=0xabc... # minter'in anahtarı (SADECE sunucu tarafı)
# Rarible
RARIBLE_API_KEY=your_rarible_api_key
COLLECTION_ADDRESS=0xYourCollectionOnChiliz
SUPPLY=1 # 1 = ERC-721, >1 = ERC-1155
# Pinata
PINATA_JWT=eyJhbGciOi... # Pinata kontrol panelinden alınan JWT
PINATA_GATEWAY=your-subdomain.mypinata.cloud
# Medya / metadata girdileri
IMAGE_PATH=./art/image.png
NAME=My Chiliz NFT
DESCRIPTION=Rarible SDK aracılığıyla zincirde mintlendi
Tercih ettiğimiz iş akışı şudur:
Medyayı Pinata aracılığıyla IPFS'e yükleyin
Metadata dosyasını oluşturun ve yükleyin
Rarible SDK + zincir üstü mint
İlham alabileceğiniz tam örnek betik burada:
import 'dotenv/config'
import fs from 'fs'
import path from 'path'
import { Wallet, JsonRpcProvider } from 'ethers'
import { createRaribleSdk } from '@rarible/sdk'
import { toCollectionId, toUnionAddress } from '@rarible/types'
import { PinataSDK } from 'pinata'
function guessMime(p: string) {
const ext = path.extname(p).toLowerCase()
if (ext === '.png') return 'image/png'
if (ext === '.jpg' || ext === '.jpeg') return 'image/jpeg'
if (ext === '.webp') return 'image/webp'
if (ext === '.gif') return 'image/gif'
if (ext === '.mp4') return 'video/mp4'
if (ext === '.webm') return 'video/webm'
return 'application/octet-stream'
}
async function main() {
// Medyayı IPFS'e yükle
const pinata = new PinataSDK({
pinataJwt: process.env.PINATA_JWT!,
})
const mediaPath = process.env.IMAGE_PATH!
const mediaBlob = new Blob([fs.readFileSync(mediaPath)], { type: guessMime(mediaPath) })
const mediaFile = new File([mediaBlob], path.basename(mediaPath), { type: guessMime(mediaPath) })
const mediaUpload = await pinata.upload.public.file(mediaFile)
const imageUri = `ipfs://${mediaUpload.cid}`
// console.log('imageUri:', imageUri)
// Metadata dosyasını oluştur ve yükle
const metadata = {
name: process.env.NAME!,
description: process.env.DESCRIPTION!,
image: imageUri,
// animation_url: "ipfs://<cid>/video.mp4",
// attributes: [{ trait_type: "Tier", value: "Gold" }],
}
const metaUpload = await pinata.upload.public.json(metadata)
const metadataUri = `ipfs://${metaUpload.cid}`
// console.log('metadataUri:', metadataUri)
// Rarible zincir üstü mint
const provider = new JsonRpcProvider(process.env.RPC_URL!)
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider)
const sdk = createRaribleSdk(wallet, 'prod', { apiKey: process.env.RARIBLE_API_KEY! })
// Union ID'leri "<BLOCKCHAIN>:<address>" kullanır — burada BLOCKCHAIN "CHILIZ"'dir
const collectionId = toCollectionId(`CHILIZ:${process.env.COLLECTION_ADDRESS}`)
const creator = toUnionAddress(`CHILIZ:${wallet.address}`)
const { transaction, itemId } = await sdk.nft.mint({
collectionId,
uri: metadataUri,
supply: Number(process.env.SUPPLY || 1), // 721 için 1, 1155 için >1
})
const { hash } = await transaction.wait()
console.log('Minted item:', itemId, 'tx:', hash)
}
main().catch((e) => (console.error(e), process.exit(1)))
Bir NFT koleksiyonunu lazy-mint etmek
Lazy Minting, bir NFT'yi satışa koymadan önce mintleme için peşin maliyet ödemek istemeyenler için bir seçenektir. NFT'lerini satın alma listesine koyabilirler, ardından sadece satın alındığında veya aktarıldığında mint ederler. Bu nedenle gas ücretleri mintleme sürecinin bir parçasıdır ve alıcı tarafından ödenir.
Kısacası, lazy-minting NFT'yi satın alınana kadar blokzincire koymamak, yani önceden koymamak demektir.
Doğru tanımlanmış bir .env dosyasına ihtiyacınız olacak:
# Chiliz RPC / cüzdan
RPC_URL=https://spicy-rpc.chiliz.com
PRIVATE_KEY=0xabc... # yaratıcı anahtarı (gizli tutun)
# Rarible
RARIBLE_API_KEY=your_rarible_api_key
COLLECTION_ADDRESS=0xYourCollectionOnChiliz # ERC-721 veya ERC-1155
# Pinata
PINATA_JWT=eyJhbGciOi... # Pinata kontrol panelinden alınan JWT
PINATA_GATEWAY=your-subdomain.mypinata.cloud # isteğe bağlı (önizlemeler için)
# Medya / metadata
IMAGE_PATH=./art/image.png
NAME=My Chiliz NFT
DESCRIPTION=Rarible'da lazy-mintlendi (Chiliz)
SUPPLY=1 # 721 için 1; 1155 baskılar için >1
Ve şimdi projenizi lazy-mintlemek için örnek kod:
import 'dotenv/config'
import fs from 'fs'
import path from 'path'
import { Wallet, JsonRpcProvider } from 'ethers'
import { createRaribleSdk } from '@rarible/sdk'
import { toCollectionId, toUnionAddress } from '@rarible/types'
import { PinataSDK } from 'pinata'
function guessMime(p: string) {
const ext = path.extname(p).toLowerCase()
if (ext === '.png') return 'image/png'
if (ext === '.jpg' || ext === '.jpeg') return 'image/jpeg'
if (ext === '.webp') return 'image/webp'
if (ext === '.gif') return 'image/gif'
if (ext === '.mp4') return 'video/mp4'
if (ext === '.webm') return 'video/webm'
return 'application/octet-stream'
}
async function main() {
// Medyayı IPFS'e yükle
const pinata = new PinataSDK({
pinataJwt: process.env.PINATA_JWT!,
})
const mediaPath = process.env.IMAGE_PATH!
const mediaBlob = new Blob([fs.readFileSync(mediaPath)], { type: guessMime(mediaPath) })
const mediaFile = new File([mediaBlob], path.basename(mediaPath), { type: guessMime(mediaPath) })
const mediaUp = await pinata.upload.public.file(mediaFile)
const imageUri = `ipfs://${mediaUp.cid}`
const metadata = {
name: process.env.NAME!,
description: process.env.DESCRIPTION!,
image: imageUri,
// animation_url: "ipfs://<cid>/video.mp4",
// attributes: [{ trait_type: "Tier", value: "Gold" }],
}
const metaUp = await pinata.upload.public.json(metadata)
const metadataUri = `ipfs://${metaUp.cid}`
// Rarible lazy mint
const provider = new JsonRpcProvider(process.env.RPC_URL!)
const wallet = new Wallet(process.env.PRIVATE_KEY!, provider)
const sdk = createRaribleSdk(wallet, 'prod', { apiKey: process.env.RARIBLE_API_KEY! })
const collectionId = toCollectionId(`CHILIZ:${process.env.COLLECTION_ADDRESS}`)
const creator = toUnionAddress(`CHILIZ:${wallet.address}`)
// Lazy mint'i hazırlayın ve gönderin (zincir dışı öğe; alıcı satın alırken mint eder)
const prepared = await sdk.nft.mint.prepare({ collectionId })
const result = await prepared.submit({
uri: metadataUri,
supply: Number(process.env.SUPPLY || 1), // 721 için 1; 1155 için >1
lazyMint: true, // Evet, lütfen lazy olarak yap
creators: [{ account: creator, value: 10000 }], // %100 cüzdanınıza gider
royalties: [], // örn. %5 için [{ account: creator, value: 500 }]
})
// console.log('Lazy itemId:', result.itemId)
}
main().catch((e) => (console.error(e), process.exit(1)))
Last updated
Was this helpful?