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

https://github.com/move-ton/ton-client-py/blob/b06b333e6f5582aa1888121cca80424b614e092c/tonclient/abi.py#L49

也许这个或 rust core sdk 可以帮到你