This page takes a token from nothing to a live, transferable asset on Rand. RPL is Rand’s token standard, new on chain 14.
Wait — I must reply only with the translation. Here it is:
تنقل هذه الصفحة رمزًا مميزًا من العدم إلى أصل حي قابل للتحويل على Rand. RPL هو معيار الرموز المميزة في Rand، وهو جديد على السلسلة 14. إذا كنت قد نشرت رمز ERC-20 أو أنشأت عملة SPL، فإن القسم الأول هو الجزء الذي ينبغي أن تقرأه ببطء، لأن رمز RPL ليس أيًّا منهما. رموز RPL هي صفحة المفاهيم التي تقف وراء هذه الصفحة.
1. ما هو رمز RPL
رمز RPL هو مدخل في سجل الرموز الخاص بالدفتر، وليس عقدًا ذكيًا. لا توجد شيفرة تكتبها أو تُصرّفها أو تدقّقها. إنشاء الرمز معاملة واحدة تضيف صفًا إلى السجل، ومنذ ذلك الحين تكون وحدات الرمز ملاحظات (notes) محمية عادية، محفوظة في المجمّع نفسه الذي تُحفظ فيه RAND وتُنفَق بالطريقة نفسها.
| الحقل | القاعدة |
|---|---|
| معرّف الأصل | 32 بايت، وهو هوية الرمز. يُكتب rpl1…: صيغة bech32m، 62 حرفًا، مع مجموع اختباري |
| الفهرس | رقم صغير تسنده السلسلة عند التسجيل (1، 2، …؛ والرقم 0 لـ RAND). اختصار للمعرّف على هذه السلسلة |
| الاسم | من 1 إلى 32 بايت بترميز UTF-8، ثابت عند الإنشاء |
| الرمز | من 1 إلى 12 محرفًا قابلًا للطباعة من ASCII، ثابت عند الإنشاء |
| الخانات العشرية | من 0 إلى 9، ثابتة عند الإنشاء |
| سلطة الإصدار | من يحق له إصدار وحدات إضافية: لا أحد (None)، أو مفتاح (Key)، أو الجسر (Bridge) |
| إجمالي المعروض | علني، ولا يتغير إلا بسكّ أو بحرق |
الرموز (symbols) ليست فريدة. يمكن لأي شخص إنشاء رمز اسمه USDC، تمامًا كما في Ethereum وSolana. هوية الرمز هي معرّف أصله، فتحقق من المعرّف rpl1… قبل أن تقبل رمزًا أو تدرجه، ولا تعتمد على الرمز النصي أبدًا. الصيغة النصية مزوّدة بمجموع اختباري: المعرّف الذي يُكتب خطأً يُرفض، ولا يُرسل إلى مكان آخر.
كيف يختلف عن ERC-20 وSPL
| ERC-20 / SPL | RPL | |
|---|---|---|
| ما هو الرمز | عقد، أو حساب يملكه برنامج | صف في السجل؛ لا شيفرة لكل رمز، ولذلك لا ضريبة تحويل ولا إعادة معايرة (rebase) ولا خطّاف (hook) |
| الأرصدة | علنية، لكل عنوان | ملاحظات محمية. لا يستطيع أحد قراءة رصيد حامل الرمز أو سرد حاملي رمز ما |
| التحويل | المرسل والمستلم والمبلغ علنية | يُثبته المرسل بإثبات، ومحمي بالكامل. لا يستطيع المراقب تمييزه عن دفعة RAND |
| الرسوم | العملة الأصلية للسلسلة | RAND. يحتاج الحامل إلى قدر يسير من RAND لتحريك رمز، كما يحتاج حامل ERC-20 إلى ETH |
| الاستلام | يحتاج SPL أولًا إلى حساب رمز | لا شيء يلزم إعداده. أي عنوان rand1… يستطيع استلام أي رمز |
| المبالغ | uint256 / u64 | u64، وبحد أقصى 9 خانات عشرية |
| approve / transferFrom | نعم | غير متاح في الإصدار 1 |
| التجميد والقائمة السوداء والإيقاف المؤقت | غالبًا | لا شيء |
| البيانات الوصفية | خارج السلسلة أو قابلة للتعديل | على السلسلة وغير قابلة للتعديل |
| الحيازة بواسطة برنامج | نعم | غير متاح في الإصدار 1 |
ما يبقى علنيًا هو الحدّ الفاصل: تسجيل الرمز، وكل سكّ وكل حرق، مع مبلغ كل منها. وهذا ما يجعل إجمالي المعروض قابلًا للتدقيق من أي شخص. أما التحويلات بين الحاملين فلا تكشف شيئًا، بما في ذلك أي رمز جرى تحريكه.
2. قبل أن تبدأ
| ما تحتاج إليه | كيف |
|---|---|
سطر الأوامر rand | يبنيه تشغيل عقدة؛ ويسرد سطر الأوامر كل أمر |
| محفظة | يكتب rand keygen ملف مفتاح الإنفاق، ويطبع rand address عنوانه rand1… (الحسابات والعناوين) |
| عقدة للاتصال بها | تتحدث المحفظة بـ JSON-RPC إلى عقدة، وهي افتراضيًا عقدتك الخاصة على http://127.0.0.1:8545. تربط العقدة واجهة RPC الخاصة بها بالمضيف المحلي، فالإعداد المعتاد عقدة خاصة بك تتبع السلسلة 20. وبدونها مرّر --rpc https://rpc.randprotocol.org: تتحمل نقطة النهاية العامة كل ما في هذه الصفحة عدا rand faucet الذي ترفضه (JSON-RPC، نقطة النهاية العامة) |
| RAND للرسوم | قدر يسير من RAND في المحفظة. تكفي مئة RAND من استدعاء واحد للصنبور (faucet) لكل ما في هذه الصفحة، لكن على السلسلة 20 لا يدفع rand faucet إلا للمحافظ الست عشرة التي يدرجها التكوين الأول (genesis) في قائمة السماح (staking.faucet_recipients)، ويرفض أي عنوان آخر بالرسالة the faucet may not mint to this recipient؛ وأي محفظة أخرى تحتاج إلى أن يرسل إليها RAND شخص يملك منه (السكّ والحرق) |
| رسم التسجيل | معامل في التكوين الأول للسلسلة، بين 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)…. يستغرق إثبات الحزمة نحو 100 ثانية ونحو 5.7 GB من الذاكرة أثناء تنفيذه؛ وحجم الإثباتين نحو 1.37 MB ونحو 1.5 MB على الشبكة، أي نحو 2.85 MB معًا. وينطبق هذا على كل خطوة أدناه تغيّر السلسلة: الإنشاء، وكل سكّ، وكل إرسال، وكل حرق |
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 كل إثبات وكل رسالة موقّعة، ومنها سكّ الرمز، بتجزئة تكوينها الأول (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 من صف الرمز في السجل، ويُرفض أي عدد من الخانات الكسرية يزيد على ما للرمز. أما على السلسلة فالمبلغ دائمًا عدد صحيح بالوحدات الأساسية.
قرّر أمرًا واحدًا أولًا: هل يمكن أن تُصدر وحدات إضافية يومًا؟ الجواب يُثبَّت في الرمز عند إنشائه ولا يمكن توسيعه لاحقًا.
| معروض ثابت | قابل للسكّ | |
|---|---|---|
| سلطة الإصدار | None | Key: مفتاح Dilithium2 تحتفظ به |
| المعروض | يُسكّ المعروض كله مرة واحدة، في معاملة الإنشاء | يبدأ من الصفر، أو من --initial؛ ويسكّ صاحب المفتاح مع الوقت |
| الخيارات | --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 عند خانتين عشريتين تساوي 10,000.00 EXC.
يقرأ الأمر الفهرس التالي في السجل ورسم التسجيل من العقدة، ويبني ملاحظة السكّ الأولي، ويُثبت حزمة رسوم واحدة، ويرسل التسجيل وينتظر الكتلة. وعند النجاح يبلّغ عن الإرسال، ثم يطبع سطرًا بالصيغة index <N>, id <64 hex> (<rpl1…>)، ثم committed at height <H>. دوّن المعرّف rpl1…: فهو هوية الرمز، وكل أمر لاحق يأخذه.
الرسم الافتراضي هو القاعدة زائد رسم التسجيل في السلسلة، أي 1.001 RAND على السلسلة 20، فلا حاجة إلى حساب شيء؛ ويرفعه --fee (بـ RAND). يعود --no-wait فور إرسال المعاملة ويتخطى السطر committed. يُثبت --cuda على وحدة معالجة رسومية NVIDIA متصلة، ويحتاج إلى بناء بالخيار --features cuda، ولا يعود إلى وحدة المعالجة المركزية.
إذا سُجّل رمز آخر أثناء إثبات رمزك، فإنه يأخذ الفهرس الذي خُتم رمزك من أجله. ترفض العقدة التسجيل ويطبع الأمر another token took index N first — re-run to register at N+1، بالأرقام الفعلية. التسجيل المرفوض لا يصل إلى كتلة؛ والذي يضيع هو الإثبات، أي نحو 100 ثانية من العمل. شغّل الأمر مرة أخرى فيُثبت مقابل الفهرس التالي.
يقع المعروض كله الآن في ملاحظة محمية واحدة يملكها العنوان --to. التسجيل ومبلغه علنيان؛ أما ما يفعله المستلم بالملاحظة بعد ذلك فليس علنيًا.
رمز قابل للسكّ
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، ويرفض الكتابة فوق ملف موجود) ويسجّل الرمز بهذا المفتاح سلطةً لسكّه وبعرض مقداره صفر. المخرجات هي نفس السطرين الخاصين بالرمز ذي العرض الثابت. يجب تحديد أحد الخيارين --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> الملح البالغ 32 بايت الذي يدخل بدوره في المعرّف. إن حذفته اختارت المحفظة ملحًا عشوائيًا. حدّده عندما تحتاج إلى معرّف قابل لإعادة الإنتاج، كأن تنشر المعرّف قبل أن يوجد الرمز.
تأكّد منه
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، حيث يجوز أن يكون المعامل الفهرس أو المعرّف السداسي عشري المؤلف من 64 حرفًا أو الصيغة 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. ويقدّم المستكشف سجلّ العقدة دون حاجة إلى عقدة خاصة بك:
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 بتسعة على Tron وواحد على Solana.) ويحمل كل صف دعم أيضًا حقول النافذة المتحركة minted_in_window وmint_window_secs وmint_headroom.
نسخة المستكشف من 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 من رمز بست خانات عشرية تساوي 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.
يضيف السكّ مذكرة واحدة للمستلم ويرفع العرض الكلي. المقدار والمفتاح العام للمستلم يظهران على الشبكة: السكّ حدث علني بالتصميم، شأنه شأن الإيداع عبر الجسر. وما إن ينقل المستلم المذكرة حتى تصبح محمية كأي شيء آخر. والمحفظة التي تدفع الرسوم (--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 بلا خانات عشرية، أو 250.00 EXC (25,000 وحدة أساسية) بخانتين. المستلم والمقدار معاملان موضعيان، كما في RAND. وقبل أي إثبات تطبع المحفظة سطرًا واحدًا، to fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <symbol> (<base units> units)، وتسأل send? [y/N]. قارن البصمة ببصمة المستلم، والوحدات الأساسية بما قصدته. يتخطى --yes السؤال، ويجب أن يمرّره أي سكربت: فبدونه يُرفض الإدخال القياسي إن لم يكن طرفية. ويقبل --asset الفهرس أو المعرّف rpl1… أو المعرّف السداسي عشري ذا الـ 64 حرفًا، وإن حذفته أرسلت RAND. ويختم --memo <text> حتى 510 بايت من النص للمستلم داخل ظرف الدفعة المشفّر، وchain 18 أول سلسلة تسمح بذلك؛ ولا شيء على السلسلة يدل على وجود ملاحظة. والرسوم --fee دائمًا بـ RAND وافتراضيها 0.001؛ ويسري --no-wait و--cuda. ويُحوَّل المعرّف إلى فهرسه من قائمة السجل الكاملة للعقدة، أما الفهرس العددي فلا يصل إلى العقدة أصلًا، فلا تُخبَر العقدة بأي رمز على وشك أن يتحرك. وهذا هو rand send نفسه الذي ينقل RAND، وبالإثبات نفسه. تنشر المعاملة أربعة مُبطِلات وأربعة التزامات ورسم 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 الخاص بها. وتعثر المحفظة على مذكراتها بمسح السلسلة بمفتاح العرض الخاص بها. فليس على السلسلة ما يحمل رصيدًا لها لتبحث عنه.
الحرق
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. تحقّق منه على المستكشف
يعرض randscan.org الجانب العلني للرمز المميز للجميع: تسجيله، وعمليات سكّه وحرقه، وإجمالي المعروض منه. ويُعرض كل رمز مميز في randscan.org/tokens، وتكون صفحة الرمز الواحد /tokens/<rpl1…> أو /tokens/<64 hex> أو /tokens/<index>؛ وrandscan.org/tokens/1 هو zUSD. والبيانات نفسها متاحة عبر GET /api/v1/tokens وGET /api/v1/tokens/:id، والثاني يعرض معاملة نشر الرمز وسجل معروضه من تسجيل وسكّ وحرق (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 لكشف ذلك المخرج؛ ويحلّ المستكشف فهرس الأصل في السجل ويعرض الرمز المميز باسمه مع تطبيق خانته العشرية. أما مفتاح العرض فيُدخَل في randscan.org/viewing. لا يحتفظ المستكشف بأي مفتاح ولا يفك أي تشفير على خادمه. وعبر JSON-RPC يكون الكشف نفسه بالاستدعاء rand_checkTransaction(hash, key). لا يستطيع أي من المفتاحين إنفاق شيء. ولا يمكن استرداد مفتاح العرض بعد مشاركته، لذا يُفضَّل مفتاح المعاملة حين تكون دفعة واحدة هي كل ما يلزم إثباته.
7. الرموز المميزة المجسَّرة
إن zUSD (“Shielded USD”) رمز RPL مميز أيضًا، بسلطة Bridge: لا تُسكّ وحداته إلا حين يشهد الحرّاس على إيداع 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 tokens). ويتحرك معروضه مع كل إيداع واسترداد؛ ويعطي rand token info 1 أو صفحة /tokens/1 في المستكشف الرقم الحالي.
حياته على السلسلة 14، وهي شبكة testnet سابقة (جرى التحقق منها في المستكشف بتاريخ 2026-09-20). هذا الجدول تاريخ للسلسلة 14: السلسلة 14 متقاعدة، فهذه المعاملات ليست في مستكشف السلسلة 20:
| ما هي | المعاملة (السلسلة 14) | الارتفاع |
|---|---|---|
التسجيل (register_bridged_token) | 7fa28fe6277a82401dcc440ff32da13c5e5763f79826fb17cc508f4c15abdd13 | 256 |
سكّ عبر الجسر (bridge_attest) | f2f24d75bc0e7d84dff1f4e4518a9d4bef115392492a39befca1528a2404851d | 2,572 |
| تحويل zUSD محمي | e6ddaca3c852e6c861524a55d00a0fbdcaff6867544b9f19b9bf60ce263c32ed | 3,259 |
حرق عبر الجسر (bridge_burn) | f9f365ca170a5fb51ff9381d7b5cc39538c1a621e5f6e8c1bd74d8751c7bbc49 | 3,481 |
أظهرت صفحة التحويل ما يُظهره أي تحويل رمز مميز: أربعة مبطِلات (nullifiers) وأربعة التزامات (commitments) ورسمًا، ولا شيء يدل على أن 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…. وللرموز المجسَّرة دائمًا 8 خانات عشرية على Rand.
يتناول Bridge الإيداعات وعمليات الاسترداد ومجموعة الحرّاس.