السكّ من صفحتك
هناك طريقتان لبيع مجموعة 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.
تبدأ النافذة بتحية صفحتك، ولا يظهر اسم الموقع فيها إلا إذا ردّت صفحتك من أصلها. ثم تقطع النافذة صلتها بصفحتك، فلا يستطيع شيء في الصفحة لمس نافذة تجري فيها عملية التوقيع. وتأتي الإجابة من أصل KURV، وتُعرف بالقيمة العشوائية التي أنشأها ذلك الضغط، وتُرسل إلى أصل صفحتك وحده، ثم يطلق السكربت 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 على أنه ادعاء إلى أن يقرأه خادمك على السلسلة.
عميل KURV
قسم «عميل KURV»وحدة 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. سياسة الخصوصية. شروط الاستخدام. .