[英]How to hash two bytes32 vars via keccak256 in the most gas-efficient way using Solidity keys
[英]Even after entering proper bytes32 value and address value. Setaddress function is not working
每次尝试修改代码时,我都会遇到一般性错误。 我传递byte32
值"0xabcd"
和地址值"0xca35b7d915458ef540ade6068dfe2f44e8fa733c"
在Setaddress
功能。
错误如下:
“事务处理到EternalStorage.setAddress错误:VM错误:恢复。恢复已将事务恢复到初始状态。注意:如果发送值,则应支付构造方法的费用。调试事务以获取更多信息。”
下面是我的代码
pragma solidity ^0.4.17;
contract EternalStorage {
address owner = msg.sender;
address latestVersion;
mapping(bytes32 => uint) uIntStorage;
mapping(bytes32 => address) addressStorage;
modifier onlyLatestVersion() {
require(msg.sender == latestVersion);
_;
}
function upgradeVersion(address _newVersion) public {
require(msg.sender == owner);
latestVersion = _newVersion;
}
// *** Getter Methods ***
function getUint(bytes32 _key) external view returns(uint) {
return uIntStorage[_key];
}
function getAddress(bytes32 _key) external view returns(address) {
return addressStorage[_key];
}
// *** Setter Methods ***
function setUint(bytes32 _key, uint _value) onlyLatestVersion external {
uIntStorage[_key] = _value;
}
function setAddress(bytes32 _key, address _value) onlyLatestVersion external payable{
addressStorage[_key] = _value;
}
// *** Delete Methods ***
function deleteUint(bytes32 _key) onlyLatestVersion external {
delete uIntStorage[_key];
}
function deleteAddress(bytes32 _key) onlyLatestVersion external {
delete addressStorage[_key];
}
}
该错误消息表明,对setAddress()
的事务已还原:
交易到EternalStorage.setAddress错误:VM错误:恢复。
setAddress()
中的onlyLatestVersion()
只有一个requre()
语句:
require(msg.sender == latestVersion);
因此,几乎可以肯定的是,事务的发送方( msg.sender
)并未设置为latestVersion
。 这意味着您要么需要:
latestVersion
的帐户发送的,或者... upgradeVersion()
更改latestVersion
,以使其与您的交易发送方匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.