跳转到内容
打开应用

在你的页面上铸造

从你自己的页面出售 KURV 合集有两种方式。两者都支持 Base 和 Solana,链上的每一项费用、价格和销售规则依然适用:同一个合约或程序收取同样的款项。

你想要使用
粘贴一行代码,得到一个 Mint 按钮Mint 按钮:买家在 KURV 窗口中签名
用你自己的钱包连接器,把买家留在你的页面上KURV 客户端:买家在自己的钱包中签名

网络用 84532(Base Sepolia)或 solana:devnet(Solana Devnet)指定。合集地址见公开 API。

<div id="mint" data-kurv-mint data-chain="84532" data-address="0x8354d02d8022f455db9acb235c6f6655c8adabd3"></div>
<script src="https://testnet.kurv.fun/sdk/mint-button/v1.js" async></script>
<script>
document.getElementById('mint').addEventListener('kurv:mint', (event) => {
if (event.detail.status === 'minted') console.log(event.detail.tx, event.detail.tokenIds);
});
</script>

点击后会打开一个 KURV 窗口。买家在那里用 KURV 账户或钱包签名,你的页面不会接触任何钱包或密钥。用 data-label、data-background 和 data-color 设置你自己的文字和颜色。如果你的网站发送 Content-Security-Policy,请在 script-src 中允许 https://testnet.kurv.fun。

窗口会先向你的页面打招呼,只有你的页面从自己的源回应时,窗口里才会显示网站名称。随后窗口会切断与你页面的联系,所以页面上的任何东西都碰不到正在签名的窗口。回复来自 KURV 的源,由那次点击生成的随机值来核对,并且只发给你页面的源,之后脚本会在该元素上触发 kurv:mint:

status含义
minted铸造已完成:chain、collection、tx、tokenIds、quantity。登录离开太久时,它可能出现在 closed 之后
closed窗口有一段时间没有任何动静,也没有铸造。KURV 从不说明原因
blocked浏览器拒绝打开窗口。请买家允许弹出窗口

没有铸造的买家,你的页面什么也不会得知:不知道他们的钱包,也不知道他们是否在白名单上。买家只能在 KURV 页面上读到这些答案。

发送 Cross-Origin-Opener-Policy: same-origin 的网站无法回应窗口的问候:铸造和回复仍然有效,但窗口里不会显示网站名称。请改用 same-origin-allow-popups。在你自己的服务器在链上读取到 tx 之前,请把它当作一种声明。

一个没有依赖的 ES 模块,类型在旁边的 v1.d.ts 中。它向公开 API请求最新报价和为这位买家准备的确切调用(包含白名单证明),再交给买家的钱包。

import { createKurvClient, eip1193Wallet } from 'https://testnet.kurv.fun/sdk/client/v1.js';
const kurv = createKurvClient();
const [account] = await window.ethereum.request({ method: 'eth_requestAccounts' });
const result = await kurv.mint({
chain: '84532',
address: '0x8354d02d8022f455db9acb235c6f6655c8adabd3',
wallet: eip1193Wallet(window.ethereum, account),
quantity: 1,
// Show the buyer the amounts, and answer false to sign nothing.
review: (plan) => confirm(`Pay at most ${plan.quote.max_total_base_units} base units?`),
});

在 Solana 上,请使用 Wallet Standard 钱包。KURV 只为新作品自己的账户签名,钱包则以买家身份签名并付款。网络费用和账户租金以 SOL 计。

import { createKurvClient, walletStandardWallet } from 'https://testnet.kurv.fun/sdk/client/v1.js';
const kurv = createKurvClient();
const result = await kurv.mint({
chain: 'solana:devnet',
address: collectionAddress,
wallet: walletStandardWallet(wallet, account, 'solana:devnet'),
});

任何连接器都可以:evmWallet 和 solanaWallet 几行代码就能包装你自己的钱包。客户端永远看不到密钥。

kurv.prepareMint({ chain, address, wallet, quantity }) 返回方案但不签任何东西,这个方案就是报价:当前的 quote.total_base_units,以及 quote.max_total_base_units,即这位买家最多可能以该合集的代币被收取的金额,由合约或程序强制执行。带有第二种代币的销售阶段还会以那种代币另收 quote.additional_total_base_units,网络费另计。按上涨价格出售的合集会签署比报价略高的金额,这样别人抢先完成的铸造不会让买家的铸造失败。

同样的方案也可以通过 HTTP 获取,不需要账户和密钥:

终端窗口
curl -X POST https://testnet.kurv.fun/api/v1/collections/84532/0x8354d02d8022f455db9acb235c6f6655c8adabd3/mint-call \
-H 'content-type: application/json' \
-d '{"wallet":"0xYourBuyer","quantity":1}'
error.code含义处理方式
not_on_allowlist这个销售窗口只对白名单开放告知买家
not_open合集目前没有在出售根据合集记录显示下一个窗口
use_window拍卖,或需要第二种币的后续窗口打开 error.window_url
rate_limited来自该网络的请求过多稍后再试

把它保存为任意 https 网站上的文件,或在你自己的机器上提供服务,然后点击按钮。需要在 Base Sepolia 上使用浏览器钱包。

<!doctype html>
<meta charset="utf-8">
<title>Mint</title>
<button id="mint">Mint</button>
<p id="said" role="status"></p>
<script type="module">
import { createKurvClient, eip1193Wallet } from 'https://testnet.kurv.fun/sdk/client/v1.js';
const kurv = createKurvClient();
const said = document.getElementById('said');
document.getElementById('mint').addEventListener('click', async () => {
try {
const [account] = await window.ethereum.request({ method: 'eth_requestAccounts' });
const result = await kurv.mint({
chain: '84532',
address: '0x8354d02d8022f455db9acb235c6f6655c8adabd3',
wallet: eip1193Wallet(window.ethereum, account),
review: (plan) => confirm(`Pay at most ${plan.quote.max_total_base_units} base units?`),
});
said.textContent = result.status === 'minted' ? `Minted: ${result.tx}` : 'Nothing was signed.';
} catch (error) {
said.textContent = error.message;
}
});
</script>

未揭晓的作品在这一切中始终保持封存:API 只返回调用和金额,绝不返回封存合集的文件。参见风险与免责声明。

此处内容均不构成财务建议。在铸造、购买或卖回之前,请先阅读风险与免责声明。返回 kurv.fun。隐私政策。使用条款。 。