CrestFi
  • 🫐CrestFi
  • 🚀Getting Started
    • ☃️How to get started?
    • 🤑Benefits of Using CrestFi
    • 💵Deposit
    • ⏳Start Streaming
    • 💰Withdraw Funds
  • 🔒Safe
    • 🗝️Create Safe
    • 💵Deposit in Safe
    • 💸Sending a Transaction
    • ⚧Signing a Transaction
  • CrestFi Evm
    • 📦CrestFi Evm Sdk
      • CrestFi Stream Client
        • Creating Clients
        • Whitelisting Tokens
        • Deposit into Crest Wallet
        • Withdraw from Crest Wallet
        • Initiating a Stream
        • Pause/Resume/Cancel Stream
        • Updating a Stream
        • Withdraw Streamed Tokens
        • Getting Stream Details
      • CrestFi Bulk Client
        • Bulk Instant Transfer
      • CrestFi Multisig Stream
        • NFT
Powered by GitBook
On this page
Export as PDF
  1. CrestFi Evm
  2. CrestFi Evm Sdk
  3. CrestFi Bulk Client

Bulk Instant Transfer

Initializing the Class

To initialize an instance of the CrestFiBulkClient class, you need to provide a signer or provider and optionally specify contract addresses for BulkTransfer and Core. Here's an example of how to initialize the class:

import { ethers } from "ethers";
import { CrestFiBulkClient } from "@crestfi/crest-bnb-sdk";

// Initialize with a signer (e.g., MetaMask)
const signer = new ethers.Wallet("your-private-key");
const bulkClient = new CrestFiBulkClient(signer);
  1. Initialize Bulk Instant

const bulkStreamName = "YourBulkStreamName";
const now = Math.floor(Date.now() / 1000);
const amounts = ["1", "2", "3"];
const tokenAddress = "0xTokenAddress";
const receivers = [receiver1.address, receiver2.address, receiver3.address];
const startTimes = [BigNumber.from(now + 100)]; // An array of start times. Length must be equal to recurring Frequency
const recurringFrequency = 1;
const overrides = {}; // Optional overrides

const bulkInstantTree = await bulkClient.getBulkInstantTransferRoot(
      tokenAddress,
      amounts,
      receivers
    );

const txnReceipt = await bulkClient.initBlulkInstantTransfer(
      bulkStreamName,
      bulkInstantTree.root,
      startTimes,
      recurringFrequency
    );
console.log(txnReceipt);

initBlulkInstantTransfer method initializes a bulk stream with a bulk tree root, start times, and other parameters.

getBulkInstantTransferRoot function is designed to calculate and retrieve the Merkle tree root for a bulk instant transfer. This function is used to create a Merkle tree structure that represents a set of instant token transfers that will occur simultaneously.

  1. Update Bulk Transfer

const bulkName = "Updated Bulk";
const bulkIndex = await receiver1Client.getLatestBulkCount(sender.address).toNumber(); // bulk index to update
const amounts = ["5", "7", "9"];
const tokenAddress = "0xNewTokenAddress";
const receivers = [receiver1.address, receiver2.address, receiver3.address];
const startTimes = [BigNumber.from(now + 600), BigNumber.from(now + 900)];  // An array of start times. Length must be equal to recurring Frequency
const recurringFrequency = 2;
const overrides = {}; // Optional overrides

bulkInstantTree = await bulkClient.updateBulkInstantTransferRoot(
  tokenAddress,
  amounts,
  receivers,
  withdrawBulkCount
);

const txnReceipt = await bulkClient.updateBulkTransfer(
  bulkName,
  bulkIndex,
  merkleRoot,
  startTimes,
  recurringFrequency,
  overrides
);
console.log(txnReceipt);

updateBulkInstantTransferRoot function is used to update an existing bulk instant transfer by recalculating the Merkle tree root based on new transfer data.

updateBulkTransfer method updates a bulk transfer with new information such as a merkle root and start times.

  1. Withdraw Bulk Instant Transfer By Receiver

const amount = "1";
const tokenAddress = "0xTokenAddress";
const sender = "0xSenderAddress";
const receiver = "0xReceiverAddress";
const proofs = ["0xProof1", "0xProof2"]; // Array of merkle proofs
const crestWalletTransfer = false;
const overrides = {}; // Optional overrides
const bulkIndex = await receiver1Client.getLatestBulkCount(sender.address).toNumber(); // get the latest bulk index

const txnReceipt = await bulkClient.withdrawBulkInstantTransfer(
  bulkIndex,
  amount,
  tokenAddress,
  sender,
  receiver,
  proofs,
  crestWalletTransfer,
  overrides
);
console.log(txnReceipt);

This method allows a user to withdraw funds from a bulk instant transfer using merkle proofs. Note: The purpose of the getLatestBulkCount function is to determine the number of bulk transfers that a user has created within the CrestFi protocol. Bulk transfers are collections of individual token streams, and each bulk transfer has a unique index or identifier.

  1. Cancel Bulk Instant Transfer

const bulkIndex = 1;
const overrides = {}; // Optional overrides
const txnReceipt = await bulkClient.cancelBulkInstantTransfer(bulkIndex, overrides);
console.log(txnReceipt);

This method cancels a bulk instant transfer.

  1. Calculate Latest Bulk Bytes

const userAddress = "0xUserAddress";
const bulkBytes = await bulkClient.calculateLatestBulkBytes(userAddress);
console.log(bulkBytes);

The calculateLatestBulkBytes function in the CrestFiBulkClient class is used to calculate the byte representation of the latest bulk transfer associated with a specific user's address. This function allows you to obtain the byte representation of the most recent bulk transfer.

  1. Get Bulk Transfer Root

const bulkBytes = "0xabcdef123456..."; // Replace with the actual bulk transfer identifier
// Retrieve the Merkle root of the specified bulk transfer
const bulkTransferRoot = await bulkClient.getBulkTransferRoot(bulkTransferBytes);
console.log(`Merkle Root of Bulk Transfer: ${bulkTransferRoot}`)

The getBulkTransferRoot function is used to retrieve the Merkle root associated with a specific bulk transfer.

  1. Verify Bulk Transfer

// Verify the bulk instant transfer
const verified = await bulkClient.verifyBulkInstantTransfer(
  index,
  amount,
  tokenAddress,
  sender,
  receiver,
  proofs
);

if (verified) {
  console.log("Bulk Instant Transfer is valid and verified.");
} else {
  console.log("Bulk Instant Transfer is not valid.");
}

The purpose of the verifyBulkInstantTransfer function is to perform verification checks on a bulk instant transfer to ensure that it matches the expected properties and has not been manipulated or tampered with.

PreviousCrestFi Bulk ClientNextCrestFi Multisig Stream

Last updated 4 months ago

📦