【问题标题】:Hashing MongoDB ID using solidity使用solidity散列MongoDB ID
【发布时间】:2022-01-17 12:49:30
【问题描述】:

我可以散列在这种情况下由 demoId 表示的 mongodb Id 吗?如果可以,解决方案是什么?谢谢

我尝试了以下方法(知道 mongodb Id 是 12 字节)但得到错误

当我在soliditySha3 中将类型设置为bytes12 时,我得到以下错误invalid bytes12 for 0x....

当我在soliditySha3 中将类型设置为bytes16 时,我得到以下错误invalid bytes16 for 0x...

 const demoIdHex = web3 && web3.utils.utf8ToHex(demoId!);
  console.log("demoIdHex", demoIdHex);

  const orderHash =
    web3 &&
    web3.utils.soliditySha3(
      { type: "bytes16", value: demoIdHex },
      { type: "address", value: account.data }
    );  // THIS FUNCTION FAILED
  console.log("orderHash", orderHash);

【问题讨论】:

  • 你检查过web3.utils.utf8ToHex(demoId!)返回的内容吗?
  • 嗨@Joe,它返回 0x363162343665343234666136643333653736373233613665
  • 这是 24 个字节。 demoId 是否包含字符串而不是 objectid?
  • 我明白了。这就说得通了。我将整个 mongoId 作为字符串传递给 utf8ToHex 函数。这可能会导致错误。我只是尝试将字符串 id 转换为 ObjectId 并将其传递给 utf8ToHex 函数,但它不起作用。 utf8ToHex 函数只接受字符串

标签: mongodb hex


【解决方案1】:

在一些帮助下我得到了解决方案

无需使用 utf8ToHex

只需在下面为 mongoId 执行操作

const orderHash =
  web3 &&
  web3.utils.soliditySha3(
    { type: "bytes12", value: demoId! },
    { type: "address", value: account.data }
  );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多