UTXO vs Account/Balance vs EUTXO

Dipublikasikan pada tanggal 18 Jan 2022
Disadur oleh andre cahyadi (@prosperaan)
Untuk komunitas Cardano Indonesia
Referensi:
(Cardano’s Extended UTXO accounting model – built to support multi-assets and smart contracts - IOHK Blog)
(Cardano’s Extended UTXO accounting model – built to support multi-assets and smart contracts (part 2) - IOHK Blog)

Model ledger accounting di dunia blockchain pada umumnya terbagi menjadi 2 jenis:

a. UTXO-based blockchain (Bitcoin)

b. Account/Balance based blockchain (Ethereum, dll)

Namun, Cardano sendiri menggabungkan model UTXO dari Bitcoin dan kemampuan Ethereum untuk handle smart contract menjadi Extended UTXO (EUTXO) .

Berikut perbedaan antara ketiga model tersebut.

a. UTXO (Unspent Transaction Output)

Transaksi di dalam UTXO didefinisikan sebagai aksi membuka kunci dari output sebelumnya, untuk membuat output yang baru (the action that unlocks previous outputs, and creates new ones).

Konsep UTXO sama seperti penggunaan uang cash .

Misalkan di dalam dompet ada total uang sebanyak 50rb IDR.

Dari 50rb IDR terdiri dari:

  • 1 lembar 20rb IDR
  • 2 lembar 10rb IDR
  • 1 lembar 5rb IDR
  • 2 lembar 2rb IDR
  • 1 keping logam 1rb IDR

Masing – masing pecahan uang tersebut adalah UTXO.

Total saldo yang ada (ditunjukkan) di dompet (wallet address) adalah jumlah dari semua pecahan uang (UTXO).

Dari contoh 50rb IDR di atas, dapat juga terdiri dari:

  • 1 lembar 10rb IDR
  • 10 lembar 2rb IDR
  • 4 lembar 5rb IDR

Berapapun banyaknya kombinasi pecahan uang (UTXO) yang ada (ditunjukkan) di dompet (wallet address), tetap menunjukkan total saldo yang sama.

Konsep Change (Uang Kembalian)

Kembali ke konsep penggunaan uang cash, setiap pecahan uang (UTXO) yang ada (ditunjukkan) di dompet (wallet address) berasal dari transaksi yang sudah dilakukan sebelumnya (ada historisnya).

Contoh dari 50rb IDR di atas yang terdiri dari:

  • 1 lembar 20rb IDR (kembalian dari makan di restoran) → output UTXO 1
  • 2 lembar 10rb IDR (kembalian dari jajan bubble tea) → output UTXO 2
  • 1 lembar 5rb IDR (kembalian dari mini market) → output UTXO 3
  • 2 lembar 2rb IDR (kembalian dari mini market) → output UTXO 4
  • 1 keping logam 1rb IDR (kembalian dari parkir) → output UTXO 5

Contoh Use Case: Beli indomie di minimarket seharga 3rb IDR

Misal, bayar dengan 1 lembar 50rb IDR (input UTXO), lalu dari kasir akan memberikan kembalian dalam beberapa kombinasi pecahan uang, misalnya:

  • 2 lembar 20rb IDR → output UTXO 1
  • 1 lembar 5rb IDR → output UTXO 2
  • 1 lembar 2rb IDR → output UTXO 3

Tidak mungkin uang 1 lembar 50rb ini dirobek dan dipecah menjadi 3rb IDR.

Atau jika pakai contoh 50rb IDR yang terdiri dari: (output menjadi input)

  • 1 lembar 20rb IDR (kembalian dari makan di restoran) → input UTXO 1
  • 2 lembar 10rb IDR (kembalian dari jajan bubble tea) → input UTXO 2
  • 1 lembar 5rb IDR (kembalian dari mini market) → input UTXO 3
  • 2 lembar 2rb IDR (kembalian dari mini market) → input UTXO 4
  • 1 keping logam 1rb IDR (kembalian dari parkir) → input UTXO 5

Untuk beli indomie di minimarket seharga 3rb IDR tidak mungkin uang lembaran 20rb / 10rb / 5rb dirobek dan dipecah menjadi 3rb. Pasti akan ada kembalian dalam pecahan lain/output UTXO lainnya.

(Bisa belanja dengan 1 lembar 2rb & 1 keping logam 1rb, namun ini perumpamaan untuk transaksi crypto dan di crypto tidak ada fisiknya =D).

Unspent & Spent Transaction

Secara konsep, dalam setiap transaksi, seluruh UTXO yang ada di wallet address akan di-consume terlebih dahulu (input UTXO), kemudian change/kembalian (output UTXO) dikirim balik ke wallet address.

Di transaksi berikutnya, change/kembalian ini menjadi input UTXO yang baru; di-consume; lalu terima change/kembalian lagi yang baru sebagai output UTXO, dan seterusnya.

Secara teknis, cara kerjanya adalah sebagai berikut:

1) Output Transaksi

Output transaksi terdiri dari wallet address dan nilai.

Wallet address dianggap sebagai gembok yang terkunci dan hanya signature dari wallet address saja yang dapat membuka kuncinya.

2) Input Transaksi

Input Transaksi terdiri dari pointer dan signature.

Pointer menunjuk kepada output transaksi dan signature adalah kunci untuk membuka gembok (wallet address) tersebut.

Ketika gembok sudah dibuka, maka output dapat digunakan sebagai input untuk transaksi yang baru (ditandai sebagai ‘spent’ ). Hasilnya, output baru yang belum digunakan dan terkunci (ditandai sebagai ‘unspent’ ).

Sebuah UTXO hanya dapat di-consume satu kali (1x), yang berarti satu output hanya dapat di-spent sebagai satu input.

Ringkasan:

a. Sebuah utxo adalah output dari transaksi sebelumnya, yang dapat digunakan di transaksi berikutnya sebagai input.

b. UTXO bukan seperti rekening bank.

c. Total saldo adalah jumlah dari seluruh list UTXO yang dikontrol (di-tracking) oleh sebuah wallet address (untuk wallet address sendiri atau disebut juga public address, dikontrol dengan private key atau dengan smart contract)

d. Coin (ADA), native tokens, NFTs disimpan dalam bentuk list UTXO.

e. Setiap transaksi akan meng-consume seluruh UTXO yang ada, untuk kemudian membuat UTXO – UTXO yang baru.

f. Konsep UTXO ini menawarkan kelebihan dalam hal privasi dan skalabilitas. Setiap node me-maintain record berisi list subset dari semua UTXO di jaringan (UTXO Set atau Chainstate). Tidak ada informasi total saldo yang tersimpan. Ketika ada block ditambahkan, chainstate juga akan ter-update. Setiap node di jaringan masing - masing memiliki copy Chainstate yang sama.

b. Account/Balance

Dalam account/balance, asset – asset direpresentasikan sebagai saldo dalam akun (wallet address) dan akan ter-update dalam setiap transaksi.

Model ini sama seperti rekening bank dimana saldo akan bertambah ketika ada transaksi masuk dan berkurang ketika transaksi keluar.

Contoh:

  • Akun Alice memiliki 100 ETH
  • Akun Bob memiliki 50 ETH
  • Alice mengirim 30 ETH ke Bob
  • Akun Alice berkurang menjadi 70 ETH dan Akun Bob bertambah menjadi 80 ETH

Ringkasan:

a. Model account/balance sama dengan cara kerja rekening bank.

b. User memilik akun (wallet address) yang berisi saldo asset (coin, native tokens, NFTs) dan dikontrol dengan private key atau dengan smart contract.

c. Dengan model ini, dimungkinkan untuk spending secara partial (tidak seperti UTXO).

d. Tidak ada konsep ‘change’ (kembalian), karena saldo langsung ter-update.

e. Dalam hal privasi tidak sekuat model UTXO, karena informasi setiap saldo akun disimpan secara global oleh masing – masing node di jaringan.

c. EUTXO

Model UTXO Bitcoin saja tidak cukup untuk Cardano, karena Cardano didesain untuk kebutuhan lain yang lebih dari sekedar memproses pembayaran. Dengan dibutuhkannya kemampuan untuk handle smart contract, muncullah istilah “extended” dari UTXO, sehingga disebut EUTXO.

Solusi EUTXO ini memiliki 2 tambahan fungsi yang tidak didukung oleh model UTXO biasa:

  1. Kemampuan untuk me-maintain contract state

  2. Kemampuan untuk meng-enforce contract code yang sama selama urutan transaksi (kontinuitas)

Selain itu, EUTXO memiliki kelebihan yakni fees atau biaya yang dibutuhkan untuk melakukan transaksi dapat diprediksi secara tepat terlebih dahulu sebelum eksekusi transaksi.

Bagaimana EUTXO meng-extend UTXO?

Dengan menambahkan data input custom (selain nilai) ke dalam output transaksi -– lihat penjelasan output transaksi UTXO di atas; yang mengizinkan lebih banyak gembok terkunci yang hanya bisa dibuka apabila suatu kondisi telah terpenuhi, sebelum output dapat digunakan sebagai input .

Dengan kata lain, selain dengan public keys (hashes) dari wallet address sebagai gembok terkunci dan signature sebagai kuncinya, EUTXO memungkinkan tambahan logic lain dalam bentuk script. Logic inilah yang akan mengecek transaksi dan data yang terkandung di dalamnya, sebelum diputuskan berhak atau tidaknya transaksi ini menggunakan input transaksi yang ada. Hal ini menjadi komponen utama dalam implementasi smart contract di Cardano.

2 Likes