Git Product home page Git Product logo

superfluid-console's Introduction

Welcome to Superfluid Console repository ๐Ÿ‘‹

Twitter: Superfluid_HQ

๐Ÿ  Homepage

๐Ÿ“– Docs

The Superfluid Protocol is a framework that realizes the real-time finance vision where user accounts are connected together, and transactions can happen between user accounts instantaneously as a result.

Superfluid Console

Superfluid Console is an explorer meant for developers and advanced users of the Superfluid Protocol.

How to use

To install packages and start development server, run:

yarn install
yarn run dev

Technologies

  • TypeScript
  • React
  • Next.js
  • MUI (formerly Material-UI)
  • Redux
  • SDK-redux by Superfluid Finance

Deployment

The master branch is automatically deployed using Vercel. PR branches automatically get their own temporary deployments.

Contributing

Interested in contributing? Fantastic -- we love to see it. Create an issue or fork the code and open a pull request. Someone from the Superfluid team will join for discussion and review the code. Keep and eye out for bounties as well! ;)

superfluid-console's People

Contributors

d10r avatar dependabot[bot] avatar derek-maekask avatar elvijstdl avatar hellwolf avatar kasparkallas avatar mariamtdl avatar mikkoun avatar mindsgn avatar mmd-afegbua avatar msoni89 avatar seroxdesign avatar thevolcanomanishere avatar tokdaniel avatar umerha avatar vmichalik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

superfluid-console's Issues

[CONSOLE] Individual toggle for testnets

Problem

  • As a user, I'd like to be able to remove testnets to declutter my view when I don't need to see the activity there.
  • Generally, when I am developing, I am focusing on one testnet at a time so I'd like to be able to toggle them individually.

Solution

  • Enable toggling testnets individually
  • May sit in the settings sidebar menu

[CONSOLE] Better Error Handling in Search Bar

Problem

As a user Iโ€™d like to know when Iโ€™ve made a typo or entered invalid characters into the search bar

Appetite

Solution

  • Error message in search

Rabbitholes

Notes

[CONSOLE] Fix real-time balance on accounts

Problem
The real time balances on some accounts are incorrect in the console, showing negative numbers and numbers inconsistent with the dashboard.

Details

  • This is because index distributions are not getting included in account balances due to the way the subgraph works.
  • The user dashboard makes a web3 RPC call to get the correct balance, and the subgraph also updates to the correct balance using an RPC call when an account in question performs any action.

Proposed Solution

  • Until a better solution emerges, we should add these RPC calls to the console.

[CONSOLE] Visual Separation of Mainnets and Testnets

Problem

  • As a user, I'd like to see the mainnets prioritized so I can quickly see the most important data points when searching in the console.
  • If I have an address with a long list of interactions across networks, I'd like to see the mainnet data points free of clutter.

Appetite

Solution

  • Different colour or highlight for mainnets vs testnets?
  • Toggle in configuration options to remove testnets?

Rabbitholes

Notes

[CONSOLE] Add versioning to Console interface and repo

Problem
As a user, I want to be able to quickly see which version of the console I'm using
I'd like to know which features were included in the latest update

Solution

  • Version number and link to changelog in bottom right-hand corner of the dashboard

Notes

  • We don't currently have a changelog or releases tracked in the console repo

[CONSOLE] Determine number of users and queries

Problem

  • In order to determine if the Console is gaining traction, we should track the number of visitors and the usage.
  • This doesn't require us to track or process any further details at this time, but it should follow the pattern of our existing segment and mixpanel setup and not create conflicts.

To track:

  • Number of unique users
  • Number of page visits per user

Solution

  • Potentially using Segment and Mixpanel

[CONSOLE] Easily Copy Addresses

Problem

As a user Iโ€™d like to be able to quickly copy addresses from the console pages

Appetite

Solution

  • Add a copy-link icon on the right hand side of the addresses on the dashboard page
  • Remove the full highlight etherscan on links and leave the etherscan link to the right

Rabbitholes

Notes

[CONSOLE] Cypress test cases iteration 2

  • Opening individual stream details ( streams page ) and data shown in those pages
  • Index tab for Account page
  • Opening index details ( index page ) and data shown in those pages
  • Opening subscription details ( index-subscriptions page ) and data shown in those pages
  • Changing stream granularity
  • Changing Ether decimal places
  • Hovering on a tooltip in accounts page
  • Help alert in accounts page
  • Opening all links available in the tooltips and check if "not found" is not shown

[CONSOLE] Add aggregate stats for Super Apps and Super Tokens

As a Super App developer, Iโ€™d like to be able to see stats on users and total inflow and outflow.

Solution

  • Moving Super Token balances to the upper container in the console
  • Using additional details from AccountTokenSnapshots in the subgraph
  • Using additional details from the tokenStatistics in the subgraph

[CONSOLE] Cypress test cases for Governance pages

Add test cases for pages added in #64

@mariamtava Add new test cases in Testrail

  • Add cases for Tokens page
  • Add cases for Protocol page

@mariamtava Add test cases for

  • Opening protocol page , validate the data shown and switch networks
  • Opening tokens page , validate that tokens are shown there and switch networks
  • Tokens page - filter by Name, Symbol and Listing status

[CONSOLE] List Super Token Holders

On Super Token pages in the console, I'd like to be able to easily see an accurate list of all Super Token holders, as this is not accurate on other explorers.

[CONSOLE-V2] Data displaying issues and suggestions

Issues that need fixing

  • Subscriptions total amount received and Approved is not sorting correctly

Steps: Open the debug link
Sort Total Amount Received or Approved by Ascending first
Link to debug: https://superfluid-console-two.vercel.app/matic/indexes/0x0a70fbb45bc8c70fb94d8678b92686bb69dea3c3-0x1305f6b6df9dc47159d12eb7ac2804d4a33173c2-0

Screenshot 2022-02-10 at 16 50 51
Screenshot 2022-02-10 at 16 51 05

  • Index subscription page - Distributions section - Amount received is showing incorrect values

Link to debug: https://superfluid-console-two.vercel.app/matic/index-subscriptions/0x17fe4ed21e35b5ad800179b0c20447ca3f5280db-0x0a70fbb45bc8c70fb94d8678b92686bb69dea3c3-0x1305f6b6df9dc47159d12eb7ac2804d4a33173c2-0
Screenshot 2022-02-10 at 16 58 45

Suggestions:

  • Don't show distributions or add an option to hide distributions where the subscriber received 0 tokens

Even when you are out of the pool and have no more units, the distributions are still triggered to that wallet and now there is no easy way to see what was the last distribution the wallet actually received since you can't even sort by the amount received or change to an old page without clicking 100 times
Screenshot 2022-02-10 at 17 04 11

  • Sort units updated by date in index subscription page

Could get confusing seeing the last update at 155 while the actual last update was to 308 units
Link to debug: https://superfluid-console-two.vercel.app/matic/index-subscriptions/0x17fe4ed21e35b5ad800179b0c20447ca3f5280db-0x0a70fbb45bc8c70fb94d8678b92686bb69dea3c3-0x1305f6b6df9dc47159d12eb7ac2804d4a33173c2-0
image
image

[CONSOLE] Better Sorting and Filtering on Tables

Problem

  • As a user, Iโ€™d like default sorting to be more intuitive
    • Sort by open streams
      • Sub-sort by volume
    • Sort by largest index shares
  • As a user, Iโ€™d like to be able to quickly find the setting to re-interpret data as daily, monthly and weekly inside the table
  • Configurable table size (10, 20, 50)
  • Easier access to filtering options
  • As a user, I'd like it to be clearer that there are more than two pages on a table (e.g. through use of an ellipsis or otherwise)

Ref: Sunny

Appetite

Solution

  • Explore using a different component for the tables per examples in MUI documentation
  • Requires exploration of options for filtering

Rabbitholes

  • First entry to filtering should be limited in scope

Notes

  • It's not currently possible to show users the total number of pages a table will hold, requires more exploration

image.png

[CONSOLE] Add governance parameters and tokens page per network

The governance parameters and addresses currently stored in the documentation should have a page on the console where they are updated live instead of the current manual process.

Technical

  • Resolve how we are pulling in governance data
  • Will likely have to add JS-SDK functionality to query the governance parameters to SDK-CORE
  • Tokens can be queried from the subgraph
  • Would be useful to have structured data/ JSON
  • Governance parameters are indexed on the subgraph by events
  • Protocol-monorepo contracts has an example subgraph query for getting the data

Sample data: https://github.com/superfluid-finance/superfluid-stories/issues/185

[CONSOLE] Add distribution details pages

As an IDA user I would like to see how many tokens were sent and to which addresses when a distribution happened instead of just the total amount distributed , this would be nice to see in the index page distribution section as an additional "details" page like we currently have for subscriptions

[CONSOLE] Individual Stream Visualization

Individual Stream Visualization

Problem

  • As a user Iโ€™d like to see visualisations of Superfluid streams on the stream page

Appetite

Solution

  • Line chart with time and total amount streamed axes
  • Total amount streamed based on stream periods
  • Additional box in console stream detail page

Rabbitholes

Notes

[Console v2] Address book issues

Searching for an address in the address book doesn't work with uppercase letters
https://user-images.githubusercontent.com/77115130/154018179-bb90febb-58b5-40fd-a6c7-8b96ee0dca71.mov

Last saved name gets used in the name modal when trying to add/edit an address name:

Steps:
User adds an address to their address book ( Hello )
User opens a different address page ( Test )
User edits the address book entry

Expected result:
The modal input value is set to the address book entry that was last chosen( Test )

Actual result:
The modal input value is set to the address book entry that was last edited( Hello )

Screen.Recording.2022-02-15.at.10.02.46.mov

[CONSOLE] ENS Support

User Need

  • ENS Forward Lookup for searches
  • ENS Reverse Lookup for resolving hex addresses to ENS names

Solution

  • Look into ENS team state of the art recommendations
  • Use RPC or Subgraph
  • May require a mainnet Ethereum RPC

Rabbitholes

  • We might want to consider ENS avatar support down the line
  • If address is a contract, it could cause issues for users initiating streams on L2s where that contract is not deployed (smart contract wallets etc)

[CONSOLE] Cypress test cases for filtering

Filtering test cases:

Filtering common cases:

  • Filtering window - close button
  • Filtering window - reset button
  • Filtering window - clearing text input with the "x" button by the input
  • Filtering window - clearing filters with the "x" button by the filter chip
  • Filtering - no data found

Account incoming streams table

  • Filtering by sender address
  • Filtering by Active/Inactive

Account outgoing streams table

  • Filtering by receiver address
  • Filtering by Active/Inactive

Account index publications table

  • Filtering by index id
  • Filtering by distributions happened or not
  • Filtering by units issues or not
  • Reseting the filter shows the data that was shown previously

Account index subscriptions table

  • Filtering by approved/not approved
  • Filtering by having/not having received a distribution
  • Filtering by units issued

Account super tokens table

  • Filtering by active streams
  • Filtering by closed streams
  • Filtering by subscriptions

Events table

  • Filtering by event name
  • Filtering by block number
  • Filtering by tx hash

Super token streams table

  • Filtering by sender address
  • Filtering by receiver address
  • Filtering by active/inactive streams

Super token indexes table

  • Filtering by index id
  • Filtering by publisher address
  • Filtering by distributions have/haven't happened

Other:

  • Super token page - validate token overall data
  • Account page - validate that new balances in account page are shown correctly
  • Subgraph address getting switched to lowercase toast message
  • Add arbitrum-one and opitmism-mainnet to network smoke test
  • Regular tokens show 404 instead of a broken page

[CONSOLE] Tooltips

Problem

  • As a user Iโ€™d like to be able to quickly learn what different words mean in the context of the Superfluid protocol while picking through data in the dashboard

Appetite

Solution

  • Add a question mark or info icon to the left of terms (e.g. "index", "stream period" etc)
  • Define terms in top of page (token, address etc)
  • Define terms in table headers (distributions, distribution date, etc)
  • Use descriptions from documentation where possible
  • Enumerate list of definitions missing from documentation

Rabbitholes

Notes

Example

[CONSOLE] New users stumble over making addresses lower-cased when using Subgraph Explorer

Problem

Subgraph queries have a requirement that addresses must be lower-cased. It's something that's very easy to forget. And even if you don't forget, it's a bit annoying to find a tool to lower-case it. Usually people open up the browser's console, do "0x...".toLowerCase(), and copy the address from there.

Solution

We should provide a helpful automation in the Subgraph Explorer.

  • Parse the user's query (and query variables) to lower-case any addresses found.
  • Add a toast to notify the user that their addresses have been lowercased for the query

Design

@kasparkallas: "I like a solution where we parse the query and variables with regex when the user clicks 'execute query' button and we automatically replace the addresses with lower-cased ones and also execute the query. To make it not as hidden, I would display a notification somewhere that we took case of the lower-casing. The reason I like this solution is that it doesn't require any additional steps from the user (i.e. they don't need to know that they need to click an additional button somewhere). The reason I don't like the solution is that now it's impossible to do queries with upper-cased addresses (not sure that's ever wanted behaviour though). Instead of automatically replacing, we could also display a confirmation to replace which the user can opt-out of."

Notes

  • (Not currently including) a widget to lower-case anything.

[ CONSOLE ] Add a warning if users computer time is not correct

When looking into #35 we found that if the users system time is not correct the ongoing stream amounts are shown incorrectly on macOS , we should warn the users that the data might not be accurate due to their system time not being in sync with the timezone they have set

Screen.Recording.2022-03-03.at.10.43.08.mov

[CONSOLE] Subgraph errors thrown when searching for an address/wallet

After upgrading sdk-core from 0.3.1 to 0.3.2 and sdk-redux from 0.2.1 to 0.2.2 , subgraph errors are getting thrown in the console and the Events tab is not showing any events

Debug link: https://console.superfluid.finance/matic/accounts/0x658e1B019F2F30C8089a9Ae3Ae5820F335bd9Ce4

Screenshot 2022-03-03 at 12 43 13

Error thrown:

    "type": "SUBGRAPH_ERROR",
    "errorObject": {
        "response": {
            "errors": [
                {
                    "message": "Failed to resolve named type `PPPConfigurationChangedEvent`"
                },
                {
                    "message": "Failed to resolve named type `AgreementLiquidatedV2Event`"
                }
            ],
            "status": 200,
            "headers": {
                "map": {
                    "content-type": "application/json"
                }
            }
        },
        "request": {
            "query": "query getAllEvents($where: Event_filter! = {}, $skip: Int! = 0, $first: Int! = 10, $orderBy: Event_orderBy! = id, $orderDirection: OrderDirection! = asc) {\n  events(\n    where: $where\n    skip: $skip\n    first: $first\n    orderBy: $orderBy\n    orderDirection: $orderDirection\n  ) {\n    ... on FlowUpdatedEvent {\n      userData\n      type\n      token\n      sender\n      receiver\n      flowRate\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexCreatedEvent {\n      userData\n      token\n      publisher\n      indexId\n      index {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexDistributionClaimedEvent {\n      token\n      subscriber\n      publisher\n      indexId\n      index {\n        id\n      }\n      amount\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexUpdatedEvent {\n      userData\n      totalUnitsPending\n      totalUnitsApproved\n      token\n      publisher\n      oldIndexValue\n      newIndexValue\n      indexId\n      index {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexSubscribedEvent {\n      id\n      userData\n      token\n      subscriber\n      publisher\n      indexId\n      index {\n        id\n      }\n      ... on Event {\n        __typename\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexUnitsUpdatedEvent {\n      userData\n      units\n      token\n      subscriber\n      publisher\n      oldUnits\n      indexId\n      index {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on IndexUnsubscribedEvent {\n      userData\n      token\n      subscriber\n      publisher\n      indexId\n      index {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SubscriptionApprovedEvent {\n      userData\n      token\n      subscription {\n        id\n      }\n      subscriber\n      publisher\n      indexId\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SubscriptionDistributionClaimedEvent {\n      token\n      subscription {\n        id\n      }\n      subscriber\n      publisher\n      indexId\n      amount\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SubscriptionRevokedEvent {\n      userData\n      subscription {\n        id\n      }\n      subscriber\n      publisher\n      indexId\n      token\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SubscriptionUnitsUpdatedEvent {\n      userData\n      units\n      token\n      subscription {\n        id\n      }\n      subscriber\n      publisher\n      oldUnits\n      indexId\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on TransferEvent {\n      value\n      token\n      to {\n        id\n      }\n      from {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on TokenUpgradedEvent {\n      amount\n      token\n      account {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on TokenDowngradedEvent {\n      token\n      blockNumber\n      amount\n      account {\n        id\n      }\n      ... on Event {\n        __typename\n        id\n        transactionHash\n        timestamp\n      }\n    }\n    ... on AgreementClassRegisteredEvent {\n      code\n      agreementType\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on AgreementClassUpdatedEvent {\n      code\n      agreementType\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on AppRegisteredEvent {\n      blockNumber\n      app\n      ... on Event {\n        __typename\n        id\n        transactionHash\n        timestamp\n      }\n    }\n    ... on GovernanceReplacedEvent {\n      oldGovernance\n      newGovernance\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on JailEvent {\n      reason\n      app\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SuperTokenFactoryUpdatedEvent {\n      newFactory\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SuperTokenLogicUpdatedEvent {\n      token\n      code\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on RoleAdminChangedEvent {\n      role\n      previousAdminRole\n      newAdminRole\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on RoleGrantedEvent {\n      sender\n      role\n      account\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on RoleRevokedEvent {\n      sender\n      role\n      account\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on CFAv1LiquidationPeriodChangedEvent {\n      superToken\n      host\n      liquidationPeriod\n      isKeySet\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on ConfigChangedEvent {\n      value\n      superToken\n      key\n      isKeySet\n      host\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on RewardAddressChangedEvent {\n      superToken\n      rewardAddress\n      isKeySet\n      host\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on PPPConfigurationChangedEvent {\n      host\n      superToken\n      isKeySet\n      liquidationPeriod\n      patricianPeriod\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on TrustedForwarderChangedEvent {\n      isKeySet\n      host\n      forwarder\n      enabled\n      superToken\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on AgreementLiquidatedByEvent {\n      token\n      rewardAmount\n      penaltyAccount\n      liquidatorAccount\n      bondAccount\n      bailoutAmount\n      agreementId\n      agreementClass\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on AgreementLiquidatedV2Event {\n      token\n      liquidatorAccount\n      agreementClass\n      agreementId\n      targetAccount\n      rewardAccount\n      rewardAmount\n      targetAccountBalanceDelta\n      version\n      liquidationType\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on BurnedEvent {\n      operatorData\n      operator\n      from\n      data\n      amount\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on MintedEvent {\n      operatorData\n      operator\n      data\n      amount\n      to\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SentEvent {\n      to\n      operatorData\n      operator\n      data\n      amount\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on CustomSuperTokenCreatedEvent {\n      token\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SuperTokenCreatedEvent {\n      token\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n    ... on SuperTokenLogicCreatedEvent {\n      tokenLogic\n      ... on Event {\n        __typename\n        id\n        blockNumber\n        transactionHash\n        timestamp\n      }\n    }\n  }\n}",
            "variables": {
                "orderBy": "blockNumber",
                "orderDirection": "desc",
                "where": {
                    "addresses_contains": [
                        "0x658e1b019f2f30c8089a9ae3ae5820f335bd9ce4"
                    ],
                    "timestamp_gt": "0"
                },
                "first": 11,
                "skip": 0
            }
        }
    },
    "message": "Subgraph Error - Failed call to subgraph with query [object Object]: {\n  \"response\": {\n    \"errors\": [\n      {\n        \"message\": \"Failed to resolve named type `PPPConfigurationChangedEvent`\"\n      },\n      {\n        \"message\": \"Failed to resolve named type `AgreementLiquidatedV2Event`\"\n      }\n    ],\n    \"status\": 200,\n    \"headers\": {\n      \"map\": {\n        \"content-type\": \"application/json\"\n      }\n    }\n  },\n  \"request\": {\n    \"query\": \"query getAllEvents($where: Event_filter! = {}, $skip: Int! = 0, $first: Int! = 10, $orderBy: Event_orderBy! = id, $orderDirection: OrderDirection! = asc) {\\n  events(\\n    where: $where\\n    skip: $skip\\n    first: $first\\n    orderBy: $orderBy\\n    orderDirection: $orderDirection\\n  ) {\\n    ... on FlowUpdatedEvent {\\n      userData\\n      type\\n      token\\n      sender\\n      receiver\\n      flowRate\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexCreatedEvent {\\n      userData\\n      token\\n      publisher\\n      indexId\\n      index {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexDistributionClaimedEvent {\\n      token\\n      subscriber\\n      publisher\\n      indexId\\n      index {\\n        id\\n      }\\n      amount\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexUpdatedEvent {\\n      userData\\n      totalUnitsPending\\n      totalUnitsApproved\\n      token\\n      publisher\\n      oldIndexValue\\n      newIndexValue\\n      indexId\\n      index {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexSubscribedEvent {\\n      id\\n      userData\\n      token\\n      subscriber\\n      publisher\\n      indexId\\n      index {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexUnitsUpdatedEvent {\\n      userData\\n      units\\n      token\\n      subscriber\\n      publisher\\n      oldUnits\\n      indexId\\n      index {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on IndexUnsubscribedEvent {\\n      userData\\n      token\\n      subscriber\\n      publisher\\n      indexId\\n      index {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SubscriptionApprovedEvent {\\n      userData\\n      token\\n      subscription {\\n        id\\n      }\\n      subscriber\\n      publisher\\n      indexId\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SubscriptionDistributionClaimedEvent {\\n      token\\n      subscription {\\n        id\\n      }\\n      subscriber\\n      publisher\\n      indexId\\n      amount\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SubscriptionRevokedEvent {\\n      userData\\n      subscription {\\n        id\\n      }\\n      subscriber\\n      publisher\\n      indexId\\n      token\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SubscriptionUnitsUpdatedEvent {\\n      userData\\n      units\\n      token\\n      subscription {\\n        id\\n      }\\n      subscriber\\n      publisher\\n      oldUnits\\n      indexId\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on TransferEvent {\\n      value\\n      token\\n      to {\\n        id\\n      }\\n      from {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on TokenUpgradedEvent {\\n      amount\\n      token\\n      account {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on TokenDowngradedEvent {\\n      token\\n      blockNumber\\n      amount\\n      account {\\n        id\\n      }\\n      ... on Event {\\n        __typename\\n        id\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on AgreementClassRegisteredEvent {\\n      code\\n      agreementType\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on AgreementClassUpdatedEvent {\\n      code\\n      agreementType\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on AppRegisteredEvent {\\n      blockNumber\\n      app\\n      ... on Event {\\n        __typename\\n        id\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on GovernanceReplacedEvent {\\n      oldGovernance\\n      newGovernance\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on JailEvent {\\n      reason\\n      app\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SuperTokenFactoryUpdatedEvent {\\n      newFactory\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SuperTokenLogicUpdatedEvent {\\n      token\\n      code\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on RoleAdminChangedEvent {\\n      role\\n      previousAdminRole\\n      newAdminRole\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on RoleGrantedEvent {\\n      sender\\n      role\\n      account\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on RoleRevokedEvent {\\n      sender\\n      role\\n      account\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on CFAv1LiquidationPeriodChangedEvent {\\n      superToken\\n      host\\n      liquidationPeriod\\n      isKeySet\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on ConfigChangedEvent {\\n      value\\n      superToken\\n      key\\n      isKeySet\\n      host\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on RewardAddressChangedEvent {\\n      superToken\\n      rewardAddress\\n      isKeySet\\n      host\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on PPPConfigurationChangedEvent {\\n      host\\n      superToken\\n      isKeySet\\n      liquidationPeriod\\n      patricianPeriod\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on TrustedForwarderChangedEvent {\\n      isKeySet\\n      host\\n      forwarder\\n      enabled\\n      superToken\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on AgreementLiquidatedByEvent {\\n      token\\n      rewardAmount\\n      penaltyAccount\\n      liquidatorAccount\\n      bondAccount\\n      bailoutAmount\\n      agreementId\\n      agreementClass\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on AgreementLiquidatedV2Event {\\n      token\\n      liquidatorAccount\\n      agreementClass\\n      agreementId\\n      targetAccount\\n      rewardAccount\\n      rewardAmount\\n      targetAccountBalanceDelta\\n      version\\n      liquidationType\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on BurnedEvent {\\n      operatorData\\n      operator\\n      from\\n      data\\n      amount\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on MintedEvent {\\n      operatorData\\n      operator\\n      data\\n      amount\\n      to\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SentEvent {\\n      to\\n      operatorData\\n      operator\\n      data\\n      amount\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on CustomSuperTokenCreatedEvent {\\n      token\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SuperTokenCreatedEvent {\\n      token\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n    ... on SuperTokenLogicCreatedEvent {\\n      tokenLogic\\n      ... on Event {\\n        __typename\\n        id\\n        blockNumber\\n        transactionHash\\n        timestamp\\n      }\\n    }\\n  }\\n}\",\n    \"variables\": {\n      \"orderBy\": \"blockNumber\",\n      \"orderDirection\": \"desc\",\n      \"where\": {\n        \"addresses_contains\": [\n          \"0x658e1b019f2f30c8089a9ae3ae5820f335bd9ce4\"\n        ],\n        \"timestamp_gt\": \"0\"\n      },\n      \"first\": 11,\n      \"skip\": 0\n    }\n  }\n}"
}

[CONSOLE] Better Error Pages on Wrong URL

Better Error Page on Wrong Network

Problem

When I arrive on a 404 page when trying to navigate to an address or token page on the wrong network, I'd like to better understand why and navigate away

Appetite

Solution

  • Error page stating that this address has not been interacted with on the selected network
  • Error page stating that this super token does not exist on the selected network
  • Error page stating that this address has not interacted with Superfluid
  • This address/token exists on other network(s) โ†’ open search

Rabbitholes

Notes

[CONSOLE] Add an option to filter data by date

Currently there is no easy way to filter out data for a specific time frame , other than clicking on the next page button a bunch of times, which makes debugging things that happened a while ago for an active account pretty annoying , it would be great to have an option to filter the data shown in the tables by a given time frame

[CONSOLE] Change Network from Account Page

Problem

  • As a user Iโ€™d like to quickly be able to navigate from an account on one chain to the same account on a different chain without having to re-enter search

Appetite

Solution

  • Chevron and MUI drop-down box on network name for selecting address page on other networks
  • Custom query to determine the networks an address has been interacted with on

Rabbitholes

Notes

[CONSOLE] Show warning to the users if web3 calls fail when fetching balances

When fixing #66 we introduced web3 calls to prevent showing invalid token balances for users who have received distributions due to some graph limitations

We should add some kind of warning if those web3 calls fail as we cannot be sure that the balance shown is correct

Side note:
When loading the balances the loading skeleton disappears before the balance of web3 calls is returned and you can clearly see the number jumping up for the affected users, would be cleaner to only show the balances when we have the end result

Screen.Recording.2022-04-29.at.12.19.13.mov

[CONSOLE] Sharing link for subgraph queries

Problem

  • As a user, I'd like to be able to share a link to my subgraph query with others to easily share insights or correct issues

Solution

  • Surface the hidden link logic between existing console pages and the graphiql interface

Notes

  • These links will be very long and hit a cap with a certain level of query complexity, a warning should be shown to the user when copying

[CONSOLE] Assorted Visual Bug Fixes

Task List

  • Vertical centring of Superfluid logo in top left of Console
  • Change interactable icons in page headers to buttons or green links
  • Add address to header of Account and Super App pages, and remove from table
  • Move copy page link button next to breadcrumbs

[CONSOLE] Add dark mode to 404 page

As a shadowy coder debugging my Super App in my basement with no lights on , I would like to not get flashbanged by the 404 page when I decide to paste the wrong address in the url instead of using the search bar

Screenshot 2022-02-15 at 10 20 27

[CONSOLE] Scroll up issue

When user scrolls down and clicks on a hyperlink, new page doesn't scroll up by itself

Screen.Recording.2022-03-25.at.18.07.46.mov

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.