Initialization
How to initialize the SDK Core
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
You'll also need to install
graphql
and ethers.js
to work with the SDK.npm install graphql ethers
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
});
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 networkprovider: SupportedProvider
- the provider being used
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 });
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,
});
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 });
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 modified 8mo ago