Initialization
How to initialize the SDK Core
Required Imports
To install the Superfluid SDK Core, you can run
You'll need to have a project which already includes graphql
and ethers
as dependencies.
From here, you can install the Superfluid SDK Core like so:
npm install @superfluid-finance/sdk-core
Peer Dependencies
You'll also need to install graphql
and ethers.js
to work with the SDK.
npm install graphql ethers
Initializing the SDK Core
When creating the framework, you'll use Framework.create()
like so:
const sf = await Framework.create({
chainId: Number, //i.e. 137 for matic
provider: ethersProvider // i.e. the provider being used
});
Framework Options
When creating the framework, you must pass in the following options. The only required params are the provider
and a chainId
chainId: number
- the chain Id for the network
provider: SupportedProvider
- the provider being used
The Signer Class [Optional]
Web3Provider Signer Example
Below is an example of using the Web3Provider
object to create a signer. This will likely be the way that most client-side applications create a signer.
import { Framework } from "@superfluid-finance/sdk-core";
import Web3Modal from "web3modal";
import { Web3Provider } from "@ethersproject/providers";
// web3Modal example
const web3ModalRawProvider = await web3Modal.connect();
const web3ModalProvider = new Web3Provider(web3ModalRawProvider, "any");
const sf = await Framework.create({
chainId: 137, //your chainId here
provider: web3ModalProvider,
});
const web3ModalSigner = sf.createSigner({ web3Provider: web3ModalProvider });
// MetaMask example
const metamaskProvider = new Web3Provider(window.ethereum);
const metaMaskSigner = sf.createSigner({ web3Provider: metamaskProvider });
Hardhat Signer Example
Below is an example of creating a signer in a Hardhat
+ ethers.js
environment. This will likely be the way that the sdk-core
is used in a testing environment.
import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "hardhat";
const sf = await Framework.create({
chainId: 137, //your chainId here
provider: ethers.provider,
});
const signer = sf.createSigner({
privateKey: "<TEST_ACCOUNT_PRIVATE_KEY>",
provider: ethers.provider,
});
Signer/Wallet Example
Below is an example of creating a signer passing in a signer object (this can be a wallet for example). This will likely be the way that the sdk-core
is used in a Node.js environment (back-end) or a testing environment.
import { Framework } from "@superfluid-finance/sdk-core";
import { ethers } from "ethers";
const provider = new ethers.providers.InfuraProvider(
"matic",
"<INFURA_API_KEY>"
);
const wallet = new ethers.Wallet(
"cf2bea4c6aad8dbc387d5dd68bf408999b0b1ee949e04ff1d96dd60bc3553a49",
provider
);
const sf = await Framework.create({
chainId: 137, //your chainId here
provider,
});
const signer = sf.createSigner({ signer: wallet });
Operations
The Operation
class is an object that is returned after you execute a contract call from this package - instead of immediately executing, we return the Operation
class which can be either executed to broadcast the transaction or used to create and execute a BatchCall
. We'll make use of this class in our next sections.
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, //this is for matic - enter your own chainId here
provider
});
// create a signer
const signer = sf.createSigner({ privateKey: "<TEST_ACCOUNT_PRIVATE_KEY>", provider });
// load the usdcx SuperToken via the Framework
const usdcx = sf.loadSuperToken("0xCAa7349CEA390F89641fe306D93591f87595dc1F");
// create an approve operation
const approveOperation = usdcx.approve({ receiver: "0xab...", amount: ethers.utils.parseUnits("100").toString() });
// execute the approve operation, passing in a signer
const txn = await approveOperation.exec(signer);
// wait for the transaction to be confirmed
const receipt = await txn.wait();
// or you can create and execute the transaction in a single line
const approveTxn = await usdcx.approve({ receiver: "0xab...", amount: ethers.utils.parseUnits("100").toString() }).exec(signer);
const approveTxnReceipt = await approveTxn.wait();
Last updated
Was this helpful?