Go-Ethereum
如何在js中使用web3.sha3獲得與soliditySHA3(ethereumjs-abi)返回相同的SHA3雜湊?
我正在嘗試散列一條消息,如下所示:
function constructPaymentMessage(contractAddress, amount) { return ethereumjs.ABI.soliditySHA3( ["address", "uint256"], [contractAddress, amount], ); }
我如何使用
web3.sha3
而不是ABI.soliditySHA3
正確獲取 SHA3 雜湊,有什麼區別嗎?謝謝。
在 web3 版本 1.2.6 中,我們有以下內容:
- web3.sha3(string)參考
此方法僅將輸入作為字元串併計算輸入的 sha3 等效值。
為了實現您想要實現的目標,
ethereumjs.ABI.soliditySHA3
您應該使用web3.utils.soliditySha3
- web3.utils.soliditySha3參考
將以與solidity相同的方式計算給定輸入參數的sha3。這意味著參數將在散列之前進行 ABI 轉換和緊密打包。
function constructPaymentMessage(contractAddress, amount) { // the types are auto-detected return web3.utils.soliditySHA3(contractAddress, amount); }
在這裡也許這會有所幫助https://web3js.readthedocs.io/en/1.0/web3-utils.html#soliditysha3
或者
這實際上是在 ethereumjs-abi 中實現的:
var abi = require('ethereumjs-abi') var BN = require('bn.js') abi.soliditySHA3( [ "address", "address", "uint", "uint" ], [ new BN("43989fb883ba8111221e89123897538475893837", 16), 0, 10000, 1448075779 ] ).toString('hex')