如何在Solidity中获取keccak256哈希值

时间:2018-04-12 09:53:47

标签: ethereum solidity truffle keccak

我刚刚开始使用可靠性,我已经使用松露编译并将代码部署到ganache,一切正常,我可以调用代码中的其他函数,但是有一些只有所有者才能访问的函数,代码似乎使用keccak256取回调用函数的地址并确定是否允许调用者地址,我试图使用此网站散列我的eth地址:

https://emn178.github.io/online-tools/keccak_256.html

然后在重新编译之前将哈希值添加到代码中,但调用owner函数仍然会抛出此错误:

“错误:处理事务时出现VM异常:还原”

我做错了什么?

这是带有原始哈希的代码。

modifier onlyOwner(){
    address _customerAddress = msg.sender;
    require(owners[keccak256(_customerAddress)]);
    _;
}

// owners list
mapping(bytes32 => bool) public owners;


function PetShop()
    public
{
    // add owners here
    owners[0x66e62cf7a807daaf3e42f7af3befe7b2416a79ba5348820245a69fe701f80eb4] = true;   
}

/*----------  Owner ONLY FUNCTIONS  ----------*/

function disableDogs() 
    onlyOwner()
    public
{
    onlyDogs = false;
}

/*-----replace owner ------*/
function setOwner(bytes32 _identifier, bool _status)
    onlyOwner()
    public
{
    owners[_identifier] = _status;
}

/*-----set price for pet adoption----*/
function setAdoptionRequirement(uint256 _amountOfTokens)
    onlyOwner()
    public
{
    AdoptionRequirement = _amountOfTokens;
}

1 个答案:

答案 0 :(得分:0)

Solidity中的keccak256实现以不同方式存储数据。

  

keccak256(...)返回(bytes32):   计算(紧密压缩)参数的以太网-SHA-3(Keccak-256)哈希

创建合同时,请自行使用此功能:

function PetShop() public {
    // add owners here
    owners[keccak256(msg.sender)] = true;   
}