Lumaktaw sa nilalaman

Mag-mint mula sa site mo

Gamitin ang sarili mong EVM wallet connector at ang pampublikong ABI. Ang pag-mint sa KurvDrop ay operasyong ERC-20, hindi payable na ETH mint. Pambayad sa gas ng network ang ETH. Puwede pa ring maningil ng service fee ng koleksyon ang mga libreng yugto ng mint, kaya gamitin ang quote sa halip na ipagpalagay na walang gastos.

Hinahawakan ng halimbawang ito ang pampublikong yugto na walang auction module at nililimitahan ang bayad sa eksaktong quote. Gumagamit ito ng browser wallet na ibinigay ng bisita, hindi kailanman private key ng server. Ipakita sa mamimili ang kabuuan, ang karagdagang gastos sa token at ang chain, at kunin ang kumpirmasyon niya bago patakbuhin ang pag-apruba at ang pagsusulat ng mint.

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.');

Para sa yugtong may allowlist, kunin ang pinapayagang bilang ng pitaka ng mamimili at ang Merkle proof mula sa kasalukuyang daloy ng proof ng KURV at ipasa ang mga ito bilang ikatlo at ikaapat na argument ng mint. Huwag kailanman palitan ng walang lamang proof ang isang pribadong yugto. Ipinapatupad ng contract ang mga limitasyon ng pitaka, ang supply ng yugto, ang pag-pause, ang mga nakareserba para sa auction at ang kabuuang gastos; kailangang magtagumpay ang simulation bago magpadala. Gumagamit ng sarili nilang sale module ang mga auction na bumababa ang presyo at ang mga auction bawat piraso, at hindi sila karaniwang inline na yugto ng mint; gamitin ang opisyal na pahina hangga’t hindi mo pa naiintegrate at nasusuri ang ABI at daloy ng settlement ng module na iyon.

Ang huling argument ng mint ay address ng pitaka ng referrer, hindi tracking string. Gamitin ang zeroAddress bilang default hangga’t hindi mo sinasadyang i-integrate ang mga tuntunin sa referral ng naka-deploy na koleksyon. Ang contract ang nagpapasya ng aktuwal na hatian ng fee; hindi lumilikha ng komisyon ang pagdagdag lang ng link code. Gumagamit ang muling pagbebenta sa marketplace ng mga marketplace contract at mga pinirmahang order, hindi ng tawag sa unang mint na ipinapakita rito.

Para sa schema ng sagot tungkol sa koleksyon, tingnan ang Mga pampublikong API. Para sa handang widget, gamitin ang Mga embed ng koleksyon. Nalalapat pa rin ang mga pahintulot ng contract, ang mga bayarin at ang mga pinagbabatayang tuntunin ng koleksyon; tingnan ang Mga bayarin at Mga panganib at paalala.

Walang anuman dito ang payong pinansyal. Basahin ang Mga panganib at paalala bago ka mag-mint, bumili o magbenta pabalik. Bumalik sa kurv.fun. Patakaran sa Privacy. Mga Tuntunin ng Paggamit. .