evm2rv د EVM د اجرا وخت bytecode، چې د solc --bin-runtime وتنه ده، اخلي او په یوه Rand پروګرام یې بدلوي. دا C لیکي، او rand-guest build دا C په یوه RV32IM انځور کې کمپایل کوي. انځور هماغه د ننوتو ویکتور اخلي چې د Rand د EVM مفسر مېلمه، evm.bin، یې اخلي، او هماغه اته د وتنې کلمې خپروي. دا قرارداد په اصلي ډول اجرا کوي، پر ځای د دې چې اوپکوډ په اوپکوډ یې تفسیر کړي. دا پاڼه ټوله لاره د یوه ERC-20 پر بېلګه ښيي.
دا څه شی دی
| ننوت | د EVM د اجرا وخت bytecode، د hex متن (.hex) یا خامو بایټونو په توګه |
| وتنه | د C یو شیم crate؛ rand-guest build یې د انځور په کانټېنر بدلوي |
| چېرته اجرا کېږي | له ځنځیر بهر، د پراختیاکوونکي پر ماشین؛ ځنځیر یوازې انځور ویني |
| له څه سره باید سمون ولري | د evm.bin حالت، اته د وتنې کلمې او gas_used |
| ذخیرهځای | evm2rv/ د circuits په ذخیرهځای کې |
| ټاکلې وسیلې | Rust 1.98.1، clang 23.1.1، د cc crate 1.4.6 |
ژباړونکی د اجرا وخت کوډ اخلي، نه د جوړونې کوډ. یو ثبوت یوازې یو ځل غوښتنه پوښي چې یو ځای پر ځای شوي قرارداد ته کېږي، نو جوړوونکی (constructor) هېڅکله نه اجرا کېږي. هغه حالت چې جوړوونکي به لیکلی و، پر ځای یې د مخکیني حالت برخه ده، د ذخیرې د شاهدانو په توګه.
د ژباړې دوه پړاوونه دي. دواړه یو شان پایلې او ګاز ورکوي؛ هر یو یې ځانګړی پروګرام دی چې خپل hc لري.
| پړاو | بیرغ | څه کوي |
|---|---|---|
| لومړی | --stage 1 | هر اوپکوډ د حافظې پر یوه سټک |
| دویم | --stage 2، ډیفالټ | د هر بلاک د سټک کلمې په C سیمهییزو متغیرونو کې، ثابتونه د ژباړې پر مهال ساده کېږي |
د ننوتو ویکتور د مفسر ویکتور دی: کوډ، د غوښتنې ډېټا، غوښتونکی او د چاپېریال نورې کلمې، د ګاز حد، د مخکیني حالت ریښه، او د هر هغه سلاټ لپاره یو د ذخیرې شاهد چې غوښتنه ورته لاس رسوي. وتنې دا دي: out[0]، حالت (1 بریالیتوب، 0 بېرته ګرځول، 2 استثنايي درېدل)، او out[1..8]، د EVM_OUT ډایجسټ چې د کوډ هش، دواړه د حالت ریښې، بېرته راګرځېدلې ډېټا او لاګونه پوښي.
د باور ماډل
تاییدوونکی یو ژباړل شوی قرارداد په دوو ګامونو کې کتلی شي.
hc == translate(bytecode).evm2rvپر خپاره شوي bytecode بیا د هماغه--stageاو--chain-idسره اجرا کړئ، د ټاکلو وسیلو سره یې بیا جوړ کړئ، اوhcپرتله کړئ. تولید شوی crateccدقیقاً ټاکي او خپلCargo.lockلري.- د کوډ ساتونکی
hcله bytecode سره تړي. ژباړل شوې منطق په انځور کې کمپایل کېږي، خوCODECOPYاوCODESIZEهغه کوډ لولي چې د ننوتو په ویکتور کې دی. له کتنې پرته، یوhcکېدای شي د هغو کوډ بایټونو سره اجرا شي چې غوښتونکي ټاکلي وي. نوcontract.cد سرچینې bytecode (د هغه اوږدوالی او بایټونه) یو Poseidon2 ډایجسټ لري، او شیم د ننوتو د ویکتور کوډ په هماغه ډول هش کوي مخکې له دې چې هر ژباړل شوی کوډ اجرا شي. بل کوډ ردېږي: حالت 2،gas_used0، درېدلOutOfBounds.
د EVM_OUT ډایجسټ د کوډ keccak256 هم تړي، لکه څنګه چې د مفسر ډایجسټ یې تړي. ځنځیر د سرچینې bytecode یا د هغه هش نه ثبتوي. د دې لپاره چې نور hc وکتلی شي، bytecode خپور کړئ، یا د Solidity سرچینه او د solc دقیق جوړښت.
ساتونکی پر لېږد 1,008 سایکلونه لګوي. هغه کوډ چې له سرچینې سره یو بایټ توپیر ولري، په دویم پړاو کې په 30,418 سایکلونو کې ردېږي (کچه 16).
پوښښ، او څه ټریپ کوي
اوپکوډونه. د Shanghai ټولګه. د --evm-version shanghai سره کمپایل کړئ: نوي هدفونه MCOPY او د Cancun نور اوپکوډونه تولیدوي، چې ټریپ کوي.
د چاپېریال اوپکوډونه:
| اوپکوډ | ژباړه |
|---|---|
ADDRESS، CALLER، CALLVALUE، CALLDATASIZE، CODESIZE | د ننوتو له ویکتور څخه، لکه څنګه چې مفسر یې لولي |
CHAINID | د --chain-id ارزښت، د ژباړې پر مهال دننه ځای پر ځای کېږي، نو hc یې تړي؛ کله چې کوډ CHAINID ولري اړین دی |
ORIGIN | له CALLER سره برابر دی (یوه غوښتنه، پرته له ریلیر) |
GASPRICE، COINBASE، TIMESTAMP، NUMBER، PREVRANDAO، GASLIMIT، SELFBALANCE، BASEFEE، BLOCKHASH | ټریپ کوي (حالت 2)، لکه په مفسر کې |
د بلاک د شرایطو نهه اوپکوډونه تر هغه ټریپ کوي چې یو بلاک ته د هغوی د تړلو لپاره ډیزاین جوړ شي. یو خصوصي ننوت د بلاک واقعیت نشي لېږدولی، ځکه چې تاییدوونکی H_IN نشي خلاصولی. تر هغه چې دا پرېکړه وشي، هغه قرارداد چې وخت یا د بلاک شمېره لولي (د بېلګې په توګه د permit وروستۍ نېټه) ټریپ کوي.
غوښتنې. CALL، CALLCODE، DELEGATECALL او STATICCALL یو precompile اجرا کوي کله چې هدف له 1 تر 9 پته وي. هر بل هدف ټریپ کوي. پر CALL یا CALLCODE له صفر پرته ارزښت ټریپ کوي: د بیلانس ماډل نشته.
Precompiles. ټول نهه په سافټویر کې اجرا کېږي. ځینې یې نن د ثبوت لپاره ډېر ورو دي، ځکه چې یو ثبوت تر ټولو ډېر 2²⁰ قطارونه لري:
| precompile | ویکتور | سایکلونه | په 2²⁰ کې ځایېږي |
|---|---|---|---|
| 1 ecrecover | ValidKey | 14,510,525 | نه |
| 2 sha256 | ”abc” / 200 بایټه | 2,791 / 5,289 | هو |
| 3 ripemd160 | ”abc” | 12,195 | هو |
| 4 identity | 100 بایټه | 4,498 | هو |
| 5 modexp | nagydani-1-square / -1-pow0x10001 | 122,332 / 874,548 | هو |
| 5 modexp | eip_example1 (256-bit) | 11,170,118 | نه |
| 5 modexp | nagydani-5-pow0x10001 (1,024 بایټه) | 55,076,950 | نه |
| 6 bn256 add | chfast1 | 978,262 | هو، په سختۍ |
| 7 bn256 mul | chfast1 | 3,060,669 | نه |
| 8 bn256 pairing | 1 جوړه / 2 جوړې | 1,853,656,212 / 2,019,000,469 | نه |
| 9 blake2f | 12 دورې | 14,493 | هو، تر نږدې 1,800 دورو پورې |
د modexp بنسټ او ماډولس هر یو تر 1,024 بایټو پورې محدود دي.
منل شوي توپیرونه. حالت، اته کلمې او gas_used باید سمون ولري. درې توپیرونه منل شوي دي: د درېدو ډول کېدای شي توپیر ولري (ثابت ګاز د هر بلاک په سر کې اخیستل کېږي، نو OutOfGas او بل درېدل کېدای شي ځایونه بدل کړي؛ دواړه حالت 2 دي او ټول ګاز پکې مصرفېږي)؛ ژباړه CHAINID، ORIGIN او د precompile غوښتنې پلي کوي، چې مفسر یې ټریپ کوي؛ او د کوډ ساتونکی د خپلې سرچینې پرته بل کوډ ردوي.
شمېرې
د ERC-20 غوښتنې، د کوډ ساتونکي سره. سایکلونه له rand-guest run څخه؛ کچه په قوسونو کې.
| غوښتنه | مفسر (evm.bin) | لومړی پړاو | دویم پړاو (ډیفالټ) |
|---|---|---|---|
transfer(BOB, 250) | 121,638 (18) | 80,211 (18) | 66,235 (18) |
approve(BOB, 5) | 85,645 (18) | 56,261 (16) | 48,119 (16) |
transferFrom(ALICE, BOB, 100) | 161,434 (18) | 110,074 (18) | 88,824 (18) |
| پروګرام | کلمې | hc |
|---|---|---|
evm.bin، مفسر | 18,009 | 7e1aea2b…854c08 |
| ERC-20، لومړی پړاو | 15,804 | 9cdb79e7…2fd048c8 |
| ERC-20، دویم پړاو | 11,686 | a0feae92a7311c9562495717100eb7aea71270a38ed435d06dc31387e0ea8ff6 |
دویم پړاو درې غوښتنې د مفسر د سایکلونو په 54.5%، 56.2% او 55.0% کې اجرا کوي. لېږد په 18 کچه کې پاتې کېږي: د هغه 66,235 سایکلونه جمع 3,155 د ډایجسټ قطارونه 69,390 قطارونه کېږي، چې د 16 کچې له 65,535 څخه 3,855 ډېر دي.
د دویم پړاو د یوه لېږد نږدې 60% (نږدې 39,928 سایکلونه) هغه چوکاټ دی چې دواړه انځورونه یې شریکوي: د ننوت ډیکوډ کول، د ذخیرې د شاهدانو تایید، د ABI د keccak256 غوښتنې او د وتنې ډایجسټ. د ژباړې هېڅ کار له دې کچې ښکته نشي تللی.
ګام په ګام: یو ERC-20، له Solidity څخه تر سمون لرونکو وتنو پورې
هر کمانډ د circuits د یوې checkout له ریښې څخه په 7ef3220 کې اجرا کېږي، د یو Rust پروګرام ځای پر ځای کړئ له وسیلو او د یو RISC-V پروګرام ځای پر ځای کړئ له clang 23.1.1 سره. اوږده وتنه هلته لنډه شوې چې په … نښه شوې ده.
0. وسیلې جوړې کړئ
(cd evm2rv && cargo +1.98.1 build --release)
(cd rand-guest && cargo +1.98.1 build --release)
1. Solidity د اجرا وخت په bytecode کمپایل کړئ
قرارداد هماغه ثبت شوی guests-compiled/evm/contracts/ERC20.sol دی: یو بشپړ خپلواک ERC-20 د OpenZeppelin v4 د ذخیرې ترتیب سره، pragma solidity 0.8.37. دقیقاً solc 0.8.37 وکاروئ؛ بله نسخه په بل ډول اصلاح کوي او بل bytecode ورکوي.
| خپرونه | v0.8.37 له github.com/ethereum/solidity/releases څخه |
| د macOS فایل | solc-macos، sha256 a27396e7732aa52e80ff89ad7bd8a2e46fec2a6dcc4ef20cd16e5e0c502d6821 |
| د Linux فایل | solc-static-linux، له هماغې خپرونې څخه |
$ curl -sSL -o solc https://github.com/ethereum/solidity/releases/download/v0.8.37/solc-macos
$ shasum -a 256 solc
a27396e7732aa52e80ff89ad7bd8a2e46fec2a6dcc4ef20cd16e5e0c502d6821 solc
$ chmod +x solc && ./solc --version
solc, the solidity compiler commandline interface
Version: 0.8.37+commit.f401782d.Darwin.appleclang
$ (cd guests-compiled/evm && ../../solc --optimize --optimize-runs 200 --evm-version shanghai \
--bin-runtime contracts/ERC20.sol) | tee solc.out
======= contracts/ERC20.sol:ERC20 =======
Binary of the runtime part:
608060405234801561000f575f5ffd5b5060043610610060575f3560e01c8063095ea7b31461006457806318160ddd1461008c57806323b872dd1461…
$ tail -1 solc.out > evm2rv/target/mytoken.hex
وروستۍ کرښه د اجرا وخت bytecode دی، 1,296 بایټه. دا له ثبت شوي guests-compiled/evm/contracts/erc20.runtime.hex سره بایټ په بایټ یو شان دی؛ SOLC=$PWD/solc bash guests-compiled/evm/contracts/build.sh دا کتنه کوي او contracts: erc20.runtime.hex reproduces چاپوي.
بیرغونه مهم دي:
--bin-runtime: ځای پر ځای شوی کوډ، نه د جوړونې کوډ.--evm-version shanghai: د 0.8.37 ډیفالټ هدفMCOPYتولیدوي، چې ټریپ کوي.--optimize --optimize-runs 200: د ځای پر ځای شوي قرارداد پروفایل.
2. وژباړئ
$ evm2rv/target/release/evm2rv evm2rv/target/mytoken.hex --out evm2rv/target/mytoken --chain-id 12
1296 code bytes: 74 blocks, 798 opcodes, 51 jumpdests (stage 2)
CHAINID is the constant 12
no trapping opcodes present
wrote evm2rv/target/mytoken (crate mytoken): contract.c, Cargo.toml, Cargo.lock, build.rs, src/main.rs, shim.ld
--outباید د circuits د یوې checkout دننه وي. له هغه پرته،evm2rvیوازې کوډ تحلیلوي.- هر ټریپ کوونکی اوپکوډ به دلته د خبرتیا په توګه، د خپل pc سره، لیست شي.
- دا ناسته د
--chain-id 12سره ثبت شوې وه. دا ERC-20CHAINIDنه لري، نو--chain-idد هغهhcنه بدلوي. هغه قرارداد چېCHAINIDلولي، دا بیرغ ته اړتیا لري؛ هغه ځنځیر ته یې وټاکئ چې پر هغه به ځای پر ځای کېږي (--chain-id 19د ژوندي ځنځیر لپاره).
contract.c د کوډ ساتونکي په ډایجسټ پای ته رسېږي:
const uint32_t *evm_code_digest(void) {
static const uint32_t d[8] = {0xf679280fu, 0x86c10e83u, 0x7e8f1f39u, 0xa2377de3u, 0x8a2e282fu, 0xc54cad42u, 0xddfaf009u, 0x7d28a8afu};
return d;
}
3. انځور جوړ کړئ
ډیفالټ حد 4,096 کلمې دی، نو --max-words 65535 ورکړئ.
$ rand-guest/target/release/rand-guest build evm2rv/target/mytoken --max-words 65535
…
11686 words against a cap of 65535 (fits); 0 ecall(s) with a non-static a7
OK
wrote evm2rv/target/mytoken/image.bin and its .sha256 (11686 words, hc a0feae92a7311c9562495717100eb7aea71270a38ed435d06dc31387e0ea8ff6, program id f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d)
$ rand-guest/target/release/rand-guest info evm2rv/target/mytoken/image.bin
form: image container
text 11147 words at 0x10000; data 408 words (205 non-zero) at 0x1ae2c; prologue 539 words; program 11686 words from base_pc 0xf794
hc a0feae92a7311c9562495717100eb7aea71270a38ed435d06dc31387e0ea8ff6
program id f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d
11686 words against a cap of 4096: does not fit
دا هماغه خپور شوی د دویم پړاو hc دی. د crate نوم پر هغه اغېز نه کوي.
4. د ننوتو یو ویکتور جوړ کړئ او یو لېږد اجرا کړئ
د erc20_vector بېلګه د سمون ازموینې ویکتورونه د ننوتو د کلمو په توګه چاپوي: transfer (ALICE له خپلو 1,000 څخه BOB ته 250 لېږي)، approve (ALICE BOB ته اجازه ورکوي چې 5 مصرف کړي) او transferFrom (BOB د 300 د اجازې پر وړاندې د ALICE له 1,000 څخه 100 لېږدوي). د خپل قرارداد لپاره، په Rust کې په هماغه ډول یو EvmCall جوړ کړئ؛ بېلګه یې نمونه ده.
$ (cd evm2rv && cargo +1.98.1 run -q --release --example erc20_vector -- transfer > target/transfer.words)
921 input words
$ rand-guest/target/release/rand-guest run evm2rv/target/mytoken/image.bin --input $(cat evm2rv/target/transfer.words)
out[0] = 1
out[1] = 513227413
out[2] = 3087537901
out[3] = 995619457
out[4] = 4004100029
out[5] = 234390638
out[6] = 3262201797
out[7] = 3842361427
cycles 66235
tier 18
5. له مفسر سره یې پرتله کړئ
هماغه ننوت د مفسر پر مېلمه:
$ rand-guest/target/release/rand-guest run guests-compiled/bin/evm.bin --input $(cat evm2rv/target/transfer.words)
out[0] = 1
out[1] = 513227413
out[2] = 3087537901
out[3] = 995619457
out[4] = 4004100029
out[5] = 234390638
out[6] = 3262201797
out[7] = 3842361427
cycles 121638
tier 18
او مفسر په کوربه سیستم کې په اصلي ډول چلېږي، چې د ازموینو oracle دی:
$ (cd evm2rv && cargo +1.98.1 run -q --release --example erc20_vector -- transfer --expected)
out[0] = 1
out[1] = 513227413
…
out[7] = 3842361427
interpreter (native): status 1, Return, gas_used 29956
دا ارزونه د یوه امر په توګه:
$ diff <(rand-guest/target/release/rand-guest run evm2rv/target/mytoken/image.bin --input $(cat evm2rv/target/transfer.words) | grep '^out') \
<(rand-guest/target/release/rand-guest run guests-compiled/bin/evm.bin --input $(cat evm2rv/target/transfer.words) | grep '^out') \
&& echo "the eight words are identical"
the eight words are identical
څلورم او پنځم ګامونه له approve او transferFrom سره تکرار کړئ؛ دواړه ورته کلمې ورکوي. cd evm2rv && cargo +1.98.1 test --release دا او پنځه نور وکتورونه د دواړو پړاوونو لاندې چلوي، او gas_used هم ارزوي (70 ازموینې، او 2 له پامه غورځول شوي ثبوتونه).
| ژباړل شوی (دوهم پړاو) | مفسر (evm.bin) | |
|---|---|---|
| اته د وتو کلمې | ورته | ورته |
| سایکلونه، لېږد | 66,235 | 121,638 |
| پوړ | 18 | 18 |
| د پروګرام کلمې | 11,686 | 18,009 |
6. ځای پر ځای کول
rand program deploy evm2rv/target/mytoken/image.bin
والټ د پروګرام id، د کلمو شمېر او hc چاپوي، بیا مخکې له دې چې څه ثابت کړي، د چین حد ارزوي. انځور 11,686 کلمې دی، نو داسې چین ته اړتیا لري چې جېنیسس یې max_program_words لږ تر لږه 11,686 ته ټاکلی وي. چین 12 د 4,096 ډیفالټ کاراوه، نو هلته ځای پر ځای کول رد شول. چین 13، د v0.4 چین، max_program_words په 65,535 ټاکلی و، او له هغه وروسته هر چین دا ارزښت ساتي. چین 20، ژوندی چین (جېنیسس 6210cf071a390d7ac61d8cbea5dd9d139d1a493a862b54a45a498f36af2d5135)، د چین 13 د بلاک، د غوښتنې د پاکټ او د عامه ننوتو حدونه هم ساتي او د ثبوت حد نیمايي کوي تر 4 MiB (4,194,304 بایټه، له چین 17 راهیسې؛ چینونو 13 تر 16 پورې 8 MiB ټاکلي و). د کلمو حد نور یوازینی دروازه نه ده. د چین 20 جېنیسس hardening_v6 ټاکي، او د هغه لاندې د داسې پروګرام ځای پر ځای کول چې کلمې یې د پوړ-14 د غوښتنې په حد کې د یوې غوښتنې له ظرفیت څخه زیاتې وي، ناسم دی (ProgramUncallable): پرته له عامه ننوتو، تر ټولو ډېر 8,180 کلمې. دا انځور 11,686 کلمې دی، نو چین 20 یې ځای پر ځای کول ردوي، او غوښتنې به یې هم رد کړي: د ERC-20 هره غوښتنه په 16 یا 18 پوړ ثابتېږي، چې د پوړ-14 د غوښتنې له حد څخه پورته دي (اووم ګام). په چین 20 د بلاکونو راټولول بند دي (د هغه جېنیسس د aggregation برخه نه لري)؛ د هغه د بوټسټرپ نوډونه په د اعتباروونکي چلول کې لېست شوي دي. د ځای پر ځای کولو فیس 0.001 + 0.0001 × 11,686 = 1.1696 RAND دی، هغه فیس چې لاندې د چین 13 ځای پر ځای کولو ورکړی.
دا ځای پر ځای کول د 2026-09-19 په نېټه په چین 13 ترسره شول، کله چې چین 13 ژوندی چین و (د FRI تولیدي پروفایل، جېنیسس 8123ccac1883a45750e4df6964fb7cd3f0b321798cde4c0ef406a0293939ece3)، د جېنیسس له والټ shielded-1 څخه. له هغه وروسته هر چین (14 تر 19 پورې) د یوه نوي چین په توګه پرته د چین 13 له پروګرامونو جوړ شو، او انځور په هېڅ یوه کې بیا نه دی ځای پر ځای شوی، نو لاندې راکړه ورکړه او لوړوالی د چین 13 دي او نور په explorer کې نه موندل کېږي. د پروګرام id یوازې د base_pc او کلمو hash دی، نو ورته انځور په هر هغه چین کې چې ځای پر ځای کول ومني ورته id ترلاسه کوي. د والټ وتنه، چې د پرمختګ کرښې یې لنډې شوې دي (…):
$ rand program deploy <image.bin>
program id: f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d (11686 words, hc 92aefea0951c31a717574962aeb70e10a37012a7d035d48e8713c36df68feae0)
…
proved in 92.2s: tier 14, 1419655 bytes
submitted deploy c7a66dc4d9cdb7f9bfc4bde01f618c356e5abad7097e6bf7dc04e2e49c53acd0
…
| د پروګرام id | f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d |
| انځور | 11,686 کلمې؛ hc a0feae92… د rand-guest په لیکدود، 92aefea0… د والټ په لیکدود |
| د فیس بنډل (د چین 13 د 2-ننوتو-2-وتو بنډل) | پوړ 14، 1,419,655 بایټه، په 92.2 s کې ثابت شو |
| د ځای پر ځای کولو tx (چین 13) | c7a66dc4d9cdb7f9bfc4bde01f618c356e5abad7097e6bf7dc04e2e49c53acd0 |
| په لوړوالي کې ثبت شو (چین 13) | 381 |
له چین 14 راهیسې ورکوونکی بنډل هغه یو 4-ننوتو-4-وتو پټ-شتمنۍ بنډل دی چې هره راکړه ورکړه یې لېږدوي، او د راکړې ورکړې د تړنې په وړاندې ثابتېږي. دا لا هم پوړ 14 دی: د چین 14 او 15 په تولیدي پروفایل کې شاوخوا 100 s او شاوخوا 1.42 MB. له چین 17 راهیسې یو بنډل د پوړ-10 د اجازې ثبوت هم لېږدوي (وېشل شوې اجازه)، نو په چین 18 او 19 کې د یوې راکړې ورکړې د فیس بنډل شاوخوا 1.49 MB د بنډل ثبوت او شاوخوا 1.37 MB د اجازې ثبوت دی.
7. غوښتنه
د لېږد غوښتنه 921-کلمهییز وکتور د خصوصي ننوتو په توګه لېږدوي، په هر چین کې د ننوتو تر حد لاندې (په ډیفالټ ډول 4,295 کلمې، په چین 20 کې 16,071)، او هېڅ عامه کلمې نه لري. دا چین 20 ته نه شي سپارل کېدای: پروګرام هلته نه شي ځای پر ځای کېدای (شپږم ګام)، لېږد په 18 پوړ ثابتېږي، او له fullnode v0.5.6 (2026-09-25) راهیسې یو نوډ د پوړ 14 څخه پورته هر د غوښتنې ثبوت د CallTierTooHigh سره ردوي، مخکې له دې چې د تصدیق کیلي جوړه کړي. لاندې امر په محلي ډول ثبوت جوړوي او چین پایله ردوي؛ اندازهګیرنې د چین څخه بهر ثبوتونه دي. rand call هره کلمه د تکرار شوي --input په توګه اخلي:
rand call f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d \
$(for w in $(cat evm2rv/target/transfer.words); do printf -- '--input %s ' "$w"; done)
اوس اندازه شوی. د پوړ-18 یو ثبوت په 48 GB لپټاپ کې په 24.7 GB کې ودرول شو، خو په 128 GB ډراپلېټ (m-16vcpu-128gb) کې ژباړل شوې transfer غوښتنه ثابته شوه: د RSS لوړه کچه 85.0 GB، 3,230.5 s (53.8 min)، او 811,600-بایټه ثبوت. دا په ډراپلېټ کې په 101.4 s کې تصدیق شو او په 48 GB Apple-silicon لپټاپ کې په 50.2 s کې په 3.66 GB RSS (د ثبوت جوړونې حافظه). د لیجر د پوړونو د مساوي مهالوېش لاندې، چې د هغو چینونو قاعده ده چې د gas برخه نه لري (تر چین 17 پورې)، په 18 پوړ کې د غوښتنې فیس 0.0024 RAND و. چینونه 18 او 19 د دې پر ځای غوښتنه د هغې د اعلان شوي ګاز حد او بایټونو له مخې بیه کوي، د جېنیسس په بیو کې د هر ګاز لپاره 100 واحده او د هر KiB لپاره 800، او د پوړ 14 څخه پورته هېڅ غوښتنه نه مني.
په چین 13 کې غوښتنه، 2026-09-19
د approve(BOB, 5) غوښتنه (649 خصوصي کلمې، پوړ 16) د 2026-09-19 په نېټه په چین 13 ترسره شوه، کله چې هغه ژوندی چین و، د FRI تولیدي پروفایل، له ورته والټ څخه. په هېڅ وروستي چین کې، چې پروګرام پکې ځای پر ځای شوی نه دی، غوښتنه نه ده شوې، او چین 20 دا د پوړ-16 د غوښتنې ثبوت ردوي (CallTierTooHigh). د والټ وتنه، چې د پرمختګ کرښې یې لنډې شوې دي (…):
$ rand call f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d --input <w0> --input <w1> … # the 649 words of approve(BOB, 5)
…
proved in 388.7s: tier 16, 3412405 bytes, outputs [1, 942495465, 790002515, 1351749335, 1059083501, 2923046783, 2814575942, 696258848]
…
proved in 96.0s: tier 14, 1420423 bytes
submitted call 279e1f62abf3f177ca71b08c633e051c37bc4720118c79ddb00936f036c4bfa7
…
| د غوښتنې ثبوت | پوړ 16، 3,412,405 بایټه، په 388.7 s کې ثابت شو |
| د فیس بنډل (د چین 13 د 2-ننوتو-2-وتو بنډل) | پوړ 14، 1,420,423 بایټه، په 96.0 s کې ثابت شو |
| مهر شوی پاکټ | 2,700 بایټه |
| د غوښتنې tx (چین 13) | 279e1f62abf3f177ca71b08c633e051c37bc4720118c79ddb00936f036c4bfa7 |
| په لوړوالي کې لنګر شو / ثبت شو | لوړوالی 802 / لوړوالی 919 |
| فیس | 0.00357 RAND |
د رسید h_pub | null |
| د رسید وتنې | د ورته وکتور لپاره د مفسر له اتو کلمو سره برابر |
| د ساعت وخت، د RSS لوړه کچه | 622.8 s، 22.9 GB، په 48 GB M-series لپټاپ کې |
- تولیدي ثبوت 3,412,405 بایټه دی، چې د چین 12 د 2 MiB د ثبوت له حد څخه زیات دی. چین 12 دا غوښتنه نه شوه منلای؛ د چین 13 د 8 MiB حد ومنله. چینونو 14 تر 16 پورې ورته حد وساته، او چینونو 17 تر 20 پورې 4 MiB (4,194,304 بایټه) وټاکه، چې د دې اندازې ثبوت لا هم ترې لاندې ځای نیسي. له v0.5.6 راهیسې یو نوډ غوښتنه د هغې د پوړ له امله ردوي، مخکې له دې چې اندازې ته یې وګوري.
- فیس د چین 13 د مهالوېش د بایټ برخه لري: د 3.41 MB ثبوت د 2 MiB + 18,432-بایټه وړیا اجازې څخه پورته دی. له چین 18 راهیسې هره غوښتنه له لومړي بایټ څخه د هر KiB لپاره ورکړه کوي.
د رسید اته کلمې هماغه دي چې په څلورم ګام کې دي. چین د EVM حالت نه ساتي: غوښتونکی د مخکیني حالت ریښه او د ذخیرې شاهدان برابروي، او د وروستي حالت ریښه د EVM_OUT digest دننه ده.
محدودیتونه
- د بلاک شرایط نشته. د بلاک شرایطو نهه واړه اپکوډونه تر هغه ودرېږي چې د بلاک د تړلو ډیزاین موجود نه شي.
- د ارزښت لېږد نشته. هغه
CALLچې ارزښت یې له صفر پرته وي ودرېږي. له مخکې ترتیب شویو قراردادونو پرته نورو قراردادونو ته غوښتنې ودرېږي. - ecrecover، د bn256 ضرب، جوړه کول (pairing) او لوی modexp نن ورځ نشي ثابتېدای. هر یو یې د 2²⁰ کرښو د طبقې له حد څخه اوړي؛ دوی د همپروسسر جدولونو ته اړتیا لري.
- په chain کې د EVM حالت نشته. هره غوښتنه د یوې اجرا پر سر یو ثبوت دی؛ حالت غوښتونکی له ځان سره وړي.
- په chain 20 کې نه deploy منل کېږي او نه د ERC-20 کومه غوښتنه. د chain 20 د
hardening_v6له مخې هغه deploy چې له هغو کلمو ډېرې ولري چې د tier-14 یوه غوښتنه یې ساتلای شي ناسم دی (ProgramUncallable؛ تر ټولو ډېر 8,180 کلمې)، او انځور 11,686 کلمې دی. د fullnode v0.5.6 راهیسې د غوښتنې ثبوت باید په tier 14 یا تر هغې ټیټه طبقه کې وي (CallTierTooHigh)؛approveپه tier 16 کې ثابتېږي،transferاوtransferFromپه tier 18 کې. همدا معاینه هغه هش جدولونه هم محدودوي چې یوه غوښتنه یې اعلانولای شي: د Keccak 2¹² کرښې (128 پرمیوټېشنونه) او د SHA-256 2¹³ کرښې (128 فشارونه). غوښتنې لا هم له chain بهر ثابتېږي، لکه څنګه چې لاندې راغلي. - د ذخیرې شاخص 32 بټه ژور دی.
evm-coreد قرارداد د ذخیرې پاڼه دkeccak256(slot)د پورتنیو 32 بټونو له مخې ځای پر ځای کوي، نو د هغه سلاټ موندل چې له یوه ټاکل شوي سلاټ سره ټکر وکړي شاوخوا 2³² Keccak هشونه لګښت لري، او تر هغه چې هغه له صفر پرته ارزښت ولري، ټاکل شوی سلاټ کنګل پاتې کېږي (نه جعل کېږي او نه ارزښت ورکېږي). دا ستونزه اوس غیرفعاله ده:evm.bin18,009 کلمې دی، او د tier-14 په حد کې یوه غوښتنه تر ټولو ډېر 8,184 کلمې ساتلای شي، نو هېڅ EVM runtime په هېڅ chain کې د غوښتنې وړ نه دی. د fullnodedocs/confidential.mdدا مخکینی شرط د غوښتنې د حد تر څنګ ثبتوي (audit v6، ZKV-6؛ له 2026-09-30 راهیسې پهmainکې، د v0.6.7 tag وروسته): مخکې له دې چې یو chain د tier-14 د غوښتنې حد لرې کړي یا داسې EVM runtime ومني چې د غوښتنې لپاره کافي کوچنی وي، د ذخیرې شاخص باید ژور شي اوevm.binبیا pin شي. - ثابت شوی. د لومړي پړاو د لېږد ثبوت (tier 18) په یوه 48 GB لپټاپ کې له 1,016 s وروسته په 24.7 GB کې د SIGKILL له لارې ووژل شو، خو د دویم پړاو
transferغوښتنه په یوه 128 GB droplet (m-16vcpu-128gb) کې ثابته شوه: 85.0 GB د RSS لوړه کچه، 3,230.5 s (53.8 min)، یو 811,600 بایټه ثبوت، چې په 101.4 s (droplet) کې او په 50.2 s کې په 3.66 GB RSS سره (48 GB لپټاپ) تایید شو. د تفسیرونکيevm.binد لېږد ثبوت ورسره ډېر نږدې سمون درلود: 85.5 GB، 3,143.3 s (52.4 min)، یو 805,108 بایټه ثبوت — او دواړه ثبوتونه یو شان عامې وتونکې کلمې لري، چې په ریښتیني ثابتوونکي کې برابري تاییدوي.approve(tier 16، ژباړل شوی) ډېر ارزانه دی: 21.7 GB، 786.7 s (13.1 min)، یو 798,930 بایټه ثبوت. ژباړه یوازې هغه وخت د ثبوت لګښت کموي چې یوه غوښتنه کوچنۍ طبقې ته راښکته کړي. - chain بایټکوډ نه ثبتوي. هغه خپور کړئ ترڅو نور وکولای شي
hcبیا جوړ کړي.