Даже после ввода правильного значения bytes32 и значения адреса.Setaddress функция не работает - PullRequest
0 голосов
/ 27 августа 2018

Я получаю общую ошибку каждый раз, когда пытаюсь изменить код.Я передаю byte32 значение как "0xabcd" и адресное значение как "0xca35b7d915458ef540ade6068dfe2f44e8fa733c" в Setaddress функции.

Ошибка выглядит следующим образом:

"transact в EternalStorage.setAddress errored: ошибка VM: revert. revert Транзакция была возвращена в исходное состояние. Примечание. Конструктор должен быть платным, если вы отправляете значение. Отладка транзакции для получения дополнительной информации. "

Ниже мой код

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];
}
}

1 Ответ

0 голосов
/ 27 августа 2018

В сообщении об ошибке говорится, что транзакция в setAddress() отменена:

транзакция в EternalStorage.setAddress с ошибкой: Ошибка виртуальной машины: возврат.

Существует только одинrequre() оператор в setAddress(), в onlyLatestVersion():

require(msg.sender == latestVersion);

Таким образом, практически точно, что отправитель транзакции (msg.sender) не установлен в latestVersion.Это означает, что вам необходимо:

  1. Удостовериться, что вы отправляете со счета, который имеет контракт, как latestVersion, или ...
  2. Изменить latestVersion, используяФункция контракта upgradeVersion(), так что она соответствует отправителю транзакции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...