[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-3-memahami-gas-biaya-kontrak":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-000000000103","a0000000-0000-0000-0000-000000000022","Deep EVM #3: Memahami Gas — Mengapa Kontrak Anda Mahal","deep-evm-3-memahami-gas-biaya-kontrak","Penjelasan lengkap tentang sistem gas Ethereum: bagaimana setiap opcode dihargai, mengapa akses storage dominan, EIP-1559, dan teknik optimasi gas praktis.","## Apa Itu Gas dan Mengapa Ada?\n\nGas adalah unit pengukuran komputasi di Ethereum. Setiap operasi dalam EVM memerlukan sejumlah gas tertentu, dan pengguna membayar gas ini dengan ETH. Gas memecahkan dua masalah fundamental:\n\n1. **Halting problem** — Tanpa batas gas, smart contract bisa berjalan selamanya, membekukan seluruh jaringan.\n2. **Penetapan harga sumber daya** — Gas memastikan bahwa penggunaan CPU, storage, dan bandwidth jaringan dihargai secara adil.\n\nTotal biaya transaksi = gas_used * gas_price. Sejak EIP-1559, gas_price terdiri dari base_fee (dibakar) + priority_fee (ke validator).\n\n## Anatomi Biaya Gas Transaksi\n\nKetika Anda mengirim transaksi, biaya gas dipecah menjadi beberapa komponen:\n\n### 1. Gas Intrinsik (21.000 minimum)\nSetiap transaksi membayar setidaknya 21.000 gas hanya untuk eksis. Ini mencakup verifikasi tanda tangan, pembaruan nonce, dan biaya overhead jaringan.\n\n### 2. Biaya Calldata\n- 4 gas per byte zero\n- 16 gas per byte non-zero\n\nIni mengapa teknik kompresi calldata penting. EIP-4844 (proto-danksharding) memperkenalkan blob space yang lebih murah untuk data rollup.\n\n### 3. Biaya Eksekusi\nSetiap opcode yang dieksekusi menambah biaya gas. Opcode aritmatika sederhana (ADD, SUB) memerlukan 3 gas. Operasi storage bisa memerlukan ribuan gas.\n\n### 4. Biaya Ekspansi Memory\nMemory EVM tumbuh secara dinamis, dan biaya tumbuh secara kuadratik:\n\n```\nbiaya_memory(ukuran) = 3 * a + floor(a^2 \u002F 512)\ndi mana a = ceil(ukuran \u002F 32)\n```\n\nUntuk 1 KB memory: ~96 gas. Untuk 1 MB: ~3.145.728 gas. Pertumbuhan kuadratik ini mencegah kontrak menggunakan memory berlebihan.\n\n## EIP-1559: Mekanisme Biaya Base Fee\n\nSebelum EIP-1559, gas price ditentukan melalui lelang first-price — pengguna menebak berapa yang harus dibayar. EIP-1559 (London, Agustus 2021) memperkenalkan:\n\n- **Base fee** — Ditetapkan secara algoritmik berdasarkan utilisasi block sebelumnya. Jika block sebelumnya penuh, base fee naik ~12.5%. Jika kosong, turun ~12.5%.\n- **Priority fee (tip)** — Biaya tambahan langsung ke validator untuk memprioritaskan transaksi Anda.\n- **Max fee** — Jumlah maksimum yang bersedia Anda bayar (base + priority).\n\n```\n\u002F\u002F Biaya efektif per gas:\neffective_gas_price = min(max_fee, base_fee + priority_fee)\n\n\u002F\u002F Yang dibakar:\nburned = base_fee * gas_used\n\n\u002F\u002F Yang ke validator:\ntip = (effective_gas_price - base_fee) * gas_used\n```\n\n## Opcode Termahal\n\nBerikut opcode yang paling berdampak pada biaya gas:\n\n| Opcode | Biaya Gas | Penjelasan |\n|--------|-----------|------------|\n| SSTORE (cold, 0→1) | 22.100 | Menulis ke slot storage baru |\n| SSTORE (cold, 1→1) | 5.000 | Mengubah slot storage yang ada |\n| CREATE | 32.000 | Membuat kontrak baru |\n| CREATE2 | 32.000 | Membuat kontrak dengan alamat deterministik |\n| SLOAD (cold) | 2.100 | Membaca slot storage pertama kali |\n| CALL (cold) | 2.600 | Memanggil kontrak lain pertama kali |\n| LOG4 | 1.875+ | Menerbitkan event dengan 4 topik |\n| EXTCODESIZE (cold) | 2.600 | Memeriksa ukuran kode kontrak |\n\n## Teknik Optimasi Gas\n\n### 1. Caching Storage\nPola paling berdampak — cache pembacaan storage ke variabel lokal:\n\n```solidity\n\u002F\u002F Buruk: 2 SLOAD = 2200 gas (warm)\nfunction buruk() external view returns (uint256) {\n    return balances[msg.sender] + balances[msg.sender];\n}\n\n\u002F\u002F Baik: 1 SLOAD + 1 DUP = 103 gas\nfunction baik() external view returns (uint256) {\n    uint256 bal = balances[msg.sender];\n    return bal + bal;\n}\n```\n\n### 2. Short-Circuit dengan Assembly\n```solidity\n\u002F\u002F Solidity menghasilkan branching yang berat\nrequire(a > 0 && b > 0 && c > 0);\n\n\u002F\u002F Yul: single-pass check\nassembly {\n    if iszero(and(and(gt(a, 0), gt(b, 0)), gt(c, 0))) {\n        revert(0, 0)\n    }\n}\n```\n\n### 3. Packed Storage\nGabungkan variabel kecil ke dalam satu slot:\n\n```solidity\n\u002F\u002F 3 slot storage (66.300 gas untuk menulis semua):\nuint256 a; uint256 b; uint256 c;\n\n\u002F\u002F 1 slot storage (22.100 gas):\nuint64 a; uint64 b; uint128 c;\n```\n\n### 4. Gunakan Errors Kustom\n```solidity\n\u002F\u002F String error: ~130+ byte calldata (mahal)\nrequire(x > 0, \"Value must be greater than zero\");\n\n\u002F\u002F Kustom error: 4 byte selector (murah)\nerror ValueTooLow();\nif (x == 0) revert ValueTooLow();\n```\n\n### 5. Unchecked Arithmetic\nKetika Anda yakin tidak ada overflow:\n\n```solidity\n\u002F\u002F Dengan pemeriksaan overflow (default Solidity 0.8+):\nfor (uint256 i = 0; i \u003C length; i++) { ... }\n\n\u002F\u002F Tanpa pemeriksaan (hemat ~60 gas per iterasi):\nfor (uint256 i = 0; i \u003C length; ) {\n    \u002F\u002F ...\n    unchecked { ++i; }\n}\n```\n\n## Gas Refund\n\nBeberapa operasi memberikan refund gas:\n\n- **SSTORE** (nonzero → zero): Refund 4.800 gas\n- Refund dibatasi pada 20% dari total gas yang digunakan (EIP-3529)\n\nIni berarti membersihkan storage masih menguntungkan, tetapi tidak sebanyak sebelum EIP-3529 yang membatasi refund dari 50% ke 20%.\n\n## Access List (EIP-2930)\n\nAnda dapat menyertakan access list dalam transaksi untuk \"memanaskan\" alamat dan slot storage di muka:\n\n```json\n{\n  \"accessList\": [\n    {\n      \"address\": \"0x1234....\",\n      \"storageKeys\": [\"0x00\", \"0x01\"]\n    }\n  ]\n}\n```\n\nBiaya: 2400 gas per alamat + 1900 per slot. Ini lebih murah daripada akses cold pertama (2600\u002F2100), sehingga menghemat gas ketika Anda tahu slot mana yang akan diakses.\n\n## Profiling Gas dengan Foundry\n\nFoundry menyediakan alat untuk menganalisis biaya gas:\n\n```bash\n# Gas report per fungsi:\nforge test --gas-report\n\n# Snapshot untuk perbandingan:\nforge snapshot\nforge snapshot --diff\n\n# Tracing detail:\nforge test -vvvv\n```\n\n## Kesimpulan\n\nOptimasi gas adalah campuran ilmu dan seni. Memahami biaya setiap opcode, menggunakan caching storage, mengemas variabel, dan memanfaatkan teknik assembly bisa mengurangi biaya gas secara dramatis. Untuk MEV bot dan kontrak frekuensi tinggi, setiap unit gas yang dihemat langsung diterjemahkan menjadi keuntungan.","\u003Ch2 id=\"apa-itu-gas-dan-mengapa-ada\">Apa Itu Gas dan Mengapa Ada?\u003C\u002Fh2>\n\u003Cp>Gas adalah unit pengukuran komputasi di Ethereum. Setiap operasi dalam EVM memerlukan sejumlah gas tertentu, dan pengguna membayar gas ini dengan ETH. Gas memecahkan dua masalah fundamental:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Halting problem\u003C\u002Fstrong> — Tanpa batas gas, smart contract bisa berjalan selamanya, membekukan seluruh jaringan.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Penetapan harga sumber daya\u003C\u002Fstrong> — Gas memastikan bahwa penggunaan CPU, storage, dan bandwidth jaringan dihargai secara adil.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Total biaya transaksi = gas_used * gas_price. Sejak EIP-1559, gas_price terdiri dari base_fee (dibakar) + priority_fee (ke validator).\u003C\u002Fp>\n\u003Ch2 id=\"anatomi-biaya-gas-transaksi\">Anatomi Biaya Gas Transaksi\u003C\u002Fh2>\n\u003Cp>Ketika Anda mengirim transaksi, biaya gas dipecah menjadi beberapa komponen:\u003C\u002Fp>\n\u003Ch3>1. Gas Intrinsik (21.000 minimum)\u003C\u002Fh3>\n\u003Cp>Setiap transaksi membayar setidaknya 21.000 gas hanya untuk eksis. Ini mencakup verifikasi tanda tangan, pembaruan nonce, dan biaya overhead jaringan.\u003C\u002Fp>\n\u003Ch3>2. Biaya Calldata\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>4 gas per byte zero\u003C\u002Fli>\n\u003Cli>16 gas per byte non-zero\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Ini mengapa teknik kompresi calldata penting. EIP-4844 (proto-danksharding) memperkenalkan blob space yang lebih murah untuk data rollup.\u003C\u002Fp>\n\u003Ch3>3. Biaya Eksekusi\u003C\u002Fh3>\n\u003Cp>Setiap opcode yang dieksekusi menambah biaya gas. Opcode aritmatika sederhana (ADD, SUB) memerlukan 3 gas. Operasi storage bisa memerlukan ribuan gas.\u003C\u002Fp>\n\u003Ch3>4. Biaya Ekspansi Memory\u003C\u002Fh3>\n\u003Cp>Memory EVM tumbuh secara dinamis, dan biaya tumbuh secara kuadratik:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>biaya_memory(ukuran) = 3 * a + floor(a^2 \u002F 512)\ndi mana a = ceil(ukuran \u002F 32)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Untuk 1 KB memory: ~96 gas. Untuk 1 MB: ~3.145.728 gas. Pertumbuhan kuadratik ini mencegah kontrak menggunakan memory berlebihan.\u003C\u002Fp>\n\u003Ch2 id=\"eip-1559-mekanisme-biaya-base-fee\">EIP-1559: Mekanisme Biaya Base Fee\u003C\u002Fh2>\n\u003Cp>Sebelum EIP-1559, gas price ditentukan melalui lelang first-price — pengguna menebak berapa yang harus dibayar. EIP-1559 (London, Agustus 2021) memperkenalkan:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Base fee\u003C\u002Fstrong> — Ditetapkan secara algoritmik berdasarkan utilisasi block sebelumnya. Jika block sebelumnya penuh, base fee naik ~12.5%. Jika kosong, turun ~12.5%.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Priority fee (tip)\u003C\u002Fstrong> — Biaya tambahan langsung ke validator untuk memprioritaskan transaksi Anda.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Max fee\u003C\u002Fstrong> — Jumlah maksimum yang bersedia Anda bayar (base + priority).\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode>\u002F\u002F Biaya efektif per gas:\neffective_gas_price = min(max_fee, base_fee + priority_fee)\n\n\u002F\u002F Yang dibakar:\nburned = base_fee * gas_used\n\n\u002F\u002F Yang ke validator:\ntip = (effective_gas_price - base_fee) * gas_used\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"opcode-termahal\">Opcode Termahal\u003C\u002Fh2>\n\u003Cp>Berikut opcode yang paling berdampak pada biaya gas:\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Opcode\u003C\u002Fth>\u003Cth>Biaya Gas\u003C\u002Fth>\u003Cth>Penjelasan\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>SSTORE (cold, 0→1)\u003C\u002Ftd>\u003Ctd>22.100\u003C\u002Ftd>\u003Ctd>Menulis ke slot storage baru\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>SSTORE (cold, 1→1)\u003C\u002Ftd>\u003Ctd>5.000\u003C\u002Ftd>\u003Ctd>Mengubah slot storage yang ada\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>CREATE\u003C\u002Ftd>\u003Ctd>32.000\u003C\u002Ftd>\u003Ctd>Membuat kontrak baru\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>CREATE2\u003C\u002Ftd>\u003Ctd>32.000\u003C\u002Ftd>\u003Ctd>Membuat kontrak dengan alamat deterministik\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>SLOAD (cold)\u003C\u002Ftd>\u003Ctd>2.100\u003C\u002Ftd>\u003Ctd>Membaca slot storage pertama kali\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>CALL (cold)\u003C\u002Ftd>\u003Ctd>2.600\u003C\u002Ftd>\u003Ctd>Memanggil kontrak lain pertama kali\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>LOG4\u003C\u002Ftd>\u003Ctd>1.875+\u003C\u002Ftd>\u003Ctd>Menerbitkan event dengan 4 topik\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>EXTCODESIZE (cold)\u003C\u002Ftd>\u003Ctd>2.600\u003C\u002Ftd>\u003Ctd>Memeriksa ukuran kode kontrak\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"teknik-optimasi-gas\">Teknik Optimasi Gas\u003C\u002Fh2>\n\u003Ch3>1. Caching Storage\u003C\u002Fh3>\n\u003Cp>Pola paling berdampak — cache pembacaan storage ke variabel lokal:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Buruk: 2 SLOAD = 2200 gas (warm)\nfunction buruk() external view returns (uint256) {\n    return balances[msg.sender] + balances[msg.sender];\n}\n\n\u002F\u002F Baik: 1 SLOAD + 1 DUP = 103 gas\nfunction baik() external view returns (uint256) {\n    uint256 bal = balances[msg.sender];\n    return bal + bal;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>2. Short-Circuit dengan Assembly\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Solidity menghasilkan branching yang berat\nrequire(a &gt; 0 &amp;&amp; b &gt; 0 &amp;&amp; c &gt; 0);\n\n\u002F\u002F Yul: single-pass check\nassembly {\n    if iszero(and(and(gt(a, 0), gt(b, 0)), gt(c, 0))) {\n        revert(0, 0)\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>3. Packed Storage\u003C\u002Fh3>\n\u003Cp>Gabungkan variabel kecil ke dalam satu slot:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F 3 slot storage (66.300 gas untuk menulis semua):\nuint256 a; uint256 b; uint256 c;\n\n\u002F\u002F 1 slot storage (22.100 gas):\nuint64 a; uint64 b; uint128 c;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>4. Gunakan Errors Kustom\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F String error: ~130+ byte calldata (mahal)\nrequire(x &gt; 0, \"Value must be greater than zero\");\n\n\u002F\u002F Kustom error: 4 byte selector (murah)\nerror ValueTooLow();\nif (x == 0) revert ValueTooLow();\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>5. Unchecked Arithmetic\u003C\u002Fh3>\n\u003Cp>Ketika Anda yakin tidak ada overflow:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-solidity\">\u002F\u002F Dengan pemeriksaan overflow (default Solidity 0.8+):\nfor (uint256 i = 0; i &lt; length; i++) { ... }\n\n\u002F\u002F Tanpa pemeriksaan (hemat ~60 gas per iterasi):\nfor (uint256 i = 0; i &lt; length; ) {\n    \u002F\u002F ...\n    unchecked { ++i; }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"gas-refund\">Gas Refund\u003C\u002Fh2>\n\u003Cp>Beberapa operasi memberikan refund gas:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>SSTORE\u003C\u002Fstrong> (nonzero → zero): Refund 4.800 gas\u003C\u002Fli>\n\u003Cli>Refund dibatasi pada 20% dari total gas yang digunakan (EIP-3529)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Ini berarti membersihkan storage masih menguntungkan, tetapi tidak sebanyak sebelum EIP-3529 yang membatasi refund dari 50% ke 20%.\u003C\u002Fp>\n\u003Ch2 id=\"access-list-eip-2930\">Access List (EIP-2930)\u003C\u002Fh2>\n\u003Cp>Anda dapat menyertakan access list dalam transaksi untuk “memanaskan” alamat dan slot storage di muka:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  \"accessList\": [\n    {\n      \"address\": \"0x1234....\",\n      \"storageKeys\": [\"0x00\", \"0x01\"]\n    }\n  ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Biaya: 2400 gas per alamat + 1900 per slot. Ini lebih murah daripada akses cold pertama (2600\u002F2100), sehingga menghemat gas ketika Anda tahu slot mana yang akan diakses.\u003C\u002Fp>\n\u003Ch2 id=\"profiling-gas-dengan-foundry\">Profiling Gas dengan Foundry\u003C\u002Fh2>\n\u003Cp>Foundry menyediakan alat untuk menganalisis biaya gas:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># Gas report per fungsi:\nforge test --gas-report\n\n# Snapshot untuk perbandingan:\nforge snapshot\nforge snapshot --diff\n\n# Tracing detail:\nforge test -vvvv\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"kesimpulan\">Kesimpulan\u003C\u002Fh2>\n\u003Cp>Optimasi gas adalah campuran ilmu dan seni. Memahami biaya setiap opcode, menggunakan caching storage, mengemas variabel, dan memanfaatkan teknik assembly bisa mengurangi biaya gas secara dramatis. Untuk MEV bot dan kontrak frekuensi tinggi, setiap unit gas yang dihemat langsung diterjemahkan menjadi keuntungan.\u003C\u002Fp>\n","id","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:24.620857Z","Penjelasan lengkap sistem gas Ethereum: biaya opcode, EIP-1559, access list, dan teknik optimasi gas praktis untuk smart contract.","biaya gas EVM",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"]