@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
JavaScript
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);
}
};