Links

CFA - SDK Core

Stream money with the Constant Flow Agreement using the SDK Core
The ConstantFlowAgreementV1 helper class provides access to create/update/delete flows. You can access this via the Framework class (sf.cfaV1) or initialize this as a standalone class.

Accessing the CFAv1 Contract

Using SDK Core Framework Object
// refresher on initializing the Framework
import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "ethers";
const sf = await Framework.create({
chainId: 137,
provider
});
// access the cfaV1 object via the Framework class
// see below for a complete example
const flowInfo = await sf.cfaV1.getFlowInfo(...)
Direct Initialization
import { ConstantFlowAgreementV1 } from "@superfluid-finance/sdk-core";
const config = {
hostAddress: "0x3E14dC1b13c488a8d5D310918780c983bD5982E7",
cfaV1Address: "0x6EeE6060f715257b970700bc2656De21dEdF074C",
idaV1Address: "0xB0aABBA4B2783A72C52956CDEF62d438ecA2d7a1"
};
const cfaV1 = new ConstantFlowAgreementV1({ options: config });

Methods

Read Methods

getFlow: Get data on a stream between two accounts
getNetFlow: Get the net flow rate of an account for a certain Super Token
getAccountFlowInfo: Get summed flow data of an account for a certain Super Token

Write Methods

Create, Update, Delete

createFlow: Starts a stream from a sender to a chosen receiver
updateFlow: Updates an existing stream from a sender to a chosen receiver
deleteFlow: Cancels an existing stream from a sender to a chosen receiver

Create, Update, Delete with ACL Permissions

createFlowByOperator: Starts a stream between two accounts using ACL permissions
updateFlowByOperator: Updates a stream between two accounts using ACL permissions
deleteFlowByOperator: Deletes a stream between two accounts using ACL permissions

Manage ACL Permissions

updateFlowOperatorPermissions: Lets a sender set the ACL permissions of another account
revokeFlowOperatorPermissions: Revokes all ACL permissions that an account has over the sender's account

Example Usage

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,
provider
});
// Read example
const flowInfo = await sf.cfaV1.getFlow({
superToken: "0x...",
sender: "0x...",
receiver: "0x...",
providerOrSigner: provider
});
console.log("flowInfo", flowInfo);
// Write operation example
const signer = sf.createSigner({ privateKey: "<TEST_ACCOUNT_PRIVATE_KEY>", provider });
const createFlowOperation = sf.cfaV1.createFlow({
sender: "0x...",
receiver: "0x...",
superToken: "0x...",
flowRate: "1000000000"
});
const txnResponse = await createFlowOperation.exec(signer);
const txnReceipt = await txnResponse.wait();
// Transaction Complete when code reaches here