@vechain/vebetterdao-contracts
Version:
Open-source repository that houses the smart contracts powering the decentralized VeBetterDAO on the VeChain Thor blockchain.
32 lines (31 loc) • 1.53 kB
JavaScript
import { VoterRewards__factory } from "../../typechain-types";
import { Clause, ABIContract, Address } from "@vechain/sdk-core";
import { TransactionUtils } from "@repo/utils";
import { chunk } from "./chunk";
import { getConfig } from "@repo/config";
import { ThorClient } from "@vechain/sdk-network";
const thorClient = ThorClient.at(getConfig().nodeUrl);
export const claimVoterRewards = async (voterRewards, roundId, signingAcct, accounts, ignoreErrors = false) => {
console.log("Claiming voter rewards...");
const contractAddress = await voterRewards.getAddress();
const accountChunks = chunk(accounts, 50);
for (const accountChunk of accountChunks) {
try {
const clauses = [];
accountChunk.forEach(account => {
clauses.push(Clause.callFunction(Address.of(contractAddress), ABIContract.ofAbi(VoterRewards__factory.abi).getFunction("claimReward"), [roundId, account.key.address.toString()]));
});
await TransactionUtils.sendTx(thorClient, clauses, signingAcct.pk);
console.log(`Rewards claimed for chunk starting with account ${accountChunk[0]?.key.address.toString()}`);
}
catch (e) {
if (ignoreErrors) {
console.error(`Error claiming rewards for chunk starting with account ${accountChunk[0]?.key.address.toString()}:`, e);
}
else {
throw e;
}
}
}
console.log("Finished attempting to claim voter rewards.");
};