diff --git a/CHANGELOG.md b/CHANGELOG.md index 09eb47ca..004f8e7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,51 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). See [MAINTAINERS.md](./MAINTAINERS.md) for instructions to keep up to date. +## v0.2.6 + +* bumped firehose-core to `v0.2.1` + +### Operators + +> [!IMPORTANT] +> We have had reports of older versions of this software creating corrupted merged-blocks-files (with duplicate or extra out-of-bound blocks) +> This release adds additional validation of merged-blocks to prevent serving duplicate blocks from the firehose or substreams service. +> This may cause service outage if you have produced those blocks or downloaded them from another party who was affected by this bug. + +1. Find the affected files by running the following command (can be run multiple times in parallel, over smaller ranges) + +``` +tools check merged-blocks-batch +``` + +2. If you see any affected range, produce fixed merged-blocks files with the following command, on each range: + +``` +tools fix-bloated-merged-blocks : +``` + +3. Copy the merged-blocks files created in output-store over to the your merged-blocks-store, replacing the corrupted files. + +### Added + +* Added `tools check merged-blocks-batch` to simplify checking blocks continuity in batched mode, optionally writing results to a store +* Added the command `tools fix-bloated-merged-blocks` to try to fix merged-blocks that contain duplicates and blocks outside of their range. +* Command `tools print one-block and merged-blocks` now supports a new `--output-format` `jsonl` format. Bytes data can now printed as hex or base58 string instead of base64 string. +* Added retry loop for merger when walking one block files. Some use-cases where the bundle reader was sending files too fast and the merger was not waiting to accumulate enough files to start bundling merged files + +### Fixed + +* Bumped `bstream`: the `filesource` will now refuse to read blocks from a merged-files if they are not ordered or if there are any duplicate. +* The command `tools download-from-firehose` will now fail if it is being served blocks "out of order", to prevent any corrupted merged-blocks from being created. +* The command `tools print merged-blocks` did not print the whole merged-blocks file, the arguments were confusing: now it will parse as a uint64. +* The command `tools unmerge-blocks` did not cover the whole given range, now fixed + +### Removed + +* **Breaking** The `reader-node-log-to-zap` flag has been removed. This was a source of confusion for operators reporting Firehose on bugs because the node's logs where merged within normal Firehose on logs and it was not super obvious. + + Now, logs from the node will be printed to `stdout` unformatted exactly like presented by the chain. Filtering of such logs must now be delegated to the node's implementation and how it deals depends on the node's binary. Refer to it to determine how you can tweak the logging verbosity emitted by the node. + ## v0.2.5 * bump firehose-core to `v0.1.11` with a regression fix for when a substreams has a start block in the reversible segment diff --git a/go.mod b/go.mod index 859dc3b7..9a0a8968 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/klauspost/compress v1.16.5 github.com/mr-tron/base58 v1.2.0 github.com/spf13/cobra v1.7.0 - github.com/streamingfast/bstream v0.0.2-0.20230829131224-b9272048dc6a + github.com/streamingfast/bstream v0.0.2-0.20231108161055-1092e9150ee8 github.com/streamingfast/cli v0.0.4-0.20230825151644-8cc84512cd80 github.com/streamingfast/dlauncher v0.0.0-20230607184145-76399faad89e github.com/streamingfast/dstore v0.1.1-0.20230620124109-3924b3b36c77 - github.com/streamingfast/firehose-core v0.1.13-0.20231027195741-1dd9adc7ce1c + github.com/streamingfast/firehose-core v0.2.1 github.com/streamingfast/jsonpb v0.0.0-20210811021341-3670f0aa02d0 github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 github.com/streamingfast/node-manager v0.0.2-0.20230406142433-692298a8b8d2 @@ -76,6 +76,7 @@ require ( github.com/envoyproxy/go-control-plane v0.11.1 // indirect github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/go-json-experiment/json v0.0.0-20231013223334-54c864be5b8d // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect diff --git a/go.sum b/go.sum index 3eb38805..96c1a20e 100644 --- a/go.sum +++ b/go.sum @@ -253,6 +253,8 @@ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeME github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-json-experiment/json v0.0.0-20231013223334-54c864be5b8d h1:zqfo2jECgX5eYQseB/X+uV4Y5ocGOG/vG/LTztUCyPA= +github.com/go-json-experiment/json v0.0.0-20231013223334-54c864be5b8d/go.mod h1:6daplAwHHGbUGib4990V3Il26O0OC4aRyvewaaAihaA= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= @@ -628,8 +630,8 @@ github.com/streamingfast/atm v0.0.0-20220131151839-18c87005e680 h1:fGJnUx0shX9Y3 github.com/streamingfast/atm v0.0.0-20220131151839-18c87005e680/go.mod h1:iISPGAstbUsPgyC3auLLi7PYUTi9lHv5z0COam0OPOY= github.com/streamingfast/binary v0.0.0-20210928223119-44fc44e4a0b5 h1:xCVaIP9q+nqRxHrb1wCLs3AABUcCgLGK0IakN4CMQbk= github.com/streamingfast/binary v0.0.0-20210928223119-44fc44e4a0b5/go.mod h1:LEQhe6qUvAQSYBJu7MZvDU1kx4JrZzxru3Ga1rRCCuo= -github.com/streamingfast/bstream v0.0.2-0.20230829131224-b9272048dc6a h1:NeCO5JLz38HRK1uaV1Emo9u5gUSRtmtZZGNK8BKyLIE= -github.com/streamingfast/bstream v0.0.2-0.20230829131224-b9272048dc6a/go.mod h1:Njkx972HcZiz0djWBylxqO/eq686eDGr+egQ1lePj3Q= +github.com/streamingfast/bstream v0.0.2-0.20231108161055-1092e9150ee8 h1:97vTsS3HZ5Q/ADapuQGbOWlOl4VGlUmG6TDtk8vmL/E= +github.com/streamingfast/bstream v0.0.2-0.20231108161055-1092e9150ee8/go.mod h1:Njkx972HcZiz0djWBylxqO/eq686eDGr+egQ1lePj3Q= github.com/streamingfast/cli v0.0.4-0.20230825151644-8cc84512cd80 h1:UxJUTcEVkdZy8N77E3exz0iNlgQuxl4m220GPvzdZ2s= github.com/streamingfast/cli v0.0.4-0.20230825151644-8cc84512cd80/go.mod h1:QxjVH73Lkqk+mP8bndvhMuQDUINfkgsYhdCH/5TJFKI= github.com/streamingfast/dauth v0.0.0-20230929180355-921f9c9be330 h1:49JYZkn8ALGe+LhcACZyX3L9B8tIxRZ3F3l+OxmNMhY= @@ -652,8 +654,8 @@ github.com/streamingfast/dtracing v0.0.0-20220305214756-b5c0e8699839 h1:K6mJPvh1 github.com/streamingfast/dtracing v0.0.0-20220305214756-b5c0e8699839/go.mod h1:huOJyjMYS6K8upTuxDxaNd+emD65RrXoVBvh8f1/7Ns= github.com/streamingfast/firehose v0.1.1-0.20230731171526-3428fc0ff8d9 h1:SybLEPFkJk8EINJGDlijSWxEZGNXDul4zqlDpttQUCI= github.com/streamingfast/firehose v0.1.1-0.20230731171526-3428fc0ff8d9/go.mod h1:lGC1T6mpAAApjBQNF5COSXb3SbrYRI3dBR1f6/PZE54= -github.com/streamingfast/firehose-core v0.1.13-0.20231027195741-1dd9adc7ce1c h1:XeeHI3pozNL0wlWBfhDqzZ+plkOd/G3XcayrJ+NP9U8= -github.com/streamingfast/firehose-core v0.1.13-0.20231027195741-1dd9adc7ce1c/go.mod h1:QS4D/7sgtxQLBtaMBVmJP0Q0NyXx6Wdcwj4a0gVQFVY= +github.com/streamingfast/firehose-core v0.2.1 h1:yErirlPp1gkgj9GiO+TfBIsr3UDCM6PnnwbJbgBqr4A= +github.com/streamingfast/firehose-core v0.2.1/go.mod h1:5Bf1vpTAhxI93isYYc7zcGrW1QzAZxioIll6siC6FTw= github.com/streamingfast/index-builder v0.0.0-20221031203737-fa2e70f09dc2 h1:dgYLhP3STiPi30fISAijFPEB11D4r1fQFc8D3cpgV5s= github.com/streamingfast/index-builder v0.0.0-20221031203737-fa2e70f09dc2/go.mod h1:OYv1UX/kRsV9aP4SEwa9zpt34qGzdtJzOvdGn+n56as= github.com/streamingfast/jsonpb v0.0.0-20210811021341-3670f0aa02d0 h1:g8eEYbFSykyzIyuxNMmHEUGGUvJE0ivmqZagLDK42gw= diff --git a/pb/sf/solana/type/v1/type.go b/pb/sf/solana/type/v1/type.go index 50f639af..a722e106 100644 --- a/pb/sf/solana/type/v1/type.go +++ b/pb/sf/solana/type/v1/type.go @@ -16,6 +16,14 @@ func (x *Block) GetFirehoseBlockNumber() uint64 { return x.Slot } +func (b *Block) GetFirehoseBlockParentNumber() uint64 { + return b.ParentSlot +} + +func (b *Block) GetFirehoseBlockVersion() int32 { + return 1 +} + func (x *Block) GetFirehoseBlockParentID() string { return x.PreviousBlockhash } diff --git a/pb/sf/solana/type/v2/type.go b/pb/sf/solana/type/v2/type.go index f2666756..cd29bb0b 100644 --- a/pb/sf/solana/type/v2/type.go +++ b/pb/sf/solana/type/v2/type.go @@ -18,6 +18,10 @@ func (b *Block) GetFirehoseBlockParentID() string { return base58.Encode(b.PreviousId) } +func (b *Block) GetFirehoseBlockParentNumber() uint64 { + return b.PreviousBlock +} + func (b *Block) GetFirehoseBlockTime() time.Time { return time.Unix(int64(b.GenesisUnixTimestamp), 0) } @@ -25,3 +29,7 @@ func (b *Block) GetFirehoseBlockTime() time.Time { func (x *Block) GetFirehoseBlockLIBNum() uint64 { return 0 } + +func (b *Block) GetFirehoseBlockVersion() int32 { + return int32(b.Version) +}