繁体   English   中英

即使输入正确的bytes32值和地址值也是如此。 Setaddress功能不起作用

[英]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 这意味着您要么需要:

  1. 请确保您是从合同中将合同的版本latestVersion的帐户发送的,或者...
  2. 使用合同的功能upgradeVersion()更改latestVersion ,以使其与您的交易发送方匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM