[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-2-model-memory-stack-storage-calldata":3},{"article":4,"author":54},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":34,"related_articles":35},"d2000000-0000-0000-0000-000000000102","a0000000-0000-0000-0000-000000000022","Deep EVM #2: Model Memory — Stack, Memory, Storage, dan Calldata","deep-evm-2-model-memory-stack-storage-calldata","Empat lokasi data EVM dijelaskan secara mendalam: stack untuk komputasi, memory untuk data sementara, storage untuk state persisten, dan calldata untuk input transaksi.","## Empat Lokasi Data di EVM\n\nEVM memiliki empat lokasi data yang berbeda, masing-masing dengan karakteristik biaya dan persistensi yang unik. Memilih lokasi yang tepat adalah faktor terbesar yang menentukan biaya gas kontrak Anda.\n\n### 1. Stack\nStack adalah area kerja utama EVM. Menampung hingga 1024 elemen, masing-masing 32 byte. Biaya akses: 3 gas per operasi (PUSH, POP, DUP, SWAP). Stack bersifat sementara — hilang setelah eksekusi selesai.\n\nStack adalah satu-satunya tempat di mana operasi aritmatika dan logika dapat dilakukan. Anda tidak bisa menambahkan dua angka yang ada di memory — Anda harus memuatnya ke stack terlebih dahulu.\n\n### 2. Memory\nMemory adalah array byte yang dapat diperluas secara linear. Dimulai kosong dan tumbuh sesuai kebutuhan. Biaya tumbuh secara kuadratik — ini penting.\n\n```\n\u002F\u002F Biaya memory:\n\u002F\u002F Biaya = 3 * ukuran_word + ukuran_word^2 \u002F 512\n\u002F\u002F Di mana ukuran_word = ceil(ukuran_byte \u002F 32)\n```\n\nMemory bersifat sementara — hanya ada selama panggilan saat ini. Sub-panggilan mendapatkan memory baru yang kosong. Ini berarti Anda tidak bisa meneruskan data besar ke sub-panggilan melalui memory — Anda harus menggunakan calldata.\n\nOperasi memory utama:\n- **MSTORE(offset, value)** — Simpan word 32-byte di offset. Biaya: 3 gas + biaya ekspansi.\n- **MLOAD(offset)** — Muat word 32-byte dari offset. Biaya: 3 gas + biaya ekspansi.\n- **MSTORE8(offset, value)** — Simpan 1 byte di offset. Biaya: 3 gas + biaya ekspansi.\n- **MCOPY(dst, src, size)** — Salin byte dalam memory (EIP-5656, Cancun). Biaya: 3 gas + 3 per word + biaya ekspansi.\n\n### 3. Storage\nStorage adalah database key-value persisten kontrak. Setiap kontrak memiliki 2^256 slot, masing-masing 32 byte. Storage bertahan di antara transaksi — ini adalah state kontrak Anda.\n\n```solidity\n\u002F\u002F Setiap variabel state Solidity menempati slot storage:\nuint256 public value;     \u002F\u002F slot 0\nuint256 public count;     \u002F\u002F slot 1\nmapping(address => uint) public balances;  \u002F\u002F slot 2 (dasar)\n```\n\nBiaya storage sangat tinggi karena setiap node di jaringan harus menyimpan data ini selamanya:\n- **SLOAD** (cold): 2100 gas\n- **SLOAD** (warm): 100 gas\n- **SSTORE** (cold, 0 ke nonzero): 22100 gas\n- **SSTORE** (warm, nonzero ke nonzero): 2900 gas\n\n### 4. Calldata\nCalldata adalah data input read-only yang dikirim bersama transaksi atau panggilan. Tidak bisa dimodifikasi selama eksekusi.\n\n```\n\u002F\u002F Biaya calldata per transaksi:\n\u002F\u002F 16 gas per byte non-zero\n\u002F\u002F  4 gas per byte zero\n```\n\nCalldata murah untuk dibaca (CALLDATALOAD = 3 gas) dan ukurannya diketahui sebelumnya (CALLDATASIZE). Ini adalah cara paling efisien untuk meneruskan data ke kontrak.\n\n## Free Memory Pointer\n\nSolidity mempertahankan \"free memory pointer\" di memory offset 0x40. Pointer ini melacak di mana memory yang belum digunakan dimulai.\n\n```solidity\n\u002F\u002F Setiap fungsi Solidity dimulai dengan:\nassembly {\n    let fmp := mload(0x40)  \u002F\u002F Baca free memory pointer\n    \u002F\u002F Alokasi 64 byte:\n    mstore(0x40, add(fmp, 0x40))  \u002F\u002F Update pointer\n    \u002F\u002F Gunakan fmp..fmp+64 sebagai scratch space\n}\n```\n\nDi Yul atau Huff, Anda bisa mengabaikan free memory pointer sepenuhnya dan mengelola memory secara manual — menghemat gas yang digunakan Solidity untuk bookkeeping.\n\n## Tata Letak Memory Solidity\n\nSolidity memesan beberapa offset memory:\n\n| Offset | Tujuan |\n|--------|--------|\n| 0x00-0x1f | Scratch space untuk hashing |\n| 0x20-0x3f | Scratch space untuk hashing |\n| 0x40-0x5f | Free memory pointer |\n| 0x60-0x7f | Slot zero (selalu 0x00) |\n| 0x80+ | Area alokasi dinamis |\n\nKetika Anda menulis Yul inline, Anda bisa menggunakan 0x00-0x3f sebagai scratch space tanpa khawatir menimpa data — Solidity hanya menggunakan area ini untuk operasi hashing sementara.\n\n## Packing Storage Slot\n\nEVM selalu membaca dan menulis 32 byte sekaligus dari storage. Solidity secara otomatis mengemas variabel yang lebih kecil dari 32 byte ke dalam slot yang sama:\n\n```solidity\ncontract Packed {\n    uint128 a;  \u002F\u002F slot 0, byte 0-15\n    uint128 b;  \u002F\u002F slot 0, byte 16-31\n    uint256 c;  \u002F\u002F slot 1, byte 0-31 (terlalu besar untuk berbagi)\n}\n```\n\nMembaca `a` memerlukan: SLOAD slot 0 (2100\u002F100 gas) + AND untuk mask (3 gas). Menulis `a` memerlukan: SLOAD + AND + OR + SSTORE. Packing menghemat slot tetapi menambah kompleksitas bitwise.\n\n## Perbandingan Biaya\n\n| Operasi | Biaya Gas | Catatan |\n|---------|-----------|--------|\n| Stack push\u002Fpop | 3 | Paling murah |\n| Memory baca\u002Ftulis | 3 + ekspansi | Murah untuk ukuran kecil |\n| Calldata baca | 3 | Murah, read-only |\n| Storage baca (cold) | 2100 | Mahal |\n| Storage baca (warm) | 100 | Masih mahal relatif |\n| Storage tulis | 2900-22100 | Sangat mahal |\n\n## Strategi Optimasi\n\n1. **Cache pembacaan storage** — Baca sekali ke variabel memory\u002Fstack, gunakan cache untuk pembacaan berikutnya.\n2. **Pack variabel state** — Kelompokkan variabel kecil ke dalam slot 32-byte.\n3. **Gunakan calldata** — Untuk parameter fungsi external, `calldata` lebih murah dari `memory`.\n4. **Minimalkan ekspansi memory** — Gunakan kembali area memory yang sama daripada terus mengalokasi.\n5. **Gunakan immutable** — Variabel immutable disematkan dalam bytecode, bukan storage.\n\n## Transient Storage (EIP-1153)\n\nEIP-1153 (Cancun upgrade, 2024) memperkenalkan opcode baru: TSTORE dan TLOAD. Transient storage berperilaku seperti storage biasa tetapi dihapus di akhir transaksi.\n\nBiaya: 100 gas untuk TSTORE dan TLOAD — jauh lebih murah dari SSTORE\u002FSLOAD. Ini sempurna untuk guard reentrancy, kunci sementara, dan komunikasi antar sub-panggilan dalam satu transaksi.\n\n```solidity\n\u002F\u002F Sebelum EIP-1153 (guard reentrancy):\nuint256 private _locked = 1;  \u002F\u002F SLOAD 2100 gas + SSTORE 2900 gas\n\n\u002F\u002F Setelah EIP-1153:\nassembly {\n    if tload(0) { revert(0, 0) }  \u002F\u002F TLOAD 100 gas\n    tstore(0, 1)                   \u002F\u002F TSTORE 100 gas\n}\n```\n\n## Kesimpulan\n\nMemahami empat lokasi data EVM dan biaya relatifnya adalah kunci untuk menulis kontrak yang efisien gas. Stack untuk komputasi, memory untuk data sementara, storage untuk state persisten, calldata untuk input read-only. Setiap pilihan lokasi data berdampak langsung pada biaya gas pengguna Anda.","\u003Ch2 id=\"empat-lokasi-data-di-evm\">Empat Lokasi Data di EVM\u003C\u002Fh2>\n\u003Cp>EVM memiliki empat lokasi data yang berbeda, masing-masing dengan karakteristik biaya dan persistensi yang unik. Memilih lokasi yang tepat adalah faktor terbesar yang menentukan biaya gas kontrak Anda.\u003C\u002Fp>\n\u003Ch3>1. Stack\u003C\u002Fh3>\n\u003Cp>Stack adalah area kerja utama EVM. Menampung hingga 1024 elemen, masing-masing 32 byte. Biaya akses: 3 gas per operasi (PUSH, POP, DUP, SWAP). Stack bersifat sementara — hilang setelah eksekusi selesai.\u003C\u002Fp>\n\u003Cp>Stack adalah satu-satunya tempat di mana operasi aritmatika dan logika dapat dilakukan. Anda tidak bisa menambahkan dua angka yang ada di memory — Anda harus memuatnya ke stack terlebih dahulu.\u003C\u002Fp>\n\u003Ch3>2. Memory\u003C\u002Fh3>\n\u003Cp>Memory adalah array byte yang dapat diperluas secara linear. Dimulai kosong dan tumbuh sesuai kebutuhan. Biaya tumbuh secara kuadratik — ini penting.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F Biaya memory:\n\u002F\u002F Biaya = 3 * ukuran_word + ukuran_word^2 \u002F 512\n\u002F\u002F Di mana ukuran_word = ceil(ukuran_byte \u002F 32)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Memory bersifat sementara — hanya ada selama panggilan saat ini. Sub-panggilan mendapatkan memory baru yang kosong. Ini berarti Anda tidak bisa meneruskan data besar ke sub-panggilan melalui memory — Anda harus menggunakan calldata.\u003C\u002Fp>\n\u003Cp>Operasi memory utama:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>MSTORE(offset, value)\u003C\u002Fstrong> — Simpan word 32-byte di offset. Biaya: 3 gas + biaya ekspansi.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MLOAD(offset)\u003C\u002Fstrong> — Muat word 32-byte dari offset. Biaya: 3 gas + biaya ekspansi.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MSTORE8(offset, value)\u003C\u002Fstrong> — Simpan 1 byte di offset. Biaya: 3 gas + biaya ekspansi.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>MCOPY(dst, src, size)\u003C\u002Fstrong> — Salin byte dalam memory (EIP-5656, Cancun). Biaya: 3 gas + 3 per word + biaya ekspansi.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>3. Storage\u003C\u002Fh3>\n\u003Cp>Storage adalah database key-value persisten kontrak. Setiap kontrak memiliki 2^256 slot, masing-masing 32 byte. Storage bertahan di antara transaksi — ini adalah state kontrak Anda.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Setiap variabel state Solidity menempati slot storage:\nuint256 public value;     \u002F\u002F slot 0\nuint256 public count;     \u002F\u002F slot 1\nmapping(address =&gt; uint) public balances;  \u002F\u002F slot 2 (dasar)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Biaya storage sangat tinggi karena setiap node di jaringan harus menyimpan data ini selamanya:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>SLOAD\u003C\u002Fstrong> (cold): 2100 gas\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SLOAD\u003C\u002Fstrong> (warm): 100 gas\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SSTORE\u003C\u002Fstrong> (cold, 0 ke nonzero): 22100 gas\u003C\u002Fli>\n\u003Cli>\u003Cstrong>SSTORE\u003C\u002Fstrong> (warm, nonzero ke nonzero): 2900 gas\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>4. Calldata\u003C\u002Fh3>\n\u003Cp>Calldata adalah data input read-only yang dikirim bersama transaksi atau panggilan. Tidak bisa dimodifikasi selama eksekusi.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>\u002F\u002F Biaya calldata per transaksi:\n\u002F\u002F 16 gas per byte non-zero\n\u002F\u002F  4 gas per byte zero\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Calldata murah untuk dibaca (CALLDATALOAD = 3 gas) dan ukurannya diketahui sebelumnya (CALLDATASIZE). Ini adalah cara paling efisien untuk meneruskan data ke kontrak.\u003C\u002Fp>\n\u003Ch2 id=\"free-memory-pointer\">Free Memory Pointer\u003C\u002Fh2>\n\u003Cp>Solidity mempertahankan “free memory pointer” di memory offset 0x40. Pointer ini melacak di mana memory yang belum digunakan dimulai.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Setiap fungsi Solidity dimulai dengan:\nassembly {\n    let fmp := mload(0x40)  \u002F\u002F Baca free memory pointer\n    \u002F\u002F Alokasi 64 byte:\n    mstore(0x40, add(fmp, 0x40))  \u002F\u002F Update pointer\n    \u002F\u002F Gunakan fmp..fmp+64 sebagai scratch space\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Di Yul atau Huff, Anda bisa mengabaikan free memory pointer sepenuhnya dan mengelola memory secara manual — menghemat gas yang digunakan Solidity untuk bookkeeping.\u003C\u002Fp>\n\u003Ch2 id=\"tata-letak-memory-solidity\">Tata Letak Memory Solidity\u003C\u002Fh2>\n\u003Cp>Solidity memesan beberapa offset memory:\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Offset\u003C\u002Fth>\u003Cth>Tujuan\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>0x00-0x1f\u003C\u002Ftd>\u003Ctd>Scratch space untuk hashing\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>0x20-0x3f\u003C\u002Ftd>\u003Ctd>Scratch space untuk hashing\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>0x40-0x5f\u003C\u002Ftd>\u003Ctd>Free memory pointer\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>0x60-0x7f\u003C\u002Ftd>\u003Ctd>Slot zero (selalu 0x00)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>0x80+\u003C\u002Ftd>\u003Ctd>Area alokasi dinamis\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>Ketika Anda menulis Yul inline, Anda bisa menggunakan 0x00-0x3f sebagai scratch space tanpa khawatir menimpa data — Solidity hanya menggunakan area ini untuk operasi hashing sementara.\u003C\u002Fp>\n\u003Ch2 id=\"packing-storage-slot\">Packing Storage Slot\u003C\u002Fh2>\n\u003Cp>EVM selalu membaca dan menulis 32 byte sekaligus dari storage. Solidity secara otomatis mengemas variabel yang lebih kecil dari 32 byte ke dalam slot yang sama:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">contract Packed {\n    uint128 a;  \u002F\u002F slot 0, byte 0-15\n    uint128 b;  \u002F\u002F slot 0, byte 16-31\n    uint256 c;  \u002F\u002F slot 1, byte 0-31 (terlalu besar untuk berbagi)\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Membaca \u003Ccode>a\u003C\u002Fcode> memerlukan: SLOAD slot 0 (2100\u002F100 gas) + AND untuk mask (3 gas). Menulis \u003Ccode>a\u003C\u002Fcode> memerlukan: SLOAD + AND + OR + SSTORE. Packing menghemat slot tetapi menambah kompleksitas bitwise.\u003C\u002Fp>\n\u003Ch2 id=\"perbandingan-biaya\">Perbandingan Biaya\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Operasi\u003C\u002Fth>\u003Cth>Biaya Gas\u003C\u002Fth>\u003Cth>Catatan\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>Stack push\u002Fpop\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>Paling murah\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Memory baca\u002Ftulis\u003C\u002Ftd>\u003Ctd>3 + ekspansi\u003C\u002Ftd>\u003Ctd>Murah untuk ukuran kecil\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Calldata baca\u003C\u002Ftd>\u003Ctd>3\u003C\u002Ftd>\u003Ctd>Murah, read-only\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Storage baca (cold)\u003C\u002Ftd>\u003Ctd>2100\u003C\u002Ftd>\u003Ctd>Mahal\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Storage baca (warm)\u003C\u002Ftd>\u003Ctd>100\u003C\u002Ftd>\u003Ctd>Masih mahal relatif\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Storage tulis\u003C\u002Ftd>\u003Ctd>2900-22100\u003C\u002Ftd>\u003Ctd>Sangat mahal\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"strategi-optimasi\">Strategi Optimasi\u003C\u002Fh2>\n\u003Col>\n\u003Cli>\u003Cstrong>Cache pembacaan storage\u003C\u002Fstrong> — Baca sekali ke variabel memory\u002Fstack, gunakan cache untuk pembacaan berikutnya.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Pack variabel state\u003C\u002Fstrong> — Kelompokkan variabel kecil ke dalam slot 32-byte.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Gunakan calldata\u003C\u002Fstrong> — Untuk parameter fungsi external, \u003Ccode>calldata\u003C\u002Fcode> lebih murah dari \u003Ccode>memory\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Minimalkan ekspansi memory\u003C\u002Fstrong> — Gunakan kembali area memory yang sama daripada terus mengalokasi.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Gunakan immutable\u003C\u002Fstrong> — Variabel immutable disematkan dalam bytecode, bukan storage.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2 id=\"transient-storage-eip-1153\">Transient Storage (EIP-1153)\u003C\u002Fh2>\n\u003Cp>EIP-1153 (Cancun upgrade, 2024) memperkenalkan opcode baru: TSTORE dan TLOAD. Transient storage berperilaku seperti storage biasa tetapi dihapus di akhir transaksi.\u003C\u002Fp>\n\u003Cp>Biaya: 100 gas untuk TSTORE dan TLOAD — jauh lebih murah dari SSTORE\u002FSLOAD. Ini sempurna untuk guard reentrancy, kunci sementara, dan komunikasi antar sub-panggilan dalam satu transaksi.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Sebelum EIP-1153 (guard reentrancy):\nuint256 private _locked = 1;  \u002F\u002F SLOAD 2100 gas + SSTORE 2900 gas\n\n\u002F\u002F Setelah EIP-1153:\nassembly {\n    if tload(0) { revert(0, 0) }  \u002F\u002F TLOAD 100 gas\n    tstore(0, 1)                   \u002F\u002F TSTORE 100 gas\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"kesimpulan\">Kesimpulan\u003C\u002Fh2>\n\u003Cp>Memahami empat lokasi data EVM dan biaya relatifnya adalah kunci untuk menulis kontrak yang efisien gas. Stack untuk komputasi, memory untuk data sementara, storage untuk state persisten, calldata untuk input read-only. Setiap pilihan lokasi data berdampak langsung pada biaya gas pengguna Anda.\u003C\u002Fp>\n","id","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:24.610004Z","Empat lokasi data EVM dijelaskan: stack, memory, storage, dan calldata beserta biaya dan strategi optimasi gas.","EVM memory model",null,"index, follow",[21,26,30],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000014","Solidity","solidity","Blockchain",[36,42,48],{"id":37,"title":38,"slug":39,"excerpt":40,"locale":12,"category_name":34,"published_at":41},"d0000000-0000-0000-0000-000000000596","Lapisan Interoperabilitas Ethereum: Bagaimana 55+ L2 Menjadi Satu Chain","lapisan-interoperabilitas-ethereum-bagaimana-55-l2-menjadi-satu-chain","Ethereum memiliki 55+ rollup Layer 2, memecah likuiditas dan pengalaman pengguna. Lapisan Interoperabilitas Ethereum — menggabungkan pesan lintas-rollup, shared sequencer, dan based rollup — bertujuan menyatukan mereka menjadi satu jaringan yang dapat dikomposisi.","2026-03-28T10:44:44.364342Z",{"id":43,"title":44,"slug":45,"excerpt":46,"locale":12,"category_name":34,"published_at":47},"d0000000-0000-0000-0000-000000000595","ZK Proofs Melampaui Rollups: Inferensi AI Terverifikasi di Ethereum","zk-proofs-melampaui-rollups-inferensi-ai-terverifikasi-ethereum","Zero-knowledge proofs bukan lagi sekadar alat penskalaan. Pada 2026, zkML memungkinkan inferensi AI terverifikasi on-chain, ZK coprocessor memindahkan komputasi berat off-chain dengan verifikasi on-chain, dan sistem pembuktian baru seperti SP1 dan Jolt menjadikannya praktis.","2026-03-28T10:44:44.358370Z",{"id":49,"title":50,"slug":51,"excerpt":52,"locale":12,"category_name":34,"published_at":53},"d0000000-0000-0000-0000-000000000572","EIP-7702 dalam Praktik: Membangun Alur Akun Pintar Setelah Pectra","eip-7702-dalam-praktik-membangun-alur-akun-pintar-setelah-pectra","EIP-7702 memungkinkan EOA Ethereum mana pun untuk sementara bertindak sebagai kontrak pintar dalam satu transaksi. Berikut cara mengimplementasikan transaksi batch, sponsorship gas, dan social recovery menggunakan primitif account abstraction baru.","2026-03-28T10:44:42.816894Z",{"id":13,"name":55,"slug":56,"bio":57,"photo_url":18,"linkedin":18,"role":58,"created_at":59,"updated_at":59},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]