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.
The SimpleTimeLockVault contract is a ready-to-use vault contract, providing the standard
time-lock vault functionality such as deposit, withdraw and batchWithdraw.
Alternatively, you can create your own Solidity vault contract by extending the TimeLockVault
abstract contract and implementing your desired logic.
npm install @superical/time-lock-vault --save-devNote 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.
