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

Rust நிரலை வரிசைப்படுத்துதல்

no_std Rust கிரேட்டிலிருந்து வரிசைப்படுத்தப்பட்ட இரகசிய நிரல் வரை படிப்படியாக - நிலைநிறுத்தப்பட்ட பதிப்பிலான கருவித்தொகுப்பை நிறுவுதல், விருந்தினர் நிரலை எழுதுதல், rand-guest மூலம் அதைக் கட்டமைத்துச் சரிபார்த்தல், ஒப்புருவாக்கியில் இயக்குதல், அதை வரிசைப்படுத்தி அழைத்தல்.

இந்தப் பக்கம் ஒரு சிறிய Rust நிரலை மூலக் குறியீட்டிலிருந்து Rand-இல் நிறுவப்பட்ட நிரல் வரை கொண்டு செல்கிறது. கீழே உள்ள ஒவ்வொரு rand-guest கட்டளையும் உண்மையில் இயக்கப்பட்டது; அதன் வெளியீடு சுருக்கப்படாமல் அப்படியே ஒட்டப்பட்டுள்ளது. இந்த இயக்கங்கள் 2026-09-19 அன்று circuits கமிட் 7ef3220-இல் செய்யப்பட்டன. testnet இப்போது சங்கிலி 20. அதன் கருவித்தொகுப்பு, சங்கிலிகள் 18, 19 ஆகியவற்றைப் போலவே, aeacf31-இல் கட்டமைக்கப்பட்டது (fullnode v0.6.8, v0.6.7 பொருத்திய அதே கமிட்டையே பொருத்துகிறது). வெளியீடுகள் அங்கு மீண்டும் இயக்கப்படவில்லை. இயந்திரம், கணினி அழைப்புகள், கோப்பு வடிவம் ஆகியவற்றை RISC-V ISA பக்கம் விளக்குகிறது.

1. கருவித்தொகுப்பை நிறுவுதல்

hc தொகுப்பியின் துல்லியமான பதிப்பைச் சார்ந்துள்ளது. ஆகவே கருவித்தொகுப்பு ஒரு குறிப்பிட்ட பதிப்பில் பொருத்தப்பட்டுள்ளது.

கருவிபதிப்புகாரணம்
Rust1.98.1விருந்தினர் நிரலையும் rand-guest-ஐயும் தொகுக்கிறது
riscv32im-unknown-none-elf இலக்கு1.98.1-க்கானதுவிருந்தினர் நிரலின் இலக்கு
ஒரு circuits செக்அவுட்சங்கிலிகள் 18 முதல் 20 வரை aeacf31-இல் உள்ள randprotocol/zkp-circuitsrand-guest, guest-sdk, இணைப்பி ஸ்கிரிப்ட் ஆகியவை இதில் உள்ளன
git clone https://github.com/randprotocol/zkp-circuits circuits
cd circuits
git checkout aeacf31                      # branch feat/v067-circuits, what fullnode v0.6.7 and v0.6.8 pin
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"

rand-guest-க்கு ஐந்து துணைக் கட்டளைகள் உள்ளன: build, check, pack, run, info.

கமிட் முக்கியமானது. ஏனெனில் hc மூலக் குறியீட்டையும் கருவித்தொகுப்பையும் பொறுத்தது: guest-sdk-இன் வேறொரு கமிட்டுடன் மீண்டும் கட்டமைக்கப்படும் விருந்தினர் நிரலுக்கு வேறுபட்ட hc கிடைக்கலாம். 7ef3220-க்கும் aeacf31-க்கும் இடையில் rand-guest கோப்பகம் மாறவில்லை. ஆனால் guest-sdk/src/lib.rs மாறியது (படி 2).

2. விருந்தினர் நிரலை எழுதுதல்

விருந்தினர் நிரல் என்பது guest-sdk-ஐச் சார்ந்திருக்கும் no_std, no_main பைனரி கிரேட் ஆகும். அது circuits செக்அவுட்டுக்குள் இருக்க வேண்டும். விருந்தினர் நிரலின் கோப்பகத்துக்கு மேலே guest-sdk/-ஐத் தேடுவதன் மூலம் rand-guest build செக்அவுட்டைக் கண்டறிகிறது. செக்அவுட்டுக்கு வெளியே உள்ள விருந்தினர் நிரலை அது ஏற்க மறுக்கிறது.

இந்த விருந்தினர் நிரல் ஒரு வரம்பு மதிப்பையும் ஓர் எண்ணிக்கையையும், அந்த எண்ணிக்கை அளவு தனிப்பட்ட இருப்புகளையும் படிக்கிறது. இருப்புகள் வரம்பு மதிப்பை ஈடுசெய்தால், அது 1-ஐயும் உபரியையும் வெளியிடுகிறது. இருப்புகளை அது ஒருபோதும் வெளியிடுவதில்லை.

circuits/
  guest-sdk/
  rand-guest/
  my-guests/
    threshold/
      Cargo.toml
      src/main.rs

my-guests/threshold/Cargo.toml:

[package]
name = "threshold"
version = "0.1.0"
edition = "2021"

[dependencies]
guest-sdk = { path = "../../guest-sdk" }

[profile.release]
opt-level = 3
lto = true
panic = "abort"
codegen-units = 1

[workspace]

வெற்று [workspace] கிரேட்டை எந்தப் பெற்றோர் பணியிடத்திலும் சேராமல் தடுக்கிறது. களஞ்சியத்தில் உள்ள fib விருந்தினர் நிரலும் இதையே செய்கிறது.

my-guests/threshold/src/main.rs:

#![no_std]
#![no_main]

use guest_sdk::{halt, read_input, write_output};

/// Input 0 is a threshold, input 1 a count n, inputs 2..2+n are private balances.
/// Output 0 is 1 if the balances sum to at least the threshold, else 0.
/// Output 1 is the surplus when they do. The balances themselves are never published.
#[no_mangle]
pub extern "C" fn main() -> ! {
    let threshold = read_input(0);
    let n = read_input(1);
    let mut sum: u32 = 0;
    for i in 0..n {
        sum = sum.wrapping_add(read_input(2 + i));
    }
    if sum >= threshold {
        write_output(0, 1);
        write_output(1, sum - threshold);
    }
    halt();
}

guest-sdk read_input, read_public, write_output, poseidon2, keccak, keccak256, sha256_compress, sha256, halt ஆகியவற்றை ஏற்றுமதி செய்கிறது. மேலும் _start-ஐயும் வழங்குகிறது. அது ஸ்டாக் சுட்டியை அமைத்து main-ஐ அழைக்கிறது. நினைவக ஒதுக்கியும் இல்லை, மிதவைப் புள்ளி எண்கணிதமும் இல்லை.

aeacf31-இல் அவற்றில் மூன்று கையொப்பங்கள் 7ef3220-இலிருந்து வேறுபடுகின்றன. ஒரு புதிய ஏற்றுமதியும் உள்ளது:

செயல்பாடு7ef3220-இல்aeacf31-இல்
keccakfn keccak(ptr: *mut u32)fn keccak(state: &mut [u32; 50])
sha256_compressfn sha256_compress(ptr: *mut u32)fn sha256_compress(buf: &mut [u32; 24])
poseidon2fn poseidon2(ptr: *mut u32, n: usize)unsafe fn poseidon2(ptr: *mut u32, n: usize)
poseidon2_lenஇல்லைfn poseidon2_len(buf: &mut [u32], n: usize) -> [u32; 8], கணினி அழைப்பு 7

poseidon2_len செய்தியின் நீளத்தை ஸ்பாஞ்சுக்குள் பிணைக்கிறது. அதுவே பாதுகாப்பான அழைப்பு. ஆனால் aeacf31-இல் உள்ள rand-guest check இன்னும் கணினி அழைப்புகள் 0 முதல் 6 வரை மட்டுமே பட்டியலிடுகிறது. ஆகவே அதை அழைக்கும் விருந்தினர் நிரல் கட்டமைக்கப்படும்போது, build ecall with a7 = 7, which is no syscall the machine implements என்று நிராகரிக்கும் படிமமே உருவாகிறது (zkp-circuits issue #1). இது சரிசெய்யப்படும் வரை, விருந்தினர் நிரல் நிலையான நீளமுடைய, குறியிடப்பட்ட செய்திகளின் மீது unsafe { poseidon2(ptr, n) } மூலம் ஹாஷ் செய்கிறது. இந்தப் பக்கத்தில் உள்ள விருந்தினர் நிரல் இந்த நான்கில் எதையும் பயன்படுத்துவதில்லை.

விருந்தினர் நிரல் கோப்பகத்துக்கான விதிகள்:

  • .cargo/config அல்லது .cargo/config.toml கூடாது: கோப்பகத்திலோ, எந்தப் பெற்றோர் கோப்பகத்திலோ, $CARGO_HOME-இலோ இருக்கக் கூடாது. cargo அவற்றைக் கட்டமைப்பில் இணைத்துவிடும் என்பதால், build மறுத்து ஒவ்வொரு கோப்பையும் பெயரிட்டுக் காட்டுகிறது.
  • உங்கள் சொந்தத் தொகுப்பிக் கொடிகள் கூடாது. அவை அனைத்தையும் build-ஏ அமைக்கிறது: இணைப்பி ஸ்கிரிப்ட், -unaligned-scalar-mem, செக்அவுட் எங்கிருந்தாலும் படிமம் மாறாமல் இருக்கச் செய்யும் பாதை மறுவரைவு ஆகியவை.
  • அதிகபட்சம் ஒரு .ld கோப்பு. விருந்தினர் நிரலின் கோப்பகத்தில் உள்ள ஒரே .ld கோப்பை build பயன்படுத்துகிறது. அப்படி ஒன்றும் இல்லையெனில் guest-sdk/guest.ld-ஐப் பயன்படுத்துகிறது. ஒன்றுக்கு மேல் இருந்தால், --ld மூலம் அதைக் குறிப்பிடுங்கள்.

3. கட்டமைத்தலும் சரிபார்த்தலும்

$ rand-guest build my-guests/threshold --out threshold.bin
   Compiling guest-sdk v0.1.0 (…/circuits/guest-sdk)
warning: unstable feature specified for `-Ctarget-feature`: `unaligned-scalar-mem`
  |
  = note: this feature is not stably supported; its behavior can change in the future

warning: `guest-sdk` (lib) generated 1 warning
   Compiling threshold v0.1.0 (…/circuits/my-guests/threshold)
warning: `threshold` (bin "threshold") generated 1 warning (1 duplicate)
    Finished `release` profile [optimized] target(s) in 0.15s
40 words against a cap of 4096 (fits); 0 ecall(s) with a non-static a7
OK
wrote threshold.bin and its .sha256 (40 words, hc a491df99f289d81e2b6e09849a850b14e36e2bd6edc5f5a6de46c3d67c703665, program id 1b129cbce89df252150ab3d387a927beb1650a40e6cb0b04e86cdc203ca1b853)

unaligned-scalar-mem எச்சரிக்கை எதிர்பார்க்கப்பட்டதே: கருவித்தொகுப்பு சீரமைக்கப்படாத அணுகலை வேண்டுமென்றே முடக்குகிறது.

build cargo +1.98.1 build --release --target riscv32im-unknown-none-elf மூலம் தொகுக்கிறது. பின்னர் விளைவின் மீது check-ஐ இயக்கி, படிமக் கொள்கலனையும் ஒரு .sha256 பொருத்துக் கோப்பையும் எழுதுகிறது. check நிரலை நிராகரித்தாலும், build படிமத்தை எழுதுகிறது; ஆனால் பூஜ்ஜியமல்லாத குறியீட்டுடன் வெளியேறுகிறது.

கொடிஇயல்புநிலைபொருள்
--out <path><dir>/image.binபடிமம் சேமிக்கப்படும் இடம்
--max-words <n>4096check அளவிடும் வரம்பு; இலக்குச் சங்கிலியின் வரம்பைக் கொடுங்கள் (சங்கிலி 20-இல் 65,535)
--ld <path>கோப்பகத்தில் உள்ள ஒரே .ld, இல்லையெனில் guest-sdk/guest.ldஇணைப்பி ஸ்கிரிப்ட்
--lang rust|crustதொகுப்பி

4. எமுலேட்டரில் இயக்குதல்

தனிப்பட்ட உள்ளீடுகளை --input மூலம் கொடுங்கள்; ஒவ்வொன்றுக்கும் ஒரு சொல். இயக்கம் அடுக்கு t-க்குள் அடங்குகிறதா என்பதையும் --tier t தெரிவிக்கிறது.

$ rand-guest run threshold.bin --input 1000 --input 4 --input 400 --input 250 --input 300 --input 75 --tier 10
out[0] = 1
out[1] = 25
out[2] = 0
out[3] = 0
out[4] = 0
out[5] = 0
out[6] = 0
out[7] = 0
cycles 52
tier 10
tier 10: fits (cycles 66 of 1023, Poseidon2 permutations 14 of 128)

இருப்புகளின் கூட்டுத்தொகை 1,025. ஆகவே நிரல் 1-ஐயும் 25 உபரியையும் வெளியிடுகிறது. இருப்புகள் 400, 250 எனில் கூட்டுத்தொகை குறைவாக இருக்கும்; அப்போது ஒவ்வொரு வெளியீடும் பூஜ்ஜியம். ட்ராப் ஏற்பட்டால் trap: <error> அச்சிடப்பட்டு, நிரல் 2 என்ற குறியீட்டுடன் வெளியேறுகிறது.

5. படிமத்தை ஆய்வு செய்தல்

$ rand-guest info threshold.bin
form: image container
text 40 words at 0x1000; data 0 words (0 non-zero) at 0x0; prologue 0 words; program 40 words from base_pc 0x1000
hc a491df99f289d81e2b6e09849a850b14e36e2bd6edc5f5a6de46c3d67c703665
program id 1b129cbce89df252150ab3d387a927beb1650a40e6cb0b04e86cdc203ca1b853
40 words against a cap of 4096: fits

ஓர் அழைப்பின் நிரூபணம் hc-க்கு எதிராகவே சரிபார்க்கப்படுகிறது. நிரல் அடையாளம் என்பது நீங்கள் நிரலை நிறுவுவதற்கும் அழைப்பதற்கும் பயன்படுத்தும் அடையாளம்.

6. நிறுவுதல்

fullnode v0.3 அல்லது அதற்குப் பிந்தைய பதிப்பின் rand வாலட்டைப் பயன்படுத்துங்கள். பழைய வாலட்டுகள் படிமக் கொள்கலனைப் படிப்பதில்லை. சங்கிலி 14 முதல், ஒவ்வொரு தொகுப்பு நிரூபணமும் அதன் பரிவர்த்தனையின் பிணைப்புக்கு எதிராகச் சரிபார்க்கப்படுகிறது. ஆகவே சங்கிலி-14 கட்டமைப்பை (b3c594c) விடப் பழைய வாலட் உருவாக்கும் தொகுப்பு நிரூபணத்தைச் சங்கிலி ஏற்க மறுக்கும். நேரலைச் சங்கிலியான சங்கிலி 20-இல், fullnode v0.6.8 அல்லது அதற்குப் பிந்தைய பதிப்பின் rand-ஐப் பயன்படுத்துங்கள் (கணுக் குழுமம் v0.6.8-ஐ இயக்குகிறது; Linux-இல் கட்டமைக்கப்பட்ட rand அதன் GitHub வெளியீட்டுடன் இணைக்கப்பட்டுள்ளது). v0.6.7 வாலட்டால் சங்கிலி 20-இல் அனுப்ப முடியாது. சங்கிலி 20-இன் ஜெனிசிஸ் binding_domain: 1 என அமைக்கிறது. ஆகவே ஒவ்வொரு நிரூபணப் பிணைப்பிலும் ஒவ்வொரு கையொப்பமிடப்பட்ட செய்தியிலும் ஜெனிசிஸ் ஹாஷ் அடங்குகிறது. ஆனால் v0.6.7 வாலட் சங்கிலி அடையாளத்தை மட்டுமே பிணைக்கிறது. வாலட்டை ஒத்திசைக்கவும், நிரலை நிறுவவும், அழைக்கவும் பொது முனையம் https://rpc.randprotocol.org போதுமானது (அமைப்பு).

rand fee deploy 40               # the floor for a 40-word program
rand program deploy threshold.bin

program deploy நிரல் அடையாளம், சொல் எண்ணிக்கை, hc ஆகியவற்றை அச்சிடுகிறது. பின்னர் rand_estimateFee மூலம் கணுவிடம் நிறுவல் கட்டணத்தைக் கேட்கிறது. சங்கிலியின் வரம்பை மீறும் நிரலை எந்த நிரூபணமும் தொடங்கும் முன்பே அது மறுக்கிறது. அதன் பிறகு கட்டணத்தைச் செலுத்தும் பூஜ்ஜிய மதிப்புள்ள சுய-பரிமாற்றத் தொகுப்பை நிரூபித்துச் சமர்ப்பித்து, கமிட் ஆகும் வரை காத்திருக்கிறது. ஒவ்வொரு பரிவர்த்தனையும் கொண்டுசெல்லும் அதே 4-உள்ளீடு 4-வெளியீடு மறைசொத்துத் தொகுப்புதான் இது. சங்கிலி 17 முதல் இது இரண்டு நிரூபணங்கள்; வாலட் ஒவ்வொன்றுக்கும் ஒரு வரியை அச்சிடுகிறது: அடுக்கு-10 செலவு அங்கீகாரம் (சில வினாடிகள், சுமார் 1.37 MB), அடுக்கு-14 தொகுப்பு (மடிக்கணினியில் சுமார் இரண்டு நிமிடங்கள், சுமார் 1.5 MB). சங்கிலி 15-இல் இது சுமார் 100 s எடுத்த, சுமார் 1.42 MB அளவுள்ள ஒரே அடுக்கு-14 நிரூபணமாக இருந்தது. சங்கிலி 18-இல் நடந்த ஒரு நிறுவலை வாலட் அச்சிட்டவாறே ஓர் அநாமதேய வாக்கெடுப்பு காட்டுகிறது.

நிறுவல் கட்டணம் 0.001 RAND + 0.0001 RAND × words. சங்கிலி 20-இலும் இது முன்புபோலவே உள்ளது. கேஸ் அழைப்புகளுக்கான விலையை நிர்ணயிக்கிறது, நிறுவல்களுக்கு அல்ல:

நிரல்சொற்கள்நிறுவல் கட்டணம்
threshold400.005 RAND
இயல்புநிலை வரம்பில் உள்ள நிரல் (சங்கிலி 12)4,0960.4106 RAND
பொதுப் பகுதி இல்லாமல் சங்கிலி 20 நிறுவும் மிகப்பெரிய நிரல்8,1800.819 RAND
65,535-சொல் வரம்பில் உள்ள நிரல் (சங்கிலிகள் 13 முதல் 15 வரை)65,5356.5545 RAND

threshold 4,096 சொற்களுக்குக் குறைவானது. ஆகவே அது இயல்புநிலை வரம்புக்குள்ளும் சங்கிலி 20-இன் 65,535 வரம்புக்குள்ளும் அடங்குகிறது. 4,096 சொற்களுக்கு மேற்பட்ட நிரலுக்கு, ஜெனிசிஸ் max_program_words-ஐக் குறைந்தது அந்த அளவுக்கு அமைக்கும் சங்கிலி தேவை; சங்கிலி 20 அத்தகையது (RISC-V ISA). சங்கிலி 19 போலவே சங்கிலி 20-க்கும் இரண்டாவதான, தாழ்வான ஒரு வரம்பு உள்ளது: எந்த அடுக்கு-14 அழைப்பாலும் தாங்க முடியாத நிரலை நிறுவ அது மறுக்கிறது (ProgramUncallable). பொதுப் பகுதி இல்லையெனில் இது 8,180 சொற்களுக்கு மேல்; பொதுப் பகுதி இருந்தால் அதைவிடக் குறைவு. rand program deploy --input <word> … (அல்லது உள்ளீடுகள் இல்லாத அழைப்புக்கு --check-call) நீங்கள் நினைக்கும் அழைப்பை முதலில் எமுலேட்டரில் இயக்குகிறது. அது அடுக்கு 14-க்குள் அல்லது அதற்குக் கீழ் அடங்காவிட்டால் நிறுவ மறுக்கிறது.

பதிவைச் சரிபாருங்கள்:

rand program show 1b129cbce89df252150ab3d387a927beb1650a40e6cb0b04e86cdc203ca1b853

அதன் code_hash, rand-guest அச்சிட்ட அதே hcதான்; எழுதப்படும் விதம் மட்டும் வேறு. rand-guest டைஜெஸ்டின் எட்டுச் சொற்களில் ஒவ்வொன்றையும் பெரு-முனை வரிசையில் அச்சிடுகிறது. வாலட், rand program show, rand_getProgram ஆகியவை ஒவ்வொரு சொல்லின் பைட்டுகளையும் சிறு-முனை வரிசையில் அச்சிடுகின்றன. ஆகவே a491df99…3665 என்பது 99df91a4…707c எனத் தோன்றுகிறது: எட்டு ஹெக்ஸ் இலக்கங்கள் கொண்ட ஒவ்வொரு குழுவிலும் பைட் வரிசை தலைகீழாகிறது. நிரல் அடையாளம் இரண்டிலும் ஒரே மாதிரியாக எழுதப்படுகிறது.

7. அழைத்தல்

rand call 1b129cbce89df252150ab3d387a927beb1650a40e6cb0b04e86cdc203ca1b853 \
    --input 1000 --input 4 --input 400 --input 250 --input 300 --input 75

வாலட் குறியீட்டைப் பெற்று, அழைப்பை எமுலேட்டரில் இயக்குகிறது. எதையும் நிரூபிக்கும் முன்பே gas: <exact> (declaring <limit>, tier <t>)-ஐயும் கட்டணத்தையும் அச்சிடுகிறது. பின்னர் உள்ளீட்டுப் பதிவுத்தொடரை முத்திரையிட்டு, இயக்கத்தை உள்ளூரிலேயே நிரூபிக்கிறது. ஒரு தொகுப்பின் வழியாகக் கட்டணத்தைச் செலுத்தி, ரசீதை அச்சிடுகிறது. சங்கிலி 20-இல் இது மூன்று நிரூபணங்கள்: அழைப்பு, அடுக்கு-10 செலவு அங்கீகாரம், அடுக்கு-14 தொகுப்பு.

சங்கிலி 20-இல் கட்டணம் இனி 0.001 + call_fee(tier) அல்ல; சங்கிலி 15-இல் அந்தச் சூத்திரத்தின்படி இந்த அழைப்பின் கட்டணம் 0.002 RAND ஆக இருந்தது. குறைந்தபட்சக் கட்டணம் BUNDLE_BASE + gas_price × declared gas limit + byte_price × ⌈bytes / 1024⌉ ஆகும். அதாவது 0.001 RAND, அதனுடன் அறிவிக்கப்பட்ட கேஸ் வரம்புக்கு கேஸ் விலையில் கணக்கிட்ட தொகை (தொடக்கத் தொகுதியில் 100 அலகுகள்; ஓர் அலகு 10⁻⁹ RAND), அதனுடன் நிரூபணம் மற்றும் உறையின் பைட்டுகளுக்கு பைட் விலையில் கணக்கிட்ட தொகை (தொடக்கத் தொகுதியில் ஒரு KiB-க்கு 800 அலகுகள்). சங்கிலி 20-இல் இவ்விரு விலைகளும் முறையே 10,000, 80,000 அலகுகளைத் தாண்ட முடியாது. துல்லியமான கேஸ் அளவு தனிப்பட்டதாகவே இருக்கும். இயல்பாக, வாலட் அதை 2^(tier − 2)-இன் மடங்குக்கு மேல்நோக்கி முழுமையாக்கி அறிவிக்கிறது. நிரூபணம் உருவாவதற்கு முன்பே கட்டணம் நிர்ணயிக்கப்படுவதால், நிரூபணத்தைச் சங்கிலியின் 4,194,304-பைட் உச்சவரம்பின் அடிப்படையில் விலையிடுகிறது. அதன்பின் இரண்டு விலைப் படிகள் அளவுக்கு இடைவெளியைச் சேர்க்கிறது. சங்கிலி 18-இல் அளவிடப்பட்ட நான்கு அழைப்புகள் ஒவ்வொன்றும் 0.0057 முதல் 0.0075 RAND வரை செலவாயின (எடுத்துக்காட்டு நிரல்கள்). இந்த அழைப்பு சங்கிலிகள் 18 முதல் 20 வரை எதிலும் செய்யப்படவில்லை; எனவே இதற்கு எந்த எண்ணிக்கையும் தரப்படவில்லை.

சங்கிலி அடுக்கு, அறிவிக்கப்பட்ட கேஸ் வரம்பு, H_IN, எட்டு வெளியீட்டுச் சொற்கள் [1, 25, 0, 0, 0, 0, 0, 0] ஆகியவற்றை மட்டுமே காண்கிறது. இருப்புகளை அது ஒருபோதும் காண்பதில்லை.

ரசீதுகள், உள்ளீட்டு உறைகள், rand open-call ஆகியவற்றை நிரல்கள் விளக்குகிறது. இது போன்ற ஒரு Call நிலையற்றது. சங்கிலி 20-இல் ஒரு நிரல் Invoke மூலம் கலங்களையும் ஒரு பெட்டகத்தையும் வைத்திருக்கவும் முடியும் (நிரல் நிலை (RPL-2)).

உங்கள் hc-ஐ மற்றவர்கள் சரிபார்க்க அனுமதித்தல்

உருவாக்கம் மீளுருவாக்கக்கூடியது. build தொகுப்பியின் சூழலைச் சுத்திகரிக்கிறது (RUSTFLAGS, CARGO_* மேலெழுதல்கள், RUSTC உறைநிரல்கள் மற்றும் பிற). cargo கட்டமைப்புக் கோப்புகளை ஏற்க மறுக்கிறது. உள்ளூர் நகலின் பாதையை /rand-circuits என மாற்றியமைக்கிறது. அதே மூலக்குறியீடு Rust 1.98.1 உடன் எந்த இயந்திரத்திலும் அதே hc-ஐத் தருகிறது. நீங்கள் வரிசைப்படுத்தியதை மற்றவர்கள் உறுதிப்படுத்த, விருந்தினர் நிரலின் மூலக்குறியீட்டையும் உங்கள் circuits commit-ஐயும் வெளியிடுங்கள் (சங்கிலிகள் 18 முதல் 20 வரைக்காக உருவாக்கப்பட்ட விருந்தினர் நிரலுக்கு aeacf31). அதன்பின் எவரும் மீண்டும் உருவாக்கி, hc-ஐ rand_getProgram தரும் code_hash உடன் ஒப்பிடலாம். சங்கிலி சொற்களை மட்டுமே சேமிக்கிறது; மூலக்குறியீட்டைச் சேமிப்பதில்லை.

சிக்கல் தீர்த்தல்

செய்திகாரணம்
… is not inside a circuits checkout (no guest-sdk/ above it)விருந்தினர் நிரல் கோப்பகத்தை உள்ளூர் நகலுக்குள் நகர்த்துங்கள்
build ஒரு .cargo/config.toml-ஐக் குறிப்பிடுகிறதுஅதை நீக்குங்கள் அல்லது நகர்த்துங்கள்; அதைச் சுத்திகரிக்க முடியாது
Cap உடன் REJECTEDநிரல் --max-words-ஐத் தாண்டுகிறது; அதை இலக்குச் சங்கிலியின் உச்சவரம்பு வரை உயர்த்துங்கள், அல்லது நிரலைச் சுருக்குங்கள் (opt-level = "s")
Syscall மற்றும் a7 = 7 உடன் REJECTEDவிருந்தினர் நிரல் poseidon2_len-ஐ அழைக்கிறது; aeacf31-இல் உள்ள rand-guest check-க்கு அமைப்பு அழைப்பு 7 இன்னும் தெரியாது (zkp-circuits issue #1)
Fence, Csr அல்லது Ebreak உடன் REJECTEDஇயந்திரத்தில் இல்லாத ஓர் அறிவுறுத்தலை உருவாக்கம் வெளியிட்டது; எவை மறுக்கப்படுகின்றன என்பதைப் பாருங்கள்
run-இலிருந்து trap: …இயக்க நேரப் பிழை, எடுத்துக்காட்டாகச் சீரமைக்கப்படாத முகவரி அல்லது செயல்படுத்தப்படாத அமைப்பு அழைப்பு எண்
ஓட்டம் எந்த அடுக்கிலும் பொருந்தவில்லை என run கூறுகிறதுஓட்டம் 2²⁰ வரிசைகளை அல்லது அதன் Poseidon2 வரம்பைத் தாண்டுகிறது; அதை நிரூபிக்க முடியாது

fullnode கமிட் c0878c3f (சங்கிலி 21), மற்றும் circuits `7ef3220` (`rand-guest/README.md`, `guest-sdk/`, `guests-compiled/fib`); every `rand-guest` output on this page was produced on 2026-09-19, circuits `aeacf31` (`guest-sdk/src/lib.rs`, `rand-guest/src/check.rs`; `git diff 7ef3220 aeacf31 -- guest-sdk rand-guest`), read on 2026-09-30; no output on this page was re-run at that commit, fullnode tag v0.6.8 `c9c9bd3c` (`docs/deploy.md` on `binding_domain`, `.github/workflows/ci.yml` circuits pin) and `rand_getLimits` on chain 20, read on 2026-10-01; nothing on this page was deployed or called on chain 20, fullnode tag v0.8.0 `c0878c3f` (`CHANGELOG.md`, `docs/zkvm.md` §8a) and `rand_getLimits` on chain 21, read on 2026-10-12; nothing on this page was deployed or called on chain 21 உடன் 2026-10-12 அன்று இறுதியாகச் சரிபார்க்கப்பட்டது. நிரலும் இந்தப் பக்கமும் முரண்படும் இடங்களில் நிரலே சரியானது; எங்களுக்குத் தெரிவியுங்கள்.