Crypto-kontrakt verifikasiyası DeFi ekosistemində kimlik göstəricisi ilə bitki kodunu güvənilən logikaya çevirir. Bununla birlikte, proses sıklıqla yanlış anlaşılır və kompilatorun "Deterministic Black Box" (Deterministic Black Box) eşidicidir. Bu yazı verifikasiyayı "Mirror Mechanism" kimi görünür, orada yerel kompilasiya çevrilərinin dağıtma səbəblərini tam şəkildə replikasiya etməsi lazımdır. Biz CLI aletləri və "Standard JSON Input" - gizli verifikasiya hatalarına qarşı ən böyük silahı olan "Standard JSON Input" ilə sağlam, avtomatik iş prosesini qurmaq üçün manualdırıq. Son olaraq, agresiv gasIR optimizasiyaları ilə və verifikasiya kompleksliyi arasında kritik alış-açıqlıqı analiz edirik Introduction Crypto-kontrakt verifikasiyası yalnız Etherscan-da yeşil bir checkmark almaqla bağlı deyil; kodunuz üçün tamamilə kimlik göstəricidir. Bir dəfə dağıtıldıqdan sonra, bir sözleşme çürüblü bytecode qədər azaldılır, orijinalını məhv edər. Kaynağını göstərmək və güvənilməz bir ortamda mülkiyyət qurmaq üçün, verifikasiya zorunludur. Bu, DeFi ekosistemində açıqlıq, təhlükə və composability üçün əsas gerçəkdir. Bu olmadan, bir sözleşme hexadecimal bytecode-nin açıq-aşkar blobudur – istifadəçilər üçün oxunmaz və digər geliştiricilər tərəfindən istifadə edilə bilməz. Mirror mekanizması Verifikasiya hatalarını yeniləmək üçün, öncə "Verif" etdikdə real olaraq nə olacağını anlamalıyıq.Bu aldatıcı bir basitlikdir: blok araşdırıcısı (yani, Etherscan) tam kompilasiya ortamı yeniləmək lazımdır ki, sağlanan kaynak kodu zəncirdə yerləşdirilən tamamilə aynı bytecode istehsal edir. Bu proses “Mirror Mechanism” kimi işləyir.Verifikatör özündə özəl kodunuzu kompilasiya edir və bit-byte verilişini zəncirdəki verilərlə birləşdirir. Əgər bir bayt də fərqlənsə, verifikasiya başarısız olur.Bu bizi hər bir Solidity geliştiricinin əsas mücadelesinə gətirir. “Determinist”in siyahısı VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsil edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Çünki Solidity kompilator bir Deterministic Black Boxdır. Şəkil 2də göstərildiyi kimi, çıxartma bytecode yalnız kök kodu ilə müəyyən edilmir. Bu onlarca görünməyən dəyişənin ürəyidir: kompilator versiyaları, optimizasiya sürətləri, metadata hashləri və hətta spesifik EVM versiyası. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Bu yol göstəricisi sizi “həqiqətən” verifikasiya işlədiyini ümid edən bir geliştiriciden, siyahı kutunu kontrol edən bir mastermində çevirmək niyyətindədir.Biz standart CLI aksiyalarını, manual overrides-ləri və son olaraq, yenilikçi optimizasyonların bu pis prosesə nə qədər zərər verəcəyinə dair məlumatları təqdim edəcəyik. The CLI Approach – Precision & Automation Əvvəlki bölümdə, verifikasiya prosesini “Mirror Mechanism” (Şəkil 1) kimi görünürdük.Həqiqətən, yerel kompilasiyanın uzaq çevrimi ilə mükəmməl bir şekilde uyğundurmasını təmin etmək lazımdır.Web UI vasitəsilə bu işin manualdır. Bu, Command Line Interface (CLI) alətlərinin parlaq olduğu yerdir. (hardhat.config.ts və ya foundry.toml) hər iki yerləşdirmə və verifikasiya üçün tamamilə aynı konfigürasiya dosyasını istifadə edərək, CLI alətləri “Deterministic Black Box” (Şəkil 2)-i idarə edilə biləcək bir boruşuna endirir. Sürücülük Verifikasiyası Çoğunluğu üçün, hardhat-verify plugin ilk savab hattıdır.Bu bina artefaktlarının ekstraksiyasını avtomatiklaşdırır və Etherscan API ilə doğrudan əlaqələndirir. Onu aktiv etmək üçün, hardhat.config.ts'inizin etherscan konfigürasiyasını içərisində olduğundan emin olun.Bu, sıklıqla ilk zərbənin meydana gəldiyi yerdir: Network Mismatch. // hardhat.config.ts import "@nomicfoundation/hardhat-verify"; module.exports = { solidity: { version: "0.8.20", settings: { optimizer: { enabled: true, // Critical: Must match deployment! runs: 200, }, viaIR: true, // Often overlooked, causes huge bytecode diffs }, }, etherscan: { apiKey: { // Use different keys for different chains to avoid rate limits mainnet: "YOUR_ETHERSCAN_API_KEY", sepolia: "YOUR_ETHERSCAN_API_KEY", }, }, }; Komandası: Konfigürasiyadan sonra, verifikasiya komandası basitdir. Kontraktı yerləşdirmək üçün yerləşdirir və sonra orijinal kodu Etherscan-a göndərir. Mastermind Tip: Verifikasiya etmədən əvvəl hər zaman npx hardhat clean çalışdırın. Stale artefaktlar (bir əvvəlki kompiliyadan cahil bytecode, başqa ayarlar ilə) verifikasiya girişimlərinin sessiz öldürücüüdür. npx hardhat verify --network sepolia <DEPLOYED_CONTRACT_ADDRESS> <CONSTRUCTOR_ARGS> Konstruktör argumenti VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Əgər bir skripti istifadə etdiyseniz, “Single Source of Truth” (Şübhəsizlik Bir Kaynağı) qurmaq üçün ayrı bir arguments dosyası yaratmalısınız (yani arguments.ts). // arguments.ts module.exports = [ "0x123...TokenAddress", // _token "My DAO Name", // _name 1000000n // _initialSupply (Use BigInt for uint256) ]; Niyə bu önemlidir: Bir yayılan hatalardan biri “1000000” (şərq) və ya “10000000n” (BigInt) yerine “100000000” (sayı) keçməkdir.CLI alətləri bunları ABI Hex-ə ayrı-ayrı şəkildə kodlayır. Verifikasiya VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayıb. forge verify-contract \ --chain-id 11155111 \ --num-of-optimizations 200 \ --watch \ <CONTRACT_ADDRESS> \ src/MyContract.sol:MyContract \ <ETHERSCAN_API_KEY> VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Belə ki, bir neçə ildir ki, bu problemlər həll olunmayıb, bir neçə ildir ki, bu problemlər həll olunacaq. Sizin sözünüz 50-dən çox fail itirir və Etherscan'ın API-si böyük JSON payload-i işləyir. Biblioqrafiyanın bağlanması: Sözleşməniz henüz verifikasiya edilmədiyi digər biblioqrafiyalara dayanır. Bu "Code Red" senaryolarında, CLI limitini çatır. Biz automatik skripti tərk etməliyik və orijinal kodun özündə manual olaraq işləməliyik. Bu bizi ultimatum verifikasiya teknikasına gətirir: Standard JSON giriş. Standard JSON Input “Hardhat-verify” “AggregateError” və ya “Times Out” (AggregateError” və ya “Times Out”) “Hardhat-verify” “Hardhat-verify” “AggregateError” və ya “Times Out” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” “AggregateError” və “Aggregate Flattening projektin strukturunu məhv edir, importları kəsir və sıklıkla lisenziyalı identifikatörləri qarışdırır, daha çox verifikasiya hatalarına səbəb olur. Standard JSON Input (Standard JSON Input) – Standard JSON Input (Standard JSON Input) standartıdır. "Solidity Compiler" (solc) bir maşın kimi düşünün. VS Code setupiniz, node_modules folderiniz və ya remappings-ləriniz heç bir şey deyil. Standart JSON, verifikasiyanın lingua franca dildir. “Solidity” sözləri Əsas səhiyyə: Optimizer Runs, EVM version, viaIR, remappings Sürücülər: Kullanılan hər bir dosyanın (OpenZeppelin bağımlılıkları da dahil) bir sözlük, onların içərisində şirələr kimi yerləşdirilmişdir. Standard JSON-i istifadə etdiyiniz zaman kompilatorun ehtiyacı olan tam raw data payload-i Etherscan-a göndərirsiniz. “Hardhat”dan “Golden Ticket” çəkmək Bu JSON-i manuel olaraq yazmanıza ehtiyac yoxdur.Hardhat kompilasiya etdiyiniz hər dəfə onu yaratır, lakin bunu artefakt folderında gizləyir. Əgər CLI-nin verifikasiyası başarısız olursa, bu "Break Glass in Emergency" prosedürünü izləyin: Xatırladaq ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir neçə ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir ki, bir ildir. Mastermind Tip: Bu verify.json "Şübhə Kaynağı"dır. Kontraktlarınızın həqiqi texti və bunları kompilasiya etmək üçün istifadə edilən tam ayarları içerməlidir. Əgər bina məlumatını tapa bilmirsən və ya standart olmayan bir ortamda işləyirsənsə, panik etməyə ehtiyac yoxdur. Bu metod sizə Etherscan-a göndərilən şeylərin tam kontrolünü verir, bu da import və remappingləri açıq-aşkar işləməyə imkan verir. // scripts/generate-verify-json.ts import * as fs from 'fs'; import * as path from 'path'; // 1. Define the Standard JSON Interface for type safety interface StandardJsonInput { language: string; sources: { [key: string]: { content: string } }; settings: { optimizer: { enabled: boolean; runs: number; }; evmVersion: string; viaIR?: boolean; // Optional but crucial if used outputSelection: { [file: string]: { [contract: string]: string[]; }; }; }; } // 2. Define your strict configuration const config: StandardJsonInput = { language: "Solidity", sources: {}, settings: { optimizer: { enabled: true, runs: 200, }, evmVersion: "paris", // ⚠️ Critical: Must match deployment! viaIR: true, // Don't forget this if you used it! outputSelection: { "*": { "*": ["abi", "evm.bytecode", "evm.deployedBytecode", "metadata"], }, }, }, }; // 3. Load your contract and its dependencies manually // Note: You must map the import path (key) to the file content (value) exactly. const files: string[] = [ "contracts/MyToken.sol", "node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol", "node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol", // ... list all dependencies here ]; files.forEach((filePath) => { // Logic to clean up import paths (e.g., removing 'node_modules/') // Etherscan expects the key to match the 'import' statement in Solidity const importPath = filePath.includes("node_modules/") ? filePath.replace("node_modules/", "") : filePath; if (fs.existsSync(filePath)) { config.sources[importPath] = { content: fs.readFileSync(filePath, "utf8"), }; } else { console.error(`❌ File not found: ${filePath}`); process.exit(1); } }); // 4. Write the Golden Ticket const outputPath = path.resolve(__dirname, "../verify.json"); fs.writeFileSync(outputPath, JSON.stringify(config, null, 2)); console.log(`✅ Standard JSON generated at: ${outputPath}`); Niyə hər zaman işləyir Standard JSON-i istifadə etmək düzəltməkdən üstündür, çünki meta-data hashini qoruyur. Bir fail düzəltdikdə, texniki olaraq orijinal kodu dəyişdirirsiniz (importajları kaldırmaq, satırları düzəltmək). Bu, vaxt-adağda bitkodunun metadatasını dəyişə bilər, bu da parmak izi düzəltməsinə səbəb olur.Standard JSON multi-fil strukturunu tam olaraq kompilatorun dağıtılması sırasında gördükləri kimi saxlayır. Standard JSON verifikasiyası başarısız olursa, problem 100% səlahiyyətinizdədir (Şəkil 2), source kodunuzda deyil. The viaIR Trade-off Əvvəlcə, biz odada elefant ilə qarşılaşmalıyıq: viaIR. modern Solidity inkişafında (özellikle v0.8.20+), viaIR imkanlandırma minimum gaz xərcləri əldə etmək üçün standartlaşmışdır, lakin verifikasiya kompleksliyi üçün yüksək qiymətlə gəlir. Pipelin dəyişməsi Bəs niyə “True/Fake” bayrağı bu cür kaos yaratır? Əsas səhifə » Əsas səhifə » Əsas səhifə » Əsas səhifə IR Pipeline: İlk olaraq Solidity-i Yul (İntermediate Representation) ilə çevirir.Optimizer sonra bu Yul kodu – inlining funksiyaları və stack operasiyalarını reorganize etmədən əvvəl – agresiv olaraq yenidən yazır. 2013-cü ildə aparılmış arxeoloji tədqiqat işləri burada 120 kv.metrlik ərazidə yaşayış yerinin qalığının olduğunu söyləməyə əsas verir (1). Verifikasiya vs. Verifikasiya VIAIR-in aktivləşdirilməsinə dair qərar Ethereum istehsalının qiymət strukturunda fundamentaldır.Bu, sadəcə bir kompilator bayrağı deyil; bu, işləmək effektivliyi və kompilasiya stabilliyi arasında bir kompromisdir. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. Yul-da bütün sözleşmeyi bütünlüklü matematiksel objekt kimi işləməkdə IR pipeline bunu düzəldir.Onunla agresiv olaraq inline funksiyaları, memory slotlarını rearrangə edə bilər və bütün kod bazasında redundant yığma işlərini ortadan qaldırır.Bu, son istifadəçi üçün çox ucuz transaksiyalara səbəb olur. Bununla yanaşı, bu optimizasiyalar geliştiricilər üçün böyük bir qiymətlə gəlir. Kaynak kodu və maşın kodu arasındakı "distansiya" dramatik şəkildə genişlənir. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. "Butterfly Effect": IR pipe line-də, küresel konfigürasiyada kiçik bir dəyişiklik (yani, 200-dən 201-ə dəyişmək) bütün Yul optimizasiya ağacına yayılır. Bu səbəblə, viaIR-in imkanlandırılması yük transferi deməkdir.Mastermind-in mühitçisi olaraq, bu kompromisu qəbul edirsiniz, lakin verifikasiya prosesinə gətirdiyi pisliyini xatırlamalısınız. Conclusion DeFi'nin Qaranlıq Ormunda, kod yasaqdır, lakin doğrulanmış kod identitetidir. Biz verifikasiya prosesini bir siqaret düyməsi olaraq deyil, bir "Mirror Mechanism" (Şəkil 1) kimi görməyə başladıq. Biz "Deterministic Black Box" (Şəkil 2) dizayn etdik və Optimization Paradox ilə qarşılaşdıq. viaIR və agresiv optimizer sürətləri ilə maksimum gaz verimliliyi aradan qaldırdığımız zaman, kaynak kodu və bytecode arasındakı boşluğu genişləyirik. Biz istifadəçilərimiz üçün daha ucuz, daha yaxşı bir deneyim vermək üçün daha yüksək verifikasiya kompleksliyinin yükünü qəbul edirik. Web UI-lər rahat olsa da, onlara təvəkkül etmək insan hatasına səbəb olur.Profesional bir kripto-kontrakt mühitçisi olaraq, doğrulama stratejiniz üç pilləyə dayanmalıdır: İlk olaraq, hər zaman CLI aletləri (hardhat-verify və ya forge verify) ilə başlayın, bu da dağıtma və verifikasiya konfigürasiyalarınız arasındakı konsistensiyanın davam etdirilməsinə səbəb olur. VVD - Hollandiyada futbolçu bu adla tanımır, orada VVD daha çox mərkəz-sağı təmsilən edən siyasi partiyanın adının qısaltması kimi bilinir - artıq sorğu-suala ehtiyacı olmayan ulduzdu. "Standard JSON" Fallback: avtomatik pluginlar bir duvarı (timeouts və ya AggregateError) vurduqda, sözleşmələrinizi düzəltməyin. Verifikasiya 5 dəqiqə sonra işləmək üçün bir sonradan düşünülməyən şey deyil.Bu, blockchaində çalışır kodun tam olaraq yazdığınız kod olduğunu kanıtlayaraq, keyfiyyət inqilabının son möhürüdür.