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

Dipublikasikan Pada 21 Mar 2023Diperbarui Pada 13 Okt 2024Baca 7 mnt60

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 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. Misalnya:

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 di bawah ini (node hijau):

CT-verifymerkletree-v1-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.

  • Contoh: Lihat gambar di atas dan teks json 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 json data jalur merkle tree:

{ "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }

Langkah-Langkah Verifikasi

  1. Untuk memverifikasi apakah saldo aset akun Anda telah dimasukkan sebagai daun Merkle, masuk ke akun OKX Anda, pilih Aset dan kunjungi Audit untuk melihat audit terkini, lalu pilih Lihat Detail untuk melihat data audit Anda

    CT-verifymerkletree-v1-2

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

  2. Anda juga dapat memverifikasi aset secara manual di Merkle tree dengan mengikuti serangkaian langkah yang ada di dalam panduan kami. Dapatkan data yang Anda perlukan untuk verifikasi manual dengan memilih Salin Data

    CT-verifymerkletree-v1-3

    Pilih Salin Data untuk Proses Verifikasi Manual

  3. Setelah memilih Salin Data, buka editor teks (misalnya, notebook), lalu tempelkan dan simpan String json sebagai file json.

Langkah-Langkah Operasional:

Mac:

  1. Buka terminal, masukkan perintah touch merkle_proof_file.json, lalu file json akan dibuat. File ini disimpan di desk sistem secara default.

  2. 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:

  1. 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:
    { "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }

  2. Unduh alat verifikasi sumber terbuka OKX (MerkleValidator)

  3. Simpan alat verifikasi sumber terbuka OKX (MerkleValidator) dan file data (merkle_proof_file.json) di dalam folder yang sama. Dalam skenario ini, alat dan file data ditempatkan dalam folder Unduhan, dan diberi nama proof-of-reserves, seperti yang ditunjukkan di bawah ini:

    CT-verifymerkletree-v1-4
  4. Buka aplikasi terminal (untuk Mac: Terminal, sedangkan Windows: Command Prompt)

  5. Jalankan perintah dan temukan direktori folder yang diunduh. Dalam skenario ini, masukkan perintah: cd ~/Downloads/proof-of-reserve

  6. Kemudian, ketik dan konfirmasi perintah di bawah ini untuk memulai verifikasi: Mac: ./MerkleValidator --merkle_proof_file merkle_proof_file.json Windows: MerkleValidator.exe --merkle_proof_file merkle_proof_file.json Catatan: Jika Anda menggunakan Mac dan menjumpai pesan "tidak dapat membuka alat karena pengembang tidak dapat diverifikasi", silakan membuka Pengaturan Sistem -> Privasi & Keamanan -> Keamanan -> Pilih App Store dan pengembang yang teridentifikasi pada bagian Keamanan untuk Mengizinkan [alat]

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

    CT-verifymerkletree-v1-6

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

    CT-verifymerkletree-v1-5
  8. 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