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

Yayımlama Zamanı: 21 Mar 2023Güncelleme Zamanı: 11 Nis 2024Okuma Süresi: 7 dk39

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)
Bash
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ç)
TOML, also INI
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
Rust
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.

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 Bakiyeler
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-verifymerkletree-v1-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 dayanarak, bir üst node'un hash değerini, kök node'un hash değerini elde edene kadar sol alt ve sağ alt node'lara göre aşağıdan yukarıya doğru hesaplayabilir ve ardından kök node'un hesaplanan hash değerini merkle ağacı yolu kök node'undan toplanan değerle karşılaştırabilirsiniz, eğer aynıysa, doğrulama geçerlidir veya tam tersi.

  • Örnek: Yukarıdaki resme ve aşağıdaki json metnine 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ğacı yolu veri json metni:
JSON
{
 "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
 }]
}

Doğrulama adımları

  1. Hesabınızın varlık bakiyesinin bir Merkle yaprağı olarak dahil edilip edilmediğini doğrulamak için OKX hesabınızda oturum açın, Varlıklar öğesini seçin ve son denetimleri görüntülemek için Denetimler adresini ziyaret edin, denetim verilerinizi görüntülemek için Ayrıntıları görüntüle öğesini seçin.
    CT-verifymerkletree-v1-2Veri denetimini daha iyi anlamak için Varlıkları Seçin ve Ayrıntıları Görüntüleyin
  2. Rehberimizdeki adımları izleyerek Merkle ağacındaki varlıklarınızı manuel olarak da doğrulayabilirsiniz. Manuel doğrulama için ihtiyacınız olan verileri Verileri kopyala seçeneğiyle alabilirsiniz.
    CT-verifymerkletree-v1-3Manuel doğrulama işlemi için Verileri kopyala öğesini seçin
  3. Verileri kopyala öğesini seçtikten sonra, metin düzenleyiciyi açın (örneğin, not defteri), ardından 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 (örneğin 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:
JSON
{
 "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
 }]
}
  1. OKX açık kaynak doğrulama aracını indirin (MerkleValidator)
  2. OKX açık kaynak doğrulama aracını (MerkleValidator) ve veri dosyasını (merkle_proof_file.json) aynı klasöre kaydedin. Bu durumda, araç ve veri dosyası İndirilenler klasörü altına yerleştirilir ve aşağıda gösterildiği gibi proof-of-reserves olarak adlandırılır:
    CT-verifymerkletree-v1-4
  3. Terminal uygulamasını açın (Mac için: Terminal Windows için: Komut İstemi)
  4. Komutu çalıştırın ve indirilen klasörü bulun. Bizim durumumuzda, ş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_proof_file merkle_proof_file.json
    Windows: MerkleValidator.exe --merkle_proof_file merkle_proof_file.json
    Not: Mac kullanıyorsanız ve "geliştirici doğrulanamadığı için araçlar açılamıyor" iletişim kutusuyla karşılaşırsanız, Sistem Ayarları > Gizlilik ve Güvenlik > Güvenlik > [araca] İzin Vermek için Güvenlik bölümünde App Store ve tanımlanmış geliştiriciler seçeneğini belirleyebilirsiniz.
  6. Sonucu kontrol edin
    Doğrulama geçerse, Merkle ağaç yolu doğrulaması geçti gösteren bir sonuç aşağıdaki gibi gösterilecektir:
    CT-verifymerkletree-v1-6
    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-verifymerkletree-v1-5
  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.