UNPKG

@vechain/vebetterdao-contracts

Version:

Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.

49 lines (48 loc) 2.08 kB
import { Treasury__factory } from "../../typechain-types"; import { Clause, Address, VTHO, ERC20_ABI, ABIContract } from "@vechain/sdk-core"; import { TransactionUtils } from "@repo/utils"; import { chunk } from "./chunk"; import { ThorClient } from "@vechain/sdk-network"; import { getConfig } from "@repo/config"; const thorClient = ThorClient.at(getConfig().nodeUrl); export const airdropVTHO = async (accounts, amount, sourceAccount) => { console.log(`Airdropping VTHO...`); const accountChunks = chunk(accounts, 200); for (const accountChunk of accountChunks) { const clauses = []; accountChunk.forEach(address => { clauses.push(Clause.transferVTHOToken(address, VTHO.of(amount))); }); await TransactionUtils.sendTx(thorClient, clauses, sourceAccount.pk); } }; /** * Transfer ERC20 tokens */ export const transferErc20 = async (tokenAddress, sender, recipient, amount) => { console.log(`Transferring ${amount} ${tokenAddress} tokens from ${sender.address} to ${recipient}`); if (amount === 0n) { console.log(`Skipping transfer of 0 tokens from ${sender.address} to ${recipient}`); return; } const clauses = []; clauses.push(Clause.callFunction(Address.of(tokenAddress), ABIContract.ofAbi(ERC20_ABI).getFunction("transfer"), [ recipient, amount, ])); await TransactionUtils.sendTx(thorClient, clauses, sender.pk); }; /** * Airdrop B3TR from treasury to a list of accounts */ export const airdropB3trFromTreasury = async (treasuryAddress, admin, accounts) => { console.log(`Airdropping B3TR...`); const accountChunks = chunk(accounts, 100); for (const accountChunk of accountChunks) { const clauses = []; accountChunk.forEach(account => { clauses.push(Clause.callFunction(Address.of(treasuryAddress), ABIContract.ofAbi(Treasury__factory.abi).getFunction("transferB3TR"), [account.key.address.toString(), account.amount])); }); await TransactionUtils.sendTx(thorClient, clauses, admin.pk); } };