@zebec-protocol/bulk-transfer
v1.0.0
Published
Zebec Protocol Bulk Transfer SDK provides an easy way to interact with Zebec Protocol Bulk Transfer onchain programs.
Downloads
39
Keywords
Readme
Zebec Protocol SDK
Zebec Protocol Bulk Transfer SDK provides an easy way to interact with Zebec Protocol Bulk Transfer onchain programs.
Prerequisities
Make sure, you've the following installed.
- node (v14+)
- npm or yarn
Test Package
To run the test scripts
yarn test:single <file path>
// example
yarn test:single tests/batchTransfer/createTokenAccounts.spec.ts
Usage
/** create service instance */
const provider = new anchor.AnchorProvider(connection, wallet, AnchorProvider.defaultOptions());
const program = BatchTranferProgramFactory.getProgram({ provider });
const batchTransferIxns = new BatchTransferInstruction(program);
const service = new BatchTransferService(provider, batchTransferIxns);
/** deposit sol for bulk transfer */
const feePayer = provider.publicKey;
const authority = feePayer;
const amount = 1.2353523;
const depositSolPayload = await service.depositSol({ authority, amount });
const signature0 = await depositSolPayload.execute();
/** **/
/** deposit token for bulk transfer */
const feePayer = provider.wallet.publicKey;
const tokenMint = new anchor.web3.PublicKey("AbLwGR8A1wvsiLWrzzA5eYPoQw51NVMcMMTPvAv5LTJ");
const amount = 100;
const decimals = 9;
const depositTx = await batchTransferService.depositToken({
authority: feePayer,
mint: tokenMint,
amount,
decimals,
});
const signature1 = await depositTx.execute();
/** **/
const accounts = [
"Fx3xZ86YZw3gJUHU3FQKKq6ZDbkDLHa5j4z84gBY5LzF",
"4VbwC8uYtjfj2jimQpyshaXRW2u5A3iyhUXQFTb82kCV",
"H9kQHjJSUgbAABxwyFG4MXWb7vqfbBXq2nmPDFFU1S6T",
"95Zp1x4f55uHBHFghX6YmKtQK16ZkqG7KZNmzyeg2ZGL",
"FoqznQf9YL4kuTuRzTJbi4pCHghN32wEtqi4ZaE4bmJi",
"6mcgvH3n5KWfedpzMj7aKT19VWLrkAeq5FSyLtwX2beq",
"5JF1zKkoUWTGuCgRCT9caEP5a2kGB66jsGmfwsBKYsjE",
"AxuiXjbNsGGRSCHgDvHFr8Y2c53jbbpXPeiWBvJmdvaX",
"5QeqNRYVjJ8Apt8D44JtDHq4R3kkNX9p6sLtf2yUMvFL",
"BGv5qqyi69HgR6EEYQK6wdFRj3cWsK2PvntvgJ9ECCdV",
"4xrE4NUmXEW4PwCQU25AmLQmCBNagmWF8ehT5Qoyjrwk",
"DMGY4uF97WRGohaJLKHH7ndSwKTqsZLxZLwusitgpHue",
"H8dgDYpJWpHBauKfR1mpw6GybEVaUmPhy4phNbvLRpgA",
"6q3CLKPQZECGA9QRHNdYmr796Cn8bYCgK9eHD63T6eeb",
"8XoCkZz1WM7ndkbQX8fVXaGYyJobroUs2o2of8m5S8HU",
];
/** create a batch for bulk sol transfer */
let batchSolTransferData: BatchSolTransferData[] = [];
for (let i = 0; i < receiversAddresses.length; i++) {
let receiverPubkey = new anchor.web3.PublicKey(receiversAddresses[i]);
let amount = 0.001;
batchSolTransferData.push({
account: receiverPubkey,
amount: amount,
});
}
const batchSolTransferIxn = await batchTransactionService.transferSolInBatch({
authority: provider.wallet.publicKey,
batchData: batchSolTransferData,
});
const signature2 = await batchSolTransferIxn.execute();
/** **/
/** create a batch for bulk token transfer */
const mint = new anchor.web3.PublicKey("AbLwGR8A1wvsiLWrzzA5eYPoQw51NVMcMMTPvAv5LTJ");
const data = accounts.map<BatchTokenTransferData>((account) => ({
account: getAssociatedTokenAddressSync(mint, new anchor.web3.PublicKey(account)),
amount: 1,
decimals: 9,
}));
const splTransferPayload = await batchTransferService.transferTokenInBatch({
authority: provider.wallet.publicKey,
mint,
batchData: data,
});
const signature3 = await batchTransferIxn.execute();
/** **/
/** check and get accounts that don't have token accounts **/
const mint = new anchor.web3.PublicKey("AbLwGR8A1wvsiLWrzzA5eYPoQw51NVMcMMTPvAv5LTJ");
const keys = await batchTransferService.checkTokenAccount({ accounts: pubkeys, mint, allowOwnerOffCurve: true });
/** **/