Rand Protocol
مستندات
توکن‌ها

استقرار یک توکن RPL

گام‌به‌گام از یک کیف پول تا یک توکن زنده روی Rand - توکن RPL چیست، ساخت توکنی با عرضه ثابت یا قابل ضرب، ضرب توکن و واگذاری اختیار آن، ارسال و سوزاندن شیلددار آن، و بررسی آن در مرورگر بلاک‌چین با یک کلید.

این صفحه نشان می‌دهد یک توکن چگونه از هیچ به یک دارایی زنده و قابل انتقال روی Rand تبدیل می‌شود. RPL استاندارد توکن Rand است و در زنجیرهٔ 14 جدید است. اگر قبلاً یک ERC-20 مستقر کرده‌اید یا یک SPL mint ساخته‌اید، بخش اول را باید آهسته بخوانید، چون توکن RPL هیچ‌کدام از این دو نیست. توکن‌های RPL صفحهٔ مفهومی پشت این صفحه است.

1. توکن RPL چیست

توکن RPL یک ورودی در رجیستری توکن‌های دفتر کل است، نه یک قرارداد هوشمند. کدی برای نوشتن، کامپایل یا حسابرسی وجود ندارد. ساختن یک توکن یک تراکنش است که یک سطر به رجیستری اضافه می‌کند، و از آن پس واحدهای توکن یادداشت‌های شیلدشدهٔ معمولی‌اند که در همان استخر RAND نگهداری می‌شوند و به همان شیوه خرج می‌شوند.

فیلدقاعده
asset id32 بایت، هویت توکن. به شکل rpl1… نوشته می‌شود: bech32m، 62 کاراکتر، با کدِ کنترلی (checksum)
indexعددی کوچک که زنجیره هنگام ثبت اختصاص می‌دهد (1، 2، …؛ 0 همان RAND است). مخففی برای id در این زنجیره
name1 تا 32 بایت UTF-8، در زمان ساخت ثابت می‌شود
symbol1 تا 12 نویسهٔ ASCII قابل چاپ، در زمان ساخت ثابت می‌شود
decimals0 تا 9، در زمان ساخت ثابت می‌شود
mint authorityچه کسی می‌تواند واحدهای بیشتری صادر کند: هیچ‌کس (None)، یک کلید (Key) یا پل (Bridge)
total supplyعمومی است و فقط با mint یا burn تغییر می‌کند

نمادها یکتا نیستند. هر کسی می‌تواند توکنی به نام USDC بسازد، دقیقاً مانند Ethereum و Solana. هویت توکن همان asset id آن است؛ پس پیش از پذیرفتن یا فهرست کردن یک توکن، id با قالب rpl1… را بررسی کنید، نه نماد را. شکل متنی دارای checksum است: id با غلط تایپی رد می‌شود و به جای دیگری فرستاده نمی‌شود.

تفاوت با ERC-20 و SPL

ERC-20 / SPLRPL
توکن چیستیک قرارداد، یا حسابی که متعلق به یک برنامه استیک سطر رجیستری؛ بدون کد برای هر توکن، پس بدون مالیات انتقال، rebase یا hook
موجودی‌هاعمومی، به ازای هر آدرسیادداشت‌های شیلدشده. هیچ‌کس نمی‌تواند موجودی یک دارنده را بخواند یا دارندگان یک توکن را فهرست کند
انتقالفرستنده، گیرنده و مبلغ عمومیتوسط فرستنده اثبات می‌شود و کاملاً شیلدشده است. ناظر نمی‌تواند آن را از یک پرداخت RAND تشخیص دهد
کارمزدارز بومی زنجیرهRAND. دارندهٔ توکن برای جابه‌جایی آن به کمی RAND نیاز دارد، همان‌طور که دارندهٔ ERC-20 به ETH نیاز دارد
دریافتSPL ابتدا به یک حساب توکن نیاز داردچیزی برای راه‌اندازی نیست. هر آدرس rand1… می‌تواند هر توکنی را دریافت کند
مبالغuint256 / u64u64، و حداکثر 9 رقم اعشار
approve / transferFromبلهدر v1 نیست
freeze، blacklist، pauseاغلبندارد
فرادادهخارج از زنجیره یا قابل تغییرروی زنجیره و تغییرناپذیر
نگهداری توسط یک برنامهبلهدر v1 نیست

آنچه عمومی می‌ماند مرز است: ثبت یک توکن، هر mint و هر burn، هر کدام با مبلغش. همین باعث می‌شود عرضهٔ کل را هر کسی بتواند حسابرسی کند. انتقال‌ها بین دارندگان چیزی را فاش نمی‌کنند، از جمله اینکه کدام توکن جابه‌جا شده است.

2. پیش از شروع

به این نیاز داریدچگونه
خط فرمان randاجرای یک نود آن را می‌سازد؛ خط فرمان همهٔ فرمان‌ها را فهرست می‌کند
یک کیف پولrand keygen یک فایل کلید خرج‌کردن می‌نویسد و rand address آدرس rand1… آن را چاپ می‌کند (حساب‌ها و آدرس‌ها)
یک نود برای ارتباطکیف پول با یک نود از طریق JSON-RPC صحبت می‌کند، به‌طور پیش‌فرض نود خودتان در http://127.0.0.1:8545. نود RPC خود را به localhost متصل می‌کند، بنابراین معمول‌ترین راه‌اندازی نودی از خودتان است که زنجیرهٔ 20 را دنبال می‌کند. بدون آن، --rpc https://rpc.randprotocol.org را بدهید: نقطهٔ پایانی عمومی همهٔ کارهای این صفحه را پشتیبانی می‌کند، به‌جز rand faucet که آن را رد می‌کند (JSON-RPC، نقطهٔ پایانی عمومی)
RAND برای کارمزدچند RAND در کیف پول. 100 RAND از یک فراخوانی faucet همهٔ کارهای این صفحه را پوشش می‌دهد، اما در زنجیرهٔ 20 فرمان rand faucet فقط به 16 کیف پولی پرداخت می‌کند که genesis آن‌ها را در فهرست مجاز قرار داده است (staking.faucet_recipients) و هر آدرس دیگری را با the faucet may not mint to this recipient رد می‌کند؛ هر کیف پول دیگر باید از کسی که مقداری RAND دارد دریافت کند (Mint و burn)
کارمزد ثبتیک پارامتر genesis زنجیره، بین 1 و 10,000 RAND. در زنجیرهٔ 20 برابر 1 RAND است، بنابراین rand token create هزینه‌ای برابر 1.001 RAND دارد: پایهٔ 0.001 RAND که هر تراکنش می‌پردازد، به‌علاوهٔ کارمزد ثبت، که زنجیرهٔ 20 آن را می‌سوزاند و به پیشنهاددهندهٔ بلوک نمی‌پردازد. هر فرمان دیگر اینجا همان پایهٔ 0.001 RAND را هزینه دارد
حدود 6 GB حافظهٔ آزادهر تراکنش روی دستگاه خودتان اثبات می‌شود. در زنجیرهٔ 20 این دو اثبات است و کیف پول برای هر کدام یک خط چاپ می‌کند: proving the spend authorisation on this machine (tier 10; seconds)… و سپس proving the bundle (tier 14; about a minute and a half on a laptop)…. اثبات bundle حدود 100 ثانیه و حدود 5.7 GB حافظه در حین اجرا می‌گیرد؛ این دو اثبات روی شبکه حدود 1.37 MB و حدود 1.5 MB‌اند، روی هم حدود 2.85 MB. این برای هر گام زیر که زنجیره را تغییر می‌دهد صادق است: ساخت، هر mint، هر ارسال و هر burn
rand --key wallet.key.json keygen     # writes the spend key; refuses to overwrite
rand --key wallet.key.json address    # your rand1… address
rand --key wallet.key.json faucet     # testnet only, allowlisted wallets only: asks a validator node to mint 100 RAND to this wallet
rand --key wallet.key.json balance    # scans the tree, prints the spendable value and the unspent note count

مقدار پیش‌فرض --key برابر wallet.key.json است و می‌توان آن را یک بار با RAND_KEY تنظیم کرد؛ --rpc (یا RAND_RPC) نودی را که باید با آن صحبت شود مشخص می‌کند و پیش‌فرضش http://127.0.0.1:8545 است. فرمان‌های زیر --key را صریحاً می‌نویسند. پیش از آنکه یک اثبات خرج کنید، بررسی کنید که نود روی زنجیرهٔ 20 است: متد JSON-RPC با نام rand_chainId در آنجا 20 برمی‌گرداند. کیف پول باید ساخته‌شدهٔ زنجیرهٔ 20 و نسخهٔ v0.6.8 باشد: زنجیرهٔ 20 هر اثبات و هر پیام امضاشده، از جمله mint توکن، را به هش genesis خود پیوند می‌دهد، بنابراین rand نسخهٔ v0.6.7 اثبات‌ها و امضاهایی می‌سازد که زنجیرهٔ 20 رد می‌کند.

3. ساخت توکن

token create مبالغ را در کوچک‌ترین واحد توکن می‌گیرد. --fixed-supply و --initial اعداد صحیحی از واحدهای پایه‌اند: با --decimals 2، مبلغ 1000000 برابر 10,000.00 توکن است. هر فرمان بعدی (rand send --asset، rand token mint، rand token burn) از v0.5.10 واحدهای نمایشی توکن را می‌گیرد، همان‌طور که مبالغ RAND بر حسب RAND هستند (1.5): کیف پول decimals را از سطر رجیستری توکن می‌خواند و ارقام اعشاری بیش از آنچه توکن دارد رد می‌شود. روی زنجیره، مبلغ همیشه همان عدد صحیح واحد پایه است.

ابتدا یک چیز را تصمیم بگیرید: آیا هرگز باید بتوان واحدهای بیشتری صادر کرد؟ پاسخ در زمان ساخت در توکن ثابت می‌شود و بعداً نمی‌توان آن را گسترده‌تر کرد.

عرضهٔ ثابتقابل mint
mint authorityNoneKey: یک کلید Dilithium2 که شما نگه می‌دارید
عرضهکل عرضه یک بار در تراکنش سازنده mint می‌شوداز صفر شروع می‌شود، یا از --initial؛ دارندهٔ کلید در طول زمان mint می‌کند
پرچم‌ها--fixed-supply <N> --to <rand1…>--authority-key-out <FILE>، و در صورت نیاز --initial <N> --to <rand1…>
مناسب براییک توکن با سقف، یک واحد عضویت یا رأی‌گیریصادرکننده‌ای که عرضه را افزایش می‌دهد، مانند توکن امتیاز یا پاداش

یک توکن با عرضهٔ ثابت

rand --key wallet.key.json token create \
  --name "Example Credits" \
  --symbol EXC \
  --decimals 2 \
  --fixed-supply 1000000 \
  --to rand1…

--to آدرس کامل rand1… است که عرضه را دریافت می‌کند، برای مثال خروجی rand address. --fixed-supply بر حسب واحد پایه است: 1000000 با 2 رقم اعشار برابر 10,000.00 EXC است.

این فرمان index بعدی رجیستری و کارمزد ثبت را از نود می‌خواند، یادداشت mint اولیه را می‌سازد، یک bundle کارمزد را اثبات می‌کند، ثبت را ارسال می‌کند و منتظر بلوک می‌ماند. در صورت موفقیت، ارسال را گزارش می‌دهد، سپس خطی به شکل index <N>, id <64 hex> (<rpl1…>) چاپ می‌کند و بعد committed at height <H>. id با قالب rpl1… را یادداشت کنید: این هویت توکن است و هر فرمان بعدی آن را می‌گیرد.

کارمزد پیش‌فرض پایه به‌علاوهٔ کارمزد ثبت زنجیره است، 1.001 RAND در زنجیرهٔ 20، پس چیزی برای محاسبه نیست؛ --fee (بر حسب RAND) آن را بالا می‌برد. --no-wait به‌محض ارسال تراکنش برمی‌گردد و خط committed را نمی‌آورد. --cuda روی یک GPU متصل NVIDIA اثبات می‌کند، به ساختی با --features cuda نیاز دارد و به CPU بازنمی‌گردد.

اگر هنگام اثبات شما توکن دیگری ثبت شود، index‌ای را می‌گیرد که اثبات شما برای آن مهر شده بود. نود ثبت را رد می‌کند و فرمان another token took index N first — re-run to register at N+1 را با اعداد واقعی چاپ می‌کند. ثبت ردشده هرگز به بلوک نمی‌رسد؛ آنچه از دست می‌رود خود اثبات است، حدود 100 ثانیه کار. فرمان را دوباره اجرا کنید تا در برابر index بعدی اثبات کند.

اکنون کل عرضه در یک یادداشت شیلدشده است که متعلق به آدرس --to است. ثبت و مبلغ آن عمومی‌اند؛ اینکه گیرنده بعداً با آن یادداشت چه می‌کند عمومی نیست.

یک توکن قابل mint

rand --key wallet.key.json token create \
  --name "Example Points" \
  --symbol EXP \
  --decimals 0 \
  --authority-key-out exp-authority.key.json

این دستور یک کلید Dilithium2 تازه در exp-authority.key.json می‌نویسد (با مجوز 0600 و بدون بازنویسی فایل موجود) و توکن را با همان کلید به‌عنوان مرجع ضرب (mint authority) و با عرضهٔ صفر ثبت می‌کند. خروجی همان دو خطی است که برای توکن با عرضهٔ ثابت می‌بینید. دقیقاً یکی از --fixed-supply و --authority-key-out باید داده شود.

برای ضرب نخستین مقدار در همان تراکنش، --initial و --to را اضافه کنید؛ این دو باید با هم داده شوند:

rand --key wallet.key.json token create \
  --name "Example Points" \
  --symbol EXP \
  --decimals 0 \
  --authority-key-out exp-authority.key.json \
  --initial 5000 \
  --to rand1…

تا زمانی که ثبت در جریان است، کلید در exp-authority.key.json.pending می‌ماند. به‌محض اینکه زنجیر ثبت را بپذیرد به exp-authority.key.json ارتقا می‌یابد و اگر زنجیر آن را رد کند، دور انداخته می‌شود. اگر اتصال قطع شود و نتیجه نامعلوم بماند، فایل در .pending باقی می‌ماند: پیش از حذف آن، rand token list را بررسی کنید.

فایل کلید، قدرت چاپ توکن است. آن را آفلاین نگه دارید و از آن نسخهٔ پشتیبان بگیرید؛ این کلید از کلید خرج‌کردن کیف پول شما جداست و برای ارسال یا دریافت هرگز لازم نیست.

چرا گیرندهٔ نخستین ضرب بخشی از شناسه است

ثبت توکن را سازندهٔ آن امضا نمی‌کند. هر کسی که ثبت شما را در mempool در حال انتظار ببیند، می‌تواند نسخه‌ای از آن را با بستهٔ کارمزد خودش ارسال کند. اگر شناسهٔ دارایی فقط نام، نماد و مقدار را پوشش می‌داد، آن نسخه می‌توانست نشانی کپی‌کننده را به‌عنوان گیرنده بنامد و زودتر به بلوک برسد: او مالک شناسه می‌شد و، برای توکن با عرضهٔ ثابت، مالک کل عرضه تا ابد.

بنابراین شناسه هش همهٔ محتوای ثبت است، از جمله ضرب اولیه: مقدار، گیرنده، تصادفی‌سازی، زمان و پاکت رمزگذاری‌شدهٔ آن. نسخه‌ای با گیرندهٔ متفاوت به شناسهٔ دارایی دیگری هش می‌شود. آن توکنی متفاوت است که اتفاقاً نماد شما را دارد، و این تنها چیزی است که یک نماد غیر یکتا هرگز وعده داده بود. شناسهٔ شما فقط با گیرندهٔ شما قابل ثبت است.

--salt <hex32> نمک ۳۲ بایتی را تعیین می‌کند که آن هم در شناسه وارد می‌شود. اگر آن را حذف کنید، کیف پول یکی را تصادفی انتخاب می‌کند. وقتی به شناسهٔ تکرارپذیر نیاز دارید آن را تعیین کنید، مثلاً برای انتشار شناسه پیش از وجود توکن.

تأیید ثبت

rand token info rpl1…          # by id: rpl1… or 64 hex characters
rand token info 2              # or by the index `token create` printed
rand token list --limit 20     # one page of the registry; --from <index> pages on

token info ردیف توکن را به‌صورت JSON چاپ می‌کند: index، id، id_text (شکل rpl1…)، name، symbol، decimals، authority، mint_nonce، total_supply و registered_at. مقدار authority برای توکن با عرضهٔ ثابت {"kind":"none"} و برای توکن قابل‌ضرب {"kind":"key","key":…,"address":…} است. total_supply رشته‌ای دهدهی به واحد پایه است. token list فیلدهای enabled، registration_fee، next_index و ردیف‌های tokens را چاپ می‌کند. هر دو فهرست کامل گره را می‌خوانند، بنابراین گره نمی‌فهمد به کدام توکن علاقه داشتید.

یا از طریق JSON-RPC، که پارامتر می‌تواند اندیس، شناسهٔ هگز ۶۴ نویسه‌ای یا شکل rpl1… باشد:

curl -s http://127.0.0.1:8545 -H 'content-type: application/json' -d '{
  "jsonrpc": "2.0", "id": 1,
  "method": "rand_getToken",
  "params": ["rpl1…"]
}'

نتیجه همان ردیفی است که token info چاپ می‌کند، یا اگر چنین توکنی وجود نداشته باشد null؛ شناسهٔ نادرست (مجموع کنترلی اشتباه، حروف ترکیبی بزرگ و کوچک، طول نادرست) خطای -32602 است. rand_getTokens پارامترهای [from_index, limit] را می‌گیرد و در میان همهٔ توکن‌های ثبت‌شده صفحه‌بندی می‌کند، و rand_getTokenSupply فقط { total_supply, backings } را برمی‌گرداند. هیچ‌کدام به کلید نیاز ندارند. JSON-RPC را ببینید.

ردیفی که امروز روی chain 20 وجود دارد zUSD است، توکن پل‌شده در اندیس 1. explorer بدون نیاز به گرهٔ شخصی، رجیستری گره را ارائه می‌کند:

curl -s https://randscan.org/api/v1/tokens

روی chain 14، در تاریخ 2026-09-20، این درخواست "registration_fee": 1000000000، "next_index": 2 و یک توکن را برگرداند که اینجا تا نخستین پشتوانه‌اش کوتاه شده است:

{
  "index": 1,
  "id": "32e5ab28c782c663e14da2650a3feb12f16a12db85599f4f62dc169d26f37b1f",
  "id_text": "rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx",
  "name": "Shielded USD",
  "symbol": "zUSD",
  "decimals": 8,
  "authority": {
    "kind": "bridge",
    "backings": [
      { "chain": 2, "token": "000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7",
        "decimals": 6, "locked": "0", "minted_today": "0", "mint_day": 20716,
        "mint_cap_per_day": "10000000000000" }
    ]
  },
  "mint_nonce": 0,
  "total_supply": "0",
  "registered_at": 256
}

روی chain 20 ردیف همان id، id_text، نام، نماد و پشتوانه‌ها را دارد، اما zUSD در genesis فهرست شده و در ارتفاع 256 ثبت نشده است (registered_at برابر 0)، و عرضهٔ آن از 99 zUSD شروع شد: 22 قفل‌شده روی Ethereum USDT، 22 روی BSC USDT، 30 روی Tron USDT و 25 روی Solana USDT، که از chain 19 منتقل شده بود. (عرضهٔ chain 19 از 10 zUSD و همه روی Solana شروع شد؛ chain 18 با 9 روی Tron و 1 روی Solana.) هر ردیف پشتوانه فیلدهای پنجرهٔ غلتان minted_in_window، mint_window_secs و mint_headroom را نیز دارد.

نسخهٔ explorer از registration_fee یک عدد JSON است؛ RPC خود گره آن را، مانند هر مقدار دیگر، به‌صورت رشتهٔ دهدهی برمی‌گرداند. روی chain 20، مانند هر زنجیر از 15 به بعد، rand_getTokens گره فیلدهای max_tokens (4096)، burn_registration_fee و bound_note_value (هر دو true) را هم دارد (توکن‌های RPL).

4. ضرب کنید و مرجع را واگذار کنید

فقط توکنی با مرجع Key قابل ضرب است، و فقط توسط همان کلید.

rand --key wallet.key.json token mint \
  --asset rpl1… \
  --to rand1… \
  --amount 5000 \
  --authority-key exp-authority.key.json

--amount به واحدهای نمایشی توکن است: 5000 از این توکن بدون رقم اعشار برابر 5,000 واحد پایه است، و 1.5 از توکنی با 6 رقم اعشار برابر 1,500,000 خواهد بود. پیش از ساخت یادداشت یا اثبات، کیف پول ردیف توکن را می‌خواند و اگر توکن با Key مجاز نشده باشد یا --authority-key همان کلیدی نباشد که رجیستری نام برده، رد می‌کند. در صورت موفقیت، ارسال را گزارش می‌دهد و minted <amount> (<base units> units) of asset <index> to <address> را چاپ می‌کند. --fee (پیش‌فرض 0.001 RAND)، --no-wait و --cuda همان‌گونه که در token create کار می‌کنند.

ضرب یک یادداشت برای گیرنده اضافه می‌کند و عرضهٔ کل را بالا می‌برد. مقدار و کلید عمومی گیرنده روی شبکه آشکارند: ضرب عمداً رویدادی عمومی است، مانند واریز از طریق پل. به‌محض اینکه گیرنده یادداشت را جابه‌جا کند، مثل هر چیز دیگر محافظت‌شده (shielded) می‌شود. کیف پولی که کارمزد را می‌پردازد (--key) و کلیدی که ضرب را مجاز می‌کند (--authority-key) کلیدهای متفاوتی‌اند و می‌توانند در اختیار افراد مختلف باشند.

هر ضرب روی شناسهٔ زنجیر، شناسهٔ دارایی و شمارنده‌ای که رجیستری نگه می‌دارد امضا می‌شود، و روی chain 20 روی هش genesis هم (rand-rpl-mint-2)، بنابراین ضرب را نمی‌توان روی این زنجیر بازپخش کرد یا به زنجیر دیگری کپی کرد، حتی زنجیری که شناسهٔ زنجیر یکسانی دارد. set-authority نیز به همین شکل مقید می‌شود.

برای انتقال مرجع به کلیدی تازه، یا برای کنار گذاشتن همیشگی آن:

rand --key wallet.key.json token set-authority \
  --asset rpl1… \
  --authority-key exp-authority.key.json \
  --new-key next-authority.key.json

rand --key wallet.key.json token set-authority \
  --asset rpl1… \
  --authority-key exp-authority.key.json \
  --renounce

--new-key یک فایل کلید می‌گیرد و توکن را به کلید عمومی آن فایل می‌سپارد؛ دقیقاً یکی از --new-key و --renounce باید داده شود. این دستور asset <index>'s mint authority is now <public key hex> یا asset <index>'s mint authority is renounced for good را چاپ می‌کند. هر کدام هزینهٔ پایهٔ 0.001 RAND و یک دور اثبات دارد. --renounce توکن را در عرضهٔ فعلی‌اش به توکنی با عرضهٔ ثابت تبدیل می‌کند. این کار بازگشت‌ناپذیر است: مرجع می‌تواند از کلیدی به کلید دیگر یا از یک کلید به هیچ‌کس منتقل شود، و چیز دیگری ممکن نیست. توکنی که با عرضهٔ ثابت ساخته شده هرگز قابل ضرب نمی‌شود.

5. استفاده از آن

ارسال

rand --key wallet.key.json send rand1… 250 --asset rpl1…

این دستور 250 واحد نمایشی از توکن را می‌فرستد: 250 EXP با 0 رقم اعشار، یا 250.00 EXC (25,000 واحد پایه) با 2 رقم. گیرنده و مقدار، مانند RAND، موقعیتی‌اند. پیش از هر اثباتی، کیف پول یک خط چاپ می‌کند، to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units)، و می‌پرسد send? [y/N]. اثر انگشت را با اثر انگشت گیرنده و واحدهای پایه را با آنچه قصد داشتید مقایسه کنید. --yes پرسش را رد می‌کند و اسکریپت باید آن را بدهد: بدون آن، stdin‌ای که ترمینال نباشد پذیرفته نمی‌شود. --asset اندیس، شناسهٔ rpl1… یا شناسهٔ هگز ۶۴ نویسه‌ای را می‌پذیرد و اگر حذف شود RAND ارسال می‌شود. --memo <text> تا 510 بایت متن را درون پاکت پرداخت برای گیرنده مهر می‌کند، که chain 18 نخستین زنجیری است که اجازه‌اش می‌دهد؛ هیچ چیز روی زنجیر نشان نمی‌دهد که یادداشتی وجود دارد. --fee همیشه به RAND است و پیش‌فرضش 0.001 است؛ --no-wait و --cuda اعمال می‌شوند. شناسه از فهرست کامل رجیستری گره به اندیس تبدیل می‌شود و اندیس عددی هرگز به گره نمی‌رسد، بنابراین به گره گفته نمی‌شود کدام توکن در شرف جابه‌جایی است. این همان rand send است که RAND را جابه‌جا می‌کند، و همان اثبات. تراکنش چهار nullifier، چهار تعهد (commitment)، کارمزد RAND، یک زمان، چهار پاکت رمزگذاری‌شده، اثبات بسته و، از chain 17، یک تعهد مجوز و اثبات آن را منتشر می‌کند، هر دارایی‌ای که جابه‌جا شده باشد. ناظر نمی‌تواند انتقال توکن را از پرداخت RAND تشخیص دهد، نمی‌تواند بفهمد کدام توکن بوده است، و فرستنده، گیرنده یا مقداری نمی‌بیند.

کارمزد از همان بسته به RAND پرداخت می‌شود، بنابراین کیف پول فرستنده باید مقداری RAND داشته باشد. کیف پول پیش از شروع اثبات این را بررسی می‌کند.

بررسی موجودی

rand --key wallet.key.json asset-balance 2     # one token, by index
rand --key wallet.key.json asset-balance       # a row for every token this wallet holds

آرگومان یک اندیس رجیستری است. برای یک توکن، کیف پول asset <index> balance: <N> units را به واحد پایه چاپ می‌کند. rand notes همهٔ یادداشت‌هایی را که کیف پول گشوده است همراه با اندیس asset آن‌ها فهرست می‌کند. کیف پول یادداشت‌هایش را با پویش زنجیر با کلید مشاهده (viewing key) پیدا می‌کند. هیچ چیز روی زنجیر موجودی‌ای برای آن نگه نمی‌دارد که بتواند جست‌وجو کند.

سوزاندن

rand --key wallet.key.json token burn rpl1… 100

دارایی و مقدار موقعیتی‌اند: دارایی به‌صورت اندیس، rpl1… یا هگز، و مقدار به واحدهای نمایشی توکن، همان‌گونه که send --asset آن را می‌خواند. --fee به‌طور پیش‌فرض 0.001 RAND است؛ --no-wait و --cuda اعمال می‌شوند.

سوزاندن واحدها را نابود می‌کند و عرضهٔ کل را کاهش می‌دهد. مانند ضرب، یک مرز عمومی است: مقدار و توکن قابل مشاهده‌اند، دارنده نه. توکن پل‌شده‌ای مانند zUSD به این شکل سوزانده نمی‌شود: token burn پیش از اثبات آن را رد می‌کند و خروج آن از طریق rand bridge-burn است که سکهٔ پشتوانه‌اش را آزاد می‌کند.

6. آن را روی explorer تأیید کنید

randscan.org بخش عمومی یک توکن را به همه نشان می‌دهد: ثبت آن، mintها و burnها و عرضهٔ کل آن. همهٔ توکن‌ها در randscan.org/tokens فهرست شده‌اند و صفحهٔ هر توکن /tokens/<rpl1…>، /tokens/<64 hex> یا /tokens/<index> است؛ randscan.org/tokens/1 همان zUSD است. همین داده‌ها در GET /api/v1/tokens و GET /api/v1/tokens/:id هم در دسترس است؛ مورد دوم تراکنش استقرار توکن و تاریخچهٔ عرضهٔ آن را، شامل ثبت، mintها و burnها، برمی‌گرداند (Explorer API).

صفحهٔ عمومی یک انتقال هیچ دارایی، هیچ مبلغ و هیچ طرفی را نشان نمی‌دهد، چون زنجیره این اطلاعات را ندارد. برای اثبات یک پرداخت به شخص دیگری، مثلاً حسابرس، طرف معامله یا یک صرافی، باید یک کلید به او بدهید:

کلیدآنچه دارندهٔ آن می‌بیند
کلید تراکنشیک خروجی از یک تراکنش، گشوده‌شده: توکن، مبلغ و طرف‌ها
کلید مشاهدههر نوتی که کیف پول فرستاده یا دریافت کرده، با همان جزئیات، و اینکه هر کدام خرج شده است یا نه
rand --key wallet.key.json tx-key <TX_HASH>    # the keys for one transaction
rand --key wallet.key.json viewing-key         # the wallet's viewing key, 64 hex characters

tx-key برای هر خروجی از آن تراکنش که این کیف پول فرستاده، دریافت کرده یا به‌عنوان باقی‌مانده نگه داشته است یک سطر چاپ می‌کند: خروجی (bundle:0 تا bundle:3، چهار شکاف بسته)، نقش، مبلغ (به RAND، یا N (asset I) برای یک توکن) و کلید هر تراکنشی که آن خروجی با آن مهر و موم شده است. کلید سطر sent را تحویل دهید. این کلید برای هر تراکنش گذشته کار می‌کند، چون کیف پول کلید را از زنجیره بازیابی می‌کند.

یک کلید تراکنش را در صفحهٔ آن تراکنش در randscan جای‌گذاری کنید تا آن خروجی گشوده شود؛ explorer نمایهٔ دارایی را با رجیستری تطبیق می‌دهد و توکن را با نام و با اعمال اعشار آن نشان می‌دهد. کلید مشاهده در randscan.org/viewing وارد می‌شود. explorer هیچ کلیدی را نگه نمی‌دارد و روی سرور خود چیزی را رمزگشایی نمی‌کند. از طریق JSON-RPC همین افشا با rand_checkTransaction(hash, key) انجام می‌شود. هیچ‌یک از این دو کلید نمی‌تواند چیزی را خرج کند. کلید مشاهده پس از اشتراک‌گذاری قابل پس‌گرفتن نیست، پس اگر فقط یک پرداخت باید اثبات شود، کلید تراکنش را ترجیح دهید.

7. توکن‌های پل‌شده

zUSD («Shielded USD») نیز یک توکن RPL است و مرجع صدور آن Bridge است: واحدهای آن فقط زمانی mint می‌شوند که نگهبانان سپرده‌ای از USDT یا USDC را روی Ethereum، Binance Smart Chain، Tron یا Solana تأیید کنند، و عرضهٔ آن همیشه برابر با مقداری است که آنجا قفل شده است. این توکن روی زنجیرهٔ 14 با تراکنشی در ارتفاع 256، در نمایهٔ 1 و با هفت پشتوانه ثبت شد، و جنسیس هر زنجیرهٔ بعدی، از جمله زنجیرهٔ 20، آن را دوباره با همان شناسه فهرست می‌کند: rpl1xtj6k2x8strx8c2d5fjs50ltztck5ykms4ve7nmzmstf6fhn0v0spelqtx. زنجیرهٔ 15 همان 10 zUSD را که هنگام توقف زنجیرهٔ 14 هنوز در گردش بود منتقل کرد، زنجیره‌های 16 تا 19 با همان 10 zUSD آغاز شدند، و زنجیرهٔ 20 با 99 zUSD که روی زنجیرهٔ 19 در گردش بود آغاز شد. روی زنجیرهٔ 20 پل از هر سپرده و هر بازخرید 10 bps را، به zUSD، به یک نوت خزانه برمی‌دارد (Bridge). zUSD یک سبد است: پشتوانه‌های آن به ارزش اسمی تجمیع می‌شوند، بنابراین دارنده ریسک همهٔ سکه‌های فهرست‌شده را بر دوش می‌کشد، نه فقط سکه‌ای که خودش سپرده است (توکن‌های RPL). عرضهٔ آن با هر سپرده و هر بازخرید تغییر می‌کند؛ rand token info 1 یا /tokens/1 در explorer مقدار فعلی را می‌دهد.

زندگی آن روی زنجیرهٔ 14، یک testnet پیشین (در explorer در 2026-09-20 بررسی شد). این جدول تاریخچهٔ زنجیرهٔ 14 است: زنجیرهٔ 14 بازنشسته شده است، پس این تراکنش‌ها در explorer زنجیرهٔ 20 نیستند:

چهتراکنش (زنجیرهٔ 14)ارتفاع
ثبت (register_bridged_token)7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13256
یک mint پل (bridge_attest)f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d2,572
یک انتقال zUSD محافظت‌شدهe6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed3,259
یک burn پل (bridge_burn)f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc493,481

صفحهٔ این انتقال همان چیزی را نشان می‌داد که هر انتقال توکن نشان می‌دهد: چهار nullifier، چهار commitment و یک کارمزد، و هیچ نشانه‌ای از اینکه zUSD جابه‌جا شده است.

برای نشان دادن آنچه یک کلید افشا می‌کند، یادداشت‌های انتشار v0.5 فول‌نود دو کلید برای آن انتقال زنجیرهٔ 14 منتشر کردند، از یک کیف پول نمایشی که برای همین منظور ساخته شده و چیز دیگری در آن نیست:

کلیدمقدارآنچه می‌گشاید
کلید تراکنش آن انتقال7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4efخروجی bundle:0 همان یک تراکنش: مبلغ 100000000 از دارایی 1، یعنی 1 zUSD
کلید مشاهدهٔ کیف پول نمایشیa93c673ffeff7204447161347828d8e549b7070460813ae1b7e664694e1dcd5dهر نوتی که آن کیف پول فرستاده یا دریافت کرده است

روی زنجیرهٔ 14 کلید تراکنش آن خروجی را در صفحهٔ انتقال می‌گشود، و از طریق JSON-RPC یک فراخوانی بود (در 2026-09-20 بررسی شد). این فراخوانی روی زنجیرهٔ 20 برای تراکنش خودتان همان شکل را دارد؛ با این مقادیر زنجیرهٔ 14، یک نود زنجیرهٔ 20 پاسخ null می‌دهد (در 2026-10-01 بررسی شد)، چون آن تراکنش را هرگز نداشته است:

curl -s https://rpc.randprotocol.org -H 'content-type: application/json' -d '{
  "jsonrpc": "2.0", "id": 1, "method": "rand_checkTransaction",
  "params": ["e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed",
             "7f68f57c4f33a3f0fe419f4d1a5df2875461339dbc454af8ced50cbd7f40e4ef"] }'

هرگز کلید مشاهدهٔ کیف پولی را که استفاده می‌کنید منتشر نکنید: کل تاریخچهٔ آن کیف پول را برای همیشه نشان می‌دهد.

یک نشانی معمولی نمی‌تواند توکن پل‌شده بسازد. rand token create مرجع صدور Bridge را رد می‌کند، و ثبت یک توکن پل‌شده، یا افزودن سکه‌ای پشت توکنی موجود، به حد نصاب امضاشدهٔ مجموعهٔ نگهبانان پس‌کوانتومی پل نیاز دارد. توکنی که بدون این مسیر خود را zUSD بنامد فقط یک توکن دیگر با نمادی قرضی است، که دلیلی دیگر برای بررسی شناسهٔ rpl1… است. توکن‌های پل‌شده روی Rand همیشه 8 رقم اعشار دارند.

Bridge سپرده‌ها، بازخریدها و مجموعهٔ نگهبانان را پوشش می‌دهد.

آخرین بار با کامیت c0878c3f از fullnode (زنجیرهٔ 21) در تاریخ 2026-10-12، و fullnode `docs/tokens.md`, `docs/cli.md`, `docs/rpc.md` and the wallet's output lines in `crates/randprotocol-client/src/main.rs`; randscan `adfe129` (`docs/api.md`); the live registry at `randscan.org/api/v1/tokens` on 2026-09-20. The commands on this page were checked against those sources, not run by us on chain 14. Updated for chain 15 against fullnode `8abf85e` (v0.5.9) and `deploy/genesis-chain15.json`. Updated for chain 18 on 2026-09-30 against fullnode `90e7716` (the fleet runs v0.6.7 `86941a1`): `docs/tokens.md`, `docs/cli.md`, `docs/shielded.md` §2, `deploy/genesis-chain18.json` and the wallet's output lines in `crates/randprotocol-client/src/main.rs` and `wallet.rs` at the v0.6.7 tag; randscan `fffa404` (`docs/api.md`). The commands were checked against those sources, not run by us on chain 18; the zUSD transactions in section 7 are chain 14's. Updated for chain 20 on 2026-10-01 against fullnode `c9c9bd3c` (v0.6.8): `deploy/genesis-chain20.json` (`tokens`, `binding_domain`), `crates/randprotocol-core/src/types/binding.rs` (the genesis-bound mint and authority messages), and the live `rand_chainId`, `rand_getTokens` and `rand_checkTransaction` on 2026-10-01 Updated for chain 21 on 2026-10-12 against fullnode `c0878c3f` (v0.8.0): `deploy/genesis-chain21.json` (`tokens`, `fees`), `rand_getTokens` and `rand_getSupply` on chain 21; the commands were not run on chain 21. بررسی شد. هرجا کد و این صفحه با هم اختلاف دارند، حق با کد است؛ به ما اطلاع دهید.