Von deiner Seite aus minten
Es gibt zwei Wege, eine KURV-Kollektion von deiner eigenen Seite aus zu verkaufen. Beide funktionieren auf Base und auf Solana, und jede Gebühr, jeder Preis und jede Verkaufsregel on-chain gilt weiterhin: derselbe Vertrag oder dasselbe Programm nimmt dieselbe Zahlung an.
| Du willst | Nutze |
|---|---|
| Eine Zeile einfügen und eine Mint-Schaltfläche bekommen | Die Mint-Schaltfläche: Der Käufer signiert in einem KURV-Fenster |
| Den Käufer mit deinem eigenen Wallet-Connector auf deiner Seite halten | Der KURV-Client: Der Käufer signiert in seiner Wallet |
Nenne das Netzwerk mit 84532 (Base Sepolia) oder solana:devnet (Solana Devnet). Die Adressen der Kollektionen stehen in den Öffentlichen APIs.
Die Mint-Schaltfläche
Abschnitt betitelt „Die Mint-Schaltfläche“<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>Ein Klick öffnet ein KURV-Fenster. Der Käufer signiert dort mit seinem KURV-Konto oder einer Wallet, und deine Seite berührt nie eine Wallet oder einen Schlüssel. Setze data-label, data-background und data-color für deine eigenen Worte und Farben. Wenn deine Website eine Content-Security-Policy sendet, erlaube https://testnet.kurv.fun in script-src.
Das Fenster begrüßt zuerst deine Seite, und der Name der Website erscheint darin nur, wenn deine Seite vom eigenen Origin antwortet. Danach kappt es die Verbindung zu deiner Seite, sodass nichts auf einer Seite ein Fenster berühren kann, das gerade signiert. Die Antwort kommt vom Origin von KURV, wird am Zufallswert erkannt, den dieser Klick erzeugt hat, und geht nur an den Origin deiner Seite, und dann löst das Skript kurv:mint am Element aus:
status | Bedeutet |
|---|---|
minted | Der Mint ist durch: chain, collection, tx, tokenIds, quantity. Das kann auf closed folgen, wenn eine Anmeldung lange gedauert hat |
closed | Seit einer Weile kein Lebenszeichen vom Fenster und kein Mint. KURV nennt nie den Grund |
blocked | Der Browser hat das Öffnen eines Fensters verweigert. Bitte den Käufer, es zuzulassen |
Deine Seite erfährt nichts über einen Käufer, der nicht mintet: nicht seine Wallet, nicht ob er auf einer Allowlist steht. Nur auf KURV-Seiten liest ein Käufer diese Antworten.
Eine Website, die Cross-Origin-Opener-Policy: same-origin sendet, kann auf die Begrüßung nicht antworten: Der Mint und die Antwort funktionieren trotzdem, und das Fenster zeigt keinen Namen der Website. Nutze stattdessen same-origin-allow-popups. Behandle tx als Behauptung, bis dein eigener Server sie auf der Blockchain gelesen hat.
Der KURV-Client
Abschnitt betitelt „Der KURV-Client“Ein ES-Modul ohne Abhängigkeiten, seine Typen liegen daneben in v1.d.ts. Es fragt die Öffentlichen APIs nach einem frischen Angebot und den genauen Aufrufen für diesen Käufer, samt Allowlist-Nachweis, und reicht sie an die Wallet des Käufers weiter.
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?`),});Nutze auf Solana eine Wallet nach Wallet Standard. KURV signiert nur für das Konto des neuen Stücks, und die Wallet signiert und zahlt als Käufer. Netzwerkgebühren und Kontomiete fallen in SOL an.
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'),});Jeder Connector funktioniert: evmWallet und solanaWallet umhüllen deinen in ein paar Zeilen. Der Client sieht nie einen Schlüssel.
kurv.prepareMint({ chain, address, wallet, quantity }) antwortet mit dem Plan und signiert nichts, und dieser Plan ist das Angebot: quote.total_base_units jetzt und quote.max_total_base_units, das Meiste, was diesem Käufer im Coin der Kollektion berechnet werden kann, vom Vertrag oder Programm durchgesetzt. Ein Verkaufsfenster mit einem zweiten Coin berechnet zusätzlich quote.additional_total_base_units in diesem Coin, und die Netzwerkgebühr kommt obendrauf. Eine Kollektion mit steigendem Preis signiert etwas über dem Angebot, damit ein Mint, der zuerst durchgeht, den des Käufers nicht scheitern lässt.
Derselbe Plan über HTTP, ohne Konto und ohne Schlüssel:
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 | Bedeutet | Was zu tun ist |
|---|---|---|
not_on_allowlist | Dieses Verkaufsfenster ist für seine Allowlist | Sag es dem Käufer |
not_open | Die Kollektion verkauft gerade nicht | Zeige ihr nächstes Fenster aus dem Kollektionseintrag |
use_window | Eine Auktion oder ein späteres Fenster mit einer zweiten Münze | Öffne error.window_url |
rate_limited | Zu viele Anfragen aus diesem Netzwerk | Versuche es in Kürze erneut |
Eine funktionierende Seite
Abschnitt betitelt „Eine funktionierende Seite“Speichere dies als Datei auf einer beliebigen https-Website oder liefere es von deinem eigenen Rechner aus, und drücke die Schaltfläche. Du brauchst eine Browser-Wallet auf 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>Nicht enthülltes Kunstwerk bleibt in all dem versiegelt: Die API antwortet mit Aufrufen und Beträgen, nie mit den Dateien einer versiegelten Kollektion. Siehe Risiken und Haftungsausschluss.
Nichts hier ist eine Finanzberatung. Lies Risiken und Haftungsausschluss, bevor du mintest, kaufst oder an den Vault zurückverkaufst. Zurück zu kurv.fun. Datenschutzerklärung. Nutzungsbedingungen. .