@tempus-labs/utils
Version:
Tempus utility helpers
77 lines • 3.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ERC20Vesting = void 0;
const ContractBase_1 = require("../utils/ContractBase");
/**
* Typed wrapper for ERC20Vesting contract
*/
class ERC20Vesting extends ContractBase_1.ContractBase {
constructor(contractName, token, contract) {
super(contractName, token.decimals, contract);
this.erc20 = token;
}
convertVesting(terms) {
return {
startTime: terms.startTime,
period: terms.period,
firstClaimableAt: terms.firstClaimableAt,
amount: this.toBigNum(terms.amount).toString(),
claimed: this.toBigNum(terms.claimed).toString()
};
}
static async create(token, wallet) {
const contractName = "ERC20Vesting";
const contract = await this.deployContract(contractName, token.address, (0, ContractBase_1.addressOf)(wallet));
return new ERC20Vesting(contractName, token, contract);
}
async wallet() {
return this.contract.wallet();
}
async token() {
return this.contract.token();
}
async startVesting(sender, receiver, terms) {
this.erc20.approve(sender, this.address, terms.amount);
return this.connect(sender).startVesting((0, ContractBase_1.addressOf)(receiver), this.convertVesting(terms));
}
async startVestingBatch(sender, receivers, terms) {
let amountToVest = 0;
let convertedTerms = [];
for (let i = 0; i < terms.length; i++) {
convertedTerms.push(this.convertVesting(terms[i]));
amountToVest += +terms[i].amount;
}
await this.erc20.approve(sender, this.address, amountToVest);
const receiverAddrs = receivers.map(addr => (0, ContractBase_1.addressOf)(addr));
return this.connect(sender).startVestingBatch(receiverAddrs, convertedTerms);
}
async getVestingTerms(receiver) {
const terms = await this.contract.getVestingTerms((0, ContractBase_1.addressOf)(receiver));
return {
startTime: terms.startTime,
period: terms.period,
firstClaimableAt: terms.firstClaimableAt,
amount: this.fromBigNum(terms.amount),
claimed: this.fromBigNum(terms.claimed)
};
}
async stopVesting(sender, receiver) {
return this.connect(sender).stopVesting((0, ContractBase_1.addressOf)(receiver));
}
async transferVesting(sender, oldAddress, newAddress) {
return this.connect(sender).transferVesting((0, ContractBase_1.addressOf)(oldAddress), (0, ContractBase_1.addressOf)(newAddress));
}
async claimable(receiver) {
return this.fromBigNum(await this.contract.claimable((0, ContractBase_1.addressOf)(receiver)));
}
async claim(sender, amount) {
if (amount === undefined) {
return this.connect(sender)['claim()']();
}
else {
return this.connect(sender)['claim(uint256)'](this.toBigNum(amount));
}
}
}
exports.ERC20Vesting = ERC20Vesting;
//# sourceMappingURL=ERC20Vesting.js.map