Batch Calls
The Superfluid SDK has been deprecated. Only critical bug fixes will be provided. We recommend using the Superfluid Protocol directly. Batch calls is the only feature that is not available in the Superfluid Forwarders directly and is still available in the SDK.
THE USE OF THE SUPERFLUID SDK IS NOT RECOMMENDED. PLEASE ONLY USE IT IF IT IS ABSOLUTELY NECESSARY.
Superfluid's SDK Core allows you to batch multiple operations into a single transaction. This guide explains how to utilize the BatchCall class to achieve this.
Supported Operations
List of Operations Supported by BatchCall
ERC20_APPROVE
(SuperToken only)ERC20_TRANSFER_FROM
SUPERTOKEN_UPGRADE
SUPERTOKEN_DOWNGRADE
SUPERFLUID_CALL_AGREEMENT
CALL_APP_ACTION
SUPERFLUID_CALL_AGREEMENT
refers to operations related to CFA or IDA, like createFlow
, updateIndex
, distribute
, etc. CALL_APP_ACTION
refers to operations created from calling a function on a super app.
Framework Based Initialization
Initializing BatchCall via Framework
import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "ethers";
const provider = new ethers.providers.InfuraProvider("matic", "<INFURA_API_KEY>");
const sf = await Framework.create({
chainId: 137, // Change to your network's chain ID
provider
});
const signer = sf.createSigner({ privateKey: "<TEST_ACCOUNT_PRIVATE_KEY>", provider });
const batchCall = sf.batchCall([/* Replace with your operations */]);
Direct Initialization
Initializing BatchCall Directly
import { BatchCall } from "@superfluid-finance/sdk-core";
const batchCall = new BatchCall({
hostAddress: "0x3E14dC1b13c488a8d5D310918780c983bD5982E7",
operations: [/* Replace with your operations */]
});
Usage
Creating and Executing Batch Calls
import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "ethers";
const provider = new ethers.providers.InfuraProvider("matic", "<INFURA_API_KEY>");
const sf = await Framework.create({
chainId: 137, // Replace with your chain ID
provider
});
const daix = await sf.loadSuperToken("0x745861AeD1EEe363b4AaA5F1994Be40b1e05Ff90");
const signer = sf.createSigner({ privateKey: "<TEST_ACCOUNT_PRIVATE_KEY>", provider });
const fromAddress = "0xabc";
const paymentAddress = "0xdef";
const approveOp = daix.approve({ receiver: paymentAddress, amount: "10000" });
const transferFromOp = daix.transferFrom({
sender: fromAddress,
receiver: paymentAddress,
amount: "10000"
});
const batchCall = sf.batchCall([approveOp, transferFromOp]);
const txn = await batchCall.exec(signer);
// Example of creating an operation from a super app function
const superAppInterface = new ethers.utils.Interface(/* Replace with SUPER_APP_ABI */);
const callData = superAppInterface.encodeFunctionData("transferERC20", [
/* Replace with your parameters */
]);
const transferOp = sf.host.callAppAction(/* Replace with app address */, callData);
const batchCall = sf.batchCall([transferOp]);
await batchCall.exec(signer);
This guide covers how to use the BatchCall class in the Superfluid SDK Core to batch multiple operations into a single transaction. It includes both framework-based and direct initialization methods, along with examples of creating and executing batch calls.