Acuña desde tu página
Hay dos formas de vender una colección de KURV desde tu propia página. Las dos funcionan en Base y en Solana, y todas las comisiones, precios y reglas de venta en la cadena siguen vigentes: el mismo contrato o programa cobra el mismo pago.
| Quieres | Usa |
|---|---|
| Pegar una línea y tener un botón de acuñar | El botón de acuñar: el comprador firma en una ventana de KURV |
| Mantener al comprador en tu página con tu propio conector de cartera | El cliente de KURV: el comprador firma en su cartera |
Indica la red con 84532 (Base Sepolia) o solana:devnet (Solana Devnet). Las direcciones de las colecciones están en las API públicas.
El botón de acuñar
Sección titulada «El botón de acuñar»<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>Una pulsación abre una ventana de KURV. El comprador firma allí con su cuenta de KURV o con una cartera, y tu página nunca toca una cartera ni una clave. Define data-label, data-background y data-color para poner tus propias palabras y colores. Si tu sitio envía una Content-Security-Policy, permite https://testnet.kurv.fun en script-src.
La ventana primero saluda a tu página, y el nombre del sitio aparece en ella solo si tu página responde desde su propio origen. Después corta su vínculo con tu página, así que nada de lo que haya en una página puede tocar una ventana que está firmando. La respuesta llega del origen de KURV, se reconoce por el valor aleatorio que generó esa pulsación y va solo al origen de tu página, y entonces el script lanza kurv:mint en el elemento:
status | Significa |
|---|---|
minted | La acuñación se completó: chain, collection, tx, tokenIds, quantity. Puede llegar después de closed cuando un inicio de sesión tardó mucho |
closed | Hace un rato que no hay señal de la ventana, y no hubo acuñación. KURV nunca dice por qué |
blocked | El navegador se negó a abrir una ventana. Pide al comprador que la permita |
Tu página no sabe nada de un comprador que no acuña: ni su cartera, ni si está en una lista de permitidos. Las páginas de KURV son el único lugar donde el comprador lee esas respuestas.
Un sitio que envía Cross-Origin-Opener-Policy: same-origin no puede responder al saludo: la acuñación y la respuesta siguen funcionando, y la ventana no muestra el nombre del sitio. Usa same-origin-allow-popups en su lugar. Trata tx como una afirmación hasta que tu propio servidor la haya leído en la cadena.
El cliente de KURV
Sección titulada «El cliente de KURV»Un módulo ES sin dependencias, con sus tipos al lado, en v1.d.ts. Pide a las API públicas un presupuesto actualizado y las llamadas exactas para este comprador, con el justificante de la lista de permitidos incluido, y se las entrega a la cartera del comprador.
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?`),});En Solana, usa una cartera compatible con Wallet Standard. KURV firma solo por la cuenta de la pieza nueva, y la cartera firma y paga como comprador. Las comisiones de red y el alquiler de la cuenta son 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'),});Sirve cualquier conector: evmWallet y solanaWallet envuelven el tuyo en unas pocas líneas. El cliente nunca ve una clave.
kurv.prepareMint({ chain, address, wallet, quantity }) responde con el plan y no firma nada, y ese plan es el presupuesto: quote.total_base_units ahora y quote.max_total_base_units, lo máximo que se puede cobrar a este comprador en la moneda de la colección, que el contrato o el programa hace cumplir. Una ventana de venta con una segunda moneda cobra además quote.additional_total_base_units en esa moneda, y la comisión de red va aparte. Una colección que se vende con precio creciente firma algo por encima del presupuesto, para que una acuñación que llegue antes no haga fallar la del comprador.
El mismo plan por HTTP, sin cuenta y sin clave:
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 | Significa | Qué hacer |
|---|---|---|
not_on_allowlist | Esta ventana de venta es para su lista de permitidos | Díselo al comprador |
not_open | La colección no está a la venta ahora | Muestra su próxima ventana a partir del registro de la colección |
use_window | Una subasta o una ventana posterior con una segunda moneda | Abre error.window_url |
rate_limited | Demasiadas solicitudes desde esta red | Inténtalo de nuevo en breve |
Una página que funciona
Sección titulada «Una página que funciona»Guarda esto como un archivo en cualquier sitio https, o sírvelo desde tu propio equipo, y pulsa el botón. Necesita una cartera de navegador en 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>El arte sin revelar sigue sellado en todo esto: la API responde con llamadas e importes, nunca con los archivos de una colección sellada. Consulta Riesgos y aviso legal.
Nada de lo que hay aquí es asesoramiento financiero. Lee Riesgos y aviso legal antes de acuñar, comprar o vender al Vault. Volver a kurv.fun. Política de privacidad. Términos de uso. .