Sha3我應該怎麼做才能通過在 nodejs 上提供多個輸入來使用
我應該怎麼做才能通過在 nodejs 上提供多個輸入來使用 sha3
獲得相同的輸出?
我有以下契約:
pragma solidity ^0.4.0; contract Lottery { address public owner; bytes32 public hash; function Lottery() { owner = msg.sender; hash = sha3(10, owner); } function get() constant returns (address, bytes32) { return (owner, hash); } }
返回:
{ "0": "address: 0xca35b7d915458ef540ade6068dfe2f44e8fa733c", "1": "bytes32: 0x68690d4f19be42f79fab7837a1959281e0cb7c0a67c4c1efb7a1fcb008e5806e" }
sha3()
可以相互獲得多個輸入。我想通過提供與某個值和as相同的輸入來獲得相同bytes32 hash
的值。nodejs``uint``"address: 0xca35b7d915458ef540ade6068dfe2f44e8fa733c".``sha3(uint, address)
我遵循了以下指南:(https://ethereum.stackexchange.com/a/34420/4575)
我擁有的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. hash = web3.utils.sha3( 10 + web3.utils.hexToBytes(owner) ) console.log(hash)
哪個列印:
0xaf62552265611d75712f03dd8d2ae6efcb4c140dc8357ea015bd0572dd33ca82
這與我在solidity 上得到的輸出不同。
**$$ Q $$**我應該怎麼做才能
sha3
通過提供相同的 uint、地址作為 nodejs 上的多個參數輸入來獲得相同的輸出?感謝您寶貴的時間和幫助。
Solidity 的
keccak256
/sha3
連接它的參數。10
將被視為 abytes8
,因此它將被填充到該大小。在您的十六進製字元串前面加上
0a
(並小心刪除中間的"0x"
):> web3.sha3('0a' + 'ca35b7d915458ef540ade6068dfe2f44e8fa733c', { encoding: 'hex' }) 'bbeea4a4cc90c8c1ea202ba19af7d6bd3e1059bd4529ae931ba6712c171ca1b4'