VestingWallet.sol [Code Snippet]
Locks tokens and gradually releases them to beneficiary.

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


import "../token/ERC20/utils/SafeERC20.sol";


contract VestingWallet {

  using SafeERC20 for IERC20;


  address private _beneficiary;

  uint256 private _start;

  uint256 private _duration;


  event TokensReleased(uint256 amount);


  constructor(address beneficiary_, uint256 start_, uint256 duration_) {

    require(beneficiary_ != address(0), "VestingWallet: beneficiary is the zero address");

    _beneficiary = beneficiary_;

    _start = start_;

    _duration = duration_;

  }


  function vestedAmount(IERC20 token) public view returns (uint256) {

    // Calculate the vested amount based on the time elapsed

  }


  function release(IERC20 token) public {

    // Releases tokens to the beneficiary based on the vesting schedule

    // Emits TokensReleased event upon successful release

  }

}

Share by: