Rarible ile Minting
Pinata IPFS barındırması ve deploy edilmiş bir OpenZeppelin ERC-721 sözleşmesi ile Rarible Multichain SDK kullanarak Chiliz Chain'de NFT basın; satış emri oluşturma dahil.
Son güncelleme
Bu yararlı oldu mu?
Bu yararlı oldu mu?
npm i @rarible/sdk @rarible/types ethers dotenv pinata# Chiliz RPC
RPC_URL=https://spicy-rpc.chiliz.com # veya Mainnet RPC'si
PRIVATE_KEY=0xabc... # basım yapan anahtarı (yalnızca sunucu tarafında)
# Rarible
RARIBLE_API_KEY=your_rarible_api_key
COLLECTION_ADDRESS=0xYourCollectionOnChiliz
SUPPLY=1 # 1 = ERC-721, >1 = ERC-1155
# Pinata
PINATA_JWT=eyJhbGciOi... # Panodan Pinata JWT
PINATA_GATEWAY=your-subdomain.mypinata.cloud
# Medya / meta veri girdileri
IMAGE_PATH=./art/image.png
NAME=My Chiliz NFT
DESCRIPTION=Minted on-chain via Rarible SDK
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)
// Meta veri 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ü basımı
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>" formatını kullanır — burada BLOCKCHAIN "CHILIZ"'dır
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)))
# 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... # Panodan Pinata JWT
PINATA_GATEWAY=your-subdomain.mypinata.cloud # isteğe bağlı (önizlemeler için)
# Medya / meta veri
IMAGE_PATH=./art/image.png
NAME=My Chiliz NFT
DESCRIPTION=Lazy-minted on Rarible (Chiliz)
SUPPLY=1 # 721 için 1; 1155 baskıları için >1
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 tembel basımı
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}`)
// Tembel basımı hazırla ve gönder (zincir dışı öğe; alıcı satın alımda basar)
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, tembel yapın lütfen
creators: [{ account: creator, value: 10000 }], // %100 cüzdanınıza gider
royalties: [], // örn. [{ account: creator, value: 500 }] %5 için
})
// console.log('Lazy itemId:', result.itemId)
}
main().catch((e) => (console.error(e), process.exit(1)))