Bagaimana Cara Memverifikasi Aset di Merkle Tree OKX? (Merkle Tree V2)

Dipublikasikan Pada 21 Mar 2023Diperbarui Pada 23 Des 2024Baca 8 mnt26

Berlaku untuk Periode Audit setelah Maret 2023

Apa Itu Merkle Tree?

Merkle Tree (atau Hash Tree) adalah struktur data, yang biasanya berupa pohon biner, dan menggunakan fungsi yang telah ditentukan sebelumnya (terdefinisi) untuk menghitung nilai hash node dari bawah ke atas, tepatnya hingga node akar puncak dari pohon tersebut.

Informasi Node

Setiap node pohon menyimpan informasi berikut:

  • Nilai hash node

  • Jumlah mata uang kripto pengguna yang ditangkap oleh snapshot audit (misalnya BTC, ETH, dan USDT)

nilai hash,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}

Aturan Hash - Node Daun (kecuali node padding)

hash = SHA256(nonce + saldo)

OKX akan menetapkan satu nonce unik untuk setiap pengguna, yang dapat ditemukan di halaman audit pengguna; saldo adalah string json yang terdiri dari aset dan jumlah milik pengguna yang ditangkap oleh snapshot audit, misalnya: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (CATATAN: harus menyingkirkan nol yang tertinggal dan mempertahankan presisi 8 desimal)

Node Induk

hash node induk = SHA256 (h1+h2+(jumlah BTC h1+jumlah BTC h2)+(jumlah ETH h1+jumlah ETH h2)+(jumlah USDT h1+jumlah USDT h2)+tinggi)

h1 = Hash dari node anak kiri milik node saat ini, h2 = Hash dari node anak kanan milik node saat ini, id_audit = ID audit saat ini, height = ketinggian node h1 (atau h2) Definisi tinggi: tinggi node daun bawah = 1, tinggi node induk = tinggi node anaknya + 1, node akar memiliki tinggi maksimum

Aturan Pemisahan Node

Untuk melindungi privasi pelanggan, OKX akan memisahkan atau membagi aset pengguna secara acak menjadi dua node, dengan rentang acak antara 0 dan 1. Misalnya, jika aset pengguna adalah: {"BTC": "10.2", "ETH": "4", "USDT": "5"} dan angka acaknya adalah 0,6, aset pengguna akan dibagi menjadi 60% dan 40%.

CT-web-POR-4

Selama generasi Merkle tree berikutnya, node daun yang dipisah atau dibagi akan diacak untuk didistribusikan ke posisi yang berbeda dalam pohon.

Aturan Node Padding

Untuk membuat Merkle tree yang utuh (pohon biner utuh), diperlukan 2^n node daun. Namun, data aktual mungkin tidak memenuhi persyaratan tersebut dan jumlah data juga mungkin bersifat ganjil. Dalam situasi semacam itu, jika node k tidak memiliki node saudara, maka satu node saudara k' akan dibuat secara otomatis sebagai node padding, sehingga hash(k')=hash(k), dan jumlah aset untuk semua mata uang akan ditetapkan menjadi 0. Contoh

Hash saldo
h1 {"BTC": 1, "ETH": 1,"USDT": 1}
h2 {"BTC": 1, "ETH": 2,"USDT": 3}
h3 {"BTC": 1, "ETH": 2,"USDT": 4}

Dalam contoh ini, node padding h4=h3,dan saldo yang disimpan di node adalah {"BTC": 0, "ETH": 0,"USDT": 0} seperti yang ditunjukkan pada Gambar 1 (node berwarna hijau):

CT-web-POR-5

Gambar 1

hash node induk = SHA256 (h1+h2+(jumlah BTC h1+jumlah BTC h2)+(jumlah ETH h1+jumlah ETH h2)+(jumlah USDT h1+jumlah USDT h2)+tinggi)

Jadi: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+tinggi)

Bagaimana Cara Memverifikasi bahwa Aset Anda Disertakan dalam Merkle Tree OKX?

Teori Verifikasi

Sesuai dengan definisi Merkle tree OKX, Anda dapat menghitung nilai hash node induk dari bawah ke atas berdasarkan node anak kiri dan kanannya, hingga Anda mendapatkan nilai hash node akar. Kemudian, Anda dapat membandingkan hasil penghitungan nilai hash node akar dengan yang Anda peroleh dari node akar jalur Merkle tree. Jika keduanya sama, maka verifikasinya berhasil, dan begitu pula sebaliknya. Misalnya: Lihat Gambar 1 dan teks yang ada di bawahnya. Berdasarkan node h3 milik pengguna sendiri dan node h4 yang merupakan saudaranya, maka hash node induknya (yaitu h6) dapat dihitung. Selain itu, mengingat bahwa node h5 merupakan saudara dari h6, maka node induk h7 juga dapat dihitung. Kemudian, selesaikan proses verifikasi dengan membandingkan nilai hash h7 dengan yang Anda peroleh dalam node akar jalur merkle untuk melihat apakah nilainya sama. Teks data jalur Merkle tree:

h7,3,{"BTC":"3","ETH":"5","USDT":"8"}
h6,2,{"BTC":"1","ETH":"2","USDT":"4"}
h5,2,{"BTC":"2","ETH":"3","USDT":"4"}
h4,1,{"BTC":"0","ETH":"0","USDT":"0"}
h3,1,{"BTC":"1","ETH":"2","USDT":"4"}
h2,1,{"BTC":"1","ETH":"2","USDT":"3"}
h1,1,{"BTC":"1","ETH":"1","USDT":"1"}

Catatan: OKX telah memperkenalkan snapshot aset bersih saat membuat Merkle tree. Dalam hal ini, utang (yaitu ekuitas negatif) akan dicatat di dalam snapshot jika pengguna memiliki aset pinjaman. Untuk mengetahui informasi selengkapnya, silakan lihat di sini.

Langkah-Langkah Verifikasi

1. Masuk ke akun OKX Anda, lalu buka Aset > Audit untuk melihat audit terkini, dan pilih Detail untuk melihat data audit Anda.

CT-web-POR-view audit details

Pilih Aset dan Lihat Detail untuk Memahami Data Audit dengan Lebih Baik

2. Anda juga dapat memverifikasi aset secara manual di Merkle tree dengan memilih Salin Data

CT-web-POR-copy data

Pilih Salin Data untuk Proses Verifikasi Manual

3. Buka editor teks (misalnya notebook), lalu tempelkan dan simpan String json sebagai file json.

Langkah-Langkah Operasional

Mac: Buka terminal, masukkan perintah touch merkle_proof_file.json, lalu file json akan dibuat. File ini disimpan di desk sistem secara default. Anda bisa membuka Finder dan mencari merkle_proof_file.json untuk menemukan file ini. Buka file json tersebut, tempelkan data yang telah disalin, lalu simpan.

Windows: Klik dua kali untuk membuka editor teks (misalnya: notebook), lalu tempelkan datanya dan simpan sebagai file json. Dalam skenario ini, file tersebut kami beri nama "merkle_proof_file.json". Kemudian, teks json data jalur merkle tree ditampilkan seperti di bawah ini: { "hash": "7e5a588806ff1de23f81e3a092860de43367fb4ea5503a53d95a5bc36d77e0c2", "nodes": [ { "balances": { "BTC": "0.49997703", "ETH": "0", "USDT": "16.62437479" }, "hash": "4087972e6b4bd3897c19f76b94b27db8eaf19f0d27d1b73e18297c18c850c3c1" }, { "balances": { "BTC": "0.40002297", "ETH": "0", "USDT": "12.18752303" }, "hash": "da14bd34c8d933781b8ec20a7e16109d0d650306b049da52c755437c4f7ec5e5" } ], "nonce": "b6f6ea7584742839791ab923f4f1980d7ca3ff7c5d3f3fd9cc2a18c598503553", "totalBalances": { "BTC": "0.9", "ETH": "0", "USDT": "28.81189782" } }

4. Unduh file "Full Merkle Tree” di bawah Laporan Liabilitas dan buka zip file yang telah diunduh untuk mendapatkan "File Merkle Tree Lengkap".

CT-web-POR-7

Pilih Unduh untuk Mendapatkan Laporan

  1. Unduh alat verifikasi sumber terbuka OKX (MerkleValidator)

  2. Simpan alat verifikasi sumber terbuka OKX (MerkleValidator) dan dua file data tersebut (merkle_proof_file.json, full-liabilities-merkle-tree.txt) di dalam folder yang sama. Dalam skenario ini: kami menempatkan alat dan file data di dalam Unduh, tepatnya dengan nama proof-of-reserves, seperti yang ditampilkan di bawah ini:

CT-web-POR-8

7. Jalankan perintah dan temukan direktori folder yang diunduh. Dalam skenario ini, masukkan perintah: cd ~/Downloads/proof-of-reserve 8. Kemudian, ketik dan konfirmasi perintah di bawah ini untuk memulai verifikasi:

Mac ./MerkleValidator --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json

Windows MerkleValidator.exe --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json

Catatan: Jika Anda menggunakan Mac dan menjumpai pesan "tidak dapat membuka alat karena pengembang tidak dapat diverifikasi", silakan buka Preferensi Sistem > Keamanan&Privasi > Umum > Klik kunci untuk melakukan perubahan > Izinkan aplikasi yang diunduh dari App Store dan pengembang yang teridentifikasi

9. Cek hasilnya Jika verifikasi berhasil, maka hasil Validasi jalur merkle tree berhasil akan ditampilkan seperti di bawah ini:

CT-web-POR-9

Jika verifikasi gagal, maka hasil Validasi jalur merkle tree gagal akan ditampilkan seperti di bawah ini:

CT-web-POR-10

10. Selain itu, Anda juga dapat merujuk ke kode Alat verifikasi sumber terbuka OKX (MerkleValidator) serta definisi merkle tree OKX , dan membuat program secara mandiri untuk memverifikasi bahwa aset Anda telah disertakan dalam merkle tree yang dibangun dari snapshot audit, menggunakan data jalur merkle tree yang diperoleh di langkah 2.