The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. See MAINTAINERS.md for instructions to keep up to date.
- Added support for EOSIO 2.1.x (requires 2.1.1 to have full data since some data where bogus in 2.1.0)
- Added support for environment variable
EOSWS_PUSH_V1_OUTPUT=truethat forces push-transaction (guarantee:in-block) to output the same content format as nodeos 2.0.x (with Inlines) - Added support for environment variable
DSTORE_S3_BUFFERED_READ=truethat forces reading S3 files (ex: blocks) ahead of processing, useful when S3 provider has trouble keeping long connections alive. - Added support for looking up irreversible blocks on blockmeta (when the LIB was stuck for a while) from tokenmeta and trxdb-loader. They now use '--common-blockmeta-addr' flag if available
- Added
--common-chain-core-symbolflag to define actual chain core symbol in the form<precision>,<symbol code>defaults to4,EOSby default. - Added
--tokenmeta-readiness-max-latencywith default=5m, now tokenmeta will show as "NotServing" through grpc healthcheck if last processed block (HEAD) is older than this. Value of 0 disables that feature. - Added
--relayer-source-request-burstwith default=90 to allow a relayer connecting to another relayer to request a 'burst' - Added
--statedb-disable-indexingto disable indexing of tablet and injecting data into storage engine developer option, don't use that in production. - Added
--eosws-nodeos-rpc-push-extra-addressesto allow providing a list of backup EOS addresses when push-transaction does not succeed in getting the transaction inside a block (with push_guarantee) - Added
--eosws-max-stream-per-connectionto allow changing how many stream can be active at the same time for a given WebSocket connection, defaults to12which was the hard-coded value.
- Added
--eosws-statedb-proxy-retries, Number of time to retry proxying a request to statedb before failing (default 2) - Added
--eosws-nodeos-rpc-proxy-retries, Number of time to retry proxying a request to statedb before failing (default 2)
- Added
--mindreader-max-console-length-in-byteswhich is the limit in bytes that we allow action trace's console output to be before truncating them. - Environment variable
MINDREADER_MAX_TOKEN_SIZEcan now be set to overridebufio.Scanner()max token size (default52428800, i.e.50Mb) for EOSIO chains with huge transactions - Flag
--accounthist-modeto specific the accounthist mode of operation - Added
tools check accounthist-shardsto - Flag
--common-include-filter-expr,--common-exclude-filter-expr,--common-system-actions-include-filter-exprcan optionally specify multiple values, separated by;;;and prefixed by#123;where 123 is a block number at which we stat applying that filter - Added
accounthisttools allows you to scan and read accountsdfuseeos tools accounthist read ...dfuseeos tools accounthist scan ... - Flag
--search-router-truncation-low-block-numto make the router aware of lower-block-truncation and serve requests accordingly - Flag
--mindreader-oneblock-suffixthat mindreaders can each write their own file per block without competing for writes. #140 - Flag
--eosws-disabled-messagesa comma separated list of ws messages to disable. - Flag
--common-system-shutdown-signal-delay, a delay that will be applied between receiving SIGTERM signal and shutting down the apps. Health-check foreoswsanddgraphqlwill respond 'not healthy' during that period.
- Breaking Change Removed
--eosq-price-ticker-nameflag, if you were using this flag, please use--common-chain-core-symbolinstead to define it. - Removed
dgraphql-graceful-shutdown-delay, it was a left-over, unused. Must use--common-system-shutdown-signal-delaynow - Removed
relayer-max-drift(now dependent on a new condition of presence of a "block hole", and no new block sent for 5 seconds) - Removed
relayer-init-time(no need for it with this new condition ^)
- The
--eosq-available-networkslogofield each network now has a maximum height of70px. - The
--eosq-available-networksconfig of each network now accepts alogo_textthat when present, is displayed alongside thelogofield. This field is taken into consideration only whenlogois defined. In this mode, the logo is fixed to48px x 48px. If thelogo_textvalue iseosq, this is rendered like the standardeosqlogo. - Breaking Change Changes to
--eosq-available-networksconfig might be required around thelogofield each network. You must now remove thelogofield if it's not pointing to an existing image otherwise, the logo will not be rendered correctly. - Applying a block filter over previously-filtered-blocks does not panic anymore, it applies the new filter on top of it, only if that specific filter has never been applied before. Applied filters definitions are concatenated in the block metadata, separated by
;;; - Default
trxdb-loader-batch-sizechanged to 100, Safe to do so because it does not batch when close to head. - Improved relayer mechanics: replaced "max drift" detection by "block hole" detection and recovery action is now to restart the joining source (instead of shutting down the process)
- Improved
dfuseeos tools check statedb-reproc-injectoroutput by showing all shard statistics (and not just most highest block). - Breaking Change Changed
--statedb-enable-pipelineflag to--statedb-disable-pipelineto make it clearer that it should not be disable, if you were using the flag, change the name and invert the logical value (i.e.--state-enable-pipeline=falsebecomes--state-disable-pipeline=true)
- Fixed Firehose gRPC listening address over plain text.
- Fixed validation of transaction ID passed to WebSocket
get_transactionAPI, the prior validation was too permissive. - Fixed a bug making search-forkresolver useless, because ignored by search-router.
- Fixed a bug on StateDB server not accepting symbol and symbol code as
scopeparameter value. - Fixed shutdown on dgraphql (grpc/http) so it closes the active connections a little bit more gracefully.
- Fixed a bug in
TiKVstore implementation preventing it to delete keys correctly. - Fixed a bug in
eoswsWebSocketget_transaction_lifecyclewhere a transaction not yet in the database would never stream back any message to the client. - Fixed a bug with
--mindreader-no-blocks-logoption actually not being picked up (always false) - Fixed a bug with
/state/table/rownot correctly reading row when it was in the table index. - Fixed a bug with
/state/tables/scopeswhere the actual block num used to query the data was incorrect leading to invalid response results. - Fixed a bug with gRPC
dfuse.eosio.statedb.v1/State#StreamMultiScopesTableRowswhere the actual block num used to query the data was incorrect leading to invalid response results. - Fixed issue when reading ABI from StateDB where speculative writes were not handled correctly.
- Fixed issue when reading Table Row from StateDB where speculative writes were not handled correctly.
- Fixed a potential crash when reading ABI from StateDB and it does not exist in database.
- fix experimental netkv implementation for statedb
- fix experimental netkv implementation for trxdb
- When using filtering capabilities, only absolutely required system actions will be indexed/processed.
- Added missing
updateauthanddeleteauthas require system actions in flagcommon-system-actions-include-filter-expr.
- Added
tokens,accountBalances,tokenBalancescalls to dgraphql (based on tokenmeta)
- Breaking Change FluxDB has been extracted to a dedicated library (github.com/streamingfast/fluxdb) with complete re-architecture design.
- Breaking Change FluxDB has been renamed to StateDB and is incompatible with previous written data. See FluxDB Migration section below for more details on how to migrate.
mergerstartblock behavior changed, now relies on state-file, see streamingfast/merger#1- Changed
merger-seen-blocks-fileflag tomerger-state-fileto reflect this change. mergernow properly handles storage backend errors when looking for where to startmindreadernow automatically produces "merged blocks" instead of "one-block-files" when catching up (based on blocktime or if a blockmeta is reachable at--common-blockmeta-addr)mindreadernow sets optimal EOS VM settings automatically if the platform supports it them when doingdfuseeos init.- Changed
--abicodec-export-cache-urlflag toabicodec-export-abis-base-urland will contain only the URL of the where to export the ABIs in JSON. - Changed
--abicodec-export-cacheflag toabicodec-export-abis-enabled.
- Added
tokenmetaapp, with its flags - Added support for filtered blocks, search indices and trxdb, with
--common-include-filter-exprand--common-include-filter-expr. - Added
merged-filterapp (not running by default), that generates filtered merged blocks files from regular merged blocks files. - Added truncation handling to
trxdb-loader, which will only keep a moving window of data intrxdb, and delete preceding transactions. Enabling that feature requires reprocessing trxdb.--trxdb-loader-truncation-enabled--trxdb-loader-truncation-window--trxdb-loader-truncation-purge-interval
- Added
--statedb-reproc-shard-scratch-directoryto run StateDB reprocessing sharder using scratch directory to reduce RAM usage - Added
--merger-one-block-deletion-threads(default:10) to allow control over one-block-files deletion parallelism
- Added
--merger-max-one-block-operations-batch-sizeto allow control over one-block-files batches that are looked up on storage,
- Added
--eosws-with-completion(default: true) to allow control over that feature - Added
--mindreader-merge-threshold-block-agewhen processing blocks with a blocktime older than this threshold, they will be automatically merged: (default 12h) - Added
--mindreader-batch-modeto force always merging blocks (like --mindreader-merge-and-store-directly did) AND overwriting existing files in destination. - Added
--mindreader-wait-upload-complete-on-shutdownflag to control how mindreader waits on upload completion when shutting down (previously waited indefinitely) - Added
--search-live-hub-channel-sizeflag to specific the size of the search live hub channel capacity - Added
--search-live-preprocessor-concurrent-threads: number of thread used to run file source preprocessor function - Added
--abicodec-export-abis-file-name, contains the URL where to export the ABIs in JSON - Added
--metrics-listen-addrto control on which address to server the metrics API (Prometheus), setting this value to an empty string disable metrics serving. - Added
--dashboard-metrics-api-addrto specify a different API address where to retrieve metrics for the dashboard. - Added Experimental support for kvdb backend
netkv://, an extremely simple network layer overbadgerto allow running dfuse components in separate instances.
- The
--merger-delete-blocks-beforeflag is now removed and is the only behavior for merger. - The
--mindreader-merge-and-store-directlyflag was removed. That behavior is now activated by default when encountering 'old blocks'. Also see new flag mindreader-batch-mode. - The
--mindreader-discard-after-stop-numflag was removed, its implementation was too complex and it had no case where it was really useful. - The
--mindreader-producer-hostnameflag was removed, this option made no sense in the context ofmindreaderapp. - The
--eosq-disable-tokenmetaflag was removed, token meta is now included, so this flag is now obsolete. - The
--eosq-on-demandflag was removed, this was unused in the codebase.
- Fixed issue where
blockmetawas not serving on GRPC at all because it couldn't figure out where to start on the stream - Fixed issue with
mergerwith a possible panic when reading a one-block-file that is empty, for example on a non-atomic storage backend - Fixed issue with
mindreadernot stopping correctly (and showing any error) if the bootstrap phase (ex: restore-from-snapshot) failed. - Fixed issue with
pitreosnot taking a backup at all when sparse-file extents checks failed. - Fixed issue with
dfuseeos tools check merged-blocks(start/end block, false valid ranges when the first segment is not 0, etc.) - Improved performance by using value for
bstream.BlockRefinstead of pointers and ensuring we use the cached version. mindreaderandnode-managerimprovednodeoslog handling
FluxDB required an architecture re-design to fit with our vision about the tool and make it chain agnostic (so it is easier to re-use on our other supported chain).
The code that was previously found here has been extracted to its own library (https://github.com/streamingfast/fluxdb).
There is now a new app named StateDB (statedb is the app identifier) in dfuse for EOSIO that uses FluxDB to
support all previous API endpoints served by the FluxDB app as well as now offering a gRPC interface.
While doing this, we had to change how keys and data were written to the underlying engine. This means that all your previous data stored cannot be read anymore by the new StateDB and that new data written by StateDB will not be compatible on a previous instance.
What that means exactly is that StateDB will require to re-index all the current merged blocks up to live blocks before being able to serve requests. This is the main reason why we decided to rename the app, so you are forced to peform this step.
Here the steps required to migrate to the new statedb app:
- We strongly recommend that you take a full backup of your data directory (while the app is shut down)
- Launch a stand-alone stateDB instance in 'inject-mode' that reads from your block files and writes to a new location (see '--statedb-store-dsn')
- Let it complete the "catch up" until it is very close to the HEAD of your network, then stop that instance.
- Stop your previous instance (that uses fluxdb),
- Copy the content of your statedb database to a location accessible from there (that you will define in '--statedb-store-dsn')
- Launch the new version of the code, with the modified flags, over your previous data, including the new statedb database content (see below for the necessary flag and config modifications)
Here are the flags and config modifications required for switching to fluxdb to statedb, once the new data has been generated.
-
In your
dfuse.yamlconfig, under replace thefluxdbapp bystatedband all flags prefixed withfluxdb-must now be prefixed withstatedb-.From:
start: args: - ... - fluxdb - ... flags: ... fluxdb-http-listen-addr: :9090 ...
To:
start: args: - ... - statedb - ... flags: ... statedb-http-listen-addr: :9090 ...
-
If you had a customization for
fluxdb-statedb-dsn, you must first renamed itstatedb-store-dsntostatedb-store-dsn. Important You must use a new fresh database, so update your argument so it points to a new database, ensuring we don't overwrite data over old now incompatible data. If you did not customize the flag, continue reading, the default value has changed to point to a fresh storage folder.If you had a customization for
eosws-flux-addr, rename toeosws-statedb-grpc-addrand ensure it points to the StateDB GRPC address (and not the HTTP address), its value must be the same as the flagstatedb-grpc-listen-addr. -
If you have a custom
fluxdb-max-threadsflag, removed it, customizing this value is not supported anymore.
See release notes.
See release notes.
- Added
apiproxyapplication, with its flags - Added
--log-formatoption for JSON output andlog-to-filebool (default to true, same behavior as before) - Filtering (whitelist and blacklist) of what is indexed in Search, based on Google's Common Expression Language. See details here. Added
--search-common-action-filter-on-exprand--search-common-action-filter-out-expr.- NOTE: This doesn't affect what is extracted from the chain, allowing you to re-index selectively without a chain replay.
- CLI: dfuseeos init now writes dfuse.yaml with the
startcommand's flags, also the array of components to start - CLI: new
{dfuse-data-dir}replacement string in config flags, also changed default flag values --node-manager-config-dirnow./producer(wasmanager/config)--node-manager-data-dirnow{dfuse-data-dir}/node-manager/data(wasmanagernode/data)--mindreader-config-dirnow./mindreader(wasmindreadernode/config)--mindreader-data-dirnow{dfuse-data-dir}/mindreader/data(wasmindreadernode/data)- CLI: regrouped some flags:
--search-indexer-dfuse-hooks-action-name,--search-live-dfuse-hooks-action-name,--search-forkresolver-dfuse-hooks-action-namefused into new--search-common-dfuse-hooks-action-name.--search-...-mesh-publish-polling-durationfused into new--search-common-mesh-publish-polling-duration.- all of the
--search-mesh-...options were renamed to--search-common-mesh-...(previously--search-mesh-service-version,--search-mesh-namespace,--search-mesh-store-addr) dashboard: now separate metrics for mindreader vs producer nodedashboarddoesn't act as a reverse proxy anymore (apiproxydoes)dashboard's default port is now:8081eosq's port is now proxied through:8080, so use that.- App
managerrenamed tonode-manager. All of its flags were changed from--manager-...to--node-manager-...
- The
--search-...-indexing-restrictions-json. This was replaced by the filtering listed above.
- Added
--nodeos-pathto control whichnodeosexecutable is used.
- Removed
--chain-name, replaced by--config-file(or-c) - Removed
init --resetoption,dfusebox purgedoes it all now.
- Renamed
dfuseboxtodfuse for EOSIOdfusebox.yamltodfuse.yamldfusebox-datatodfuse-data
--data-dirnow defaults to./dfusebox-data, and is separate from a chain name or the config file location.dfusebox initnow only generates adfusebox.yamlconfig file, which can be booted withdfusebox start.dfusebox initnow only has the interactive method. We can later add more programmatic method to boot chains. With adfusebox.yamlconfig now, however, we can reuse initializations multiple times.- License changed to Apache 2.0
- Added GitHub workflow for PR checks