Everscale Solidity 智能合约中字符串的 sha256 结果不正确
Incorrect result of sha256 of a string in a Everscale Solidity smart contract
我想计算 Free TON-Solidity 合约中字符串的 sha256,我通过将字符串存储在 TvmBuilder 中然后将其作为 TvmSlice 传递给 sha256() 来实现,但结果不是正确(它与我 shell 中 sha256sum 计算的不匹配)。知道为什么吗?
TvmBuilder 是否添加了一些在切片中传递的位?
是的,据我所知,tvm builder 是一种 TL-B 方案序列化程序
Free TON Solidity 中的 sha256() 函数 API 仅将 TvmBuilder 作为输入,您可以计算原始字符串的哈希值。
散列任意字符串就是对其 BOC 进行散列,因为 BOC 是 tvm 唯一可以理解的结构
我想你可能想用这个字符串构建 BOC。构建器构建单元格,单元格布局由切片 + 引用组成。它导致切片与 refs 混合的树结构,在区块链状态中解析。
你的方法应该适用于小字符串,也适用于整个区块链状态。这是 tvm 理解数据的唯一方式
所以字符串的哈希是一个单元的哈希,它有底层单元的证明
这就是我现在的理解方式,希望对您有所帮助。
如果您的字符串少于 127 个字节,您可以改为传递字节并散列打包在单个单元格中的字节
tg @freeton_smartcontracts 聪明的 SmC 大佬可以在这里澄清一下,因为我是自学的,没有真正动手 SmC pro
也许这个或 rust core sdk 可以帮到你
我想计算 Free TON-Solidity 合约中字符串的 sha256,我通过将字符串存储在 TvmBuilder 中然后将其作为 TvmSlice 传递给 sha256() 来实现,但结果不是正确(它与我 shell 中 sha256sum 计算的不匹配)。知道为什么吗?
TvmBuilder 是否添加了一些在切片中传递的位?
是的,据我所知,tvm builder 是一种 TL-B 方案序列化程序
Free TON Solidity 中的 sha256() 函数 API 仅将 TvmBuilder 作为输入,您可以计算原始字符串的哈希值。
散列任意字符串就是对其 BOC 进行散列,因为 BOC 是 tvm 唯一可以理解的结构
我想你可能想用这个字符串构建 BOC。构建器构建单元格,单元格布局由切片 + 引用组成。它导致切片与 refs 混合的树结构,在区块链状态中解析。
你的方法应该适用于小字符串,也适用于整个区块链状态。这是 tvm 理解数据的唯一方式
所以字符串的哈希是一个单元的哈希,它有底层单元的证明
这就是我现在的理解方式,希望对您有所帮助。
如果您的字符串少于 127 个字节,您可以改为传递字节并散列打包在单个单元格中的字节
tg @freeton_smartcontracts 聪明的 SmC 大佬可以在这里澄清一下,因为我是自学的,没有真正动手 SmC pro
也许这个或 rust core sdk 可以帮到你