Cunhe pela sua página
Há dois jeitos de vender uma coleção do KURV a partir da sua própria página. Os dois funcionam na Base e na Solana, e toda taxa, preço e regra de venda on-chain continua valendo: o mesmo contrato ou programa recebe o mesmo pagamento.
| Você quer | Use |
|---|---|
| Colar uma linha e ter um botão de cunhar | O botão de cunhar: o comprador assina em uma janela do KURV |
| Manter o comprador na sua página com o seu próprio conector de carteira | O cliente do KURV: o comprador assina na própria carteira |
Indique a rede com 84532 (Base Sepolia) ou solana:devnet (Solana Devnet). Os endereços das coleções estão nas APIs públicas.
O botão de cunhar
Seção intitulada “O botão de cunhar”<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>Um toque abre uma janela do KURV. O comprador assina ali com a conta do KURV ou com uma carteira, e a sua página nunca toca em uma carteira nem em uma chave. Defina data-label, data-background e data-color para usar as suas próprias palavras e cores. Se o seu site envia uma Content-Security-Policy, permita https://testnet.kurv.fun em script-src.
A janela primeiro cumprimenta a sua página, e o nome do site só aparece nela se a sua página responder da própria origem. Depois ela corta o vínculo com a sua página, de modo que nada em uma página consegue tocar uma janela que está assinando. A resposta vem da origem do KURV, é reconhecida pelo valor aleatório que aquele toque gerou e vai só para a origem da sua página, e então o script dispara kurv:mint no elemento:
status | Significa |
|---|---|
minted | A cunhagem foi concluída: chain, collection, tx, tokenIds, quantity. Pode vir depois de closed quando um login demorou muito |
closed | Faz um tempo que não há sinal da janela, e não houve cunhagem. O KURV nunca diz o motivo |
blocked | O navegador se recusou a abrir uma janela. Peça ao comprador que a permita |
Sua página não fica sabendo nada de um comprador que não cunha: nem a carteira dele, nem se está em uma lista de permissão. As páginas do KURV são o único lugar onde o comprador lê essas respostas.
Um site que envia Cross-Origin-Opener-Policy: same-origin não consegue responder ao cumprimento: a cunhagem e a resposta continuam funcionando, e a janela não mostra o nome do site. Use same-origin-allow-popups no lugar. Trate tx como uma alegação até que o seu próprio servidor a tenha lido na cadeia.
O cliente do KURV
Seção intitulada “O cliente do KURV”Um módulo ES sem dependências, com os tipos ao lado, em v1.d.ts. Ele pede às APIs públicas uma cotação atualizada e as chamadas exatas para este comprador, com a comprovação da lista de permissão incluída, e as entrega à carteira do 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?`),});Na Solana, use uma carteira Wallet Standard. O KURV assina só pela conta da peça nova, e a carteira assina e paga como comprador. As taxas de rede e o aluguel da conta são em 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'),});Qualquer conector serve: evmWallet e solanaWallet envolvem o seu em poucas linhas. O cliente nunca vê uma chave.
kurv.prepareMint({ chain, address, wallet, quantity }) responde com o plano e não assina nada, e esse plano é a cotação: quote.total_base_units agora e quote.max_total_base_units, o máximo que este comprador pode pagar na moeda da coleção, que o contrato ou o programa faz valer. Uma janela de venda com uma segunda moeda cobra também quote.additional_total_base_units nessa moeda, e a taxa de rede vem por cima. Uma coleção vendida com preço crescente assina um pouco acima da cotação, para que uma cunhagem que chegue antes não faça a do comprador falhar.
O mesmo plano por HTTP, sem conta e sem chave:
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 | O que fazer |
|---|---|---|
not_on_allowlist | Esta janela de venda é para a sua lista de permissão | Avise o comprador |
not_open | A coleção não está à venda agora | Mostre a próxima janela dela a partir do registro da coleção |
use_window | Um leilão ou uma janela posterior com uma segunda moeda | Abra error.window_url |
rate_limited | Muitas solicitações desta rede | Tente de novo daqui a pouco |
Uma página que funciona
Seção intitulada “Uma página que funciona”Salve isto como um arquivo em qualquer site https, ou sirva a partir da sua própria máquina, e toque no botão. É preciso ter uma carteira de navegador na 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>A arte ainda não revelada continua selada em tudo isso: a API responde com chamadas e valores, nunca com os arquivos de uma coleção selada. Veja Riscos e isenção de responsabilidade.
Nada aqui é recomendação financeira. Leia Riscos e aviso legal antes de cunhar, comprar ou vender ao Vault. Voltar para kurv.fun. Política de privacidade. Termos de uso. .