sdk-redux 0.1.1-PR555.cc57a51.0
Install from the command line:
Learn more about npm packages
$ npm install @superfluid-finance/sdk-redux@0.1.1-PR555.cc57a51.0
Install via package.json:
"@superfluid-finance/sdk-redux": "0.1.1-PR555.cc57a51.0"
About this version
π Homepage
β¨ Superfluid App
π Docs
SDK-Redux is an application framework for building front-end applications that interact with the Superfluid Protocol.
More specifically, SDK-Redux is a wrapper library around @superfluid-finance/sdk-core
which adds state management to Superfluid related queries and operations.
Under the hood, SDK-Redux leverages popular Redux libraries Redux Toolkit & RTK Query.
SDK-Redux is in early active development and can have breaking releases without warning and without consideration for semantic versioning.
- Tracking loading state in order to show UI spinners
- Avoiding duplicate requests for the same data
- Managing cache lifetimes as the user interacts with the UI
- Tracking blockchain transactions produced by user interactions
- TypeScript
- Redux
- Redux Toolkit
- RTK Query
- Ethers
- Redux store & Redux Toolkit
- React* (The SDK-Redux generates React Hooks which are recommended but not strictly necessary to use. The SDK-Redux is UI-framework agnostic but we currently have example only for React)
Requirements:
A brand-new scaffolded Redux store configuration looks something like this:
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';
export const store = configureStore({
reducer: {
},
});
export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
export type AppThunk<ReturnType = void> = ThunkAction<
ReturnType,
RootState,
unknown,
Action<string>
>;
We need to plug in the Superfluid SDK-Redux parts.
Import the following function:
import {
initializeSfApiSlice,
initializeSfTransactionSlice,
createApiWithReactHooks
} from "@superfluid-finance/sdk-redux";
Create the Redux slices:
export const { sfApi } = initializeSfApiSlice(createApiWithReactHooks);
export const { sfTransactions } = initializeSfTransactionSlice();
Plug in the slices to the Redux store:
export const store = configureStore({
reducer: {
"sfApi": sfApi.reducer,
"sfTransactions": sfTransactions.reducer,
}
});
Add the middleware:
export const store = configureStore({
reducer: {
"sfApi": sfApi.reducer,
"sfTransactions": sfTransactions.reducer,
},
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware().concat(sfApi.middleware),
});
Somewhere in your code, give instructions to the superfluidContext
to locate Framework
and Signer
:
import { setFrameworkForSdkRedux, setSignerForSdkRedux } from "@superfluid-finance/sdk-redux";
setFrameworkForSdkRedux(chainId, sdkCoreFramework);
setSignerForSdkRedux(chainId, ethersWeb3Provider.getSigner());
That should be it! You should now be able to dispatch messages to Superfluid reducers & use the React hooks.
Read about RTK-Query queries here: https://redux-toolkit.js.org/rtk-query/usage/queries
Example using React Hook:
const {
data: pagedStreams,
isUninitialized,
isFetching,
isLoading,
isError,
error,
refetch,
} = sfApi.useListStreamsQuery({
chainId: queryChainId,
senderAddress,
receiverAddress,
superTokenAddress,
skip: (page - 1) * pageSize,
take: pageSize,
}, {
pollingInterval: 5000 // Not necessary to use but nice-to-have additional option by RTK-Query.
});
Read about RTK-Query queries here: https://redux-toolkit.js.org/rtk-query/usage/mutations
Example using React Hook:
const tx = await sfApi.createFlow({
senderAddress: signerAddress,
receiverAddress: receiver,
flowRateWei: flowRate,
chainId,
superTokenAddress: superToken,
waitForConfirmation,
}).unwrap();
All mutations trigger tracking for transaction progress (stored in transactionSlice
) and transaction monitoring for re-orgs (all cached data is re-fetched in case of a re-org).
Check out the extensive demo here: examples/sdk-redux-react-typescript
.
Details
- sdk-redux
- superfluid-finance
- almost 3 years ago
- MIT
- 15 dependencies
Assets
- sdk-redux-0.1.1-PR555.cc57a51.0-npm.tgz
Download activity
- Total downloads 0
- Last 30 days 0
- Last week 0
- Today 0