@settlemint/solidity-token-erc20-crowdsale
Version:
Smart contract set to build an ERC20 token sale in SettleMint
38 lines (32 loc) • 1.34 kB
text/typescript
import { Address, BigInt } from '@graphprotocol/graph-ts';
import { fetchERC20 } from '@openzeppelin/subgraphs/src/fetch/erc20';
import { ICrowdSale } from '../../generated/crowdsale/ICrowdSale';
import { CrowdSaleContract } from '../../generated/schema';
import { fetchAccount } from './account';
export function fetchCrowdSaleContract(
address: Address,
tokenAmount: BigInt
): CrowdSaleContract {
const account = fetchAccount(address);
let contract = CrowdSaleContract.load(account.id.toHex());
if (contract == null) {
const endpoint = ICrowdSale.bind(address);
const token = endpoint.try_token();
const wallet = endpoint.try_wallet();
const tokensAvailable = endpoint.try_tokensAvailable();
contract = new CrowdSaleContract(account.id.toHex());
contract.token = token.reverted ? null : fetchERC20(token.value).id;
contract.wallet = wallet.reverted ? null : fetchAccount(wallet.value).id;
contract.initialSupply = tokensAvailable.reverted
? null
: tokensAvailable.value.plus(tokenAmount);
contract.tokensAvailable = tokensAvailable.reverted
? null
: tokensAvailable.value.plus(tokenAmount);
contract.fundsRaised = BigInt.fromString('0');
account.asCrowdSale = contract.id;
contract.save();
account.save();
}
return contract as CrowdSaleContract;
}