JSPM

@superical/time-lock-vault

1.1.1
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1
  • Score
    100M100P100Q33401F
  • License AGPL-3.0-or-later

A simple time-lock vault for ERC20 tokens

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@superical/time-lock-vault) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Time-Lock Vault Contracts

    Release solidity Hardhat License: GNU AGPLv3

    Time-Lock Vault Solidity Contracts

    A simple and easy to use time-lock vault for ERC20 tokens, designed to support multiple deposits and withdrawals by various users. Each deposit can have a predefined/fixed locking period or a different locking period from the other deposits. Recipients will receive their share of vesting tokens that represent the amount of their deposited asset.

    Simple Time-Lock Vault

    The SimpleTimeLockVault contract is a ready-to-use vault contract, providing the standard time-lock vault functionality such as deposit, withdraw and batchWithdraw.

    Custom Time-Lock Vaults

    Alternatively, you can create your own Solidity vault contract by extending the TimeLockVault abstract contract and implementing your desired logic.

    Installation

    npm install @superical/time-lock-vault --save-dev

    Usage

    Note that the TimeLockVault is an upgradeable contract. If you don't plan on upgrading your vault contract, you should initialise it in your constructor.

    import "@superical/time-lock-vault/contracts/TimeLockVault.sol";
    
    contract MyCustomVault is TimeLockVault {
      constructor(string memory _name, string memory _symbol, address _asset) initializer {
        // Initialize the TimeLockVault contract
        __TimeLockVault_init(_name, _symbol, _asset);
      }
    
      // Implement custom deposit logic
      function deposit(uint256 amount) external {
        // Custom deposit condition here...
        // Deposit from the sender to himself and to be locked for 1 day
        _deposit(_msgSender(), _msgSender(), amount, 86400);
      }
    
      // Implement custom withdraw logic
      function withdraw(uint256 depositId) external {
        // Custom withdrawal condition here...
        // Withdraw deposit ID to sender
        _withdraw(depositId);
      }
    }

    Your contract will inherit additional functionalities such as premature withdrawal (refer to the _prematureWithdraw function) before the maturity date subject your specific condition, control over the depositor/recipient addresses, and other aspects.