Я пытаюсь поиграть с шаблоном снятия, выделенным в документе 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);
}