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

Solana ٹرانسپائلر

sbpf2rv کسی Solana sBPF پروگرام کو Rand کے RISC-V ISA میں ترجمہ کرتا ہے: یہ کیا ہے، اس کا اعتماد کا ماڈل اور اس کا ELF محافظ، کن صورتوں میں trap ہوتا ہے اور کیا مسترد کیا جاتا ہے، ناپے گئے اعداد و شمار، اور ایک مکمل عملی رہنمائی جو اصل SPL Token پروگرام کا ترجمہ کرتی ہے اور sBPF انٹرپریٹر سے لفظ بہ لفظ مطابقت رکھتی ہے۔

sbpf2rv ایک کمپائل شدہ Solana پروگرام (ایک sBPF ELF، یعنی وہ .so جو cargo build-sbf تیار کرتا ہے) لیتا ہے اور اسے Rand پروگرام میں تبدیل کر دیتا ہے۔ یہ C لکھتا ہے، اور rand-guest build اس C کو ایک RV32IM امیج میں کمپائل کرتا ہے۔ یہ امیج اسی ELF اور اسی ہدایت کے لیے وہی آٹھ آؤٹ پٹ الفاظ شائع کرتا ہے جو Rand کا sBPF انٹرپریٹر گیسٹ، sbpf.bin، شائع کرتا ہے۔ یہ صفحہ حقیقی SPL Token پروگرام پر پورا راستہ دکھاتا ہے۔

یہ کیا ہے

ان پٹایک sBPF v1 ELF
آؤٹ پٹایک C شِم کریٹ؛ rand-guest build اسے امیج کنٹینر بناتا ہے
یہ کہاں چلتا ہےآف چین، ڈویلپر کی مشین پر؛ چین صرف امیج دیکھتی ہے
اسے کس سے مطابقت رکھنی ہےsbpf.bin کے آٹھ آؤٹ پٹ الفاظ سے، انہی دو ان پٹ ٹیپوں پر
ریپوزیٹریسرکٹس ریپوزیٹری میں sbpf2rv/
مقررہ ٹول چینRust 1.98.1، clang 23.1.1، cc کریٹ 1.4.6

ترجمہ شدہ پروگرام انٹرپریٹر کا ABI برقرار رکھتا ہے۔ یہ وہی ٹیپیں پڑھتا ہے: عوامی ٹیپ پر ELF اور نجی ٹیپ پر سیریلائز کی گئی ہدایت (پہلے اکاؤنٹس، پھر ہدایت کا ڈیٹا)۔ یہ پروگرام کے گرد وہی sbpf-core ہارنس چلاتا ہے: ان پٹ کو ڈی کوڈ کرتا ہے، ELF لوڈ کرتا ہے، اکاؤنٹ ریجن کی جانچ کرتا ہے اور ان پٹ اور آؤٹ پٹ کو ہیش کرتا ہے۔ صرف sBPF کا اپنا عمل درآمد نیٹو کوڈ سے بدلا جاتا ہے۔ اسی لیے اس کے آؤٹ پٹ لفظ بہ لفظ انٹرپریٹر کے آؤٹ پٹ کے برابر ہوتے ہیں۔

اعتماد کا ماڈل

ترجمہ شدہ پروگرام کے ثبوت کو تین چیزیں پابند کرتی ہیں۔

  1. hc ترجمہ شدہ کوڈ کو پابند کرتا ہے۔ C امیج میں کمپائل ہوتا ہے، اس لیے امیج کا hc اس کا احاطہ کرتا ہے۔
  2. ELF گارڈ hc کو ایک پروگرام سے پابند کرتا ہے۔ شِم پروگرام کو ٹیپ پر موجود ELF سے لوڈ کرتا ہے، اس لیے کسی جانچ کے بغیر ایک ہی امیج اسی hc کے تحت کال کرنے والے کا منتخب کردہ کوئی دوسرا ELF چلا سکتا تھا۔ اس لیے تیار کردہ program.c کے آخر میں اس لوڈ شدہ پروگرام کا ڈائجسٹ ہوتا ہے جس سے اس کا ترجمہ کیا گیا: ٹیکسٹ، صرف پڑھنے والا ڈیٹا، ان کے پتے اور انٹری پوائنٹ۔ کچھ بھی چلانے سے پہلے شِم ٹیپ کے لوڈ شدہ پروگرام کو اسی طریقے (Poseidon2) سے ہیش کرتا ہے اور موازنہ کرتا ہے۔ کوئی بھی دوسرا پروگرام پری اسٹیٹ پر BadElf، اسٹیٹس 2، کے ساتھ رک جاتا ہے۔ لہٰذا جو ثبوت اس hc کے مقابل تصدیق پاتا ہے وہ اسی پروگرام کا رن ہے۔
  3. H_PUB ELF کے بائٹس کو پابند کرتا ہے۔ ELF عوامی ٹیپ پر سفر کرتا ہے، اور ثبوت کا عوامی ان پٹ ڈائجسٹ لفظ بہ لفظ اس کا احاطہ کرتا ہے۔

آیا hc کسی دیے گئے ELF کا درست ترجمہ ہے، اس کی جانچ دوبارہ بلڈ کر کے کی جاتی ہے۔ ELF پر مقررہ sbpf2rv چلائیں، مقررہ ٹول چین سے بلڈ کریں، اور hc کا موازنہ کریں۔ اسی وجہ سے بلڈ قابلِ اعادہ ہے۔

چین ماخذ ELF یا اس کا ہیش ریکارڈ نہیں کرتی۔ یہ امیج اور اس کی پروگرام آئی ڈی محفوظ کرتی ہے۔ جو ڈیپلائے کرنے والا چاہتا ہے کہ ELF معلوم ہو، وہ اسے پروگرام کے ساتھ شائع کرتا ہے۔

گارڈ فائل کو نہیں بلکہ لوڈ شدہ پروگرام کو پابند کرتا ہے۔ دو ELF جو صرف وہاں مختلف ہوں جہاں لوڈر نہیں دیکھتا (ہیڈر پیڈنگ، سمبل ٹیبلز) ایک ہی پروگرام کی صورت میں لوڈ ہوتے ہیں اور دونوں طرف یکساں چلتے ہیں۔ جس ELF میں .rodata کا ایک بائٹ بدلا ہوا ہو، چاہے وہ ایسا بائٹ ہو جسے ٹرانسفر کبھی نہیں پڑھتا، اسے ترجمہ مسترد کر دیتا ہے اور انٹرپریٹر چلا دیتا ہے۔

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

ترجمے کے وقت کچھ بھی مسترد نہیں ہوتا۔ خراب ساخت والا ELF لوڈر کے اپنے پیغام کے ساتھ مسترد ہوتا ہے، لیکن درست ساخت والے ELF کی کوئی ہدایت مسترد نہیں ہوتی۔ اسکینر ان چیزوں کو انتباہات کے طور پر رپورٹ کرتا ہے جن تک پروگرام پہنچ سکتا ہے، اور ترجمہ شدہ پروگرام رن ٹائم پر ٹھیک وہیں ٹریپ ہوتا ہے جہاں انٹرپریٹر ہوتا:

انتباہیہ کیا ہےرن ٹائم پر
UnknownSyscallایسا سسٹم کال ہیش جسے رن ٹائم نافذ نہیں کرتاٹریپ UnknownSyscall
Cpiکراس پروگرام انووکیشن (sol_invoke_signed*)وہی UnknownSyscall ٹریپ؛ CPI نافذ نہیں ہے
RegisterOutOfRangeرجسٹر r11..r15، یا r10 سے اوپر کا callx رجسٹرٹریپ BadInsn
UnknownOpcodeایسا اوپ کوڈ جس کی کوئی v1 کلاس نہ ہو، بشمول صرف v2 والا sdiv/srem خاندان اور hor64ٹریپ BadInsn
JumpOutOfTextفنکشن کے ٹیکسٹ سے باہر کوئی جمپ، کال یا فال تھروٹریپ BadJump
BadCallImmSrcایسا call imm جس کا src 2..=10 میں ہو (صرف ہاتھ سے بنائے گئے ELF میں)ٹریپ BadInsn

جو مترجم ایسے کوڈ کو مسترد کرے جس تک رسائی نہ ہو، وہ ان پروگراموں کو مسترد کر دے گا جنہیں انٹرپریٹر آج چلاتا ہے۔ SPL Token ایسا ہی پروگرام ہے: یہ sol_set_return_data اور sol_get_sysvar کو کال کرتا ہے، جن تک Transfer کا راستہ کبھی نہیں پہنچتا۔

تین انحرافات قبول کیے گئے ہیں۔ ان میں سے ہر ایک صرف ترجمے کو وہاں روکتا ہے جہاں انٹرپریٹر شاید نہ رکے؛ ترجمہ کبھی ایسا رن مکمل نہیں کرتا جسے انٹرپریٹر روک دیتا ہے۔

  1. اسکین شدہ سیٹ سے باہر callx پر BadJump ٹریپ ہوتا ہے، جبکہ انٹرپریٹر اس پتے پر حقیقی کوڈ چلا سکتا ہے۔
  2. بجٹ کی جانچ ایک بیسک بلاک تک مؤخر ہو سکتی ہے۔ SPL Token کو 65,535 الفاظ کی حد میں سمونے کے لیے اس کے 3,546 بلاکس میں سے 1,505 اپنی ہدایات کی حد کی جانچ چھوڑ دیتے ہیں۔ رکنے کی نوعیت اس ایک بلاک کے اندر مختلف ہو سکتی ہے جو حد عبور کرتا ہے۔ اسٹیٹس اور آٹھ الفاظ وہی رہتے ہیں۔
  3. صرف ماخذ پروگرام چلتا ہے۔ کوئی دوسرا ELF مسترد ہو جاتا ہے (گارڈ، اوپر)۔

Ed25519 اور secp256k1۔ sol_ed25519_verify اور sol_secp256k1_recover کے سافٹ ویئر نفاذ sbpf-rt/ میں موجود ہیں لیکن لنک نہیں کیے گئے۔ انٹرپریٹر دونوں پر ٹریپ ہوتا ہے، اس لیے مطابقت کی خاطر ترجمہ بھی ٹریپ ہوتا ہے۔ ہر کال پر بالترتیب تقریباً 14.3M اور 15.7M سائیکلز لگتے ہیں، جو سب سے بڑے ٹیئر (2²⁰) سے کہیں زیادہ ہیں۔ انہیں کو پروسیسر ٹیبلز درکار ہیں۔

اعداد و شمار

SPL Token (guests-compiled/sbpf/programs/spl_token.so، انٹرپریٹر کا اپنا ٹیسٹ فکسچر) پر، ELF گارڈ کی موجودگی میں، ناپے گئے۔

امیجپروگرام الفاظحدhc
SPL Token، ترجمہ شدہ65,09665,535 (439 فاضل)8ca905ae…758b
sbpf.bin، انٹرپریٹر8,31765,535059a7086…f476
ویکٹراسٹیٹسsBPF ہدایاتترجمہ شدہ سائیکلزsbpf.bin سائیکلزٹیئر (دونوں)
Transfer 2501143765,851694,49820
Transfer بیلنس سے زیادہ0133748,836679,81420
MintTo 2501120708,648634,42320
MintTo غلط اتھارٹی کی جانب سے0134696,694627,24120
Burn 2501131710,245637,03820
Burn بیلنس سے زیادہ0121695,434624,78120
Transfer دو اکاؤنٹس کے ساتھ069645,015569,65620
بہت زیادہ اکاؤنٹس (ہارنس مسترد کرتا ہے)20303,933304,61620

Transfer پر سائیکلز کہاں صرف ہوتے ہیں:

مرحلہترجمہ شدہsbpf.bin
دونوں ٹیپیں پڑھنا302,881302,880
ELF لوڈ کرنا177,012173,859
اکاؤنٹ ریجن کی جانچ103,829103,824
sBPF اسٹیک اور ہیپ کو صفر کرنا49,18149,181
آؤٹ پٹ اور ان پٹ ہیش، عوامی الفاظ، جوڑنے والا کوڈ51,09142,723
ELF گارڈ72,949—
خود sBPF پروگرام8,90822,031
کل765,851694,498

ترجمہ شدہ پروگرام کا اپنا عمل درآمد فی sBPF ہدایت تقریباً 2.4 سے 2.5 گنا سستا ہے (تقریباً 62 سائیکلز بمقابلہ 154)۔ لیکن ہر رن کا تقریباً 98% مقررہ ہارنس ہے، اور گارڈ 73k سائیکلز کا اضافہ کرتا ہے۔ چنانچہ SPL Token کے لیے ترجمہ شدہ امیج 69k سے 75k سائیکلز مہنگا ہے، اور دونوں ٹیئر 20 پر رہتے ہیں۔

ترجمہ صرف حساب کے لحاظ سے بھاری پروگراموں کے لیے فائدہ مند ہے۔ فی ہدایت تقریباً 90 سائیکلز کی بچت پر، 10,000 sBPF ہدایات چلانے والی کال تقریباً 0.9M سائیکلز بچاتی ہے۔ SPL Token 120 سے 143 ہدایات چلاتا ہے۔

عملی رہنمائی: SPL Token، ترجمہ شدہ اور مطابقت شدہ

ہر کمانڈ 7ef3220 پر سرکٹس چیک آؤٹ کی جڑ سے چلتی ہے، Rust پروگرام ڈیپلائے کریں والی ٹول چین اور RISC-V پروگرام ڈیپلائے کریں والے clang 23.1.1 کے ساتھ۔ طویل آؤٹ پٹ وہاں کاٹا گیا ہے جہاں … کا نشان ہے۔

0. ٹولز بلڈ کریں

(cd sbpf2rv && cargo +1.98.1 build --release)
(cd rand-guest && cargo +1.98.1 build --release)

1. ترجمہ کریں

--out کا سرکٹس چیک آؤٹ کے اندر کوئی ڈائریکٹری ہونا لازم ہے۔

$ sbpf2rv/target/release/sbpf2rv guests-compiled/sbpf/programs/spl_token.so --out sbpf2rv/target/spl-token --name spl-token
entry pc 225: 30 function(s), 3546 block(s), 12061 instruction(s), 30 callx target(s), 0 refusal(s), 4 warning(s)
  fn 225: 2065 block(s)
  …                                                (30 functions in all)
  warning: UnknownSyscall { pc: 7803, hash: 2720453611 }
  warning: UnknownSyscall { pc: 9530, hash: 2720453611 }
  warning: UnknownSyscall { pc: 8698, hash: 2720453611 }
  warning: UnknownSyscall { pc: 11547, hash: 331461893 }
wrote sbpf2rv/target/spl-token/program.c (521757 bytes of C) and the spl-token shim crate: rand-guest build sbpf2rv/target/spl-token

0 refusal(s)۔ چاروں انتباہات حقیقی سسٹم کالز ہیں جن تک Transfer کبھی نہیں پہنچتا: ہیش 2720453611 sol_set_return_data ہے (تین کال مقامات) اور 331461893 sol_get_sysvar ہے۔

2. امیج بلڈ کریں

امیج پہلے سے طے شدہ 4,096 الفاظ کی حد سے بڑا ہے، اس لیے --max-words 65535 دیں۔

$ rand-guest/target/release/rand-guest build sbpf2rv/target/spl-token --max-words 65535
…
65096 words against a cap of 65535 (fits); 2 ecall(s) with a non-static a7
OK
wrote sbpf2rv/target/spl-token/image.bin and its .sha256 (65096 words, hc 8ca905ae3c62f503de7de86829040f323e098b53dba5fffe09b42f1aad16758b, program id 65d234ce9ca4d082f487c038abfa76e67f41a0d91e10b9ac388f1e1541d59184)

$ rand-guest/target/release/rand-guest info sbpf2rv/target/spl-token/image.bin
form: image container
text 64819 words at 0x10000; data 102 words (101 non-zero) at 0x4f4cc; prologue 277 words; program 65096 words from base_pc 0xfbac
hc 8ca905ae3c62f503de7de86829040f323e098b53dba5fffe09b42f1aad16758b
program id 65d234ce9ca4d082f487c038abfa76e67f41a0d91e10b9ac388f1e1541d59184
65096 words against a cap of 4096: does not fit

جو کوئی بھی یہ دو مراحل اسی ٹول چین کے ساتھ چلائے، اسے یہی hc ملتا ہے۔

3. دونوں چلائیں، اور موازنہ کریں

250 کا Transfer الفاظ کی دو فہرستیں لیتا ہے، جو tests/parity.rs انٹرپریٹر کی اپنی کال انکوڈنگ سے بناتا ہے: 27,151 عوامی الفاظ (ELF، الفاظ کی صورت میں انکوڈ شدہ) اور 10,458 نجی الفاظ (پہلے اکاؤنٹس، پھر Transfer کا امتیازی نشان اور رقم)۔ rand-guest run انہیں --public اور --input کے طور پر لیتا ہے۔ ہر فہرست کے ابتدائی الفاظ تک مختصر کیا گیا:

$ rand-guest run sbpf2rv/target/spl-token/image.bin \
    --public 108600 1179403647 65794 0 0 17235971 1 2088 …   (27 151 words)
    --input  41825 4 0 65791 0 50529027 50529027 50529027 …  (10 458 words)
out[0] = 1
out[1] = 2892832079
out[2] = 376091303
out[3] = 1311040261
out[4] = 2015764099
out[5] = 3682593600
out[6] = 3311553006
out[7] = 141115266
cycles 765851
tier 20

یہی دو فہرستیں انٹرپریٹر گیسٹ کے مقابل:

$ rand-guest run guests-compiled/bin/sbpf.bin \
    --public 108600 1179403647 65794 0 0 17235971 1 2088 …   (27 151 words)
    --input  41825 4 0 65791 0 50529027 50529027 50529027 …  (10 458 words)
out[0] = 1
out[1] = 2892832079
out[2] = 376091303
out[3] = 1311040261
out[4] = 2015764099
out[5] = 3682593600
out[6] = 3311553006
out[7] = 141115266
cycles 694498
tier 20

آٹھوں الفاظ یکساں ہیں۔ out[0] = 1 اسٹیٹس ہے (کامیابی)۔ out[1..8] وہ ڈائجسٹ ہے جسے انٹرپریٹر کا ABI ان پٹ اور آؤٹ پٹ پر متعین کرتا ہے۔

4. آٹھوں ویکٹرز ایک کمانڈ میں جانچیں

مطابقت کا ٹیسٹ ترجمہ شدہ امیج بلڈ کرتا ہے، ہر ویکٹر کو دونوں امیجز پر rand-guest run کے ذریعے چلاتا ہے، اور آٹھ الفاظ میں کسی بھی فرق پر ناکام ہو جاتا ہے:

$ cd sbpf2rv && cargo +1.98.1 test --test parity the_spl_token -- --nocapture
…
translated SPL Token: 65096 program words (cap 65 535), hc 8ca905ae3c62f503de7de86829040f323e098b53dba5fffe09b42f1aad16758b
transfer 250: Ok(0), status 1; cycles translated 765851, interpreter guest 694498
transfer too much: Ok(1), status 0; cycles translated 748836, interpreter guest 679814
MintTo 250: Ok(0), status 1; cycles translated 708648, interpreter guest 634423
MintTo 250 signed by someone else: Ok(4), status 0; cycles translated 696694, interpreter guest 627241
Burn 250: Ok(0), status 1; cycles translated 710245, interpreter guest 637038
Burn 1 000 001 (balance 1 000 000): Ok(1), status 0; cycles translated 695434, interpreter guest 624781
transfer with two accounts: Ok(47244640256), status 0; cycles translated 645015, interpreter guest 569656
an account count above MAX_ACCOUNTS: Err(BadElf), status 2; cycles translated 303933, interpreter guest 304616
…
test the_spl_token_transfer_translates_and_matches_the_interpreter_word_for_word ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 27.84s

5. ڈیپلائے کریں

rand program deploy sbpf2rv/target/spl-token/image.bin --public spl_token.so

امیج ELF کو عوامی ٹیپ سے پڑھتی ہے، اس لیے ELF پروگرام کا عوامی ان پٹ ہے جو ڈیپلائے کے وقت طے ہو جاتا ہے۔ --public براہِ راست .so فائل لیتا ہے؛ والیٹ اسے ورڈز میں انکوڈ کر کے انہی 27,151 ورڈز میں بدلتا ہے جو مرحلہ 4 میں تھے۔

اس کے لیے ایسی چین درکار ہے جس کا جینیسس max_program_words کو کم از کم 65,096 اور max_program_public_words کو کم از کم 27,151 مقرر کرے۔ چین 12 نے ایک ڈیپلائے کی حد 4,096 ورڈز رکھی تھی اور کوئی عوامی ان پٹ قبول نہیں کرتی تھی، اس لیے والیٹ نے وہاں کچھ بھی ثابت کرنے سے پہلے ہی اس امیج کو مسترد کر دیا۔ چین 13، یعنی v0.4 چین، نے 65,535 اور 32,768 مقرر کیے، اور اس کے بعد کی ہر چین دونوں قدریں برقرار رکھتی ہے۔ چین 20، جو لائیو چین ہے (جینیسس 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135)، چین 13 کی بلاک اور کال اینویلپ کی حدیں بھی برقرار رکھتی ہے اور پروف کی حد آدھی کر کے 4 MiB کر دیتی ہے (4,194,304 بائٹس، چین 17 سے؛ چین 13 سے 16 تک یہ 8 MiB تھی)۔ سائز کی حدیں اب واحد رکاوٹ نہیں رہیں۔ چین 20 کا جینیسس hardening_v6 مقرر کرتا ہے، اور اس کے تحت ایسا ڈیپلائے غیر درست ہے جس میں پروگرام ورڈز اس تعداد سے زیادہ ہوں جو ٹیئر 14 کی کال حد پر ایک کال میں سما سکتے ہیں (ProgramUncallable): عوامی ان پٹ کے بغیر زیادہ سے زیادہ 8,180 ورڈز، اور عوامی ان پٹ کے ساتھ اس سے کم۔ یہ امیج 27,151 ورڈز کے عوامی ان پٹ کے ساتھ 65,096 ورڈز کی ہے، اس لیے چین 20 یہ ڈیپلائے مسترد کرتی ہے، اور کال کو بھی مسترد کرے گی: ہر SPL ویکٹر ٹیئر 20 پر چلتا ہے، جو ٹیئر 14 کی کال حد سے اوپر ہے (حدود)۔ چین 20 پر بلاک ایگریگیشن بند ہے (اس کے جینیسس میں کوئی aggregation سیکشن نہیں)؛ اس کے بوٹسٹریپ نوڈز ویلیڈیٹر چلانا میں درج ہیں۔ ڈیپلائے فیس عوامی ورڈز کو کوڈ ورڈز کے ساتھ شمار کرتی ہے: 0.001 + 0.0001 × (65,096 + 27,151) = 9.2257 RAND، یعنی وہی فیس جو نیچے دیے گئے چین 13 کے ڈیپلائے نے ادا کی۔

یہ ڈیپلائے 2026-09-19 کو چین 13 پر چلایا گیا، جب چین 13 لائیو چین تھی (پروڈکشن FRI پروفائل، جینیسس 8123ccac1883a45750e4df6964fb7cd3f0b321798cde4c0ef406a0293939ece3)، اور یہ جینیسس والیٹ shielded-1 سے کیا گیا۔ اس کے بعد کی ہر چین (14 سے 19) چین 13 کے پروگراموں کے بغیر ایک نئی چین کے طور پر شروع کی گئی، اور امیج ان میں سے کسی پر دوبارہ ڈیپلائے نہیں کی گئی، اس لیے نیچے دی گئی ٹرانزیکشن اور بلندی چین 13 کی ہیں اور اب ایکسپلورر پر نہیں ملتیں۔ پروگرام آئی ڈی صرف base_pc، ورڈز اور عوامی ورڈز کا ہیش ہے، اس لیے ایک ہی امیج اور ELF کو ہر اس چین پر ایک ہی آئی ڈی ملتی ہے جو یہ ڈیپلائے قبول کرے۔ والیٹ کا آؤٹ پٹ، پیش رفت کی سطریں حذف کر کے (…):

$ rand program deploy <image.bin> --public spl_token.so
program id: 740236918310f8e52bb0c1ef49b2b0e0c018762e289666660685b0694c8dd00a (65096 words, hc ae05a98c03f5623c68e87dde320f0429538b093efeffa5db1a2fb4098b7516ad, public input 27151 words, digest ec57b10ed6f3a3d5fe87ec072f691322ad747377ba2f0a1788bcfe3e7334d67e)
…
proved in 94.3s: tier 14, 1418406 bytes
submitted deploy 626fc9387ecc1f6b39f44184807303ac2843029d8fb8e28338bf186445927530
…
پروگرام آئی ڈی740236918310f8e52bb0c1ef49b2b0e0c018762e289666660685b0694c8dd00a
امیج65,096 ورڈز؛ rand-guest کے املا میں hc 8ca905ae…، والیٹ کے املا میں ae05a98c…
عوامی ان پٹ27,151 ورڈز (ELF)، ڈائجسٹ ec57b10ed6f3a3d5fe87ec072f691322ad747377ba2f0a1788bcfe3e7334d67e
فیس بنڈل (چین 13 کا 2 اِن 2 آؤٹ بنڈل)ٹیئر 14، 1,418,406 بائٹس، 94.3 s میں ثابت کیا گیا
ڈیپلائے ٹرانزیکشن (چین 13)626fc9387ecc1f6b39f44184807303ac2843029d8fb8e28338bf186445927530
بلندی جس پر اینکر ہوئی (چین 13)400
فیس9.2257 RAND

چین 14 سے فیس ادا کرنے والا بنڈل وہی واحد 4 اِن 4 آؤٹ پوشیدہ اثاثہ بنڈل ہے جو ہر ٹرانزیکشن کے ساتھ ہوتا ہے، اور یہ ٹرانزیکشن کی بائنڈنگ کے مقابل ثابت کیا جاتا ہے۔ یہ اب بھی ٹیئر 14 ہے: چین 14 اور 15 پر پروڈکشن پروفائل میں تقریباً 100 s اور تقریباً 1.42 MB۔ چین 17 سے ایک بنڈل ٹیئر 10 کا اجازت پروف بھی ساتھ رکھتا ہے (منقسم اجازت)، اس لیے چین 18 اور 19 پر ایک ٹرانزیکشن کا فیس بنڈل تقریباً 1.49 MB بنڈل پروف اور تقریباً 1.37 MB اجازت پروف پر مشتمل ہوتا ہے۔

پروگرام آئی ڈی ELF کو پابند کرتی ہے، اس لیے یہ اس آئی ڈی سے مختلف ہے جو rand-guest info صرف امیج کے لیے پرنٹ کرتا ہے۔ وہی آئی ڈی کال کریں جو deploy نے پرنٹ کی۔

حدود

  • اس پروگرام کی کسی کال کا پروف نہیں بنایا گیا، یہ چین 20 پر ڈیپلائے نہیں ہے، اور چین 20 ڈیپلائے اور کال دونوں کو مسترد کرتی ہے۔ اوپر والا ڈیپلائے چین 13 پر تھا۔ چین 20 کے hardening_v6 کے تحت ایسا ڈیپلائے غیر درست ہے جس میں ورڈز اس تعداد سے زیادہ ہوں جو ٹیئر 14 کی ایک کال میں سما سکتے ہیں (ProgramUncallable؛ زیادہ سے زیادہ 8,180 ورڈز)، اور یہ امیج 65,096 ورڈز کی ہے۔ ان پٹ کی جانب گنجائش موجود ہے: ELF ڈیپلائے کا عوامی ان پٹ ہے، جسے rand call خود حاصل کرتا ہے، اور 10,458 نجی ورڈز 16,071 کی ان پٹ حد میں سما جاتے ہیں، جو چین 20 برقرار رکھتی ہے۔ لیکن ہر SPL ویکٹر ٹیئر 20 کا ہے، اور fullnode v0.5.6 (2026-09-25) سے کوئی بھی نوڈ ٹیئر 14 سے اوپر کا ہر کال پروف مسترد کر دیتا ہے (CallTierTooHigh)، اور یہ ویریفائر کلید بنانے سے پہلے ہی ہو جاتا ہے۔ یہی جانچ ان ہیش جدولوں کی بھی حد مقرر کرتی ہے جن کا ایک کال اعلان کر سکتی ہے: 2¹³ SHA-256 قطاریں (128 کمپریشنز) اور 2¹² Keccak قطاریں (128 پرمیوٹیشنز)۔ ٹیئر 20 کی کال کا پروف صرف آف چین بنایا جا سکتا ہے، اور ٹیئر 20 کا کوئی پروف ابھی تک موجود نہیں (اگلا نکتہ)۔
  • ٹیئر 20 پر ابھی تک کوئی پروف نہیں بنایا گیا۔ ٹیئر 20 کا ایک پروف 48 GB والے لیپ ٹاپ پر تقریباً 31 GB پر روک دیا گیا، اور 64 GB والے ڈراپلیٹ پر 10 m 41 s کے بعد 65.1 GB پر میموری ختم ہونے کے باعث بند کر دیا گیا۔ ٹیئر 16/18 کی ماپی گئی اسکیلنگ (ہر +2 ٹیئرز پر میموری تقریباً ×3.9، وقت تقریباً ×4.1) سے اندازہ لگایا جائے تو ٹیئر 20 کو تقریباً 330 GB اور تقریباً 3.6 h درکار ہیں، جو DigitalOcean کے سب سے بڑی میموری والے ڈراپلیٹ (m-32vcpu-256gb، 256 GB) سے زیادہ ہے۔ پروور ایک ہی تھریڈ پر چلا: 16 vCPU والی مشین پر ایک کور 99% پر رہا۔ دیکھیں پروونگ میموری۔
  • کوئی CPI نہیں۔ کراس پروگرام انووکیشنز ٹریپ ہو جاتی ہیں۔
  • صرف sBPF v1۔ صرف v2 والے اوپ کوڈز ٹریپ ہو جاتے ہیں۔
  • Ed25519 اور secp256k1 سسٹم کالز ٹریپ ہو جاتی ہیں جب تک ان کے لیے کوپروسیسر جدولیں نہیں بن جاتیں۔
  • چین ELF کو صرف عوامی ان پٹ کے طور پر ریکارڈ کرتی ہے۔ --public کے ساتھ کیا گیا ڈیپلائے ELF کے ورڈز اور ان کا ڈائجسٹ محفوظ کرتا ہے، اور rand_getProgramPublic انہیں فراہم کرتا ہے۔ چین یہ ریکارڈ نہیں کرتی کہ امیج اس سے کیسے بنائی گئی: بلڈ ان پٹس شائع کریں تاکہ دوسرے hc کو دوبارہ بنا سکیں۔

آخری بار 2026-10-12 کو fullnode کمٹ c0878c3f (چین 21)، اور circuits `7ef3220` (`sbpf2rv/README.md`, `docs/superpowers/specs/2026-09-18-sbpf-to-rv32-translator-design.md`); steps 1, 2 and the parity test re-run on 2026-09-19 کے مقابل تصدیق کی گئی۔ جہاں کوڈ اور یہ صفحہ ایک دوسرے سے مختلف ہوں، وہاں کوڈ درست ہے؛ ہمیں مطلع کریں۔