コンテンツにスキップ
アプリを開く

自分のページからミントする

KURV のコレクションを自分のページから販売する方法は2つあります。どちらも Base と Solana で動き、オンチェーンの手数料、価格、販売ルールはそのまま適用されます。同じコントラクトまたはプログラムが、同じ支払いを受け取ります。

やりたいこと使うもの
1行を貼り付けて、ミントボタンを置くミントボタン:購入者は 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 があり、後者はコントラクトまたはプログラムが強制します。2つ目のコインがある販売期間では、そのコインで 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オークション、または2つ目のコインを使う後のウィンドウです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 に戻る。プライバシーポリシー。利用規約。 。