密码-
pragma solidity ^0.4.18;
contract CA18 {
address public owner;
function CA18 () {
owner = msg.sender;
}
mapping(address=>uint16) public balances;
function getBalance() view returns (uint16, bytes32) {
require(msg.sender == owner);
uint16 mybalance = 1000;
bytes32 c = keccak256(owner);
return (mybalance, c);
}
}
> con.getBalance()
[1000, "0x0679d661b585d1b4f0c3fd18f943f19e7fa9777fe23cb96b94f469c20d6f0bd5"]
> web3.sha3(eth.coinbase)
"0x3ba2c5fae04972f5960bd8d1b7f098bf7d4c844da67accd23da00f62e4910fc0"
> con.owner()
"0x46fb9a22689c4a4bfb494baeafbb8b2993725305"
> web3.sha3(con.owner())
"0x3ba2c5fae04972f5960bd8d1b7f098bf7d4c844da67accd23da00f62e4910fc0"Web3.sha与keccak256(所有者)不一样。
文档状态-
sha3(...) returns (bytes32):
alias to keccak256输出显示sha3是不同的keccak256。应该是一样的吗?
(con是合同实例。)
我刚为所有者添加了sha3,这是输出-
> con.getBalance()
[1000, "0x0679d661b585d1b4f0c3fd18f943f19e7fa9777fe23cb96b94f469c20d6f0bd5", "0x0679d661b585d1b4f0c3fd18f943f19e7fa9777fe23cb96b94f469c20d6f0bd5"]
function getBalance() view returns (uint16, bytes32, bytes32) {
require(msg.sender == owner);
uint16 mybalance = 1000;
bytes32 c = keccak256(owner);
bytes32 d = sha3(owner);
return (mybalance, c, d);
}因此,差异是由于web3和坚实。有没有人解释过这一点,因为sha3被用于存储的寻址算法中,并且它们工作,而且它们也是基于keccak256的。
发布于 2018-03-03 10:58:08
> web3.sha3(con.owner(), {encoding:"hex"})
"0x0679d661b585d1b4f0c3fd18f943f19e7fa9777fe23cb96b94f469c20d6f0bd5"https://ethereum.stackexchange.com/questions/41546
复制相似问题