0.6.0 • Published 9 days ago

@superfluid-finance/sdk-redux v0.6.0

Weekly downloads
-
License
MIT
Repository
github
Last release
9 days ago

🏠 Homepage

Superfluid App

📖 Docs

Introduction

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.

Important Disclaimer

SDK-Redux is in early active development and can have breaking releases without warning and without consideration for semantic versioning.

Features

  • 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

Notable Used Technologies

  • TypeScript
  • Redux
  • Redux Toolkit
  • RTK Query
  • Ethers

Requirements

  • SDK-Core
  • 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)

Getting Started

Plugging Into Redux Store

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 {
    allRpcEndpoints,
    allSubgraphEndpoints,
    createApiWithReactHooks,
    initializeRpcApiSlice,
    initializeSubgraphApiSlice,
    initializeTransactionTrackerSlice
} from "@superfluid-finance/sdk-redux";

Create the Redux slices:

export const rpcApi = initializeRpcApiSlice(createApiWithReactHooks).injectEndpoints(allRpcEndpoints);
export const subgraphApi = initializeSubgraphApiSlice(createApiWithReactHooks).injectEndpoints(allSubgraphEndpoints);
export const transactionTracker = initializeTransactionTrackerSlice();

Plug in the slices to the Redux store:

export const store = configureStore({
    reducer: {
        [rpcApi.reducerPath]: rpcApi.reducer,
        [subgraphApi.reducerPath]: subgraphApi.reducer
        [transactionTracker.reducerPath]: transactionTracker.reducer,
    }
});

Add the middlewares (important to add for both rpcApi & subgraphApi):

export const store = configureStore({
    reducer: {
        [rpcApi.reducerPath]: rpcApi.reducer,
        [subgraphApi.reducerPath]: subgraphApi.reducer
        [transactionTracker.reducerPath]: transactionTracker.reducer,
    },
    middleware: (getDefaultMiddleware) =>
        getDefaultMiddleware().concat(rpcApi.middleware).concat(subgraphApi.middleware),
});

Somewhere in your code, give instructions to the sdkReduxConfig to locate Framework:

import { setFrameworkForSdkRedux } from "@superfluid-finance/sdk-redux";

setFrameworkForSdkRedux(chainId, sdkCoreFramework);

That should be it! You should now be able to dispatch messages to Superfluid reducers & use the React hooks.

Using Queries (i.e. "read" operations)

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,
} = sfSubgraph.useStreamsQuery({
    chainId: queryChainId,
    filter: {
      token: superTokenAddress,
      sender: senderAddress
    },
    pagination: {
        skip: (page - 1) * pageSize,
        take: pageSize
    },
    ordering: {
      orderBy: "currentFlowRate",
      orderDirection: "desc"
    }
}, {
    pollingInterval: 5000 // Not necessary to use but nice-to-have additional option by RTK-Query.
});

Using Mutations (i.e. "write" operations)

Read about RTK-Query queries here: https://redux-toolkit.js.org/rtk-query/usage/mutations

Example using React Hook:

const tx = await rpcApi.createFlow({
    signer,
    chainId,
    senderAddress: senderAddress,
    receiverAddress: receiver,
    flowRateWei: flowRate,
    superTokenAddress: superToken
}).unwrap();

Transaction Tracking

All mutations trigger tracking for transaction progress (stored in transactionTrackerSlice) and transaction monitoring for re-orgs (all cached data is re-fetched in case of a re-org).

Examples

Check out the extensive demo here: examples/sdk-redux-react-typescript.

0.6.0

9 days ago

0.5.2-dev.8abea29.0

10 months ago

0.5.2-dev.986180d.0

10 months ago

0.5.2-dev.9c0cd0f.0

10 months ago

0.5.2-dev.85afdd0.0

10 months ago

0.5.2-dev.3a9b0e5.0

10 months ago

0.5.2-dev.c99f6f9.0

10 months ago

0.5.2-dev.dbb0ad3.0

10 months ago

0.5.2-dev.36bfd5f.0

10 months ago

0.5.2-dev.3cd1f8a.0

10 months ago

0.5.2-dev.61de029.0

10 months ago

0.5.2-dev.952e286.0

10 months ago

0.5.2-dev.fb7bed2.0

10 months ago

0.5.2-dev.2cebc84.0

10 months ago

0.5.2-dev.1ef77a5.0

10 months ago

0.5.2-dev.bac5c12.0

10 months ago

0.5.2-dev.18c7e95.0

10 months ago

0.5.2-dev.78a1174.0

10 months ago

0.5.2-dev.84314b3.0

10 months ago

0.5.2-dev.8dbdb3f.0

10 months ago

0.5.2-dev.86b7bd7.0

11 months ago

0.5.2-dev.95c01d3.0

11 months ago

0.5.2-dev.82f1144.0

11 months ago

0.5.2-dev.afc17b5.0

11 months ago

0.5.2-dev.09f3be3.0

11 months ago

0.5.2-dev.44eb210.0

11 months ago

0.5.2-dev.2eb0db1.0

11 months ago

0.5.2-dev.55833c1.0

11 months ago

0.5.2-dev.9b03d8f.0

11 months ago

0.5.2-dev.8f5492b.0

11 months ago

0.5.2-dev.b9f1e47.0

11 months ago

0.5.2-dev.9e05045.0

11 months ago

0.5.2-dev.23d56bb.0

11 months ago

0.5.2-dev.29863fd.0

11 months ago

0.5.2-dev.c02d14c.0

11 months ago

0.5.2-dev.77df516.0

11 months ago

0.5.2-dev.23f0b0f.0

11 months ago

0.5.2-dev.013735b.0

11 months ago

0.5.2-dev.1e890a5.0

11 months ago

0.5.2-dev.3ea0fe4.0

11 months ago

0.5.2-dev.8b3cd4d.0

11 months ago

0.5.2-dev.9e3feb6.0

12 months ago

0.5.2-dev.93641cf.0

12 months ago

0.5.1-dev.81b5e89.0

12 months ago

0.5.0

1 year ago

0.5.1

12 months ago

0.5.2-dev.09e93a9.0

12 months ago

0.5.2-dev.311a807.0

12 months ago

0.5.2-dev.4d25926.0

12 months ago

0.5.2-dev.f015a27.0

12 months ago

0.5.1-dev.4c649c9.0

12 months ago

0.5.2-dev.f8c2038.0

12 months ago

0.5.2-dev.fffa179.0

12 months ago

0.4.0

1 year ago

0.3.0

2 years ago

0.2.2

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago