生成區塊鏈地址後,您可以從此處檢查餘額和屬於該地址的交易;儘管客戶端頁面或其他來源會生成比特幣地址,而不會向外部傳送任何資訊,但是我們可以檢查餘額和交易,餘額顯示為0 BTC。此外當我們更改比特幣地址的一個字元時,會收到“Checksum does not exist!”的錯誤提示。該示例說明了如何確保我們的比特幣地址有效。您可以在下圖看到步驟;
讓我們開始研究如何驗證比特幣地址;
步驟1:獲取我們要檢查的值是否有效。
bitcoinAddress = input("Enter a bitcoin address:")
print("--------------------------------------")
print("Bitcoin Address: ", bitcoinAddress)
步驟2:我們將Base58解碼應用於在步驟1獲得的值。
base58Decoder = base58.b58decode(bitcoinAddress).hex()
print("Base58 Decoder: ", base58Decoder)
步驟3:在步驟2中建立的值將儲存network&hash和checksum值。我們嘗試檢查此校驗和值以驗證比特幣地址。
prefixAndHash = base58Decoder[:len(base58Decoder)-8]
checksum = base58Decoder[len(base58Decoder)-8:]
print("\t|___> Prefix & Hash: ", prefixAndHash)
print("\t|___> Checksum: ", checksum)
print("--------------------------------------")
步驟4:根據上圖,我們將SHA256雜湊應用於從步驟3建立的作為Prefix&Hash的值。
hash = prefixAndHash
for x in range(1,3):
hash = hashlib.sha256(binascii.unhexlify(hash)).hexdigest()
print("Hash#", x, " : ", hash)
print("--------------------------------------")
步驟5:在步驟4中建立的值的前4個位元組被稱為Checksum。因此在步驟3中建立的校驗和值必須等於該值。
if(checksum == hash[:8]):
print("[TRUE] checksum is valid!")
else:
print("[FALSE] checksum is not valid!")
最後,結果如下:
Enter a bitcoin address:1Lw5rqh94dWzArQ9tDY6Ucswxo3Ums7VWi
--------------------------------------
Bitcoin Address: 1Lw5rqh94dWzArQ9tDY6Ucswxo3Ums7VWi
Base58 Decoder: 00daa4e87dcb30d406d24f76bcc2afe2ef550c9068b0a511fb
|___> Prefix & Hash: 00daa4e87dcb30d406d24f76bcc2afe2ef550c9068
|___> Checksum: b0a511fb
--------------------------------------
Hash 1 : 1d7d571d176f378eabd73b1e3ac0fb5a688855d41ae5ee8956afb9c13b5c7027
Hash 2 : b0a511fb05bcf1872be44d98dad592c9641fe47ee7f48f1ecee18b6805bd4ba4
--------------------------------------
[TRUE] checksum is valid!