pragma solidity 0.5.0; contract EtherStore { uint256 public withdrawalLimit = 1 ether; mapping(address => uint256) public lastWithdrawTime; mapping(address => uint256) public balances; function depositFunds() public payable { balances[msg.sender] += msg.value; } function withdrawFunds (uint256 _weiToWithdraw) public { require(balances[msg.sender] >= _weiToWithdraw); // limit the withdrawal require(_weiToWithdraw <= withdrawalLimit); // limit the time allowed to withdraw require(now >= lastWithdrawTime[msg.sender] + 1 weeks); (bool success, bytes memory data) = msg.sender.call.value(_weiToWithdraw)(""); require(success); balances[msg.sender] -= _weiToWithdraw; lastWithdrawTime[msg.sender] = now; } }