Перейти к содержимому
Открыть приложение

Минт с вашей страницы

Есть два способа продавать коллекцию KURV со своей страницы. Оба работают на Base и на Solana, и все комиссии, цены и правила продажи в сети по-прежнему действуют: тот же контракт или программа принимает тот же платёж.

Вам нужноИспользуйте
Вставить одну строку и получить кнопку минтаКнопка минта: покупатель подписывает в окне 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, разрешите https://testnet.kurv.fun в script-src.

Окно сначала здоровается с вашей страницей, и название сайта появляется в нём, только если страница отвечает со своего origin. Затем окно разрывает связь со страницей, так что ничто на странице не может коснуться окна, в котором идёт подпись. Ответ приходит от origin KURV, опознаётся по случайному значению, созданному тем нажатием, и уходит только на origin вашей страницы, а затем скрипт вызывает 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 отвечает вызовами и суммами, но никогда не файлами запечатанной коллекции. См. Риски и отказ от ответственности.

Ничто здесь не является финансовым советом. Прочитайте раздел «Риски и отказ от ответственности», прежде чем минтить, покупать или продавать обратно в Vault. Вернуться на kurv.fun. Политика конфиденциальности. Условия использования. .