OKX Merkle ağacındaki varlıkları nasıl doğrulayabilirim? (Merkle Ağacı V2)

Yayımlama Zamanı: 21 Mar 2023Güncelleme Zamanı: 12 Nis 2024Okuma Süresi: 9 dk24

Mart 2023'ten sonraki denetim dönemi için geçerlidir

Merkle Ağacı nedir?

Bir Merkle Ağacı (veya Hash Ağacı), normalde ikili bir ağaç olan bir veri yapısıdır. Bir node'un hash değerini aşağıdan yukarıya, ağacın en üst kök node'una kadar hesaplamak için önceden tanımlanmış işlevleri kullanır.

Node Bilgileri

Her ağaç node'u bu tür bilgileri depolar:

  • Node'un hash değeri
  • Denetimin anlık görüntüsü tarafından yakalanan bir kullanıcının kripto para birimi miktarı (örnek olarak BTC, ETH, USDT'yi alalım)
    hash değeri,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
    be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}
    ### Hash Kuralı
  • Yaprak Node'lar (dolgu node'ları hariç)
    hash=SHA256(nonce+bakiyeler)
    OKX, her kullanıcı için kullanıcının denetim sayfasında bulunabilecek benzersiz bir __nonce__ atayacaktır; __balances__, denetim anlık görüntüsü tarafından yakalanan kullanıcıların varlıklarından ve tutarlarından oluşan bir json Dizesidir örneğin: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (NOT: Sondaki sıfırlardan kurtulmak ve 8 ondalık hassasiyeti korumak gerekir) ### Üst Node'lar
    bir üst node'un hash'i = SHA256(h1+h2+(h1 BTC miktarı+h2 BTC miktarı)+(h1 ETH miktarı+h2 ETH miktarı)+(h1 USDT miktarı+h2 USDT miktarı)+yükseklik)
    __h1__=Geçerli node'un sol alt node'unun hash'i, __h2__=Geçerli node'un sağ alt node'unun hash'i, __audit_id__=Geçerli denetimin kimliği, __yükseklik__=h1 (veya h2) node'unun yüksekliği Yüksekliğin tanımı: en alttaki yaprak node'un yüksekliği=1, bir üst node'un yüksekliği=alt node'un yüksekliği + 1, kök node maksimum yüksekliğe sahiptir.

Bölme Node'u Kuralı

Kullanıcılarının gizliliğini korumak için OKX, kullanıcı varlıklarını 0 ila 1 arasında rastgele bir aralıkla iki farklı node'a ayıracaktır. Örneğin, bir kullanıcının varlıkları şunlarsa: {"BTC": "10.2", "ETH": "4", "USDT": "5"} ve rastgele sayı 0,6 ise, kullanıcının varlıkları %60 ve %40 olarak bölünecektir.
CT-web-POR-4
Merkle ağacının sonraki oluşunu sırasında, bölünmüş yaprak node'ları ağaçtaki farklı konumlara dağıtmak için rastgele karıştırılacaktır.

Dolgu Node'ları Kuralı

Tam bir Merkle ağacı (tam bir ikili ağaç) oluşturmak için 2^n yaprak node'u gerekir, ancak gerçek veriler bu gereksinimi karşılamayabilir ve tek sayıda veri de olabilir. Bu gibi durumlarda, k nodu'nun kardeş node'ları yoksa, bir kardeş node k' otomatik olarak dolgu node'u olarak oluşturulur, öyle ki hash(k')=hash(k) olur ve varlık miktarları tüm para birimleri için 0 olarak ayarlanır.
örneğin:

Hash bakiyeleri
h1 {"BTC": 1, "ETH": 1,"USDT": 1}
h2 {"BTC": 1, "ETH": 2,"USDT": 3}
h3 {"BTC": 1, "ETH": 2,"USDT": 4}
Bu örnekte, h4=h3 dolgu node'u ve node'da depolanan bakiyeler aşağıdaki resimde gösterildiği gibi {"BTC": 0, "ETH": 0,"USDT": 0} şeklindedir (yeşil node): ![CT-web-POR-5;;1124x336](//images.ctfassets.net/tofttmniq0qv/1zvnyvb7al1wwVYjpFWnzS/680b0bb32c5010e91e1a73ab80b54c72/CT-web-POR-5.JPEG)*Resim 1*
bir üst node'un hash'i = SHA256(h1+h2+(h1 BTC miktarı+h2 BTC miktarı)+(h1 ETH miktarı+h2 ETH miktarı)+(h1 USDT miktarı+h2 USDT miktarı)+yükseklik)
Yani: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+yükseklik)

Varlıklarımın OKX Merkle ağacına dahil edilip edilmediğini nasıl doğrularım?

Doğrulama teorisi

OKX Merkle ağacının tanımına göre, bir üst node'un hash değerini, sol ve sağ alt node'larının hash değerlerini kullanarak aşağıdan yukarıya doğru şekilde hesaplayabilirsiniz. Sonunda, kök node'un hash değerini elde edeceksiniz. Daha sonra kök node'un hesaplanan bu hash değerini Merkle ağaç yolu kök node'undan elde edilen değerle karşılaştırabilirsiniz. Eşleşirlerse doğrulama başarılı olur; aksi takdirde başarısız olur.
Örnek: Resim 1'e ve aşağıdaki metne bakın, kullanıcının kendi node'u h3'e dayanarak ve alt node'u h4'ü verildiğinde, üst node h6'nın hash'i hesaplanabiliyorsa ve h6'nın alt node'u h5 verildiğinde, üst node h7'nin hash'i hesaplanabiliyorsa, öyleyse h7'nin hash değerini merkle ağacı yolu kök node'unda toplananla karşılaştırın ve doğrulama işlemini tamamlamak için aynı olup olmadıklarına bakın.
Merkle ağaç yolu veri metni:

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"}
__Hatırlatma__: OKX, Merkle ağacını oluştururken net varlık anlık görüntüsünü tanıttı. Kullanıcı varlıkları ödünç almışsa, anlık görüntüde bir borç (örneğin negatif öz sermaye) kaydedilecektir. Daha fazla bilgiye buradan erişebilirsiniz.

Doğrulama adımları

  1. OKX hesabınıza giriş yapın, son denetimleri görüntülemek için Varlıklar > Denetimler seçeneğine gidin, denetim verilerinizi görüntülemek için Detaylar seçeneğini seçin.
    CT-web-POR-view audit detailsVeri denetimini daha iyi anlamak için Varlıkları Seçin ve Ayrıntıları Görüntüleyin

  2. Merkle ağacındaki varlıklarınızı Verileri kopyala seçeneğini belirleyerek manuel olarak da doğrulayabilirsiniz
    CT-web-POR-copy dataManuel doğrulama işlemi için Verileri kopyala seçeneğini seçin

  3. Metin düzenleyiciyi (örneğin not defteri) açın, json Dizesini bir json dosyası olarak yapıştırın ve kaydedin.

Operasyonel adımlar

Mac: Terminali açın, touch merkle_proof_file.json komutunu girin ve ardından bir json dosyası oluşturulacaktır. Dosya varsayılan olarak sistem masasına kaydedilir. Bu dosyayı bulmak için Finder'ı açabilir ve merkle_proof_file.json dosyasını arayabilirsiniz. Bu json dosyasını açın, kopyalanan verileri yapıştırın ve kaydedin.
Windows: Bir metin düzenleyici (örn. not defteri) açmak için çift tıklayın, verileri yapıştırın ve bir json dosyası olarak kaydedin.
Bizim durumumuzda, dosyaya "merkle_proof_file.json" adını veriyoruz. Merkle ağaç yolu veri json metni aşağıdaki gibi gösterilir:
{
"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" }
}

  1. "Full Merkle Tree" dosyalarının altındaki Sorumluluk raporunu indirin ve indirilen dosyayı açarak "Tam Merkle Ağacı dosyası" elde edin.
    CT-web-POR-7Raporu almak için indirmeyi seçin

  2. OKX açık kaynak doğrulama](https://github.com/okx/proof-of-reserves/releases/tag/v3.0.4) aracını indirin (MerkleValidator)

  3. OKX açık kaynak doğrulama aracını (MerkleValidator) ve iki veri dosyasını (merkle_proof_file.json, full-liabilities-merkle-tree.txt) aynı klasöre kaydedin. Bizim burada aracı ve veri dosyasını aşağıda gösterildiği gibi proof-of-reserves adlı İndirilenler klasörünün altına koyuyoruz:
    CT-web-POR-8

  4. Komutu çalıştırın ve indirilen klasörü bulun. Bizim örneğimizde, şu komutu girin: cd ~/Downloads/proof-of-reserve

  5. Doğrulamayı başlatmak için aşağıdaki komutu yazın ve enter tuşuna basın:
    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
    Hatırlatma: Mac kullanıyorsanız ve "geliştirici doğrulanamadığı için araçlar açılamıyor” uyarısı ile karşılaşırsanız, lütfen şu adrese gidin: Sistem Tercihleri > Güvenlik ve Gizlilik > Genel > Değişiklikler yapmak için kilidi tıklayın > App Store’dan ve kimliği belirli geliştiricilerden indirilen uygulamalara izin ver

  6. Sonucu kontrol edin
    Doğrulama geçerse, Merkle ağaç yolu doğrulaması geçti sonucu aşağıda gösterilecektir:
    CT-web-POR-9 Doğrulama başarısız olursa, Merkle ağaç yolu doğrulaması başarısız oldu şeklinde bir sonuç aşağıdaki gibi gösterilir:
    CT-web-POR-10

  7. Ayrıca OKX açık kaynak doğrulama aracı (MerkleValidator) ve OKX merkle ağacı tanımı koduna başvurabilir, 2. adımda toplanan merkle ağacı yolu verilerini kullanarak varlıklarınızın denetim anlık görüntüsünden oluşturulan merkle ağacı tarafından yakalandığını doğrulamak için kendiniz program yazabilirsiniz.