{"id":23968918,"url":"https://github.com/ndavd/bop","last_synced_at":"2025-07-09T06:07:05.741Z","repository":{"id":271174477,"uuid":"912607368","full_name":"ndavd/bop","owner":"ndavd","description":"Secure multichain crypto portfolio tracker REPL","archived":false,"fork":false,"pushed_at":"2025-06-17T19:51:40.000Z","size":1758,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-09T06:06:54.462Z","etag":null,"topics":["age-encryption","blockchain","crypto","cryptocurrencies","cryptocurrency","cryptocurrency-portfolio","cryptocurrency-portfolio-tracking","dexscreener","encryption","ethereum","portfolio-tracker","repl","solana","ton","toncoin","tracking"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/book-of-profits","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ndavd.png","metadata":{"files":{"readme":".github/README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-01-06T02:47:19.000Z","updated_at":"2025-06-23T10:05:02.000Z","dependencies_parsed_at":"2025-02-22T19:24:40.991Z","dependency_job_id":"4c167084-b60b-4f67-863d-956b93a33ce1","html_url":"https://github.com/ndavd/bop","commit_stats":null,"previous_names":["ndavd/bop"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/ndavd/bop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndavd%2Fbop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndavd%2Fbop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndavd%2Fbop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndavd%2Fbop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ndavd","download_url":"https://codeload.github.com/ndavd/bop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndavd%2Fbop/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264403799,"owners_count":23602621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["age-encryption","blockchain","crypto","cryptocurrencies","cryptocurrency","cryptocurrency-portfolio","cryptocurrency-portfolio-tracking","dexscreener","encryption","ethereum","portfolio-tracker","repl","solana","ton","toncoin","tracking"],"created_at":"2025-01-07T00:56:11.157Z","updated_at":"2025-07-09T06:07:05.731Z","avatar_url":"https://github.com/ndavd.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📒📈 Book of Profits\n\n\u003cimg alt=\"Crates.io Version\" src=\"https://img.shields.io/crates/v/book-of-profits?style=flat-square\"\u003e\n\n`book-of-profits` is a multichain portfolio tracker in\n[REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) form.\n\nIt is private - All data is locally encrypted.\n\n\u003cimg src='https://raw.githubusercontent.com/ndavd/bop/main/.github/demo.gif' /\u003e\n\nIt features minimal and privacy preserving data fetching.\\\nExternal requests made by `book-of-profits` can be separated into two\ncategories:\n\n- RPC calls: Used to query the blockchain\n- Dexscreener API calls: Used to get the current price of tokens\n\nIf you're not content with the performance or privacy of the default RPC, you\ncan change it to one of your liking.\n\n\u003e [!NOTE]\n\u003e It is highly recommended to use custom RPCs, since the public ones often have\n\u003e severe rate limits.\n\nSee [features](https://github.com/ndavd/bop?tab=readme-ov-file#features).\\\nSee\n[supported blockchains](https://github.com/ndavd/bop?tab=readme-ov-file#supported-blockchains).\\\nSee [faq](https://github.com/ndavd/bop?tab=readme-ov-file#faq).\n\n## Installation\n\n### Download the pre-built binaries\n\nPre-built binaries for Windows, Linux, MacOS can be found in the\n[releases](https://github.com/ndavd/bop/releases) page.\n\n### Install from crates.io\n\nMake sure you have [cargo](https://doc.rust-lang.org/stable/cargo/) installed.\n\n```\ncargo install book-of-profits\n```\n\n### Install from source\n\n```\ngit clone https://github.com/ndavd/bop\ncd bop\ncargo install --path .\n```\n\n### Uninstall\n\n```\ncargo uninstall book-of-profits\n```\n\n## Features\n\n`✅`: Feature is supported on all chains\\\n`⚠️`: Feature is partially supported\\\n`❌`: Feature is planned but not supported yet\n\n| Support                   | Feature                                                                              |\n| ------------------------- | ------------------------------------------------------------------------------------ |\n| `✅`                      | Password encryption                                                                  |\n| `✅`                      | Change chain RPC                                                                     |\n| `✅`                      | Enable or disable chain                                                              |\n| `✅`                      | Add account to track and optionally set an alias                                     |\n| `✅`                      | Manually add new token just by specifying chain and address                          |\n| `✅`                      | Show global balance                                                                  |\n| `✅`                      | Export raw configuration in plaintext                                                |\n| `✅`                      | Display spinner when loading                                                         |\n| `✅`                      | Fallback RPCs                                                                        |\n| `⚠️` Not supported in EVM | Scan for token holdings in account and automatically add them                        |\n| `❌`                      | Show balance by chain                                                                |\n| `❌`                      | Show balance by account                                                              |\n| `❌`                      | Automatically prune low liquidity tokens                                             |\n| `❌`                      | Cache balances in order to display them in other views without refetching everything |\n| `❌`                      | Show total balance of a single token                                                 |\n| `❌`                      | Web client                                                                           |\n| `❌`                      | Centralized exchanges support                                                        |\n| `❌`                      | Cosmos                                                                               |\n| `❌`                      | Use Coingecko for prices and use Dexscreener as a fallback                           |\n\n## Supported Blockchains\n\n### Solana\n\n- Solana\n\n### Ton\n\n- Ton\n\n### EVM\n\n- Ethereum\n- Base\n- BSC\n- Arbitrum\n- Avalanche\n- Polygon\n- zkSync\n- Cronos\n- Fantom\n- Optimism\n- Linea\n- Mantle\n- Metis\n- Core\n- Scroll\n- IoTeX\n- Celo\n- PulseChain\n- Polygon zkEVM\n- Telos\n\n## FAQ\n\n#### Q: Where does it store the data?\n\nAll data is stored in the configuration file `.bop-data`, which is stored in\nuser's config directory:\n\n- For Linux, that's `$XDG_CONFIG_HOME` or `$HOME/.config`\n  - Example `/home/alice/.config/.bop-data`\n- For MacOS, that's `$HOME/Library/Application Support`\n  - Example `/Users/Alice/Library/Application Support/.bop-data`\n- For Windows, that's `{FOLDERID_RoamingAppData}`\n  - Example `C:\\Users\\Alice\\AppData\\Roaming\\.bop-data`\n\n\u003e [!NOTE]\n\u003e Keep in mind that if you didn't set a password its contents are not encrypted.\n\n#### Q: Why a REPL?\n\nI wanted this to be primarly a terminal application and a REPL allows the\ndecrypted data to be loaded into memory once, enabling users to execute multiple\ncommands while only needing to input their password once, and also makes the\nprocess of updating the data and re-encrypting it trivial.\n\nAlso because I'm a fan of [chisel](https://book.getfoundry.sh/reference/chisel).\n\n#### Q: I'm not a terminal user. Is this getting a client?\n\nBuilding a web client is a planned feature. It should not be hard to compile the\ncore components into WASM and make a client side application out of them.\n\n## Contributing\n\nContributions are very welcome! Those being pull requests, issues or feature\nrequests.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndavd%2Fbop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndavd%2Fbop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndavd%2Fbop/lists"}