簡體   English   中英

生成區塊鏈 header 失敗並出現錯誤

[英]Generating Blockchain header is failing with error

當代碼停止並出現以下錯誤時,我一直在嘗試處理塊鏈 header -

Traceback(最近一次調用最后一次):文件“C:\Users\SHAHRIAR\AppData\Local\Programs\Python\Python37-32\lib\encodings\utf_8.py”,第 16 行,解碼返回 codecs.utf_8_decode(input,錯誤,真)類型錯誤:需要類似字節的 object,而不是“str”

上述異常是以下異常的直接原因:

回溯(最近一次調用):文件“f:/PYTHON/blockchain/index.py”,第 19 行,在 struct.pack('<L', blockChainObject['bits']) + TypeError: 使用 'utf- 解碼8' 編解碼器失敗(類型錯誤:需要類似字節的 object,而不是 'str')

這是我的完整代碼-

import hashlib
import codecs
import struct

blockChainObject = {
    'version':536871426,
    'previousHash':'aa11661d07d7e13b94403bc00a9786b07fe711140743f0f9d7e35a478d80e840',
    'merkleRoot':'a41494afe694e450a7163103fd08ea3d4b5fcb30556165f6e567893989c39222',
    'bits': 0x19030d6c,
    'time':1610982871,
    'nonce':3341292488
}

blockChainHeader = (
    struct.pack('<L', blockChainObject['version']) + 
    codecs.decode(blockChainObject['previousHash'])[::-1] + 
    codecs.decode(blockChainObject['merkleRoot'])[::-1] + 
    struct.pack('<L', blockChainObject['time']) + 
    struct.pack('<L', blockChainObject['bits']) + 
    struct.pack('<L', blockChainObject['nonce'])
)

blockChainHashObject = hashlib.sha256(blockChainHeader).digest()
blockChainHashDigest = hashlib.sha256(blockChainHashObject).hexdigest()

print(blockChainHashDigest)

我在 Win 7(64 位)上運行 Python 3.7.2

我正在尋求專家的建議,我做錯了什么?

您必須將 decode functions to argument of轉換為 bytes . Also struct.pack . Also struct.pack返回bytescodecs.decode返回string ,因此也必須將decode結果轉換為字節。

import hashlib
import codecs
import struct
import sys

blockChainObject = {
    'version':536871426,
    'previousHash': b'aa11661d07d7e13b94403bc00a9786b07fe711140743f0f9d7e35a478d80e840',
    'merkleRoot': b'a41494afe694e450a7163103fd08ea3d4b5fcb30556165f6e567893989c39222',
    'bits': 0x19030d6c,
    'time':1610982871,
    'nonce':3341292488
}


blockChainHeader = (
    struct.pack('<L', blockChainObject['version']) +
    bytes(codecs.decode(blockChainObject['previousHash'])[::-1], 'utf-8') +
    bytes(codecs.decode(blockChainObject['merkleRoot'])[::-1], 'utf-8') +
    struct.pack('<L', blockChainObject['time']) +
    struct.pack('<L', blockChainObject['bits']) +
    struct.pack('<L', blockChainObject['nonce'])
)

blockChainHashObject = hashlib.sha256(blockChainHeader).digest()
blockChainHashDigest = hashlib.sha256(blockChainHashObject).hexdigest()

print(blockChainHashDigest)

結果: 2d2a436603cca71be4c27b51e5e1aa7911cc6cf4ff5ad67a13c17ab7127d7f85

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM