Di dalam Ethereum, ada beberapa perbedaan transaksi yang perlu diketahui. Salah satunya adalah Transaksi Internal (Internal Transactions). Transaksi Internal ini pada dasarnya sama seperti transaksi Ethereum seperti biasa.
Yang membedakan, jika dilihat di beberapa block exploler seperti Etherscan, detail transaksi tersebut akan diletakkan secara terpisah. Pada tab tersendiri di kolom Transaksi Internal. Coba anda perhatikan transaksi ini, dan coba perhatikan gambar dibawah ini:
Seperti yang bisa kita lihat, pada transaksi tersebut detail transaksi yang menunjukkan proses tranfer pada address penerima termaksud, diletakkan secara terpisah. Tidak seperti biasanya, karena detail transaksi itu dipisah dan diletakkan pada kolom Transaksi Internal (lihat yang ditandai warna merah).
Transaksi itulah yang disebut dengan Transaksi Internal di dalam Ethereum. Sekilas, transaksi tersebut mungkin akan dipandang transaksi biasa saja. Memang transaksi itu berlaku sama seperti transaksi biasanya.
Jika transaksi itu berjalan sukses, dan sudah mendapat sekian jumlah konfirmasi di jaringan, maka tentu saja transaksi itu sudah diterima oleh penerima transaksi. Artinya, ya benar-benar transaksi itu berjalan sukses. Berbeda jika transaksi memberikan output gagal (failed), maka tentu saja sejumlah dana yang dikirimkan tidak akan sampai ke address penerima.
Dimana letak masalah Transaksi Internal?
Seperti yang sudah disinggung diatas, transaksi internal berlaku sama seperti halnya transaksi Ethereum biasanya. Transaksi Internal tersebut bukanlah juga dimaknai transaksi kirim token. Transaksi itu adalah transaksi untuk mengirim sejumlah ETH. Maka yang diterima oleh penerima jelas tetap sejumlah ETH yang telah dikirim tersebut.
Transaksi Internal ini di sepanjang tahun 2016-2017 kerap banyak digunakan para pengguna Ethereum. Namun sayangnya, transaksi seperti ini bisa membuat penerima kerepotan, jika penerima transaksi menggunakan Address dari bursa kripto.
Bagaimana bisa akan bermasalah? Bukan bermasalah, hanya saja, transaksi itu jadi tidak terbaca di browser block expoler Ethereum tertentu.
Bursa kripto, umumnya akan melakukan tracking transaksi masuk / transaksi keluar dengan membaca di browser block exploler. Karena Transaksi Internal tersebut diletakkan secara terpisah, masih banyak bursa kripto yang tidak bisa melakukan tracking untuk transaksi itu. Sehingga transaksi nampak seolah-olah belum masuk.
Nah… sudah mengerti bukan bagaimana masalahnya? Namun perlu diingat, pada dasarnya hal ini bukan sebuah masalah pada transaksi itu. Jika penerima transaksi menggunakan Address dari pihak bursa kripto, yang perlu dilakukan hanyalah menghubungi support bursa itu, tidak ada hal lain.
Pastikan dengan memberikan detil transaksi, seperti TX ID, posisi saldo pada address terkirim saat itu dengan merujuk url address yang bersangkutan, kepada pihak support bursa kripto. Biasanya proses itu akan membutuhkan sekian waktu untuk mengkreditkan pada akun wallet anda di layanan bursa itu.
Jika Demikian, apa itu Transaksi Internal?
Transaksi Internal pada dasarnya sama seperti transaksi ETH seperti biasa, hanya saja transaksi tersebut dieksekusi dengan jalan berbeda. Transaksi Internal, dalam prosesnya dieksekusi menggunakan perintah khusus kepada sebuah address contract yang dimiliki oleh pengirim, kepada address tertuju.
Singkat kata, pengirim dapat menggunakan fungsi opcode “CALL”, kepada address lain yang dimiliki oleh pengirim, untuk memproses transaksi. Jadi, transaksi itu dijalankan dengan memberikan perintah kepada address lain untuk mengirimkan sejumlah dana itu.
Ada sejumlah fungsi opcode lain selain call, misalnya seperti CREATE, CALLCODE, DELEGATECALL, SELFDESTRUCT, dan lain-lain.
Di dalam Ethereum, jika pengguna mengirim transaksi untuk TOKEN, umumnya akan menggunakan perintah CALL tersebut. Oleh sebab itu, sumber referensi yang ada untuk menjelaskan hal ini biasanya akan lebih banyak berelasi dengan Transaksi Internal DAO.
Yang cukup disayangkan, referensi akan hal ini bahkan tidak sekalipun disinggung Vitalik Butterin di dalam Whitepapernya. Mengapa bisa demikian? Coba saja ditanyakan sendiri. Hehehe.
Banyak di sebagian besar referensi luar, yang menyebut varian transaksi ini “tidak dipublish di dalam Blockchain”. Sebetulnya hal ini justru keliru, karena akan menimbulkan asumsi yang salah. Jika sebuah transaksi bisa dieksekusi tanpa dipublish di dalam blockchain Ethereum, bagaimana bisa meyakinkan bahwa transaksi itu valid?
Yang benar, Transaksi Internal itu tetap dipublish di dalam Blockchain. Hanya saja browser block exploler akan berbeda menampilkan detil transaksi tersebut. Hal itu bisa dilihat seperti pada block exploler Ethereum seperti Etherscan, dengan memisah detil transaksi internalnya.
Mari kita lanjutkan dengan menggunakan analogi sederhana. Proses transaksi Internal kurang lebihnya akan berjalan seperti ini:
~ Budi memiliki 2 Address, Address A dan B
~ Budi hendak mengirim 1 ETH kepada Address C
Maka, saat mengirim transaksi, Budi menggunakan address A, lalu mengisi dengan sebuah perintah kepada address B, untuk mengirim 1 ETH pada address C. Sehingga, address B lah yang akan mengeksekusi transaksi pengiriman 1 ETH itu kepada Address C.
Masih bingung? Saya pikir begitu, hehehe. Jangan khawatir. Mari kita lanjutkan.
Untuk benar-benar memahami, pertama, kita perlu mengerti beberapa hal berikut:
- Ethereum adalah account based. Hal ini berbeda dengan Bitcoin yang menggunakan UTXO (Unspent Transaction Output). Artinya, Ethereum ini berlaku seperti anda memiliki akun rekening pada sebuah bank tertentu.
External Address dan Internal Address Di Ethereum
Nah, sekarang, kita perlu melihat lebih jauh. Bahwa sebenarnya, ada dua kategori address Ethereum yang berbeda:
- External Address
- Internal Address
External Address ini berlaku seperti anda membuat address Ethereum baru, melalui beberapa layanan seperti MyEtherwallet atau yang lainnnya. Makanya tipikal address ini disebut sebagai external Address, bisa digunakan dan dibuat oleh siapapun.
Kembali pada hal penting diatas, bahwa Ethereum berbasis akun, sama seperti pada akun rekening bank. Maka ekternal tersebut memang layaknya sebuah akun untuk publik. Pengguna luas, atau publik, bisa mengakses blockchain Ethereum itu dari luar, dengan memiliki address yang berfungsi seperti sebuah akun bank itu.
Dan hal ini berbeda dengan bitcoin. Di dalam Bitcoin, tidak berlaku berbasis akun, selain hanya menggunakan UTXO saja. Kepemilikan sejumlah Bitcoin pada address pengguna, hanya berlaku ketika pengguna masih memiliki akses untuk sejumlah BTC yang belum ditransaksikan saja. Artinya, jika sejumlah BTC itu sudah ditransaksikan, maka tidak dapat mengakses sejumlah BTC tersebut kembali. Jelas, karena aksesnya sudah berpindah ke orang lain, pada address berbeda yang telah ditujukan dalam transaksi.
External Address inipun berfungsi sama, pemiliknya sudah bisa menerima transaksi, atau mengirim sejumlah ETH kepada address lainnya, tanpa terkecuali.
Internal Address, baru akan didapatkan, jika pengguna tertentu telah pernah membuat Smart Contract melalui blockchain Ethereum. Jika pengguna membuat smart contract, nantinya akan mendapat sebuah Internal Address. Address ini akan digenerate dan berfungsi sebagai sebuah pointer khusus untuk bisa menjalankan program (sebut Dapps) di dalam ethereum.
Karena pengguna itu sudah membuat Smart Contract, maka address hasil generate saat membuat Smart Contract akan berfungsi seolah sebagai sebuah bagian integral di dalam blockchain Ethereum. Maka nantinya melalui Internal Address inilah fungsi Call yang telah disebutkan diatas dapat dilakukan.
Namun, agar perintah fungsi call ini bisa dilakukan, maka untuk mengirim transaksi haruslah tetap melalui eksekusi dengan Address External. Mengapa demikian? Jelas, karena Ethereum ini berbasis akun, dan akun tersebut merujuk pada akun eksternal (baca: External Address).
Kesimpulan yang bisa ditarik dari sini, kita perlu untuk bisa membedakan secara pasti, bahwa sebenarnya ada 3 jenis transaksi yang berbeda di dalam Ethereum:
- Transaksi standar / regular
- Transaksi Internal
- Transaksi Token
Saya pikir, untuk transaksi jenis token yang dibuat dari Ethereum sudah cukup banyak yang mengerti. Sehingga tidak perlu dijabarkan lebih jauh.