Address

在數據庫中儲存隔離見證地址的最有效方法

  • October 2, 2019

這不是在數據庫中儲存比特幣地址的最有效方法是什麼的副本?但這是同一個問題,除了我需要一個隔離見證的答案。

假設我想將每個標準 BTC 地址儲存在 SQL 數據庫中。最節省空間的方法是通過轉換為 base58 來提取 HASH160 地址,然後切掉校驗和。這將允許您以 20 個字節儲存 BTC 地址。

直到隔離見證區塊出現。

有沒有辦法從以下位置獲取 hash160 地址:bc1q34aq5drpuwy3wgl9lhup9892qp6svr8ldzyy7c

如果沒有,有人能告訴我將這個地址儲存在數據庫中的最節省空間的方法嗎?

我無需將其轉換回原始字元串,只需確保其身份即可。

謝謝

有沒有辦法從 bc1q34aq5drpuwy3wgl9lhup9892qp6svr8ldzyy7c 獲取 hash160 地址

是的,您可以使用各種語言的參考實現來編碼和解碼 bech32 地址。例如,我已經bc1q34aq5drpuwy3wgl9lhup9892qp6svr8ldzyy7c使用下面的 python 解碼了您在問題中提到的範例地址。decode 函式為我們提供了見證版本(在本例中為 0)和一個字節數組。

import bech32

address = "bc1q34aq5drpuwy3wgl9lhup9892qp6svr8ldzyy7c"
address_decoded = bech32.decode("bc", address)

address_decoded  # a tuple containing witness version and bytearray of the address
>>> (0, [141, 122, 10, 52, 97, 227, 137, 23, 35, 229, 253, 248, 18, 156, 170, 0, 117, 6, 12, 255])

bytes(address_decoded[1])
>>> b'\x8dz\n4a\xe3\x89\x17#\xe5\xfd\xf8\x12\x9c\xaa\x00u\x06\x0c\xff'  

需要注意的幾點:

  • 您在這裡提到的地址是 P2WPKH,長度為 20 個字節。但是,P2WSH 地址是 32 個字節(它們也以“bc1…”開頭),因為我們使用見證腳本的 SHA256 而不是 HASH160。
  • 儘管版本 0 地址(P2PKH、P2WSH)將具有 1+20 或 1+32 字節的數據有效負載,但 BIP173在見證程序中最多允許 40 字節,總共 1+40 字節。

引用自:https://bitcoin.stackexchange.com/questions/90644