地址计算
让我们使用一些Python代码将0xC0FEFE哈希到0x798 ... 187c。 如果你想跟随,你需要Python 3.6,或安装pysha3来获得keccak_256哈希函数。
定义两个辅助函数:
importbinascii
importsha3
# Convert a number to32bytes array.
def bytes32(i):
returnbinascii.unhexlify('%064x'% i)
# Calculate the keccak256 hash of a32bytes array.
def keccak256(x):
returnsha3.keccak_256(x).hexdigest()
要将数字转换为32字节:
>>> bytes32(1)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01'
>>> bytes32(0xC0FEFE)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xfe\xfe'
要将两个字节数组连接在一起,请使用+运算符:
>>> bytes32(1) + bytes32(2)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02'
要计算某些字节的keccak256哈希值:
>>> keccak256(bytes(1))
'bc36789e7a1e281436464229828f817d6612f7b477d66591ff96a9e064bcc98a'
我们现在能够的计算0x798 ... 187c。
商店变量项的位置是0x0(因为它是第一个存储变量)。 要获取地址,请将密钥0xc0fefe与项目的位置连接起来:
# key =0xC0FEFE, position =
>>> keccak256(bytes32(0xC0FEFE) + bytes32())
'79826054ee948a209ff4a6c9064d7398508d2c1909a392f899d301c6d232187c'
计算密钥存储地址的公式为:
keccak256(bytes32(key) + bytes32(position))
领取专属 10元无门槛券
私享最新 技术干货