NOTE: As of v1.100.0-bae4d50, it is no longer necessary to manually restart the explorer after updating, as long as you are using the built-in update script `npm run update-explorer`. All other manual updates such as `git pull` will still require a restart to the explorer after updating. 1.102.0 [June 14, 2023] -Added better support for NODE_ENV -Added a new setting to redirect http to https -Removed the "Full Setup Guide" section from the README -Updated the README with new recommended versions for Node.js and MongoDB -Updated the README with more text to make it more clear that EVM blockchains are not supported -Updated the README with an extra step for exiting the mongo shell in the "Database Setup" section -Updated the README by removing the "Quick Install Instructions" section title and now all install instructions are under the main Installation section -Updated the README with new steps to the "Pre-Install" section for installing node.js and mongodb -Updated the README with a new entry to the "Known Issues" section to explain the "Callback was already called" error msg -Updated the README with a new entry to the "Known Issues" section that better explains the padLevels warning msgs when using the forever module -Updated the README with alternate instructions to the "Manually Link TLS/SSL Certificates to the Explorer" section which better explain which method should be used depending on whether the explorer is running on port 80 for http traffic or not -Added an rpc cmd queue -Fixed an issue that caused 2 or more masternodes created in the same transaction to be treated as the same entry -The "Powered By" footer text is now configurable -Better handling of null market data -The mongoose and mongodb dependencies have been updated to the most recent versions in package.json which required fixing many breaking changes to a number of files in the explorer -Fixed a few Deprecation Warning msgs for the Flatly, Litera and Solar themes -Added better quote support for the coin name and symbol settings -Added support for handling orphaned blocks along with a new optional page to display them -The coinbase address now updates sent totals from POS rewards and other transactions that have vout but no vin addresses -The block and transaction pages now display a warning when viewing an orphaned block or tx -Fixed the incorrect confirmations value in the gettx api -Fixed the "DeprecationWarning: Mongoose: the `strictQuery` option will be switched back to `false` by default in Mongoose 7" warning msg from newer mongoose versions -Added new settings to improve the network chart precision for small decimal values like 0.00028363 which were previously being rounded to 0 -Removed the jstransformer-markdown-it dependency -Added new settings to allow hiding the port number on the network page tables -Fixed the footer width calculations -Improvements to the core layout including new scrollbars on the mobile menu items when there are too many items to fit on the screen at once -Added side menu support -Fixed the peer sync for addresses without country data -Fixed a divide by zero error when calculating market change -Added support for the Unnamed exchange -Added support for the Txbit exchange -Better handling of stop/kill sync processes (The SIGINT and SIGTERM signals are now being caught and handled in the sync.js file so that most options for syncing blocks, markets, peers, masternodes, etc. are now being gracefully shut down instead of killed in the middle of the process. This should help prevent data anomalies when you need to stop or kill a sync process) -Added support for vin/vout hashes inside an array 1.101.0 [July 09, 2022] -Locale string tx_hash was changed from "Hash" to "Tx Hash" to be clearer about which Hash it refers to -TXid was renamed to "Tx Hash" throughout the site -Removed the coin name from the tx hash label on the transaction page -Removed the coin name from the block hash label on the block page and changed the text "block" to "Block Hash" -The header_logo.png was renamed to header-logo.png -Added 2 optional arguments to the update script to update the explorer code only (`npm run update-explorer "explorer-only"`) and another option to update outdated dependencies only (`npm run update-explorer "dependencies-only"`) -Added a custom.js file that can be used to add custom javascript code without affecting the ability to do a `git pull` or `npm run update-explorer` update -Added "copy to clipboard" buttons to the network addnode tables -Network addnode table data no longer wraps onto multiple lines when the data cannot fit on the screen -Fixed a bug which caused the error page to not show a proper page title -Fixed a bug which caused the locking mechanism to fail on non-windows computers when the explorer is installed to a directory that has a space character somewhere in the absolute path -The update_explorer.js script has been improved with better spacing and the ability to restart the explorer automatically to ensure new changes take effect immidiately (works with npm start, pm2 and forever) -The code to compile scss to css has been moved from the prestart script into its own compile_css.js script which is now called from the update-explorer.js script to apply css changes after update -The cluster code now handles a custom restart msg which is used to restart the explorer from the update explorer process -Pm2 and Forever are now referenced by the name 'explorer' instead of ./bin/instance or ./bin/cluster -Added reload/restart scripts to the package.json for pm2 and forever -Pm2 and forever now write a pid file to the tmp directory when started. NOTE: Forever is now started from the prestart script due to a bug in forever that prevents the pid from being written to a different directory without the absolute path -Fixed a bug which caused the prestart script to be run twice when starting the explorer with `npm start` -The cluster code now accepts a numeric argument to force a specific number of instances to be loaded -The `npm run start-instance` cmd now loads using the cluster code with a single instance -The is_locked function now accepts an optional 'silent' argument to prevent displaying msgs while checking for pid/lock files -Added a port_filter setting to the 3 network_page tables which allows showing only results from peers on the selected port -Added a hide_protocols setting to the 3 network_page tables which allows hiding results from peers on the selected protocols -Added a Port column to the data table on the Network page Connections tab -The data table on the Network page Connections tab is now sortable -The peer sync now refreshes data for peers that existed since last sync -Adding and updating peers now displays the port # in the log output -The /ext/getnetworkpeers api is now sorted by ip4/ip6, address and port which also means all data on the Network page is sorted this way by default as well -Improved loading speed of the network page by combining 3 separate database calls into 1 -Added support for the Dex-Trade exchange -Added support for the FreiExchange/FreiXLite exchange (this exchange has 2 separate sites using the same api, so new functionality was added to the explorer to handle alt markets like this with an alt market name, alt logo, market url and an "isAlt" function to determine if the alt name/logo should be used) -Support was added for the getblockchaininfo rpc cmd which now allows the coin supply to be populated via this function -The network difficulty chart now supports 2 datasets: POW and POS -Fixed a bug with the network difficulty chart where it would fail to populate if the shared_pages.difficulty setting was 'Hybrid' -NetworkHistory.difficulty field was renamed to difficulty_pow and a new difficulty_pos field was added -The shared_pages.page_header.network_charts.difficulty_chart.line_color setting was renamed to pow_line_color -The shared_pages.page_header.network_charts.difficulty_chart.fill_color setting was renamed to pow_fill_color -The favicon functionality was updated so that instead of using a single file for the favicon, there are now 4 size options for a more modern favicon experience -Fixed a bug which did not properly handle certain special characters in the mongo username/password such as % or @ for example -Updated the README with details of the "bind EACCES" error msg that can appear when you try to run the explorer on a port number lower than 1024 -Updated the README with instructions for using the newer node.js production flag (--only=prod) instead of the old flag (--production) -Added pm2 and forever to the dev dependencies list to help prevent package.json from being automatically updated/changed in production which could make `git pull` fail due to the changes -Both dependencies and dev dependencies sections have been sorted alphabetically to help prevent auto package.json changes -The custom user-agent strings for http requests have all been removed -Fixed an issue with the crex24 market chart that could cause it to be overpopulated with data and therefore unreadable/unusable 1.100.0 [May 29, 2022] -Added a custom.scss file that can be used to add custom css changes without affecting the ability to do a git pull update -Added new update script to A) grab the latest code form github, B) update all dependencies, and C) run the database initialize function to ensure new changes take effect immidiately -freegeoip.app now requires an api key so the peer sync has been updated to use reallyfreegeoip.org instead -Added extra error checking to the peer sync so that it will error out when the geolocation service does not return a proper object -Added locks to all sync processes (blocks, markets, peers, masternodes) as well as "create backup", "restore backup" and "delete database" functions. This helps prevent problems with syncing data while a backup is in progress for example -The code to initialize certain database collections on startup was moved into database.js and is now called from restore_backup.js and delete_database.js. This effectively allows the database to be deleted or restored to a completely different backup while the explorer is still running -Lock functions (create_lock, remove_lock, is_locked) were moved into explorer.js for better reusability and rewriten to be synchronous -is_locked function now accepts an array of lock files to be able to check for multiple locks in a single call -remove_sync_message() function was moved into database.js so that restore_backup.js and delete_database.js can also check for and remove the sync msg if it exists -Rewrote a number of internal scripts to allow for better cross-platform support (Windown, MacOS, Linux) -Backup and Restore scripts now use mongo's own encryption instead of tar.gz by default. Older tar.gz backups can still be restored as long as the tar.gz suffix is explicitly added -Backup and Restore scripts now support connecting to remote database based on the mongo details in settings.json -Added a link to exchange on markets page -Added the current git commit id to end of explorer version -Fixed the format of ipv6 addnodes on the network page -Added a Hashrate chart to the page header -Added a Difficulty chart to the page header -Improved the Index/Update sync feature (Shifted some of the code around to be run in a better order) -update_heavy has been moved into a proper callback function which is now only called for index and reindex syncs right near the end of the process instead of at the beginning -Added some tweaks and improvements to the Reindex sync feature (Added an "Are you sure" prompt before starting the reindex, All necessary coin stat data is cleared before starting, More and better messages about what is being done during the process, Shifted some of the code around to be run in a better order) -Added unique page titles for each individual page -Added code to prevent caching of local css files -Bootstrap was upgraded to latest version (v5.1.3) which required tons of changes to the UI. Many little UI problems have been resolved -Bootswatchs themes have all been upgraded to support bootstrap v5.1.3 + 4 new themes were added (Morph, Quartz, Vapor and Zephyr) -Exor theme update to v3.0.0 with support for bootstrap v5.1.3 -Many layout and UI improvements such as more consistent hover effects on most tables and more readable text across all themes -All libraries have been updated and load a CDN url instead of local file where applicable -Codebase was updated so that Node.js must be updated to at least v14.13.1 to fix breaking errors in a few of the updated dependencies -Added an optional block_start parameter to check mode -Check mode no longer updates the last block height -Added a .npmrc file for cleaner npm error msgs -Added new npm scripts to make syncing and running other explorer tasks easier, without needing to remember longer command syntax -Added support for reading scriptPubKey.address -Added Southxchange exchange to markets -Added a new setting to decode tx OP_RETURN values -Market sync now sets the last USD price based on the default market pair even if it is not BTC -Removed the coindesk api which was only really useful for getting the USD price of BTC -Added a couple coingecko apis which are used to get the current USD value of the default market pair -Fixed issues loading site in safari browser (Safari behaves differently than other browsers and seems to require the url prefix to be present when loading external libraries to prevent CORS errors) -Many blockchains allow you to use addnodes without a port # and it will assume the default port internally, but the explorer was failing to parse these peers because it was expecting a port. This is now fixed and will display the peer data without a port in these cases -Added support for newer (deterministic) Dash masternode format -More graceful shutdown of node cluster on 'npm stop' with better cleanup of resources on exit -Added new stop_explorer.sh script which looks up the explorer port # via settings file and closes the application running on that port # instead of saving and killing the process by pid as it did before -Added support for pm2 and forever using 'npm run start-pm2' and 'npm run start-forever' respectively -pm2 is automatically installed when starting with 'npm run start-pm2' if it is not already installed -forever is automatically installed when starting with 'npm run start-forever' if it is not already installed -Reorganized the structure and order of calls within the /ext/getsummary api to allow for returning just the connection and block counts for pages that have show_panels set to false -Combined two script sections into one on the address page -Changed the shorthand $(function() into $(document).ready() for consistency on the claim address page -Added an api page setting to hide/show logo -All pages (including the reward and error pages) were updated to include options for displaying a configurable page header with title, image, description and in some cases a last updated date -The error page was restructured slightly to display a different description based on the type of error (page not found error vs problem loading page error) -Added new setting options to the `shared_pages` setting for `page_title_image` which allows changing the page title image displayed on applicable pages and also determines whether it uses a flip/spin animation or not -Added a collection of new `page_header` settings to all pages that control displaying the new page title + image + description and also moved the last updated date from applicable pages into this section as well -Existing `show_last_updated` settings that were moved a level deeper into the `page_header` have been automatically mapped to the new setting location upon statup to help older installs to work better out-of-the-box -Locale strings now support replacement text such as {1} and {2} that get automatically replaced with proper values when loaded to allow for locale strings that support dynamic text -Fixed an issue with too much empty space in the page header (especially in mobile and tablet modes) when `show_panels` was set to false on any page -Removed unused css class 'loading' -Added new settings to hide/show panels on each page -Added a new `shared_pages.page_header.search.position` setting that determines where the search bar is located (valid options include the old 'below-header' and the new 'inside-header' options) -`shared_pages.page_header.show_search` setting has been re-mapped to `shared_pages.page_header.search.enabled` -Updated the search placeholder locale text -Changed the Explorer menu item icon from a magnifying glass to a cubes/blocks icon -Updated css rules to fix some small glitches and allow the new 'inside-header' search option to function -Fixed a glitch with header-panel height not working on some browsers -Added a new prestart npm script -Fixed + formatted date/time values across entire site using Luxon -Added new date/time settings for display format, timezone (utc or local) and an option to enable alternate timezone tooltips -All markets now return Trade History timestamp values as unix timestamp values formatted in seconds -Added TLS/SSL support -Added new address_page.enable_hidden_address_view setting which controls whether the special hidden_address address page can be viewed -Added new address_page.enable_unknown_address_view setting which controls whether the special unknown_address address page can be viewed -Permanently disabled route to special coinbase address -Added better unique checks for vout/vin -Added full zksnarks tx support -Special addresses are now always omitted from the richlist -Improved restore backup script -Improved delete database script -Added support for bitcoin P2PK scripts/txes -Added a tx_type field to the tx model which is typically null for "normal" transaction types, but can also display 'p2pk' for bitcoin txes which require addtional encoding to reveal the P2PKH address as well as 'zksnarks' for transactions with hidden sender or receiver data -Additional fixes for how data is displayed when a valid wallet address cannot be found -Added some small updates to how zksnarks transactions display hidden sender/receiver data -Went through all files and did a bit of a code cleanup -Added homepage screenshot to readme -Fixed the stex 24h stats volume column which was displaying btc volume -Added btc volume column to 24 stats for stex market -Update altmarkets api to v2 -Improved the display of the market page so that as long as one section has data (stats, buys, sells, trade history) the page will load properly even if it's only one section that isn't blank. Previously it would display an error if just one section was blank. -Added the coin name beside the market pages volume header column in the 24h stats section -Fixed a bug that was displaying an error when the summary value from the 24h stats section was supplied but was a blank string or '-' character -Better success/error message during market sync -Small readme formatting changes -Added ZWSP to prevent address copy/paste issues 1.99.0 [February 05, 2021] -Added new sync option for reindex-last to rescan and flatten the last blockindex value for faster access -Added new sync option for reindex-txcount to rescan and flatten the tx count value for faster access -Added new sync option for reindex-rich to clear and recreate the richlist data -Improved loading of settings including warning of missing and/or invalid settings and the ability to load the explorer using defaults without a settings.json file -Restructured the settings.json.template and settings.js files with better groupings -Added better comments for improved explanations of all settings -Better handling of page length options on all datatables; Page length options are now configurable and also only display options based on limits set by certain items_per_page and max_items_per_query settings -Markets have been extended to support unlimited trading pairs for each exchange -Richlist page now allows better separation of the top list(s) and the wealth distribution table and chart (you can now hide or show sections as desired) -Richlist page now allows for better burned coin support (Hide burned coin addresses from lists and totals even when the burned coin amounts are still included in the total coin supply value) -Block page now only displays the raw block link if the api_page.public_apis.rpc.getblock.enabled settings is set to true -Transaction page now only displays the raw tx link if the api_page.public_apis.rpc.getrawtransaction.enabled setting is set to true -Rate limiting class has been made global and is now used to limit market requests -getnetworkhashps rpc call now returns a '-' if shared_pages.show_hashrate is not set to true -Searching for unsycned blocks/txs no longer saves the data locally but instead still shows the data on screen. This helps prevent syncing data out-of-order (This eliminates the need for db_index.pid which has been removed) -Coin supply is now always taken from the stats collection database instead of from the wallet via rpc command in all cases except when syncing -Added new social_links setting to allow adding as many custom links as desired including the ability to display as image or fontawesome icon -Removed old hardcoded settings for twitter, facebook, google+, bitcointalk, github, slack, discord, telegram, reddit, youtube and custom website link -Removed unnecessary includes for address_history.pug, net_addnodes.pug, net_list.pug, rl_balance.pug, rl_received.pug and restored code in place of include -Renamed /ext/connections to /ext/getnetworkpeers and added it to list of public apis on the /info page -/ext/getsummary now only returns the online and offline masternode counts if the getmasternodecount api is available and enabled -Renamed /ext/summary to /ext/getsummary and added it to list of public apis on the /info page -Added /ext/getaddresstxs to the list of public apis on the /info page + updated the return data so that it returns a named object array for public api for better readability and still returns the same array list for internal datatable use -Updated /ext/getlasttxs so that it returns a named object array for public api for better readability and still returns the same array list for internal datatable use -Added new configurable settings to allow displaying a "last updated date" timestamp for: index, reward, masternode, movement, network, richlist and market pages -Pages disabled via settings are now completely disabled on the front-end whereas before some were still accessible via exact url -Added a new api /ext/getmasternoderewards which returns a list of masternode reward transactions for a single address since a particular block height -Added a new api /ext/getmasternoderewardstotal which returns the total masternode rewards earned for a single address since a particular block height -/ext/getbasicstats api now only includes the masternode count if the getmasternodecount api is available and enabled -Added a new "Masternodes" page which displays the current list of masternodes on the network -Exor theme updated to v2.0.0 with support for bootstrap v4.5.3 -All coind + extended public api calls can now be enabled/disabled individually via settings -Added a new setting to display an alternate "header logo" in the page header -Added a new setting for displaying a coin logo image top panel -Added a new setting for displaying a 'Market Cap' top panel -Added 16x16 logo images to markets -Show spinning loading icons in top panels before data is loaded -Better reusability of rl_labels.pug -Added new market settings for accessing multiple markets (Turn markets header menu into a dropdown with multiple market selection and/or enable a multi-market select box on all market pages) -Fixed and added better tooltips where applicable -Wallet api security is now dynamically controlled by the new api_cmds settings -Restored the jasmine testing functionality along with some sample tests for debugging purposes -Added new settings for changing header/footer/thead background color via bootstrap css classes -All unnecessary/unused data is now filtered from ajax-enabled datatables to make ajax calls cleaner and easier to read -Updated JQuery to v3.5.1 -Updated Bootstrap to v4.5.3 -Updated DataTables to v1.10.22 -Updated FontAwesome to v5.15.1 -Updated Chart.js to v2.9.4 -Updated flag-icon-css to v3.5.0 -All scripts now load minified -Removed unused/unnecessary scripts (moment.js and some jqPlot plugins) -Scripts that are not used on every page are now only loaded on pages where they are needed (jqPlot, Chart.js and flag-icon-css) -Default website language to English -Enable unicode support -Removed unused images -Many internal structure changes to make the code cleaner and easier to find and read -Reward page rewritten to support Chart.js v2.9.4 -All bootswatch themes updated to newest versions (support for bootstrap v4.5.3) -Added sass support -Added new settings for sticky header/footer support -Added better error checking for invalid markets -Added the ability to lookup unsynced transactions (search for txid that has not yet been synced) -Fixed a bug in the index sync to prevent gaps in the block data -Added a new setting to determine how many blocks to sync before saving stats -Added new settings to customize footer height + social link sizes -Improved long index sync warning functionality -Enabled responsive/mobile support -format_unixtime function is now used to format all date values -Fixed all "collection.count is deprecated" warnings -Fixed startup error ERR_INVALID_ARG_TYPE when using node.js 14+ -Greatly improved and simplified markets functionality, including generic markets page that is consumed by all markets now -Added last_txs to /ext/getaddress api -Updated jqPlot to v1.0.9.d96a669 -Network peers list now displays flag icons for country data -Explorer name and version now displayed in footer -Added the ability to index blocks in parallel for dramatic speed increases during blockchain sync (there is a known issue with this feature that can cause historical balance data to be out-of-sync) -Added new claim address feature with bad word filters which allows anyone to set custom display names for wallet addresses that they own using the 'Sign Message' feature from their local wallet (Claimed addresses now replace actual wallet addresses across all pages of the site) -Added new use_rpc setting to allow explorer to get wallet data from rpc directly or still consume the public apis as before -All numerical values now use a separate CSS class to display digits after decimal place -Added historical balance to address history data -Peers sync now uses freegeoip.app for IP geolocation -Added new Network tab with info to easily get addnode data for Wallets -Added new /ext/gettx api -Fixed a number of cluster issues that broke support for newer node versions -Fixed a memory overflow error when indexing 1000s of TXs -Added support for Altmarkets.io exchange -Added full address history support as opposed to only displaying top x records -Added ipv6 support -All api end-points now return text values with HTTP header content-type 'text/plain' -Removed defunct markets (ccex, coinexchange, cryptopia, cryptsy, empoex) -Replaced deprecated 'request' dependency with 'postman-request' -Added support for Crex24 exchange -Added partial Zcash/zk-SNARKs private tx support (90% complete) -Added support for customizing daemon api cmds -Fixed incorrect 'Wealth Distribution' total percent value -Added support for omitting 'burned coin' addresses from the rich list 1.0.1 [June 7, 2019] -Added stex.com market support -Added a new public api /ext/getbasicstats -Fixed all depreciation warnings regarding mongo db.update statements -Updated outdated mongodb and mongoose references 1.0.0 [May 27, 2019] -Initial release