Sha3如何通過在nodejs上提供與輸入相同的地址來使用
如何通過在nodejs上提供與輸入相同的地址來使用sha3
獲得相同的輸出?
我有以下契約:
pragma solidity ^0.4.0; contract Lottery { address public owner; bytes32 public hash; function Lottery() { owner = msg.sender; hash = sha3(owner); } function get() constant returns (address, bytes32) { return (owner, hash); } }
返回:
{ "0": "address: 0xca35b7d915458ef540ade6068dfe2f44e8fa733c", "1": "bytes32: 0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03" }
我想
bytes32 hash
通過nodejs
提供與"address: 0xca35b7d915458ef540ade6068dfe2f44e8fa733c".
我擁有的javascript程式碼:
module.exports = require('js-sha3'); Web3 = require("web3"); web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); if(!web3.isConnected()){ console.log("not connected"); process.exit(); } var owner = "0xca35b7d915458ef540ade6068dfe2f44e8fa733c"; //given input on the smart-contract. has=web3.sha3(owner); console.log(hash)
哪個列印:
0d87bf1419ed1b24bad65bbf117fcaded953923cb4eff8ca80bcde0aacb97357
這與我在solidity 上得到的輸出不同。
**$$ Q $$**我應該怎麼做才能
sha3
通過在nodejs上提供與輸入相同的地址來獲得相同的輸出?感謝您寶貴的時間和幫助。
您需要先解析地址。現在,您正在計算地址的字元串表示形式的雜湊值。試試這個:
> web3.utils.sha3(new Buffer('0xca35b7d915458ef540ade6068dfe2f44e8fa733c'.substr(2), 'hex')) '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
(注意將
.substr(2)
地址"0x"
開頭的 去掉。)編輯
另外一個選項:
> web3.utils.sha3(web3.utils.hexToBytes('0xca35b7d915458ef540ade6068dfe2f44e8fa733c')) '0xb1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'
編輯 2
以上是
web3.js
1.0.0-beta.x。對於web3.js
0.xx(我用 0.14.0 測試過):> web3.sha3('0xca35b7d915458ef540ade6068dfe2f44e8fa733c', { encoding: 'hex' }) 'b1591967aed668a4b27645ff40c444892d91bf5951b382995d4d4f6ee3a2ce03'