book-of-profits
is a multichain portfolio tracker in
REPL form.
It is private - All data is locally encrypted.
It features minimal and privacy preserving data fetching.
External requests made by book-of-profits
can be separated into two
categories:
- RPC calls: Used to query the blockchain
- Dexscreener API calls: Used to get the current price of tokens
If you're not content with the performance or privacy of the default RPC, you can change it to one of your liking.
Note
It is highly recommended to use custom RPCs, since the public ones often have severe rate limits.
See features.
See
supported blockchains.
See faq.
Pre-built binaries for Windows, Linux, MacOS can be found in the releases page.
Make sure you have cargo installed.
cargo install book-of-profits
git clone https://github.com/ndavd/bop
cd bop
cargo install --path .
cargo uninstall book-of-profits
✅
: Feature is supported on all chains
⚠️
: Feature is partially supported
❌
: Feature is planned but not supported yet
Support | Feature |
---|---|
✅ |
Password encryption |
✅ |
Change chain RPC |
✅ |
Enable or disable chain |
✅ |
Add account to track and optionally set an alias |
✅ |
Manually add new token just by specifying chain and address |
✅ |
Show global balance |
✅ |
Export raw configuration in plaintext |
⚠️ Not supported in EVM |
Scan for token holdings in account and automatically add them |
❌ |
Show balance by chain |
❌ |
Show balance by account |
❌ |
Automatically prune low liquidity tokens |
❌ |
Cache balances in order to display them in other views without refetching everything |
❌ |
Display spinner when loading |
❌ |
Show total balance of a single token |
❌ |
Web client |
❌ |
Centralized exchanges support |
- Solana
- Ton
- Ethereum
- Base
- BSC
- Arbitrum
- Avalanche
- Polygon
- zkSync
- Cronos
- Fantom
- Optimism
- Linea
- Mantle
- Metis
- Core
- Scroll
- IoTeX
- Celo
- PulseChain
- Polygon zkEVM
- Telos
All data is stored in the configuration file .bop-data
, which is stored in
user's config directory:
- For Linux, that's
$XDG_CONFIG_HOME
or$HOME/.config
- Example
/home/alice/.config/.bop-data
- Example
- For MacOS, that's
$HOME/Library/Application Support
- Example
/Users/Alice/Library/Application/.bop-data
- Example
- For Windows, that's
{FOLDERID_RoamingAppData}
- Example
C:\Users\Alice\AppData\Roaming\.bop-data
- Example
Note
Keep in mind that if you didn't set a password its contents are not encrypted.
I wanted this to be primarly a terminal application and a REPL allows the decrypted data to be loaded into memory once, enabling users to execute multiple commands while only needing to input their password once, and also makes the process of updating the data and re-encrypting it trivial.
Also because I'm a fan of chisel.
Building a web client is a planned feature. It should not be hard to compile the core components into WASM and make a client side application out of them.
Contributions are very welcome! Those being pull requests, issues or feature requests.