Rand Protocol
دستاویزات
RISC-V پروگرام

RISC-V ISA

Rand پر RV32IM کا مطلب: وہ ہدایات جنہیں zkVM ثابت کرتا ہے، جانچ کار کن چیزوں کو مسترد کرتا ہے، آٹھ سسٹم کالز، میموری، وہ امیج کنٹینر جس میں پروگرام بھیجا جاتا ہے، اور پروگرام کی حد۔

Rand کے لیے پروگرام لکھنے سے پہلے یہ صفحہ پڑھیں۔ یہ بتاتا ہے کہ آپ کا کوڈ کس مشین پر چلتا ہے، ٹول چین کیا مسترد کرتی ہے، پروگرام بیرونی دنیا سے کیسے رابطہ کرتا ہے، اور آپ کون سی فائل تعینات کرتے ہیں۔ اگلے صفحات اسی پر مبنی ہیں: Rust پروگرام تعینات کریں، RISC-V پروگرام تعینات کریں، اور دونوں ٹرانسپائلر۔

مشین

Rand پروگرام RV32IM ہیں: یعنی 32 بٹ RISC-V کا بنیادی عددِ صحیح ہدایتی مجموعہ، مع ضرب اور تقسیم کی توسیع۔ یہ Rand zkVM کے اندر چلتے ہیں، جو ہر رن کو Plonky3 بیچ STARK سے ثابت کرتی ہے۔ تصدیق کنندہ کبھی کوئی ہدایت نہیں دیکھتا۔ وہ ثبوت کو hc کے مقابل جانچتا ہے، جو پروگرام کا سرکٹ کے اندر حساب کردہ Poseidon2 ڈائجسٹ ہے۔

گروہہدایات
بالائی / جمپLUI AUIPC JAL JALR
برانچBEQ BNE BLT BGE BLTU BGEU
لوڈ / اسٹورLW SW LB LH LBU LHU SB SH
ALUADDI SLTI SLTIU XORI ORI ANDI SLLI SRLI SRAI ADD SUB SLL SLT SLTU XOR SRL SRA OR AND
RV32MMUL MULH MULHU MULHSU DIV DIVU REM REMU
سسٹمصرف ECALL

JALR اپنے ہدف کا بٹ 0 صاف کر دیتا ہے، جیسا کہ RV32I کہتا ہے، اور اس کی انکوڈنگ میں funct3 = 0 ہونا لازم ہے۔ یہ دونوں قواعد قیود کے سیٹ 7 (چین 16) کے ساتھ آئے؛ اس سے پہلے طاق ہدف حاصل نہیں کیا جا سکتا تھا اور رن ثابت نہیں ہو سکتا تھا۔ جو ہدف جفت ہو مگر چار کا مضرب نہ ہو، وہ اب بھی حاصل نہیں کیا جا سکتا۔

اس میں نہ فلوٹنگ پوائنٹ ہے، نہ ایٹامک ہدایات (A توسیع)، نہ کمپریسڈ ہدایات (C توسیع) اور نہ 64 بٹ رجسٹر۔ C میں 64 بٹ تقسیم ایک سافٹ ویئر مددگار فنکشن کی کال بن جاتی ہے؛ دیکھیں C کا راستہ۔

کیا مسترد ہوتا ہے

rand-guest check ٹیکسٹ کے ہر ورڈ کو مشین کے اپنے ڈیکوڈر سے گزارتا ہے۔ جو پروگرام اس جانچ سے گزر جائے وہ سرکٹ میں انکوڈنگ، سسٹم کال نمبر یا ترتیب کی وجہ سے ناکام نہیں ہو سکتا۔ چیکر یہ چیزیں مسترد کرتا ہے:

نتیجہیہ کیا ہے
Compressed16 بٹ RVC انکوڈنگ؛ مشین صرف 32 بٹ ورڈ ڈیکوڈ کرتی ہے
Undecodableکوئی اوپ کوڈ، funct یا شفٹ مقدار جو مشین نافذ نہیں کرتی
FenceFENCE یا FENCE.I؛ مشین میں میموری ترتیب کا کوئی نظام نہیں
Csrکوئی بھی CSR ہدایت؛ مشین میں CSR نہیں ہیں
EbreakEBREAK؛ ٹریپس کی ماڈلنگ نہیں کی گئی
Syscallایسا ecall جس کا a7 اس سے عین پہلے ایک li سے مقرر ہو اور کسی سسٹم کال کی نشاندہی نہ کرے
Cap--max-words سے زیادہ ورڈ، اسی طرح گنے گئے جیسے لوڈر گنتا ہے
Layoutٹیکسٹ کا ایسا بیس پتہ جو ورڈ کے مطابق ہم ترتیب نہ ہو

چار ورڈ کا ایک پروگرام جس میں ایک fence، ایک ebreak اور نمبر 9 کا ecall ہے، جیسا کہ rand-guest check اسے رپورٹ کرتا ہے (ایگزٹ کوڈ 1):

$ rand-guest check bad.elf
note: the loader refuses this image (Decode { index: 0, word: 267386895, err: Opcode(15) }), so its data prologue could not be counted; the word count below is the text alone
0x00001000  0x0ff0000f  Fence: FENCE/FENCE.I: the machine has no memory ordering instructions
0x00001004  0x00100073  Ebreak: EBREAK: traps are not modelled
0x0000100c  0x00000073  Syscall: ecall with a7 = 9, which is no syscall the machine implements
4 words against a cap of 4096 (fits); 0 ecall(s) with a non-static a7
REJECTED

ایسا ecall جس کا a7 چیکر نہ دیکھ سکے (جو li کے سوا کسی اور چیز سے مقرر ہو، یا کسی برانچ کے بعد) unresolved_ecalls میں شمار ہوتا ہے، مسترد نہیں ہوتا۔ غلط نمبر پر مشین پھر بھی رن ٹائم پر ٹریپ کرتی ہے۔

چیکر پوائنٹر کی قدریں، لمبائیاں یا ان پٹ اشاریے نہیں جانچتا، نہ RAM کے مقابل 64 KiB اسٹیک کو، اور نہ رن ٹائم پر حساب کیے گئے پتوں کی ہم ترتیبی کو۔ غیر ہم ترتیب رسائی قید کی خلاف ورزی ہے، اس لیے ٹول چین -unaligned-scalar-mem کے ساتھ کمپائل کرتی ہے۔ rand-guest run رن ٹائم کے ہر ٹریپ کی اطلاع دیتا ہے۔

سسٹم کالز

ECALL سسٹم کال کا نمبر a7 سے، پہلا آرگیومنٹ a0 سے اور دوسرا a1 سے پڑھتا ہے۔ واپسی کی قدر a0 میں آتی ہے۔

#سسٹم کالاثرگیسRust (guest-sdk)C (guest.h)
0HALTرن ختم کرتا ہے1halt()rand_halt()
1WRITE_OUTPUT slot wordعوامی آؤٹ پٹ slot < 8 مقرر کرتا ہے، ہر سلاٹ کے لیے زیادہ سے زیادہ ایک بار؛ جو سلاٹ نہ لکھے جائیں وہ صفر رہتے ہیں1write_output(slot, word)rand_write_output
2READ_INPUT idxنجی ان پٹ ورڈ idx لوٹاتا ہے، جو سالٹ شدہ کمٹمنٹ H_IN سے بندھا ہے1read_input(idx)rand_read_input
3POSEIDON2 ptr nورڈ پتے ptr پر n ≤ 4096 ورڈ ہیش کرتا ہے اور 8 ورڈ کا ڈائجسٹ ptr..ptr+8 پر لکھتا ہے؛ کوئی پیڈنگ نہیں3 + 3·⌈n/4⌉unsafe poseidon2(ptr, n)rand_poseidon2
4KECCAK ptr50 ورڈ پر اپنی جگہ ایک Keccak-f[1600] پرمیوٹیشن192keccak(state), keccak256(msg)rand_keccak
5SHA256 ptr24 ورڈ پر اپنی جگہ ایک SHA-256 کمپریشن64sha256_compress(buf), sha256(msg)rand_sha256_compress
6READ_PUBLIC idxعوامی حصے کا ورڈ idx لوٹاتا ہے، جو بغیر سالٹ کے H_PUB سے بندھا ہے1read_public(idx)rand_read_public
7POSEIDON2_LEN ptr nPOSEIDON2 جس میں لمبائی n اسپونج میں شامل کی جاتی ہے، کم از کم ایک پرمیوٹیشن (قیود کا سیٹ 7)3 + 3·max(⌈n/4⌉, 1)poseidon2_len(buf, n)کوئی نہیں

ہر دوسری ہدایت پر 1 گیس لگتی ہے: گیس فی cpu قطار ایک ہے، اور صرف ہیش سسٹم کالز زیادہ وزنی ہیں (قیود کا سیٹ 8، چین 18 سے)۔ ایک Poseidon2 کال اپنی ecall قطار، دو رائٹ بیک قطاروں اور ⌈n/4⌉ جذب قطاروں پر مشتمل ہے، جن میں سے ہر ایک 3 گیس کی ہے۔

POSEIDON2 پیڈنگ نہیں کرتا۔ اسپونج ہر چار ورڈ کے ٹکڑے سے اپنی پہلی لینز کو اوور رائٹ کرتا ہے، اس لیے [a]، [a, 0]، [a, 0, 0] اور [a, 0, 0, 0] ایک ہی ڈائجسٹ پر ہیش ہوتے ہیں۔ جو پروگرام ایسا ڈیٹا ہیش کرے جس کی لمبائی بدل سکتی ہو، اسے لمبائی پیغام میں شامل کرنی ہوگی، مقررہ لمبائی کی انکوڈنگ ہیش کرنی ہوگی، یا POSEIDON2_LEN کال کرنا ہوگا، جو n کو اسپونج کی گنجائش میں ڈالتا ہے اور انہی ورڈز کا مختلف ڈائجسٹ دیتا ہے۔ Rust SDK میں poseidon2 خام پوائنٹر پر ایک unsafe fn ہے اور poseidon2_len سلائس پر محفوظ کال ہے؛ keccak اور sha256_compress بالترتیب &mut [u32; 50] اور &mut [u32; 24] لیتے ہیں۔

ٹول چین کا ایک خلا۔ circuits aeacf31 پر مشین، ایمولیٹر اور Rust SDK سسٹم کال 7 نافذ کرتے ہیں، مگر rand-guest check نہیں کرتا: اس کی سسٹم کال فہرست 6 پر رک جاتی ہے، اس لیے وہ a7 = 7 والے ecall کو Syscall نتیجے کے طور پر رپورٹ کرتا ہے اور rand-guest build ایسے گیسٹ پر غیر صفر کوڈ کے ساتھ ختم ہوتا ہے جو poseidon2_len کال کرے (circuits ایشو #1)۔ guest.h میں بھی اس کا کوئی ریپر نہیں۔ جب تک یہ درست نہ ہو، معیاری ٹول سے بنا گیسٹ مقررہ لمبائی کے پیغامات پر POSEIDON2 استعمال کرتا ہے۔

ایک ثبوت ٹھیک یہی شائع کرتا ہے: hc، H_IN، H_PUB، ٹیئر، اعلان کردہ گیس کی حد، اور آٹھ آؤٹ پٹ ورڈ۔ آج چین پر دو حدیں لاگو ہیں:

  • عوامی حصہ تعیناتی کے وقت طے ہو جاتا ہے۔ چین 20 پر rand program deploy --public کسی پروگرام کے عوامی ورڈ مقرر کرتا ہے (زیادہ سے زیادہ max_program_public_words، یعنی 32,768)، اور ہر کال ان کے مقابل جانچی جاتی ہے۔ ہر کال کے لیے پروگرام کے اپنے کوئی عوامی ورڈ نہیں ہوتے۔ چین 20، چین 19 کی طرح، ہر کال کے حصے میں ان کے بعد آٹھ ورڈ جوڑتا ہے، یعنی کال بائنڈنگ جو ثبوت کو اس کی ٹرانزیکشن سے باندھتی ہے (چین 20 پر اس میں جینیسس ہیش بھی شامل ہے)؛ گیسٹ اپنے ورڈ انہی اشاریوں پر پڑھتا ہے جن پر پہلے پڑھتا تھا۔ RPL-2 Invoke بائنڈنگ کے بعد اعلان کردہ ٹرانزیشن جوڑتا ہے، جسے پروگرام public_len + 8 سے آگے پڑھتا ہے (پروگرام)۔ حد کے فیلڈز کے بغیر کسی چین پر، جیسے چین 12، عوامی حصہ خالی ہوتا ہے اور READ_PUBLIC کے پاس پڑھنے کو کچھ نہیں ہوتا۔
  • کسی کال کے نجی ان پٹ ورڈ سیل شدہ لفافے سے محدود ہیں۔ چین 20 کا max_call_envelope_bytes، یعنی 65,536، 16,071 ورڈ کی اجازت دیتا ہے؛ اس فیلڈ کے بغیر چین 4,295 کی اجازت دیتی ہے۔

KECCAK یا SHA256 کال ثبوت میں ایک جدول کا اضافہ کرتی ہے، اور پھر ثبوت کا ہیڈر ظاہر کرتا ہے کہ کال نے ہیش کیا۔ keccak والا ثبوت تقریباً 3.3 MB کا ہوتا ہے: پہلے سے طے شدہ 2 MiB کی ثبوت حد سے زیادہ، چین 20 کی 4 MiB حد سے کم؛ اور ایک کال زیادہ سے زیادہ 128 Keccak-f پرمیوٹیشنز اور 128 SHA-256 کمپریشنز استعمال کر سکتی ہے (پروگرام)۔

میموری

  • 32 رجسٹر؛ x0 صفر ہے۔
  • RAM صفر سے شروع ہوتی ہے۔ ہر پتہ 2³⁰ سے کم ہے۔
  • پہلے سے طے شدہ لنکر اسکرپٹ، guest-sdk/guest.ld، پروگرام کو 0x1000 پر رکھتی ہے، پھر .rodata، .data اور .bss، پھر __stack_top پر 64 KiB کا اسٹیک۔
  • ڈیٹا سیگمنٹ والے پروگرام کو اپنے ٹیکسٹ کے نیچے لوڈر کے پرولاگ کے لیے جگہ درکار ہوتی ہے (اگلا حصہ)۔ اس کی اپنی .ld فائل ORIGIN کو 0x10000 تک بڑھاتی ہے، جیسا کہ evm.ld اور sbpf.ld کرتی ہیں۔

امیج کنٹینر

rand-guest build اور rand-guest pack ایک ہی فائل فارمیٹ لکھتے ہیں، یعنی امیج کنٹینر۔ تمام اعداد لٹل اینڈین 32 بٹ ورڈ ہیں:

[0x444e4152 ("RAND"), 1, text_base, n_text, data_base, n_data] text… data…

لوڈر کنٹینر کو پروگرام { base_pc, words } میں بدلتا ہے:

  1. وہ ہر غیر صفر ڈیٹا ورڈ کے لیے ایک li/sw جوڑا لکھتا ہے۔ صفر ورڈ چھوڑ دیے جاتے ہیں، کیونکہ RAM پہلے ہی صفر پڑھتی ہے۔
  2. وہ اس پرولاگ کو عین text_base کے نیچے رکھتا ہے، لہٰذا base_pc = text_base − 4 × prologue words۔ پرولاگ آگے بڑھ کر پروگرام کے اپنے _start میں داخل ہو جاتا ہے۔
  3. hc اور پروگرام شناخت پورے words پر، پرولاگ سمیت، حساب کیے جاتے ہیں۔ لہٰذا hc کوڈ کے ساتھ ساتھ ڈیٹا کو بھی باندھتا ہے۔

بغیر ڈیٹا کا کنٹینر کوئی پرولاگ نہیں بناتا، اور وہی پروگرام اور hc دیتا ہے جو اسی بیس پر بغیر ہیڈر کی فلیٹ بائنری دیتی ہے۔

fullnode v0.3 اور بعد کے ورژنز میں rand program deploy کنٹینر کو اس کے پہلے ورڈ سے پہچانتا ہے۔ 0x444e4152 کبھی کسی ہدایت کے طور پر ڈیکوڈ نہیں ہوتا، اس لیے خام .bin کو کنٹینر سمجھنے کی غلطی نہیں ہو سکتی۔ جو فائل میجک سے شروع ہو مگر خراب ساخت کی ہو، وہ غلطی شمار ہوتی ہے، متبادل راستہ نہیں۔

دو شناختیں

نامیہ کیا ہےاسے کون استعمال کرتا ہے
hc(base_pc, len, words) کا وہ Poseidon2 ڈائجسٹ جو سرکٹ بناتا ہےکسی کال کے ہر ثبوت کی تصدیق اسی کے مقابل کی جاتی ہے؛ rand_getProgram اسے code_hash کے طور پر دکھاتا ہے
پروگرام شناختblake3("rand-program" ‖ base_pc ‖ words)؛ --public کے ساتھ کی گئی تعیناتی عوامی الفاظ کو بھی، ٹیگ rand-program-2 کے تحت، پابند کرتی ہےوہ کلید جس کے تحت تعینات شدہ پروگرام محفوظ کیا جاتا ہے اور اسے کال کیا جاتا ہے

rand-guest build اور rand-guest info دونوں کو طبع کرتے ہیں۔ hc پابند ہے مگر مخفی نہیں: جس کے پاس بھی کوئی امیدوار پروگرام ہو وہ اس کی تصدیق کر سکتا ہے۔

پروگرام کی حد

ایک تعیناتی زیادہ سے زیادہ چین کی پروگرام حد کے برابر الفاظ لے جا سکتی ہے۔

چینحد
max_program_words کے بغیر جینیسس (چین 12)4,096
max_program_words والی جینیسسوہی قدر، 1..=65535
zkVM کی قطعی حد، کسی بھی چین پر65,535

یہ حد جینیسس ہیش کا حصہ ہے، اس لیے چلتی ہوئی چین پر تبدیل نہیں ہو سکتی۔ rand-guest اس کی جانچ --max-words (طے شدہ قدر 4,096) کے مقابل کرتا ہے۔ rand program deploy نوڈ سے rand_estimateFee کے ذریعے دریافت کرتا ہے اور حد سے بڑے پروگرام کو کوئی ثبوت بنانے سے پہلے ہی مسترد کر دیتا ہے۔

چین 20، جو اس وقت فعال چین ہے، یہ حد بڑھاتی ہے۔ اس کا جینیسس ہیش 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135 ہے اور اس کا max_program_words ‏65,535 ہے۔ یہ وہ حدود برقرار رکھتی ہے جو چین 13 (v0.4 چین) نے متعارف کرائی تھیں، سوائے ثبوت کی حد کے، جسے چین 17 سے 20 تک نصف کر دیا گیا ہے۔ اس کی دیگر حدود:

حدچین 20
max_proof_bytes4,194,304 (4 MiB)؛ چین 13 سے 16 تک 8 MiB
max_block_bytes20,971,520 (20 MiB)
max_call_envelope_bytes65,536
max_program_public_words32,768

چین 20 پر، چین 19 کی طرح، الفاظ کی حد اصل فیصلہ کن حد نہیں ہے۔ اس کی جینیسس hardening_v6 مقرر کرتی ہے، جس کے تحت وہ تعیناتی مسترد کر دی جاتی ہے (ProgramUncallable) جس کے پروگرام کو کوئی کال کبھی ثابت نہ کر سکے۔ ایک کال کی حد درجہ 14 ہے، جس کے Poseidon2 جدول میں 2,048 پرمیوٹیشنز سماتی ہیں۔ پروگرام کا ڈائجسٹ ہر چار الفاظ پر ایک پرمیوٹیشن لیتا ہے، ان پٹ کی سالٹ قطار ایک، اور کال کو پابند کرنے والے آٹھ الفاظ دو، جس کے بعد 2,045 بچتی ہیں: عوامی ان پٹ کے بغیر پروگرام کے لیے 8,180 الفاظ، اور عوامی ان پٹ کے ساتھ اس سے کم (نو عوامی الفاظ کے ساتھ 8,168)۔ ہر نوڈ کا پول کسی بھی چین پر ایسی تعیناتی مسترد کر دیتا ہے۔

چین 20 پر بلاک یکجائی بند ہے: اس کی جینیسس میں aggregation حصہ موجود نہیں۔ چین 20، fullnode v0.6.8 پر، 2026-10-01 06:17 UTC سے فعال ہے؛ یہ ایک ہارڈ فورک ہے جو چین 19 کی حالت سے بلندی 7,258 پر کاٹا گیا (چین 19 بلندی 7,700 پر رکی)؛ چین 19 (اسی دن 03:43 UTC سے فعال) خود چین 18 کی بلندی 141,935 پر ایک نئی جینیسس تھی۔ پروگرام کسی کٹ کے پار منتقل نہیں ہوتے، اس لیے کسی سابقہ چین پر تعینات کیا گیا کوئی پروگرام چین 20 پر موجود نہیں۔ چین 20 وہ پہلی چین بھی ہے جس میں RPL-2 پروگرام حالت موجود ہے (پروگرام)۔ یہ نیٹ ورک پر ان بوٹ اسٹریپ نوڈز کے ذریعے چلتی ہے:

/ip4/164.90.239.200/tcp/30303/p2p/12D3KooWEQEbUwZRgqhDPXhW7vNBmcRcnhUDGUADe81VFdv3ALYe
/ip4/165.245.173.74/tcp/30303/p2p/12D3KooWJyc5oDHggAr89e9QrRFBy9Tg8TxXh18yzrb1SM6KKLYw
/ip4/188.166.235.187/tcp/30303/p2p/12D3KooWSyX84P1DAbWByLHpRBMLRWD53r3Jj4aqVt6tHoF8B2ZQ
امیجالفاظ4,096 میں سماتا ہے65,535 میں سماتا ہےچین 20 پر تعینات ہوتا ہے (8,180 قابلِ کال)
fib ‏(Rust)26ہاںہاںہاں
c-fib ‏(C)25ہاںہاںہاں
ERC-20، ترجمہ شدہ (مرحلۂ دوم)11,686نہیںہاںنہیں
evm.bin، EVM انٹرپریٹر18,009نہیںہاںنہیں
sbpf.bin، sBPF انٹرپریٹر8,317نہیںہاںنہیں
SPL Token، ترجمہ شدہ65,096نہیںہاں، 439 کی گنجائش باقی رہتی ہےنہیں

درجات

کسی ثبوت کا درجہ t عمل کو 2ᵗ − 1 قطاروں تک محدود کرتا ہے: سائیکل جمع ڈائجسٹ کی قطاریں (ہر چار پروگرام الفاظ پر ایک، ہر چار ان پٹ الفاظ پر ایک، اور عوامی ان پٹ کا ڈائجسٹ)۔ درجہ ایک الگ Poseidon2 بجٹ بھی مقرر کرتا ہے۔ rand-guest run --tier t دونوں کی اطلاع دیتا ہے:

tier 10: fits (cycles 146 of 1023, Poseidon2 permutations 10 of 128)

درجہ عوامی ہے، اور اسی طرح وہ گیس حد بھی جس کا ثبوت اعلان کرتا ہے۔ چین 20 پر کال کی فیس درجے کے بجائے اسی حد اور ثبوت کے حجم پر منحصر ہے: کم از کم 0.001 RAND + gas_price × gas_limit + byte_price × ⌈bytes / 1024⌉، چین کی موجودہ قیمتوں پر، جو 10⁻⁹ RAND کی 100 اور 800 اکائیوں سے شروع ہوتی ہیں، بلاک کے بھراؤ کے ساتھ گھٹتی بڑھتی ہیں اور چین 20 پر 10,000 اور 80,000 اکائیوں پر رک جاتی ہیں (فیس)۔ کوئی حد ہیڈر کی بالائی حد سے تجاوز نہیں کر سکتی، جو (2ᵗ − 1) + 2ᵗ⁻² ہے، جمع ثبوت میں اعلان کردہ ہر Keccak بلاک پر 191 اور ہر SHA-256 بلاک پر 63: ہیش جدول کے بغیر درجہ 10 پر 1,279 اور درجہ 14 پر 20,479۔ rand-guest run سائیکلوں اور پرمیوٹیشنز کی اطلاع دیتا ہے، گیس کی نہیں۔ rand call ثبوت بنانے سے پہلے پروگرام کو چلاتا ہے اور وہ گیس طبع کرتا ہے جو وہ خرچ کرتا ہے اور وہ حد جس کا وہ اعلان کرتا ہے، جو طے شدہ طور پر عین گیس کو 2ᵗ⁻² کے اگلے مضرب تک بڑھا کر حاصل ہوتی ہے:

gas: 5636 (declaring 6144, tier 12)

یہ سطر 2026-09-30 کو چین 18 پر کی گئی ایک کال سے لی گئی ہے (ایک گمنام ووٹ)۔ جس چین کی جینیسس میں gas حصہ نہ ہو، یعنی چین 15 اور اس سے پہلے کی چینز، وہاں فیس درجے کے جدول کے مطابق تھی: 0.001 + (0.001 + 0.0001 × (t − 10) / 2) RAND۔ کسی ثبوت کو درکار میموری درجے کے ساتھ تیزی سے بڑھتی ہے؛ دیکھیے توثیق کار اور مجمع کار کا ہارڈویئر۔

fullnode v0.5.6 ‏(2026-09-25) سے ایک کال زیادہ سے زیادہ درجہ 14 کا اعلان کر سکتی ہے: نوڈ اس سے بلند درجے کے کال ثبوت کو تصدیق کنندہ کلید بنانے سے پہلے ہی CallTierTooHigh کے ساتھ مسترد کر دیتا ہے، اور ایسا ثبوت رکھنے والا بلاک غیر معتبر ہوتا ہے۔ درجہ 14 کا بجٹ 16,383 قطاریں اور 2,048 Poseidon2 پرمیوٹیشنز ہے، اور پروگرام کا اپنا ڈائجسٹ تقریباً ہر چار الفاظ پر ایک پرمیوٹیشن خرچ کرتا ہے، اس لیے 8,180 الفاظ سے بڑے پروگرام کو کال نہیں کیا جا سکتا، اور چین 20، چین 19 کی طرح، اس کی تعیناتی مسترد کر دیتی ہے۔ Rust یا C میں پروگرام لکھیں اس بجٹ کا تفصیلی جائزہ لیتا ہے۔

آخری بار 2026-10-12 کو fullnode کمٹ c0878c3f (چین 21)، اور circuits `aeacf31` (`rand-guest/README.md`, `rand-guest/src/check.rs`, `research/docs/01-isa.md`, `guest-sdk/`), fullnode tag v0.6.8 `c9c9bd3c` (`docs/program-state.md`, `ledger/program_state.rs`, `deploy/cut-chain20-genesis.sh`), chain 20's genesis and `rand_getLimits`, read on 2026-10-01, fullnode tag v0.8.0 `c0878c3f` (`docs/zkvm.md` §8a, constraint set 9), `deploy/genesis-chain21.json` and `rand_getLimits` on chain 21, read on 2026-10-12 کے مقابل تصدیق کی گئی۔ جہاں کوڈ اور یہ صفحہ ایک دوسرے سے مختلف ہوں، وہاں کوڈ درست ہے؛ ہمیں مطلع کریں۔