Đúc từ trang web của bạn
Hãy dùng trình kết nối ví EVM của riêng bạn và ABI công khai. Đúc trên KurvDrop là một thao tác ERC-20, không phải lượt đúc trả bằng ETH qua hàm payable. ETH dùng để trả gas của mạng. Giai đoạn đúc miễn phí vẫn có thể thu phí dịch vụ của bộ sưu tập, vì vậy hãy dùng báo giá thay vì mặc định chi phí bằng không.
Ví dụ này xử lý một giai đoạn công khai không có mô-đun đấu giá và giới hạn khoản thanh toán đúng bằng báo giá. Ví dụ dùng ví trình duyệt do khách truy cập cung cấp, không bao giờ dùng khóa riêng tư của máy chủ. Hãy hiển thị cho người mua tổng số tiền, chi phí token bổ sung và chuỗi khối, rồi lấy xác nhận của họ trước khi chạy các thao tác ghi để phê duyệt và đúc.
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.');Với giai đoạn có danh sách cho phép, hãy lấy số lượng được phép và Merkle proof của ví người mua từ quy trình proof hiện có của KURV, rồi truyền chúng làm đối số thứ ba và thứ tư của lượt đúc. Không bao giờ thay bằng một proof rỗng cho giai đoạn riêng tư. Giới hạn theo ví, số lượng của giai đoạn, trạng thái tạm dừng, phần giữ lại cho đấu giá và tổng chi phí đều do hợp đồng áp đặt; mô phỏng phải thành công trước khi gửi. Đấu giá giảm giá và đấu giá từng NFT dùng mô-đun bán riêng và không phải là giai đoạn mint nội tuyến thông thường; hãy dùng trang chính thức cho đến khi bạn tích hợp và kiểm chứng ABI cùng quy trình thanh toán của mô-đun đó.
Đối số cuối cùng của lượt đúc là địa chỉ ví người giới thiệu, không phải chuỗi theo dõi. Hãy mặc định dùng zeroAddress cho đến khi bạn chủ động tích hợp điều khoản giới thiệu của bộ sưu tập đã triển khai. Hợp đồng quyết định cách chia phí thực tế; thêm mã liên kết tự nó không tạo ra hoa hồng. Giao dịch bán lại trên sàn dùng hợp đồng của sàn và lệnh đã ký, không phải lời gọi đúc lần đầu được trình bày ở đây.
Để xem lược đồ phản hồi của bộ sưu tập, hãy đọc API công khai. Để có widget dựng sẵn, hãy dùng Nhúng bộ sưu tập. Quyền hạn của hợp đồng, phí và điều khoản gốc của bộ sưu tập vẫn được áp dụng; xem Phí và Rủi ro và tuyên bố miễn trừ.
Không có nội dung nào ở đây là lời khuyên tài chính. Hãy đọc Rủi ro và tuyên bố miễn trừ trước khi đúc, mua hoặc bán lại. Quay lại kurv.fun. Chính sách quyền riêng tư. Điều khoản sử dụng. .
