status: Draft title: Developing Metrics for Nano Representatives author: trashman date created: 2024-03-26
To help the average Nano holder select a representative, optimizing for Network performance, reliability, self-sovereignty, and censorship resistance.
Observations will be aggregated from multiple non-voting nodes.
A performant representative helps blocks reach quorum (confirmation) quickly and consistently. I propose the following metrics to capture speed and consistency
These metrics will serve as the basis for calculating composite metrics that will then be used to calculate a representative's score. Further research and observation will be required to develop the composite metrics. Potential composite metrics:
The following events will be considered bad behavior. Reps observed committing these behaviors should be immutably added to the bad behavior list along with the messages observed
Reps observed to be engaging in censorship should be added to the censorship list, along with information about which blocks they are censoring, until the behavior ceases.
The following events will be considered abuse or misconfiguration. Reps observed committing these behaviors should be added to the misconfigured reps list until the behavior ceases.
Uptime will be measured over 1-minute and 5-minute resolutions with a representative being considered online if it generates a single vote (normal or final) for a block first observed in the period being monitored.
Developing objective measures of reputation and trustworthiness are challenging, thus I have chosen to focus on commitment and attentiveness. A committed and attentive representative has been running for longer and applies non-contentious updates promptly.
Voting weight concentration increases the risk of censorship, liveliness, and conflict resolution issues. The key thresholds for voting weight concentration are 34% (censorship & liveliness) and 67% (conflict resolution) of the online weight or trended weight, whichever is greater. Being that 34% is less than 67% and liveliness is a more prominent risk that threshold should be the focus when considering how to develop a score for voting weight concentration. With that in mind, a potential voting weight score function could be a sigmoid curve scaled from 100 to 0 for voting weight values from 0 to 5%.
where
x
is the voting weight percentage without decimal conversion (e.g. 1% = 1.0)
$$ 100 - \frac{100}{1 + e^{-2.5x + 0.6e^2}} $$
0.1% = 98 (x = 0.1) 0.5% = 96 (x = 0.5) 1.0% = 87 (x = 1.0) 1.5% = 66 (x = 1.5) 2.5% = 14 (x = 2.5) 4.0% = 0.3 (x = 4.0)
Representatives that are running an older version than the current version that has quorum will be added to the "Outdated" list. Representatives will remain on this list until they update to a version that has quorum.
I propose the introduction of account tags to enhance the categorization and identification of account activities to help generate more informative metrics. These tags aim to provide clearer insights into account behaviors and facilitate better monitoring and management of accounts and blocks.
Below is a table outlining the proposed tags along with their descriptions.
Note: accounts and blocks can have multiple tags
Tag | Description |
---|---|
type/faucet | Identifies accounts used for distributing Nano, typically for free. |
type/exchange | Marks accounts that are operated by exchanges. |
type/spam | Tags accounts that are involved in spamming activities. |
type/deposit | Denotes accounts run by a service used primarily for user deposit. |
type/withdrawal | Indicates accounts run by a service used for withdrawals. |
type/payment | Tags accounts that are used for making payments. |
type/donation | Accounts used to receive donations |
type/burn | Burn address or account without a known private key, reducing the possible circulating supply |
type/custodial | Represents accounts that are managed by a third party, holding funds on behalf of users. |
Tag | Description |
---|---|
exchange/deposit | Marks accounts specifically used for deposit transactions on an exchange. |
exchange/withdrawal | Indicates accounts used for withdrawal transactions from an exchange. |
Tag | Description |
---|---|
type/spam | used in spamming activities. |
type/initial_distribution | part of the initial distribution |
Tasks
Putting some thoughts down regarding how much energy the network actually uses. I'd like to address the often-repeated talking point that the entire Nano network could run off of a single wind turbine.
Below is a screenshot of a spreadsheet I've been working on. Most of it was taken from taken from the Nano Developer Work Generation Guide: https://docs.nano.org/integration-guides/work-generation/#example-benchmarks. 3090 datapoint added by my own test.
Example, best-case scenario:
This is JUST PoW, and not energy used by the rest of the network for confirmation.
Also, again, this is a best case scenario. We need to weight it against whatever distribution real-world PoW generation follows.
This would be an important piece of information we could gather that would legitimize this calculation - what GPUs does the network use? Can we survey the biggest nodes/wallets to see what hardware they use to generate work?
Though it’s interesting to see the cross over from dedicated GPU to CPU - I doubt the real-world number is worse than, like, 10x this best-case number.
Nano.community currently lists network TDP for the last 24 hours as 40.08 kWh
Assuming holding steady for a year, that’s 14,600 kWh / year (Do I have this right? 40.08 kWh accumulated over the last 24 hours, or 40.08 kWh, per hour, averaged over the last 24 hours?)
Taking that into account, we reduce the 10,116,000 kWh produced by the windmill by 14,600 kWh:
10,101,400,000,000 mWh / year / 9.7438 mWh / tx
= 1,038,198,649,397 tx / year
= 32,873 tx / s (best case PoW generation, and using estimated PR TDP for CPU only)
With a goal to increasing the reach of nano.community's content, I propose to start translating the pages and directories into Portuguese-BR (pt-br), with the possibility of changing the language in the user's navigation.
In this way, we could also get input from a wider community that does not speak fluent English.
A counterpoint to this can be making it difficult to keep pages in different languages synchronized and updated. This will require a greater community effort.
Thoughts?
Representative Alerts
Live Network Stats
Ledger Stats
Exchange Stats
Development Events
Community Posts
Account Tags
Representative
Representative Charts
Representative Owner
Hardware Info
Account Info
Account Charts
Send Summary
Receive Summary
Change Summary
Goals
Note: Focus is on the protocol design and properties derived from the design. Things like network effects, development, and community are not covered
General
Privacy
Initial Distribution
Monetary
Structure
Networking
Consensus / Decentralization
Ledger Interoperability
Usability Support
Governance
Summary
Filter based on tags Filter based on property values
Quick start guide for setting up and running the nano work server, and sending it requests from various languages (js, python, ruby, golang, etc)
Add a section to the running a node page with instructions on how to get a node up and running from source or binary.
Given that community education is key to keeping Nano decentralized, I propose we create a page dedicated to explaining why holders are strongly encouraged to withdraw from Binance/other exchanges and delegate to a good representative.
It could be another link in the Guides menu, perhaps called Why Withdraw?
. Also, another idea was to have a URL redirect to the page: nano.community/withdraw
redirecting to nano.community/getting-started-users/withdraw
(for consistency). That way, it is easier to link in a reddit comment/Discord/etc.
Please let me know your thoughts!
https://nano.community/faqs
Examples:
Reply with potential questions (one per reply so they can be individually discussed).
https://nano.community/introduction/basics
Potential Topics
Example: https://nano.community/tags/privacy
Goals
Potential Process
Contributing
Ledger Stats Over Time (10mins, Hour, Day, Month)
Tasks
https://nano.community/getting-started-devs/getting-started