evm2rv EVM رن ٹائم بائٹ کوڈ لیتا ہے، یعنی solc --bin-runtime کا آؤٹ پٹ، اور اسے Rand پروگرام میں تبدیل کرتا ہے۔ یہ C لکھتا ہے، اور rand-guest build اس C کو RV32IM امیج میں کمپائل کرتا ہے۔ یہ امیج وہی ان پٹ ویکٹر لیتا ہے جو Rand کا EVM انٹرپریٹر گیسٹ، evm.bin، لیتا ہے، اور وہی آٹھ آؤٹ پٹ الفاظ شائع کرتا ہے۔ یہ کنٹریکٹ کو ایک ایک اوپ کوڈ کی تفسیر کے بجائے براہِ راست چلاتا ہے۔ یہ صفحہ ایک ERC-20 پر پورا راستہ دکھاتا ہے۔
یہ کیا ہے
| ان پٹ | EVM رن ٹائم بائٹ کوڈ، ہیکس متن (.hex) یا خام بائٹس کی صورت میں |
| آؤٹ پٹ | ایک C شِم کریٹ؛ rand-guest build اسے امیج کنٹینر بناتا ہے |
| یہ کہاں چلتا ہے | آف چین، ڈویلپر کی مشین پر؛ چین صرف امیج دیکھتی ہے |
| اسے کس سے مطابقت رکھنی ہے | evm.bin کا اسٹیٹس، آٹھ آؤٹ پٹ الفاظ اور gas_used |
| ریپوزٹری | circuits ریپوزٹری میں evm2rv/ |
| مقررہ ٹول چین | Rust 1.98.1، clang 23.1.1، cc کریٹ 1.4.6 |
مترجم رن ٹائم کوڈ لیتا ہے، تخلیقی کوڈ نہیں۔ ایک ثبوت ڈیپلائے شدہ کنٹریکٹ کی ایک کال کا احاطہ کرتا ہے، اس لیے کنسٹرکٹر کبھی نہیں چلتا۔ کنسٹرکٹر جو اسٹیٹ لکھتا، وہ اس کے بجائے اسٹوریج گواہوں کی صورت میں پیشگی اسٹیٹ کا حصہ ہوتی ہے۔
ترجمے کے دو مراحل ہیں۔ دونوں ایک جیسے نتائج اور گیس دیتے ہیں؛ ہر ایک اپنا الگ پروگرام ہے جس کا اپنا hc ہے۔
| مرحلہ | فلیگ | یہ کیا کرتا ہے |
|---|---|---|
| اول | --stage 1 | ہر اوپ کوڈ میموری اسٹیک پر |
| دوم | --stage 2، طے شدہ | ہر بلاک کے اسٹیک الفاظ C کے مقامی متغیرات میں، مستقل اقدار ترجمے کے وقت سمیٹ دی جاتی ہیں |
ان پٹ ویکٹر وہی ہے جو انٹرپریٹر کا ہے: کوڈ، کال ڈیٹا، کالر اور ماحول کے دیگر الفاظ، گیس کی حد، پیشگی اسٹیٹ روٹ، اور کال جس سلاٹ کو چھوتی ہے اس کے لیے ایک اسٹوریج گواہ۔ آؤٹ پٹس out[0] ہیں، یعنی اسٹیٹس (1 کامیابی، 0 ریورٹ، 2 غیر معمولی توقف)، اور out[1..8]، یعنی کوڈ ہیش، دونوں اسٹیٹ روٹس، واپسی ڈیٹا اور لاگز پر EVM_OUT ڈائجسٹ۔
اعتماد کا ماڈل
تصدیق کنندہ ترجمہ شدہ کنٹریکٹ کو دو مراحل میں جانچتا ہے۔
hc == translate(bytecode)۔ شائع شدہ بائٹ کوڈ پر اسی--stageاور--chain-idکے ساتھevm2rvدوبارہ چلائیں، مقررہ ٹول چین سے دوبارہ بلڈ کریں، اورhcکا موازنہ کریں۔ تیار کردہ کریٹccکو بالکل مقرر رکھتا ہے اور اپنیCargo.lockساتھ رکھتا ہے۔- کوڈ گارڈ
hcکو بائٹ کوڈ سے باندھتا ہے۔ ترجمہ شدہ منطق امیج میں کمپائل ہوتی ہے، لیکنCODECOPYاورCODESIZEان پٹ ویکٹر میں موجود کوڈ پڑھتے ہیں۔ جانچ کے بغیر ایک ہیhcایسے کوڈ بائٹس کے ساتھ چل سکتا ہے جو کالر نے چنے ہوں۔ اس لیےcontract.cماخذ بائٹ کوڈ (اس کی لمبائی اور بائٹس) کا Poseidon2 ڈائجسٹ ساتھ رکھتا ہے، اور شِم کوئی بھی ترجمہ شدہ کوڈ چلنے سے پہلے ان پٹ ویکٹر کے کوڈ کو اسی طرح ہیش کرتا ہے۔ کوئی اور کوڈ مسترد ہو جاتا ہے: اسٹیٹس 2،gas_used0، توقفOutOfBounds۔
EVM_OUT ڈائجسٹ کوڈ کے keccak256 کو بھی باندھتا ہے، جیسا کہ انٹرپریٹر کا ڈائجسٹ کرتا ہے۔ چین ماخذ بائٹ کوڈ یا اس کا ہیش درج نہیں کرتی۔ دوسروں کو hc جانچنے کا موقع دینے کے لیے بائٹ کوڈ شائع کریں، یا 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 اس وقت پری کمپائل چلاتے ہیں جب ہدف ایڈریس 1 سے 9 ہو۔ کوئی بھی دوسرا ہدف ٹریپ ہوتا ہے۔ CALL یا CALLCODE پر غیر صفر قدر ٹریپ ہوتی ہے: کوئی بیلنس ماڈل موجود نہیں۔
پری کمپائلز۔ نوں سافٹ ویئر میں چلتے ہیں۔ کچھ آج ثابت کرنے کے لیے بہت سست ہیں، کیونکہ ایک ثبوت میں زیادہ سے زیادہ 2²⁰ قطاریں ہوتی ہیں:
| پری کمپائل | ویکٹر | سائیکل | 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-بٹ) | 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 اور پری کمپائل کالز نافذ کرتا ہے، جو انٹرپریٹر میں ٹریپ ہوتے ہیں؛ اور کوڈ گارڈ اپنے ماخذ کے علاوہ ہر کوڈ مسترد کرتا ہے۔
اعداد و شمار
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 سے مطابق آؤٹ پٹس تک
ہر کمانڈ 7ef3220 پر circuits چیک آؤٹ کی روٹ سے چلتی ہے، 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 کو رن ٹائم بائٹ کوڈ میں کمپائل کریں
کنٹریکٹ کمٹ شدہ guests-compiled/evm/contracts/ERC20.sol ہے: ایک خود کفیل ERC-20 جس میں OpenZeppelin v4 کی اسٹوریج ترتیب ہے، pragma solidity 0.8.37۔ بالکل solc 0.8.37 استعمال کریں؛ کوئی دوسرا ورژن مختلف طریقے سے آپٹمائز کرتا ہے اور مختلف بائٹ کوڈ دیتا ہے۔
| ریلیز | github.com/ethereum/solidity/releases سے v0.8.37 |
| 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
آخری سطر رن ٹائم بائٹ کوڈ ہے، 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 چیک آؤٹ کے اندر ہونا لازمی ہے۔ اس کے بغیرevm2rvصرف کوڈ کا تجزیہ کرتا ہے۔- کوئی بھی ٹریپ ہونے والا اوپ کوڈ یہاں انتباہ کے طور پر، اپنے pc کے ساتھ، درج ہوتا۔
- یہ سیشن
--chain-id 12کے ساتھ ریکارڈ کیا گیا تھا۔ اس ERC-20 میںCHAINIDنہیں ہے، اس لیے--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 ہے۔ کریٹ کا نام اس پر اثر انداز نہیں ہوتا۔
4. ان پٹ ویکٹر بنائیں اور ٹرانسفر چلائیں
erc20_vector مثال مطابقتی ٹیسٹ کے ویکٹرز کو ان پٹ الفاظ کی صورت میں پرنٹ کرتی ہے: transfer (ALICE اپنے 1,000 میں سے 250 BOB کو بھیجتی ہے)، 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
اور میزبان پر مقامی طور پر چلنے والا انٹرپریٹر، جو ٹیسٹوں کا حوالہ جاتی معیار ہے:
$ (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
مراحل 4 اور 5 کو 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
والٹ پروگرام آئی ڈی، الفاظ کی تعداد اور 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 مقرر کرتا ہے، اور اس کے تحت ایسی تعیناتی غیر معتبر ہے (ProgramUncallable) جس میں پروگرام کے الفاظ اس تعداد سے زیادہ ہوں جو درجہ 14 کی کال حد پر ایک کال میں سما سکتی ہے: عوامی ان پٹ کے بغیر زیادہ سے زیادہ 8,180 الفاظ۔ یہ امیج 11,686 الفاظ کی ہے، اس لیے چین 20 اس کی تعیناتی مسترد کرتی ہے، اور وہ کالیں بھی مسترد کر دیتی: ہر ERC-20 کال کا ثبوت درجہ 16 یا 18 پر تیار ہوتا ہے، جو درجہ 14 کی کال حد سے اوپر ہے (مرحلہ 7)۔ چین 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 کی ہیں اور اب ایکسپلورر پر دستیاب نہیں ہوتیں۔ پروگرام آئی ڈی صرف base_pc اور الفاظ کا ہیش ہے، اس لیے وہی امیج ہر اس چین پر وہی آئی ڈی پاتی ہے جو تعیناتی قبول کرے۔ والٹ کا آؤٹ پٹ، پیش رفت کی سطریں حذف کر کے (…):
$ rand program deploy <image.bin>
program id: f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d (11686 words, hc 92aefea0951c31a717574962aeb70e10a37012a7d035d48e8713c36df68feae0)
…
proved in 92.2s: tier 14, 1419655 bytes
submitted deploy c7a66dc4d9cdb7f9bfc4bde01f618c356e5abad7097e6bf7dc04e2e49c53acd0
…
| پروگرام آئی ڈی | f074c4eb834cf01886a8241b6a2e0caf6e1cee5327fee6cb1a1a37436607280d |
| امیج | 11,686 الفاظ؛ rand-guest کی املا میں hc a0feae92…، والٹ کی املا میں 92aefea0… |
| فیس بنڈل (چین 13 کا 2-ان-2-آؤٹ بنڈل) | درجہ 14، 1,419,655 بائٹس، 92.2 s میں ثبوت تیار ہوا |
| تعیناتی ٹرانزیکشن (چین 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 پر جمع نہیں کرایا جا سکتا: پروگرام وہاں تعینات نہیں ہو سکتا (مرحلہ 6)، منتقلی کا ثبوت درجہ 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 کال کا ثبوت تیار ہو گیا: 85.0 GB زیادہ سے زیادہ RSS، 3,230.5 s (53.8 min)، اور 811,600 بائٹس کا ثبوت۔ اس کی تصدیق ڈراپلیٹ پر 101.4 s میں اور 48 GB کے Apple-silicon لیپ ٹاپ پر 3.66 GB RSS کے ساتھ 50.2 s میں ہوئی (ثبوت سازی کی میموری)۔ لیجر کے یکساں درجہ جاتی شیڈول کے تحت، جو 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 بائٹس |
| کال ٹرانزیکشن (چین 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 سے ہر کال بائٹ 0 سے فی KiB ادائیگی کرتی ہے۔
رسید کے آٹھ الفاظ وہی ہیں جو مرحلہ 4 میں ہیں۔ چین کوئی EVM حالت محفوظ نہیں رکھتی: کال کرنے والا ابتدائی حالت کی جڑ اور اسٹوریج کی گواہیاں فراہم کرتا ہے، اور بعد از حالت کی جڑ EVM_OUT ڈائجسٹ کے اندر ہوتی ہے۔
حدود
- بلاک سیاق و سباق دستیاب نہیں۔ بلاک سیاق و سباق کے نو آپ کوڈز اس وقت تک ٹریپ ہوتے رہیں گے جب تک بلاک سے منسلک کرنے کا کوئی ڈیزائن موجود نہ ہو۔
- قدر کی منتقلی نہیں۔ غیر صفر قدر والا
CALLٹریپ ہو جاتا ہے۔ پری کمپائلز کے علاوہ دیگر کنٹریکٹس کو کی گئی کالز ٹریپ ہو جاتی ہیں۔ - ecrecover، bn256 mul، پیئرنگ اور بڑا modexp آج ثابت نہیں کیے جا سکتے۔ ان میں سے ہر ایک 2²⁰ قطاروں کی ٹیئر حد سے تجاوز کرتا ہے؛ انہیں کو پروسیسر جدولوں کی ضرورت ہے۔
- چین پر EVM اسٹیٹ نہیں۔ ایک کال ایک رن پر ایک ثبوت ہے؛ اسٹیٹ کال کرنے والا اپنے ساتھ رکھتا ہے۔
- چین 20 پر نہ ڈیپلائے قابلِ قبول ہے اور نہ کوئی ERC-20 کال۔ چین 20 کے
hardening_v6کے تحت ایسا ڈیپلائے غیر معتبر ہے جس کے ورڈز اس تعداد سے زیادہ ہوں جو ٹیئر 14 کی کال سما سکتی ہے (ProgramUncallable؛ زیادہ سے زیادہ 8,180 ورڈز)، جبکہ امیج 11,686 ورڈز کی ہے۔ fullnode v0.5.6 سے کال ثبوت کا ٹیئر 14 یا اس سے کم ہونا لازم ہے (CallTierTooHigh)؛approveٹیئر 16 پر ثابت ہوتا ہے،transferاورtransferFromٹیئر 18 پر۔ یہی جانچ ان ہیش جدولوں کی حد بھی مقرر کرتی ہے جن کا اعلان کوئی کال کر سکتی ہے: 2¹² Keccak قطاریں (128 پرمیوٹیشنز) اور 2¹³ SHA-256 قطاریں (128 کمپریشنز)۔ کالز اب بھی آف چین ثابت ہوتی ہیں، جیسا کہ ذیل میں درج ہے۔ - اسٹوریج انڈیکس 32 بٹ گہرا ہے۔
evm-coreکنٹریکٹ اسٹوریج کی لیف کوkeccak256(slot)کے بالائی 32 بٹس کے مطابق رکھتا ہے، اس لیے کسی منتخب سلاٹ سے ٹکرانے والا سلاٹ تلاش کرنے پر تقریباً 2³² Keccak ہیشز صرف ہوتے ہیں، اور جب تک اس میں غیر صفر قدر موجود رہے، منتخب سلاٹ منجمد رہتا ہے (نہ جعل سازی ممکن ہے اور نہ قدر ضائع ہوتی ہے)۔ یہ خطرہ فی الحال غیر فعال ہے:evm.bin18,009 ورڈز کی ہے، اور ٹیئر 14 کی حد پر ایک کال زیادہ سے زیادہ 8,184 ورڈز سما سکتی ہے، اس لیے کسی بھی چین پر کوئی EVM رن ٹائم قابلِ کال نہیں۔ fullnode کیdocs/confidential.mdکال کی حد کے ساتھ یہ پیشگی شرط درج کرتی ہے (آڈٹ v6، ZKV-6؛ 2026-09-30 سےmainپر، v0.6.7 ٹیگ کے بعد): کوئی چین ٹیئر 14 کی کال حد اٹھائے یا اتنا چھوٹا EVM رن ٹائم قبول کرے کہ اسے کال کیا جا سکے، اس سے پہلے اسٹوریج انڈیکس کو گہرا کرنا اورevm.binکو دوبارہ پن کرنا لازم ہے۔ - ثابت شدہ۔ مرحلۂ اول کا ٹرانسفر ثبوت (ٹیئر 18) 48 GB والے لیپ ٹاپ پر 1,016 s کے بعد 24.7 GB پر SIGKILL ہو گیا، لیکن مرحلۂ دوم کی
transferکال 128 GB والے ڈراپلیٹ (m-16vcpu-128gb) پر ثابت ہو گئی: 85.0 GB زیادہ سے زیادہ RSS، 3,230.5 s (53.8 min)، 811,600 بائٹ کا ثبوت، جس کی تصدیق 101.4 s میں (ڈراپلیٹ) اور 3.66 GB RSS پر 50.2 s میں (48 GB لیپ ٹاپ) ہوئی۔ انٹرپریٹر کاevm.binٹرانسفر ثبوت اس کے بہت قریب رہا: 85.5 GB، 3,143.3 s (52.4 min)، 805,108 بائٹ کا ثبوت — اور دونوں ثبوتوں کے عوامی آؤٹ پٹ ورڈز یکساں ہیں، جو حقیقی ثبوت ساز پر مساوات کی تصدیق کرتا ہے۔approve(ٹیئر 16، ترجمہ شدہ) کہیں سستا ہے: 21.7 GB، 786.7 s (13.1 min)، 798,930 بائٹ کا ثبوت۔ ترجمہ ثبوت سازی کی لاگت صرف اسی وقت کم کرتا ہے جب وہ کسی کال کو چھوٹے ٹیئر میں لے آئے۔ - چین بائٹ کوڈ ریکارڈ نہیں کرتی۔ اسے شائع کریں تاکہ دوسرے
hcدوبارہ بنا سکیں۔