دا څلور پروګرامونه هر یو د یوې محرمانه غوښتنې بشپړ تطبیق دی: یوه ستونزه، یو انٹرفیس، یو Rust میلمه پروګرام، د کوربه اړخ وسایل، او په ژوندي testnet باندې یو ځای پر ځای کول او یوه غوښتنه. دا تر لارښوونو اوږده دي، او هر یو د ماشین پر یوې بلې برخې تکیه کوي. په Rust یا C کې پروګرام ولیکئ د هغه ماډل لارښود دی چې دا ټول یې کاروي. که read_input، عامه برخه یا د وتو اته خانې ستاسو لپاره نوې وي، لومړی هغه ولولئ.
دلته هر څه لومړی ځل د fullnode v0.6.7 سره پر چین 18 باندې، په 2026-09-30، وچلول شول، او پر دې پاڼو هره وتنه له همدې چلونو څخه را نقل شوې ده. پروګرامونه د چین له پرې کېدو وروسته نه لېږدول کېږي، نو په 2026-10-01 څلور واړه بې له بدلون څخه بیا پر چین 19 او بیا پر چین 20 (fullnode v0.6.8) باندې ځای پر ځای شول، او هر ځل غوښتنې تکرار شوې. د پروګرام id د کوډ او عامې برخې هش دی، نه د چین، نو هر id همغه دی؛ په ثبتونو کې د معاملو هشونه د چین 18 دي، او لاندې جدول د چین 20 هشونو ته لینک ورکوي. پر چین 20 یو پروګرام کولای شي د غوښتنو ترمنځ حالت هم وساتي (RPL-2)؛ دا څلور یې نه کاروي، او د پروګرام حالت او د بېلګو پروګرامونو زېرمتون هغه پروګرامونه بیانوي چې یې کاروي.
څلور پروګرامونه
| پروګرام | یوه غوښتنه څه ثابتوي | پر څه تکیه کوي | کلمې | کچه |
|---|---|---|---|---|
| یوه بېنومه رایه | غوښتونکی د یو خپاره شوي لېست غړی دی، پرته له دې چې ووايي کوم یو، او مخکې یې رایه نه ده ورکړې | Keccak-256، یوه عامه برخه | 427 | 12 |
| د مکلفیتونو ثبوت | د پېرودونکو خصوصي بیلانسونه ټول له یوې خپرې شوې زېرمې څخه زیات نه دي، د داسې ریښې لاندې چې هر پېرودونکی یې کتلای شي | SHA-256، د پروګرام دننه جوړه شوې ونه | 994 | 14 |
| یو له چین بهر دفتر | د لېږدونو یوه ډله یو دفتر له یو حالت څخه بل ته وړي، په داسې ډول چې هر لېږونکی واک لري او هېڅ شی نه پیدا کېږي | Poseidon2، د غوښتنو ترمنځ وړل شوی حالت | 773 | 14 |
| یوه خصوصي اعتباري پرېکړه | یو خپور شوی ماډل د غوښتونکي هغه خصوصي معلومات منظوروي یا ردوي چې یو تصدیقوونکي یې ضمانت کړی | د بشپړو عددونو حساب، په عامه برخه کې یو ماډل | 462 | 12 |
څلور واړه پر چین 20 ژوندي دي. په جدول کې هره غوښتنه، د همغو ننوتو سره، د چین 18 هغه غوښتنه تکراروي چې د هماغه پروګرام پر پاڼه ښودل شوې ده:
| پروګرام | د پروګرام id | پر چین 20 په دې معامله کې ځای پر ځای شو | پر چین 20 لومړۍ غوښتنه |
|---|---|---|---|
| بېنومه رایه | ad2f719f12d01c9f3c0962092b9898b75b0914bbb817031d51be13e54c05b970 | f6ae5528…0f82 | 3a304e7a…427b |
| د مکلفیتونو ثبوت | fce8474dfdf80b9733e04fb72d4d8d19c40ba5ab646b3d867322daf4b9b599c0 | a8bc281b…17d9 | 6116c15f…d62a |
| له چین بهر دفتر | c4ddd388f2d94299610c7c3409dfdfb4dcb4ae3e0bc9ec78d0c45f51d8231cab | 72cc95f2…3d51 | 9c9998bb…66eb |
| خصوصي اعتباري پرېکړه | 7bbec14289f4446231b3a9a5ac18cb0613a373ca8a14fe4f046f3fde7ae6c73c | 413e6658…e42b | d3ceb306…124a |
اکسپلورر هر پروګرام او د هغه غوښتنې په randscan.org/programs کې لېست کوي. د testnet چین وخت ناوخت بدلېږي، او پروګرامونه نه لېږدول کېږي: د راتلونکي پرې کېدو وروسته به دا idګانې له منځه ولاړې شي او پروګرامونه به بیا ځای پر ځای کولو ته اړتیا ولري.
چمتووالی
وسیلهلړ. میلمه پروګرامونه د circuits زېرمتون له rand-guest سره جوړېږي، په هغه commit کې چې fullnode v0.6.7 او v0.6.8 دواړه یې vendor کوي:
git clone https://github.com/randprotocol/zkp-circuits circuits
cd circuits
git checkout aeacf31 # branch feat/v067-circuits
rustup toolchain install 1.98.1
rustup target add riscv32im-unknown-none-elf --toolchain 1.98.1
(cd rand-guest && cargo +1.98.1 build --release)
alias rand-guest="$PWD/rand-guest/target/release/rand-guest"
دا commit د دوو دلیلونو لپاره مهم دی. hc د سرچینې او وسیلهلړ تابع ده، نو یو میلمه پروګرام چې د guest-sdk په بل commit کې بیا جوړ شي ښايي بل hc ترلاسه کړي. او د SDK لاسلیکونه بدل شوي: په aeacf31 کې، keccak او sha256_compress د اري حوالې اخلي، په داسې حال کې چې زړو commitونو خام پوائنټرونه اخیستل.
سرچینې. څلور واړه میلمه پروګرامونه، د هغوی د کوربه سکریپټونه او د نمایش معلومات یو ډاونلوډ دی. هغه د checkout دننه پرانیزئ، ځکه چې rand-guest build د میلمه پروګرام له لارښود څخه پورته لټون کوي ترڅو guest-sdk ومومي:
mkdir -p my-guests
curl -sSf https://randprotocol.org/examples/rand-example-programs.tar.gz | tar -xz --strip-components=1 -C my-guests
ls my-guests
# allowlist ledger ledger-host score solvency
فایلونه یو په یو د https://randprotocol.org/examples/programs/ لاندې هم کتل کېدای شي، د بېلګې په توګه allowlist/src/main.rs.
بټوه. ځای پر ځای کول او غوښتنه کول د fullnode v0.6.8 rand بټوې ته اړتیا لري (د v0.6.8 ټګ په یو fullnode checkout کې cargo build --release -p randprotocol-client، یا هغه rand چې د v0.6.8 خپرونې سره ضمیمه دی)، یو کیلي، او RAND. یوه زړه بټوه پر چین 20 معامله نه شي کولای: چین 20 هر ثبوت او لاسلیک شوی پیغام د خپل genesis سره تړي، او د v0.6.7 بټوه دا کار نه کوي.
یو RPC. عامه پایټکی، https://rpc.randprotocol.org، پر دې پاڼو د هر څه لپاره بس دی: د پروګرامونو او رسیدونو لوستل، د بټوې همغږي کول، ځای پر ځای کول او غوښتنه کول. د یوې بټوې لومړۍ همغږي هر بلاک سرلیک او هر هغه بلاک لولي چې یو نوټ لري، چې په 2026-09-30 د چین 18 په لوړوالي کې 645 غوښتنې وې، او د پایټکي له لارې شاوخوا درې دقیقې یې ونیولې. پایټکی هرې پتې ته په یوه دقیقه کې 1,200 لوستنې او 6 لېږل اجازه ورکوي. ستاسو خپل نوډ (د نوډ چلول) داسې محدودیتونه نه لري.
export RAND_RPC=https://rpc.randprotocol.org
export RAND_KEY=$HOME/wallet.key.json
پر چین 18، یوه له هغو رایو څخه چې د بېنومې رایې پر پاڼه شمېرل شوې، fdbcc960…fc2b، پر یو لپټاپ ثابته شوه او یوازې د عامه پایټکي له لارې ولېږل شوه. پر چین 19 او 20 هر ځل ټولې دیارلس معاملې، څلور ځای پر ځای کول او نهه غوښتنې، همداسې ولاړې.
چین 18 د یو پروګرام لپاره څه بدل کړل
یوه غوښتنه د ګاز حد اعلانوي، او د هغه پیسې ورکوي. د محدودیتونو ټولګه 8 هر چلول اندازه کوي. یوه عادي دوره 1 ګاز ده. د هش syscallونه استثنا دي:
| لارښوونه | ګاز |
|---|---|
هره RV32IM لارښوونه، HALT، WRITE_OUTPUT، READ_INPUT، READ_PUBLIC | 1 |
POSEIDON2 پر n کلمو | 3 + 3 × ⌈n / 4⌉ |
SHA256، یو فشرده کول | 64 |
KECCAK، یو پرمیوټېشن | 192 |
ثبوت یو نوی عامه ارزښت لري، اعلان شوی حد، او سرکټ دا پلي کوي چې د چلولو ګاز له هغه سره برابر یا ترې کم وي. دقیق ګاز خصوصي پاتې کېږي. rand call لومړی پروګرام په ایمولېټر کې چلوي او دواړه چاپوي:
gas: 5636 (declaring 6144, tier 12)
په ډیفالټ ډول بټوه دقیق ګاز د 2^(tier − 2) تر یو مضرب پورې پورته ګردوي، چې په کچه 12 کې 1,024 او په کچه 14 کې 4,096 دی، نو اعلان شوی حد د چلولو په اړه لږ څه وايي. --gas-limit max د کچې سقف اعلانوي او له کچې پرته هېڅ نه وايي. --gas-limit N یوه دقیقه شمېره اعلانوي.
فیس د اعلان شوي حد او بایټونو تابع دی.
floor = 0.001 RAND + gas price × declared limit + byte price × ⌈bytes / 1024⌉
بیې په هر ګاز 100 واحدونو او په هر KiB 800 واحدونو پیل شوې (یو واحد 10⁻⁹ RAND دی)، او په هر بلاک کې لږ څه د یو هدف پر لور ځي. rand_getLimits اوسنۍ بیې وړاندې کوي. بټوه د بیې دوه ګامه اضافي ځای، د 1.125² ضریب، ورزیاتوي، ځکه چې یوه غوښتنه د بیې ټاکلو دوه یا درې بلاکه وروسته ځای نیسي.
یو جزئیات د فیس ډېره برخه ټاکي. له چین 18 راهیسې د یوې غوښتنې ثبوت د هغې له خپلې معاملې سره تړل شوی، نو بټوه باید فیس د ثبوت له شتون مخکې وټاکي، او ثبوت د هغه د اصلي اندازې پر ځای د چین په سقف، یعنې 4 MiB، بیه کوي. د بېنومې رایې لپاره دا (1,000,000 + 100 × 6,144 + 800 × 4,097) × 1.125² = 6,191,437 واحدونه، 0.0062 RAND کېږي، چې ګاز یې شاوخوا یو اتمه برخه ده. پر دې پاڼو د څلورو غوښتنو هره یوه د 0.0057 او 0.0075 RAND ترمنځ لګښت درلود. --fee ډیفالټ بدلوي.
هر بنډل دوه ثبوتونه دي. چین 18 وېشل شوی واک ورکول چلوي: هغه بنډل چې فیس ورکوي د کچې 14 د بنډل ثبوت تر څنګ د کچې 10 یو کوچنی د واک ورکولو ثبوت لري. بټوه دواړه جوړوي او د هر یو لپاره یوه کرښه چاپوي. له همدې امله یوه غوښتنه درې ثبوتونه دي: غوښتنه، واک ورکول او بنډل. پر یو Apple Silicon لپټاپ دلته څلورو غوښتنو هرې یوې د درې او پنځه نیمو دقیقو ترمنځ وخت ونیو، د 6.1 څخه تر 6.6 GB حافظې د اعظمي کارونې سره. د بنډل ثبوت هر ځل له دې وخت څخه شاوخوا دوه دقیقې دی. د کچې 12 د غوښتنې ثبوت نیمه دقیقه، او د کچې 14 یو دوه دقیقې ورزیاتوي.
هغه سقفونه چې یوه غوښتنه باید پکې ځای شي.
| حد | چینونه 18 تر 20 |
|---|---|
| کچه | تر ټولو زیات 14: 16,383 دورې، د ډایجسټ قطارونه پکې شامل |
| د Poseidon2 پرمیوټېشنونه | په کچه 14 کې 2,048، د پروګرام، ننوتې او عامه ډایجسټونه پکې شامل |
| د Keccak پرمیوټېشنونه | 128 |
| د SHA-256 فشرده کولونه | 128 |
| د غوښتنې ثبوت | 4,194,304 بایټه (4 MiB) |
| پروګرام | بې له عامې برخې 8,180 کلمې، او له یوې سره یو څو لږې: چین 20، د چینونو 18 او 19 په څېر، هغه ځای پر ځای کول ردوي چې د کچې 14 هېڅ غوښتنه یې نه شي ځایولای (ProgramUncallable)، هر څه چې max_program_words (65,535) اجازه ورکړي |
| عامه برخه | 32,768 کلمې، د ځای پر ځای کولو پر وخت ټاکل شوې |
| د مهر شوي ثبت سره خصوصي ننوته | 16,071 کلمې |
rand-guest run --tier 14 لومړي دوه د ځای پر ځای کولو مخکې ګوري. د هش جدول ثبوت لوی کوي. د دفتر د کچې 14 ثبوت، بې له هش جدول، 1.50 MB دی. د SHA-256 جدول د مکلفیتونو ثبوت 1.91 MB ته رسوي، او د Keccak جدول د رایې ثبوت 3.35 MB ته رسوي، چې د 4 MiB سقف ډېره برخه ده.
هغه قراردادونه چې څلور واړه یې شریکوي
- خانه 0 حالت ښيي، او 0 هېڅکله باوري حالت نه دی. هره پایله، د ناکامیو په ګډون، له 1 څخه پورته یوه شمېره لري، او ناکامي په پاکه توګه دربږي ترڅو ثابت شي. داسې رسید چې ټول یې صفر وي له پایلې سره نه شي غلط ګڼل کېدای.
- خانه 7 نه لمسېږي. هغه Rust مېلمه پروګرام چې په ناڅاپي ډول ودرېږي، هلته
0xdeadbeef(3,735,928,559) لیکي. لوستونکی لومړی خانه 7 ګوري. - خانې 2 تر 6 یو 160-بیټي ارزښت لېږدوي: یو باطلوونکی، یوه ریښه، یوه اړیکه، یوه ژمنه. یو بشپړ 256-بیټي هش اته کلمې دی او د حالت لپاره به هېڅ ځای پرې نه ږدي. په پنځو کلمو یې لنډول د ټکر پر وړاندې 80 بیټه مقاومت ساتي، او هره پاڼه وايي چې دا د څه ساتنه کوي.
- د بایټونو ترتیب د هش تابع دی. د Keccak ارزښتونه little-endian کلمې دي او د SHA-256 ارزښتونه big-endian کلمې دي، ځکه چې هره سیستمي غوښتنه خپل بلاک همداسې لولي. که کوربه سکرېپټ او مېلمه پروګرام پر دې سره همغږي نه وي، داسې ډایجسټونه جوړوي چې هېڅکله سره سمون نه خوري.
- هر هغه څه چې له یوې نمونې څخه بلې ته توپیر کوي په عامه برخه کې دي؛ هر هغه څه چې د هرې بلنې پورې اړه لري خصوصي ننوتنه ده. د یوې ټولپوښتنې ریښه، د زېرمو یوه شمېره او د یوه ماډل وزنونه د ځای پر ځای کولو پر مهال ټاکل کېږي او د پروګرام په پېژندنه پورې تړل کېږي. یوه بلنه خپلې هېڅ عامه کلمې نه لري.
- د ننوتنې کلمې د کمانډ لاین پر سر لسیزې دي. پاڼې د شاهد دوتنه د
$(sed 's/[0-9][0-9]*/--input &/g' witness.txt)په مرسته په فلګونو بدلوي.
پخپله یو ځل یې وبلئ
کله چې سرچینې خلاصې شوې وي، د وسیلو لړۍ جوړه شوې وي او د v0.6.8 یو تمویل شوی والټ ولرئ، د ښودنیزو غړو څخه د یوه په توګه رایه ورکول څلور کمانډونه دي:
cd my-guests/allowlist
python3 allowlist.py witness 10 1 demo-secrets.txt 6 1 > witness.txt # member 6, choice 1
rand-guest build . --max-words 65535 # only needed to run it in the emulator first
rand call ad2f719f12d01c9f3c0962092b9898b75b0914bbb817031d51be13e54c05b970 \
$(sed 's/[0-9][0-9]*/--input &/g' witness.txt)
بللو ته انځور اړین نه دی: rand call د پروګرام کوډ او عامه برخه له نوډ څخه راوړي، ګوري چې هش یې له پېژندنې سره سمون خوري، او پر هغوی ثبوت جوړوي.
د پایلې لوستلو ته نه والټ اړین دی او نه نوډ. هر رسید عامه پای ټکي ته یوه غوښتنه ده:
$ curl -s https://rpc.randprotocol.org -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"rand_getReceipt","params":["8aa13d1f76d28f63a46c30bb09ef44b1ba35083ca80ba7301997f98e5f783666"]}'
{"id":1,"jsonrpc":"2.0","result":{"h_in":"ea71e7701e62d49cac37b239bef132178f481835027d62b34da45fd6cf2667c6","h_pub":"2296cfca8db9d38bd0b7579056c9dea3c8d8005df7b42e2b1e954a75fed67510","height":98335,"index":0,"outputs":[1,2,392974773,873526743,1921224601,3950868247,2248722827,0],"program":"ad2f719f12d01c9f3c0962092b9898b75b0914bbb817031d51be13e54c05b970","tier":12,"tx":"8aa13d1f76d28f63a46c30bb09ef44b1ba35083ca80ba7301997f98e5f783666"}}
د سپړونکي API د یوه پروګرام بلنې په یوه غوښتنه کې ورکوي: https://randscan.org/api/v1/programs/<program id> د call_count او recent_calls راګرځوي (د سپړونکي API).
هغه څه چې هېڅ یو یې نه کوي
په Rand کې پروګرام د یوې محاسبې په اړه ثبوت دی، او زنځیر د هغه پر هېڅ وتنه عمل نه کوي. له دې پروګرامونو هېڅ یو RAND یا کوم ټوکن نه لېږدوي، بیلانس نه ساتي، او پخوانۍ بلنه په یاد نه ساتي. رایې هغه څوک شمېري چې رسیدونه لولي. مکلفیتونه له هغو زېرمو سره پرتله کېږي چې خپلو جلا شواهدو ته اړتیا لري. د دفتر بیلانسونه د زنځیر نه بهر په یوه ونه کې شمېرې دي. د کریډیټ پرېکړه یو بیټ دی چې پور ورکوونکی یې د منلو انتخاب کوي. هره پاڼه د هغو شیانو په لېست پای ته رسېږي چې د هغې ثبوت یې د کاروونکو پر غاړه پرېږدي.