Minter depuis votre page
Il y a deux façons de vendre une collection KURV depuis votre propre page. Les deux fonctionnent sur Base et sur Solana, et chaque frais, prix et règle de vente on-chain s’applique toujours : le même contrat ou programme encaisse le même paiement.
| Vous voulez | Utilisez |
|---|---|
| Coller une ligne et obtenir un bouton Minter | Le bouton Minter : l’acheteur signe dans une fenêtre KURV |
| Garder l’acheteur sur votre page avec votre propre connecteur de portefeuille | Le client KURV : l’acheteur signe dans son portefeuille |
Désignez le réseau avec 84532 (Base Sepolia) ou solana:devnet (Solana Devnet). Les adresses des collections sont dans les API publiques.
Le bouton Minter
Section intitulée « Le bouton Minter »<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>Un appui ouvre une fenêtre KURV. L’acheteur y signe avec son compte KURV ou un portefeuille, et votre page ne touche jamais un portefeuille ni une clé. Définissez data-label, data-background et data-color pour vos propres mots et couleurs. Si votre site envoie une Content-Security-Policy, autorisez https://testnet.kurv.fun dans script-src.
La fenêtre commence par saluer votre page, et le nom du site n’y apparaît que si votre page répond depuis sa propre origine. Ensuite elle coupe son lien avec votre page, si bien que rien sur une page ne peut toucher une fenêtre en train de signer. La réponse vient de l’origine de KURV, se reconnaît à la valeur aléatoire tirée par cet appui et ne va qu’à l’origine de votre page, puis le script déclenche kurv:mint sur l’élément :
status | Signifie |
|---|---|
minted | Le mint est terminé : chain, collection, tx, tokenIds, quantity. Il peut suivre closed quand une connexion a duré longtemps |
closed | Plus aucun signe de la fenêtre depuis un moment, et pas de mint. KURV ne dit jamais pourquoi |
blocked | Le navigateur a refusé d’ouvrir une fenêtre. Demandez à l’acheteur de l’autoriser |
Votre page n’apprend rien d’un acheteur qui ne minte pas : ni son portefeuille, ni s’il figure sur une liste d’autorisation. Les pages de KURV sont le seul endroit où l’acheteur lit ces réponses.
Un site qui envoie Cross-Origin-Opener-Policy: same-origin ne peut pas répondre au salut : le mint et la réponse fonctionnent toujours, et la fenêtre n’affiche aucun nom de site. Utilisez plutôt same-origin-allow-popups. Traitez tx comme une simple déclaration tant que votre propre serveur ne l’a pas lue sur la chaîne.
Le client KURV
Section intitulée « Le client KURV »Un module ES sans dépendances, avec ses types à côté, dans v1.d.ts. Il demande aux API publiques un devis à jour et les appels exacts pour cet acheteur, justificatif de la liste d’autorisation compris, et les remet au portefeuille de l’acheteur.
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?`),});Sur Solana, utilisez un portefeuille Wallet Standard. KURV ne signe que pour le compte de la nouvelle pièce, et le portefeuille signe et paie en tant qu’acheteur. Les frais de réseau et le loyer du compte sont en 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'),});N’importe quel connecteur convient : evmWallet et solanaWallet enveloppent le vôtre en quelques lignes. Le client ne voit jamais une clé.
kurv.prepareMint({ chain, address, wallet, quantity }) répond avec le plan et ne signe rien, et ce plan est le devis : quote.total_base_units maintenant, et quote.max_total_base_units, le plus que cet acheteur puisse se voir facturer dans le jeton de la collection, que le contrat ou le programme fait respecter. Une fenêtre de vente avec un second jeton facture aussi quote.additional_total_base_units dans ce jeton, et les frais de réseau s’y ajoutent. Une collection vendue à prix croissant signe un peu au-dessus du devis, pour qu’un mint arrivé avant ne fasse pas échouer celui de l’acheteur.
Le même plan en HTTP, sans compte et sans clé :
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 | Signifie | Que faire |
|---|---|---|
not_on_allowlist | Cette fenêtre de vente est réservée à sa liste d’autorisation | Dites-le à l’acheteur |
not_open | La collection n’est pas en vente pour le moment | Affichez sa prochaine fenêtre depuis la fiche de la collection |
use_window | Une enchère ou une fenêtre ultérieure avec une seconde monnaie | Ouvrez error.window_url |
rate_limited | Trop de requêtes depuis ce réseau | Réessayez dans un instant |
Une page qui fonctionne
Section intitulée « Une page qui fonctionne »Enregistrez ceci comme fichier sur n’importe quel site https, ou servez-le depuis votre propre machine, puis appuyez sur le bouton. Il faut un portefeuille de navigateur sur 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>L’art non révélé reste scellé dans tout cela : l’API répond avec des appels et des montants, jamais avec les fichiers d’une collection scellée. Voir Risques et avertissement.
Rien ici ne constitue un conseil financier. Lisez Risques et avertissement avant de minter, d’acheter ou de revendre au Vault. Retour à kurv.fun. Politique de confidentialité. Conditions d’utilisation. .