-
-
Notifications
You must be signed in to change notification settings - Fork 23
/
config.php
2763 lines (1863 loc) · 129 KB
/
config.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?php
// DON'T LEAVE ANY WHITESPACE ABOVE THE OPENING PHP TAG!
/*
* Copyright 2014-2025 GPLv3, Open Crypto Tracker by Mike Kilday: [email protected] (leave this copyright / attribution intact in ALL forks / copies!)
*/
// Forbid direct INTERNET access to this file
if ( isset($_SERVER['REQUEST_METHOD']) && realpath(__FILE__) == realpath($_SERVER['SCRIPT_FILENAME']) ) {
header('HTTP/1.0 403 Forbidden', TRUE, 403);
exit;
}
///////////////////////////////////////////////////////////////////////////////////////////////
/////////////////// PRIMARY CONFIGURATIONS -START- ////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
// BELOW IS AN EXAMPLE SET OF CONFIGURED ASSETS AND DEFAULT SETTINGS. PLEASE NOTE THIS IS PROVIDED TO ASSIST YOU IN ADDING YOUR PARTICULAR FAVORITE ASSETS TO THE DEFAULT LIST,
// AND !---IN NO WAY---! INDICATES ENDORSEMENT OR RECOMMENDATION OF !---ANY---! OF THE *DEMO* ASSETS!
// SEE README.txt FOR HOW TO ADD / EDIT / DELETE COINS IN THIS CONFIG
// SEE /DOCUMENTATION-ETC/CONFIG-EXAMPLE.txt FOR A FULL EXAMPLE OF THE DEFAULT CONFIGURATION (ESPECIALLY IF YOU MESS UP config.php, lol)
// See TROUBLESHOOTING.txt for tips / troubleshooting FAQs.
// TYPOS LIKE MISSED COMMAS / MISSED QUOTES / ETC !!!!WILL BREAK THE APP!!!!, BE CAREFUL EDITING THIS CONFIG FILE!
////////////////////////////////////////
// !START! GENERAL CONFIGURATION
////////////////////////////////////////
// Your local time offset IN HOURS COMPARED TO UTC TIME (#CAN BE DECIMAL# TO SUPPORT 15 / 30 / 45 MINUTE TIME ZONES). Can be negative or positive.
// (Used for user experience 'pretty' timestamping in interface logic ONLY, WILL NOT change or screw up UTC log times etc if you change this)
$ct['conf']['gen']['local_time_offset'] = -5; // example: -5 or 5, -5.5 or 5.75
// Displays interface text in ANY google font found at: https://fonts.google.com
// Set as '' (blank) for default bootstrap / system / browser font
// 'font' OR 'font name' IN QUOTES for ANY google font, OR '' to skip
$ct['conf']['gen']['google_font'] = 'Exo 2'; // 'Exo 2' / 'Tektur' / etc any google font (default = 'Exo 2')
// DEFAULT font size PERCENTAGE (*WITHOUT* THE PERCENT SYMBOL!)
// LIMITS: MINIMUM OF 50 / MAXIMUM OF 200
$ct['conf']['gen']['default_font_size'] = 95; // Default = 95 (equal to 95%)
// Configure which interface theme you want as the default theme (also can be manually switched later, on the settings page in the interface)
$ct['conf']['gen']['default_theme'] = 'dark'; // 'dark' or 'light'
// Default marketcap data source: 'coingecko', or 'coinmarketcap'
// (COINMARKETCAP REQUIRES A #FREE# API KEY, SEE $ct['conf']['ext_apis']['coinmarketcap_api_key'] BELOW in the APIs section)
$ct['conf']['gen']['primary_marketcap_site'] = 'coingecko';
////////////////////////////////////////
// !END! GENERAL CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! COMMUNICATIONS CONFIGURATION
////////////////////////////////////////
// Allow or disallow sending out ANY communications (email / text / telegram / alexa / etc), so no comms are sent to you unless allowed here
// (PAUSES ALL COMMS IF SET TO 'off')
$ct['conf']['comms']['allow_comms'] = 'on'; // 'on' / 'off' (Default = 'on' [comms are sent out normally])
// Enable / disable upgrade checks / alerts (DEFAULT: ALL USER-ACTIVATED COMM CHANNELS)
// (Checks latest release version via github.com API endpoint value "tag_name"
// @ https://api.github.com/repos/taoteh1221/Open_Crypto_Tracker/releases/latest)
// Choosing 'all' will send to all properly-configured communication channels (and automatically skip any not properly setup)
$ct['conf']['comms']['upgrade_alert_channels'] = 'all'; // 'off' (disabled) / 'all' / 'ui' (web interface) / 'email' / 'text' / 'notifyme' / 'telegram'
////
// Wait X days between upgrade reminders
$ct['conf']['comms']['upgrade_alert_reminder'] = 7; // (only used if upgrade check is enabled above)
// Use SMTP authentication TO SEND EMAIL, if your IP has no reverse lookup that matches the email domain name (on your home network etc)
// #REQUIRED WHEN INSTALLED ON A HOME NETWORK#, OR ALL YOUR EMAIL ALERTS WILL BE BLACKHOLED / SEEN AS SPAM EMAIL BY EMAIL SERVERS!
// If SMTP credentials / configuration is filled in, BUT not setup properly, APP EMAILING WILL FAIL!
// !!USE A THROWAWAY ACCOUNT ONLY!! If this app server is hacked, HACKER WOULD THEN HAVE ACCESS YOUR EMAIL LOGIN FROM THIS FILE!!
// CAN BE BLANK (PHP's built-in mail function will be automatically used to send email instead)
$ct['conf']['comms']['smtp_login'] = ''; // This format MUST be used: 'username||password'
////
// SMTP Server examples (protocol auto-detected / used based off port number):
// 'example.com:25' (non-encrypted), 'example.com:465' (ssl-encrypted), 'example.com:587' (tls-encrypted)
$ct['conf']['comms']['smtp_server'] = ''; // CAN BE BLANK. This format MUST be used: 'domain_or_ip:port_number'
// IF SMTP EMAIL SENDING --NOT-- USED, FROM email should be a REAL address on the server domain, or risk having email sent to junk folder
// IF SMTP EMAIL SENDING --IS-- USED, FROM EMAIL MUST MATCH EMAIL ADDRESS associated with SMTP login (SMTP Email configuration is above this setting)
$ct['conf']['comms']['from_email'] = ''; // #SHOULD BE SET# to avoid email going to spam / junk
////
$ct['conf']['comms']['to_email'] = ''; // #MUST BE SET# for price alerts and other email features
// For alert texts to mobile phone numbers.
// Attempts to email the text if a SUPPORTED MOBILE TEXTING NETWORK name is set, AND no textbelt / textlocal config is setup.
// SMTP-authenticated email sending MAY GET THROUGH TEXTING SERVICE CONTENT FILTERS #BETTER# THAN USING PHP'S BUILT-IN EMAILING FUNCTION
// SEE FURTHER DOWN IN THIS CONFIG FILE, FOR A LIST OF SUPPORTED MOBILE TEXTING NETWORK PROVIDER NAMES
// IN THE EMAIL-TO-MOBILE-TEXT CONFIG SECTION (the "network name keys" in the $ct['conf']['mobile_network']['text_gateways'] variables array)
// CAN BE BLANK. Country code format MAY NEED TO BE USED (depending on your mobile network)
// skip_network_name SHOULD BE USED IF USING a texting (SMS) SERVICE (IN EXTERNAL APIS SECTION)
// 'phone_number||network_name_key' (examples: '12223334444||virgin_us' / '12223334444||skip_network_name')
$ct['conf']['comms']['to_mobile_text'] = '';
// Email logs every X days.
// 0 to disable. Email to / from !MUST BE SET IN COMMS CHANNELS SETUP!, MAY NOT SEND IN TIMELY FASHION WITHOUT A CRON JOB / SCHEDULED TASK
$ct['conf']['comms']['logs_email'] = 3; // (default = 3)
////////////////////////////////////////
// !END! COMMUNICATIONS CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! EXTERNAL API SETTINGS CONFIGURATION
////////////////////////////////////////
// SECONDS to wait for response from REMOTE API endpoints (exchange data, etc).
// Set too low you won't get ALL data (partial or zero bytes), set too high the interface can take a long time loading if an API server hangs up
// RECOMMENDED MINIMUM OF 60 FOR INSTALLS BEHIND #LOW BANDWIDTH# NETWORKS
// (which may need an even higher timeout above 60 if data still isn't FULLY received from all APIs)
// YOU WILL GET ALERTS IN THE ERROR LOGS IF YOU NEED TO ADJUST THIS
$ct['conf']['ext_apis']['remote_api_timeout'] = 30; // (default = 30)
// For notifyme / alexa notifications (sending Alexa devices notifications for free).
// CAN BE BLANK. Setup: https://www.thomptronics.com/about/notify-me
// (NOTE: THIS APP'S BUILT-IN QUEUE SYSTEM THROTTLES / SENDS OUT ONLY 5 ALERTS EVERY 5 MINUTES MAXIMUM FOR NOTIFYME ALERTS,
// TO STAY WITHIN NOTIFYME API MESSAGE LIMITS, SO YOU WILL ALWAYS #STILL GET ALL YOUR QUEUED NOTIFYME ALERTS#, JUST SLIGHTLY DELAYED)
$ct['conf']['ext_apis']['notifyme_access_code'] = '';
// Sending alerts to your own telegram bot chatroom.
// (USEFUL IF YOU HAVE ISSUES SETTING UP MOBILE TEXT ALERTS, INCLUDING EMOJI / UNICODE CHARACTER ENCODING)
// Setup: https://core.telegram.org/bots/features#creating-a-new-bot , OR JUST SEARCH / VISIT "BotFather" in the telegram app
// YOU MUST SETUP A TELEGRAM USERNAME #FIRST / BEFORE SETTING UP THE BOT#, IF YOU HAVEN'T ALREADY (IN THE TELEGRAM APP SETTINGS)
// SET UP YOUR BOT WITH "BotFather", AND SAVE YOUR BOT NAME / USERNAME / ACCESS TOKEN / BOT'S CHATROOM IN TELEGRAM APP
// VISIT THE BOT'S CHATROOM IN TELEGRAM APP, #SEND THE MESSAGE "/start" TO THIS CHATROOM# (THIS WILL CREATE USER CHAT DATA THIS APP NEEDS)
// THE USER CHAT DATA #IS REQUIRED# FOR THIS APP TO DETERMINE / SECURELY SAVE YOUR TELEGRAM USER'S CHAT ID WITH THE BOT YOU CREATED
// #DO NOT DELETE THE BOT CHATROOM IN THE TELEGRAM APP, OR YOU WILL STOP RECEIVING MESSAGES FROM THE BOT!#
$ct['conf']['ext_apis']['telegram_your_username'] = ''; // Your telegram username (REQUIRED, setup in telegram app settings)
////
$ct['conf']['ext_apis']['telegram_bot_username'] = ''; // Your bot's username
////
$ct['conf']['ext_apis']['telegram_bot_name'] = ''; // Your bot's human-readable name (example: 'My Alerts Bot')
////
$ct['conf']['ext_apis']['telegram_bot_token'] = ''; // Your bot's access token
// Do NOT use MORE THAN ONE texting (SMS) service below. Only fill in settings for one, or it will DISABLE THEM ALL.
// LEAVE ALL BLANK to use a mobile text gateway set ABOVE
// CAN BE BLANK. For asset price alert twilio notifications. Setup: https://twilio.com/
// YOU MUST SET $ct['conf']['comms']['to_mobile_text'] (IN THE COMMS SECTION) IN THE SERVICE PROVIDER AREA TO: skip_network_name
////
// Twilio acount phone number (Format: '12223334444' [no plus symbol])
$ct['conf']['ext_apis']['twilio_number'] = '';
////
// Twilio account SID
$ct['conf']['ext_apis']['twilio_sid'] = '';
////
// Twilio account auth token
$ct['conf']['ext_apis']['twilio_token'] = '';
// CAN BE BLANK. For asset price alert textbelt notifications. Setup: https://textbelt.com/
// YOU MUST SET $ct['conf']['comms']['to_mobile_text'] ABOVE IN THE SERVICE PROVIDER AREA TO: skip_network_name
// CONTACT [email protected] IF YOUR MESSAGES DON'T GO THROUGH, THEY ARE USUALLY *VERY* RESPONSIVE
$ct['conf']['ext_apis']['textbelt_api_key'] = '';
// CAN BE BLANK. For asset price alert textlocal notifications. Setup: https://www.textlocal.com/integrations/api/
// DOES NOT SEEM TO WORK OUTSIDE THE UNITED KINGDOM! (account dashboard says it was sent, but it's NEVER recieved)
// YOU MUST SET $ct['conf']['comms']['to_mobile_text'] ABOVE IN THE SERVICE PROVIDER AREA TO: skip_network_name
////
// Textlocal human-readable sender name (eg: 'J. Smith'), REQUIRED IF USING TEXTLOCAL TO SEND TEXTS!
// THIS SHOULD MATCH THE SENDER NAME YOU ALREADY SETUP IN YOUR TEXTLOCAL ACCOUNT
$ct['conf']['ext_apis']['textlocal_sender'] = '';
////
// API Key
$ct['conf']['ext_apis']['textlocal_api_key'] = '';
// API key for Google Fonts API (required unfortunately, but a FREE level is available):
// https://support.google.com/googleapi/answer/6158862?hl=en&ref_topic=7013279
// (USED TO GET A LIST OF ALL GOOGLE FONTS, TO CHOOSE FROM IN THE ADMIN INTERFACE)
$ct['conf']['ext_apis']['google_fonts_api_key'] = '';
// HOURS to cache google font list (for admin interface). Set high, we rarely need it updated
$ct['conf']['ext_apis']['google_fonts_cache_time'] = 24; // (default = 24)
// IF you are using on-chain data from the Solana blockchain, you can choose which RPC server you want to use.
// DEFAULT = 'https://api.mainnet-beta.solana.com'
$ct['conf']['ext_apis']['solana_rpc_server'] = 'https://api.mainnet-beta.solana.com';
// Maximum number of BATCHED coingecko marketcap data results to fetch, per API call (during multiple / paginated calls)
// (coingecko #ABSOLUTELY HATES# DATA CENTER IPS [DEDICATED / VPS SERVERS], BUT GOES EASY ON RESIDENTIAL IPS)
$ct['conf']['ext_apis']['coingecko_api_batched_maximum'] = 100; // (default = 100), ADJUST WITH CARE!!!
// API key for coinmarketcap.com Pro API (required unfortunately, but a FREE level is available): https://coinmarketcap.com/api
$ct['conf']['ext_apis']['coinmarketcap_api_key'] = '';
// API key for etherscan.io (required unfortunately, but a FREE level is available): https://etherscan.io/apis
$ct['conf']['ext_apis']['etherscan_api_key'] = '';
// API key for Alpha Vantage (global stock APIs as well as foreign exchange rates (forex) and cryptocurrency data feeds)
// (required unfortunately, but a FREE level is available [paid premium also available]): https://www.alphavantage.co/support/#api-key
$ct['conf']['ext_apis']['alphavantage_api_key'] = '';
////
// The below setting will automatically limit your API requests to NEVER go over your Alpha Vantage API requests limit
// (WE AUTO-ADJUST THE *DAILY* LIMIT, BASED ON YOUR PER-MINUTE SETTING BELOW [*ALL* PREMIUM PLANS ARE UNLIMITED *DAILY* REQUESTS])
// The requests-per-*MINUTE* limit on your Alpha Vantage API key (varies depending on your free / paid member level)
// Default = 5 [FOR FREE SERVICE], and 30,75,150,300,600,1200 [FOR PREMIUM PLANS]:
// https://www.alphavantage.co/premium/
$ct['conf']['ext_apis']['alphavantage_per_minute_limit'] = 5;
////
// The DEFAULT (FREE PLAN) requests-per-DAY limit on the Alpha Vantage API key
// WE AUTO-ADJUST TO UNLIMITED FOR PREMIUM PLANS:
// https://www.alphavantage.co/premium/
// (they have been known to change this amount occassionally for the free plan, so we have this setting)
$ct['conf']['ext_apis']['alphavantage_free_plan_daily_limit'] = 25;
// We limit how many search results Jupiter Aggregator is allowed to process PER CPU CORE (when adding coin markets), to avoid 504 "gateway timeout" errors
$ct['conf']['ext_apis']['jupiter_ag_search_results_max_per_cpu_core'] = 125; // 75 MINIMUM / 250 MAXIMUM / DEFAULT = 125
////////////////////////////////////////
// !END! EXTERNAL API SETTINGS CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! INTERNAL API SETTINGS CONFIGURATION
////////////////////////////////////////
// Local / internal REST API rate limit (maximum of once every X SECONDS, per ip address) for accepting remote requests
// Can be 0 to disable rate limiting (unlimited)
$ct['conf']['int_api']['int_api_rate_limit'] = 1; // (default = 1)
////
// Local / internal REST API market limit (maximum number of MARKETS requested per call)
$ct['conf']['int_api']['int_api_markets_limit'] = 50; // (default = 50)
////
// Local / internal REST API cache time (MINUTES that previous requests are cached for)
$ct['conf']['int_api']['int_api_cache_time'] = 1; // (default = 1)
////////////////////////////////////////
// !END! INTERNAL API SETTINGS CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! PROXIES CONFIGURATION
////////////////////////////////////////
// Allow or disallow using proxies for API data requests
$ct['conf']['proxy']['allow_proxies'] = 'off'; // 'on' / 'off' (Default = 'off')
// If using proxies and login is required
// Adding a user / pass here will automatically send login details for proxy connections
// CAN BE BLANK. IF using ip address authentication instead, MUST BE LEFT BLANK
$ct['conf']['proxy']['proxy_login'] = ''; // Use format: 'username||password'
// Alerts for failed proxy data connections (#ONLY USED# IF proxies are enabled further down in PROXY CONFIGURATION).
// Choosing 'all' will send to all properly-configured communication channels (and automatically skip any not properly setup)
$ct['conf']['proxy']['proxy_alert_channels'] = 'email'; // 'off' (disabled) / 'all' / 'email' / 'text' / 'notifyme' / 'telegram'
// Re-allow same proxy alert(s) after X HOURS (per ip/port pair, can be 0)
$ct['conf']['proxy']['proxy_alert_frequency_maximum'] = 1;
// Which runtime mode should allow proxy alerts? Options: 'cron', 'ui', 'all'
$ct['conf']['proxy']['proxy_alert_runtime'] = 'cron'; // (default = 'cron')
// Include or ignore proxy alerts if proxy checkup went OK? (after flagged, started working again when checked)
$ct['conf']['proxy']['proxy_alert_checkup_ok'] = 'include'; // 'include' / 'ignore'
// API servers that do NOT like the user-setup proxy servers
// (this app will SKIP USING PROXY SERVERS for these domains)
$ct['conf']['proxy']['anti_proxy_servers'] = array(
//'domain.com',
'binance.com',
);
// If using proxies, add the ip address / port number here for each one, like examples below (without the double slashes in front enables the code)
// CAN BE BLANK. Adding proxies here will automatically choose one randomly for each API request
// BEST PROXY SERVICE I'VE TESTED ("free forever" trial): https://proxyscrape.com/premium-free-trial
$ct['conf']['proxy']['proxy_list'] = array(
// 'ipaddress1:portnumber1',
// 'ipaddress2:portnumber2',
);
////////////////////////////////////////
// !END! PROXIES CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! SECURITY CONFIGURATION
////////////////////////////////////////
// Interface login protection (htaccess user/password required to view this portfolio app's web interface)
// Username MUST BE at least 4 characters, beginning with ONLY LOWERCASE letters (may contain numbers AFTER first letter), NO SPACES
// Password MUST BE EXACTLY 8 characters, AND contain one number, one UPPER AND LOWER CASE letter, and one symbol, NO SPACES
// (ENABLES / UPDATES automatically, when a valid username / password are filled in or updated here)
// (DISABLES automatically, when username / password are blank '' OR invalid)
// (!ONLY #UPDATES OR DISABLES# AUTOMATICALLY #AFTER# LOGGING IN ONCE WITH YOUR #OLD LOGIN# [or if a cron job / scheduled task runs with the new config]!)
// DOES #NOT# WORK ON #LINUX DESKTOP EDITION# (ONLY WORKS ON #SERVER EDITION AND WINDOWS DESKTOP EDITION#)
// #IF THIS SETTING GIVES YOU ISSUES# ON YOUR SYSTEM, BLANK IT OUT TO '', AND DELETE '.htaccess' IN THE MAIN DIRECTORY OF
// THIS APP (TO RESTORE PAGE ACCESS), AND PLEASE REPORT IT HERE: https://github.com/taoteh1221/Open_Crypto_Tracker/issues
$ct['conf']['sec']['interface_login'] = ''; // Leave blank to disable requiring an interface login. This format MUST be used: 'username||password'
// Password protection / encryption security for backup archives (REQUIRED for app config backup archives, #NOT# USED FOR CHART BACKUPS)
$ct['conf']['sec']['backup_archive_password'] = ''; // LEAVE BLANK TO DISABLE
// Enable / disable admin login alerts (DEFAULT: ALL USER-ACTIVATED COMM CHANNELS)
// Choosing 'all' will send to all properly-configured communication channels, (and automatically skip any not properly setup)
$ct['conf']['sec']['login_alert_channels'] = 'all'; // 'off' (disabled) / 'all' / 'email' / 'text' / 'notifyme' / 'telegram'
// HOURS until admin login cookie expires (requiring you to login again)
// The lower number the better for higher security, especially if the app server temporary session data
// doesn't auto-clear often (that also logs you off automatically, REGARDLESS of this setting's value)
$ct['conf']['sec']['admin_cookie_expires'] = 6; // (default = 6, MAX ALLOWED IS 6)
// 'on' verifies ALL SMTP server certificates for secure SMTP connections, 'off' verifies NOTHING
// Set to 'off', if the SMTP server has an invalid certificate setup (which stops email sending, but you still want to send email through that server)
$ct['conf']['sec']['smtp_strict_ssl'] = 'off'; // (DEFAULT IS 'off', TO ASSURE SMTP EMAIL SENDING STILL WORKS THROUGH MISCONFIGURED SMTP SERVERS)
// 'on' verifies ALL REMOTE API server certificates for secure API connections, 'off' verifies NOTHING
// Set to 'off', if some exchange's API servers have invalid certificates (which stops price data retrieval...but you still want to get price data from them)
$ct['conf']['sec']['remote_api_strict_ssl'] = 'off'; // (default = 'off')
// Set CORS 'Access-Control-Allow-Origin' (controls what web domains can load this app's admin / user pages, AJAX scripts, etc)
// Set to 'any' if this app server's domain can vary / redirect (eg: some INITIAL visits are 'www.mywebsite.com', AND some are 'mywebsite.com')
// Set to 'strict' if this app server's domain CANNOT VARY / REDIRECT (it's always 'mywebsite.com', EVERY VISIT #WITHOUT EXCEPTIONS#)
// 'strict' mode blocks all CSRF / XSS attacks on resources using this setting, ALTHOUGH NOT REALLY NEEDED AS SERVER EDITIONS USE STRICT / SECURE COOKIES
// #CHANGE WITH CAUTION#, AS 'strict' #CAN BREAK CHARTS / LOGS / NEWS FEEDS / ADMIN SECTIONS / ETC FROM LOADING# ON SOME SETUPS!
$ct['conf']['sec']['access_control_origin'] = 'any'; // 'any' / 'strict' (default = 'any')
// CONTRAST of CAPTCHA IMAGE text against background (on login pages)
// 0 for neutral contrast, positive for more contrast, negative for less contrast (MAXIMUM OF +-35)
$ct['conf']['sec']['captcha_text_contrast'] = -8; // example: -5 or 5 (default = -8)
////
// MAX OFF-ANGLE DEGREES (tilted backward / forward) of CAPTCHA IMAGE text characters (MAXIMUM OF 35)
$ct['conf']['sec']['captcha_text_angle'] = 35; // (default = 35)
////////////////////////////////////////
// !END! SECURITY CONFIGURATION
////////////////////////////////////////
////////////////////////////////////////
// !START! CURRENCY SUPPORT
////////////////////////////////////////
// Default BITCOIN market currencies (40+ currencies supported)
// (set for default Bitcoin market, and charts / price alert primary-currency-equivalent value determination [example: usd value of btc/ltc market, etc])
// aed / ars / aud / bdt / brl / cad / chf / clp / czk / dkk / eth / eur / gbp / gel
// hkd / huf / idr / inr / jpy / krw / kwd / lkr / mxn / myr / ngn / nis / nok / nzd / php
// pkr / pln / rmb / rub / sar / sek / sgd / sol / thb / try / twd / uah / usd / usdc / usdt / vnd / zar
// SEE THE $ct['conf']['assets']['BTC'] CONFIGURATION NEAR THE BOTTOM OF THIS CONFIG FILE, FOR THE PROPER (CORRESPONDING)
// MARKET PAIR VALUE NEEDED FOR YOUR CHOSEN 'BTC' EXCHANGE (set in $ct['conf']['currency']['bitcoin_primary_currency_exchange'] directly below)
$ct['conf']['currency']['bitcoin_primary_currency_pair'] = 'usd'; // PUT INSIDE SINGLE QUOTES ('selection')
// Default BITCOIN market exchanges (60+ bitcoin exchanges supported)
// (set for default Bitcoin market, and charts / price alert primary-currency-equivalent value determination [example: usd value of btc/ltc market, etc])
// binance / binance_us / bit2c / bitbns / bitfinex / bitflyer / bitmex / bitso / bitstamp
// btcmarkets / btcturk / buyucoin / cex / coinbase / coindcx / coingecko_aed / coingecko_ars
// coingecko_bdt / coingecko_clp / coingecko_czk / coingecko_dkk / coingecko_gel / coingecko_hkd
// coingecko_huf / coingecko_idr / coingecko_inr / coingecko_kwd / coingecko_lkr / coingecko_myr
// coingecko_ngn / coingecko_nis / coingecko_nok / coingecko_nzd / coingecko_php / coingecko_pkr
// coingecko_pln / coingecko_rmb / coingecko_rub / coingecko_sar / coingecko_sek / coingecko_sgd
// coingecko_thb / coingecko_twd / coingecko_uah / coingecko_usd / coingecko_vnd / coinspot
// gemini / hitbtc / huobi / jupiter_ag / korbit / kraken / kucoin / loopring_amm / luno
// okcoin / okex / unocoin / upbit / wazirx
// SEE THE $ct['conf']['assets']['BTC'] CONFIGURATION NEAR THE BOTTOM OF THIS CONFIG FILE, FOR THE PROPER (CORRESPONDING)
// 'BTC' EXCHANGE VALUE NEEDED FOR YOUR CHOSEN MARKET PAIR (set in $ct['conf']['currency']['bitcoin_primary_currency_pair'] directly above)
$ct['conf']['currency']['bitcoin_primary_currency_exchange'] = 'kraken'; // PUT INSIDE SINGLE QUOTES ('selection')
// Maximum decimal places for *CURRENCY* VALUES, of fiat currencies worth under 1.00 in unit value [usd/gbp/eur/jpy/brl/rub/etc]
// Sets the minimum-allowed CURRENCY value, adjust with care!
// For prettier / less-cluttered interface. IF YOU ADJUST $ct['conf']['currency']['bitcoin_primary_currency_pair'] ABOVE,
// YOU MAY NEED TO ADJUST THIS ACCORDINGLY FOR !PRETTY / FUNCTIONAL! CHARTS / ALERTS FOR YOUR CHOSEN PRIMARY CURRENCY
// ALSO KEEP THIS NUMBER AS LOW AS IS FEASIBLE, TO SAVE ON CHART DATA STORAGE SPACE / MAINTAIN QUICK CHART LOAD TIMES
$ct['conf']['currency']['currency_decimals_max'] = 8; // Whole numbers only (represents number of decimals maximum to use...default = 20)
// Maximum decimal places for *CRYPTO* VALUES ACROSS THE ENTIRE APP (*INCLUDING UNDER-THE-HOOD CALCULATIONS*)
// Sets the minimum-allowed CRYPTO value, adjust with care!
// LOW VALUE ALTERNATE COINS / CURRENCIES NEED THIS SET REALLY HIGH TO BE INCLUDED IN THE ASSETS LIST (TO NOT HAVE A ZERO VALUE),
// *ESPECIALLY* SINCE WE USE BITCOIN AS OUR BASE CURRENCY *CONVERTER* (DUE TO IT'S RELIABLY HIGH LIQUIDITY ACROSS THE PLANET)
// !!!IF YOU CHANGE THIS, THE 'WATCH ONLY' FLAG ON THE 'UPDATE' PAGE *WILL ALSO CHANGE* (CHANGING WHAT IS FLAGGED 'WATCH ONLY')!!!
$ct['conf']['currency']['crypto_decimals_max'] = 13; // Whole numbers only (represents number of decimals maximum to use...default = 20)
// PRICE PERCENTAGE to round off INTERFACE-DISPLAYED price IN DECIMALS (DYNAMIC / RELATIVE to price amount)
// (FINE-GRAINED CONTROL OVER INTERFACE PRICE ROUNDING #AMOUNT OF DECIMALS SHOWN#)
// (interface examples: one = 1000, tenth = 1000, hundredth = 1000.9, thousandth = 1000.09)
// (interface examples: one = 100, tenth = 100.9, hundredth = 100.09, thousandth = 100.009)
// (interface examples: one = 10.9, tenth = 10.09, hundredth = 10.009, thousandth = 10.0009)
// #FIAT# CURRENCY VALUES UNDER 100 #ARE ALWAYS FORCED TO 2 DECIMALS MINUMUM#
// #FIAT# CURRENCY VALUES UNDER 1 #ARE ALWAYS FORCED TO 'currency_decimals_max' DECIMALS MAXIMUM#
// THIS SETTING ONLY AFFECTS INTERFACE / COMMS PRICE DISPLAY ROUNDING, IT DOES #NOT# AFFECT BACKGROUND CALCULATIONS
$ct['conf']['currency']['price_rounding_percent'] = 'thousandth'; // (OF A PERCENT) 'one', 'tenth', 'hundredth', 'thousandth'
////
// FORCE a FIXED MINIMUM amount of decimals on interface price, CALCULATED OFF ABOVE price_rounding_percent SETTING
// (ALWAYS SAME AMOUNT OF DECIMALS, #EVEN IF IT INCLUDES TRAILING ZEROS#)
$ct['conf']['currency']['price_rounding_fixed_decimals'] = 'on'; // 'off', 'on'
// CoinGecko market pairings searched for, when adding new assets / coins (comma-separated)
$ct['conf']['currency']['coingecko_pairings_search'] = 'usd,gbp,eur,hkd,sgd,rub,eth,btc,try,jpy,cad,inr,chf,aud,twd,cny,ils';
////
// Jupiter aggregator market pairings searched for, when adding new assets / coins (comma-separated)
$ct['conf']['currency']['jupiter_ag_pairings_search'] = 'SOL,USDC,ETH,WBTC,USDT';
////
// Upbit market pairings searched for, when adding new assets / coins (comma-separated)
$ct['conf']['currency']['upbit_pairings_search'] = 'BTC,ETH,USDT,KRW';
////
// OTHER upcoming / semi-popular market pairings searched for, when adding new assets / coins (comma-separated)
// BE CAREFUL, AND ONLY ADD FIAT / STABLECOINS / ***MAJOR*** BLUECHIPS HERE, OR YOU RISK MESSING UP 'ADD MARKETS' SEARCH RESULTS!
$ct['conf']['currency']['additional_pairings_search'] = 'TBTC,BUSD,BNB,WBTC,WETH,FDUSD,CBBTC,USDD,WRX';
// Static values in USD for token presales, like during crowdsale / VC funding periods etc (before exchange listings)
// RAW NUMBERS ONLY (NO THOUSANDTHS FORMATTING)
$ct['conf']['currency']['token_presales_usd'] = array(
// 'TICKER = 1.23',
'eth = 0.3',
'sol = 0.22',
'mana = 0.025',
);
// ADD CORRESPONDING CURRENCY SYMBOLS for PRIMARY BTC CURRENCY MARKETS (to use with your preferred local currency in the app)
// EACH CURRENCY LISTED HERE !SHOULD! HAVE AN EXISTING BITCOIN ASSET MARKET (within 'pair') in
// Bitcoin's $ct['conf']['assets'] listing (further down in this config file) TO BE USED (otherwise it will be safely ignored)
// #CAN# BE A CRYPTO / HAVE A DUPLICATE IN $ct['conf']['currency']['crypto_pair'],
// !AS LONG AS THERE IS A PAIR CONFIGURED WITHIN THE BITCOIN ASSET SETUP!
$ct['conf']['currency']['conversion_currency_symbols'] = array(
//'lowercase_btc_mrkt_or_stablecoin_pair = CURRENCY_SYMBOL',
'aed = د.إ',
'ars = ARS$',
'aud = A$',
'bdt = ৳',
'brl = R$',
'cad = C$',
'chf = CHf ',
'clp = CLP$',
'rmb = ¥',
'czk = Kč ',
'dkk = Kr. ',
'eth = Ξ ',
'eur = €',
'gbp = £',
'gel = ლ',
'hkd = HK$',
'huf = Ft ',
'idr = Rp ',
'inr = ₹',
'jpy = J¥',
'krw = ₩',
'kwd = د.ك',
'lkr = රු, ரூ',
'mxn = Mex$',
'myr = RM ',
'ngn = ₦',
'nis = ₪',
'nok = kr ',
'nzd = NZ$',
'php = ₱',
'pkr = ₨ ',
'pln = zł ',
'rub = ₽',
'sar = ﷼',
'sek = kr ',
'sgd = S$',
'sol = ◎ ',
'thb = ฿',
'try = ₺',
'twd = NT$',
'uah = ₴',
'usd = $',
'usdc = Ⓢ ',
'usdt = ₮ ',
'vnd = ₫',
'zar = R ',
);
// Preferred BITCOIN market(s) for getting a certain currency's value
// (when other exchanges for this currency have poor api / volume / price discovery / etc)
// EACH CURRENCY LISTED HERE MUST EXIST AS A BITCOIN MARKET!
// #USE LIBERALLY#, AS YOU WANT THE BEST PRICE DISCOVERY FOR THIS CURRENCY'S VALUE
$ct['conf']['currency']['bitcoin_preferred_currency_markets'] = array( // START
//'lowercase_btc_mrkt_or_stablecoin_pair = PREFERRED_MRKT',
'aud = kraken', // WAY BETTER api than ALL alternatives
'chf = kraken', // WAY MORE reputable than ALL alternatives
'eur = kraken', // WAY BETTER api than ALL alternatives
'gbp = kraken', // WAY BETTER api than ALL alternatives
'jpy = kraken', // WAY MORE reputable than ALL alternatives
'inr = wazirx', // One of the biggest exchanges in India (should be good price discovery)
'rub = binance', // WAY MORE volume / price discovery than ALL alternatives
'usd = kraken', // WAY BETTER api than ALL alternatives
); // END
// Auto-activate support for ALTCOIN PAIRED MARKETS (like COIN/sol or COIN/eth, etc...markets where the base pair is an altcoin)
// EACH CRYPTO COIN LISTED HERE !MUST HAVE! AN EXISTING 'btc' MARKET (within 'pair') in it's
// $ct['conf']['assets'] listing (further down in this config file) TO PROPERLY AUTO-ACTIVATE
// THIS ALSO ADDS THESE ASSETS AS OPTIONS IN THE "Show Crypto Value Of ENTIRE Portfolio In" SETTING, ON THE SETTINGS PAGE,
// AND IN THE "Show Secondary Trade / Holdings Value" SETTING, ON THE SETTINGS PAGE TOO
// !!!!!TRY TO #NOT# ADD STABLECOINS HERE!!!!!, FIRST TRY $ct['conf']['currency']['conversion_currency_symbols'] INSTEAD (TO AUTO-CLIP UN-NEEDED DECIMAL POINTS)
$ct['conf']['currency']['crypto_pair'] = array( // START
// !!!!!BTC IS ALREADY ADDED *AUTOMATICALLY*, NO NEED TO ADD IT HERE!!!!!
////
//'lowercase_altcoin_ticker = UNICODE_SYMBOL', // Add whitespace after the symbol, if you prefer that
////
// Bluechip native tokens...
'eth = Ξ ',
'sol = ◎ ',
// Bluechip ERC-20 tokens on Ethereum / SPL tokens on Solana, etc...
'jup = Ɉ ',
); // END
// Preferred ALTCOIN PAIRED MARKETS market(s) for getting a certain crypto's value
// EACH ALTCOIN LISTED HERE MUST EXIST IN $ct['conf']['currency']['crypto_pair'] ABOVE,
// AND !MUST HAVE! AN EXISTING 'btc' MARKET (within 'pair') in it's
// $ct['conf']['assets'] listing (further down in this config file),
// AND #THE EXCHANGE NAME MUST BE IN THAT 'btc' LIST#
// #USE LIBERALLY#, AS YOU WANT THE BEST PRICE DISCOVERY FOR THIS CRYPTO'S VALUE
$ct['conf']['currency']['crypto_pair_preferred_markets'] = array( // START
//'lowercase_btc_mrkt_or_stablecoin_pair = PREFERRED_MRKT',
'eth = binance', // WAY MORE volume , WAY BETTER price discovery than ALL alternatives
'sol = binance', // WAY MORE volume , WAY BETTER price discovery than ALL alternatives
'jup = coingecko_btc', // coingecko global average price IN BTC
); // END
////////////////////////////////////////
// !END! CURRENCY SUPPORT
////////////////////////////////////////
////////////////////////////////////////
// !START! CHART AND PRICE ALERT MARKETS
////////////////////////////////////////
// CHARTS / PRICE ALERTS SETUP REQUIRES A CRON JOB OR SCHEDULED TASK RUNNING ON YOUR APP SERVER (see README.txt for setup information)
// Enable / disable price alerts (DEFAULT: ALL USER-ACTIVATED COMM CHANNELS)
// Choosing 'all' will send to all properly-configured communication channels, (and automatically skip any not properly setup)
$ct['conf']['charts_alerts']['price_alert_channels'] = 'all'; // 'off' (disabled) / 'all' / 'email' / 'text' / 'notifyme' / 'telegram'
// Price percent change to send alerts for (WITHOUT percent sign: 15.75 = 15.75%). Sends alerts when percent change reached (up or down)
$ct['conf']['charts_alerts']['price_alert_threshold'] = 8.75; // CAN BE 0 TO DISABLE PRICE ALERTS
// Re-allow SAME asset price alert(s) messages after X HOURS (per alert config)
// Set higher if sent to email junk folder / other comms APIs are blocking or throttling your alert messeges
$ct['conf']['charts_alerts']['price_alert_frequency_maximum'] = 1; // Can be 0, to have no limits
// Block an asset price alert if price retrieved, BUT failed retrieving pair volume (not even a zero was retrieved, nothing)
// Good for BLOCKING QUESTIONABLE EXCHANGES from bugging you with price alerts, especially when used in combination with the minimum volume filter
// (EXCHANGES WITH NO TRADE VOLUME API ARE EXCLUDED [VOLUME IS SET TO ZERO BEFORE THIS FILTER RUNS])
$ct['conf']['charts_alerts']['price_alert_block_volume_error'] = 'off'; // 'on' / 'off'
// Minimum 24 hour trade volume filter. Only allows sending price alerts if minimum 24 hour trade volume reached
// CAN BE 0 TO DISABLE MINIMUM VOLUME FILTERING, NO DECIMALS OR SEPARATORS, NUMBERS ONLY, WITHOUT the [primary currency] prefix symbol
// THIS FILTER WILL AUTO-DISABLE IF THERE IS ANY ERROR RETRIEVING VOLUME DATA ON A CERTAIN MARKET (NOT EVEN A ZERO IS RECEIVED ON VOLUME API)
// !!WARNING!!: IF AN EXCHANGE DOES #NOT# PROVIDE TRADE VOLUME API DATA FOR MARKETS, SETTING THIS ABOVE 0 WILL
// #DISABLE ANY CONFIGURED PRICE ALERTS# FOR MARKETS ON THAT EXCHANGE, SO USE WITH CARE!
$ct['conf']['charts_alerts']['price_alert_minimum_volume'] = 0; // (default = 0)
// Fixed time interval RESET of CACHED comparison asset prices every X DAYS (since last price reset / alert), compared with the current latest spot prices
// Helpful if you only want price alerts for a certain time window. Resets also send alerts that reset occurred, with summary of price changes since last reset
// Can be 0 to DISABLE fixed time interval resetting (IN WHICH CASE RESETS WILL ONLY OCCUR DYNAMICALLY when the next price alert is triggered / sent out)
$ct['conf']['charts_alerts']['price_alert_fixed_reset'] = 0; // (default = 0)
// Whale alert (adds "WHALE ALERT" to beginning of alexa / email / telegram alert text, and spouting whale emoji to email / text / telegram)
// Format: 'max_days_to_24hr_avg_over||min_price_percent_change_24hr_avg||min_vol_percent_increase_24hr_avg||min_vol_currency_increase_24hr_avg'
// ("min_price_percent_change_24hr_avg" should be the same value or higher as $ct['conf']['charts_alerts']['price_alert_threshold'] to work properly)
// Leave BLANK '' TO DISABLE. DECIMALS ARE SUPPORTED, USE NUMBERS ONLY (NO CURRENCY SYMBOLS / COMMAS, ETC)
$ct['conf']['charts_alerts']['whale_alert_thresholds'] = '1.25||9.75||12.75||25000'; // (default: '1.25||9.75||12.75||25000')
// ENABLING CHARTS REQUIRES A CRON JOB / TASK SCHEDULER SETUP (see README.txt for setup information)
// Enables a charts tab / page, and caches real-time updated spot price / 24 hour trade volume chart data on your device's storage drive
// Disabling will disable EVERYTHING related to the price charts (price charts tab / page, and price chart data caching)
$ct['conf']['charts_alerts']['enable_price_charts'] = 'on'; // 'on' / 'off'
// Number of decimals for price chart CRYPTO 24 hour volumes (NOT USED FOR FIAT VOLUMES, 4 decimals example: 24 hr vol = 91.3874 BTC)
// KEEP THIS NUMBER AS LOW AS IS FEASIBLE, TO SAVE ON CHART DATA STORAGE SPACE / MAINTAIN QUICK CHART LOAD TIMES
$ct['conf']['charts_alerts']['chart_crypto_volume_decimals'] = 4; // (default = 4)
// Every X days backup chart data. 0 disables backups. Email to / from !MUST BE SET! (a download link is emailed to you of the chart data archive)
$ct['conf']['charts_alerts']['charts_backup_frequency'] = 1;
// PRICE CHARTS colors (https://www.w3schools.com/colors/colors_picker.asp)
////
// Charts border color
$ct['conf']['charts_alerts']['charts_border'] = '#808080'; // (default: '#808080')
////
// Charts background color
$ct['conf']['charts_alerts']['charts_background'] = '#515050'; // (default: '#515050')
////
// Charts line color
$ct['conf']['charts_alerts']['charts_line'] = '#444444'; // (default: '#444444')
////
// Charts text color
$ct['conf']['charts_alerts']['charts_text'] = '#e8e8e8'; // (default: '#e8e8e8')
////
// Charts link color
$ct['conf']['charts_alerts']['charts_link'] = '#939393'; // (default: '#939393')
////
// Charts price (base) gradient color
$ct['conf']['charts_alerts']['charts_base_gradient'] = '#000000'; // (default: '#000000')
////
// Charts tooltip background color
$ct['conf']['charts_alerts']['charts_tooltip_background'] = '#bbbbbb'; // (default: '#bbbbbb')
////
// Charts tooltip text color
$ct['conf']['charts_alerts']['charts_tooltip_text'] = '#222222'; // (default: '#222222')
// Default settings for Asset Performance chart height / menu size (in the 'View More Stats' modal window, linked at bottom of Portfolio page)
// CHART HEIGHT MIN/MAX = 400/900 (increments of 100), MENU SIZE MIN/MAX (increments of 1) = 7/16
$ct['conf']['charts_alerts']['asset_performance_chart_defaults'] = '800||10'; // 'chart_height||menu_size' (default = '800||10')
// Default settings for Marketcap Comparison chart height / menu size (in the 'View More Stats' modal window, linked at bottom of Portfolio page)
// CHART HEIGHT MIN/MAX = 400/900 (increments of 100), MENU SIZE MIN/MAX (increments of 1) = 7/16
$ct['conf']['charts_alerts']['asset_marketcap_chart_defaults'] = '600||10'; // 'chart_height||menu_size' (default = '600||10')
// Highest allowed sensor value to scale vertical axis for, in the FIRST system information chart (out of two)
// (higher sensor data is moved into the second chart, to keep ranges easily readable between both charts...only used IF CRON JOB IS SETUP)
$ct['conf']['charts_alerts']['system_stats_first_chart_maximum_scale'] = 3.25; // (default = 3.25)
////
// Highest allowed sensor value to scale vertical axis for, in the SECOND system information chart (out of two)
// (to prevent anomaly results from scaling vertical axis TOO HIGH to read LESSER-VALUE sensor data...only used IF CRON JOB IS SETUP)
$ct['conf']['charts_alerts']['system_stats_second_chart_maximum_scale'] = 325; // (default = 325)
// (Light) time period charts (load just as quickly for any time period, 7 day / 30 day / 365 day / etc)
// Structure of light charts #IN DAYS# (X days time period charts)
// Interface will auto-detect and display days IN THE INTERFACE as: 365 = 1Y, 180 = 6M, 30 = 1M, 7 = 1W, etc
// (JUST MAKE SURE YOU USE 365 / 30 / 7 *MULTIPLIED BY THE NUMBER OF* YEARS / MONTHS / WEEKS FOR PROPER AUTO-DETECTION/CONVERSION)
// (LOWER TIME PERIODS [UNDER 180 DAYS] #SHOULD BE KEPT SOMEWHAT MINIMAL#, TO REDUCE RUNTIME LOAD / DISK WRITES DURING CRON JOBS)
$ct['conf']['charts_alerts']['light_chart_day_intervals'] = '14,30,90,180,365,730,1460';
// (default = '14,30,90,180,365,730,1460')
////
// The maximum number of data points allowed in each light chart
// (saves on disk storage / speeds up chart loading times SIGNIFICANTLY #WITH A NUMBER OF 1000 OR LESS#)
$ct['conf']['charts_alerts']['light_chart_data_points_maximum'] = 875; // (default = 875), ADJUST WITH CARE!!!
////
// The space between light chart links inside the chart interface
$ct['conf']['charts_alerts']['light_chart_link_spacing'] = 50; // (default = 50), ADJUST WITH CARE!!!
////
// The GUESSED offset (width) for light chart link fonts inside the chart interface (NOT MONOSPACE, SO WE GUESS AN AVERAGE)
$ct['conf']['charts_alerts']['light_chart_link_font_offset'] = 4; // (default = 4), ADJUST WITH CARE!!!
////
// Maximum number of light chart NEW BUILDS allowed during background tasks, PER CPU CORE (only reset / new, NOT the 'all' chart REbuilds)
// (THIS IS MULTIPLIED BY THE NUMBER OF CPU CORES [if detected], avoids overloading low power devices / still builds fast on multi-core)
$ct['conf']['charts_alerts']['light_chart_first_build_hard_limit'] = 15; // (default = 15), ADJUST WITH CARE!!!
////
// Randomly rebuild the 'ALL' light chart between the minimum and maximum HOURS set here (so they don't refresh all at once, for faster runtimes)
// LARGER AVERAGE TIME SPREAD IS EASIER ON LOW POWER DEVICES (TO ONLY UPDATE A FEW AT A TIME), FOR A MORE CONSISTENT CRON JOB RUNTIME SPEED!!
$ct['conf']['charts_alerts']['light_chart_all_rebuild_min_max'] = '4,8'; // 'min,max' (default = '4,8'), ADJUST WITH CARE!!!
// Markets you want charts or asset price change alerts for (see the COMMUNICATIONS section for price alerts threshold settings)
// NOTE: This list must only contain assets / exchanges / trading pairs included in the primary portfolio assets list configuration further down in this config file
// TO ADD MULTIPLE CHARTS / ALERTS FOR SAME ASSET (FOR DIFFERENT EXCHANGES / TRADE PAIRS), FORMAT LIKE SO: symbol, symbol-1, symbol-2, symbol-3, etc.
// TO DISABLE A CHART / ALERT = none, TO ENABLE CHART AND ALERT = both, TO ENABLE CHART ONLY = chart, TO ENABLE ALERT ONLY = alert
$ct['conf']['charts_alerts']['tracked_markets'] = array(
// TICKER
// 'ticker||exchange||trade_pair||alert',
// 'ticker-2||exchange2||trade_pair2||chart',
// 'ticker-3||exchange3||trade_pair3||both',
// 'ticker-4||exchange4||trade_pair4||none',
// BTC
'btc-2||binance||usdt||chart',
'btc-3||bitstamp||usd||none',
'btc-4||kraken||usd||chart',
'btc-5||gemini||usd||none',
'btc-6||bitfinex||usd||none',
'btc-8||kraken||eur||chart',
'btc-9||coinbase||eur||none',
'btc-10||coinbase||gbp||none',
'btc-11||kraken||cad||none',
'btc-12||btcmarkets||aud||none',
'btc-13||bitbns||inr||none',
'btc-16||bitflyer||jpy||chart',
'btc-17||coingecko_hkd||hkd||chart',
'btc-19||upbit||krw||none',
'btc-20||bitso||mxn||none',
'btc-24||btcturk||try||none',
'btc-25||coingecko_twd||twd||none',
'btc-26||luno||zar||none',
'btc-28||bitmex||usd||both',
// TBTC
'tbtc||kraken||usd||both',
// FBTCSTOCK (Fidelity Bitcoin ETF)
'fbtcstock||alphavantage_stock||usd||both',
// ETH
'eth-3||kraken||btc||chart',
'eth-4||binance||usdt||chart',
'eth-5||binance_us||btc||none',
'eth-7||kraken||usd||none',
'eth-8||bitstamp||usd||none',
'eth-9||gemini||usd||none',
'eth-10||coinbase||gbp||none',
'eth-13||bitbns||inr||none',
'eth-14||bitmex||usd||both',
'eth-15||coingecko_hkd||hkd||chart',
// SOL
'sol||binance||btc||none',
'sol-2||kraken||usd||both',
'sol-3||binance||btc||chart',
'sol-4||binance||eth||chart',
// USDC
'usdc||kraken||usd||both',
// JUP
'jup||coingecko_terminal||usd||chart',
'jup-3||binance||usdt||chart',
'jup-4||coingecko_btc||btc||both',
// MANA
'mana-2||binance||btc||both',
'mana-3||kucoin||btc||none',
'mana-4||bitfinex||usd||none',
'mana-5||binance||eth||none',
// RENDER
'render||coingecko_btc||btc||chart',
'render-2||gateio||usdt||none',
// POLIS
'polis||coingecko_btc||btc||chart',
'polis-2||kraken||usd||both',
// NEON
'neon-2||coingecko_terminal||usd||both',
// ZEUS
'zeus||coingecko_terminal||usd||both',
// BONK
'bonk||huobi||usdt||chart',
'bonk-2||gateio||usdt||both',
'bonk-3||coingecko_btc||btc||chart',
'bonk-4||coingecko_eth||eth||chart',
// POPCAT
'popcat||coingecko_usd||usd||chart',
// SHOPSTOCK (Shopify stock)
'shopstock||alphavantage_stock||cad||both',
// DTGSTOCK (Daimler Truck Holding stock)
'dtgstock||alphavantage_stock||eur||both',
// COINSTOCK (Coinbase stock)
'coinstock||alphavantage_stock||usd||both',
// AMZNSTOCK (Amazon stock)
'amznstock||alphavantage_stock||usd||both',
// AMDSTOCK (Advanced Micro Devices stock)
'amdstock||alphavantage_stock||usd||both',
// NFLXSTOCK (Netflix stock)
'nflxstock||alphavantage_stock||usd||both',
// MCDSTOCK (McDonalds stock)
'mcdstock||alphavantage_stock||usd||both',
);
// END $ct['conf']['charts_alerts']['tracked_markets']
////////////////////////////////////////
// !END! CHART AND PRICE ALERT MARKETS
////////////////////////////////////////
////////////////////////////////////////
// !START! PLUGINS CONFIG
////////////////////////////////////////
// Activate any built-in included plugins / custom plugins you've created (that run from the /plugins/ directory)
// SEE /DOCUMENTATION-ETC/PLUGINS-README.txt for creating your own custom plugins
// ADD ANY NEW PLUGIN HERE BY USING THE FOLDER NAME THE NEW PLUGIN IS LOCATED IN
// !!NEVER ADD A PLUGIN SOMEBODY ELSE WROTE, UNLESS YOU OR SOMEONE YOU TRUST
// HAVE REVIEWED THE CODE AND ARE ABSOLUTELY SURE IT IS NOT MALICIOUS!!
// PLUGINS *MAY REQUIRE* A CRON JOB / SCHEDULED TASK RUNNING ON YOUR APP SERVER (if built for cron jobs...see README.txt for setup information)
// PLUGIN CONFIGS are in the /plugins/ directory associated with that plugin
// CHANGE 'off' to 'on' FOR THE PLUGIN YOU WANT ACTIVATED
$ct['conf']['plugins']['plugin_status'] = array( // START
// (disabled example...your LOWERCASE plugin folder name in the folder: /plugins/)
//'plugin-folder-name' => 'on',
// Track how much you pay in TOTAL interest MONTHLY on ALL your debt (credit cards, auto / personal / mortgage loan, etc)
'debt-interest-tracker' => 'on',
// Recurring Reminder plugin (alert yourself every X days to do something)
'recurring-reminder' => 'off',
// Price target alert plugin (alert yourself when an asset's price target is reached)
'price-target-alert' => 'off',
// Alerts for BTC / ETH / [SOL|SPL Token] address balance changes (when coins are sent / received)
'address-balance-tracker' => 'off',
// WORK-IN-PROGRESS, NOT FUNCTIONAL YET!
'crypto-info-bot' => 'off',
// WORK-IN-PROGRESS, NOT FUNCTIONAL YET!
'on-chain-stats' => 'off',
); // END
////////////////////////////////////////
// !END! PLUGINS CONFIG
////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// !START! POWER USER CONFIGURATION (ADJUST WITH CARE, OR YOU CAN BREAK THE APP!)
/////////////////////////////////////////////////////////////////////////////
// Enable / disable PHP error reporting (to error logs on the app server)
// https://www.php.net/manual/en/function.error-reporting.php
$ct['conf']['power']['php_error_reporting'] = 0; // 0 == off / -1 == on
// $ct['conf']['power']['debug_mode'] enabled runs unit tests during ui runtimes (during webpage load),
// errors detected are error-logged and printed as alerts in header alert bell area
// It also logs ui / cron runtime telemetry to /cache/logs/app_log.log, AND /cache/logs/debug/
////////////////////////////////////////////////////////////////////////////////////////////
////
// ### GENERAL ###
////
// 'off' (disables),
////
// ### TELEMETRY ###
////
// 'all_telemetry' (ALL in-app telemetry),
// 'conf_telemetry' (ct['conf'] caching),
// 'light_chart_telemetry' (light chart caching),
// 'memory_usage_telemetry' (PHP system memory usage),
// 'ext_data_live_telemetry' (external API requests from server),
// 'ext_data_cache_telemetry' (external API requests from cache),
// 'smtp_telemetry' (smtp server responses to: /cache/logs/smtp_debug.log),
// 'api_comms_telemetry' (API comms responses to: /cache/logs/debug/external_data/last-response-[service].log),
// 'cron_telemetry' (cron runtime telemetry to: /cache/logs/debug/cron/cron_runtime_telemetry.log),
////
// ### VIEW INPUT / OUTPUT (ON INTERFACE PAGES) ###
////
// 'setup_wizards_io' (AJAX-based 'wizard' steps),
////
// ### CHECKS ###
////
// 'markets' (asset market checks),
// 'texts' (mobile texting gateway checks),
// 'alerts_charts' (price chart / price alert checks),
// 'api_throttling' (API throttling checks),
////
// ### SUMMARIES ###
////
// 'stats' (hardware / software / runtime summary),
// 'markets_conf' (outputs a markets configuration summary),
////
////////////////////////////////////////////////////////////////////////////////////////////
// UNIT TESTS ('CHECKS' SECTION) WILL ONLY RUN DURING WEB PAGE INTERFACE RUNTIMES
// PHP MAX EXECUTION TIME *SHOULD* AUTO-SET TO 1320 SECONDS (22 MINUTES) IN *ANY* DEBUG MODE (EXCEPT 'off')
// IF YOU GET AN ERROR 500, TRY RUNNING ONE DEBUG MODE AT A TIME, TO AVOID GOING OVER THE PHP EXECUTION TIME LIMIT
// DON'T LEAVE DEBUGGING ENABLED AFTER USING IT, THE /cache/logs/app_log.log AND /cache/logs/debug/
// LOG FILES !CAN GROW VERY QUICKLY IN SIZE! EVEN AFTER JUST A FEW RUNTIMES!
$ct['conf']['power']['debug_mode'] = 'off';
// Level of detail / verbosity in log files. 'normal' logs minimal details (basic information),
// 'verbose' logs maximum details (additional information IF AVAILABLE, for heavy debugging / tracing / etc)
// IF DEBUGGING IS ENABLED ABOVE, LOGS ARE AUTOMATICALLY VERBOSE #WITHOUT THE NEED TO ADJUST THIS SETTING#
$ct['conf']['power']['log_verbosity'] = 'normal'; // 'normal' / 'verbose'
// If you want to override the default CURL user agent string (sent with API requests, etc)
// Adding a string here automatically enables that as the custom curl user agent
// LEAVING BLANK '' USES THE DEFAULT CURL USER AGENT LOGIC BUILT-IN TO THIS APP (WHICH INCLUDES ONLY BASIC SYSTEM CONFIGURATION STATS)
$ct['conf']['power']['override_curl_user_agent'] = '';
// MINUTES to wait until running consecutive desktop edition emulated cron jobs