This is the frontend for ultrasound.money—contributions welcome!
- clone
yarn install
yarn dev
ultrasound.money frontend
Home Page: https://ultrasound.money
License: MIT License
This is the frontend for ultrasound.money—contributions welcome!
yarn install
yarn dev
Was able to reproduce it after a while. It depends a bit on the screensize and perhaps even the size of the delta of the new data point. It doesn't happen for me on the since_merge time frame for example.
I'm not sure how highcharts picks its chart dimensions. Things I can come up with:
imo not worth it for the small gain of the axis not shifting on the first point. Depending on how large the supply changes are relative to the chart range I'd argue we want the y-range to be shifting. You could add another layer of complexity and only take over the min / max in select scenarios, but which? Furthermore, that still doesn't guarantee anything of course. It may well have to do with how the x-axis shifts. It all depends on how highcharts works which is magic (but works quite well!).
Finally also consider this doesn't even happen on every time frame, only some, depending on screen size, and maybe point delta it seems.
Another objection that comes to mind to pouring more time into this, especially suggestion 1. is that we already were controlling the min and max. I don't remember why we did it. Something to do with the animation I believe. In addition, the way we did it was by making the series transparent to keep the chart stable. Either way, I took it out when multiple time frames were introduced as those required more complex min / max control than we had. Putting it back in feels like moving against the current (i.e. stacking complexity higher than already proved sustainable).
The component counts ~700 LOC, let's try to make it simpler. Not more complex. If someone has an idea to make the chart simpler and fix this, even through design changes, I'm all ears.
Goal: Showcase all ~6K fam members on the website.
Inspiration: The cryptopunks explorer on https://www.larvalabs.com/cryptopunks
Possible design: See screenshot. Notice the horizontal scrollbar.
The MEV Share of the Validator Rewards is currently hard coded.
We could replace that with a dynamic calculation
Examples for such calculation elsewhere:
A new section / set of widgets dedicated to Layers 2 and their effect on the burn / eth supply
Could include:
Time series graphs depicting following metrics over time :
Layer 2 dedicated leaderboard.
Projections into the future
We upgraded to Next13. Next13 replaces the next/image component that we heavily depended on with what was previously next/image/next. Whereas the previous next/image is now next/image/legacy.
The new one has some improvements we'd like to use, but it also suffers from a white outline bug in Safari. Let's wait with the upgrade until it's fixed.
I have given the proposed workaround a shot but it doesn't appear to work.
Using this issue to track.
The supply equilibrium is a key data point. To better highlight it my suggestion would be to dynamically colour it orange or blue depending on whether the equilibrium is higher or lower than the current supply (orange if lower, blue if higher). It's a tiny change but will help bring this widget to life.
It would be very interesting, to add 2 statistics regarding the metrics of consecutive blocks burning ETH (gas streak).
Statistic 1: the leaderboard of the longest "ultrasound" (with eth burned) gas streaks.
Statistic 2: the largest total amount of ETH burnt during "ultrasound" gas streaks.
The scarcity widget tries to give a simple overview of how much ETH is currently locked up somewhere for use as collateral. This ETH can be considered "frozen" which is good for the security and utility of the network.
The simplest improvement it could use is that the DeFi category has been stale for a long time and it would be great to have a decent, auto-updating estimate instead. We used to use DefiPulse but their API was deprecated long ago.
Step 1 would be to figure out where we can get a good account of how much ETH is locked into DeFi (defillama, glassnode, tokenterminal, other).
Step 2 would be to then write a piece of code which can run every 10-min or so and write into our database how much ETH is locked in DeFi.
ultrasoundmoney/eth-analysis-rs
repo you can find an old commit in the git tree cd8d761426b9ec9502fd84f188b51d3c65683188
which removes a Rust module capable of using the DefiLlama API at the time to get and idea of the amount of ETH in DeFi protocols but if I recall correctly we were unhappy with the accuracy. That is to say, not confident the estimate was any good. Maybe now it is, maybe we'd need another method entirely.If you'd like you could make this issue a little bigger, you might even add a category if you feel there is a clear place ETH goes where it becomes mostly inert, which we can measure. "Lost ETH" is an example of this but hard to measure.
A money metric frequently used in trad finance regarding currency. Gives good indicator about the relative change in economic activity across time.
V = Velocity of money
GDP = total value of economic transactions
M1 = Monetary Base
Velocity
The idea here, is to include all transfers of eth in Ethereum economy, this formula should cover it:
NOTE: This does not include L2s + sidechains
M1 - coins and currency in circulation
M1 should include coins and currency in circulation. "in circulation" could be debatable. To be consistant with other graph we could use the liquid ETH from "scarcity" widget
Thus:
M1 = totalSupply - ("staking" +"defi (stale)" + "burn")
There are a number of contracts in the burn leaderboard that still don't have a name / description even after being there for weeks (such as Base). It seems like the data for this isn't public? Could you open source this data or point me to where it is so the community can contribute and add name/description/icon to contract addresses.
Hello friends !
Love what you guys are building keep going !
I wanted to make section that looks like your "Me and the Fam" section. I wanted to understand how you guys use the Twitter API to see who has or has not the bat signal. I saw that you guys are using this query : http://localhost:3000/api/fam/fricoben/followed-by
Do you have Database for that ? Can someone briefly explain to me how it works cause I can't find any followed-by
query that can help me.
Thanks a lot and sorry to disturb you with an issue in your repo.
You can contact me on Telegram and discord with @fricoben.
Monitor JS size over time here: https://ultrasound-bundle-sizes.vercel.app/
Currently the website supports different timeframes:
Eth-Supply Graph:
5m, 1h, 1d, 7d, 30d, since merge
All other graphs / tables:
5m, 1h, 1d, 7d, 30d, since burn
Suggestion:
We have multiple widgets designed for a complete L2 section we'd like to have on the site. Feel free to ask. Before then it could be nice to simply introduce a L2 line to the summary widget in the TVS section.
caching
module that makes it easy to write updates and have the API listen for them and expose them.We'd like to know which category of smart contract ETH is stored in (#274), and spent on.
We have automated categorization, or "metadata collection" as we call in in the code base but this doesn't nearly manage to label all volume. We could use help with both:
There are inconsistencies in design details such as differents fonts being used in different parts of the website ?
@JustinDrake Feel free to add concrete examples / screenshots here, where you spotted such issues.
Hé potential contributor 👋,
We have tons of features we'd like to add to the site still, but we don't have neat issues for all of them.
If you don't see a neat issue you can pick up but do want to contribute, let us know here and we'll offer something 🤲, or rather, gladly accept your offer to contribute.
We want the min and max marker in the Gas Market widget to link to the etherscan page of the block which set said min or max gas fee.
This will involve a small amount of backend work. Updated several existing SQL queries to retrieve an additional field. In addition to a small frontend update, turning the markers into links to Etherscan.
Now that it's been a year since the merge, we no longer have to rely on annualized data! Would be cool to just click 1Y to have the actual issuance/burn/supply growth data for the past 365 days
Once EIP-4844 has shipped on mainnet we will want to display details on the Blob fee market and it's effects on burn / eth supply.
Answering questions such as:
- Who is consuming the blobs ?
- How much data is going through the blobs ?
(Probably will have a lot of overlap with #311 , might even be in the same widget ? )
@JustinDrake Lmk if you have concrete ideas for specific graphs / visualizations that would work here. Especially for the second question.
We upgraded to Next13. Next13 replaces the next/image
component that we heavily depended on with what was previously next/image/next
. Whereas the previous next/image
is now next/image/legacy
.
The new one has some improvements we'd like to use, but it also suffers from a white outline bug in Safari. Let's wait with the upgrade until it's fixed.
I have given the proposed workaround a shot but it doesn't appear to work.
The easiest way to do this is to use the Next.js Image
everywhere instead of the html img
tag. When using the next.js Image
component, you are required to provide width and height so it can do resizing. This allows images to be served at the size it will display and Next.js can optimize with next-gen formats as-well.
Some contracts on the burn leaderboard are missing labels / twitter info even though the info should be available.
For example this contract seems to belong to the "Tinfun" nft project, which should link to their twitter-profile.
We might want to review our data source for that matching and see if we can remove these "gaps" with alternative sources.
This is a TODO listing of all the initial issues found. I'll sort them by priority later, but feel free to take them on or leave this for me:
https://web.dev/measure/?url=https%3A%2F%2Fultrasound.money%2F
Supply curves (USD, BTC, ETH)
misc
#faq
hashtag when outside the FAQ sectionscreenshot 1
screenshot 2
screenshot 3
screenshot 4
screenshot 5
screenshot 6
This widget has logos that overlap sometimes, depending on shifts on real-world p/e ratios. It would be nice to rewrite which logos are visible using a system as found in the 200Y projection widget. In short:
The simulated POW issuance since the merge in EthSupplyWidget and SupplyChange are calculated by subtracting the POS issuance/day from the POW issuance/day and multiplying by the number of slots/day.
Subtracting the two suggests that powIssuancePerDay
reflects the issuance to both miners and validators during the time when the two chains were running in parallel, but the comment where the POW issuance per day is declared cites https://etherscan.io/chart/blockreward, and their chart only includes issuance from mining.
By subtracting the POS issuance from a number that didn't include the POS issuance in the first place, the simulated POW issuance in these two widgets is being underestimated.
It's also worth noting that the IssuanceGauge, the only other component that uses powIssuancePerDay
, does not subtract the two to find the daily POW issuance.
top-left infobar
supply dashboard
ETH SUPPLY
SUPPLY CHANGE
–
and blue for +
).CURRENT SUPPLY
GAUGES
gas dashboard
BASE FEES
GAS MARKET
projections dashboard
2Y PROJECTION
burn dashboard
LATEST BLOCKS
BURN CATEGORIES
TVS dashboard
ETHEREUM SECURES
NFT LEADERBOARD
ERC20 LEADERBOARD
monetary premium dashboard
SCARCITY
VALIDATOR REWARDS
FLIPPENINGS
fam dashboard
POAP dashboard
ELIGIBLE ACCOUNTS
CLAIM POAP
comment for multiple dashboards
Figma
Here are some random ideas I've had over time to add to ultrasound.money, in no particular order:
A graph of Ether's annualized supply growth over time. Either last 24 hour, or annualized growth since merge.
The first one shows the whole "capped issuance vs uncapped burn" concept. The second one is just for fun, it's similar to the existing "supply graph since merge" graph, except the rate goes down when supply change stagnates (as expected) and becomes harder to budge the longer time goes on.
Issuance offset expressed in terms of time instead of a factor (simple mockup)
For the average person, I figure it's easier to grasp "In the last hour, we burned 6 hours' worth of issuance" than the displayed numeric ratio
A widget that tracks the highest supply ever recorded, displaying something like "If all the burn suddenly stopped, it would take X days to go back to the previous supply peak of 120,534,227.79 ETH". Or just simply something tracking the "supply change since peak"
It'd be cool, but admittedly not that useful beyond helping gauge confidence when claiming "we will never reach the supply peak again"
Maybe instead of "if all the burn stopped" we can use a timeframe's average basefee for the calculation (and when the basefee is greater than the ultrasound barrier, the answer would simply be "never"!)
"Since merge" time frame (although I believe that's already in the works), and I think we can safely have a 1 year time frame now too
The supply change widget needs a nerd tooltip displaying "Ether issued: X, Ether burned: Y, net supply change: X-Y" to make those figures more accessible as well as make it clearer that we're talking about net supply change, even if we're net negative there's still been a very positive number of ETH that were issued (I see people making that mistake too often)
Similar to above, a way to graph explicitly how much has been burned would be cool, maybe something like this
An option to show tips in the basefee graph. I really miss that feature from watchtheburn - seeing tips suddenly shoot up is an obvious sign that the basefee will quickly follow, plus there's something truly beautiful and satisfying about the way it does it with a clean exponential curve
Hard mode would be tracking MEV as well (from some mevboost api?) and adding that on top of the tips on top of the basee
The values in the "Gas Streak" widget, seem to be wrong in certain cases.
TODO: @JustinDrake Could you maybe give some more detail / examples on this ?
The total amount of assets on Ethereum isn't what matters from a security standpoint. What matters is the total amount of assets that transferred ownership between most recent finalized block and head. Even more precisely, it is the total amount of assets transferred in exchange for some off-Ethereum good/service.
It is impossible to know this number precisely as we cannot know which transactions are causing asset ownership changes nor which are in exchange for off-chain goods/services, but we can probably get into the right ballpark by just assuming all ERC20 and ETH and NFT transfers are between owners in exchange for off-chain assets. This will give us a far more realistic view of the security ratio than just totally all assets on Ethereum and dividing by the stake.
On the stake side of the equation, we shouldn't count all stake, but rather the amount of stake an attacker would lose in an attack. In the most pathological scenario, I think this is something like 20% (or maybe it was 30%) of all stake due to possible proposer boost manipulation. Note: this assumes that there is no custodial or pooled staking, but for simplicity we should probably ignore these anyway and be optimistic.
So final formula would be something like total_assets_transferred_since_finality_in_usd / (0.2 * total_staked_eth_in_usd)
.
To 0x0
and 0xdEaD
?
For example someone just recently sent 1,570 ETH to 0x0
https://etherscan.io/tx/0xfeedbf51b4e2338e38171f6e19501327294ab1907ab44cfd2d7e7336c975ace7
0x0
currently has 13,331 ETH
0xdEaD
currently has 12,608 ETH
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.