diff --git a/.github/workflows/golangci-lint.yaml b/.github/workflows/golangci-lint.yaml index b86521a..ebd3fbe 100644 --- a/.github/workflows/golangci-lint.yaml +++ b/.github/workflows/golangci-lint.yaml @@ -2,9 +2,9 @@ name: Linting on: push: - branches: [ develop* ] + branches: [develop*] pull_request: - branches: [ develop*,main ] + branches: [develop*, main] permissions: contents: read @@ -14,8 +14,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - go-version: [ 1.21.x ] - os: [ ubuntu-latest ] + go-version: [1.21.x] + os: [ubuntu-latest] name: lint steps: - name: Checkout repo @@ -32,13 +32,15 @@ jobs: repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Format - run: task test:format + run: cd api-service && task test:format - name: Run golangci-lint uses: golangci/golangci-lint-action@v4 with: # Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version. version: v1.56 + # Optional: working directory, useful when you have multiple Go modules + working-directory: api-service # Optional: golangci-lint command line arguments. args: --timeout=5m # Optional: show only new issues if it's a pull request. The default value is `false`. diff --git a/proto/substreams/sink/kv/v1/kv.proto b/proto/substreams/sink/kv/v1/kv.proto new file mode 100644 index 0000000..f773220 --- /dev/null +++ b/proto/substreams/sink/kv/v1/kv.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +package sf.substreams.sink.kv.v1; + +option go_package = "github.com/streamingfast/substreams-sink-kv/pb;pbkv"; + +message KVOperations { + repeated KVOperation operations = 1; +} + +message KVOperation { + string key = 1; + bytes value = 2; + uint64 ordinal = 3; + enum Type { + UNSET = 0; // Protobuf default should not be used, this is used so that the consume can ensure that the value was actually specified + SET = 1; + DELETE = 2; + } + Type type = 4; +} diff --git a/proto/substreams/sink/kv/v1/services.proto b/proto/substreams/sink/kv/v1/services.proto new file mode 100644 index 0000000..b977275 --- /dev/null +++ b/proto/substreams/sink/kv/v1/services.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; +package sf.substreams.sink.kv.v1; + +option go_package = "github.com/streamingfast/substreams-sink-kv/pb;pbkv"; + + +message Config { + int64 start_block = 1; + string input_module = 2; +} + +// This defines a KV Sink to be queried with a generic key access interface (Get, GetMany, Scan, Prefix calls). +message GenericService { + Config sink_config = 1; +} + +// This defines configuration to run a WASM query service on top of the KV store being sync'd. +message WASMQueryService { + Config sink_config = 1; + + // wasm exports: "kv_get_batch", "kv_get", "kv_scan", "kv_prefix" + bytes wasm_query_module = 5; + + // Fully qualified Protobuf Service definition name + string grpc_service = 2; // sf.mycustom.v1.MyService +} diff --git a/substreams/Cargo.lock b/substreams/Cargo.lock index b5e0238..568447d 100644 --- a/substreams/Cargo.lock +++ b/substreams/Cargo.lock @@ -156,14 +156,13 @@ dependencies = [ [[package]] name = "eth_blobs" -version = "0.7.1" +version = "0.8.0" dependencies = [ - "prost 0.11.9", - "prost-types 0.11.9", + "prost 0.13.5", + "prost-types 0.13.5", "substreams", "substreams-entity-change", "substreams-ethereum", - "substreams-sink-kv", ] [[package]] @@ -472,6 +471,49 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pest" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.50", +] + +[[package]] +name = "pest_meta" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" +dependencies = [ + "pest", + "sha2", +] + [[package]] name = "petgraph" version = "0.6.4" @@ -498,6 +540,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "prettyplease" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3928fb5db768cb86f891ff014f0144589297e3c6a1aba6ed7cecfdace270c7" +dependencies = [ + "proc-macro2", + "syn 2.0.50", +] + [[package]] name = "primitive-types" version = "0.11.1" @@ -532,22 +584,22 @@ dependencies = [ [[package]] name = "prost" -version = "0.10.4" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes", - "prost-derive 0.10.1", + "prost-derive 0.11.9", ] [[package]] name = "prost" -version = "0.11.9" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", - "prost-derive 0.11.9", + "prost-derive 0.13.5", ] [[package]] @@ -563,7 +615,7 @@ dependencies = [ "log", "multimap", "petgraph", - "prettyplease", + "prettyplease 0.1.25", "prost 0.11.9", "prost-types 0.11.9", "regex", @@ -573,16 +625,23 @@ dependencies = [ ] [[package]] -name = "prost-derive" -version = "0.10.1" +name = "prost-build" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ - "anyhow", + "heck", "itertools", - "proc-macro2", - "quote", - "syn 1.0.109", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease 0.2.17", + "prost 0.13.5", + "prost-types 0.13.5", + "regex", + "syn 2.0.50", + "tempfile", ] [[package]] @@ -599,13 +658,16 @@ dependencies = [ ] [[package]] -name = "prost-types" -version = "0.10.1" +name = "prost-derive" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ - "bytes", - "prost 0.10.4", + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn 2.0.50", ] [[package]] @@ -617,6 +679,15 @@ dependencies = [ "prost 0.11.9", ] +[[package]] +name = "prost-types" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52c2c1bf36ddb1a1c396b3601a3cec27c2462e45f07c386894ec3ccf5332bd16" +dependencies = [ + "prost 0.13.5", +] + [[package]] name = "quote" version = "1.0.35" @@ -757,6 +828,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha3" version = "0.10.8" @@ -775,9 +857,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "substreams" -version = "0.5.13" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3520661f782c338f0e3c6cfc001ac790ed5e68d8f28515139e2aa674f8bb54da" +checksum = "79d145ab6eb1eef695f811dd842ab7a44135cf392e9933046ed44456d1a01ea5" dependencies = [ "anyhow", "bigdecimal", @@ -787,30 +869,32 @@ dependencies = [ "num-integer", "num-traits", "pad", - "prost 0.11.9", - "prost-build", - "prost-types 0.11.9", + "pest", + "pest_derive", + "prost 0.13.5", + "prost-build 0.13.5", + "prost-types 0.13.5", "substreams-macro", "thiserror", ] [[package]] name = "substreams-entity-change" -version = "1.3.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2c7fca123abff659d15ed30da5b605fa954a29e912c94260c488d0d18f9107d" +checksum = "0587b8d5dd7bffb0415d544c31e742c4cabdb81bbe9a3abfffff125185e4e9e8" dependencies = [ "base64", - "prost 0.11.9", - "prost-types 0.11.9", + "prost 0.13.5", + "prost-types 0.13.5", "substreams", ] [[package]] name = "substreams-ethereum" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f45dc04be50b7ca08d6d5c4560ee3eeba16ccaa1c124d0361bb30b5b84e28b" +checksum = "a2fc683b368e317c60064267dbddc5d8ce290ef00170eb74df8cdde7cda939f3" dependencies = [ "getrandom", "num-bigint", @@ -822,15 +906,15 @@ dependencies = [ [[package]] name = "substreams-ethereum-abigen" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c04307913a355aaf2a1bb7186d4bc7e36875f3d4aff77b47e83f1b63b24da55" +checksum = "72db7f7ca7766cb393c8479add840c76139bb25818f38d6db80c2be3b49b02a2" dependencies = [ "anyhow", "ethabi", "heck", "hex", - "prettyplease", + "prettyplease 0.1.25", "proc-macro2", "quote", "substreams-ethereum-core", @@ -839,25 +923,25 @@ dependencies = [ [[package]] name = "substreams-ethereum-core" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db9048cc9a66873ab7069ef958c2684994e6ee323da49c186b19156fdb4ca131" +checksum = "533e22206a9709568ed829037ed49838d4c8c441b799f9c43a20c5a7d84027c9" dependencies = [ "bigdecimal", "ethabi", "getrandom", "num-bigint", - "prost 0.11.9", - "prost-build", - "prost-types 0.11.9", + "prost 0.13.5", + "prost-build 0.11.9", + "prost-types 0.13.5", "substreams", ] [[package]] name = "substreams-ethereum-derive" -version = "0.9.9" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e862928bee8653f5c9291ac619c8dc0da14ca61d8cd8d89b3acdbbde4d0bf304" +checksum = "b66155cfe7197efafcd46135fb8da7bfa344142c20a9c25d8fdb97cd1995cf8c" dependencies = [ "ethabi", "heck", @@ -871,9 +955,9 @@ dependencies = [ [[package]] name = "substreams-macro" -version = "0.5.13" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15595ceab80fece579e462d4823048fe85d67922584c681f5e94305727ad9ee" +checksum = "5031948f3a3051e27c60ad073c43ccba413297808ec630f3fedd68bb63e0b806" dependencies = [ "proc-macro2", "quote", @@ -881,28 +965,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "substreams-sink-core" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ded39a2f619511aae1da123c1f100e089f83302ba3aeccb6b8c5036ff6ddca0" -dependencies = [ - "prost 0.10.4", - "prost-types 0.10.1", -] - -[[package]] -name = "substreams-sink-kv" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22de24880a9d7ff0c1d442e9f10fea1a4282d782b35ccc99f75093ea5c8dde6" -dependencies = [ - "base64", - "prost 0.11.9", - "prost-types 0.11.9", - "substreams-sink-core", -] - [[package]] name = "syn" version = "1.0.109" @@ -995,6 +1057,12 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + [[package]] name = "uint" version = "0.9.5" diff --git a/substreams/Cargo.toml b/substreams/Cargo.toml index 3ee9e46..3d65184 100644 --- a/substreams/Cargo.toml +++ b/substreams/Cargo.toml @@ -1,18 +1,17 @@ [package] name = "eth_blobs" -version = "0.7.1" +version = "0.8.0" edition = "2021" [lib] crate-type = ["cdylib"] [dependencies] -prost = "0.11" -prost-types = "0.11" -substreams = "0.5" -substreams-ethereum = "0.9" -substreams-sink-kv = "0.1.3" +prost = "0.13" +prost-types = "0.13" +substreams = "0.6" +substreams-ethereum = "0.10" # substreams-entity-change = { path = "../../../StreamingFast/substreams-sink-entity-changes/substreams-entity-change" } -substreams-entity-change = "1.3.2" +substreams-entity-change = "2" [build-dependencies] diff --git a/substreams/Taskfile.yaml b/substreams/Taskfile.yaml index fbf70e0..3624f4b 100644 --- a/substreams/Taskfile.yaml +++ b/substreams/Taskfile.yaml @@ -7,7 +7,7 @@ tasks: protogen: desc: "Generates Rust types for substreams from protobuf files" cmds: - - substreams protogen ./substreams.yaml --exclude-paths="sf/substreams,google,substreams/sink" + - substreams protogen ./substreams.yaml --exclude-paths="sf/substreams,google" build: desc: "Builds the substreams module" diff --git a/substreams/buf.gen.yaml b/substreams/buf.gen.yaml index d2e6544..2b4b3f2 100644 --- a/substreams/buf.gen.yaml +++ b/substreams/buf.gen.yaml @@ -1,12 +1,12 @@ version: v1 plugins: -- plugin: buf.build/community/neoeinstein-prost:v0.2.2 +- plugin: buf.build/community/neoeinstein-prost:v0.4.0 out: src/pb opt: - file_descriptor_set=false -- plugin: buf.build/community/neoeinstein-prost-crate:v0.3.1 +- plugin: buf.build/community/neoeinstein-prost-crate:v0.4.1 out: src/pb opt: - no_features diff --git a/substreams/src/lib.rs b/substreams/src/lib.rs index 0f36a34..206cbb7 100644 --- a/substreams/src/lib.rs +++ b/substreams/src/lib.rs @@ -2,9 +2,11 @@ mod pb; use pb::pinax::ethereum::blobs::v1::{Blob, Slot, Spec}; use pb::sf::beacon::r#type::v1::{block::Body::*, Block as BeaconBlock}; +use pb::sf::substreams::sink::kv::v1::KvOperations; use substreams::Hex; use substreams_entity_change::{pb::entity::EntityChanges, tables::Tables}; -use substreams_sink_kv::pb::sf::substreams::sink::kv::v1::KvOperations; + +use crate::pb::sf::substreams::sink::kv::v1::{kv_operation::Type, KvOperation}; #[substreams::handlers::map] fn map_blobs(blk: BeaconBlock) -> Result { @@ -60,6 +62,17 @@ fn map_blobs(blk: BeaconBlock) -> Result { }) } +impl KvOperations { + pub fn push_new, V: AsRef<[u8]>>(&mut self, key: K, value: V, ordinal: u64) { + self.operations.push(KvOperation { + key: key.as_ref().to_string(), + value: value.as_ref().to_vec(), + ordinal: ordinal, + r#type: Type::Set.into(), + }) + } +} + #[substreams::handlers::map] fn kv_out(slot: Slot) -> Result { let mut kv_ops: KvOperations = Default::default(); @@ -81,7 +94,7 @@ fn graph_out(slot: Slot) -> Result { let mut tables = Tables::new(); let timestamp = slot.timestamp.unwrap_or_default().to_string(); - let spec = Spec::from_i32(slot.spec).unwrap().as_str_name(); + let spec = Spec::try_from(slot.spec).unwrap().as_str_name(); tables .create_row("Slot", format!("{}", slot.slot)) diff --git a/substreams/src/pb/.last_generated_hash b/substreams/src/pb/.last_generated_hash new file mode 100644 index 0000000..5ec5a34 --- /dev/null +++ b/substreams/src/pb/.last_generated_hash @@ -0,0 +1 @@ +bf058ddc70735e15f0ce6618de605eec3093eca24a2c52a2afea53128d53abeb \ No newline at end of file diff --git a/substreams/src/pb/mod.rs b/substreams/src/pb/mod.rs index 62a6bb1..628f2f9 100644 --- a/substreams/src/pb/mod.rs +++ b/substreams/src/pb/mod.rs @@ -20,4 +20,15 @@ pub mod sf { } } } + pub mod substreams { + pub mod sink { + pub mod kv { + // @@protoc_insertion_point(attribute:sf.substreams.sink.kv.v1) + pub mod v1 { + include!("sf.substreams.sink.kv.v1.rs"); + // @@protoc_insertion_point(sf.substreams.sink.kv.v1) + } + } + } + } } diff --git a/substreams/src/pb/pinax.ethereum.blobs.v1.rs b/substreams/src/pb/pinax.ethereum.blobs.v1.rs index d48dfd2..3219505 100644 --- a/substreams/src/pb/pinax.ethereum.blobs.v1.rs +++ b/substreams/src/pb/pinax.ethereum.blobs.v1.rs @@ -1,4 +1,5 @@ // @generated +// This file is @generated by prost-build. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Slot { diff --git a/substreams/src/pb/sf.beacon.type.v1.rs b/substreams/src/pb/sf.beacon.type.v1.rs index 01301d9..2717372 100644 --- a/substreams/src/pb/sf.beacon.type.v1.rs +++ b/substreams/src/pb/sf.beacon.type.v1.rs @@ -1,4 +1,5 @@ // @generated +// This file is @generated by prost-build. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct Block { @@ -407,7 +408,7 @@ pub struct Withdrawal { pub gwei: u64, } #[allow(clippy::derive_partial_eq_without_eq)] -#[derive(Clone, PartialEq, ::prost::Message)] +#[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct VoluntaryExit { #[prost(uint64, tag="1")] pub epoch: u64, diff --git a/substreams/src/pb/sf.substreams.sink.kv.v1.rs b/substreams/src/pb/sf.substreams.sink.kv.v1.rs new file mode 100644 index 0000000..db1a871 --- /dev/null +++ b/substreams/src/pb/sf.substreams.sink.kv.v1.rs @@ -0,0 +1,84 @@ +// @generated +// This file is @generated by prost-build. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct KvOperations { + #[prost(message, repeated, tag="1")] + pub operations: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct KvOperation { + #[prost(string, tag="1")] + pub key: ::prost::alloc::string::String, + #[prost(bytes="vec", tag="2")] + pub value: ::prost::alloc::vec::Vec, + #[prost(uint64, tag="3")] + pub ordinal: u64, + #[prost(enumeration="kv_operation::Type", tag="4")] + pub r#type: i32, +} +/// Nested message and enum types in `KVOperation`. +pub mod kv_operation { + #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] + #[repr(i32)] + pub enum Type { + /// Protobuf default should not be used, this is used so that the consume can ensure that the value was actually specified + Unset = 0, + Set = 1, + Delete = 2, + } + impl Type { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Type::Unset => "UNSET", + Type::Set => "SET", + Type::Delete => "DELETE", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "UNSET" => Some(Self::Unset), + "SET" => Some(Self::Set), + "DELETE" => Some(Self::Delete), + _ => None, + } + } + } +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Config { + #[prost(int64, tag="1")] + pub start_block: i64, + #[prost(string, tag="2")] + pub input_module: ::prost::alloc::string::String, +} +/// This defines a KV Sink to be queried with a generic key access interface (Get, GetMany, Scan, Prefix calls). +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GenericService { + #[prost(message, optional, tag="1")] + pub sink_config: ::core::option::Option, +} +/// This defines configuration to run a WASM query service on top of the KV store being sync'd. +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct WasmQueryService { + #[prost(message, optional, tag="1")] + pub sink_config: ::core::option::Option, + /// wasm exports: "kv_get_batch", "kv_get", "kv_scan", "kv_prefix" + #[prost(bytes="vec", tag="5")] + pub wasm_query_module: ::prost::alloc::vec::Vec, + /// Fully qualified Protobuf Service definition name + /// + /// sf.mycustom.v1.MyService + #[prost(string, tag="2")] + pub grpc_service: ::prost::alloc::string::String, +} +// @@protoc_insertion_point(module) diff --git a/substreams/substreams.yaml b/substreams/substreams.yaml index d9edeb1..fcec040 100644 --- a/substreams/substreams.yaml +++ b/substreams/substreams.yaml @@ -1,9 +1,10 @@ specVersion: v0.1.0 package: name: "eth_blobs" - version: v0.7.1 + version: v0.8.0 image: ./logo.png - doc: | + url: https://github.com/pinax-network/eth-blobs + description: | This substreams package lets you stream Consensus Layer EIP-4844 blobs with attached meta data. Among the supported chains are: @@ -16,12 +17,13 @@ package: imports: beacon: https://github.com/pinax-network/firehose-beacon/releases/download/v0.7.1/beacon-v0.7.0.spkg - kv: https://github.com/streamingfast/substreams-sink-kv/releases/download/v2.1.6/substreams-sink-kv-v2.1.6.spkg - entity: https://github.com/streamingfast/substreams-sink-entity-changes/releases/download/v1.3.2/substreams-sink-entity-changes-v1.3.2.spkg + entity: https://github.com/streamingfast/substreams-sink-entity-changes/releases/download/v2.0.0/substreams-entity-change-v2.0.0.spkg protobuf: files: - pinax/ethereum/blobs/v1/blobs.proto + - substreams/sink/kv/v1/kv.proto + - substreams/sink/kv/v1/services.proto importPaths: - ../proto