@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
55 lines (54 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.airdropB3trFromTreasury = exports.transferErc20 = exports.airdropVTHO = void 0;
const typechain_types_1 = require("../../typechain-types");
const sdk_core_1 = require("@vechain/sdk-core");
const utils_1 = require("@repo/utils");
const chunk_1 = require("./chunk");
const sdk_network_1 = require("@vechain/sdk-network");
const config_1 = require("@repo/config");
const thorClient = sdk_network_1.ThorClient.at((0, config_1.getConfig)().nodeUrl);
const airdropVTHO = async (accounts, amount, sourceAccount) => {
console.log(`Airdropping VTHO...`);
const accountChunks = (0, chunk_1.chunk)(accounts, 200);
for (const accountChunk of accountChunks) {
const clauses = [];
accountChunk.forEach(address => {
clauses.push(sdk_core_1.Clause.transferVTHOToken(address, sdk_core_1.VTHO.of(amount)));
});
await utils_1.TransactionUtils.sendTx(thorClient, clauses, sourceAccount.pk);
}
};
exports.airdropVTHO = airdropVTHO;
/**
* Transfer ERC20 tokens
*/
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(sdk_core_1.Clause.callFunction(sdk_core_1.Address.of(tokenAddress), sdk_core_1.ABIContract.ofAbi(sdk_core_1.ERC20_ABI).getFunction("transfer"), [
recipient,
amount,
]));
await utils_1.TransactionUtils.sendTx(thorClient, clauses, sender.pk);
};
exports.transferErc20 = transferErc20;
/**
* Airdrop B3TR from treasury to a list of accounts
*/
const airdropB3trFromTreasury = async (treasuryAddress, admin, accounts) => {
console.log(`Airdropping B3TR...`);
const accountChunks = (0, chunk_1.chunk)(accounts, 100);
for (const accountChunk of accountChunks) {
const clauses = [];
accountChunk.forEach(account => {
clauses.push(sdk_core_1.Clause.callFunction(sdk_core_1.Address.of(treasuryAddress), sdk_core_1.ABIContract.ofAbi(typechain_types_1.Treasury__factory.abi).getFunction("transferB3TR"), [account.key.address.toString(), account.amount]));
});
await utils_1.TransactionUtils.sendTx(thorClient, clauses, admin.pk);
}
};
exports.airdropB3trFromTreasury = airdropB3trFromTreasury;