@settlemint/solidity-token-erc20-crowdsale
Version:
Smart contract set to build an ERC20 token sale in SettleMint
50 lines (37 loc) • 1.83 kB
text/typescript
import { events, transactions } from '@amxx/graphprotocol-utils';
import { Bytes } from '@graphprotocol/graph-ts';
import { VestingLockedIn, VestingReleased } from '../../generated/schema';
import { VestingLockedIn as VestingLockedInEvent } from '../../generated/vestingvault/IVestingVault';
import { fetchAccount } from '../fetch/account';
import { fetchVesting, fetchVestingVault } from '../fetch/vestingvault';
export function handleVestingLockedIn(event: VestingLockedInEvent): void {
const contract = fetchVestingVault(event.address);
const beneficiary = fetchAccount(event.params.beneficiary);
const vesting = fetchVesting(contract, beneficiary, event.params.releaseTime);
const ev = new VestingLockedIn(events.id(event));
ev.emitter = Bytes.fromHexString(contract.id);
ev.transaction = transactions.log(event).id;
ev.timestamp = event.block.timestamp;
ev.contract = contract.id;
ev.beneficiary = beneficiary.id;
ev.tokenAmount = event.params.tokenAmount;
ev.releaseTime = event.params.releaseTime;
vesting.tokenAmount = vesting.tokenAmount.plus(event.params.tokenAmount);
vesting.save();
ev.save();
}
export function handleVestingReleased(event: VestingLockedInEvent): void {
const contract = fetchVestingVault(event.address);
const beneficiary = fetchAccount(event.params.beneficiary);
const vesting = fetchVesting(contract, beneficiary, event.params.releaseTime);
const ev = new VestingReleased(events.id(event));
ev.emitter = Bytes.fromHexString(contract.id);
ev.transaction = transactions.log(event).id;
ev.timestamp = event.block.timestamp;
ev.contract = contract.id;
ev.beneficiary = beneficiary.id;
ev.tokenAmount = event.params.tokenAmount;
vesting.tokenAmount = vesting.tokenAmount.minus(event.params.tokenAmount);
vesting.save();
ev.save();
}