diff --git a/contracts/escrow.sol b/contracts/escrow.sol index 81bfaed3..352731e5 100644 --- a/contracts/escrow.sol +++ b/contracts/escrow.sol @@ -31,6 +31,14 @@ contract Escrow is Pausable { event Paid(uint escrowId); event Canceled(uint escrowId); + /** + * @dev Create a new escrow + * @param _buyer The address that will perform the buy for the escrow + * @param _expirationTime Unix timestamp before the transaction is considered expired + * @notice Requires contract to be unpaused. + * The seller needs to be licensed. + * The expiration time must be at least 10min in the future + */ function create(address payable _buyer, uint _expirationTime) public payable whenNotPaused { require(_expirationTime > (block.timestamp + 600), "Expiration time must be at least 10min in the future"); require(msg.value > 0, "ETH amount is required"); // TODO: abstract this to use ERC20. Maybe thru the use of wETH @@ -48,6 +56,14 @@ contract Escrow is Pausable { emit Created(msg.sender, _buyer, msg.value, escrowId); } + + /** + * @dev Release escrow funds to buyer + * @param _escrowId Id of the escrow + * @notice Requires contract to be unpaused. + * Can only be executed by the seller + * Transaction must not be expired, or previously canceled or released + */ function release(uint _escrowId) public whenNotPaused { require(_escrowId < transactions.length, "Invalid escrow id"); @@ -64,6 +80,13 @@ contract Escrow is Pausable { emit Paid(_escrowId); } + /** + * @dev Cancel an escrow operation + * @param _escrowId Id of the escrow + * @notice Requires contract to be unpaused. + * Can only be executed by the seller + * Transaction must not be expired, or previously canceled or released + */ function cancel(uint _escrowId) public whenNotPaused { require(_escrowId < transactions.length, "Invalid escrow id"); @@ -79,6 +102,14 @@ contract Escrow is Pausable { emit Canceled(_escrowId); } + + /** + * @dev Withdraws funds to the sellers in case of emergency + * @param _escrowId Id of the escrow + * @notice Requires contract to be paused. + * Can be executed by anyone + * Transaction must not be canceled or released + */ function withdraw_emergency(uint _escrowId) public whenPaused { require(_escrowId < transactions.length, "Invalid escrow id");