left-back

Apa itu Merkle Tree?

Pengguna Bitget yang terhormat,

Merkle Tree adalah struktur data, juga dikenal sebagai Hash Tree. Merkle tree menyimpan data dalam node daun dari struktur tree, dan dengan melakukan hashing data secara bertahap sampai ke node root teratas, setiap perubahan dalam data node daun akan diteruskan ke node dengan tingkat yang lebih tinggi dan akhirnya ditampilkan sebagai perubahan pada root dari tree tersebut.

1. Tugas - tugas dari Merkle Tree
- Zero-knowledge proof
- Memastikan imutabilitas data
- Memastikan privasi data

2. Definisi Bitget Limited Merkle Tree
2.1 Informasi Node
Informasi yang disimpan dalam tree node meliputi:
1. hash value

2. jumlah koin yang terdapat dalam snapshot aset pengguna (BTC, ETH, USDT sebagai contoh)

2.2 Aturan Hash
Leaf nodes (kecuali padding nodes)

- encryptUid: encrypted UID of the user
- nonce: a unique value assigned to each user
- balances: json string composed of the number of coins in the user's asset snapshot, (note: remove the invalid 0 at the end and keep precision of 8 bits)
- For example: {"BTC":1.763,"ETH":362,"USDT":1077200.2274}


Parent node

- h1: hash of the left child node of the current node,
- h2: hash of the right child node of the current node,
- level: where the parent node lies in

Definisi tree node level: Merkle Tree yang lengkap ( full binary tree) membutuhkan 2^n data leaf node, tingkat leaf node = n + 1, tingkat parent node = tingkat child node - 1, tingkat root node = 1, tingkat leaf node adalah tingkat maksimu

Aturan Padding node
Merkle Tree yang lengkap ( full binary tree) membutuhkan 2^n data leaf node, tetapi jumlah data yang sebenarnya mungkin tidak mencukupi dan mungkin saja tidak wajar. Dalam kasus seperti itu, jika sebuah node k tidak memiliki sibling node, maka auto padding menghasilkan sibling node k', dan hash(k') = hash(k), dan jumlah koin dari node k' diatur menjadi nol.
Sebagai contoh:


Kemudian padding node hash4 = hash3, saldo yang tersimpan adalah {"BTC": 0, "ETH": 0, "USDT": 0}, seperti yang ditunjukkan pada node yang ditandai pada Gambar satu.

Gambar satu

Untuk itu, hash6 = SHA256 (hash3 + hash3, {BTC: (2+0), ETH:(1+0), USDT:(12+0)}, level)

Prinsip Verifikasi
1. Prinsip Verifikasi: Menurut definisi Bitget Limited Merkle tree, nilai hash dari parent node dihitung dari leaf node milik pengguna hingga root node, dan nilai hash dari root node ini dibandingkan dengan nilai hash dari Merkle tree di "Langkah Verifikasi - Langkah 1", jika keduanya sama, maka verifikasi berhasil, jika tidak, maka verifikasi gagal.
2. Contoh: Mengkombinasikan gambar satu dan teks json berikut, dan berdasarkan pada leaf node h3 milik pengguna dan informasi yang disediakan oleh node h4 yang bersebelahan, kita dapat menghitung hash dari parent node h6, dan kemudian dengan informasi yang disediakan oleh node h5 yang bersebelahan, kita dapat menghitung hash dari parent node h7, dan kemudian membandingkan nilai hash dengan root node h7 yang disediakan dalam jalur data Merkle tree untuk melihat apakah nilai hash tersebut sama untuk menyelesaikan proses validasi.
Merkle tree path data json text:

Langkah Verifikasi
1. Masuk ke akun Bitget Anda, klik "Ikhtisar Aset - Bukti Aset", dan buka "Bukti Aset" untuk langsung melihat audit terbaru. Data pada masa audit Anda akan diperluas secara default untuk ditampilkan.

2. Jika anda ingin memverifikasi lebih lanjut secara manual bahwa aset-aset anda termasuk dalam Merkle tree, anda dapat melakukannya dengan mengikuti langkah-langkah verifikasi. Klik tombol "Download Data" untuk mendapatkan data yang dibutuhkan untuk validasi manual, dan berkas dengan nama default: merkle_tree_bg.json akan terunduh.

3. Operasi Spesifik:
Dalam contoh yang kami berikan, nama filenya adalah merkle_tree_bg.json. Teks dari jalur data json merkel tree ditampilkan di bawah ini:

4. Unduh perangkat verifikasi sumber terbuka ProofOfReserves.zip yang disediakan oleh Bitget Limited.
5. Unzip file ProofOfReserves.zip ke direktori berjalan dan letakkan file merkel_tree_bg.json yang telah disimpan pada langkah 3 ke folder yang sama. Dalam kasus kami, file disimpan di dalam Downloads, dan nama foldernya adalah proof-of-reserves, dan screenshotnya adalah sebagai berikut:

6. Buka terminal program (Mac system: terminal application. Windows system: cmd application)
7. Masukan perintah cd ~/Downloads/proof-of-reserves pada terminal program, dan masukkan direktori paket yang telah diunduh.
8. Verifikasi data Anda dengan memasukkan perintah berikut

Mac/Linux

Windows
Klikstart.bat file

Catatan: Jika Anda menggunakan sistem Mac dan mengalami masalah dengan pengaturan keamanan selama langkah ini, buka System Preferences -> Security & Privacy -> General -> Tap the lock button to make changes -> Allow apps downloaded from: App Store and approved developers -> Give permission to tools.
Jika terdapat masalah berikut , zsh: permission denied: . /start.sh, jalankan perintah berikut

9. Lihat hasil
(1) Jika data Anda benar dan lolos verifikasi, maka hasilnya adalah " "Merkle tree root hash consistent, verification succeeded".

(2) Jika data Anda salah dan verifikasinya gagal, maka hasilnya adalah "Merkle tree root hash inconsistency, verification failed".

10. Anda juga bisa mengacu pada kode perangkat verifikasi sumber terbuka dan definisi Merkle tree (lihat bagian "Apa itu Merkle Tree") dan tulis program anda sendiri untuk memverifikasi jalur data yang diperoleh pada langkah 2, atau lakukan pengecekan untuk memastikan aset-aset anda termasuk kedalam Merkel tree yang diperoleh dari audit ini.

Tim Bitget