diff --git a/Cargo.lock b/Cargo.lock index bd1476831..760f5844e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -97,21 +97,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ba1c79677c9ce51c8d45e20845b05e6fb070ea2c863fba03ad6af2c778474bd" dependencies = [ "alloy-consensus 0.1.4", - "alloy-contract", "alloy-core", "alloy-eips 0.1.4", "alloy-genesis 0.1.4", "alloy-json-rpc 0.1.4", - "alloy-network", - "alloy-provider", - "alloy-pubsub", - "alloy-rpc-client", + "alloy-provider 0.1.4", + "alloy-rpc-client 0.1.4", "alloy-rpc-types 0.1.4", "alloy-serde 0.1.4", - "alloy-signer", + "alloy-transport-http 0.1.4", +] + +[[package]] +name = "alloy" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-consensus 0.2.1", + "alloy-contract", + "alloy-core", + "alloy-eips 0.2.1", + "alloy-genesis 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network 0.2.1", + "alloy-provider 0.2.1", + "alloy-pubsub", + "alloy-rpc-client 0.2.1", + "alloy-rpc-types 0.2.1", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", "alloy-signer-local", - "alloy-transport 0.1.4", - "alloy-transport-http", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ws", ] @@ -153,21 +170,34 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-consensus" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-eips 0.2.1", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.1", + "c-kzg", + "serde", +] + [[package]] name = "alloy-contract" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dc6957ff706f9e5f6fd42f52a93e4bce476b726c92d077b348de28c4a76730c" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", - "alloy-network", + "alloy-network 0.2.1", + "alloy-network-primitives", "alloy-primitives", - "alloy-provider", + "alloy-provider 0.2.1", "alloy-pubsub", - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.2.1", "alloy-sol-types", - "alloy-transport 0.1.4", + "alloy-transport 0.2.1", "futures", "futures-util", "thiserror", @@ -230,6 +260,20 @@ dependencies = [ "sha2", ] +[[package]] +name = "alloy-eips" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.1", + "c-kzg", + "once_cell", + "serde", + "sha2", +] + [[package]] name = "alloy-genesis" version = "0.1.0" @@ -251,6 +295,16 @@ dependencies = [ "serde", ] +[[package]] +name = "alloy-genesis" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "alloy-serde 0.2.1", + "serde", +] + [[package]] name = "alloy-json-abi" version = "0.7.7" @@ -288,6 +342,19 @@ dependencies = [ "tracing", ] +[[package]] +name = "alloy-json-rpc" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "alloy-sol-types", + "serde", + "serde_json", + "thiserror", + "tracing", +] + [[package]] name = "alloy-network" version = "0.1.4" @@ -298,9 +365,9 @@ dependencies = [ "alloy-eips 0.1.4", "alloy-json-rpc 0.1.4", "alloy-primitives", - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.1.4", "alloy-serde 0.1.4", - "alloy-signer", + "alloy-signer 0.1.4", "alloy-sol-types", "async-trait", "auto_impl", @@ -308,6 +375,36 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-network" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rpc-types-eth 0.2.1", + "alloy-serde 0.2.1", + "alloy-signer 0.2.1", + "alloy-sol-types", + "async-trait", + "auto_impl", + "futures-utils-wasm", + "thiserror", +] + +[[package]] +name = "alloy-network-primitives" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "alloy-serde 0.2.1", + "serde", +] + [[package]] name = "alloy-primitives" version = "0.7.7" @@ -340,18 +437,50 @@ dependencies = [ "alloy-consensus 0.1.4", "alloy-eips 0.1.4", "alloy-json-rpc 0.1.4", - "alloy-network", + "alloy-network 0.1.4", "alloy-primitives", - "alloy-pubsub", - "alloy-rpc-client", - "alloy-rpc-types-eth", + "alloy-rpc-client 0.1.4", + "alloy-rpc-types-eth 0.1.4", "alloy-transport 0.1.4", - "alloy-transport-http", + "alloy-transport-http 0.1.4", + "async-stream", + "async-trait", + "auto_impl", + "dashmap 5.5.3", + "futures", + "futures-utils-wasm", + "lru", + "pin-project", + "reqwest 0.12.5", + "serde", + "serde_json", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "alloy-provider" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-chains", + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-json-rpc 0.2.1", + "alloy-network 0.2.1", + "alloy-network-primitives", + "alloy-primitives", + "alloy-pubsub", + "alloy-rpc-client 0.2.1", + "alloy-rpc-types-eth 0.2.1", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ws", "async-stream", "async-trait", "auto_impl", - "dashmap", + "dashmap 6.0.1", "futures", "futures-utils-wasm", "lru", @@ -359,6 +488,7 @@ dependencies = [ "reqwest 0.12.5", "serde", "serde_json", + "thiserror", "tokio", "tracing", "url", @@ -366,13 +496,12 @@ dependencies = [ [[package]] name = "alloy-pubsub" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7341322d9bc0e49f6e9fd9f2eb8e30f73806f2dd12cbb3d6bab2694c921f87" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" dependencies = [ - "alloy-json-rpc 0.1.4", + "alloy-json-rpc 0.2.1", "alloy-primitives", - "alloy-transport 0.1.4", + "alloy-transport 0.2.1", "bimap", "futures", "serde", @@ -412,10 +541,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba31bae67773fd5a60020bea900231f8396202b7feca4d0c70c6b59308ab4a8" dependencies = [ "alloy-json-rpc 0.1.4", + "alloy-transport 0.1.4", + "alloy-transport-http 0.1.4", + "futures", + "pin-project", + "reqwest 0.12.5", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower", + "tracing", + "url", +] + +[[package]] +name = "alloy-rpc-client" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-json-rpc 0.2.1", "alloy-primitives", "alloy-pubsub", - "alloy-transport 0.1.4", - "alloy-transport-http", + "alloy-transport 0.2.1", + "alloy-transport-http 0.2.1", "alloy-transport-ws", "futures", "pin-project", @@ -453,10 +602,20 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "184a7a42c7ba9141cc9e76368356168c282c3bc3d9e5d78f3556bdfe39343447" dependencies = [ - "alloy-rpc-types-eth", + "alloy-rpc-types-eth 0.1.4", "alloy-serde 0.1.4", ] +[[package]] +name = "alloy-rpc-types" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-rpc-types-eth 0.2.1", + "alloy-serde 0.2.1", + "serde", +] + [[package]] name = "alloy-rpc-types-eth" version = "0.1.4" @@ -475,6 +634,24 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-rpc-types-eth" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-consensus 0.2.1", + "alloy-eips 0.2.1", + "alloy-network-primitives", + "alloy-primitives", + "alloy-rlp", + "alloy-serde 0.2.1", + "alloy-sol-types", + "itertools 0.13.0", + "serde", + "serde_json", + "thiserror", +] + [[package]] name = "alloy-serde" version = "0.1.0" @@ -496,6 +673,16 @@ dependencies = [ "serde_json", ] +[[package]] +name = "alloy-serde" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "serde", + "serde_json", +] + [[package]] name = "alloy-signer" version = "0.1.4" @@ -510,16 +697,28 @@ dependencies = [ "thiserror", ] +[[package]] +name = "alloy-signer" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-primitives", + "async-trait", + "auto_impl", + "elliptic-curve", + "k256", + "thiserror", +] + [[package]] name = "alloy-signer-local" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dfc9c26fe6c6f1bad818c9a976de9044dd12e1f75f1f156a801ee3e8148c1b6" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" dependencies = [ - "alloy-consensus 0.1.4", - "alloy-network", + "alloy-consensus 0.2.1", + "alloy-network 0.2.1", "alloy-primitives", - "alloy-signer", + "alloy-signer 0.2.1", "async-trait", "k256", "rand 0.8.5", @@ -636,6 +835,24 @@ dependencies = [ "url", ] +[[package]] +name = "alloy-transport" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-json-rpc 0.2.1", + "base64 0.22.1", + "futures-util", + "futures-utils-wasm", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower", + "tracing", + "url", +] + [[package]] name = "alloy-transport-http" version = "0.1.4" @@ -651,14 +868,27 @@ dependencies = [ "url", ] +[[package]] +name = "alloy-transport-http" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" +dependencies = [ + "alloy-json-rpc 0.2.1", + "alloy-transport 0.2.1", + "reqwest 0.12.5", + "serde_json", + "tower", + "tracing", + "url", +] + [[package]] name = "alloy-transport-ws" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aec83fd052684556c78c54df111433493267234d82321c2236560c752f595f20" +version = "0.2.1" +source = "git+https://github.com/bitful-pannul/alloy.git?rev=c73e70d#c73e70dab6069246bbf20162fbe17c5b11d0c668" dependencies = [ "alloy-pubsub", - "alloy-transport 0.1.4", + "alloy-transport 0.2.1", "futures", "http 1.1.0", "rustls", @@ -1878,6 +2108,20 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "dashmap" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "data-encoding" version = "2.6.0" @@ -3285,7 +3529,7 @@ name = "kinode" version = "0.9.0" dependencies = [ "aes-gcm", - "alloy", + "alloy 0.2.1", "alloy-primitives", "alloy-sol-macro", "alloy-sol-types", @@ -3296,7 +3540,7 @@ dependencies = [ "chrono", "clap", "crossterm", - "dashmap", + "dashmap 5.5.3", "flate2", "futures", "generic-array", @@ -3372,7 +3616,7 @@ name = "kinode_process_lib" version = "0.9.0" source = "git+https://github.com/kinode-dao/process_lib?tag=v0.9.0#284f202376b3cd3ce0c03aa660a006fc6187f236" dependencies = [ - "alloy", + "alloy 0.1.4", "alloy-primitives", "alloy-sol-macro", "alloy-sol-types", @@ -3394,7 +3638,7 @@ name = "kinode_process_lib" version = "0.9.0" source = "git+https://github.com/kinode-dao/process_lib?branch=develop#5c1d8ed36cf10688808c09357ef0e43225396097" dependencies = [ - "alloy", + "alloy 0.1.4", "alloy-primitives", "alloy-sol-macro", "alloy-sol-types", @@ -3513,7 +3757,7 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" name = "lib" version = "0.9.0" dependencies = [ - "alloy", + "alloy 0.2.1", "kit 0.6.8", "lazy_static", "rand 0.8.5", diff --git a/kinode/Cargo.toml b/kinode/Cargo.toml index c0e15786e..6f78be02f 100644 --- a/kinode/Cargo.toml +++ b/kinode/Cargo.toml @@ -26,7 +26,8 @@ simulation-mode = [] [dependencies] aes-gcm = "0.10.3" -alloy = { version = "0.1.3", features = [ +#alloy = { version = "0.1.3", features = [ +alloy = { git = "https://github.com/bitful-pannul/alloy.git", rev = "c73e70d", features = [ "consensus", "contract", "json-rpc", diff --git a/kinode/packages/app_store/chain/src/lib.rs b/kinode/packages/app_store/chain/src/lib.rs index 61d0b1d42..ca7ae7d3a 100644 --- a/kinode/packages/app_store/chain/src/lib.rs +++ b/kinode/packages/app_store/chain/src/lib.rs @@ -123,6 +123,7 @@ fn handle_message(our: &Address, state: &mut State, message: &Message) -> anyhow } } else { // attempt to resubscribe + println!("attempting resub"); state .kimap .provider @@ -341,6 +342,7 @@ pub fn fetch_and_subscribe_logs(our: &Address, state: &mut State) { let filter = app_store_filter(state); // get past logs, subscribe to new ones. // subscribe first so we don't miss any logs + println!("subscribing..."); state.kimap.provider.subscribe_loop(1, filter.clone()); for log in fetch_logs( &state.kimap.provider, diff --git a/kinode/packages/app_store/ui/package-lock.json b/kinode/packages/app_store/ui/package-lock.json index 54d875285..f65b58a3e 100644 --- a/kinode/packages/app_store/ui/package-lock.json +++ b/kinode/packages/app_store/ui/package-lock.json @@ -3749,6 +3749,8 @@ }, "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/napi-wasm/-/napi-wasm-1.1.0.tgz", + "integrity": "sha512-lHwIAJbmLSjF9VDRm9GoVOy9AGp3aIvkjv+Kvz9h16QR3uSVYH78PNQUnT2U4X53mhlnV2M7wrhibQ3GHicDmg==", "inBundle": true, "license": "MIT" }, diff --git a/kinode/packages/kns_indexer/kns_indexer/src/lib.rs b/kinode/packages/kns_indexer/kns_indexer/src/lib.rs index 8b32e25c2..ce61063a4 100644 --- a/kinode/packages/kns_indexer/kns_indexer/src/lib.rs +++ b/kinode/packages/kns_indexer/kns_indexer/src/lib.rs @@ -223,10 +223,8 @@ fn main(our: Address, mut state: State) -> anyhow::Result<()> { } } - if !state.listening_newblocks - && (!pending_requests.is_empty() || !pending_notes.is_empty()) - { - print_to_terminal(0, "subscribing to newHeads..."); + if !state.listening_newblocks && !pending_requests.is_empty() { + print_to_terminal(0, "subscribing to newHeads for req..."); listen_to_new_blocks_loop(); // sub_id: 3 state.listening_newblocks = true; } @@ -269,6 +267,7 @@ fn handle_eth_message( } else if e.id == 2 { eth_provider.subscribe_loop(2, notes_filter.clone()); } else if e.id == 3 { + print_to_terminal(0, "subscribing to newHeads for retry..."); listen_to_new_blocks_loop(); } } @@ -527,16 +526,15 @@ fn handle_log( .entry(block_number) .or_default() .push((decoded, 0)); + if !state.listening_newblocks { + print_to_terminal(0, "subscribing to newHeads for note..."); + listen_to_new_blocks_loop(); // sub_id: 3 + state.listening_newblocks = true; + } } } }, } - - if !state.listening_newblocks && !pending_notes.is_empty() { - print_to_terminal(0, "subscribing to newHeads..."); - listen_to_new_blocks_loop(); // sub_id: 3 - state.listening_newblocks = true; - } } } _log => { diff --git a/kinode/src/eth/mod.rs b/kinode/src/eth/mod.rs index f6c67d852..bd6802c96 100644 --- a/kinode/src/eth/mod.rs +++ b/kinode/src/eth/mod.rs @@ -507,13 +507,19 @@ async fn handle_eth_action( verbose_print( &state.print_tx, &format!( - "eth: handling {} from {}", + "eth: handling {} from {}; active_subs len: {:?}", + //"eth: handling {} from {}", match ð_action { EthAction::SubscribeLogs { .. } => "subscribe", EthAction::UnsubscribeLogs(_) => "unsubscribe", EthAction::Request { .. } => "request", }, - km.source + km.source, + state + .active_subscriptions + .iter() + .map(|v| v.len()) + .collect::>(), ), ) .await; diff --git a/kinode/src/eth/subscription.rs b/kinode/src/eth/subscription.rs index d78eac99a..7d2d5ce17 100644 --- a/kinode/src/eth/subscription.rs +++ b/kinode/src/eth/subscription.rs @@ -257,6 +257,9 @@ async fn build_subscription( ) .await; } + let alloy_sub_id = rx.local_id(); + let alloy_sub_id: alloy::primitives::U256 = alloy_sub_id.clone().into(); + println!("{target} making sub {:?}", alloy_sub_id); return Ok(Ok((rx, chain_id))); } Err(rpc_error) => { @@ -387,22 +390,12 @@ async fn maintain_local_subscription( loop { tokio::select! { _ = close_receiver.recv() => { - let alloy_sub_id = rx.local_id(); - let alloy_sub_id = alloy_sub_id.clone().into(); - let Some(chain_providers) = providers.get_mut(&chain_id) else { - return Ok(()); //? - }; - for url in chain_providers.urls.iter() { - let Some(pubsub) = url.pubsub.as_ref() else { - continue; - }; - let x = pubsub.unsubscribe(alloy_sub_id); - println!("we just tried unsubscribing unsubscribed: {:?}", x); - } + unsubscribe(rx, &chain_id, providers); return Ok(()); }, value = rx.recv() => { let Ok(value) = value else { + println!("sub failed: {:?}\r", value.unwrap_err()); break; }; let result: SubscriptionResult = match serde_json::from_str(value.get()) { @@ -433,12 +426,31 @@ async fn maintain_local_subscription( .and_modify(|sub_map| { sub_map.remove(&sub_id); }); + unsubscribe(rx, &chain_id, providers); Err(EthSubError { id: sub_id, - error: "subscription closed unexpectedly".to_string(), + error: format!("subscription ({target}) closed unexpectedly"), }) } +fn unsubscribe(rx: RawSubscription, chain_id: &u64, providers: &Providers) { + let alloy_sub_id = rx.local_id(); + let alloy_sub_id = alloy_sub_id.clone().into(); + let Some(chain_providers) = providers.get_mut(chain_id) else { + return; //? + }; + for url in chain_providers.urls.iter() { + let Some(pubsub) = url.pubsub.as_ref() else { + continue; + }; + let x = pubsub.unsubscribe(alloy_sub_id); + println!( + "we just tried unsubscribing {:?} unsubscribed: {:?}\r", + alloy_sub_id, x + ); + } +} + /// handle the subscription updates from a remote provider, /// and also perform keepalive checks on that provider. /// current keepalive is 30s, this can be adjusted as desired diff --git a/lib/Cargo.toml b/lib/Cargo.toml index c82aba34e..a3add244a 100644 --- a/lib/Cargo.toml +++ b/lib/Cargo.toml @@ -15,7 +15,8 @@ kit = { git = "https://github.com/kinode-dao/kit", tag = "v0.6.8" } tokio = "1.28" [dependencies] -alloy = { version = "0.1.3", features = [ +#alloy = { version = "0.1.3", features = [ +alloy = { git = "https://github.com/bitful-pannul/alloy.git", rev = "c73e70d", features = [ "json-rpc", "rpc-types", "rpc-types-eth",