A desktop tool for Windows, Linux & MacOS to analyse and visualize your Autonomi nodes earnings from Arbiscan CSV exports.
Supports filtering by period and token price updates.
- Daily earnings breakdown
- Daily/Monthly earnings visualizations
- Customisable parametres:
-
Token
• nothing stops you from switching to other tokens
-
Nodes amount
• check how you're doing against other node runners
-
Period selection
• Filter by month, quarter, half‑year, or full year
-
Exclude certain payers
• Right‑click any column header in the daily breakdown to exclude or include specific payers
-
Configurable Smoothing Windows
• Zero‑fills missing days to avoid misleading spikes or gaps
• Default rolling windows: 14 days (3‑day average), 30 days (5‑day average), 60 days (7‑day average)
• You can override those window lengths in
config.json -
Median vs. Simple Average
• Switch between mean and median smoothing. Median helps resist large outliers (e.g. few‑day payment delays)
-
- Live token price is retrieved from DEXs
- Node efficiency metrics:
- "mANT/Node/Day": Millitoken‑per‑Node‑per‑Day
- "Nodes for 1x ANT/day": how many nodes you need to earn 1x ANT per day
- "USD/1k": total USD earned per 1'000 nodes over the period
| Description | Badge |
|---|---|
| Total downloads | |
| Latest release downloads | |
| Windows (x86_64) | |
| Linux (x86_64) | |
| Linux (arm64) | |
| macOS (arm64) | |
| macOS (Intel/x86_64) |
-
Windows
-
Linux (x86_64/arm64)
- The release binary was built on Ubuntu 24.04.2
- If built from docker/Dockerfile script, should work on older distros:
- Debian 11 “Bullseye” and newer
- Ubuntu 22.04 “Jammy” and newer
- Most other desktop distros (Fedora, Mint, Pop!_OS, etc.) whose glibc is ≥ 2.31
-
MacOS
Drop the bundle into your
Applicationsfolder.You might need to start the tool from terminal for the first launch.
The standard
CMD + Click → Verifydoes not always work.It doesn't require
sudoto run but still needs terminal command because I'm not a licensed Apple developer:To start from the terminal:
/Applications/Autonomi\ Earnings.app/Contents/MacOS/Autonomi\ Earnings
-
Apple Silicon - arm64
The release binary was built on
MacOS 14.7.6 -
Intel - x86_64
The release binary was built on
MacOS 12.7.6
-
Click Code → Download ZIP → Extract
- Installation
- download Embedded Python which runs from .exe without installation
🔗 python.org → "Download Windows embeddable package (64-bit)"
- Extract into the project's folder as:
├── python-3.13.5-embed-amd64/
│ ├── python.exe
│ ├── python313.dll
│ └── ...
├── src/
├── sripts
│ ├── build_win.ps1
└── requirements.txt- Run the build script
.\sripts\build_win.ps1or if you have Make:
make build-win- Clean up
After building, you can safely delete the Autonomi-Nodes.Earnings-Breakdown folder at this point. To run the tool Autonomi Earnings.exe is all you need now.
Caution! This script was tested only on old MacOS 12 Monterey with Intel CPU.
- Run the build script
./scripts/build_macos.shor if you have Make:
make build-mac- Clean up
Just delete the Autonomi-Nodes.Earnings-Breakdown folder. The script has cleaned after itself.
- Run the tool
Docker is required
-
Either build binary:
rm -rf build_output && \ mkdir -p build_output && \ docker build --target=builder -t auton-earnings-builder:builder -f docker/Dockerfile . && \ docker run --rm --entrypoint=cp -v "$PWD/build_output":/host_out auton-earnings-builder:builder /out/Autonomi-Earnings /host_out/ && \ echo "✅ build_output: binary ready"
-
Or launch tool straight from container.
Haven't tested myself but ChatGPT says it should work (even with Wayland):
docker build -t auton-earnings-builder:builder -f docker/Dockerfile . && \ docker run --rm \ --network host \ -e DISPLAY="$DISPLAY" \ -v /tmp/.X11-unix:/tmp/.X11-unix \ auton-earnings-builder:builder
Install Make (it's a ~200 KB tool):
sudo apt install makeBuild a binary into /build_output:
make build-linuxLaunch tool straight from container:
make run-linuxDelete /build_output:
make cleanStart the tool first
To download data files in .csv format from Arbiscan
- Go to
https://arbiscan.io/exportData?type=addresstokentxns&a=<your_wallet>orhttps://arbiscan.io/exportData - Choose Token Transfers (ERC-20) export type option
- Leave download option Date (don't switch to "Block Number")
- Switch on Tick to include private name tags
- "Tick to include txn private notes" doesn't matter if you tick it or not
- Sometimes tags are not included in the CSV. Tool will ignore these files so please check yourself.
- You may work with several input CSV files
- Place your CSV files into the
inputs/folder (you may copy-paste its path from the app)- The tool creates
inputs/folder at the first launch - If you are a MacOS user
inputs/folder is located at/Applications/Autonomi Earnings.app/Contents/MacOSinside the .app bundle (Right-Click onAutonomi Earnings.app> Show Package Contents)
- The tool creates
- Set your nodes amount
- Set period + hit
Calculateto get results Rows in the pivot table are colour-coded according to the amount earned in comparison to other days - Nodes for 1xANT/day show three values for 14/30/60 days moving averages. See this section for more i on how it's calculated
- This link helps to quickly Copy-Paste into Arbiscan export page
- This link always points to folder where CSV files are kept
- Hit this fetch token price from DEX (recalculates as well)
- Right-Click to Exclude payers from calculations. I recommend excluding the first Emitter as its value is significantly larger. Airdrop address is already excluded if you use my default
config.json
- Choose between Mean and Median graphs. These buttons are synchronised with those on the Main tab
- You can disable the display of moving average lines
Select the display currency: token or USD
| Key | Function |
|---|---|
Q |
Quit |
Space |
Calculate |
F1 |
Switch to Daily Data |
F2 |
Switch to Daily Graph |
F3 |
Switch to Monthly Graph |
F5 |
Fetch token price & Calculate |
Ctrl+Tab |
Switch tabs |
Ctrl+Shift+Tab |
Switch tabs backwards |
- to get the token price, it queries Dexscreener for pull with the most usd~ liquidity
- when a new price is retrieved from Dexscreener it recalculates everything automatically
- if Dexscreener is not available it checks Coingecko
- if for whatever reason you want to check other token and it's not on Arbitrum One you have to switch blockchain address in
_fetch_price_coingeckofn as instructed there
- if for whatever reason you want to check other token and it's not on Arbitrum One you have to switch blockchain address in
- exclude certain payers by Right-Click the column headers (temporary)
- to exclude permanently read about blacklisting feature
- "Daily Graph" tab updates instantly when you select a new period. But the period label in title doesn't update until you re-calculate everything
Introduced to help understand your nodes effectiveness. The indicator implies for three fixed time windows (14 days, 30 days, 60 days) how many nodes you’d need to earn exactly 1 ANT per day.
-
Zero‑filling missing days
- Missing payment: Nodes normally earn almost every day, but occasional gaps (1–2 days) occur (high Arbitrum gas price). Sometimes zero‑payment windows can even last 3–5 days due to nodes update bugs or delayed batch payouts
- If a day has no recorded payout, it becomes a real “0 ANT” in the data instead of being skipped
- Why? Leaving gaps would make the math trick you: skipping days would look like you earned more on the days you did get paid Zero‑filling forces each missing day to count as a true zero‑earning day
- Important. Keep in mind that Nodes for 1x ANT/day is always calculated for the last known day with data consequently meaning if you don't have input data for the previous 14/30/60 days the results would be rubbish
-
Smoothing
- For each of the three spans (14 days, 30 days, 60 days), the tool looks at your daily earnings (including those zero days) and smooths out random spikes or dips
- It does this by taking a “rolling average” or a “rolling median” over that entire span. You choose between Avg or Median
- I introduced a short‑term smoothing step over three intervals:
- 3 day window for 14 days period
- 5 day window for 30 days period
- 7 day window for 60 days period
- I've hidden a second variant in
_update_daily_graph()fn for smoothing when no matter user's choice for rolling (avg/median), .mean() applies for smoothing. This eliminates small spikes even more. I just don't like the graph to bounce as a kindergarten child's mood when I'm trying to analise a trendline - Pivot table always shows your actual raw daily or period totals without smoothing
- You can reconfigure smoothing windows sizes (see next paragraph how)
-
What zero‑filling and smoothing really do
- Average (simple mean) treats each day equally. A single big gap can pull the average way down because you’re dividing by all days—including zeros.
- Median picks the middle value of those smoothed daily totals. One or two zero days can drag the median lower, but if most days are non‑zero, the median stays closer to your normal rate
- Together, they prevent you from thinking your earnings are better than they are, or worse in the face of random glitches
- In practice:
- If you have just one or two missing days in a month, median will ignore those few zeros and show your steady earning rate.
- If you have long droughts (3–5 days of no earnings), even a median will slide down because many zeros appear in the middle of your data and its accuracy decreases. In this case consider focusing on a larger period instead
-
Calculates how many thousandths of a token (mANT) you earn per node, per day, over any period
• Literally “m” stands for 1/1000 (or 1×10⁻³) of a token. It's the same as saying "ANTs per 1'000 nodes basis".
-
USD equivalent per 1'000 nodes for the selected period
• Just keep in mind this is not divided by the number of days as "mANT/Node/Day" does
Edit config.json
MacOS user may find it next to the /inputs folder inside the bundle
-
defaultssection is self-explanatory -
tag_overridessection If you used to have private tags in Arbiscan they would be imported into tool's UI automatically. But you can override your tags to new names for them to better fit tools's GUI in case they are too long. Works askey: valuewhenkey= your tag from Arbiscan andvalue= your new tag for tool -
address_overridessection does the same astag_overridesbut if you had no tags before you could add wallet addresses if you wish to distinguish a particilar income source. I preliminary added Emission contracts for this purpose. -
blacklistsection permanently excludes address from calculations. As an example I added Airdrop address as it is not relevant to nodes earnings. If you have outgoing transactions you must blacklist those to where you make them - your other wallets/CEXs/DEXs etc. Don't forget to add a comma to the previous line when adding a new address. -
smoothing_windowssection controls the smoothing behaviour. To completely disable smoothing, set the smoothing window size to1for each period. This makes the app treat each period as having no internal averaging—it will calculate results exactly as they were on each day without blending them into extra smoothing intervals.
This project is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
You are free to:
- Share — copy and redistribute the material in any medium or format
- Adapt — remix, transform, and build upon the material
For non-commercial use only.
If you remix or adapt the material, you must license your new creations under the same license.
To view a copy of this license, visit:
https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
For attribution, please credit the original author:
0belius





