const createTagWithdrawalVaultAccounts = async (
assetId: string,
name: string,
): Promise<Array<{}> | undefined> => {
const result: Array<{}> = [];
try {
const vaultAccount = await fireblocks.vaults.createVaultAccount({
createVaultAccountRequest: {
name,
},
});
if (vaultAccount.data) {
const vaultWallet = await fireblocks.vaults.createVaultAccountAsset({
vaultAccountId: vaultAccount.data.id as string,
assetId,
});
result.push({
"Vault Account Name": vaultAccount.data.name,
"Vault Account ID": vaultAccount.data.id,
"Asset ID": assetId,
Address: vaultWallet.data.address,
});
console.log(JSON.stringify(result, null, 2));
}
return result;
} catch (error) {
console.error(error);
}
};
const sweepToOmnibus = async (
vaNamePrefix: string,
minAmount: number,
assetId: string,
omnibusVaId: string,
): Promise<
Array<{
fromVaName: string;
fromVaId: string;
txId: string;
grossAmount: string;
}>
> => {
let sweepingInfo: any[] = [];
const vaultsToSweepFrom = await fireblocks.vaults.getPagedVaultAccounts({
namePrefix: vaNamePrefix,
assetId,
minAmountThreshold: minAmount,
});
if (vaultsToSweepFrom.data.accounts) {
await Promise.all(
vaultsToSweepFrom.data.accounts.map(
async (vaultAccount: VaultAccount) => {
if (vaultAccount.assets && vaultAccount.assets.length > 0) {
const createTxResponse =
await fireblocks.transactions.createTransaction({
transactionRequest: {
assetId,
source: {
type: TransferPeerPathType.VaultAccount,
id: vaultAccount.id,
},
destination: {
type: TransferPeerPathType.VaultAccount,
id: omnibusVaId,
},
amount: vaultAccount.assets[0].available,
},
});
sweepingInfo.push({
fromVaName: vaultAccount.name,
fromVaId: vaultAccount.id,
txId: createTxResponse.data.id,
grossAmount: vaultAccount.assets[0].available,
});
}
},
),
);
}
console.log(
"Initiated sweeping transactions:\n" +
JSON.stringify(sweepingInfo, null, 2),
);
return sweepingInfo;
};
sweepToOmnibus("END-USER-#", 0.1, "ETH_TEST5", "0");