1.0.0 • Published 7 months ago

@zebec-protocol/bulk-transfer v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

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

/** **/