Varlıklarımın Merkle Ağacı'nda olup olmadığını nasıl kontrol edebilirim?
Merkle Ağacı nedir
Hash Ağacı olarak da bilinen Merkle Ağacı (Merkle Tree), hash değerini yaprak düğümden üst kök düğüme belirli bir şekilde katman katman hesaplayan, genellikle ikili bir ağaç olan bir veri yapısıdır.
CoinEx Merkle Ağacı Tanımı
Düğüm Bilgisi
Her ağaç düğümünde depolanan bilgiler şunları içerir: 1. Düğüm hash değeri 2. Kullanıcı varlık anlık görüntülerinin kapsadığı coin sayısı (örnek olarak BTC, ETH, USDT'yi alın)
Hash Değeri{"BTC":"BTC Bakiyesi","ETH":"ETH Bakiyesi","USDT":"USDT Bakiyesi"}
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Hash Kuralları
Yaprak Düğümü
hash = SHA256(nonce + balances)
Ör:
hash = SHA256('79b0319c0003e6b5f149525a6677f1bcb7851e9bd7bf05c7089576d38dd95efa{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}')
Bunların arasında, CoinEx her kullanıcıya eşsiz bir nonce atayacaktır ve bu nonce denetim verilerinde sorgulanabilir; "balances", kullanıcının varlık anlık görüntüsünün kapsadığı coin sayısından oluşan bir json dizisidir, örneğin: {"BTC": "1.023" ,"ETH":"0","USDT":"20.2343322"}, aşağıdaki kurallara uyun:
1. Json dizesi, satır başı ve boşluk içermeyen kompakt bir biçimdedir.
2. Coin miktarının sonundaki geçersiz 0'ı kaldırın ve 8 basamaklı hassasiyeti koruyun.
3. Coin adları alfabetik olarak sıralanmıştır.
1. Json dizesi, satır başı ve boşluk içermeyen kompakt bir biçimdedir.
2. Coin miktarının sonundaki geçersiz 0'ı kaldırın ve 8 basamaklı hassasiyeti koruyun.
3. Coin adları alfabetik olarak sıralanmıştır.
Üst Düğüm
hash = SHA256(h1 + h2 + balances)
· h1: Sol alt düğümün hash değeri
· h2: Sağ alt düğümün hash değeri
· balances: Sol alt düğümün bakiyeleri + sağ alt düğümün bakiyeleri, aynı varlığın bakiyesine eklenir
· h2: Sağ alt düğümün hash değeri
· balances: Sol alt düğümün bakiyeleri + sağ alt düğümün bakiyeleri, aynı varlığın bakiyesine eklenir
Ör:
Sol Alt Düğüm:
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Sağ Alt Düğüm:
e9fcf13c9cdae1dfab4c2ea60d8acb62603b5f8430e265bf4b3f901fc4e45fe9{"BTC":"0.48","USDT":"100.24534"}
Üst Düğümün Hash Değeri:
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
Düğüm Kurallarını Doldur
Eksiksiz bir Merkle Ağacı (tam ikili) oluşturmak, 2^n yaprak düğüm verisi gerektirir, ancak gerçek veri sayısı yeterli veya eşit olmayabilir. Bu durumda, eğer bir k düğümünün kardeş düğümü yoksa, doldurma otomatik olarak bir kardeş düğüm k', kardeş düğüm hash(k')=hash(k) üretecektir ve k' düğümünün coin sayısı tamamen sıfır olarak ayarlanacaktır.
Ör. K Düğümü:
3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"}
Üst Düğümün Hash Değeri:
hash = SHA256(3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d3d101072de66342c711e369e1e98f48c89c412e7246918ae6466a5c72e73003d{"BTC":"1.023","ETH":"0.56","USDT":"20.2343322"})
Doğrulama Kuralları
1. Doğrulama ilkesi: Merkle Ağacının tanımına göre, ana düğümün hash değeri, kök düğümün hash değeri elde edilene ve kök düğümün hash değeri elde edilene kadar kullanıcının yaprak düğümünden hesaplanır. Eğer ikisi eşit ise doğrulama onaylanır, eşit değilse doğrulama başarısız olur.
2. Örneğin, aşağıdaki json metni önce kendi verilerini temel alarak yaprak düğümün hashini, sonra yoldaki her kardeş düğümle birlikte üst düğümün hashini hesaplar. Ortaya çıkan düğüm hashi denk bakiyelerle birlikte kök düğüm hashine eşit olmalıdır. (Kardeş düğümün boş görünmesi herhangi bir kardeş düğüm olmadığı anlamına gelir ve üst düğüm hashi düğüm doldurma kurallarına göre hesaplanır)
2. Örneğin, aşağıdaki json metni önce kendi verilerini temel alarak yaprak düğümün hashini, sonra yoldaki her kardeş düğümle birlikte üst düğümün hashini hesaplar. Ortaya çıkan düğüm hashi denk bakiyelerle birlikte kök düğüm hashine eşit olmalıdır. (Kardeş düğümün boş görünmesi herhangi bir kardeş düğüm olmadığı anlamına gelir ve üst düğüm hashi düğüm doldurma kurallarına göre hesaplanır)
Merkle Ağacı yolu verileri (json metni):
{ "root": { "balances": { "CET": "14373493.24153457", "ETH": "104543541.61407674", "USDC": "2419089.97192761", "USDT": "4836955256.81519091" }, "hash": "c01a6c3b0fedde2a066f8a38968e40420c0b0742bb4ccda571a4349fb1c64f18" }, "self": { "balances": { "USDT": "3990000" }, "nonce": "9885b5df557ba3cec41a74347719a8a37d5792a1cf7f0e216510d60dd1b1fc95" }, "path": [ { "balances": { "CET": "10000.01994324", "USDC": "40000", "USDT": "1004.13066254" }, "hash": "01f94322a74bee4431b809406997cee575bed3b85ef36b4ba3b2ff9dd140f99a", "pos": "left" }, { "balances": { "CET": "1000", "ETH": "0.90765244", "USDT": "143151.30772787" }, "hash": "c99051749a3a83e60d1338454382044f9d7236928cfdc4b7fca1a7cc7450c7a6", "pos": "left" }, { "balances": { "CET": "548800.95984406", "ETH": "50000.00001068", "USDC": "9986.281143", "USDT": "62752.29303779" }, "hash": "173a9a7ef562f1b537def5d58167d7402c8e268b1423c5f8e1d806cd0c524344", "pos": "left" }, { "balances": { "CET": "10023.01105146", "ETH": "9900.74253772", "USDT": "22516389.78119662" }, "hash": "d79bd6c7a1536db199747061c119f98f86d99f9c7a8350fe63c6314ef3e8a24c", "pos": "right" }, { "balances": { "CET": "5393361.46905487", "ETH": "23711.51394236", "USDC": "201404.61667184", "USDT": "230211961.3159725" }, "hash": "115551fd3f85328d32858cc6d1bea9c1274984b0f8abba8140752f9d55e48277", "pos": "left" }, { "balances": { "CET": "1554146.8440552", "ETH": "100.0040003", "USDC": "160006.6", "USDT": "11201397.46983634" }, "hash": "7b92897456af56f473b75d5e009be090726ad64694fd27971dc46f2631db51d8", "pos": "right" }, { "balances": { "CET": "4712634.46013087", "ETH": "91469.27009748", "USDC": "1002463.00913027", "USDT": "830313049.62523756" }, "hash": "0905786187f2c582902b84175813b063c31755a2930b25dee7ba005f7c8a7cf9", "pos": "right" }, { "balances": { "CET": "2143526.47745487", "ETH": "104368359.17583576", "USDC": "1005229.4649825", "USDT": "3738515550.89151969" }, "hash": "41dc5da7477fab3ac6fe233a1bf1bec0d26d0f5dea679b5d91f2f09c488fcb2f", "pos": "right" } ] }
Nasıl Doğrularım
1. CoinEx hesabınıza giriş yapın, "Rezerv Kanıtı"na tıklayın, sayfaya girin ve "Denetim Verilerimi Kopyala"ya tıklayın.
2. Kopyalanan denetim verilerini "merkle_proof_file.json" gibi bir metin dosyasına yapıştırın.
3. CoinEx tarafından sağlanan [Açık Kaynak Doğrulama Aracını ] indirin.
4. Doğrulama aracı zip klasörünü açın ve klasörü "merkle_proof_file.json" "~/Downloads/proof-of-reserves" ile aynı klasöre koyun.
5. Terminali açın (MacOS: Terminal Uygulaması; Windows: Terminal veya PowerShell), yukarıdaki dizine girmek için "cd ~/Downloads/proof-of-reserves" yazın.
6. Verilerinizi doğrulamak için aşağıdaki komutu girin:MacOS / Linux:
./proof-of-reserves -f merkle_proof_file.json
Windows:
./proof-of-reserves.exe -f merkle_proof_file.json
7. Doğrulama başarılı olursa, 'Merkle Ağacı yolu doğrulaması geçti' uyarısı çıkar ve doğrulama başarısız olursa, 'Merkle ağacı yolu doğrulaması başarısız' uyarısı çıkar.
Açık Kaynak Doğrulama Aracında verilen talimatlara başvurarak kendi doğrulama aracınızı oluşturabilirsiniz.