Skip to content

Amazid19/ArcEscrow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

// SPDX-License-Identifier: MIT pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

contract ArcEscrow { using SafeERC20 for IERC20;

address public immutable buyer;
address public immutable seller;
IERC20 public immutable usdcToken; 
uint256 public immutable amount;

bool public isReleased;
bool public isDeposited; 

constructor(address _usdcToken, uint256 _amount) {
    buyer = 0x0814D1586F528db4023A6860cf9BE6EDDDE765d1;
    seller = 0xeF2b94566BE5F10276042F7BaBB54985EE119C95;
    usdcToken = IERC20(_usdcToken);
    amount = _amount;
    isReleased = false;
    isDeposited = false;
}

// Buyer deposits funds
function deposit() external {
    require(msg.sender == buyer, "Only buyer can deposit");
    require(!isDeposited, "Already deposited");
    
    isDeposited = true;
    usdcToken.safeTransferFrom(buyer, address(this), amount);
}

// Buyer releases funds if the work is satisfactory
function releaseFund() external {
    require(msg.sender == buyer, "Only buyer can release funds");
    require(isDeposited, "No funds deposited yet");
    require(!isReleased, "Funds already released");

    isReleased = true;
    usdcToken.safeTransfer(seller, amount);
}

// Buyer can refund if the deal is canceled
function refund() external {
    require(msg.sender == buyer, "Only buyer can refund");
    require(isDeposited, "No funds to refund");
    require(!isReleased, "Funds already released to seller");

    isDeposited = false; 
    usdcToken.safeTransfer(buyer, usdcToken.balanceOf(address(this)));
}

}

About

testing 1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages