区块链研究实验室-深入了解Solidity如何在以太坊上运行-第十节

地址计算

让我们使用一些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))

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180815A08XAG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励