首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算事务的校验和-builder.json

计算事务的校验和-builder.json
EN

Ethereum用户
提问于 2023-01-16 20:27:10
回答 1查看 75关注 0票数 0

我正在修改均衡器治理过程。其中一部分是要求建议海报使用安全UI编写安全事务构建器json导出,并在进行表决之前将其作为治理过程的一部分提交。

最后,我们每周处理10-20个条目,其中大多数都是相同的multisig,因此我们正在编写一个脚本来基于目标安全合并一组jsons。

那很容易/很好。唯一的实际问题是元数据中的校验和:

代码语言:javascript
复制
  "meta": {
    "name": "Transactions Batch",
    "description": "",
    "txBuilderVersion": "1.11.1",
    "createdFromSafeAddress": "0xc38c5f97B34E175FFd35407fc91a937300E33860",
    "createdFromOwnerAddress": "",
    "checksum": "0x2278322fc7e9159d3d46832c1866c94311186dd9920f6d31c15af0242f0f4e35"
  },

所以现在我的问题。

1:是否需要这个校验和字段,如果需要,如何计算? 2:是否有地方可以找到用于事务构建器应用程序的源代码和/或文档和/或谁维护它?

EN

回答 1

Ethereum用户

发布于 2023-01-23 12:03:39

校验和是通过序列化批处理并使用sha3散列来计算的。下面是Gnosis安全UI中的相关部分,可以作为脚本运行:

代码语言:javascript
复制
const web3 = require('web3')

const stringifyReplacer = (_, value) => (value === undefined ? null : value)

const serializeJSONObject = (json) => {
  if (Array.isArray(json)) {
    return `[${json.map((el) => serializeJSONObject(el)).join(',')}]`
  }

  if (typeof json === 'object' && json !== null) {
    let acc = ''
    const keys = Object.keys(json).sort()
    acc += `{${JSON.stringify(keys, stringifyReplacer)}`

    for (let i = 0; i < keys.length; i++) {
      acc += `${serializeJSONObject(json[keys[i]])},`
    }

    return `${acc}}`
  }

  return `${JSON.stringify(json, stringifyReplacer)}`
}

const calculateChecksum = (batchFile) => {
  const serialized = serializeJSONObject({
    ...batchFile,
    meta: { ...batchFile.meta, name: null },
  })
  const sha = web3.utils.sha3(serialized)

  return sha || undefined
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/143082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档