سه فایل اجرایی از cargo build --release به دست میآید: rand-node (گره و فرمانهای اپراتور)، rand (کیف پول محافظتشده) و rand-prover (اثباتکنندهٔ واگذارشده). همهٔ فرمانها -h/--help را میپذیرند. این صفحه نسخهٔ v0.6.8 (c9c9bd3c) را توصیف میکند، یعنی بیلدی که chain 20 اجرا میکند؛ هر جا v0.6.7 رفتار دیگری داشته، همانجا گفته شده است. کیف پول rand قدیمیتر از v0.6.8 نمیتواند روی chain 20 ارسال کند، چون genesis آن هر اثبات و هر پیام امضاشده را به هش خود پیوند میدهد. دو مورد اول کلیدهایی از دو نوع متفاوت نگه میدارند: کلید گره یک جفتکلید Dilithium2 است که بلاکها را امضا میکند؛ کلید کیف پول یک کلید خرج محافظتشده است که روی زنجیره چیزی را امضا نمیکند.
rand-node
rand-node <COMMAND>
keygen Generate a new Dilithium2 key file (refuses to overwrite an existing one)
address Print the address, public key, and libp2p peer id of a key file
genesis Write a genesis.json: every validator key is staked, each --alloc becomes a deposit note
alloc-note Print one genesis alloc note as JSON, RAND or a listed token, for splicing into a genesis
init Initialise a data directory from a genesis file
run Run the node
verify Verify the chain in a data directory without running the node
db Database maintenance on a stopped node's data directory
safety status | clear-halt | release-lock: a stopped validator's consensus safety state
status Show node status
register Print this node's Registration, for the wallet that bonds it in
admit sign | submit: the validator set's vote to admit a new key (admission by vote)
unbond Move bonded stake into unbonding
withdraw Pay released stake and rewards into a note at the payout address
bridge-gov rotate-pq | rotate-pause | cancel-rotation: the bridge's post-quantum rotations
vesting status | claim | revoke | bond | unbond: genesis vesting (chains with a vesting section)
aggregator register | unbond | withdraw — the aggregator role (aggregation chains only)
aggregate The aggregate daemon (aggregation chains only)
safety، admit و bridge-gov در v0.6.8 جدید هستند. balance و transfer وجود ندارند: انتقال به کلید خرج محافظتشده نیاز دارد که فقط کیف پول آن را نگه میدارد.
یک پرچم سراسری، --allow-test-fri-profile (یا RAND_ALLOW_TEST_FRI_PROFILE=1)، به init، run و verify اجازه میدهد genesisای را بپذیرند که fri_profile آن test است. این پروفایل حدود ۱۷ بیت امنیت (soundness) دارد و هر کسی که فایل genesis مینویسد میتواند آن را انتخاب کند؛ بنابراین از v0.6.8 گره بدون این پرچم چنین genesisای را رد میکند. مجموعههای آزمون آن را تنظیم میکنند؛ هیچ چیز دیگری نباید این کار را بکند.
keygen, address
| فرمان | آرگومان | پیشفرض |
|---|---|---|
keygen | --out <OUT> | node.key.json |
address | --key <KEY> | الزامی |
keygen فایل { "seed": <32-byte hex>, "address": <base58>, "public_key": <hex> } را با مجوز 0600 مینویسد. این فایل تنها نسخهٔ seed است. از v0.6.8 keygen مقدار --outی را که از قبل وجود دارد رد میکند (… already exists or cannot be created; refusing to overwrite a key file) و آن را دستنخورده میگذارد؛ --force وجود ندارد، پس برای جایگزینی، فایل قدیمی را به جای دیگری منتقل کنید. v0.6.7 و قبل از آن بدون پرسیدن آن را بازنویسی میکردند. address مقادیر address، public_key (1,312 بایت بهصورت hex) و peer_id را چاپ میکند.
genesis
| آرگومان | پیشفرض | معنا |
|---|---|---|
--chain-id <CHAIN_ID> | 1 | شناسهٔ زنجیره؛ تراکنشها و موضوعهای gossip به آن پیوند خوردهاند |
--validator <KEY,STAKE,PAYOUT> | الزامی، تکرارپذیر | یک ورودی ثبتنام: مسیر فایل کلید یا کلید عمومی بهصورت hex، سهام (stake) به RAND (دستکم 1,000)، و نشانی پرداخت rand1… |
--epoch-blocks <N> | 1000 | تعداد بلاکها در هر epoch |
--alloc <ALLOCS> | ندارد، تکرارپذیر | یک نوت واریز: rand1<address>=<amount in RAND> |
--out <OUT> | genesis.json | مسیر خروجی |
--faucet | خاموش | فقط testnet: Mint را فعال میکند. در کنار بخش bridge به --testnet نیاز دارد |
--testnet | خاموش | v0.6.8: "testnet": true را مینویسد، نشانهای که اجازه میدهد faucet در کنار بخش bridge قرار بگیرد. در صورت استفاده، جزو هش genesis است |
--no-confidential | خاموش | Deploy و Call را غیرفعال میکند |
--fri-profile <production|test> | production | test ناامن است و برای مجموعهٔ آزمون در نظر گرفته شده؛ init، run و verify چنین فایلی را بدون --allow-test-fri-profile رد میکنند |
--max-program-words <N> | ندارد (4096) | بزرگترین برنامهای که یک deploy میتواند حمل کند، 1..=65535. فقط هنگام ذکر نوشته میشود؛ هر وقت حاضر باشد جزو هش genesis است، پس --max-program-words 4096 زنجیرهای متفاوت از حذف آن است. پیش از init روی چنین فایلی، هر گره به باینری v0.4 نیاز دارد |
--max-proof-bytes <N> | ندارد (2,097,152) | بزرگترین اثباتی که یک تراکنش میتواند حمل کند، 1048576..=33554432. هر سقف اثبات از آن پیروی میکند |
--max-block-bytes <N> | ندارد (4,194,304) | بزرگترین بلاک و در نتیجه بزرگترین تراکنش، 4194304..=67108864، و دستکم 2 × max_proof_bytes + 1 MiB، یا با --auth-guest برابر 3 × max_proof_bytes + 1 MiB، چون یک call سه اثبات حمل میکند (bundle، auth، call) |
--max-call-envelope-bytes <N> | ندارد (18,432) | بزرگترین پاکت ورودی call، 18432..=1048576 |
--max-program-public-words <N> | ندارد (0) | بزرگترین ورودی عمومی که یک deploy میتواند تثبیت کند، 0..=65535؛ 0 هیچکدام را نمیپذیرد |
--tokens <TOKENS.JSON> | ندارد | بخش tokens در RPL، بهصورت فایل JSON با شکل {"registration_fee": …, "mint_cap_per_day": …, "tokens": [...]}. در صورت حذف، فایل چنین بخشی ندارد و مانند قبل هش میشود. بخش bridge به فایلی با mint_cap_per_day ناصفر نیاز دارد (به ازای هر پشتوانه، به ازای هر روز UTC، به واحدهای هشترقم اعشاری توکن)؛ توکنِ فهرستشده به بخش bridge نیاز دارد |
--envelope-bytes <N> | ندارد (پاکت قدیمی 1,348 بایتی) | اندازهٔ دقیق هر پاکت نوت: خروجی یک bundle، یک mint در faucet، یک withdraw، یک واریز bridge، یک alloc در genesis. فقط 1860 پذیرفته میشود، اندازهای که به هر پاکت اجازه میدهد یک یادداشت (memo) رمزگذاریشده حمل کند. در صورت استفاده جزو هش genesis است و پیش از مهر شدن نوتهای --alloc همین فرمان تنظیم میشود |
--vesting <VESTING.JSON> | ندارد | بخش vesting: تخصیصهای قفلزمانی، {"entries": [{"id", "class", "beneficiary", "amount", "start_ms", "cliff_ms", "linear_ms", "step_ms"?, …}]}. از v0.6.8 ورودیِ ابطالپذیر revokers (1 تا 5 کلید)، یک threshold و treasury را که ابطال به آن پرداخت میکند فهرست میکند، و فایلی که یکی را جا بیندازد رد میشود |
--staking <STAKING.JSON> | ندارد | v0.6.8: بخش staking بهصورت فایل JSON (faucet_budget_per_epoch، bond_activation_epochs، max_weight_bps، max_stake_entry_per_epoch یا max_stake_entry_bps_per_epoch، registration_v2، faucet_recipients، faucet_minters، admission_by_vote، slashing)، که بیلد آن را اعتبارسنجی میکند |
--consensus-domain <0|1> | ندارد (0) | v0.6.8: 1 هر رأی، new-view و proposal را به این genesis پیوند میدهد |
--bundle-guest <v1|v2|v3> | v1 | guest مربوط به bundle که بهعنوان hc_bundle تثبیت میشود: v1 (guest دارایی پنهان که chain 14 و 15 اجرا میکردند)، v2 (guest بدون شاخه در chain 16) یا v3 (مجوزدهی تفکیکشده: guest بهجای کلید خرج، nk و یک salt میگیرد). v3 به --auth-guest نیاز دارد |
--auth-guest | خاموش | auth guest این بیلد را بهعنوان hc_auth تثبیت میکند: آنگاه هر bundle یک اثبات auth روی کلید خرج حمل میکند که به تراکنش آن پیوند خورده و خروجیاش برابر auth_commit همان bundle است. با --bundle-guest v3 الزامی است و با v1 یا v2 پیش از نوشته شدن هر فایل رد میشود. در غیاب آن، فایل فیلد hc_auth ندارد |
--hardening-v6 | خاموش | قواعد v0.6 را به قواعد اعتبار تبدیل میکند (hardening_v6): پنجرهٔ pc، deployهای غیرقابلفراخوانی، شکلهای متعارف اثبات و کلمات proof-of-work، پیوند call و کف جدول برنامه. در غیاب آن، گره همچنان آنها را در pool خود، بهعنوان سیاست، رد میکند |
--gas-price <UNITS> | ندارد (بدون بخش gas) | واحدها (10⁻⁹ RAND) به ازای هر gas که خود زنجیره از یک call دریافت میکند. این پرچم است که بخش gas را مینویسد (metering: "circuit")؛ سه پرچم زیر بدون آن رد میشوند. جزو هش genesis است |
--byte-price <UNITS> | 800، فقط با --gas-price | واحدها به ازای هر KiB، یا بخشی از آن، از اثبات call بهعلاوهٔ پاکت ورودی، از بایت 0 |
--bundle-gas-limit <N> | 20479، فقط با --gas-price | GAS_LIMIT دقیقی که هر اثبات bundle باید اعلام کند؛ اثبات bundle که مقدار دیگری اعلام کند رد میشود. genesis فقط 20479 را میپذیرد، یعنی gas_max(14, 0, 0) برای guest مربوط به bundle در tier-14 |
--gas-dynamic <TARGET_BYTES,TARGET_GAS,ADJUST_BPS> | ندارد (قیمتهای ثابت) | کنترلکنندهٔ قیمت بهازای هر بلاک را روشن میکند، با کف برابر gas_price و byte_price اولیهٔ خود بخش. در کنار --aggregation رد میشود |
--max-gas-price <UNITS>, --max-byte-price <UNITS> | ندارد (بدون سقف) | v0.6.8: سقفهایی که کنترلکننده هرگز قیمتی را از آن بالاتر نمیبرد، هرکدام دستکم برابر قیمت اولیه. بدون --gas-dynamic رد میشود |
--gas-byte-load paying | ندارد (بایتهای هر تراکنش) | v0.6.8: فقط اثبات و پاکت ورودی یک call byte_price را جابهجا میکند، پس بلاکی از انتقالها هیچکدام را جابهجا نمیکند. بدون --gas-dynamic رد میشود؛ paying تنها مقدار مجاز است |
--binding-domain <0|1> | ندارد (بدون فیلد) | v0.6.8: 1 هش genesis را به هر پیوند تراکنش و هر پیام کنش امضاشده (mint در faucet، unbond، withdraw، پیامهای توکن RPL، کنشهای aggregator، پیامهای حاکمیت bridge) پیوند میدهد، تا اثبات یا امضای این زنجیره روی هیچ زنجیرهٔ دیگری تأیید نشود. در صورت حذف، فرمان هشدار میدهد: کیف پول v0.6.8 روی هر شناسهٔ زنجیره خارج از 14 تا 19 شکل پیوندخورده به genesis را اثبات میکند، پس هر زنجیره از 20 به بعد با 1 ساخته میشود |
--proof-window-blocks <N> | ندارد (256) | v0.6.8: یک پنجره، 256 تا 4,096 بلاک، برای اینکه anchor یک bundle و time آن چقدر میتوانند قدیمی باشند. بهصورت rand_getLimits.proof_window_blocks ارائه میشود |
--program-state-cell-fee <UNITS> | ندارد (بدون بخش program_state) | v0.6.8، RPL-2: سلولهای برنامه، vaultهای برنامه و کنش Invoke را روشن میکند، با این کارمزد سلول به واحدهای RAND (حداکثر 1,000 RAND) که به کف کارمزد یک invoke به ازای هر سلولی که میسازد افزوده میشود. به --tokens، --gas-price، --hardening-v6 و --auth-guest نیاز دارد، که هرکدام پیش از نوشته شدن هر فایل با نام رد میشوند |
--aggregation <BOND,MAX_COVERS,SUBSIDY,HALVING,WINDOW>, --admitted-shape <…> | ندارد | بخش aggregation؛ بیلد v0.6.8 از شروع روی genesisای که چنین بخشی دارد خودداری میکند |
به ازای هر --alloc یک خط alloc چاپ میکند، سپس هش genesis، تعداد validatorها و نوتها، طول epoch، پنج سقف، hc_bundle و hc_auth (بدون --auth-guest مقدار none)، و بعد خط gas: gas: price P/gas, B/KiB, bundle limit N, dynamic: target … B / … gas, adjust … bps, floor …/…, ceiling …/…, byte load all|paying، یا بدون --gas-price مقدار gas: none، و با --program-state-cell-fee یک خط program_state: cell fee N RAND. init همان خط gas را چاپ میکند. پنج پرچم سقف یکسان رفتار میکنند: در صورت حذف، فایل چنین فیلدی ندارد و زنجیره پیشفرض را اجرا میکند؛ در صورت ذکر، فیلد حتی با مقدار پیشفرض هم جزو هش genesis است. chain 20 با این پرچمها ساخته شد (deploy/cut-chain20-genesis.sh):
--max-program-words 65535 --max-proof-bytes 4194304 --max-block-bytes 20971520 \
--max-call-envelope-bytes 65536 --max-program-public-words 32768 \
--tokens tokens.json \
--bundle-guest v3 --auth-guest --hardening-v6 \
--gas-price 100 --byte-price 800 --bundle-gas-limit 20479 --gas-dynamic 10485760,262144,1250 \
--max-gas-price 10000 --max-byte-price 80000 --gas-byte-load paying \
--envelope-bytes 1860 \
--testnet --binding-domain 1 --proof-window-blocks 1024 --program-state-cell-fee 10000000 \
--epoch-blocks 1000 --faucet --fri-profile production
زنجیرهٔ ۱۸ و ۱۹ با همان پرچمها تا --envelope-bytes 1860 بریده شدند و هیچیک از پرچمهای v0.6.8 را نداشتند. سقف اثبات ۴ MiB است، کمتر از ۸ MiB زنجیرههای ۱۳ تا ۱۶: یک تراکنش با مجوزدهی تقسیمشده تا سه اثبات حمل میکند و 3 × 4 MiB + 1 MiB در بلوک ۲۰ MiB جا میشود. tokens.json شامل registration_fee برابر با 1 RAND، mint_cap_per_day برابر با 10000000000000، max_tokens برابر با 4096، burn_registration_fee و bound_note_value است و zUSD با هفت پشتوانهاش در آن فهرست شده است. پرچم --bridge وجود ندارد و اسکریپت برش همچنان بخشهای bridge، staking و consensus_domain را پس از آن به فایل میچسباند (در زنجیرهٔ ۲۰: پل در مجموعهٔ نگهبان ۱ با هشت کلید نگهبان PQ، کلید توقف، rules_v2، rotation و fees؛ بخش staking با فهرست مجاز faucet، admission_by_vote و بودجهٔ ورود 2,500 bps؛ consensus_domain: 1؛ و نوتهای پیدایش zUSD که با alloc-note --asset 1 --envelope-bytes 1860 ساخته شدهاند). هش پیدایشی که ملاک است، همان است که init روی فایل نهایی چاپ میکند.
هر --alloc یک نوت واریز با تصادفیسازی تازهٔ تعهد میسازد، بنابراین دو بار برش دادن دو هش متفاوت میدهد. این دستور همیشه گشایش نوت را در کنار cm و amount مینویسد، که زنجیرهای با بخش tokens آن را الزامی میکند:
"alloc": [
{ "cm": "<64 hex>",
"envelope": { "kem_ct": "<hex>", "to_receiver": "<hex>", "to_sender": "<hex>", "body": "<hex>" },
"amount": 1000000000000,
"opening": { "pk": "<64 hex>", "time": 0, "r": "<64 hex>" } }
]
بنابراین مالک و مقدار یک نوت پیدایش پس از انتشار فایل عمداً عمومی هستند؛ فقط اینکه بعداً چه زمانی و در چه چیزی خرج میشود خصوصی میماند. پیدایش را یک بار ببرید و فایل را نگه دارید.
alloc-note
--to <rand1…> (الزامی)، --amount <N> (الزامی)، --asset <INDEX> (پیشفرض 0)، --envelope-bytes <N> (پیشفرض: قالب قدیمی). یک نوت alloc را بهصورت JSON چاپ میکند که برای --to مهروموم شده است، همانطور که genesis --alloc مهروموم میکند. پیدایشی که envelope_bytes را تنظیم کرده باشد، نوتی را که بدون --envelope-bytes متناظر مهروموم شده باشد نمیپذیرد. --amount بر حسب واحدهای کامل دارایی است: نه رقم اعشار برای RAND و هشت رقم برای توکن پلشده (10 در دارایی 1 برابر با 10 zUSD است). نوتِ توکنِ فهرستشده لازم دارد که پشتوانههای آن توکن مقادیر locked داشته باشند که مجموعشان دقیقاً برابر با نوتهای آن باشد.
init
| آرگومان | معنا |
|---|---|
--datadir <DATADIR> | پوشهٔ دادهٔ در حال ساخت |
--genesis <GENESIS> | فایل پیدایش؛ در <datadir>/genesis.json کپی میشود |
هش پیدایش و همان خط gas: مربوط به genesis را چاپ میکند.
run
| آرگومان | پیشفرض | معنا |
|---|---|---|
--datadir <DATADIR> | الزامی | پوشهٔ دادهٔ مقداردهیشده |
--key <KEY> | الزامی | فایل کلید: هویت اعتبارسنج، هویت p2p، دریافتکنندهٔ کارمزد |
--listen <LISTEN> | /ip4/0.0.0.0/tcp/30303 | multiaddr شنود libp2p، قابل تکرار |
--bootstrap <BOOTSTRAP> | هیچ، قابل تکرار | /ip4/<ip>/tcp/<port>/p2p/<peer-id>، که در شروع و هر 30 s تا زمانی که قطع است شمارهگیری میشود. از v0.6.8 شناسهٔ همتای آن رزرو میشود |
--reserved-peer <PEER_ID> | هیچ، قابل تکرار | v0.6.8: همتایی که فراتر از سقف اتصال ورودی پذیرفته میشود و از سهم اعتبارسنجها در بودجهٔ همگامسازی سرویس میگیرد. bootstrapها و هر اعتبارسنجی که این گره پیوند امضاشدهٔ همتای آن را دیده باشد بدون این پرچم رزرو میشوند؛ در زنجیرهای که تازه بریده شده و ذخیرهاش هنوز هیچ پیوندی ندارد، اعتبارسنجهای ناوگان را اینجا فهرست کنید |
--strict-gossip | خاموش | v0.6.8: اعتبارسنجی سختگیرانهٔ gossipsub، که فقط پیامهایی با امضای معتبر نویسنده، شمارهٔ ترتیب و منبع را میپذیرد. گرههای سختگیر و آسانگیر با هم کار میکنند، پس گرهبهگره اعمال میشود |
--rpc <RPC> | 127.0.0.1:8545 | شنودگر JSON-RPC اپراتور: همهٔ متدها، و به loopback اعتماد میکند. آن را روی loopback نگه دارید و هرگز نقطهٔ پایانی عمومی را به آن هدایت نکنید |
--public-rpc <ADDR> | خاموش | v0.6.8: شنودگر دوم و عمومی با مجموعهٔ متد ثابت (بدون متدهای کلید مشاهده، rand_mint یا rand_getPeers)، بدون دستهای، بدون WebSocket و با یک شمارنده برای همهٔ فراخوانها؛ هدفی که reverse proxy یا SSH forward باید به آن اشاره کند (JSON-RPC) |
--rpc-viewing-token-file <PATH> | خاموش | v0.6.8: روی متدهای کلید مشاهدهٔ --rpc، Authorization: Bearer <first line of the file> (32 نویسه یا بیشتر) را الزامی میکند |
--validator | خاموش | با این کلید در اجماع شرکت میکند |
--no-mdns | خاموش | کشف شبکهٔ محلی را غیرفعال میکند |
--block-interval-ms <MS> | 1000 | کمترین فاصله میان پیشنهادها |
--view-timeout-ms <MS> | 3000 | مهلت پایهٔ view؛ با هر مهلت متوالی دو برابر میشود تا 8× |
--verify-chain <MODE> | quick | off، quick، full |
--keep-raw-proofs | خاموش | حالت آرشیو در زنجیرهٔ تجمیعی |
--prune-history <WINDOW> | هیچ (همه نگه داشته میشود) | فقط این مقدار از تاریخچهٔ بلوک را نگه میدارد، <n>m، <n>h یا <n>d، دستکم 1h: بلوکهای قدیمیتر بلوک، QC، تراکنشها و رسیدهایشان را از دست میدهند؛ دفتر کل میماند. در زنجیرهٔ ۲۰، 24 اعتبارسنج از 26 اعتبارسنج 24h را اجرا میکنند و دو گره آرشیو هستند؛ گره آرشیو و گره mainnet هرگز آن را تنظیم نمیکنند. جستوجوی ارتفاع زیر کف با -32010 پاسخ داده میشود (JSON-RPC) |
--min-free-disk-mb <MB> | 1024 | اگر فضای آزاد روی فایلسیستم پوشهٔ داده کمتر از این باشد، از شروع خودداری میکند؛ rand_getHealth زیر چهار برابر آن disk_low میگوید. 0 این نگهبان را غیرفعال میکند |
--rpc-viewing-open | خاموش | به فراخوانهای غیر loopback اجازه میدهد از متدهای کلید مشاهده استفاده کنند؛ فقط پشت چیزی که احراز هویت میکند |
--gas-price <UNITS> | 100 | واحد (10⁻⁹ RAND) به ازای هر gas که استخر این گره از یک فراخوان میطلبد، بر gas_max سرآیند اثبات آن. سیاست پذیرش است، نه قاعدهٔ زنجیره: بلوکی که فراخوانی ارزانتر حمل کند همچنان معتبر است. 0 همراه با --byte-price 0 هیچ سیاستی اجرا نمیکند. در زنجیرهای که پیدایش آن بخش gas دارد، مانند زنجیرهٔ ۲۰، قیمتهای خود زنجیره قاعدهٔ اعتبار است |
--byte-price <UNITS> | 800 | واحد به ازای هر KiB، یا بخشی از آن، از اثبات و پاکت ورودی یک فراخوان، از بایت 0، تحت همان سیاست |
--prover <ADDR> | خاموش | اثباتکنندهٔ تفویضشده (prover_* در JSON-RPC) را روی این نشانی میزبانی میکند: شنودگری مستقل، که باید با --rpc متفاوت باشد. گره بدون <prover-home>/prover.key.json، که rand-prover keygen میسازد، از شروع خودداری میکند |
--prover-home <DIR> | <datadir>/prover | فایلهای prover.key.json و pairings.json اثباتکننده |
--prover-accept-spend-key | بازنشسته | از v0.6.8 در شروع رد میشود: run با این پرچم پیش از خواندن کلید گره خارج میشود و نام پرچم را میآورد. دیگر هیچ اثباتکنندهای شاهد کلید خرج را نمیپذیرد؛ آن را از فایل unit حذف کنید. در v0.6.7 شاهدهای کلید خرج را برای زنجیرههای bundle guest v1 یا v2 میپذیرفت |
--prover-max-parallel <N> | 1 | اثباتهایی که اثباتکنندهٔ میزبانیشده همزمان اجرا میکند؛ شروع رد میشود مگر اینکه 5.74 GB × N + 1 GiB حافظه در دسترس باشد |
--prover-max-queue <N> | 8 | کارهای صفشده فراتر از کارهای در حال اجرا |
--prover-cuda | خاموش | اثبات روی پشتیبان CUDA (ساخت با --features cuda)؛ بدون بازگشت به CPU |
--prover-skip-memory-check | خاموش | دروازهٔ حافظهٔ آزاد را رد میکند |
--prover-fee <RAND>, --prover-fee-address <rand1…> | هیچ | کارمزدی که هر کار ارسالی به اثباتکنندهٔ میزبانیشده باید بپردازد، بر حسب RAND با حداکثر نه رقم اعشار: یک خروجی RAND به آن نشانی، درون bundle اثباتشده. هر پرچم به دیگری نیاز دارد |
--prover-allow-origin <ORIGIN> | افزونههای مرورگر و صفحات loopback | مبدأ مرورگری که صفحاتش میتوانند پاسخهای اثباتکننده را بخوانند، قابل تکرار؛ اگر یک بار یا بیشتر داده شود، مقادیر کل فهرستاند. * همهٔ وبسایتها را مجاز میکند و هشدار چاپ میکند |
محیط: RUST_LOG (پیشفرض info,libp2p=warn,libp2p_mdns=off). Ctrl-C یا SIGTERM گره را بهصورت تمیز خاموش میکند.
نقطهٔ پایانی عمومی https://rpc.randprotocol.org یک پروکسی فهرست مجاز پیش روی یک گره آرشیو است؛ از 2026-10-01 فهرست مجاز آن همان مجموعهٔ متد شنودگر عمومی است.
safety
وضعیت ایمنی اجماع یک اعتبارسنج متوقفشده (v0.6.8). هر فرمان خودش پوشهٔ داده را باز میکند، پس هیچکدام کنار گرهٔ زنده اجرا نمیشود.
rand-node safety status --datadir <dir>
rand-node safety clear-halt --datadir <dir> --i-have-compared-this-node-with-the-fleet
rand-node safety release-lock --datadir <dir> --i-give-up-this-validators-lock
status سر متعهدشده، view و آخرین view رأیدادهشده، QC بالا، اینکه اعتبارسنج بالاتر از سرش قفل شده است یا نه، و هر توقف ایمنی ثبتشده را چاپ میکند. گرهی که ببیند یک زنجیرهٔ سهتایی گواهیشده میکوشد بلوکی را متعهد کند که از سر متعهدشدهٔ خودش نشأت نمیگیرد، متوقف میشود و آن را ثبت میکند (audit v6، CON-5)؛ سپس run با همان رکورد خارج میشود تا clear-halt. پیش از پاک کردن، سر این گره را با دو اعتبارسنج دیگر مقایسه کنید و اگر متفاوت بود از یک آرشیو دوباره همگام شوید. از v0.6.8 (CON-4) هیچ حدنصابی از پاسخهای «نگه نداشتهام» دیگر قفل را آزاد نمیکند: اعتبارسنجی که روی بلوکی قفل شده که نمیتواند به دست آورد، ساکت میماند تا پیشنهادی برسد که justify آن از قفل بالاتر باشد یا بلوک دریافت شود. release-lock قفل ماندگار را به گواهی سر متعهدشده پایین میآورد؛ آن را هر بار روی یک اعتبارسنج و فقط وقتی به کار ببرید که بلوک برای همیشه از دست رفته است. بدون پرچم تأییدش، هر فرمان نویسنده آنچه را انجام میداد چاپ میکند و چیزی را تغییر نمیدهد.
verify
| آرگومان | پیشفرض | معنا |
|---|---|---|
--datadir <DATADIR> | الزامی | گره نباید در حال اجرا باشد |
--mode <MODE> | full | quick یا full |
--repair | خاموش | دنبالهٔ آسیبدیده را کوتاه میکند؛ وضعیت ایمنی حفظ میشود |
کد خروج 0 اگر سازگار باشد، 2 اگر مشکلی بدون --repair پیدا شود.
db
db drop-receipts-index --datadir <DATADIR>، با گرهٔ متوقفشده: نمایهٔ receipts_by_program را پیش از بازگشت به ساخت پیش از v0.3 حذف میکند، که نمیتواند پایگاه دادهٔ دارای آن را باز کند. شروع بعدی نمایه را از رسیدها بازسازی میکند.
status
--rpc <URL> (پیشفرض http://127.0.0.1:8545). rand_status را عیناً چاپ میکند.
register, unbond, withdraw
| فرمان | آرگومانها | معنا |
|---|---|---|
register | --key، --payout <rand1…>، --rpc، --v2 | یک Registration هگزادسیمال را که با کلید این نود امضا شده چاپ میکند؛ شناسهٔ زنجیره از RPC خوانده میشود و با --v2 هش genesis هم از آن خوانده میشود. روی زنجیرهای که genesis آن staking.registration_v2 را تنظیم کرده است، مانند زنجیرهٔ ۲۰، --v2 الزامی است؛ ثبتنام v1 آنجا رد میشود و ثبتنام v2 در همهجای دیگر |
unbond <amount RAND> | --key، --rpc، --no-wait | سهم سپردهشده را به حالت unbonding میبرد؛ بدون کارمزد؛ دو epoch بعد قابل برداشت است |
withdraw <amount RAND> | --key، --rpc، --no-wait | سهم آزادشده و پاداشها را، پس از کسر کارمزد پایهٔ 0.001 RAND، در یک نوت به نشانی payout پرداخت میکند |
admit sign|submit
پذیرش با رأی (v0.6.8). روی زنجیرهای که genesis آن staking.admission_by_vote را تنظیم کرده است، مانند زنجیرهٔ ۲۰، کلید یک اعتبارسنج جدید تنها زمانی ثبت میشود که اعتبارسنجهایی که اکیداً بیش از دو سوم وزن رأی را در اختیار دارند آن را امضا کرده باشند.
| فرمان | آرگومانها | معنا |
|---|---|---|
admit sign | --candidate <key hex, registration hex, or a file holding either>، --key <validator key>، --genesis-hash <hex> | رأی این اعتبارسنج را در یک خط چاپ میکند، به شکل <voter key hex>:<signature hex>، روی هش genesis و نشانی نامزد، بنابراین دقیقاً روی یک زنجیره معتبر است. آفلاین: هیچ نودی را نمیخواند |
admit submit | --candidate …، --signature <line> (تکرارپذیر)، --rpc، --no-wait | هر رأی را با هش genesis نود بررسی میکند (رأی برای genesis یا نامزد دیگر، یا رأی تکراری یک رأیدهنده، با نام مشخص میشود)، آنها را مرتب میکند و AdmitValidator بدون کارمزد را ارسال میکند |
نامزد همان کلیدی است که ثبتنام آن را حمل خواهد کرد؛ rand-node address --key آن را چاپ میکند و هگزی که register چاپ کرده است نیز آن را در بر دارد. پس از commit شدن پذیرش، bond مانند قبل انجام میشود (rand bond … --registration) و آن را مصرف میکند. rand_getAdmitted فهرست پذیرفتهشدههای در انتظار را برمیگرداند.
bridge-gov
چرخشهای پساکوانتومی bridge (v0.6.8)، برای نگهبانان و دارندهٔ کلید توقف. هر مرحله شناسهٔ زنجیره، دامنهٔ الزامآور آن و rand_getBridgeState.rotation_nonce را از --rpc میخواند (پیشفرض http://127.0.0.1:8545).
| فرمان | کار |
|---|---|
rotate-pq message --new-key K… | پیام چرخش را برای nonce فعلی به صورت هگزادسیمال چاپ میکند، تا نزد هر امضاکننده مقایسه شود |
rotate-pq sign --new-key K… --key F --index I [--possession] | I:signature را چاپ میکند: خط حد نصاب یک نگهبان PQ فعلی (I شاخص او در مجموعهٔ فعلی) یا، با --possession، خط دارندهٔ کلید جدید (I شاخص او در مجموعهٔ جدید)؛ فایل کلیدی را که کلید موجود در I نباشد رد میکند |
rotate-pq submit --new-key K… --quorum @F [--possession @F] [--no-wait] | RotatePqGuardians یا، با خطوط possession، اکشن V2 را میسازد و ارسال میکند؛ possession را روی زنجیرهای که آن را نمیپذیرد، و نبود آن را روی زنجیرهای که الزامش میکند، مانند زنجیرهٔ ۲۰، رد میکند |
rotate-pause message|sign|submit --new-key K | همین کار برای کلید توقف (شاخص possession برابر 0) |
cancel-rotation sign --kind pq|pause --key PAUSE_KEY | 0:signature را روی پیام لغو چاپ میکند و با کلید توقف فعلی زنجیره بررسی میکند |
cancel-rotation submit --kind pq|pause --signature @F | CancelRotation را ارسال میکند و چرخش در انتظار را پیش از پایان تأخیر آن حذف میکند |
--new-key یک کلید عمومی Dilithium2 به صورت هگزادسیمال است، یا @file که یکی را در بر دارد، یا @key-file (کلید عمومی آن). خطوط امضا به شکل index:hex هستند و با فاصله یا خط جدید جدا میشوند؛ توضیحات با # مجازند.
vesting status|claim|revoke|bond|unbond
سمت دارنده و سمت لغوکننده در تخصیص genesis قفلزمانی، روی زنجیرهای که genesis آن بخش vesting دارد. زنجیرهٔ ۲۰ چنین بخشی ندارد. کلید یک فایل rand-node keygen است.
| فرمان | آرگومانها | معنا |
|---|---|---|
vesting status <ENTRY> | --rpc | ورودی همانگونه که rand_getVesting ارائه میکند: شرایط آن، مقدار vest شده و مقداری که اکنون قابل برداشت است |
vesting claim | --entry <id>، --to <rand1…>، --amount <RAND> یا --all، --key، --rpc، --no-wait | آنچه قفلش باز شده است را، پس از کسر کارمزد پایهٔ 0.001 RAND، در یک نوت به --to پرداخت میکند؛ با کلید ذینفع امضا میشود |
vesting revoke prepare | --entry، --margin-secs (پیشفرض 600)، --out (پیشفرض revoke.json)، --rpc | v0.6.8، بدون کلید: لغوی را که هر لغوکننده امضا میکند مینویسد، یعنی یک نوت از بخش هنوز vest نشده، به اندازهٔ --margin-secs جلوتر از head، که به treasury در genesis آن ورودی پرداخت میشود (--to وجود ندارد) |
vesting revoke sign | --proposal <file>، --key، --index? | یک کلید لغوکننده، آفلاین: <index>:<signature hex> را چاپ میکند |
vesting revoke submit | --proposal <file>، --signature <index:hex> (تکرارپذیر)، --rpc، --no-wait | لغو را با دستکم threshold امضای ورودی و ظرف ۲۵۶ بلوک پس از prepare ارسال میکند. فرمان vesting revoke --to تککلیدی در v0.6.7 حذف شده است |
vesting bond <amount RAND> | --entry، --validator <address>، --registration <hex>، --key، --rpc، --no-wait | ورودیهای بازگشتناپذیر: RAND قفلشده را به عنوان سهم آن اعتبارسنج bond میکند؛ اعتبارسنجی که هنوز در دفتر ثبت نیست به همان چیزی نیاز دارد که register چاپ کرد |
vesting unbond <amount RAND> | --entry، --key، --rpc، --no-wait | RAND bond شده را به قفل بازمیگرداند؛ پس از epochهای unbonding دوباره قابل برداشت است |
aggregator register|unbond|withdraw، aggregate
فرمانهای نقش تجمیعکننده برای زنجیرهای که بخش aggregation دارد: aggregator register --key --bond <RAND> --payout <rand1…> --rpc یک AggregatorRegistration امضاشده چاپ میکند؛ aggregator unbond و aggregator withdraw همتای جفت فرمان اعتبارسنج هستند. aggregate --key <KEY> [--rpc <URL>] [--watch] [--interval-secs 15] [--no-wait] سرویسی است که rand_getUnsealed را poll میکند، یک aggregate را اثبات میکند و ارسال میکند. روی زنجیرهٔ ۲۰ که genesis آن بخش aggregation ندارد غیرفعال است.
rand (کیف پول)
گزینههای سراسری، پیش یا پس از زیرفرمان:
| گزینه | env | پیشفرض |
|---|---|---|
--rpc <RPC> | RAND_RPC | http://127.0.0.1:8545؛ http یا https (نقطهٔ پایانی عمومی https://rpc.randprotocol.org است). پاسخ بزرگتر از 64 MiB رد میشود |
--key <KEY> | RAND_KEY | wallet.key.json؛ ذخیرهٔ نوتها در کنار آن و در <key>.notes.json قرار دارد. این ذخیره به زنجیرهای که با آن اسکن شده (rand_getGenesisHash نود) وابسته است: اگر به زنجیرهٔ دیگری اشاره کند، مانند کیف پولی که از گذار زنجیرهٔ ۱۹ به ۲۰ نگه داشته شده، خالی میشود و با یک هشدار از leaf 0 دوباره اسکن میشود. از v0.6.8 هر فرمان فایل کلیدی را که گروه یا دیگران بتوانند بخوانند رد میکند و راهحل را (chmod 600 <key>) نام میبرد |
--prover | خاموش. بسته را به جای این دستگاه روی prover جفتشده با این کیف پول (rand prover pair) اثبات میکند؛ اثبات پیش از آنکه وارد تراکنش شود در اینجا بررسی میشود (digest، اندازه و یک verify محلی). برای هر فرمانی که بستهای را اثبات میکند اعمال میشود؛ در call و program invoke فقط بستهٔ پرداخت به prover میرود و اثبات فراخوانی محلی میماند. بدون جفتسازی رد میشود، و همراه با --cuda نیز رد میشود مگر در call. روی زنجیرهای با تفکیک مجوزدهی، مانند زنجیرهٔ ۲۰، کلید مشاهده nk و یک salt برای prover فرستاده میشود و هرگز کلید خرجکردن؛ prover میتواند کل تاریخچهٔ این کیف پول را بخواند و نمیتواند خرج کند. اثبات مجوز همیشه روی این دستگاه ساخته میشود. روی زنجیرهای که guest بسته در آن v1 یا v2 است، v0.6.8 پیش از پرسیدن هر چیزی از prover، --prover را رد میکند | |
--max-prover-fee <RAND> | 1. بیشترین مبلغی که یک prover جفتشده میتواند برای هر بسته بگیرد. قیمتی بالاتر از آن پیش از ساخته شدن هر بسته رد میشود؛ 0 هر کارمزدی را رد میکند. کارمزد یک خروجی RAND اضافی در همان بسته است و به شکل prover fee: <amount> RAND to <fingerprint> نمایش داده میشود |
مقادیر، RAND اعشاری با حداکثر نه رقم اعشار هستند (1، 1.5، .25، 0.000000001). مقدار توکن در send، token mint و token burn، و در پیوند randpay:، بر حسب واحدهای نمایشی توکن و با decimals خود ردیف آن در registry است (10 از zUSD یعنی 10 zUSD). bridge-burn، token create --fixed-supply و --initial اعداد صحیح ساده را بر حسب کوچکترین واحد توکن میگیرند و asset-balance آنها را چاپ میکند. هرجا فرمانی توکنی را میگیرد، شاخص registry، شناسهٔ rpl1… یا شناسهٔ ۶۴ رقمی هگزادسیمال را میپذیرد؛ شناسه از کل فهرست registry نود (rand_getTokens، همهٔ صفحهها) به شاخص آن تبدیل میشود، نه با جستوجوی تکتوکنی که به نود میگفت کدام توکن در شرف انتقال است. شاخص عددی اصلاً به نود نمیرسد.
| دستور | آرگومانها | رفتار |
|---|---|---|
keygen | یک فایل کلید خرجکردن جدید در --key با مجوز 0600 مینویسد؛ از بازنویسی فایل موجود خودداری میکند | |
address | --uri [--amount A] [--asset X] [--memo M]، --qr، --qr-png <FILE> | نشانیِ rand1… این کیف پول را در stdout چاپ میکند، دقیقاً نشانی و یک خط جدید، تا $(rand address) در اسکریپت کار کند، و fingerprint XXXX-XXXX-XXXX-XXXX آن را در stderr: ۱۶ نویسه Crockford base32، یک وارسی انسانی از نشانی که هرگز روی شبکه فرستاده نمیشود. --uri یک پیوند randpay: هم چاپ میکند (نشانی بهعلاوه مبلغ، دارایی و یادداشت اختیاری). --qr آن پیوند را بهصورت کد QR در ترمینال نمایش میدهد؛ --qr-png آن را بهصورت PNG مینویسد |
contacts add <NAME> <TO> / list / show <NAME> [--qr] / remove <NAME> | --yes (add) | نشانیهای نامدار که این کیف پول میتواند با نام به آنها پول بفرستد. TO یک نشانی rand1… یا یک پیوند randpay: است که از آن فقط نشانی نگه داشته میشود. add اثر انگشت را چاپ میکند و add? [y/N] میپرسد، مگر با --yes؛ stdinای که ترمینال نباشد بدون آن رد میشود. در <key>.contacts.json با مجوز 0600 ذخیره میشود. نام ۱ تا ۶۴ نویسه است، هرگز با rand1 یا randpay: شروع نمیشود و یکتاست |
prover pair <LINK> / prover pair --trusted / show / forget | --name <NAME>، --yes (pair) | این کیف پول را با یک prover واگذارشده جفت میکند. pair پیوند randprover: را که rand-prover pair چاپ کرده میگیرد، نشانیِ غیر از https:// را رد میکند (http:// ساده فقط برای localhost، 127.0.0.1 یا [::1])، سپس اعلام میکند prover چه چیزی دریافت خواهد کرد (this prover will receive this wallet's viewing key: it can read the wallet's whole history; it cannot spend) و pair? [y/N] میپرسد؛ --yes پرسش را رد میکند و stdinای که ترمینال نباشد بدون آن رد میشود. سپس prover_info آن prover را میپرسد، اگر اثر انگشت کلیدش همان نباشد که پیوند نام برده است نمیپذیرد، و <key>.prover.json را با مجوز 0600 مینویسد و هر جفتسازی قبلی را جایگزین میکند. --trusted (v0.6.8) پیوندی نمیگیرد: با استخر prover اعتبارسنجها، یعنی https://prover.randprotocol.org، از روی پیوندی که build در خود دارد جفت میشود؛ گردانندگان آن میتوانند تاریخچه این کیف پول را بخوانند و نمیتوانند خرج کنند. show نام، نشانی URL، اثر انگشت، own و کلید prover را چاپ میکند، هرگز توکن را؛ forget فایل را حذف میکند. v0.6.7 پیش از جفتسازی نمیپرسید |
viewing-key | کلید مشاهده nk این کیف پول را، ۶۴ رقم هگز، چاپ میکند: پارامتری که rand_importViewingKey میگیرد. هر یادداشتی را که کیف پول فرستاده یا گرفته میخواند و هیچکدام را خرج نمیکند | |
balance | درخت را پویش میکند، مخزن را ذخیره میکند، مقدار قابل خرج و تعداد یادداشتهای خرجنشده را چاپ میکند | |
sync | --rescan | بدون چاپ موجودی پویش میکند. نخستین sync پیش از برگها هر سرتیتر بلوک را میخواند (۱٬۰۲۴ در هر فراخوانی). --rescan همه یادداشتها، نشانهای خرجشده و نشانگر را فراموش میکند (پیوند با زنجیره را نگه میدارد) و از برگ 0 دوباره پویش میکند: راه بازگشت وقتی گره یادداشتهای این کیف پول را بهاشتباه خرجشده گزارش کرده است. بهتر است روی گرهی که به آن اعتماد دارید اجرا شود |
notes | --memo | هر یادداشتی که این کیف پول گشوده است: اندیس، دارایی، مبلغ، ارتفاع، spent، pending، و یادداشت همراه (memo) بریدهشده تا ۲۴ نویسه، یا کامل با --memo |
asset-balance [INDEX] | پویش میکند، سپس آنچه این کیف پول در یک دارایی دارد، یا یک ردیف برای هر دارایی نگهداشتهشده، چاپ میکند؛ مبلغها بر حسب کوچکترین واحد خود دارایی | |
history | --memo | هر یادداشتی که این کیف پول برای دیگری ساخته است، با همان ستون memo که در notes هست |
send <TO> [AMOUNT] | --asset <INDEX|rand|rpl1…|hex> (پیشفرض 0، یعنی RAND)، --memo <M>، --fee <RAND> (پیشفرض 0.001)، --no-wait، --yes، --cuda | TO یک نشانی rand1…، یک پیوند randpay: یا نام یک مخاطب ذخیرهشده است، به همین ترتیب آزموده میشود. مبلغ، دارایی و memo خودِ پیوند آنچه را خط فرمان وانهاده پر میکند؛ AMOUNT فقط وقتی اختیاری است که پیوند مبلغی داشته باشد، و مقداری که از دو راه داده شود و ناهمخوان باشد رد میشود. فرمان تأییدیه را چاپ میکند، to <contact, if any> · fingerprint XXXX-XXXX-XXXX-XXXX · <amount> <asset> و، اگر memo هست، یک خط جداگانه memo: "<text>"، سپس پیش از اثبات میپرسد، مگر با --yes. اسکریپت باید --yes بدهد: stdinای که ترمینال نباشد با stdin is not a terminal: pass --yes to send without confirmation رد میشود. سپس حداکثر دو یادداشت از آن دارایی و حداکثر دو یادداشت RAND برای کارمزد برمیگزیند، memo را فقط در خروجی پرداخت مهروموم میکند، یک بسته چهارشکافیِ داراییپنهان و، در زنجیرهای با تأییدخرج جداگانه، تأیید خرج را بهصورت محلی اثبات میکند، ارسال میکند و منتظر commit میماند. memo ناتهی پیش از اثبات در زنجیرهای که genesis آن envelope_bytes ندارد رد میشود. AMOUNT بر حسب واحدهای نمایشی دارایی است: RAND اعشاری برای RAND، و توکن با decimals خودِ ردیف رجیستریاش؛ فقط 0 یا rand RAND خوانده میشود، هر اندیسی که گره پاسخ داده باشد. شناسه توکن پیش از پرسیدن از گره رمزگشایی میشود، و ردیف فهرستی که با اندیس 0 یا با فیلدهای شناسه ناهمخوان پاسخ دهد رد میشود. تأییدیه مبلغ توکن را هم به واحد نمایشی و هم به واحد پایه نشان میدهد، 10.00000000 zUSD (1000000000 units)، تا گرهی که درباره decimals توکن دروغ بگوید پیش از ارسال هر چیزی آشکار شود. اندیس دارایی و کارمزد پیش از اثبات چاپ میشوند. در زنجیره، انتقال توکن یک بسته ساده است، غیرقابلتمایز از پرداخت RAND؛ کارمزدش RAND است، و کیف پولی بدون RAND قابل خرج پیش از اثبات رد میشود |
bond <VALIDATOR> <AMOUNT> | --registration <hex>، --fee، --no-wait، --cuda | سهامگذاری روی یک validator: بسته مبلغ را میسوزاند |
faucet [ADDRESS] | --amount <RAND> (پیشفرض و حداکثر 100) | فقط testnet: از یک گره validator میخواهد ضرب کند. در زنجیره 20 این faucet فقط به ۱۶ کیف پول فهرست مجاز genesis خود پرداخت میکند |
program build | --guest <fib|memcpy|bubble_sort|balance_check|private_payment|public_echo|rpl2_counter>، --arg N (تکرارپذیر)، --out <file> (پیشفرض program.json) | یک guest داخلی را اسمبل میکند؛ شناسه برنامه را چاپ میکند. rpl2_counter (v0.6.8) برنامه نمایشی RPL-2 است |
program deploy <FILE> | .json، یک .bin خام، یا ظرف تصویری که rand-guest build مینویسد؛ --public <FILE>، --input <u32> (تکرارپذیر) یا --check-call، --cuda | شناسه برنامه، hc و تعداد کلمه را چاپ میکند؛ برنامهای را که از سقف زنجیره بزرگتر باشد (از راه rand_estimateFee) پیش از اثبات رد میکند؛ کف هزینه استقرار را از راه یک بسته میپردازد، منتظر میماند. --public یک ورودی عمومی را همراه برنامه ذخیره میکند (کلمههای u32 جداشده با فاصله، یا یک ELF با پسوند .so)، در حد max_program_public_words زنجیره؛ شناسه برنامه سپس آن را به خود پیوند میدهد. با --input یا --check-call کیف پول نخست یک فراخوانی را روی آن ورودیهای خصوصی در شبیهساز آزمایشی اجرا میکند و اگر در سقف ردیف فراخوانی (14) نگنجد رد میکند؛ برای این بررسی چیزی اثبات نمیشود |
program show <ID> | فراداده برنامه مستقرشده | |
program invoke <PROGRAM-ID> | --transition <FILE.json> (الزامی)، --input N (تکرارپذیر، خصوصی)، --inputs-file <FILE.json> (آرایه JSON از u32، افزوده میشود)، --fee <RAND>، --gas-limit <N|max>، --tier T، --no-wait | v0.6.8، RPL-2: یک گذار حالت از برنامه را اعلام میکند و زنجیره آن را اعمال میکند. پیش از اثبات هر چیز بررسی میکند که زنجیره بخش program_state دارد، برنامه وجود دارد، بافتار گذار با قاعده قطعه میخواند، هر ورودی reads با خانه زنده میخواند (rand_getProgramCell؛ ناهمخوانی خانه کهنه را نام میبرد و با کد 3 خارج میشود)، خزانه میتواند هر ورودی pays را بهعلاوه آنچه این گذار واریز میکند بپردازد، و این کیف پول توکن و RAND مورد نیاز واریز و کارمزد را دارد. خانههایی را که نوشتنها میسازند میشمارد، برنامه را روی کلمههای بافتار واقعی آزمایشی اجرا میکند، فراخوانی را پیوسته به تراکنش اثبات میکند، سپس بسته (کارمزد، بهعلاوه deposit.rand که از راه burn_r سوزانده میشود و deposit.amount از deposit.asset از راه burn_a) و اثبات تأیید را. کارمزد پیشفرض کف فراخوانی برای گاز اعلامشده است بهعلاوه کارمزد خانه برای هر خانه ساختهشده، با همان دو گام قیمتی حاشیه که call دارد. هر پرداخت را چاپ میکند و، مگر با --no-wait، هشت outputs رسید را. خواندن کهنه هنگام درج هم با کد 3 خارج میشود، تا ابزار فراخواننده دوباره بخواند و تکرار کند. هیچ رونوشت ورودی منتشر نمیکند. فایل گذار، هر فیلد اختیاری: {"reads": [{"key", "value"}], "writes": [...], "deposit": {"rand": "<units>", "asset": N, "amount": "<units>", "kind": "none"|"deposit"|"burn"}, "pays": [{"asset": N, "amount": "<units>", "to": "rand1…"}], "mints": [...]}؛ کلیدها و مقدارها Word8های ۶۴ رقم هگز هستند، مبلغها رشتههای دهدهی بر حسب واحد خود دارایی، و to بهطور پیشفرض همین کیف پول است |
program state <ID> | --cell <64 hex> | هر خانه برنامه به ترتیب کلید (rand_getProgramCells، صفحهبهصفحه تا انتها)، یا یک خانه با --cell، و ۶۴ صفر وقتی نباشد. در زنجیرهای بدون بخش program_state رد میشود |
program vault <ID> | خزانه برنامه (rand_getProgramVault)، یک ردیف برای هر دارایی که نگه میدارد، مبلغها بر حسب واحد. در زنجیرهای بدون این بخش رد میشود | |
call <PROGRAM-ID> | --input N (تکرارپذیر)، --expect-public <FILE>، --tier T، --gas-limit <N|max>، --fee، --auditor <rand1…>، --no-envelope، --print-call-key، --cuda | نخست فراخوانی را در شبیهساز اجرا میکند و gas: <exact> (declaring <limit>, tier <t>) را چاپ میکند: گاز دقیق witness است و هرگز کیف پول را ترک نمیکند، سقف اعلامشده GAS_LIMIT عمومی اثبات است. در زنجیرهای با بخش gas، سقف پیشفرض گاز دقیق است که به بالا به مضرب 2^(t−2) گرد شده؛ max سقف سرتیتر gas_max را اعلام میکند، که چیزی را که ردیف فاش نمیکند افشا نمیکند؛ N زیر گاز دقیق یا بالای سقف رد میشود. بدون بخش، یا با --cuda، پیشفرض max است. سپس فراخوانی را بهصورت محلی روی ورودی عمومی برنامه اثبات میکند، رونوشت ورودیاش را مهروموم میکند، از راه یک بسته میپردازد، رسید را چاپ میکند. کارمزد پیشفرض کف سقف اعلامشده است، BUNDLE_BASE + gas_price·GAS_LIMIT + byte_price·KiB با قیمتهایی که rand_getLimits ارائه میکند، بهعلاوه دو گام قیمتی حاشیه جایی که قیمتها حرکت میکنند، که بهصورت fee … RAND (incl. two price steps of headroom) چاپ میشود. در زنجیره hardening_v6 کارمزد پیش از وجود اثبات ثابت میشود، پس پیشفرض بهجای اثبات سقف اثبات زنجیره را قیمت میگذارد، که فقط میتواند بیشپرداخت باشد؛ --fee مبلغ دقیق را میپردازد. --expect-public پیش از اثبات رد میکند مگر آنکه ورودی عمومی برنامه کلمههای آن فایل باشد |
open-call <TXHASH> | --call-key <hex>، --as-auditor | رونوشت یک فراخوانی را میگشاید، آن را با H_IN میسنجد، برنامه را دوباره اجرا میکند؛ در ناهمخوانی با کد غیرصفر خارج میشود |
receipt <TX> | رسید یک فراخوانی commitشده | |
bridge-mint <ATTESTATION> | hex یا @path، --pq <JSON or @path> (الزامی)، --to <rand1…> (پیشفرض: این کیف پول)، --fee (پیشفرض: کف آن اقدام)، --no-wait، --cuda | یک گواهی امضاشده توسط guardian را بهصورت یادداشت واریز میکند. --pq حد نصاب همامضایی Dilithium2 توسط guardianهاست، [{"index":0,"signature":"<4840 hex>"},…]. پیش از هر اثبات: گواهی را رمزگشایی میکند، حد نصاب را با pq_guardians گره و شناسه زنجیره میسنجد، گیرنده و شناسه دارایی را بررسی میکند، اندیس فهرستشده را میخواند (rand_getAssets). blinding یادداشت واریز از چکیده گواهی مشتق میشود، r = blake3("rand-deposit-r-1" || mu)، تنها rای که زنجیره میپذیرد. بسته کارمزد در برابر کل تراکنش، حد نصاب هم، اثبات میشود. owner، time و r یادداشت را چاپ میکند |
bridge-rotate <ROTATION> | hex یا @path، --pq <JSON or @path> (الزامی)، --fee (پیشفرض: کف آن اقدام)، --no-wait، --cuda | چرخش مجموعه guardian را با حد نصاب همامضایی مجموعه PQ کنونی ارسال میکند، بهصورت یک BridgeAttest که چیزی واریز نمیکند. پیش از اثبات هر چیز جز چرخشی را که مجموعه Rand را یک گام جلو میبرد رد میکند. پس از آن guardian_set_index را چاپ میکند |
bridge-pause | --sig <HEX or @path> (الزامی)، --no-wait | ضرب پل را متوقف میکند: یک PauseMints بدون بسته و بدون کارمزد، پس نه فایل کلید لازم است نه RAND. فایل خروجی rand-bridge-gov pause است، امضای ۲٬۴۲۰ بایتی کلید توقف بهصورت hex، ساختهشده برای pause_nonce کنونی پل؛ پیش از ارسال با pause_key گره و شناسه زنجیره سنجیده میشود. سوزاندنها و چرخشها در زمان توقف باز میمانند |
bridge-unpause | --pq <JSON or @path> (الزامی)، --no-wait | توقف را با حد نصاب guardianهای PQ (فایل rand-bridge-gov pq-unpause) که برای pause_nonce کنونی ساخته شده برمیدارد. بدون بسته و بدون کارمزد؛ کلید توقف بهتنهایی هرگز نمیتواند توقف را بردارد |
bridge-burn <ASSET> <AMOUNT> <TO_CHAIN> <TOKEN> <TO> | --relayer-fee N، --fee (پیشفرض 0.01)، --no-wait، --cuda، --yes | یک دارایی پلشده را به بیرون میسوزاند: بررسی میکند که سکه TOKEN در TO_CHAIN پشتوانه ASSET است و دستکم AMOUNT در آن قفل است، و اینکه AMOUNT و کارمزد relayer واحدهای کامل آزادسازیاند؛ سپس یک بسته را اثبات میکند که دارایی را در شکافهای 0–1 خرج میکند، دقیقاً AMOUNT از آن را میسوزاند (burn_a، burn_asset) و کارمزد RAND را از شکافهای 2–3 میپردازد. --relayer-fee بخشی از AMOUNT است، نه هزینه اضافه. در زنجیرهای با کارمزد پل (rand_getBridgeState.fees)، چنانکه زنجیره 20 است، v0.6.8 نخست کارمزدی را که زنجیره نگه میدارد (بر حسب دارایی) و مبلغی را که آزاد خواهد شد چاپ میکند و تأیید میخواهد؛ --yes پرسش را رد میکند و stdinای که ترمینال نباشد بدون آن رد میشود. بررسیهای قفلشده و کارمزد relayer آنگاه روی مبلغ آزادشده انجام میشود |
token create | --name، --symbol، --decimals <0..=9>، --salt <hex32> (در صورت ندادن تصادفی)، سپس یا --fixed-supply <N> --to <rand1…>، --authority-key-out <FILE> [--initial <N> --to <rand1…>] یا (v0.6.8) --program <PROGRAM-ID>، توکنی که اختیار ضرب آن آن برنامه است، که فقط invokeهای آن ضرب یا سوزاندن میکنند، با عرضه صفر آغاز میشود و به بخش program_state زنجیره نیاز دارد، --fee (پیشفرض: پایه بسته بهعلاوه registration_fee رجیستری؛ وقتی گره کارمزد ثبتی بالاتر از 10 RAND گزارش کند رد میشود، پس برای پرداخت عمدیِ کارمزد بزرگتر --fee بدهید)، --no-wait، --cuda | یک توکن را در اندیس بعدی رجیستری ثبت میکند: عرضه ثابت (یکبار ضرب میشود، اختیار none) یا با اختیار Key (یک فایل کلید تازه Dilithium2، با مجوز 0600 نوشته میشود و از بازنویسی خودداری میکند). کلید اختیار تا وقتی زنجیره ثبت را بپذیرد در <FILE>.pending میماند. اگر ثبت دیگری پیش از آن اندیس را بگیرد، another token took index N first — re-run to register at N+1 را چاپ میکند؛ در موفقیت اندیس و شناسه، hex و rpl1…، را چاپ میکند |
token mint | --asset، --to <rand1…>، --amount <N> (واحدهای نمایشی توکن)، --authority-key <FILE>، --fee (پیشفرض 0.001)، --no-wait، --cuda | از یک توکن با اختیار Key بیشتر ضرب میکند؛ اگر توکن با اختیار Key نباشد یا کلید اختیار آن نباشد پیش از هر اثبات رد میشود |
token set-authority | --asset، --authority-key <FILE>، سپس یا --new-key <FILE> یا --renounce، --fee (پیشفرض 0.001)، --no-wait، --cuda | توکن با اختیار Key را به کلید دیگری میسپارد، یا ضرب را برای همیشه رها میکند |
token burn <ASSET> <AMOUNT> | --fee (پیشفرض 0.001)، --no-wait، --cuda | AMOUNT، بر حسب واحدهای نمایشی توکن، از یک توکن RPL را که این کیف پول دارد نابود میکند؛ عرضه عمومی آن دقیقاً همانقدر کم میشود. توکن پلشده پیش از اثبات رد میشود: از راه bridge-burn خارج میشود |
token info <INDEX|rpl1…|hex> | ردیف کامل rand_getTokens یک توکن: نام، نماد، decimals، اختیار، mint_nonce، عرضه کل، registered_at، شناسه (hex و id_text) و، اگر پلشده باشد، هر پشتوانه (locked، mint_cap_per_day، minted_today، mint_day) | |
token list | --from <index> (پیشفرض 0)، --limit <N> (پیشفرض 1000) | یک صفحه از rand_getTokens: enabled، registration_fee، next_index، tokens |
token register-bridged | --name، --symbol، --salt <hex32>، --chain، --token <hex32>، --decimals (decimals مبدأ نخستین پشتوانه)، --pq <JSON or @path> (الزامی)، --fee (پیشفرض: پایه بسته بهعلاوه registration_fee گره، با همان رد 10 RAND که token create دارد)، --no-wait، --cuda | یک توکن پلشده را پس از genesis با نخستین پشتوانهاش ثبت میکند، با مجوز حد نصاب guardianهای PQ (فایل rand-bridge-gov pq-register) که برای list_nonce گره ساخته شده. نخست در Rand فهرست کنید، setToken را در endpoint دوم |
token list-backing | --asset <index>، --chain، --token <hex32>، --decimals، --pq <JSON or @path> (الزامی)، --fee (پیشفرض: پایه بسته)، --no-wait، --cuda | یک پشتوانه به توکن پلشده میافزاید، با مجوز حد نصاب guardianهای PQ (فایل rand-bridge-gov pq-list) در list_nonce گره |
bridge | وضعیت عمومی پل: guardianها، emitterها، رجیستری دارایی، دنباله سوزاندن | |
bridge-message <SEQUENCE> | یک پیام سوزاندن خروجی، کلمهبهکلمه | |
fee bundle / fee deploy <words> / fee call <tier> | --public-words M (deploy)؛ --gas N، --bytes B، --keccak-log-height K، --sha256-log-height S (call) | کمینه کارمزد از جدول گره. در زنجیرهای با بخش gas، fee call <tier> --gas N سقف اعلامشدهای را که rand call چاپ میکند قیمت میگذارد، با قیمتهای سر زنجیره و بدون حاشیه: خود کف. بدون --gas سقف gas_max(tier, K, S) را قیمت میگذارد، بیشترینی که چنین فراخوانی میتواند هزینه داشته باشد. --bytes بایتهای اثبات بهعلاوه پاکت ورودی فراخوانی است |
tx <HASH> | تراکنش commitشده با ارتفاع و اندیسش | |
tx-key <HASH> | یک ردیف برای هر خروجی آن تراکنش که این کیف پول فرستاده، گرفته یا بهعنوان باقیمانده نگه داشته است: output (bundle:0 … bundle:3، چهار شکاف همان یک بسته، یا mint:0)، نقش، مبلغ (به RAND، یا N (asset I) برای توکن)، memoای که حمل میکرد (- برای نبود) و کلید هر تراکنش که زیر آن مهروموم شد. کلید یک ردیف sent را به دریافتکننده یا حسابرس بدهید و rand_checkTransaction <HASH> <KEY> همان یک خروجی را، با memo، افشا میکند. شکاف ساختگی به هیچکس گشوده نمیشود و ردیفی ندارد | |
block <ID> | بلوک با ارتفاع یا چکیده | |
head | { height, hash, view } | |
status | rand_status | |
peers | همتاهای متصل | |
validators | رجیستر validatorها |
--cuda به یک بیلد با --features cuda نیاز دارد و هیچ مسیر جایگزینی ندارد؛ هنوز هیچ PTX ساخته نشده است. این گزینه نمیتواند پاکت ورودی فراخوانی را مهروموم کند: rand call --cuda به --no-envelope نیاز دارد. این گزینه فقط سقف گس را اعلام میکند و --gas-limit N را نمیپذیرد.
هر یادداشت و نام مخاطبی که CLI چاپ میکند (تأییدیهٔ send، و همچنین notes، history و tx-key) ابتدا از یک قاعدهٔ نمایش عبور میکند: نویسههای کنترلی، نویسههای قالببندی یونیکد (کنترلهای دوسویه، نویسههای با عرض صفر، خطتیرهٔ نرم) و U+2028/U+2029 بهصورت U+FFFD نمایش داده میشوند و دنبالهای از فاصلههای جداکننده به یک فاصله تبدیل میشود.
نخستین انتقال محافظتشده
rand keygen # wallet.key.json
rand address # rand1… on stdout, its fingerprint XXXX-XXXX-XXXX-XXXX on stderr
rand faucet # testnet, allowlisted wallets only: 100 RAND into a note only you can open
rand balance # balance: 100 RAND
rand send rand1q9f… 1.5 # asks to confirm, then a minute and a half to two minutes of local proving, then the commit
rand notes # the spent note, and the change note
همرسانی یک نشانی، و یک یادداشت
rand address --uri --amount 1.5 --memo "invoice #42" --qr # a randpay: link, as a terminal QR
rand contacts add alice rand1q9f… # shows the fingerprint, asks add? [y/N]
rand send alice 1.5 --memo "coffee" # the memo is sealed into the payment output
rand history --memo # alice's row shows the whole memo
rand tx-key <hash> # hand the sent row's key to alice or an auditor
یادداشت (memo) در همان بدنهٔ مهرومومشدهای قرار دارد که note در آن است؛ پس هر که بتواند یکی را باز کند، میتواند دیگری را هم باز کند: گیرنده از طریق notes، و هر کسی که کلید هرتراکنش آن خروجی را دارد از طریق rand_checkTransaction <hash> <key>. زنجیر ۱۸ نخستین زنجیری است که در جنسیس آن envelope_bytes تنظیم شده است؛ در زنجیرهای ۱۴ تا ۱۷، --memo پیش از اثبات هر چیزی رد میشد.
یک فراخوانی محرمانه که بعداً دوباره میتوانید بازش کنید
rand program build --guest balance_check --arg 1000 --out bc.json
rand program deploy bc.json # prints the program id
rand call <id> --input 100 --input 200 --input 300 --input 400
rand open-call <txhash> # inputs: [100, 200, 300, 400] — verdict: faithful (exit 0)
یک برنامهٔ دارای حالت: شمارندهٔ RPL-2
روی زنجیری که بخش program_state دارد، مانند زنجیر ۲۰. شمارنده دقیقاً گذارهایی را میپذیرد که یک سلول را میخوانند و آن را با کلمهٔ نخستش بهعلاوهٔ یک بازمینویسند؛ هر چیز دیگر در گذار (آنچه بسته واریز میکند، آنچه خزانه میپردازد، آنچه برنامه ضرب میکند) بدون بررسی همراه میآید، و به همین دلیل این برنامه یک نمایش آزمایشی است و نه برنامهای که بتوان پشتش ارزشی گذاشت.
rand program build --guest rpl2_counter --out counter.json
rand program deploy counter.json # prints the program id
rand token create --name "Counter Share" --symbol CTR --decimals 0 --program <id> # say index 2
rand program state <id> --cell 0100000000000000000000000000000000000000000000000000000000000000 # 64 zeros: absent
cat > step.json <<'JSON'
{ "reads": [{ "key": "0100…00", "value": "0000…00" }],
"writes": [{ "key": "0100…00", "value": "0100…00" }],
"deposit": { "rand": "500000000", "kind": "none" },
"pays": [{ "asset": 0, "amount": "200000000", "to": "rand1…" }],
"mints": [{ "asset": 2, "amount": "1" }] }
JSON
rand program invoke <id> --transition step.json # exit 3 if the cell moved since; re-read and retry
rand program vault <id> # asset 0: 300000000 units (0.5 RAND in, 0.2 out)
نشانهٔ … در پرونده برای ۶۴ نویسهٔ کامل هگز است که کیف پول آن را الزامی میداند.
یک استقرار و یک فراخوانی چه چیزی چاپ میکنند
در زنجیری با تفکیک مجوز، هر بسته دو اثبات است که روی همین دستگاه ساخته میشود: مجوز خرج در سطح ۱۰ و بستهٔ سطح ۱۴. یک program deploy با rand نسخهٔ v0.6.7 روی زنجیر ۱۸، ۲۰۲۶-۰۹-۳۰:
proving the spend authorisation on this machine (tier 10; seconds)…
authorisation proved in 6.8s: tier 10, 1368908 bytes
proving the bundle (tier 14; about a minute and a half on a laptop)…
proved in 116.7s: tier 14, 1500710 bytes
submitted deploy <hash>
0 RAND out, 59.8545 RAND change, fee 0.1007 RAND, anchored at height 97831, proved in 116.7s (bundle) + 6.8s (auth)
یک call گس و کارمزد خود را پیش از اثبات فراخوانی چاپ میکند، سپس بستهٔ پرداختکننده را به همان روش اثبات میکند:
proving the call locally (90 inputs stay private, over the program's 11-word public input)…
gas: 5636 (declaring 6144, tier 12)
fee 0.006191437 RAND (incl. two price steps of headroom)
proved in 29.2s: tier 12, 3346865 bytes, outputs [...]
در اینجا 6,144 همان 5,636 است که به نزدیکترین مضرب 2^10 به سمت بالا گرد شده است، و rand fee call 12 --gas 6144 --bytes <B> این سقف را با قیمتهای سر زنجیره و بدون حاشیهٔ اطمینان قیمتگذاری میکند.
rand-prover
اثباتگر تفویضشده بهصورت یک باینری مستقل: اثبات بستهٔ سطح ۱۴ یک کیف پول را روی ماشینی دیگر میسازد. rand-node run --prover همین سرویس را درون یک نود میزبانی میکند. هر زیردستور --home <DIR> را میپذیرد (متغیر محیطی RAND_PROVER_HOME، پیشفرض ~/.rand-prover)، یعنی پوشهای که prover.key.json و pairings.json را نگه میدارد.
| فرمان | آرگومانها | رفتار |
|---|---|---|
keygen | prover.key.json را با دسترسی 0600 مینویسد و اثر انگشت کلید را چاپ میکند؛ از بازنویسی خودداری میکند | |
pair | --name <LABEL> (الزامی)، --url <URL> (پیشفرض http://127.0.0.1:8600)، --own، --qr | یک توکن میسازد، فقط هش آن را زیر برچسب ذخیره میکند و پیوند جفتسازی randprover: را که rand prover pair میپذیرد چاپ میکند. توکن فقط یک بار و درون پیوند نمایش داده میشود. --url نشانیای است که کیف پول از طریق آن به این اثباتگر میرسد؛ --own عبارت own=1 را اضافه میکند؛ --qr پیوند را بهصورت کد QR در ترمینال نیز چاپ میکند |
unpair | --name <LABEL> | یک جفتسازی را حذف میکند؛ اثباتگر در حال اجرا پرونده را هنگام شروع میخواند، بنابراین اثر آن با راهاندازی مجدد اعمال میشود |
pairings | یک سطر برای هر جفتسازی: برچسب، own یا -، تاریخ ایجاد | |
run | --listen <ADDR> (پیشفرض 127.0.0.1:8600)، --max-parallel <N> (1)، --max-queue <N> (8)، --per-token <N> (2)، --cuda، --skip-memory-check، --allow-origin <ORIGIN> (تکرارپذیر)، --fee <RAND> همراه با --fee-address <rand1…>، --accept-spend-key | تا زمان Ctrl-C یا SIGTERM، JSON-RPC با نامهای prover_* را سرو میکند. اگر 5.74 GB × --max-parallel + 1 GiB حافظه در دسترس نباشد، شروع رد میشود. --per-token تعداد کارهایی است که یک جفتسازی میتواند همزمان در صف یا در حال اثبات داشته باشد. --accept-spend-key در v0.6.8 بازنشسته شده است: run با آن شروع نمیشود و اثباتگر فقط شاهدهای کلید مشاهده را میپذیرد. در v0.6.7 شاهدهای کلید خرج را میپذیرفت، که فقط زنجیری با گیست بسته نسخهٔ ۱ یا ۲ آنها را میفرستد |
یک اثباتگر روی زنجیر ۲۰ کلید مشاهدهٔ کیف پول یعنی nk و یک salt تازه دریافت میکند. این اثباتگر نمیتواند خرج کند، ولی میتواند هر چیزی را که آن کیف پول تاکنون دریافت یا ارسال کرده بخواند: با اثباتگری جفت شوید که حاضر باشید تاریخچهٔ خود را به او نشان دهید. کیف پول هر اثباتی را که پس میگیرد بررسی میکند.
قالبهای پرونده کلید
کلید نود:
{ "seed": "hex of 32 bytes", "address": "base58 of blake3(\"rand-address\" || public key)", "public_key": "hex of 1312-byte Dilithium2 public key" }
کلید کیف پول، نسخهٔ ۲:
{ "version": 2, "spend_key": "hex of 8 little-endian u32 words (64 characters)" }
rand keygen آن را با دسترسی 0600 مینویسد، و از v0.6.8 هر فرمان rand پرونده کلید کیف پولی را که گروه یا دیگران بتوانند بخوانند رد میکند: کلیدی که دستی کپی یا بازیابی شده باید دوباره روی 0600 تنظیم شود (chmod 600 <key>). از دست دادن یک کلید کیف پول یعنی از دست دادن هر note ای که میتوانست باز کند؛ در این نسخه عبارت بازیابی وجود ندارد.