İçeriğe geç
Uygulamayı aç

Sitenizden mintleyin

Kendi EVM cüzdan bağlayıcınızı ve herkese açık ABI’yi kullanın. KurvDrop mintleme ödenebilir (payable) bir ETH minti değil, bir ERC-20 işlemidir. ETH ağ gas’ını karşılar. Ücretsiz mint aşamaları yine de koleksiyonun hizmet ücretini alabilir; bu yüzden maliyetin sıfır olduğunu varsaymak yerine fiyat teklifini kullanın.

Bu örnek, açık artırma modülü olmayan herkese açık bir aşamayı ele alır ve ödemeyi tam olarak fiyat teklifiyle sınırlar. Asla bir sunucu özel anahtarı değil, ziyaretçinin sağladığı bir tarayıcı cüzdanı kullanır. Onay ve mint yazma işlemlerini çalıştırmadan önce toplamı, ek token maliyetini ve zinciri alıcınıza gösterin ve onayını alın.

import {
createPublicClient, createWalletClient, custom, erc20Abi,
http, zeroAddress, zeroHash,
} from 'viem';
import { baseSepolia } from 'viem/chains';
const api = 'https://testnet.kurv.fun';
const { abi } = await fetch(`${api}/api/v1/contracts/kurvdrop`).then(r => r.json());
const publicClient = createPublicClient({ chain: baseSepolia, transport: http() });
const walletClient = createWalletClient({ chain: baseSepolia, transport: custom(window.ethereum) });
const [account] = await walletClient.requestAddresses();
await walletClient.switchChain({ id: baseSepolia.id });
// Woof Pack, verified in KURV's Base Sepolia catalog.
const address = '0x8354d02d8022f455db9acb235c6f6655c8adabd3';
const { collection: live } = await fetch(
`${api}/api/v1/collections/84532/${address}`
).then(r => r.json());
if (live.contract_type !== 'KurvDrop' || live.mint.active_phase_id === null) {
throw new Error('No public mint phase is available.');
}
const phaseId = BigInt(live.mint.active_phase_id);
const quantity = 1n;
const phase = await publicClient.readContract({ address, abi, functionName: 'getPhase', args: [phaseId] });
if (phase.module !== zeroAddress || phase.merkleRoot !== zeroHash) {
throw new Error('This example supports only public phases without an auction module.');
}
const paymentToken = await publicClient.readContract({ address, abi, functionName: 'paymentToken' });
const [maxTotalCost] = await publicClient.readContract({ address, abi, functionName: 'quoteMint', args: [phaseId, quantity] });
// Display these amounts using each token's on-chain decimals and symbol.
const required = new Map([[paymentToken.toLowerCase(), maxTotalCost]]);
if (phase.token !== zeroAddress && phase.tokenPrice > 0n) {
const token = phase.token.toLowerCase();
required.set(token, (required.get(token) ?? 0n) + phase.tokenPrice * quantity);
}
// Run only after the buyer reviews and confirms the displayed amounts.
for (const [token, amount] of required) {
const allowance = await publicClient.readContract({ address: token, abi: erc20Abi, functionName: 'allowance', args: [account, address] });
if (allowance >= amount) continue;
// Reset an existing allowance for tokens requiring zero before a new approval.
if (allowance > 0n) {
const reset = await walletClient.writeContract({ account, address: token, abi: erc20Abi, functionName: 'approve', args: [address, 0n] });
await publicClient.waitForTransactionReceipt({ hash: reset });
}
const approved = await walletClient.writeContract({ account, address: token, abi: erc20Abi, functionName: 'approve', args: [address, amount] });
await publicClient.waitForTransactionReceipt({ hash: approved });
}
// Exact quote ceiling: if the required price increased, simulation/mint refuses.
const { request } = await publicClient.simulateContract({
account, address, abi, functionName: 'mint',
args: [phaseId, quantity, 0n, [], maxTotalCost, zeroAddress],
});
const hash = await walletClient.writeContract(request);
const receipt = await publicClient.waitForTransactionReceipt({ hash });
if (receipt.status !== 'success') throw new Error('Mint did not complete.');

İzin listeli bir aşama için alıcı cüzdanının hakkını ve Merkle kanıtını KURV’un mevcut kanıt akışından alın ve bunları üçüncü ve dördüncü mint argümanları olarak verin. Gizli bir aşama için asla boş bir kanıt kullanmayın. Cüzdan sınırları, aşama arzı, duraklatma, açık artırma beklemeleri ve toplam maliyet sözleşme tarafından uygulanır; göndermeden önce simülasyon başarılı olmalıdır. Azalan fiyatlı açık artırmalar ve parça açık artırmaları kendi satış modüllerini kullanır ve sıradan satır içi mint aşamaları değildir; o modülün ABI’sini ve kapanış akışını entegre edip doğrulayana kadar resmi sayfayı kullanın.

Son mint argümanı bir izleme metni değil, bir yönlendiren cüzdan adresidir. Dağıtılmış koleksiyonun yönlendirme koşullarını bilinçli olarak entegre edene kadar varsayılan olarak zeroAddress kullanın. Gerçek ücret dağılımına sözleşme karar verir; bir bağlantı kodu eklemek tek başına komisyon oluşturmaz. Pazar yerindeki yeniden satışlar, burada gösterilen ilk mint çağrısını değil, pazar yeri sözleşmelerini ve imzalı emirleri kullanır.

Koleksiyon yanıt şeması için Herkese açık API’ler sayfasına bakın. Hazır bir widget için Koleksiyon yerleştirmeleri sayfasını kullanın. Sözleşme izinleri, ücretler ve koleksiyonun temel koşulları yine de geçerlidir; bkz. Ücretler ve Riskler ve sorumluluk reddi.

Buradaki hiçbir şey finansal tavsiye değildir. Mintlemeden, satın almadan veya Vault’a geri satmadan önce Riskler ve sorumluluk reddi sayfasını okuyun. kurv.fun’a geri dönün. Gizlilik politikası. Kullanım koşulları. .