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

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.