вывод контракта на отказ из газовой ошибки - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь поиграть с шаблоном снятия, выделенным в документе Solidness, отправив в контракт некоторый эфир, изменив состояние для отказа и в основном выполнив возврат (перенес остаток на счету) обратно запрашивающей стороне. Контракт прекрасно работает в ремиксе, и большинство функций и получателей работают. Однако, когда я пытаюсь вызвать функцию возврата в remix, я получаю сообщение об ошибке json-rpc из-за нехватки времени на eth_sendRawTransaction. Я пытаюсь сделать это на ganache 1.3, используя введенный web3 на хром с метамаской. Кто-нибудь знает, как я могу заставить это работать? Спасибо!

pragma solidity >=0.5.4 <0.6.0;

contract TestContract {
  uint public value;
  address payable public requestor;
  enum State { Requested, Approved, Rejected, Completed }
  State public state;

  mapping (address => uint) pendingWithdrawals;

  constructor(
    address payable _requestor
  ) public payable {
    requestor = _requestor;
    state = State.Requested;
    value = msg.value;
  }

  modifier onlyRequestor() {
    require(
      msg.sender == requestor,
      "Only requestor can call this."
    );
    _;
  }

  modifier inState(State _state) {
    require(
      state == _state,
      "Invalid state."
    );
    _;
  }

  event Rejected();
  event Approved();
  event DataReceived();

  function reject() public inState(State.Requested) {
    emit Rejected();
    state = State.Rejected;
    pendingWithdrawals[requestor] += address(this).balance;
  }

  function refund() public onlyRequestor inState(State.Rejected) {
    uint amount = pendingWithdrawals[msg.sender];

    pendingWithdrawals[msg.sender] = 0;
    msg.sender.transfer(amount);
  }
...