{"id":18579219,"url":"https://github.com/faust64/opencointracking","last_synced_at":"2026-02-07T06:03:04.962Z","repository":{"id":42211489,"uuid":"115193024","full_name":"faust64/opencointracking","owner":"faust64","description":"yet-another-sloppy-fork","archived":false,"fork":false,"pushed_at":"2024-12-06T04:36:10.000Z","size":1462,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-26T16:14:03.571Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faust64.png","metadata":{"files":{"readme":"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}},"created_at":"2017-12-23T12:05:43.000Z","updated_at":"2024-01-12T18:05:43.000Z","dependencies_parsed_at":"2023-12-12T01:29:40.969Z","dependency_job_id":"8f8c7616-1ae8-491e-9e71-8344b3e9d8b5","html_url":"https://github.com/faust64/opencointracking","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faust64%2Fopencointracking","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faust64%2Fopencointracking/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faust64%2Fopencointracking/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faust64%2Fopencointracking/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faust64","download_url":"https://codeload.github.com/faust64/opencointracking/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239318788,"owners_count":19619469,"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":[],"created_at":"2024-11-06T23:39:30.956Z","updated_at":"2025-11-01T19:30:23.626Z","avatar_url":"https://github.com/faust64.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenCoinTracking\n\nReverse-engineering CoinTracking.info. While their service is undoubtfully\nthe best, I can't convince myself a lifetime/limitless subscription is worth\nthe price they're asking.\n\nOn the other hand, I could use figuring out the specifics of what goes on,\nunder the hood. This project is pretty much a work in progress, prefer using\nCoinTracking original service.\n\nNote that when a trade record includes a fee, then we would assume the values\ntraded do not count that fee - contrarily to CoinTracking, which is confusing\nIMHO.\n\nOther inconsistencies would most likely be relateed to poor arithmetics, feel\nfree to point them out or contribute fixes, ...\n\nCurrently based on SQLite. MySQL \u0026 Postgres support shouldn't be much\ncomplicated, Cassandra support would be more painful, as auto-incrementing\nnumeric IDs won't be easy nor recommended, ...\n\n## Env vars inventory - and their defaults, if any\n\n```\nCIRCLECI\nDEBUG\nBIND_ADDR || '127.0.0.1'\nBIND_PORT || 8080\nAPI_SESSION_SECRET || 'opencointracking'\nAPI_SESSION_TTL || 10800\nAIRBRAKE_ID\nAIRBRAKE_KEY\nCT_HOSTNAME || 'localhost'\nCT_PORT\nCT_PROTO || env === 'production' ? 'https' : 'http'\nMAIL_FROM || 'root@localhost'\nMAIL_REPLYTO || 'noreply@localhost'\nMIN_PWLEN || 6\nNODE_ENV\nPAGINATION_MIN || 100\nPDFGEN_DIR || './tmp'\nQUEUE_DB || 0\nQUEUE_HOST || '127.0.0.1'\nQUEUE_PORT || 6379\nSMTP_HOST || '127.0.0.1'\nSMTP_PASS\nSMTP_SSL\nSMTP_USER\nSYSLOG_FACILITY || 'local6'\nSYSLOG_PROTO || 'unix'\nSYSLOG_UNIX_SOCKET\nSYSLOG_PROXY || 'localhost'\nSYSLOG_PORT || 514\n\n#sqlite\nDB_CONNECTOR || 'sqlite'\nDB_DATABASE || './ct.sqlite'\n\n#mysql, postgres \u0026 cassandra DB_CONNECTOR:\n#DB_DATABASE || 'opencointracking'\n#DB_HOST || '127.0.0.1'\n#DB_USER\n#DB_PASS\n\n#mysql, postgres\n#DB_PORT\n\n#postgres\n#DB_SSL\n\n#cassandra\n#CQLSH_VERSION\n#DB_READ_CONSISTENCY || 'one'\n#DB_WRITE_CONSISTENCY || 'one'\n```\n\n## DB init\n\nUsing SQlite:\n\n```\n$ cat db/sqlite.init | sqlite3 /path/to/my/database.sqlite\n```\n\nNote: prior import, feel free to edit currencies definitions, including\nthose you'll want to track and dropping those you won't need.\n\nHaving imported initial dump, you'll want to populate the rates tables with\nsome history:\n\n```\n$ ./utils/populate_crypto_rates\n```\n\nNote the previous command requires having installed node dependencies\n(`npm install`).\n\n## Workers\n\nService is based on a `background` worker:\n * refreshing crypto-currencies rates every 5 minutes\n * refreshing FIAT rates every hour\n * purging older records, such as we would keep only one rate per currency\n   per day, when records are over 30 days old.\n\nInterface based on a `front` worker.\n\nCheck processes do start with:\n\n```\nnode workers/background.js \nnode workers/front.js \n```\n\nHaving `pm2` installed globally, you may use\n\n```\n$ pm2 start ./workers/background.js --name background -i 1 \\\n    --output /path/to/logs/bg.log --error /path/to/logs/bg.err\n$ pm2 start ./workers/front.js --name front -i 4 \\\n    --output /path/to/logs/front.log --error /path/to/logs/front.err\n$ pm2 save\n```\n\n## FIXMEs\n\n * email verification\n * stats\n   - buy/spent volumes by day in preferredCurrency graph missing\n * current balances\n   - 30days trend column for each currency\n   - pagination on coins (currently shows all)\n * trades / trade prices\n   - pagination\n * daily balance\n   - pagination (currently shows last month)\n * balance by currency\n   - chart.js bug? last plot not graphed, addressed adding fake plot?\n   - chart bars width mismatch in a same graph? why?\n   - chart barts still missing ...\n   - pagination per coin, sort per balance held\n   - render by year/month/day\n * balance by exchange\n   - pagination on exchanges (currently shows all)\n * fees\n   - pagination on trades \u0026 on exchanges, somehow (currently shows all)\n * doubleentry\n   - pagination on trades (currently shows all)\n * gains\n   - it's complicated ...\n   - pagination scrolling through realized/unrealized gains \u0026 coins (currently shows all)\n * tradeanalysis\n   - allow filtering on exchange and/or trade group\n   - preferredCurrency mistakenly filters trades, should instead be used converting all values\n * speed up pages rendering time: cache arrays pre-formatting/paging into redis\n   and/or consider some kind of client-side/server-less paging/sotring?\n * should not request for 2fa code more than once every (user-defined-interval-defaults-to-24h)\n * pdf export consistently fails, regardless of the library I try, ...\n * sql schema missing defaults \u0026 not nulls\n * packaging\n * docs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaust64%2Fopencointracking","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaust64%2Fopencointracking","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaust64%2Fopencointracking/lists"}