https://github.com/salmandabbakuti/web3-plugin-superfluid
Web3js plugin for Superfluid Protocol
https://github.com/salmandabbakuti/web3-plugin-superfluid
defi superfluid-finance web3-plugin web3js
Last synced: about 1 month ago
JSON representation
Web3js plugin for Superfluid Protocol
- Host: GitHub
- URL: https://github.com/salmandabbakuti/web3-plugin-superfluid
- Owner: Salmandabbakuti
- License: mit
- Created: 2023-10-02T10:34:34.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-01T07:14:43.000Z (4 months ago)
- Last Synced: 2025-03-24T02:37:23.385Z (2 months ago)
- Topics: defi, superfluid-finance, web3-plugin, web3js
- Language: TypeScript
- Homepage: https://tsdocs.dev/docs/web3-plugin-superfluid/0.2.7/classes/SuperfluidPlugin.html#cfav1
- Size: 53.7 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Superfluid Web3 Plugin
[](https://www.npmjs.com/package/web3-plugin-superfluid)
The Superfluid Web3.js Plugin extends the capabilities of the Web3.js library to interact seamlessly with the [Superfluid Protocol](https://superfluid.finance). This plugin provides convenient methods for interacting with the Superfluid protocol contracts.
#### Supported Features:
- [Money Streaming(CFA)](https://docs.superfluid.finance/superfluid/developers/constant-flow-agreement-cfa)
- [Superfluid Host](https://docs.superfluid.finance/superfluid/protocol-overview/in-depth-overview/superfluid-host)
- [Distributions(IDA)](https://docs.superfluid.finance/superfluid/developers/instant-distribution-agreement-ida)
## Installation
> Note: Make sure you are using `web3` version 4.0.3 or higher in your project.
```bash
npm install web3-plugin-superfluid web3@latest --save
```## Usage
### Basic Usage
```js
import { Web3 } from "web3";
import { SuperfluidPlugin } from "web3-plugin-superfluid";const web3 = new Web3("https://rpc-mumbai.maticvigil.com"); // Any RPC node you wanted to connect with
web3.registerPlugin(new SuperfluidPlugin());// Getting contract addresses of the network
const addresses = web3.superfluid.contractAddresses(80001); // chainId of the network// Contract Instances
const cfav1Forwarder = web3.superfluid.cfav1Forwarder(addresses.cfaV1Forwarder);
const cfav1 = web3.superfluid.cfav1(addresses.cfaV1);
const host = web3.superfluid.host(addresses.host);
const idav1 = web3.superfluid.idav1(addresses.idaV1);const token = "0x5d8b4c2554aeb7e86f387b4d6c00ac33499ed01f"; //fDAIx on Mumbai
const sender = "0xc7203561EF179333005a9b81215092413aB86aE9";
const receiver = "0x7348943C8d263ea253c0541656c36b88becD77B9";// Getting FlowRate with cfav1Forwarder
const flowRate = await cfav1Forwarder.methods
.getFlowRate(token, sender, receiver)
.call();console.log("FlowRate: ", flowRate.toString());
// Getting Flow Info with cfav1
const flow = await cfav1.methods.getFlow(token, sender, receiver).call();console.log("Flow Info: ", flow);
```### Connecting Accounts to Web3
```js
import { Web3 } from "web3";
import { SuperfluidPlugin } from "web3-plugin-superfluid";// With any RPC node and private key
const web3 = new Web3("https://rpc-mumbai.maticvigil.com/");
const wallet = web3.eth.accounts.wallet.add("0x..."); // Private Key
const { address: account } = wallet[0];// or with browser wallets
const web3 = new Web3(window.ethereum);
const [account] = await window.ethereum.request({
method: "eth_requestAccounts"
});web3.registerPlugin(new SuperfluidPlugin());
// Getting contract addresses of the network
const addresses = web3.superfluid.contractAddresses(80001); // chainId of the network// Contract Instances
const cfav1Forwarder = web3.superfluid.cfav1Forwarder(addresses.cfaV1Forwarder);
const cfav1 = web3.superfluid.cfav1(addresses.cfaV1);
const host = web3.superfluid.host(addresses.host);
const idav1 = web3.superfluid.idav1(addresses.idaV1);
```### Money Streaming(CFA):
#### Creating flow:
```js
// using cfav1forwarder
const tx = await cfav1Forwarder.methods
.createFlow(token, sender, receiver, flowRate, "0x")
.send({ from: account });// using host
const callData = cfav1.methods
.createFlow(token, receiver, flowRate, "0x")
.encodeABI();const tx = await host.methods
.callAgreement(cfav1Address, callData, "0x")
.send({ from: account });
```#### Updating flow:
```js
// using cfav1forwarder
const tx = await cfav1Forwarder.methods
.updateFlow(token, sender, receiver, flowRate, "0x")
.send({ from: account });// using host
const callData = cfav1.methods
.updateFlow(token, receiver, flowRate, "0x")
.encodeABI();const tx = await host.methods
.callAgreement(cfav1Address, callData, "0x")
.send({ from: account });
```#### Deleting flow:
```js
// using cfav1forwarder
const tx = await cfav1Forwarder.methods
.deleteFlow(token, sender, receiver, "0x")
.send({ from: account });// using host
const callData = cfav1.methods
.deleteFlow(token, sender, receiver, "0x")
.encodeABI();const tx = await host.methods
.callAgreement(cfav1Address, callData, "0x")
.send({ from: account });
```#### Retrieving flow:
```js
// with cfav1forwarder
const flow = await cfav1Forwarder.methods
.getFlowInfo(token, sender, receiver)
.call();// with cfav1
const flow = await cfav1.methods.getFlow(token, sender, receiver).call();
```Refer [Superfluid CFA docs](https://docs.superfluid.finance/superfluid/developers/constant-flow-agreement-cfa) for more on respective contract methods.
### Distributions(IDA):
#### Creating Index:
```js
const callData = idav1.methods.createIndex(token, indexId, "0x").encodeABI();const tx = await host.methods
.callAgreement(idav1Address, callData, "0x")
.send({ from: account });
```#### Getting Subscription:
```js
const { units, exist, approved } = await idav1.methods
.getSubscription(token, publisher, indexId, subscriber)
.call();
```#### Getting Index:
```js
const { exist, totalUnitsApproved, totalUnitsPending } = await idav1.methods
.getIndex(token, publisher, indexId)
.call();
```Refer [Superfluid IDA docs](https://docs.superfluid.finance/superfluid/developers/instant-distribution-agreement-ida) for more on respective contract methods.
### Publishing
To publish a new version of the package to npm, run the following command:
```bash
npm run buildnpm publish
```## Change Log
#### 0.2.8
- Chore(deps): Dependencies update
- Updated tests for sepolia testnet#### 0.2.7
- Added example to show how to use the plugin in a react app
- Few tsdoc improvements
- Updated dependencies#### 0.2.6
- Added handy `contractAddresses` method to get contract addresses of the network
- Updated tests and README.md examples with `contractAddresses` method#### 0.2.5
- Updated README.md examples and TSDoc
#### 0.2.3
- Using jest for tests instead of mocha
- Added tests for invalid address to cfav1Forwarder, cfav1, idav1, host#### 0.2.1
- Updated README.md examples and docs
#### 0.2.0
- Added support for IDAv1 contract
- IDAv1 examples, tests, and docs#### 0.1.0
- Added support for CFAv1 contract
- Added examples on encoding calldata with cfav1 contract for creating, updating, deleting in host's callAgreement method#### 0.0.9
- Added examples for creating, updating, deleting, and retrieving flows using CFAv1Forwarder and Host contracts
- Added examples for connecting accounts to web3 using private key and metamask#### 0.0.8
- cfav1Forwarder, host contract type exports, function natspec comments
- Tests Cleanup and refactoring#### 0.0.7
- Fixed Types not being interpreted correctly, Plugin named export
#### 0.0.1
- Added support for CFAv1Forwarder and Host contracts
## Resources
- [Superfluid Documentation](https://docs.superfluid.finance)
- [Web3js Plugins Documentation](https://docs.web3js.org/guides/web3_plugin_guide/)## Safety
This is experimental software and subject to change over time.
This package is not audited and has not been tested for security. Use at your own risk.
I do not give any warranties and will not be liable for any loss incurred through any use of this codebase.## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details