ICP Projects

Guide for listing and tracking ICP projects on DappRadar

DappRadar Integration for ICP Projects

The following document aims to explain how DappRadar tracks dapps on ICP and what is the expectation from dapp developers in order to have their data tracked. At DappRadar, we’re tracking the following metrics for our rankings:

  • UAW - Unique users interacting with a dapp's smart contracts (canisters). Internal transactions between canisters are ignored.

  • Transactions - Number of transactions made to dapp's smart contracts (canisters).

  • Volume - The total value of the transactions flowing into a smart contract (canister).

  • Balance - The total value of assets held in a smart contract (canister).

Historical Daily Data

We need historical daily data in order to render various components, for example 1y industry overview chart highlighting activity on a particular chain, or full historical activity of a specific dapp. Given such context, we should be able to fetch as much information as possible.

GET https://canisterId.raw.icp0.io/dapp-radar/aggregated-data/2023-11-12/daily?page=1

Response contains only those users who made transactions to dapp’s canisters. Response is paginated.

Response example:

{
  "results": [
    {
      "user": "sai5t-5avhd-uegcd-3odoy-tzosh-ehu5y-47r45-jgwar-ujjt6-wq7hl-dqe",
      "transactions": 100,
      "volume": [ 
        {
          "tokenAddress": "example1",
          "amount": 21512,
          "usdAmount": 123122 
        }
      ]
    }
  ],
  "pageCount": 1234
}

Last 62 Days Hourly Data

Hourly data is used to aggregate the activity on our supported timeframes: last 24 hours, last 7 days, last 30 days. This means that we need no more than the last 62 days of hourly data.

Request example:

GET https://canisterId.raw.icp0.io/dapp-radar/aggregated-data/2023-11-12/hourly?page=1

Response contains only those users who made transactions to dapp’s canisters. In case of fetching hourly data for today, the response should return data up to the latest hour. Example:

{
  "results": [
    {
      "dateTime": "2023-11-12 13:00:00",
      "user": "sai5t-5avhd-uegcd-3odoy-tzosh-ehu5y-47r45-jgwar-ujjt6-wq7hl-dqe",
      "transactions": 12,
      "volume": [
        {
          "tokenAddress": "example1",
          "amount": 21512,
          "usdAmount": 123122 
        }
      ]
    },
    {
      "dateTime": "2023-11-12 13:00:00",
      "user": "sai5t-5avhd-uegcd-3odoy-tzosh-ehu5y-47r45-jgwar-ujjt6-wq7hl-dqe",
      "transactions": 12,
      "volume": [
        {
          "tokenAddress": "example1",
          "amount": 21512,
          "usdAmount": 123122 
        }
      ]
    },
    {
      "dateTime": "2023-11-12 14:00:00",
      "user": "sai5t-5avhd-uegcd-3odoy-tzosh-ehu5y-47r45-jgwar-ujjt6-wq7hl-dqe",
      "transactions": 12,
      "volume": [
        {
          "tokenAddress": "example1",
          "amount": 21512,
          "usdAmount": 123122 
        }
      ]
    }
  ],
  "pageCount": 123
}

Current Tokens Balance

We also show dapp’s current token balance in USD.

Request example:

GET https://canisterId.raw.icp0.io/dapp-radar/aggregated-data/balance

Response example:

{
  "balance": [ 
    {
      "tokenAddress": "example1",
      "amount": 123, 
      "usdAmount": 1230 
    }
  ]
}

Other Considerations

  1. A decentralized application (Dapp) may integrate only a single canister, which will serve as a proxy, responsible for tracking all other canisters associated with the Dapp on the Internet Computer Protocol (ICP).

  2. This canister must be accessible via the exact paths provided in the examples above. Additionally, the response structure for each API endpoint must adhere strictly to the formats outlined in the shared examples.

  3. For non-financial dapps, it is permissible to omit the “volume” property from the aggregated daily and hourly data, and to exclude the “balance” endpoint completely.

  4. Adding your canisterId to dapp smart contracts list on our website will not automatically result in tracking your dapp metrics. Before that happens, the exposed canister must be reviewed by our team internally.

Last updated