Dekode swap SCW
Dengan dompet kontrak pintar (SCW), swap mengambil jalur yang sangat berbeda dibandingkan dengan dompet Ethereum/EVM tradisional. Perbedaan itu bisa membingungkan, terutama ketika sesuatu berjalan salah. Tetapi setelah Anda memahami para pemain kunci dalam alur — dan bagaimana membaca apa yang terjadi langkah demi langkah di aplikasi dan di penjelajah blok — semuanya mulai masuk akal.
Mari kita jalani bersama.
Dari satu ketukan ke eksekusi on-chain: apa yang sebenarnya terjadi
Saat Anda mengetuk “Swap” di aplikasi, terasa seperti satu tindakan tunggal. Sebenarnya, Anda memulai proses berlapis yang dibangun di atas abstraksi akun Ethereum (ERC-4337). Transaksi Anda tidak langsung pergi ke blockchain seperti pada dompet normal. Sebaliknya, transaksi Anda mengambil jalan memutar:
Kami membangun rute. Kami meminta mesin routing (seperti 1inch) untuk menemukan jalur terbaik untuk swap Anda, dan mensimulasikannya untuk memastikan berhasil. Kami memperkirakan gas, memvalidasi bahwa Anda memiliki token, dan mengemas instruksi ke dalam format khusus: sebuah
UserOperation.Sebuah
bundlermemasuki. Ini adalah aktor off-chain yang bertanggung jawab untuk mengirimkan UserOperation ke blockchain. Ia memeriksa op Anda, memastikan itu valid, dan membayar di muka biaya gas untuk Anda (nanti akan diganti).UserOp Anda memasuki blockchain melalui
EntryPointkontrak pintar. Anggap EntryPoint sebagai satu gerbang yang dilalui semua transaksi SCW. EntryPoint menjalankan pemeriksaan akhir, dan jika semuanya terlihat baik…EntryPoint memberi tahu Smart Contract Wallet (SCW) Anda untuk mengeksekusi swap. SCW Anda memanggil router (mis. 1inch), router memanggil pool, token bergerak, dan hasilnya kembali ke dompet Anda.
Jadi untuk merangkum: Anda mengetuk swap → kami mensimulasikan → bundler mengirimkan → EntryPoint memvalidasi → SCW Anda mengeksekusi.
Mari lihat contoh nyata
Sekarang kita memahami alur tingkat tinggi, mari lihat bagaimana ini terjadi pada swap nyata: pertama di aplikasi, lalu on-chain:

Berikut yang kita lihat:
Kita menukar 1 USDC menjadi 0,765 KTA.
Swap dieksekusi di Base (perhatikan ikon Base pada simbol koin).
Kita membayar:
$0,03 gas (dalam ETH)
0,22% biaya swap ke goodcryptoX
0,05% biaya router ke 1inch
Rutenya sederhana: 100% melalui pool Uniswap v4.
Bundler: Alchemy (lihat Langkah 2 di atas untuk rekap)
Tautan penjelajah muncul jika transaksi telah mencapai blockchain dan tercatat dalam blok (bahkan jika gagal)
Sejauh ini baik. Selanjutnya, mari klik tautan BaseScan untuk melihat seperti apa transaksi ini on-chain:

Dari: ini bukan dompet Anda — ini adalah bundler Alchemy. Itu diharapkan, karena bundler yang mengirimkan transaksi.
Ke: EntryPoint (v0.6.0). Sekali lagi, wajar — semua transaksi SCW masuk melalui sini.
Transaksi Internal: menunjukkan aliran token native (ETH di Base) dalam transaksi. Berikut yang kita lihat:
Dompet kita (…0A5) mengirim ETH ke EntryPoint untuk biaya gas.
EntryPoint mengganti biaya bundler dengan biaya gas aktual (karena bundler membayar gas di muka atas nama Anda; lihat Langkah 2 di atas). Sisa ETH yang tidak terpakai tetap di EntryPoint sebagai deposit Anda untuk transaksi berikutnya.
Transfer ERC-20: menunjukkan pergerakan token yang sebenarnya:
Dompet kita tidak mengirim USDC secara langsung. Sebaliknya, kontrak token USDC (…2A8) memproses dan mengirim transfer. Ini normal: di blockchain EVM, transfer token ditangani oleh kontrak token itu sendiri setelah menerima instruksi dari dompet kontrak pintar Anda.
Kontrak USDC membagi 1 USDC kita menjadi tiga transfer:
0,0022 USDC ke dompet biaya protokol kami (…608A)
0,0005 USDC ke dompet biaya 1inch (…1DE5)
Sisa 0,9973 USDC ke router Uniswap v4 (…Universal Router)
Router Uniswap v4 meneruskannya ke Pool Manager Uniswap v4 (kontrak tunggal yang mengelola semua pool v4).
Pool Manager mengeksekusi swap: USDC masuk → KTA keluar.
KTA diarahkan kembali melalui Aggregation Router 1inch, yang meneruskannya ke dompet kita (…0A5).
🧩 Cara mendekode transaksi SCW yang gagal
Sekarang kita memahami bagaimana swap smart-contract-wallet (SCW) bekerja — dan kita telah menelusuri perdagangan yang sukses — mari gunakan alat yang sama untuk memecahkan satu yang gagal.
Kita akan menggunakan kasus nyata lain: swap ETH → token di Ethereum yang gagal di dalam kontrak EntryPoint karena tidak ada cukup ETH untuk menutup baik swap maupun biaya gas.
Ok, jadi Anda melihat "Error" sebagai status swap Anda di aplikasi atau menerima notifikasi push bahwa swap Anda gagal. Apa yang Anda lakukan?
Langkah 1 — Periksa detail pesanan di goodcryptoX
Berikut yang Anda lihat dalam kasus ini:

Menggunakan kerangka kerja yang telah kami kembangkan tadi, Anda cepat menyadari:
Status swap adalah
Error(gagal?)Tidak ada pesan kesalahan yang ditampilkan (itu tidak biasa)
Ada biaya gas (sampai ke blockchain?)
Ada rute yang ditampilkan (simulasi berhasil?)
Ada tautan ke penjelajah blockchain (Saya bisa memeriksa tx di blockchain!).
Mari periksa intuisi Anda:
Kata
Errorstatus berarti swap gagalHarus ada pesan kesalahan yang bisa dibaca manusia (diterjemahkan dari mentah) dan yang mentahnya. Tidak adanya pesan kesalahan jelas berarti ada sesuatu yang tidak biasa terjadi
Biaya gas memang berarti bahwa transaksi telah mencapai blockchain dan beberapa aktivitas on-chain telah terjadi (yang mengkonsumsi gas)
Rute mengonfirmasi bahwa simulasi transaksi lulus dan menghasilkan jalur yang jelas untuk eksekusi
Tautan penjelajah mengonfirmasi transaksi mencapai blockchain — bahkan jika gagal. Kita sebaiknya membuka salah satunya dan menyelidiki lebih lanjut
Langkah 2 – Buka transaksi di penjelajah blockchain
Anda mengetuk tautan Etherscan untuk melihat apa yang terjadi:

Sekilas, hal-hal menjadi semakin membingungkan:
Status mengatakan ✅ Success — tunggu, apa?!
Tapi kita sudah tahu swap tidak berhasil
Di bawah bidang “To” (EntryPoint), ada pesan kecil berwarna kuning:
“Although one or more errors occurred [execution reverted] Contract Execution Completed”
Jadi apa yang sebenarnya terjadi di sini?
Ingat alur transaksi SCW yang kita bahas sebelumnya:
bundler membungkus swap Anda ke dalam sebuah
UserOperation(sebuah paket data dengan logika swap Anda)lalu mengirimkannya ke kontrak pintar EntryPoint
EntryPoint memvalidasinya (memeriksa saldo Anda, tanda tangan, dan nonce)
jika semuanya benar, ia mengeksekusi niat Anda — memanggil router, pool, dan memindahkan token.
Dari perspektif blockchain, seluruh hal ini tampak seperti "bundler mengirim data ke EntryPoint".
Dalam istilah SCW, langkah ini disebut transaksi luar .
Dan transaksi itu memang berhasil: data dikirim, dan EntryPoint mulai menjalankan logika internalnya. Maka terlihat ✅ Success di bagian atas.
Namun penjelajah, bersikap sopan, tetap memberi tahu Anda bahwa sesuatu gagal di dalam EntryPoint dengan catatan kuning kecil itu. Bagi penjelajah, kegagalan internal itu tidak cukup untuk menandai transaksi sebagai gagal.
Sekarang, detail lain muncul di tab Overview:
Sekitar $6 nilai ETH dikirim dari dompet Anda ke EntryPoint (prefund gas).
Hanya $2.3 nilai ETH yang diganti ke bundler.
Dan biaya transaksi yang ditunjukkan di bagian atas lebih rendah lagi — sekitar $2.15.
Sekilas, angka-angka ini tampak tidak cocok. Mari uraikan itu dulu sebelum melanjutkan penyelidikan
Langkah 3 – Memahami perbedaan gas
Berikut rinciannya:
SCW → EntryPoint (~$6): Ini adalah prefund gas. EntryPoint selalu mengumpulkan lebih dari yang dibutuhkan untuk memastikan UserOp Anda dapat berjalan.
EntryPoint → Bundler (~$2,3): Ini adalah penggantian biaya gas yang sebenarnya. Itu adalah jumlah nyata yang Anda bayarkan untuk upaya gagal ini.
Biaya Transaksi (~$2,15): Ini adalah apa yang dibelanjakan bundler untuk mengirim UserOp Anda ke EntryPoint. Ini lebih rendah karena EntryPoint sendiri menggunakan gas ekstra saat memvalidasi dan mengganti bundler — biaya ekstra itu dibebankan kepada Anda.
Aturan praktis:
👉 Biaya gas sebenarnya Anda selalu adalah penggantian EntryPoint ➜ Bundler (bukan “Biaya Transaksi” yang ditampilkan di bagian atas)
Dan selisih antara apa yang Anda prefund ($6) dan apa yang diganti ($2,3) tidak hilang. Itu tetap di EntryPoint sebagai deposit Anda, yang akan otomatis diterapkan pada transaksi Anda berikutnya.
Langkah 4 – Periksa tab AA Transactions
Di penjelajah, Anda melihat sebuah tab AA Transactions (AA = Account Abstraction). Di sinilah aktivitas dompet kontrak pintar ditampilkan, karena SCW berjalan di Account Abstraction (ERC-4337).
Mari beralih ke tab itu dari Overview:

Di sini akhirnya Anda melihat UserOperation kami tercantum sebagai entri terpisah di dalam transaksi luar bundler:
Kolom "From" sekarang menunjukkan alamat dompet kami, mengonfirmasi ini adalah operasi kami.
Ada AA Txn Hash terpisah, berbeda dari hash transaksi luar. Mengapa?
Txn Hash luar milik transaksi Bundler->EntryPoint yang memuat UserOp Anda (dan bisa saja memuat banyak UserOp dari berbagai pengguna).
AA Txn Hash adalah pengenal unik untuk UserOperation Anda di dalam bundel itu.
Ini adalah gagasan kunci dari bundling:
Seorang bundler dapat mengemas banyak UserOp menjadi satu transaksi.
Setiap UserOp mendapatkan AA Txn Hash sendiri, sehingga dapat dilacak secara terpisah di dalam bundel.
Dalam kasus kami, karena ini adalah transaksi lama (lebih dari 400 hari yang lalu), SCW masih jarang dan bundel hanya berisi UserOp kami — itulah mengapa tab menunjukkan “AA Transactions (1).” Dalam transaksi yang lebih baru, Anda sering akan melihat banyak UserOp digabung dalam satu bundel.
Di tampilan ini, Anda juga akan melihat sebuah (!) di samping AA Txn Hash Anda — konfirmasi bahwa swap Anda tidak dieksekusi.
Langkah berikutnya adalah mengklik AA Txn Hash. Itu membuka halaman khusus UserOperation, di mana Anda akan melihat rincian penuh dari upaya swap kami — biaya, transfer, dan di mana kegagalannya.
Langkah 5 – Buka halaman detail AA Transaction
Mengklik AA Txn Hash membawa Anda ke halaman detail khusus untuk UserOperation Anda:

Di sini Anda akhirnya dapat melihat upaya swap kami yang sebenarnya dengan jelas:
Status: x Fail (tidak ambigu kali ini)
Dari: alamat dompet kontrak pintar Anda
Biaya Transaksi AA: ~0,00231 ETH ($2,31). Ini adalah biaya gas nyata yang Anda bayarkan — penggantian yang dikirim ke bundler.
Transaksi internal: satu transfer ~0,00145 ETH ($6,36) dari SCW Anda ke EntryPoint (prefund gas). Tidak ada transfer lain yang terjadi, yang mengonfirmasi swap itu sendiri tidak pernah dieksekusi.
Bundle Txn Hash: juga ditampilkan, menghubungkan kembali ke transaksi luar bundler.
Halaman ini akhirnya sesuai dengan intuisi Anda: ini adalah transaksi nyata — UserOperation yang mewakili upaya swap Anda.
Itu hampir mengakhiri penyelidikan kita. Tetapi karena kita sudah sampai sejauh ini, mari juga klik pada Internal Txns.
Langkah 6 – Periksa tab Internal Transactions
Beralih ke tab Internal Txns di dalam tampilan AA Transaction:

Di sini Anda melihat tindakan langkah demi langkah yang EntryPoint coba lakukan atas nama Anda:
✅ Transfer dari SCW Anda → EntryPoint (~0,00145 ETH, ~$6,36) = prefund gas. Ini berhasil.
❌ Execute dari SCW Anda → Uniswap Universal Router (~0,002 ETH) = upaya swap. Ini gagal.
Rincian ini menjelaskan kegagalan:
Anda berhasil mengirim ETH ke EntryPoint sebagai prefund gas.
Tetapi ketika EntryPoint mencoba meneruskan ETH ke Uniswap untuk swap, upaya itu gagal.
Untuk rincian paling mendalam, buka tab Logs.
Langkah 7 – Periksa tab Logs
Klik pada Logs (3):

Di sini Anda akan menemukan tiga peristiwa kunci:
Deposited → mengonfirmasi bahwa prefund gas Anda diterima oleh EntryPoint.
BeforeExecution → menunjukkan bahwa EntryPoint mulai memproses UserOperation Anda.
UserOperationEvent →
success: False— catatan kanonik on-chain bahwa UserOp Anda gagal.
Apa yang sebenarnya terjadi (menggabungkannya semua)
Jenis kegagalan ini spesifik untuk swap dengan SCW di EVM di mana inputnya adalah token native (ETH, BNB, MATIC…).
Kesenjangan: baik bundler maupun EntryPoint tidak memeriksa apakah Anda memiliki cukup token native untuk menutup baik prefund gas maupun swap sekaligus. Mereka hanya memeriksa ini secara terpisah — “cukup untuk gas?” dan “cukup untuk swap?”. Itulah mengapa simulasi lolos.
Kami telah membangun pengaman di aplikasi untuk kasus-kasus ini, memperingatkan Anda di antarmuka bahwa gas mungkin tidak cukup. Tetapi karena simulasi terlihat baik, Anda masih bisa melanjutkan.
Setelah Anda mengonfirmasi, bundler mengirim UserOperation Anda ke EntryPoint.
EntryPoint mengambil sekitar $6 nilai ETH sebagai prefund.
Ketika ia mencoba mengeksekusi swap, tidak ada cukup ETH tersisa untuk menutup baik swap dan prefund pada saat yang sama.
Panggilan swap dibatalkan (reverted) di dalam EntryPoint.
Anda tetap membayar sekitar $2,3 untuk gas (penggantian ke bundler).
Sisa sekitar $3,7 tidak terpakai tetap di EntryPoint sebagai deposit Anda, yang akan digunakan secara otomatis pada transaksi Anda berikutnya.
Last updated