Sha3

我應該怎麼做才能通過在 nodejs 上提供多個輸入來使用 sha3 獲得相同的輸出?

  • December 26, 2017

我有以下契約:

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將被視為 a bytes8,因此它將被填充到該大小。

在您的十六進製字元串前面加上0a(並小心刪除中間的"0x"):

> web3.sha3('0a' + 'ca35b7d915458ef540ade6068dfe2f44e8fa733c', { encoding: 'hex' })
'bbeea4a4cc90c8c1ea202ba19af7d6bd3e1059bd4529ae931ba6712c171ca1b4'

引用自:https://ethereum.stackexchange.com/questions/34423