XDC Account Explorer Community Proposal
The XDC Foundation wants to create an XDC Account Explorer so that XDC holders can get real-time account statistics and visualize how XDC accounts interact with each other. The XDC account explorer should have feature parity with the XDC Rich List, which can no longer be created manually due to exponential growth in XDC accounts and failure of the custom API call created for this purpose.
I would like to open this proposal up to the XDC Community for a vote. This blog post will outline the scope of work to be done, the effort and cost estimates, and I will post a poll where you can vote on the integration effort. We want the community to have a voice in what we are building so that we can maximize the usefulness of what gets built.
Deliverables
The main deliverable will be a web application hosted on an XDC Foundations AWS Instance. The web application will have four main components: 1. Account Explorer Dashboard, 2. Summary of Accounts by Tranche, 3. Queryable Account Percentage of Total Accounts, 4. Interactive Visualization of Accounts.
Account Explorer Dashboard
The XDC Account Explorer should have a dashboard showing time series data for Total Accounts, Contracts, Tokens, Masternodes, Total Supply, Burnt XDC, Minted XDC, XDC in Contracts. For the first deliverable the time series displayed can be locked at a time interval (last 7 days) but in the future it would be nice to allow the user to specify time intervals and have the dashboard elements appropriately down sample.
Total Accounts. We would like to track the total number of accounts over time. Tokens and Contracts will show up in this number. Might be worth evaluating if it makes sense to show this as a stacked bar plot with the components being Total Accounts = Wallets + Contracts + Tokens.
We can get the total accounts using the following XDC Explorer API call: getTotalAccounts. The number of Total Accounts over time is an important metric to track, and it would be nice if the user could click on the dashboard element and have it grow to show more detail.
Total Supply We would like to track the total Supply of XDC over time. Minted (Inflation) and Burnt (Deflation) XDC will be part of this number. Might be worth evaluation if it makes sense to show this as a stacked bar plot with the components being Total Supply = Pre-mined XDC + Minted XDC — Burnt XDC. Pre-mined XDC is static at 37.5B XDC.
We can get the total Minted XDC at any time by getting the number of blocks in the blockchain and multiplying it by 5.5, as every 2 seconds a block is closed and 5.5 XDC are minted. We can get the total Burnt XDC by looking at the total number of XDC held by account xdc0000000000000000000000000000000000000000, which is an inaccessible XDC account where XDC can be sent to for effective burning.
We can get the total number of blocks using the following XDC Explorer API call: getTotalBlocks
We can get the total burnt XDC using the following XDC Explorer API call: getAccountDetailsUsingAddress
Burnt XDC We would like to track the number of Burnt XDC over time. We can get the total Burnt XDC by looking at the total number of XDC held by account xdc0000000000000000000000000000000000000000, which is an inaccessible XDC account where XDC can be sent to for effective burning.
We can get the total burnt XDC using the following XDC Explorer API call: getAccountDetailsUsingAddress
Minted XDC We would like to track the number of Minted XDC over time. We can get the total Minted XDC at any time by getting the number of blocks in the blockchain and multiplying it by 5.5, as every 2 seconds a block is closed and 5.5 XDC are minted.
We can get the total number of blocks using the following XDC Explorer API call: getTotalBlocks
XDC in Smart Contracts We would like to track the number of XDC held in Contracts over time. We can get a list of the of Contracts and use the contract address to query the number of XDC locked up by that contract. We may be missing an API call here for "getLatestContracts", unless the "getLatestAccounts" has contracts (which are a subset of accounts).
Summary of Accounts by Tranche
We would like our users to be able to see a table that breaks down XDC account holdings into defined tranches (Balance from — to) Figure 2 below. We would like to display the number of accounts in each tranche, the sum of XDC held in each tranche, the sum of accounts for each tranche including tranches above, the average XDC per account in each tranche, and the value in USD of the XDC in each tranche.
Tranche Definition For the initial effort we can make tranche definition static, although in a future iteration we could evaluate allowing the user to define the tranches they want to see. Static tranches for the first phase should be as follows:
1,000,000,000 XDC — Inf XDC
500,000,000 XDC — 999,999,999 XDC
100,000,000 XDC — 499,999,999 XDC
50,000,000 XDC — 99,999,999 XDC
20,000,000 XDC — 49,999,999 XDC
10,000,000 XDC — 19,999,999 XDC
5,000,000 XDC — 9,999,999 XDC
4,000,000 XDC — 4,999,999 XDC
3,000,000 XDC — 3,999,999 XDC
2,000,000 XDC — 2,999,999 XDC
1,000,000 XDC — 1,999,999 XDC
500,000 XDC — 999,999 XDC
250,000 XDC — 499,999 XDC
100,000 XDC — 249,999 XDC
75,000 XDC — 99,999 XDC
50,000 XDC — 74,999 XDC
25,000 XDC — 49,999 XDC
10,000 XDC — 24,999 XDC
5,000 XDC — 9,999 XDC
0 XDC — 4,999 XDC
Filtering As a stretch goal we would like to be able to filter the results displayed in the Summary of Accounts by Tranche table. We would like to be able to filter out accounts associated with second layer projects (LedgerMail), we would like to be able to whitelist/blacklist addresses so that we can filter out known XDC Foundation/XinFin controlled accounts.
API Calls We do not currently have access to the API calls necessary to gather this information. We will need to, at least once, get all accounts and their holdings in order to create this table. Once we have that data we can use an API call form the XDC Explorer to get the latest accounts: getLatestAccounts
Queryable Account Percentage We would like the user to be able to enter either their account address or an amount of XDC and return the percentage of XDC holders their account or amount falls in. For example, looking at Figure 3, if the user holds 538,100 XDC then they would be in the top of 0.2% of all XDC accounts. We can also return the number of XDC accounts that hold more XDC than they do, and the number of accounts that hold less XDC than they do.
Account Percentage Table It would be useful to see a table showing the breakdown of percentage of all accounts and the minimum balance needed to fall within that percentage. The tranches of account percentages could be configurable in a future iteration, but can be static for this iteration as follows:
0.01%
0.1%
0.2%
0.5%
1.0%
2.0%
3.0%
4.0%
5.0%
10%
As the number of XDC holders grows we will want to shift these tranches.
Account Percentage Time Series As a reach goal it would be nice to see timeseries of how the tranches of account percentages change over time. In order to make these time series plots we would need to maintain historical data across the tranches.
Technical Proposal
We are planning to leverage the newly created and not publicly released XDC Explorer API for data collection. We know that we do not currently have complete coverage of our data collection needs with the XDC Explorer API, and part of the work of this first iteration will be identifying and defining the API calls needed to fully integrate the scoped features.
We can insulate ourselves against the risks of an incomplete API by building an Adapter layer into the Account Explorer backend, allowing the rest of the application to be built against the Adapter layer, which can be updated to make appropriate API calls as they are created.
Wireframes
Here are proposed UI Wireframes that encapsulate the desired features.
High Level Effort Estimate
As of now only the Frontend part can be reliably estimated. Backend could be realized in about 4 variants whose details are quite hard to predict. We plan to de-risk backend development during the first engagement so that it can completed during the second phase of development.
Front End Estimate
This estimate does not include take special responsiveness for mobile browsers into account, it takes into account modern browsers with a minimum supported browser width of 1366px.
Back End Estimate
Softwarely prepares backend services that serve mocked-up data necessary to show that FE components are working properly. Softwarely continues to communicate with Leeway Hertz to agree on final version of API that can be exposed by XinFin Explorer developed by LH, and consumed by Softwarely backend
Sprint Planning
We propose breaking the backlog up into three sprints where the breakdown of backlog items by sprint is as follows:
Summary of Cost Estimates
Breaking the first phase up into three sprints focused on delivering a functional Front End with mocked up services on the back end breaks down as follows:
Front End Development: $10,829 USD
Back End Development: $8,190 USD
Project Management: $1,750 USD
Total: $20,869 USD
Vote
The XDC Foundation invites you, as a member of the XDC Community, to vote on this integration. Please vote using this poll:
Do you support the development of the XDC Account Explorer as defined in the proposal above?
The content above represents my own individual perspective as an XDC community member and does not reflect the official stance of XDC Foundation.
Other content you might like
#MetaMask , #XDC, #Wallet, #Web3
Using MetaMask for XDC
XDC Weekly October 27th - November 2nd, 2024
XDC Weekly November 3rd - November 9th, 2024