
Security News
RubyGems Adds Cooldown Feature to Bundler for Newly Published Gems
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.
@streamable-finance/js-sdk
Advanced tools
Javascript SDK for building with Superfluid Protocol.
Superfluid SDK project has been modularized, for similar functionality use @streamable-finance/sdk-core instead.
We will be deprecating the JS-SDK and stop providing support/fixes in the near future, so please use either:
or
Here is a quick look at using the SDK.
const SuperfluidSDK = require("@streamable-finance/js-sdk");
const Web3 = require("web3");
const sf = new SuperfluidSDK.Framework({
web3: new Web3(window.ethereum),
tokens: ["fDAI"],
});
await sf.initialize();
const bob = sf.user({ address: "0xabc...", token: sf.tokens.fDAIx.address });
// Constant Flow Agreement
await bob.flow({
recipient: "0x123...",
flowRate: "38580246913580", // 100 tokens / mo
});
// Instant Distribution Agreement
// - More utilities coming soon. See the docs for now
sf.user: A helpful abstraction that should handle most of your needs. See below for more details.sf.host : The truffle contract instance
to interact with the host contract (Superfluid.sol).sf.contracts : The truffle contract objects loaded by the SDK:
IERC20 : The ERC20 Interface.TokenInfo : A customary ERC20 token info interface (name/symbol/decimals).ERC20WithTokenInfo : A combination of IERC20 and TokenInfo.TestToken : A ERC20 Test token.IResolver : A simple resolver interface to locate different versions of the contracts.ISuperfluid : The Superfluid host contract interface.ISuperToken : The Super token contract interface.IConstantFlowAgreementV1 : The constant flow agreement (v1) contract interface.IInstantDistributionAgreementV1 : The instant distribution agreement (v1) contract interface.sf.createERC20Wrappersf.resolver: The resolver used by the SDK.
fDAI : The fake DAI. sf.resolver.get("tokens.fDAI").fUSDC : The fake USDC. sf.resolver.get("tokens.fUSDC").fTUSD : The fake TUSD. sf.resolver.get("tokens.fTUSD").sf.agreements:
sf.agreements.cfa : Constant flow agreement truffle contract instance.sf.agreements.ida : Instant distribution agreement truffle contract instance.sf.cfa: The constant flow agreement helper class instance.sf.ida: The instant distribution agreement helper class instance.During initialization, the resolver will be used to fetch the correct set of contracts based on the version you provide
| Argument | Type | description | default |
|---|---|---|---|
| version | String | Release version of the deployed protocol | v1 |
| isTruffle | Boolean | Use the Framework under the native truffle environment | false |
| web3 | Object | Use the Framework with web3.js (1.3.x) | undefined |
| additionalContracts | String[] | additional contracts to be loaded | [] |
| tokens | String[] | List of token keys to load from the resolver | [] |
| loadSuperNativeToken | Boolean | Load super native token (e.g. ETHx) if possible | false |
| resolverAddress | Address | Force resolver address | undefined |
You also need to choose what web3 framework you plan to use, currently we support three modes:
truffle test|exec|egc.).1.3.x versions.Example with Web3.js
const SuperfluidSDK = require("@streamable-finance/js-sdk");
const web3 = require("web3");
const sf = new SuperfluidSDK.Framework({
web3: new Web3(window.ethereum),
tokens: ["fDAI"],
});
await sf.initialize();
const bob = sf.user({ address: "0xabc...", token: sf.tokens.fDAIx.address });
The exposed contract objects are of truffle-contract type.
Example with truffle native
const SuperfluidSDK = require("@streamable-finance/js-sdk");
const sf = new SuperfluidSDK.Framework({
isTruffle: true,
tokens: ["fDAI"],
});
await sf.initialize();
const bob = sf.user({ address: "0xabc...", token: sf.tokens.fDAIx.address });
The exposed contract objects are of truffle-contract type loaded using truffle artifacts object.
Create a new User object to quickly create and modify agreements.
Example:
const bob = sf.user({ address: "0xabc...", token: sf.tokens.fDAI });
const carol = sf.user({ address: "0x123...", token: sf.tokens.fDAI });
user.details()Returns details about an account.
| Argument | Type | default |
|---|---|---|
| n/a |
Example:
console.log(await bob.details());
> {
cfa: {
flows: {
inFlows: [
{
sender: "0xf17f52151EbEF6C7334FAD080c5704D77216b732",
receiver: "0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef",
flowRate: "38580246913580"
}
],
outFlows: [
{
sender: "0xC5fdf4076b8F3A5357c5E395ab970B5B54098Fef",
receiver: "0x821aEa9a577a9b44299B9c15c88cf3087F3b5544",
flowRate: "19290123456790"
}
]
},
netFlow: "19290123456790"
},
ida: {} // Available soon
}
user.flow({recipient, flowRate, [, onTransaction, ...]})Create / update / delete a flow to the recipient. Enter "0" to delete a flow.
| Argument | Type | default |
|---|---|---|
| recipient | Address or another User Object | required |
| flowRate | String | required |
| onTransaction | Function | null |
Example:
const tx = await alice.flow({
recipient: bob,
flowRate: "38580246913580", // 100 / mo
// OPTIONS: See ConstantFlowAgreementV1Helper for more
onTransaction: (hash) => {
txHash = hash;
},
});
You may also use the helper classes and functions instead of the User abstraction.
The helpers are usually considered thinner wrappers of the underlying contract calls. It is suitable if you want more control and customization of how to interact with the protocol.
The available helpers currently are:
sf.cfa - Constant flow agreement helper.sf.ida - Instant distribution agreement helper.sf.createERC20Wrapper - Create a new ERC20 wrapper.sf.batchCall - (TBD) batchCall helper.sf.callAppAction - (TBD) callAppAction helper.For their documentations, please look into their code comments directly.
Contributions and suggestions welcome!
Check the module size and dependencies:
yarn stats
Since testing can take a long time to execute, you may want to use the execlusive tests feature from MochaJS to isolate only the test you want. For example:
# Only run User.test.js
nodemon -x npx truffle test ./test/User.test.js
FAQs
Javascript SDK for building with Superfluid Protocol
We found that @streamable-finance/js-sdk demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.