Rand Protocol
ஆவணமாக்கல்
RISC-V நிரல்கள்

RISC-V அறிவுறுத்தல் தொகுப்புக் கட்டமைப்பு

Rand-இல் RV32IM என்பதன் பொருள் - zkVM நிரூபிக்கும் அறிவுறுத்தல்கள், சரிபார்ப்பு நிரல் மறுப்பவை, எட்டு அமைப்பு அழைப்புகள், நினைவகம், ஒரு நிரல் வெளியிடப்படும் படிமக் கொள்கலன், நிரலுக்கான வரம்பு.

இந்தப் பக்கத்தைப் படித்த பிறகே Rand-க்கான நிரலை எழுதத் தொடங்குங்கள். உங்கள் குறியீடு எந்த இயந்திரத்தில் இயங்குகிறது, கருவித்தொடர் எவற்றை மறுக்கிறது, ஒரு நிரல் வெளி உலகுடன் எவ்வாறு தொடர்புகொள்கிறது, நீங்கள் எந்தக் கோப்பைப் பயன்படுத்துகிறீர்கள் என்பவற்றை இது விளக்குகிறது. அடுத்த பக்கங்கள் இதன் அடிப்படையில் அமைந்தவை: Rust நிரலைப் பயன்படுத்துதல், RISC-V நிரலைப் பயன்படுத்துதல், மற்றும் இரண்டு மொழிமாற்றிகள்.

இயந்திரம்

Rand நிரல்கள் RV32IM வகையைச் சேர்ந்தவை: 32-பிட் RISC-V அடிப்படை முழுஎண் தொகுப்பும் பெருக்கல், வகுத்தல் நீட்டிப்பும். அவை Rand zkVM-க்குள் இயங்குகின்றன. ஒவ்வொரு இயக்கத்தையும் அது Plonky3 தொகுதி STARK மூலம் நிரூபிக்கிறது. சரிபார்ப்பாளர் எந்த அறிவுறுத்தலையும் பார்ப்பதில்லை. நிரலின் சுற்றுக்குள் கணக்கிடப்படும் Poseidon2 ஹாஷ் சுருக்கமான hc-க்கு எதிராக அது சான்றைச் சரிபார்க்கிறது.

குழுஅறிவுறுத்தல்கள்
மேல் / தாவல்கள்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 மட்டும்

RV32I கூறுவதுபோல, JALR தன் இலக்கின் பிட் 0-ஐ அழிக்கிறது; அதன் குறியாக்கத்தில் funct3 = 0 இருக்க வேண்டும். இவ்விரு விதிகளும் கட்டுப்பாட்டுத் தொகுப்பு 7 (சங்கிலி 16) உடன் வந்தன; அதற்கு முன்பு ஒற்றைப்படை இலக்கைப் பெற முடியவில்லை, அதனால் அந்த இயக்கத்தை நிரூபிக்க முடியவில்லை. இரட்டைப்படையாக இருந்தும் நான்கின் மடங்காக இல்லாத இலக்கை இப்போதும் பெற முடியாது.

மிதவைப் புள்ளி இல்லை. அணுநிலைச் செயல்பாடுகள் (A நீட்டிப்பு), சுருக்கப்பட்ட அறிவுறுத்தல்கள் (C நீட்டிப்பு), 64-பிட் பதிவேடுகள் ஆகியவையும் இல்லை. C-இல் ஒரு 64-பிட் வகுத்தல் மென்பொருள் உதவிச் செயல்பாட்டுக்கான அழைப்பாக மாறுகிறது; C வழியைப் பார்க்கவும்.

மறுக்கப்படுபவை

rand-guest check ஒவ்வொரு உரைச் சொல்லையும் இயந்திரத்தின் சொந்தக் குறிவிலக்கி வழியாகச் செலுத்துகிறது. இந்தச் சோதனையில் தேறிய நிரல் குறியாக்கம், அமைப்பு அழைப்பு எண் அல்லது அமைப்புமுறை காரணமாகச் சுற்றில் தோல்வியடையாது. சரிபார்ப்பி மறுப்பவை:

கண்டறிதல்அது என்ன
Compressed16-பிட் RVC குறியாக்கம்; இயந்திரம் 32-பிட் சொற்களை மட்டுமே குறிவிலக்குகிறது
Undecodableஇயந்திரம் செயல்படுத்தாத opcode, funct அல்லது நகர்த்தல் அளவு
FenceFENCE அல்லது FENCE.I; இயந்திரத்தில் நினைவக வரிசைமுறை இல்லை
Csrஎந்த CSR அறிவுறுத்தலும்; இயந்திரத்தில் CSR-கள் இல்லை
EbreakEBREAK; trap-கள் மாதிரியாக்கப்படவில்லை
Syscallஒரு ecall, அதன் a7 சற்று முன்னதாக ஒரு li மூலம் அமைக்கப்பட்டு, எந்த அமைப்பு அழைப்பையும் குறிக்கவில்லை
Capஏற்றி எண்ணும் முறையிலேயே எண்ணப்பட்டு, --max-words-ஐ விட அதிகமான சொற்கள்
Layoutசொல் எல்லையில் சீரமைக்கப்படாத உரை அடிப்படை முகவரி

fence, ebreak, ecall எண் 9 ஆகியவற்றைக் கொண்ட நான்கு சொல் நிரலை 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

சரிபார்ப்பியால் a7-ஐக் காண முடியாத ecall (li தவிர வேறொன்றால் அமைக்கப்பட்டது, அல்லது ஒரு கிளைக்குப் பின் வருவது) மறுக்கப்படுவதில்லை; அது unresolved_ecalls ஆகக் கணக்கிடப்படுகிறது. தவறான எண்ணுக்கு இயக்க நேரத்தில் இயந்திரம் trap செய்யும்.

சுட்டி மதிப்புகள், நீளங்கள், உள்ளீட்டுச் சுட்டெண்கள், RAM-க்கு எதிரான 64 KiB அடுக்கு, இயக்க நேரத்தில் கணக்கிடப்படும் முகவரிகளின் சீரமைப்பு ஆகியவற்றைச் சரிபார்ப்பி சோதிப்பதில்லை. சீரமைக்கப்படாத அணுகல் ஒரு கட்டுப்பாட்டு மீறல் என்பதால், கருவித்தொடர் -unaligned-scalar-mem உடன் தொகுக்கிறது. இயக்க நேரத்தில் ஏற்படும் எந்த trap-ஐயும் 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உப்பிடப்பட்ட உறுதிப்பாடு H_IN-உடன் பிணைக்கப்பட்ட தனிப்பட்ட உள்ளீட்டுச் சொல் idx-ஐத் தருகிறது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உப்பிடப்படாத H_PUB-உடன் பிணைக்கப்பட்ட பொதுப் பகுதிச் சொல் idx-ஐத் தருகிறது1read_public(idx)rand_read_public
7POSEIDON2_LEN ptr nநீளம் n ஸ்பாஞ்சுக்குள் பிணைக்கப்பட்ட POSEIDON2, குறைந்தது ஒரு வரிசைமாற்றம் (கட்டுப்பாட்டுத் தொகுப்பு 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 என்பது ஒரு slice மீதான பாதுகாப்பான அழைப்பு; keccak, sha256_compress ஆகியவை &mut [u32; 50], &mut [u32; 24] ஆகியவற்றை எடுத்துக்கொள்கின்றன.

கருவித்தொடரில் ஒரு இடைவெளி. சுற்றுகள் aeacf31-இல் இயந்திரம், எமுலேட்டர், Rust SDK ஆகியவை அமைப்பு அழைப்பு 7-ஐச் செயல்படுத்துகின்றன; ஆனால் rand-guest check செயல்படுத்துவதில்லை: அதன் அமைப்பு அழைப்புப் பட்டியல் 6-இல் நின்றுவிடுகிறது. எனவே a7 = 7 கொண்ட ecall-ஐ அது Syscall கண்டறிதலாக அறிவிக்கிறது; poseidon2_len-ஐ அழைக்கும் guest-இல் rand-guest build பூஜ்ஜியமல்லாத குறியுடன் வெளியேறுகிறது (circuits issue #1). guest.h-இலும் இதற்கான உறைச்செயல்பாடு இல்லை. இது சரிசெய்யப்படும் வரை, வழக்கமான கருவியால் உருவாக்கப்பட்ட guest நிலையான நீளச் செய்திகளுக்கு POSEIDON2-ஐப் பயன்படுத்துகிறது.

ஒரு சான்று சரியாக இவற்றை வெளியிடுகிறது: hc, H_IN, H_PUB, நிலை, அறிவிக்கப்பட்ட கேஸ் வரம்பு, எட்டு வெளியீட்டுச் சொற்கள். இன்று சங்கிலியில் இரண்டு வரம்புகள் பொருந்துகின்றன:

  • பொதுப் பகுதி பயன்படுத்தும்போதே நிலைநிறுத்தப்படுகிறது. சங்கிலி 20-இல், rand program deploy --public ஒரு நிரலின் பொதுச் சொற்களை அமைக்கிறது (அதிகபட்சம் max_program_public_words, 32,768); ஒவ்வொரு அழைப்பும் அவற்றுக்கு எதிராகச் சரிபார்க்கப்படுகிறது. ஒவ்வொரு அழைப்புக்கும் நிரலுக்கெனத் தனிப் பொதுச் சொற்கள் இல்லை. சங்கிலி 19-ஐப் போலவே சங்கிலி 20-உம் ஒவ்வொரு அழைப்பின் பகுதியிலும் அவற்றுக்குப் பின் எட்டுச் சொற்களைச் சேர்க்கிறது; இது சான்றை அதன் பரிவர்த்தனையுடன் இணைக்கும் அழைப்புப் பிணைப்பு (சங்கிலி 20-இல் இது genesis ஹாஷையும் உள்ளடக்குகிறது); guest தன் சொந்தச் சொற்களை முன்பிருந்த அதே சுட்டெண்களிலேயே படிக்கிறது. ஒரு 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 அடுக்கு.
  • தரவுப் பகுதி கொண்ட நிரலுக்கு, ஏற்றியின் முன்னுரைப் பகுதிக்காக (அடுத்த பிரிவு) அதன் உரைக்குக் கீழே இடம் தேவை. evm.ld, sbpf.ld செய்வதுபோல, அதன் சொந்த .ld ORIGIN-ஐ 0x10000-க்கு உயர்த்துகிறது.

பிம்பக் கொள்கலன்

rand-guest build, rand-guest pack இரண்டும் ஒரே கோப்பு வடிவத்தை எழுதுகின்றன: பிம்பக் கொள்கலன். எல்லா எண்களும் little-endian 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

சங்கிலி 19-இல் போலவே சங்கிலி 20-இலும், சொல் உச்சவரம்பு கட்டுப்படுத்தும் வரம்பு அல்ல. அதன் ஜெனிசிஸ் 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-இல் இல்லை. RPL-2 நிரல் நிலையைக் கொண்ட முதல் சங்கிலியும் சங்கிலி 20 தான் (நிரல்கள்). இது பின்வரும் தொடக்க இணைப்புக் கணுக்கள் வழியாக வலையமைப்பில் இயங்குகிறது:

/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 சொற்களுக்கு மேற்பட்ட நிரலை அழைக்க இயலாது, சங்கிலி 19-ஐப் போலவே சங்கிலி 20-உம் அதன் நிறுவலை மறுக்கிறது. Rust அல்லது C-இல் ஒரு நிரலை எழுதுங்கள் இந்த வரவுசெலவு வரம்பை விரிவாகக் கணக்கிட்டுக் காட்டுகிறது.

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 உடன் 2026-10-12 அன்று இறுதியாகச் சரிபார்க்கப்பட்டது. நிரலும் இந்தப் பக்கமும் முரண்படும் இடங்களில் நிரலே சரியானது; எங்களுக்குத் தெரிவியுங்கள்.