Repository Analysis

bmoscon/cryptofeed

Cryptocurrency Exchange Websocket Data Feed Handler

38.1 Strong AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of bmoscon/cryptofeed, a Python project with 2,877 GitHub stars. SynthScan v2.0 examined 23,448 lines of code across 189 source files, recording 302 pattern matches distributed across 8 syntactic categories. The overall adjusted score of 38.1 places this repository in the Strong AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

38.1
Adjusted Score
38.1
Raw Score
100%
Time Factor
2026-08-09
Last Push
2.9K
Stars
Python
Language
23.4K
Lines of Code
189
Files
302
Pattern Hits
2026-08-09
Scan Date
0.85
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 160MEDIUM 1LOW 141

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 302 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Cross-File Repetition131 hits · 655 pts
SeverityFileLineSnippetContext
HIGHtools/generate_test_data.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/book_depth_test.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/tools.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/performance_metrics.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/check_raw_dump.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/book_test.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtools/run_profiler.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_utils.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_exchange.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_exchange_integration.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_symbol_normalization.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_binance.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/unit/test_serialization.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_bitfinex.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_deribit.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_kraken.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_binance.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_bitmex.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHtests/integration/rest/test_gemini.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_custom_agg.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_mongo.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_multicb.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_binancetr.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_playback.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_bequant_bitcoincom_hitbtc.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_gateiofutures.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_raw_data.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_ohlcv.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_throttle.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_existing_loop.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_rabbitmq_queue.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_okx_authenticated.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_loop.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_renko.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_rabbitmq_exchange.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHexamples/demo_nbbo.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/callback.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/raw_data_collection.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/config.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/log.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/connection_handler.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchange.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/__init__.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/feed.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/nbbo.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/connection.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/symbols.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exceptions.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/feedhandler.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/util/time.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/util/book.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/hitbtc.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/okx.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/okcoin.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/kraken_futures.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/upbit.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/cryptodotcom.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/huobi_swap.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
HIGHcryptofeed/exchanges/binance_futures.py0copyright (c) 2019 bryant moscon - bmoscon@gmail.com please see the license file for the terms and conditions associatedSTRING
71 more matches not shown…
Cross-Language Confusion29 hits · 97 pts
SeverityFileLineSnippetContext
HIGHcryptofeed/exchanges/gateio_futures.py63 "error": null,STRING
HIGHcryptofeed/exchanges/gateio_futures.py93 "error": null,STRING
HIGHcryptofeed/exchanges/gateio_futures.py183 "error": null,STRING
HIGHcryptofeed/exchanges/gateio_futures.py277 "error": null,STRING
HIGHcryptofeed/exchanges/bitmex.py173 "simpleOrderQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py176 "displayQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py177 "stopPx": null,STRING
HIGHcryptofeed/exchanges/bitmex.py178 "pegOffsetValue": null,STRING
HIGHcryptofeed/exchanges/bitmex.py191 "simpleLeavesQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py193 "simpleCumQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py195 "avgPx": null,STRING
HIGHcryptofeed/exchanges/bitmex.py208 "simpleOrderQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py211 "displayQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py212 "stopPx": null,STRING
HIGHcryptofeed/exchanges/bitmex.py213 "pegOffsetValue": null,STRING
HIGHcryptofeed/exchanges/bitmex.py226 "simpleLeavesQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py228 "simpleCumQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py230 "avgPx": null,STRING
HIGHcryptofeed/exchanges/bitmex.py250 "simpleOrderQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py253 "displayQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py254 "stopPx": null,STRING
HIGHcryptofeed/exchanges/bitmex.py255 "pegOffsetValue": null,STRING
HIGHcryptofeed/exchanges/bitmex.py268 "simpleLeavesQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py270 "simpleCumQty": null,STRING
HIGHcryptofeed/exchanges/bitmex.py272 "avgPx": null,STRING
HIGHcryptofeed/exchanges/deribit.py147 "volume" : null,STRING
HIGHcryptofeed/exchanges/deribit.py148 "low" : null,STRING
HIGHcryptofeed/exchanges/deribit.py539 "matching_id" : null,STRING
HIGHcryptofeed/exchanges/binance.py474 "N": null, // Commission assetSTRING
Deep Nesting98 hits · 96 pts
SeverityFileLineSnippetContext
LOWtools/generate_test_data.py27CODE
LOWtools/check_raw_dump.py19CODE
LOWtests/unit/test_exchange.py66CODE
LOWtests/unit/test_binance.py17CODE
LOWexamples/demo_check_trade_timestamps.py65CODE
LOWcryptofeed/raw_data_collection.py29CODE
LOWcryptofeed/raw_data_collection.py33CODE
LOWcryptofeed/config.py40CODE
LOWcryptofeed/connection_handler.py50CODE
LOWcryptofeed/connection_handler.py93CODE
LOWcryptofeed/exchange.py90CODE
LOWcryptofeed/exchange.py300CODE
LOWcryptofeed/feed.py27CODE
LOWcryptofeed/feed.py156CODE
LOWcryptofeed/connection.py370CODE
LOWcryptofeed/util/book.py10CODE
LOWcryptofeed/exchanges/bitdotcom.py64CODE
LOWcryptofeed/exchanges/bitdotcom.py123CODE
LOWcryptofeed/exchanges/bitdotcom.py144CODE
LOWcryptofeed/exchanges/bitdotcom.py525CODE
LOWcryptofeed/exchanges/okx.py56CODE
LOWcryptofeed/exchanges/okx.py87CODE
LOWcryptofeed/exchanges/okx.py274CODE
LOWcryptofeed/exchanges/okx.py308CODE
LOWcryptofeed/exchanges/okx.py405CODE
LOWcryptofeed/exchanges/kraken_futures.py237CODE
LOWcryptofeed/exchanges/cryptodotcom.py192CODE
LOWcryptofeed/exchanges/cryptodotcom.py218CODE
LOWcryptofeed/exchanges/cryptodotcom.py223CODE
LOWcryptofeed/exchanges/huobi_swap.py61CODE
LOWcryptofeed/exchanges/bybit.py75CODE
LOWcryptofeed/exchanges/bybit.py212CODE
LOWcryptofeed/exchanges/bybit.py251CODE
LOWcryptofeed/exchanges/bybit.py295CODE
LOWcryptofeed/exchanges/bybit.py336CODE
LOWcryptofeed/exchanges/binance_futures.py236CODE
LOWcryptofeed/exchanges/kraken.py73CODE
LOWcryptofeed/exchanges/kraken.py125CODE
LOWcryptofeed/exchanges/kraken.py199CODE
LOWcryptofeed/exchanges/independent_reserve.py87CODE
LOWcryptofeed/exchanges/huobi.py176CODE
LOWcryptofeed/exchanges/bitfinex.py101CODE
LOWcryptofeed/exchanges/bitfinex.py324CODE
LOWcryptofeed/exchanges/bitfinex.py357CODE
LOWcryptofeed/exchanges/bitfinex.py389CODE
LOWcryptofeed/exchanges/bitstamp.py58CODE
LOWcryptofeed/exchanges/bitstamp.py140CODE
LOWcryptofeed/exchanges/poloniex.py84CODE
LOWcryptofeed/exchanges/gateio_futures.py176CODE
LOWcryptofeed/exchanges/gateio_futures.py336CODE
LOWcryptofeed/exchanges/bitmex.py44CODE
LOWcryptofeed/exchanges/bitmex.py105CODE
LOWcryptofeed/exchanges/bitmex.py363CODE
LOWcryptofeed/exchanges/bitmex.py764CODE
LOWcryptofeed/exchanges/gemini.py121CODE
LOWcryptofeed/exchanges/gemini.py169CODE
LOWcryptofeed/exchanges/coinbase.py150CODE
LOWcryptofeed/exchanges/ascendex.py83CODE
LOWcryptofeed/exchanges/ascendex.py114CODE
LOWcryptofeed/exchanges/kucoin.py196CODE
38 more matches not shown…
AI Structural Patterns17 hits · 17 pts
SeverityFileLineSnippetContext
LOWcryptofeed/raw_data_collection.py77CODE
LOWcryptofeed/feed.py27CODE
LOWcryptofeed/exchanges/mixins/bitfinex_rest.py242CODE
LOWcryptofeed/exchanges/mixins/bitfinex_rest.py247CODE
LOWcryptofeed/exchanges/mixins/bitfinex_rest.py255CODE
LOWcryptofeed/exchanges/mixins/bitfinex_rest.py260CODE
LOWcryptofeed/exchanges/mixins/bitfinex_rest.py265CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py111CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py160CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py165CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py173CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py177CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py188CODE
LOWcryptofeed/exchanges/mixins/binance_rest.py207CODE
LOWcryptofeed/exchanges/mixins/deribit_rest.py67CODE
LOWcryptofeed/backends/rabbitmq.py16CODE
LOWcryptofeed/backends/postgres.py19CODE
Excessive Try-Catch Wrapping12 hits · 13 pts
SeverityFileLineSnippetContext
LOWtools/generate_test_data.py79 except Exception as e:CODE
LOWtools/check_raw_dump.py50 except Exception:CODE
LOWtools/book_test.py34 except Exception:CODE
LOWcryptofeed/raw_data_collection.py133 except Exception:CODE
LOWcryptofeed/connection_handler.py76 except Exception as e:CODE
LOWcryptofeed/connection_handler.py100 except Exception:CODE
MEDIUMcryptofeed/connection_handler.py93def _handler(self, connection, handler):CODE
LOWcryptofeed/exchange.py108 except Exception as e:CODE
LOWcryptofeed/feedhandler.py167 except Exception as why:CODE
LOWcryptofeed/exchanges/bithumb.py69 except Exception as e:CODE
LOWcryptofeed/exchanges/mixins/kraken_rest.py313 except Exception as ex:CODE
LOWcryptofeed/backends/kafka.py104 except Exception as e:CODE
Hyper-Verbose Identifiers10 hits · 10 pts
SeverityFileLineSnippetContext
LOWtools/tools.py37def bittrex_get_trading_pairs():CODE
LOWtools/tools.py46def coinbase_get_trading_pairs():CODE
LOWtests/unit/test_runtime_type_assertions.py6def test_ticker_raises_with_bad_args_if_assertions_enabled():CODE
LOWtests/unit/test_runtime_type_assertions.py13def test_ticker_does_not_raise_with_bad_args_if_assertions_not_enabled():CODE
LOWtests/unit/test_binance.py17def test_binance_address_generation():CODE
LOWtests/integration/rest/test_gemini.py50 def test_place_order_and_cancel(self):CODE
LOWcryptofeed/exchange.py130 def exchange_symbol_to_std_symbol(self, symbol: str) -> str:CODE
LOWcryptofeed/exchange.py139 def std_symbol_to_exchange_symbol(self, symbol: Union[str, Symbol]) -> str:CODE
LOWcryptofeed/feed.py249 def check_bid_ask_overlapping(self, data):CODE
LOWcryptofeed/exchanges/bybit.py407 async def _ticker_open_interest_funding_index(self, msg: dict, timestamp: float, conn: AsyncConnection):CODE
Unused Imports4 hits · 4 pts
SeverityFileLineSnippetContext
LOWexamples/demo_quasardb.py2CODE
LOWexamples/demo_quasardb.py3CODE
LOWcryptofeed/__init__.py7CODE
LOWcryptofeed/exchanges/__init__.py7CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWcryptofeed/exchanges/coinbase.py57 # TODO: implement candles and user channelsCOMMENT