コンテンツにスキップ

自分のサイトからミントする

あなた自身の EVM ウォレットコネクターと、公開 ABI を使います。KurvDrop のミントは ERC-20 の操作で、ETH を支払う payable なミントではありません。ETH はネットワークのガス代に使われます。無料ミントのフェーズでも、コレクションのサービス手数料がかかることがあるため、費用がゼロだと決めつけず、見積もりを使ってください。

この例は、オークションモジュールのない公開フェーズを扱い、支払いを見積もりちょうどの額に制限します。使うのは訪問者が用意したブラウザのウォレットで、サーバーの秘密鍵は決して使いません。承認とミントの書き込みを実行する前に、合計額、追加のトークンの費用、チェーンを購入者に表示し、購入者の確認を得てください。

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

許可リストのあるフェーズでは、KURV の既存の証明フローから、購入者のウォレットの上限と Merkle 証明を取得し、ミントの3番目と4番目の引数として渡します。非公開のフェーズで、空の証明で代用することは決してしないでください。ウォレットごとの上限、フェーズの供給数、一時停止、オークションによる保留、合計の費用は、コントラクトが強制します。送信する前に、シミュレーションが成功する必要があります。値下がり式のオークションと作品のオークションは、それぞれ専用の販売モジュールを使い、通常のインラインの mint のフェーズではありません。そのモジュールの ABI と決済の流れを組み込んで検証するまでは、公式のページを使ってください。

ミントの最後の引数は紹介者のウォレットアドレスで、トラッキング用の文字列ではありません。デプロイされたコレクションの紹介条件を意図して組み込むまでは、zeroAddress を既定にしてください。実際の手数料の分け方はコントラクトが決めます。リンクのコードを加えるだけで、紹介料が発生するわけではありません。マーケットでの再販売は、ここで示したプライマリーミントの呼び出しではなく、マーケットのコントラクトと署名済みの注文を使います。

コレクションのレスポンスのスキーマについては、公開 APIをご覧ください。すぐに使えるウィジェットには、コレクションの埋め込みを使ってください。コントラクトの権限、手数料、その元になるコレクションの条件は、引き続き適用されます。手数料とリスクと免責事項をご覧ください。

ここに書かれている内容は、金融に関する助言ではありません。ミント、購入、売り戻しの前に、リスクと免責事項をお読みください。kurv.fun に戻る。プライバシーポリシー。利用規約。 。