【问题标题】:Incorrect result of sha256 of a string in a Free TON Solidity smart contractFree TON Solidity 智能合约中字符串的 sha256 结果不正确
【发布时间】:2021-08-22 00:34:57
【问题描述】:

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

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

【问题讨论】:

  • 请编辑您的问题并分享您用于计算两个哈希的代码 sn-ps。它将帮助其他用户解决您的问题。

标签: solidity smartcontracts ton


【解决方案1】:

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

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

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

我想你可能想用这个字符串构建 BOC。 builder 构建单元格,单元格布局由 slices + refs 组成。它产生了一个混合了 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 可以帮助你

【讨论】:

    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2022-10-23
    • 1970-01-01
    • 2023-01-30
    • 2021-12-26
    相关资源
    最近更新 更多