微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Free TON Solidity 智能合约中字符串的 sha256 结果不正确

如何解决Free TON Solidity 智能合约中字符串的 sha256 结果不正确

我想计算 Free TON-solidity 合约中字符串的 sha256,我将字符串存储在 TvmBuilder 中,然后将其作为 TvmSlice 传递给 sha256(),但结果不正确(它与我的 shell 中由 sha256sum 计算的不匹配)。知道为什么吗?

TvmBuilder 是否添加了一些在切片中传递的位?

解决方法

是的,就我所知,tvm builder 是一种 TL-B 方案序列化器

Free TON Solidity API 中的 sha256() 函数仅以 TvmBuilder 作为输入,您可以计算原始字符串的哈希值。

对任意字符串进行散列就是对其 BOC 进行散列,因为 BOC 是 tvm 唯一可以理解的结构

我想你可能想用这个字符串来构建 BOC。 builder 构建单元格,单元格布局由切片 + refs 组成。它导致切片与引用混合的树结构,在区块链状态下解析。

您的方法应该适用于小字符串,也适用于整个区块链状态。这是 tvm 理解数据的唯一方式

所以字符串的哈希值是具有底层单元格证明的单元格的哈希值

我现在就是这么理解的,希望能帮到你。

如果您的字符串少于 127 个字节,您可以改为传递字节并将散列字节打包在单个单元格中

tg @freeton_smartcontracts 在这里聪明的 SmC 家伙可以澄清,因为我是自学者,不是真正的 SmC 专家

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

也许这个或 Rust 核心 sdk 对你有帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。