From cd3ff5c3357db0aba4bcd942799463a7161f6854 Mon Sep 17 00:00:00 2001 From: anatoly yakovenko Date: Thu, 28 Mar 2019 05:59:42 -0700 Subject: [PATCH] V0.12.3, cherry pick 3523 and 3529 (#3531) * validator confirmation * validator confirmaiton * remove leader confirmaiton * hang out on progress until fork is confirmed * use the right id for delegate id * fixup! hang out on progress until fork is confirmed * fixup! use the right id for delegate id * version bump --- Cargo.lock | 296 ++++++++++++------------ Cargo.toml | 18 +- bench-streamer/Cargo.toml | 8 +- bench-tps/Cargo.toml | 14 +- client/Cargo.toml | 10 +- core/Cargo.toml | 28 +-- core/src/banking_stage.rs | 6 +- core/src/leader_confirmation_service.rs | 192 --------------- core/src/lib.rs | 1 - core/src/locktower.rs | 76 +++++- core/src/replay_stage.rs | 216 ++++++++++------- drone/Cargo.toml | 8 +- fullnode/Cargo.toml | 20 +- genesis/Cargo.toml | 6 +- keygen/Cargo.toml | 4 +- ledger-tool/Cargo.toml | 10 +- logger/Cargo.toml | 2 +- metrics/Cargo.toml | 4 +- netutil/Cargo.toml | 4 +- programs/bpf/Cargo.toml | 10 +- programs/bpf/rust/noop/Cargo.toml | 2 +- programs/bpf_loader/Cargo.toml | 6 +- programs/budget/Cargo.toml | 10 +- programs/budget_api/Cargo.toml | 4 +- programs/failure/Cargo.toml | 6 +- programs/noop/Cargo.toml | 8 +- programs/rewards/Cargo.toml | 12 +- programs/rewards_api/Cargo.toml | 6 +- programs/storage/Cargo.toml | 10 +- programs/storage_api/Cargo.toml | 4 +- programs/token/Cargo.toml | 6 +- programs/token_api/Cargo.toml | 4 +- programs/vote/Cargo.toml | 12 +- programs/vote_api/Cargo.toml | 4 +- replicator/Cargo.toml | 10 +- runtime/Cargo.toml | 16 +- sdk/Cargo.toml | 2 +- upload-perf/Cargo.toml | 4 +- vote-signer/Cargo.toml | 6 +- wallet/Cargo.toml | 20 +- 40 files changed, 497 insertions(+), 588 deletions(-) delete mode 100644 core/src/leader_confirmation_service.rs diff --git a/Cargo.lock b/Cargo.lock index e7f54269ea..c3d1c67e97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1967,7 +1967,7 @@ dependencies = [ [[package]] name = "solana" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1995,19 +1995,19 @@ dependencies = [ "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-api 0.12.2", - "solana-budget-program 0.12.2", - "solana-client 0.12.2", - "solana-drone 0.12.2", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-netutil 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-storage-api 0.12.2", - "solana-vote-api 0.12.2", - "solana-vote-program 0.12.2", - "solana-vote-signer 0.12.2", + "solana-budget-api 0.12.3", + "solana-budget-program 0.12.3", + "solana-client 0.12.3", + "solana-drone 0.12.3", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-netutil 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-storage-api 0.12.3", + "solana-vote-api 0.12.3", + "solana-vote-program 0.12.3", + "solana-vote-signer 0.12.3", "sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", "tokio 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2016,87 +2016,87 @@ dependencies = [ [[package]] name = "solana-bench-streamer" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-logger 0.12.2", - "solana-netutil 0.12.2", + "solana 0.12.3", + "solana-logger 0.12.3", + "solana-netutil 0.12.3", ] [[package]] name = "solana-bench-tps" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-client 0.12.2", - "solana-drone 0.12.2", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-sdk 0.12.2", + "solana 0.12.3", + "solana-client 0.12.3", + "solana-drone 0.12.3", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-bpf-programs" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "elf 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-bpfloader 0.12.2", - "solana-logger 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", + "solana-bpfloader 0.12.3", + "solana-logger 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", "solana_rbpf 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-bpfloader" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.50 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-sdk 0.12.2", + "solana-logger 0.12.3", + "solana-sdk 0.12.3", "solana_rbpf 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-budget-api" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", ] [[package]] name = "solana-budget-program" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-api 0.12.2", - "solana-logger 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", + "solana-budget-api 0.12.3", + "solana-logger 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-client" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2105,15 +2105,15 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-netutil 0.12.2", - "solana-sdk 0.12.2", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-netutil 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-drone" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2122,95 +2122,95 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-sdk 0.12.2", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-sdk 0.12.3", "tokio 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-failure" -version = "0.12.2" +version = "0.12.3" dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-fullnode" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-drone 0.12.2", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-netutil 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", - "solana-vote-signer 0.12.2", + "solana 0.12.3", + "solana-drone 0.12.3", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-netutil 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", + "solana-vote-signer 0.12.3", ] [[package]] name = "solana-genesis" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-sdk 0.12.2", + "solana 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-keygen" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", ] [[package]] name = "solana-ledger-tool" -version = "0.12.2" +version = "0.12.3" dependencies = [ "assert_cmd 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-logger 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", + "solana 0.12.3", + "solana-logger 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-logger" -version = "0.12.2" +version = "0.12.3" dependencies = [ "env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-metrics" -version = "0.12.2" +version = "0.12.3" dependencies = [ "influx_db_client 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", "sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "solana-netutil" -version = "0.12.2" +version = "0.12.3" dependencies = [ "ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2219,57 +2219,57 @@ dependencies = [ "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", + "solana-logger 0.12.3", ] [[package]] name = "solana-noop" -version = "0.12.2" +version = "0.12.3" dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", + "solana-logger 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-replicator" -version = "0.12.2" +version = "0.12.3" dependencies = [ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-logger 0.12.2", - "solana-netutil 0.12.2", - "solana-sdk 0.12.2", + "solana 0.12.3", + "solana-logger 0.12.3", + "solana-netutil 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-rewards-api" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", ] [[package]] name = "solana-rewards-program" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-rewards-api 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", + "solana-logger 0.12.3", + "solana-rewards-api 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", ] [[package]] name = "solana-runtime" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2284,18 +2284,18 @@ dependencies = [ "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-budget-api 0.12.2", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-sdk 0.12.2", - "solana-storage-api 0.12.2", - "solana-token-api 0.12.2", - "solana-vote-api 0.12.2", + "solana-budget-api 0.12.3", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-sdk 0.12.3", + "solana-storage-api 0.12.3", + "solana-token-api 0.12.3", + "solana-vote-api 0.12.3", ] [[package]] name = "solana-sdk" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2315,85 +2315,85 @@ dependencies = [ [[package]] name = "solana-storage-api" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", ] [[package]] name = "solana-storage-program" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-storage-api 0.12.2", + "solana-logger 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-storage-api 0.12.3", ] [[package]] name = "solana-token-api" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", ] [[package]] name = "solana-token-program" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-sdk 0.12.2", + "solana-logger 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-upload-perf" -version = "0.12.2" +version = "0.12.3" dependencies = [ "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-metrics 0.12.2", + "solana-metrics 0.12.3", ] [[package]] name = "solana-vote-api" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-sdk 0.12.2", + "solana-sdk 0.12.3", ] [[package]] name = "solana-vote-program" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-logger 0.12.2", - "solana-metrics 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", + "solana-logger 0.12.3", + "solana-metrics 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", ] [[package]] name = "solana-vote-signer" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2403,13 +2403,13 @@ dependencies = [ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana-metrics 0.12.2", - "solana-sdk 0.12.2", + "solana-metrics 0.12.3", + "solana-sdk 0.12.3", ] [[package]] name = "solana-wallet" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2418,20 +2418,20 @@ dependencies = [ "dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-budget-api 0.12.2", - "solana-budget-program 0.12.2", - "solana-client 0.12.2", - "solana-drone 0.12.2", - "solana-logger 0.12.2", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", - "solana-vote-signer 0.12.2", + "solana 0.12.3", + "solana-budget-api 0.12.3", + "solana-budget-program 0.12.3", + "solana-client 0.12.3", + "solana-drone 0.12.3", + "solana-logger 0.12.3", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", + "solana-vote-signer 0.12.3", ] [[package]] name = "solana-workspace" -version = "0.12.2" +version = "0.12.3" dependencies = [ "bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2441,14 +2441,14 @@ dependencies = [ "rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "reqwest 0.9.11 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)", - "solana 0.12.2", - "solana-budget-program 0.12.2", - "solana-client 0.12.2", - "solana-logger 0.12.2", - "solana-netutil 0.12.2", - "solana-runtime 0.12.2", - "solana-sdk 0.12.2", - "solana-vote-api 0.12.2", + "solana 0.12.3", + "solana-budget-program 0.12.3", + "solana-client 0.12.3", + "solana-logger 0.12.3", + "solana-netutil 0.12.3", + "solana-runtime 0.12.3", + "solana-sdk 0.12.3", + "solana-vote-api 0.12.3", "sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/Cargo.toml b/Cargo.toml index 577c5d9a75..2bc7c2a137 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-workspace" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -27,14 +27,14 @@ rand = "0.6.5" rayon = "1.0.0" reqwest = "0.9.11" serde_json = "1.0.39" -solana = { path = "core", version = "0.12.2" } -solana-budget-program = { path = "programs/budget", version = "0.12.2" } -solana-client = { path = "client", version = "0.12.2" } -solana-logger = { path = "logger", version = "0.12.2" } -solana-netutil = { path = "netutil", version = "0.12.2" } -solana-runtime = { path = "runtime", version = "0.12.2" } -solana-sdk = { path = "sdk", version = "0.12.2" } -solana-vote-api = { path = "programs/vote_api", version = "0.12.2" } +solana = { path = "core", version = "0.12.3" } +solana-budget-program = { path = "programs/budget", version = "0.12.3" } +solana-client = { path = "client", version = "0.12.3" } +solana-logger = { path = "logger", version = "0.12.3" } +solana-netutil = { path = "netutil", version = "0.12.3" } +solana-runtime = { path = "runtime", version = "0.12.3" } +solana-sdk = { path = "sdk", version = "0.12.3" } +solana-vote-api = { path = "programs/vote_api", version = "0.12.3" } sys-info = "0.5.6" [[bench]] diff --git a/bench-streamer/Cargo.toml b/bench-streamer/Cargo.toml index 63d65bbc75..1312f65b11 100644 --- a/bench-streamer/Cargo.toml +++ b/bench-streamer/Cargo.toml @@ -2,16 +2,16 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-bench-streamer" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" [dependencies] clap = "2.32.0" -solana = { path = "../core", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-netutil = { path = "../netutil", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-netutil = { path = "../netutil", version = "0.12.3" } [features] cuda = ["solana/cuda"] diff --git a/bench-tps/Cargo.toml b/bench-tps/Cargo.toml index df2d9d1490..06c97f98b9 100644 --- a/bench-tps/Cargo.toml +++ b/bench-tps/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-bench-tps" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,12 +11,12 @@ homepage = "https://solana.com/" clap = "2.32.0" rayon = "1.0.3" serde_json = "1.0.39" -solana = { path = "../core", version = "0.12.2" } -solana-client = { path = "../client", version = "0.12.2" } -solana-drone = { path = "../drone", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-client = { path = "../client", version = "0.12.3" } +solana-drone = { path = "../drone", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [features] cuda = ["solana/cuda"] diff --git a/client/Cargo.toml b/client/Cargo.toml index c33627a4e7..ba04b9d25a 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-client" -version = "0.12.2" +version = "0.12.3" description = "Solana Client" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,11 +14,11 @@ bs58 = "0.2.0" log = "0.4.2" reqwest = "0.9.11" serde_json = "1.0.39" -solana-metrics = { path = "../metrics", version = "0.12.2" } -solana-netutil = { path = "../netutil", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana-metrics = { path = "../metrics", version = "0.12.3" } +solana-netutil = { path = "../netutil", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [dev-dependencies] jsonrpc-core = "10.1.0" jsonrpc-http-server = "10.1.0" -solana-logger = { path = "../logger", version = "0.12.2" } +solana-logger = { path = "../logger", version = "0.12.3" } diff --git a/core/Cargo.toml b/core/Cargo.toml index 3bc739ee08..971553c32b 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "../README.md" @@ -44,17 +44,17 @@ rocksdb = "0.11.0" serde = "1.0.89" serde_derive = "1.0.88" serde_json = "1.0.39" -solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" } -solana-client = { path = "../client", version = "0.12.2" } -solana-drone = { path = "../drone", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } -solana-netutil = { path = "../netutil", version = "0.12.2" } -solana-runtime = { path = "../runtime", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-storage-api = { path = "../programs/storage_api", version = "0.12.2" } -solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" } -solana-vote-signer = { path = "../vote-signer", version = "0.12.2" } +solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" } +solana-client = { path = "../client", version = "0.12.3" } +solana-drone = { path = "../drone", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } +solana-netutil = { path = "../netutil", version = "0.12.3" } +solana-runtime = { path = "../runtime", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-storage-api = { path = "../programs/storage_api", version = "0.12.3" } +solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" } +solana-vote-signer = { path = "../vote-signer", version = "0.12.3" } sys-info = "0.5.6" tokio = "0.1" tokio-codec = "0.1" @@ -63,5 +63,5 @@ untrusted = "0.6.2" [dev-dependencies] hex-literal = "0.1.3" matches = "0.1.6" -solana-vote-program = { path = "../programs/vote", version = "0.12.2" } -solana-budget-program = { path = "../programs/budget", version = "0.12.2" } +solana-vote-program = { path = "../programs/vote", version = "0.12.3" } +solana-budget-program = { path = "../programs/budget", version = "0.12.3" } diff --git a/core/src/banking_stage.rs b/core/src/banking_stage.rs index d13deb88ee..3ec1ee6b33 100644 --- a/core/src/banking_stage.rs +++ b/core/src/banking_stage.rs @@ -4,7 +4,6 @@ use crate::cluster_info::ClusterInfo; use crate::entry::Entry; -use crate::leader_confirmation_service::LeaderConfirmationService; use crate::leader_schedule_utils; use crate::packet; use crate::packet::SharedPackets; @@ -50,10 +49,8 @@ impl BankingStage { // Once an entry has been recorded, its blockhash is registered with the bank. let exit = Arc::new(AtomicBool::new(false)); - // Single thread to compute confirmation - let lcs_handle = LeaderConfirmationService::start(&poh_recorder, exit.clone()); // Many banks that process transactions in parallel. - let mut bank_thread_hdls: Vec> = (0..4) + let bank_thread_hdls: Vec> = (0..4) .map(|_| { let verified_receiver = verified_receiver.clone(); let poh_recorder = poh_recorder.clone(); @@ -68,7 +65,6 @@ impl BankingStage { .unwrap() }) .collect(); - bank_thread_hdls.push(lcs_handle); Self { bank_thread_hdls } } diff --git a/core/src/leader_confirmation_service.rs b/core/src/leader_confirmation_service.rs deleted file mode 100644 index 5210460452..0000000000 --- a/core/src/leader_confirmation_service.rs +++ /dev/null @@ -1,192 +0,0 @@ -//! The `leader_confirmation_service` module implements the tools necessary -//! to generate a thread which regularly calculates the last confirmation times -//! observed by the leader - -use crate::poh_recorder::PohRecorder; -use solana_metrics::{influxdb, submit}; -use solana_runtime::bank::Bank; -use solana_sdk::timing; -use solana_vote_api::vote_state::VoteState; -use std::result; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::{Arc, Mutex}; -use std::thread::sleep; -use std::thread::{Builder, JoinHandle}; -use std::time::Duration; - -#[derive(Debug, PartialEq, Eq)] -pub enum ConfirmationError { - NoValidSupermajority, -} - -pub const COMPUTE_CONFIRMATION_MS: u64 = 100; -pub struct LeaderConfirmationService {} - -impl LeaderConfirmationService { - fn get_last_supermajority_timestamp( - bank: &Bank, - last_valid_validator_timestamp: u64, - ) -> result::Result { - let mut total_stake = 0; - let mut slots_and_stakes: Vec<(u64, u64)> = vec![]; - // Hold an accounts_db read lock as briefly as possible, just long enough to collect all - // the vote states - bank.vote_accounts().for_each(|(_, account)| { - total_stake += account.lamports; - let vote_state = VoteState::deserialize(&account.data).unwrap(); - if let Some(stake_and_state) = vote_state - .votes - .back() - .map(|vote| (vote.slot, account.lamports)) - { - slots_and_stakes.push(stake_and_state); - } - }); - - let super_majority_stake = (2 * total_stake) / 3; - - if let Some(last_valid_validator_timestamp) = - bank.get_confirmation_timestamp(slots_and_stakes, super_majority_stake) - { - return Ok(last_valid_validator_timestamp); - } - - if last_valid_validator_timestamp != 0 { - let now = timing::timestamp(); - submit( - influxdb::Point::new(&"leader-confirmation") - .add_field( - "duration_ms", - influxdb::Value::Integer((now - last_valid_validator_timestamp) as i64), - ) - .to_owned(), - ); - } - - Err(ConfirmationError::NoValidSupermajority) - } - - pub fn compute_confirmation(bank: &Bank, last_valid_validator_timestamp: &mut u64) { - if let Ok(super_majority_timestamp) = - Self::get_last_supermajority_timestamp(bank, *last_valid_validator_timestamp) - { - let now = timing::timestamp(); - let confirmation_ms = now - super_majority_timestamp; - - *last_valid_validator_timestamp = super_majority_timestamp; - - submit( - influxdb::Point::new(&"leader-confirmation") - .add_field( - "duration_ms", - influxdb::Value::Integer(confirmation_ms as i64), - ) - .to_owned(), - ); - } - } - - /// Create a new LeaderConfirmationService for computing confirmation. - pub fn start(poh_recorder: &Arc>, exit: Arc) -> JoinHandle<()> { - let poh_recorder = poh_recorder.clone(); - Builder::new() - .name("solana-leader-confirmation-service".to_string()) - .spawn(move || { - let mut last_valid_validator_timestamp = 0; - loop { - if exit.load(Ordering::Relaxed) { - break; - } - // dont hold this lock too long - let maybe_bank = poh_recorder.lock().unwrap().bank(); - if let Some(ref bank) = maybe_bank { - Self::compute_confirmation(bank, &mut last_valid_validator_timestamp); - } - sleep(Duration::from_millis(COMPUTE_CONFIRMATION_MS)); - } - }) - .unwrap() - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::voting_keypair::tests::{new_vote_account, push_vote}; - use bincode::serialize; - use solana_sdk::genesis_block::GenesisBlock; - use solana_sdk::hash::hash; - use solana_sdk::pubkey::Pubkey; - use solana_sdk::signature::{Keypair, KeypairUtil}; - use solana_sdk::timing::MAX_RECENT_BLOCKHASHES; - use solana_vote_api::vote_transaction::VoteTransaction; - use std::sync::Arc; - - #[test] - fn test_compute_confirmation() { - solana_logger::setup(); - - let (genesis_block, mint_keypair) = GenesisBlock::new(1234); - let mut tick_hash = genesis_block.hash(); - - let mut bank = Arc::new(Bank::new(&genesis_block)); - - // Move the bank up MAX_RECENT_BLOCKHASHES slots - for slot in 1..=MAX_RECENT_BLOCKHASHES as u64 { - let max_tick_height = slot * bank.ticks_per_slot() - 1; - - while bank.tick_height() != max_tick_height { - tick_hash = hash(&serialize(&tick_hash).unwrap()); - bank.register_tick(&tick_hash); - } - - bank = Arc::new(Bank::new_from_parent(&bank, &Pubkey::default(), slot)); - } - - let blockhash = bank.last_blockhash(); - - // Create a total of 10 vote accounts, each will have a balance of 1 (after giving 1 to - // their vote account), for a total staking pool of 10 lamports. - let vote_accounts: Vec<_> = (0..10) - .map(|i| { - // Create new validator to vote - let validator_keypair = Arc::new(Keypair::new()); - let voting_keypair = Keypair::new(); - let voting_pubkey = voting_keypair.pubkey(); - - // Give the validator some lamports - bank.transfer(2, &mint_keypair, &validator_keypair.pubkey(), blockhash) - .unwrap(); - new_vote_account(&validator_keypair, &voting_pubkey, &bank, 1); - - if i < 6 { - push_vote( - &voting_keypair, - &bank, - MAX_RECENT_BLOCKHASHES.saturating_sub(i) as u64, - ); - } - (voting_keypair, validator_keypair) - }) - .collect(); - - // There isn't 2/3 consensus, so the bank's confirmation value should be the default - let mut last_confirmation_time = 0; - LeaderConfirmationService::compute_confirmation(&bank, &mut last_confirmation_time); - assert_eq!(last_confirmation_time, 0); - - // Get another validator to vote, so we now have 2/3 consensus - let voting_keypair = &vote_accounts[7].0; - let vote_tx = VoteTransaction::new_vote( - &voting_keypair.pubkey(), - voting_keypair, - MAX_RECENT_BLOCKHASHES as u64, - blockhash, - 0, - ); - bank.process_transaction(&vote_tx).unwrap(); - - LeaderConfirmationService::compute_confirmation(&bank, &mut last_confirmation_time); - assert!(last_confirmation_time > 0); - } -} diff --git a/core/src/lib.rs b/core/src/lib.rs index 3b8e656dde..8c7c912103 100644 --- a/core/src/lib.rs +++ b/core/src/lib.rs @@ -40,7 +40,6 @@ pub mod gen_keys; pub mod gossip_service; #[cfg(feature = "kvstore")] pub mod kvstore; -pub mod leader_confirmation_service; pub mod leader_schedule; pub mod leader_schedule_utils; pub mod local_cluster; diff --git a/core/src/locktower.rs b/core/src/locktower.rs index 5f99df257e..5345d07464 100644 --- a/core/src/locktower.rs +++ b/core/src/locktower.rs @@ -20,7 +20,7 @@ pub struct EpochStakes { delegate_id: Pubkey, } -#[derive(Default)] +#[derive(Default, Debug)] pub struct StakeLockout { lockout: u64, stake: u64, @@ -57,32 +57,32 @@ impl EpochStakes { let stakes = accounts.iter().map(|(k, v)| (*k, v.lamports)).collect(); Self::new(slot, stakes, &accounts[0].0) } - pub fn new_from_bank(bank: &Bank) -> Self { + pub fn new_from_bank(bank: &Bank, my_id: &Pubkey) -> Self { let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0; let stakes = staking_utils::vote_account_balances_at_epoch(bank, bank_epoch) .expect("voting require a bank with stakes"); - Self::new(bank_epoch, stakes, &bank.collector_id()) + Self::new(bank_epoch, stakes, my_id) } } impl Locktower { - pub fn new_from_forks(bank_forks: &BankForks) -> Self { + pub fn new_from_forks(bank_forks: &BankForks, my_id: &Pubkey) -> Self { //TODO: which bank to start with? let mut frozen_banks: Vec<_> = bank_forks.frozen_banks().values().cloned().collect(); frozen_banks.sort_by_key(|b| (b.parents().len(), b.slot())); if let Some(bank) = frozen_banks.last() { - Self::new_from_bank(bank) + Self::new_from_bank(bank, my_id) } else { Self::default() } } - pub fn new_from_bank(bank: &Bank) -> Self { + pub fn new_from_bank(bank: &Bank, my_id: &Pubkey) -> Self { let current_epoch = bank.get_epoch_and_slot_index(bank.slot()).0; let mut lockouts = VoteState::default(); if let Some(iter) = staking_utils::node_staked_accounts_at_epoch(bank, current_epoch) { for (delegate_id, _, account) in iter { - if *delegate_id == bank.collector_id() { + if *delegate_id == *my_id { let state = VoteState::deserialize(&account.data).expect("votes"); if lockouts.votes.len() < state.votes.len() { //TODO: which state to init with? @@ -91,7 +91,7 @@ impl Locktower { } } } - let epoch_stakes = EpochStakes::new_from_bank(bank); + let epoch_stakes = EpochStakes::new_from_bank(bank, my_id); Self { epoch_stakes, threshold_depth: VOTE_THRESHOLD_DEPTH, @@ -124,9 +124,16 @@ impl Locktower { } let mut vote_state: VoteState = VoteState::deserialize(&account.data) .expect("bank should always have valid VoteState data"); + if key == self.epoch_stakes.delegate_id || vote_state.delegate_id == self.epoch_stakes.delegate_id { + debug!("vote state {:?}", vote_state); + debug!( + "observed slot {}", + vote_state.nth_recent_vote(0).map(|v| v.slot).unwrap_or(0) as i64 + ); + debug!("observed root {}", vote_state.root_slot.unwrap_or(0) as i64); solana_metrics::submit( influxdb::Point::new("counter-locktower-observed") .add_field( @@ -170,6 +177,20 @@ impl Locktower { stake_lockouts } + pub fn is_slot_confirmed(&self, slot: u64, lockouts: &HashMap) -> bool { + lockouts + .get(&slot) + .map(|lockout| { + (lockout.stake as f64 / self.epoch_stakes.total_staked as f64) > self.threshold_size + }) + .unwrap_or(false) + } + + pub fn is_recent_epoch(&self, bank: &Bank) -> bool { + let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0; + bank_epoch >= self.epoch_stakes.slot + } + pub fn update_epoch(&mut self, bank: &Bank) { let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0; if bank_epoch != self.epoch_stakes.slot { @@ -177,7 +198,7 @@ impl Locktower { bank_epoch > self.epoch_stakes.slot, "epoch_stakes cannot move backwards" ); - self.epoch_stakes = EpochStakes::new_from_bank(bank); + self.epoch_stakes = EpochStakes::new_from_bank(bank, &self.epoch_stakes.delegate_id); solana_metrics::submit( influxdb::Point::new("counter-locktower-epoch") .add_field( @@ -435,6 +456,43 @@ mod test { assert!(locktower.check_vote_stake_threshold(0, &stakes)); } + #[test] + fn test_is_slot_confirmed_not_enough_stake_failure() { + let locktower = Locktower::new(EpochStakes::new_for_tests(2), 1, 0.67); + let stakes = vec![( + 0, + StakeLockout { + stake: 1, + lockout: 8, + }, + )] + .into_iter() + .collect(); + assert!(!locktower.is_slot_confirmed(0, &stakes)); + } + + #[test] + fn test_is_slot_confirmed_unknown_slot() { + let locktower = Locktower::new(EpochStakes::new_for_tests(2), 1, 0.67); + let stakes = HashMap::new(); + assert!(!locktower.is_slot_confirmed(0, &stakes)); + } + + #[test] + fn test_is_slot_confirmed_pass() { + let locktower = Locktower::new(EpochStakes::new_for_tests(2), 1, 0.67); + let stakes = vec![( + 0, + StakeLockout { + stake: 2, + lockout: 8, + }, + )] + .into_iter() + .collect(); + assert!(locktower.is_slot_confirmed(0, &stakes)); + } + #[test] fn test_is_locked_out_empty() { let locktower = Locktower::new(EpochStakes::new_for_tests(2), 0, 0.67); diff --git a/core/src/replay_stage.rs b/core/src/replay_stage.rs index fbcdf75f38..c2197a27a9 100644 --- a/core/src/replay_stage.rs +++ b/core/src/replay_stage.rs @@ -6,12 +6,13 @@ use crate::blocktree_processor; use crate::cluster_info::ClusterInfo; use crate::entry::{Entry, EntryReceiver, EntrySender, EntrySlice}; use crate::leader_schedule_utils; -use crate::locktower::Locktower; +use crate::locktower::{Locktower, StakeLockout}; use crate::packet::BlobError; use crate::poh_recorder::PohRecorder; use crate::result; use crate::rpc_subscriptions::RpcSubscriptions; use crate::service::Service; +use hashbrown::HashMap; use solana_metrics::counter::Counter; use solana_metrics::influxdb; use solana_runtime::bank::Bank; @@ -20,7 +21,6 @@ use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::KeypairUtil; use solana_sdk::timing::{self, duration_as_ms}; use solana_vote_api::vote_transaction::VoteTransaction; -use std::collections::HashMap; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender}; use std::sync::{Arc, Mutex, RwLock}; @@ -52,6 +52,22 @@ pub struct ReplayStage { t_replay: JoinHandle>, } +#[derive(Default)] +struct ForkProgress { + last_entry: Hash, + num_blobs: usize, + started_ms: u64, +} +impl ForkProgress { + pub fn new(last_entry: Hash) -> Self { + Self { + last_entry, + num_blobs: 0, + started_ms: timing::timestamp(), + } + } +} + impl ReplayStage { #[allow(clippy::new_ret_no_self, clippy::too_many_arguments)] pub fn new( @@ -79,7 +95,7 @@ impl ReplayStage { let my_id = *my_id; let vote_account = *vote_account; let mut ticks_per_slot = 0; - let mut locktower = Locktower::new_from_forks(&bank_forks.read().unwrap()); + let mut locktower = Locktower::new_from_forks(&bank_forks.read().unwrap(), &my_id); // Start the replay stage loop let t_replay = Builder::new() @@ -110,12 +126,7 @@ impl ReplayStage { } let max_tick_height = (*bank_slot + 1) * bank.ticks_per_slot() - 1; if bank.tick_height() == max_tick_height { - Self::process_completed_bank( - &my_id, - bank, - &mut progress, - &slot_full_sender, - ); + Self::process_completed_bank(&my_id, bank, &slot_full_sender); } } @@ -125,65 +136,8 @@ impl ReplayStage { ticks_per_slot = bank.ticks_per_slot(); } - let locktower_start = Instant::now(); - // Locktower voting - let descendants = bank_forks.read().unwrap().descendants(); - let ancestors = bank_forks.read().unwrap().ancestors(); - let frozen_banks = bank_forks.read().unwrap().frozen_banks(); - - trace!("frozen_banks {}", frozen_banks.len()); - let mut votable: Vec<(u128, Arc)> = frozen_banks - .values() - .filter(|b| { - let is_votable = b.is_votable(); - trace!("bank is votable: {} {}", b.slot(), is_votable); - is_votable - }) - .filter(|b| { - let has_voted = locktower.has_voted(b.slot()); - trace!("bank is has_voted: {} {}", b.slot(), has_voted); - !has_voted - }) - .filter(|b| { - let is_locked_out = locktower.is_locked_out(b.slot(), &descendants); - trace!("bank is is_locked_out: {} {}", b.slot(), is_locked_out); - !is_locked_out - }) - .map(|bank| { - ( - bank, - locktower.collect_vote_lockouts( - bank.slot(), - bank.vote_accounts(), - &ancestors, - ), - ) - }) - .filter(|(b, stake_lockouts)| { - let vote_threshold = - locktower.check_vote_stake_threshold(b.slot(), &stake_lockouts); - trace!("bank vote_threshold: {} {}", b.slot(), vote_threshold); - vote_threshold - }) - .map(|(b, stake_lockouts)| { - (locktower.calculate_weight(&stake_lockouts), b.clone()) - }) - .collect(); - - votable.sort_by_key(|b| b.0); - trace!("votable_banks {}", votable.len()); - let ms = timing::duration_as_ms(&locktower_start.elapsed()); - if !votable.is_empty() { - let weights: Vec = votable.iter().map(|x| x.0).collect(); - info!( - "@{:?} locktower duration: {:?} len: {} weights: {:?}", - timing::timestamp(), - ms, - votable.len(), - weights - ); - } - inc_new_counter_info!("replay_stage-locktower_duration", ms as usize); + let votable = + Self::generate_votable_banks(&bank_forks, &locktower, &mut progress); if let Some((_, bank)) = votable.last() { subscriptions.notify_subscribers(&bank); @@ -352,10 +306,10 @@ impl ReplayStage { }); } } - pub fn replay_blocktree_into_bank( + fn replay_blocktree_into_bank( bank: &Bank, blocktree: &Blocktree, - progress: &mut HashMap, + progress: &mut HashMap, forward_entry_sender: &EntrySender, ) -> result::Result<()> { let (entries, num) = Self::load_blocktree_entries(bank, blocktree, progress)?; @@ -373,32 +327,128 @@ impl ReplayStage { Ok(()) } - pub fn load_blocktree_entries( + fn generate_votable_banks( + bank_forks: &Arc>, + locktower: &Locktower, + progress: &mut HashMap, + ) -> Vec<(u128, Arc)> { + let locktower_start = Instant::now(); + // Locktower voting + let descendants = bank_forks.read().unwrap().descendants(); + let ancestors = bank_forks.read().unwrap().ancestors(); + let frozen_banks = bank_forks.read().unwrap().frozen_banks(); + + trace!("frozen_banks {}", frozen_banks.len()); + let mut votable: Vec<(u128, Arc)> = frozen_banks + .values() + .filter(|b| { + let is_votable = b.is_votable(); + trace!("bank is votable: {} {}", b.slot(), is_votable); + is_votable + }) + .filter(|b| { + let is_recent_epoch = locktower.is_recent_epoch(b); + trace!("bank is is_recent_epoch: {} {}", b.slot(), is_recent_epoch); + is_recent_epoch + }) + .filter(|b| { + let has_voted = locktower.has_voted(b.slot()); + trace!("bank is has_voted: {} {}", b.slot(), has_voted); + !has_voted + }) + .filter(|b| { + let is_locked_out = locktower.is_locked_out(b.slot(), &descendants); + trace!("bank is is_locked_out: {} {}", b.slot(), is_locked_out); + !is_locked_out + }) + .map(|bank| { + ( + bank, + locktower.collect_vote_lockouts(bank.slot(), bank.vote_accounts(), &ancestors), + ) + }) + .filter(|(b, stake_lockouts)| { + let vote_threshold = + locktower.check_vote_stake_threshold(b.slot(), &stake_lockouts); + Self::confirm_forks(locktower, stake_lockouts, progress); + debug!("bank vote_threshold: {} {}", b.slot(), vote_threshold); + vote_threshold + }) + .map(|(b, stake_lockouts)| (locktower.calculate_weight(&stake_lockouts), b.clone())) + .collect(); + + votable.sort_by_key(|b| b.0); + let ms = timing::duration_as_ms(&locktower_start.elapsed()); + + trace!("votable_banks {}", votable.len()); + if !votable.is_empty() { + let weights: Vec = votable.iter().map(|x| x.0).collect(); + info!( + "@{:?} locktower duration: {:?} len: {} weights: {:?}", + timing::timestamp(), + ms, + votable.len(), + weights + ); + } + inc_new_counter_info!("replay_stage-locktower_duration", ms as usize); + + votable + } + + fn confirm_forks( + locktower: &Locktower, + stake_lockouts: &HashMap, + progress: &mut HashMap, + ) { + progress.retain(|slot, prog| { + let duration = timing::timestamp() - prog.started_ms; + if locktower.is_slot_confirmed(*slot, stake_lockouts) { + info!("validator fork confirmed {} {}", *slot, duration); + solana_metrics::submit( + influxdb::Point::new(&"validator-confirmation") + .add_field("duration_ms", influxdb::Value::Integer(duration as i64)) + .to_owned(), + ); + false + } else { + debug!( + "validator fork not confirmed {} {} {:?}", + *slot, + duration, + stake_lockouts.get(slot) + ); + true + } + }); + } + + fn load_blocktree_entries( bank: &Bank, blocktree: &Blocktree, - progress: &mut HashMap, + progress: &mut HashMap, ) -> result::Result<(Vec, usize)> { let bank_slot = bank.slot(); let bank_progress = &mut progress .entry(bank_slot) - .or_insert((bank.last_blockhash(), 0)); - blocktree.get_slot_entries_with_blob_count(bank_slot, bank_progress.1 as u64, None) + .or_insert(ForkProgress::new(bank.last_blockhash())); + blocktree.get_slot_entries_with_blob_count(bank_slot, bank_progress.num_blobs as u64, None) } - pub fn replay_entries_into_bank( + fn replay_entries_into_bank( bank: &Bank, entries: Vec, - progress: &mut HashMap, + progress: &mut HashMap, forward_entry_sender: &EntrySender, num: usize, ) -> result::Result<()> { let bank_progress = &mut progress .entry(bank.slot()) - .or_insert((bank.last_blockhash(), 0)); - let result = Self::verify_and_process_entries(&bank, &entries, &bank_progress.0); - bank_progress.1 += num; + .or_insert(ForkProgress::new(bank.last_blockhash())); + let result = Self::verify_and_process_entries(&bank, &entries, &bank_progress.last_entry); + bank_progress.num_blobs += num; if let Some(last_entry) = entries.last() { - bank_progress.0 = last_entry.hash; + bank_progress.last_entry = last_entry.hash; } if result.is_ok() { forward_entry_sender.send(entries)?; @@ -428,7 +478,7 @@ impl ReplayStage { fn handle_new_root( bank_forks: &Arc>, - progress: &mut HashMap, + progress: &mut HashMap, ) { let r_bank_forks = bank_forks.read().unwrap(); progress.retain(|k, _| r_bank_forks.get(*k).is_some()); @@ -437,12 +487,10 @@ impl ReplayStage { fn process_completed_bank( my_id: &Pubkey, bank: Arc, - progress: &mut HashMap, slot_full_sender: &Sender<(u64, Pubkey)>, ) { bank.freeze(); info!("bank frozen {}", bank.slot()); - progress.remove(&bank.slot()); if let Err(e) = slot_full_sender.send((bank.slot(), bank.collector_id())) { trace!("{} slot_full alert failed: {:?}", my_id, e); } @@ -668,7 +716,7 @@ mod test { let bank0 = Bank::default(); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank0))); let mut progress = HashMap::new(); - progress.insert(5, (Hash::default(), 0)); + progress.insert(5, ForkProgress::new(Hash::default())); ReplayStage::handle_new_root(&bank_forks, &mut progress); assert!(progress.is_empty()); } diff --git a/drone/Cargo.toml b/drone/Cargo.toml index 6092a1b385..00b1a3501b 100644 --- a/drone/Cargo.toml +++ b/drone/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-drone" -version = "0.12.2" +version = "0.12.3" description = "Solana Drone" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -19,9 +19,9 @@ clap = "2.31" log = "0.4.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-logger = { path = "../logger", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } tokio = "0.1" tokio-codec = "0.1" diff --git a/fullnode/Cargo.toml b/fullnode/Cargo.toml index bd2e54b869..a63a417e9a 100644 --- a/fullnode/Cargo.toml +++ b/fullnode/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-fullnode" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -12,15 +12,15 @@ homepage = "https://solana.com/" clap = "2.32.0" log = "0.4.2" serde_json = "1.0.39" -solana = { path = "../core", version = "0.12.2" } -solana-drone = { path = "../drone", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-netutil = { path = "../netutil", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } -solana-runtime = { path = "../runtime", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" } -solana-vote-signer = { path = "../vote-signer", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-drone = { path = "../drone", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-netutil = { path = "../netutil", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } +solana-runtime = { path = "../runtime", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" } +solana-vote-signer = { path = "../vote-signer", version = "0.12.3" } [features] chacha = ["solana/chacha"] diff --git a/genesis/Cargo.toml b/genesis/Cargo.toml index 6e5bc29824..b08707eb7f 100644 --- a/genesis/Cargo.toml +++ b/genesis/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-genesis" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,8 +11,8 @@ homepage = "https://solana.com/" [dependencies] clap = "2.32.0" serde_json = "1.0.39" -solana = { path = "../core", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [features] cuda = ["solana/cuda"] diff --git a/keygen/Cargo.toml b/keygen/Cargo.toml index 4c8184518a..9333676370 100644 --- a/keygen/Cargo.toml +++ b/keygen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-keygen" -version = "0.12.2" +version = "0.12.3" description = "Solana key generation utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ cuda = [] [dependencies] dirs = "1.0.5" clap = "2.31" -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [[bin]] name = "solana-keygen" diff --git a/ledger-tool/Cargo.toml b/ledger-tool/Cargo.toml index 9b88ee245f..c38c1aaf3a 100644 --- a/ledger-tool/Cargo.toml +++ b/ledger-tool/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-ledger-tool" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -11,10 +11,10 @@ homepage = "https://solana.com/" [dependencies] clap = "2.32.0" serde_json = "1.0.39" -solana = { path = "../core", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-runtime = { path = "../runtime", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-runtime = { path = "../runtime", version = "0.12.3" } [dev-dependencies] assert_cmd = "0.11" diff --git a/logger/Cargo.toml b/logger/Cargo.toml index e9d3cbb9b3..3abfceb591 100644 --- a/logger/Cargo.toml +++ b/logger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-logger" -version = "0.12.2" +version = "0.12.3" description = "Solana Logger" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/metrics/Cargo.toml b/metrics/Cargo.toml index d70f69c27e..39f627860f 100644 --- a/metrics/Cargo.toml +++ b/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-metrics" -version = "0.12.2" +version = "0.12.3" description = "Solana Metrics" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,7 +14,7 @@ log = "0.4.2" reqwest = "0.9.11" lazy_static = "1.3.0" sys-info = "0.5.6" -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [dev-dependencies] rand = "0.6.5" diff --git a/netutil/Cargo.toml b/netutil/Cargo.toml index 0cf2261200..9e2759a2e5 100644 --- a/netutil/Cargo.toml +++ b/netutil/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-netutil" -version = "0.12.2" +version = "0.12.3" description = "Solana Network Utilities" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -18,7 +18,7 @@ reqwest = "0.9.0" socket2 = "0.3.8" [dev-dependencies] -solana-logger = { path = "../logger", version = "0.12.2" } +solana-logger = { path = "../logger", version = "0.12.3" } [lib] name = "solana_netutil" diff --git a/programs/bpf/Cargo.toml b/programs/bpf/Cargo.toml index 092ae58f5f..50510b3f5a 100644 --- a/programs/bpf/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" documentation = "https://docs.rs/solana" homepage = "https://solana.com/" readme = "README.md" @@ -22,10 +22,10 @@ bincode = "1.1.2" byteorder = "1.3.1" elf = "0.0.10" solana_rbpf = "=0.1.10" -solana-bpfloader = { path = "../bpf_loader", version = "0.12.2" } -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-runtime = { path = "../../runtime", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-bpfloader = { path = "../bpf_loader", version = "0.12.3" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [[bench]] name = "bpf_loader" diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 3cc7dae5f6..b561c768cb 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "solana-bpf-rust-noop" -version = "0.12.2" +version = "0.12.3" description = "Solana BPF noop program written in Rust" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/programs/bpf_loader/Cargo.toml b/programs/bpf_loader/Cargo.toml index 7e5d4ef77e..b62db64071 100644 --- a/programs/bpf_loader/Cargo.toml +++ b/programs/bpf_loader/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bpfloader" -version = "0.12.2" +version = "0.12.3" description = "Solana BPF Loader" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -15,8 +15,8 @@ libc = "0.2.50" log = "0.4.2" solana_rbpf = "=0.1.10" serde = "1.0.89" -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_bpf_loader" diff --git a/programs/budget/Cargo.toml b/programs/budget/Cargo.toml index c450f300cd..cf24fae647 100644 --- a/programs/budget/Cargo.toml +++ b/programs/budget/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-budget-program" -version = "0.12.2" +version = "0.12.3" description = "Solana budget program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -14,12 +14,12 @@ chrono = { version = "0.4.0", features = ["serde"] } log = "0.4.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-budget-api = { path = "../budget_api", version = "0.12.2" } -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-budget-api = { path = "../budget_api", version = "0.12.3" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "solana_budget_program" diff --git a/programs/budget_api/Cargo.toml b/programs/budget_api/Cargo.toml index bb30436f1c..06d018e2cb 100644 --- a/programs/budget_api/Cargo.toml +++ b/programs/budget_api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-budget-api" -version = "0.12.2" +version = "0.12.3" description = "Solana Budget program API" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,7 +13,7 @@ bincode = "1.1.2" chrono = { version = "0.4.0", features = ["serde"] } serde = "1.0.89" serde_derive = "1.0.89" -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_budget_api" diff --git a/programs/failure/Cargo.toml b/programs/failure/Cargo.toml index d0a16fb330..20f476c95e 100644 --- a/programs/failure/Cargo.toml +++ b/programs/failure/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-failure" -version = "0.12.2" +version = "0.12.3" description = "Solana failure program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -9,11 +9,11 @@ homepage = "https://solana.com/" edition = "2018" [dependencies] -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } log = "0.4.2" [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "failure" diff --git a/programs/noop/Cargo.toml b/programs/noop/Cargo.toml index 4c2fe176ff..644deccae7 100644 --- a/programs/noop/Cargo.toml +++ b/programs/noop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-noop" -version = "0.12.2" +version = "0.12.3" description = "Solana noop program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -9,12 +9,12 @@ homepage = "https://solana.com/" edition = "2018" [dependencies] -solana-sdk = { path = "../../sdk", version = "0.12.2" } -solana-logger = { path = "../../logger", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } +solana-logger = { path = "../../logger", version = "0.12.3" } log = "0.4.2" [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "noop" diff --git a/programs/rewards/Cargo.toml b/programs/rewards/Cargo.toml index 8df3cafd90..aba04bb59e 100644 --- a/programs/rewards/Cargo.toml +++ b/programs/rewards/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rewards-program" -version = "0.12.2" +version = "0.12.3" description = "Solana rewards program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,13 +11,13 @@ edition = "2018" [dependencies] bincode = "1.1.2" log = "0.4.2" -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } -solana-rewards-api = { path = "../rewards_api", version = "0.12.2" } -solana-vote-api = { path = "../vote_api", version = "0.12.2" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } +solana-rewards-api = { path = "../rewards_api", version = "0.12.3" } +solana-vote-api = { path = "../vote_api", version = "0.12.3" } [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "solana_rewards_program" diff --git a/programs/rewards_api/Cargo.toml b/programs/rewards_api/Cargo.toml index 4db653aa75..84dcab9919 100644 --- a/programs/rewards_api/Cargo.toml +++ b/programs/rewards_api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-rewards-api" -version = "0.12.2" +version = "0.12.3" description = "Solana rewards API" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,8 +12,8 @@ edition = "2018" bincode = "1.1.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-sdk = { path = "../../sdk", version = "0.12.2" } -solana-vote-api = { path = "../vote_api", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } +solana-vote-api = { path = "../vote_api", version = "0.12.3" } [lib] name = "solana_rewards_api" diff --git a/programs/storage/Cargo.toml b/programs/storage/Cargo.toml index ee50370021..07eb1e84cb 100644 --- a/programs/storage/Cargo.toml +++ b/programs/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-program" -version = "0.12.2" +version = "0.12.3" description = "Solana storage program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,12 +13,12 @@ bincode = "1.1.2" log = "0.4.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } -solana-storage-api = { path = "../storage_api", version = "0.12.2" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } +solana-storage-api = { path = "../storage_api", version = "0.12.3" } [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "solana_storage_program" diff --git a/programs/storage_api/Cargo.toml b/programs/storage_api/Cargo.toml index 4e2a3b0ff9..89f570756f 100644 --- a/programs/storage_api/Cargo.toml +++ b/programs/storage_api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-storage-api" -version = "0.12.2" +version = "0.12.3" description = "Solana Storage program API" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2018" bincode = "1.1.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_storage_api" diff --git a/programs/token/Cargo.toml b/programs/token/Cargo.toml index 3e5a3153df..850efb6c05 100644 --- a/programs/token/Cargo.toml +++ b/programs/token/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-token-program" -version = "0.12.2" +version = "0.12.3" description = "Solana token program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,8 +13,8 @@ bincode = "1.1.2" log = "0.4.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_token_program" diff --git a/programs/token_api/Cargo.toml b/programs/token_api/Cargo.toml index bb8dd987d7..aa94fdde75 100644 --- a/programs/token_api/Cargo.toml +++ b/programs/token_api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-token-api" -version = "0.12.2" +version = "0.12.3" description = "Solana Token API" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -12,7 +12,7 @@ edition = "2018" bincode = "1.1.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_token_api" diff --git a/programs/vote/Cargo.toml b/programs/vote/Cargo.toml index 6d3d2dccd8..4b0967b2a8 100644 --- a/programs/vote/Cargo.toml +++ b/programs/vote/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-program" -version = "0.12.2" +version = "0.12.3" description = "Solana vote program" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -11,13 +11,13 @@ edition = "2018" [dependencies] bincode = "1.1.2" log = "0.4.2" -solana-logger = { path = "../../logger", version = "0.12.2" } -solana-metrics = { path = "../../metrics", version = "0.12.2" } -solana-sdk = { path = "../../sdk", version = "0.12.2" } -solana-vote-api = { path = "../vote_api", version = "0.12.2" } +solana-logger = { path = "../../logger", version = "0.12.3" } +solana-metrics = { path = "../../metrics", version = "0.12.3" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } +solana-vote-api = { path = "../vote_api", version = "0.12.3" } [dev-dependencies] -solana-runtime = { path = "../../runtime", version = "0.12.2" } +solana-runtime = { path = "../../runtime", version = "0.12.3" } [lib] name = "solana_vote_program" diff --git a/programs/vote_api/Cargo.toml b/programs/vote_api/Cargo.toml index 215252ee04..6a7253c53a 100644 --- a/programs/vote_api/Cargo.toml +++ b/programs/vote_api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-vote-api" -version = "0.12.2" +version = "0.12.3" description = "Solana Vote program API" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -13,7 +13,7 @@ bincode = "1.1.2" log = "0.4.2" serde = "1.0.89" serde_derive = "1.0.89" -solana-sdk = { path = "../../sdk", version = "0.12.2" } +solana-sdk = { path = "../../sdk", version = "0.12.3" } [lib] name = "solana_vote_api" diff --git a/replicator/Cargo.toml b/replicator/Cargo.toml index 74105b94f6..7a3d4b9fca 100644 --- a/replicator/Cargo.toml +++ b/replicator/Cargo.toml @@ -2,17 +2,17 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-replicator" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" [dependencies] clap = "2.32.0" -solana = { path = "../core", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-netutil = { path = "../netutil", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-netutil = { path = "../netutil", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } [features] chacha = ["solana/chacha"] diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 6b75d9463a..d86de5ff9b 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-runtime" -version = "0.12.2" +version = "0.12.3" description = "Solana runtime" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -22,13 +22,13 @@ rand = "0.6.5" serde = "1.0.88" serde_derive = "1.0.88" serde_json = "1.0.38" -solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-storage-api = { path = "../programs/storage_api", version = "0.12.2" } -solana-token-api = { path = "../programs/token_api", version = "0.12.2" } -solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" } +solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-storage-api = { path = "../programs/storage_api", version = "0.12.3" } +solana-token-api = { path = "../programs/token_api", version = "0.12.3" } +solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" } [lib] name = "solana_runtime" diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml index a59d3889a8..2586bedc1d 100644 --- a/sdk/Cargo.toml +++ b/sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-sdk" -version = "0.12.2" +version = "0.12.3" description = "Solana SDK" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" diff --git a/upload-perf/Cargo.toml b/upload-perf/Cargo.toml index 8a84b3c72b..cc84599ca8 100644 --- a/upload-perf/Cargo.toml +++ b/upload-perf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-upload-perf" -version = "0.12.2" +version = "0.12.3" description = "Metrics Upload Utility" authors = ["Solana Maintainers "] repository = "https://github.com/solana-labs/solana" @@ -10,7 +10,7 @@ homepage = "https://solana.com/" [dependencies] serde_json = "1.0.39" -solana-metrics = { path = "../metrics", version = "0.12.2" } +solana-metrics = { path = "../metrics", version = "0.12.3" } [[bin]] name = "solana-upload-perf" diff --git a/vote-signer/Cargo.toml b/vote-signer/Cargo.toml index aadb2bbd97..4de18abc4e 100644 --- a/vote-signer/Cargo.toml +++ b/vote-signer/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-vote-signer" description = "Solana Vote Signing Service" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -17,8 +17,8 @@ jsonrpc-derive = "10.1.0" jsonrpc-http-server = "10.1.0" serde = "1.0.89" serde_json = "1.0.39" -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-metrics = { path = "../metrics", version = "0.12.2" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-metrics = { path = "../metrics", version = "0.12.3" } [lib] name = "solana_vote_signer" diff --git a/wallet/Cargo.toml b/wallet/Cargo.toml index f7be613c44..b4d2bc4924 100644 --- a/wallet/Cargo.toml +++ b/wallet/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Solana Maintainers "] edition = "2018" name = "solana-wallet" description = "Blockchain, Rebuilt for Scale" -version = "0.12.2" +version = "0.12.3" repository = "https://github.com/solana-labs/solana" license = "Apache-2.0" homepage = "https://solana.com/" @@ -16,17 +16,17 @@ chrono = { version = "0.4.0", features = ["serde"] } dirs = "1.0.5" log = "0.4.2" serde_json = "1.0.39" -solana = { path = "../core", version = "0.12.2" } -solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" } -solana-client = { path = "../client", version = "0.12.2" } -solana-drone = { path = "../drone", version = "0.12.2" } -solana-logger = { path = "../logger", version = "0.12.2" } -solana-sdk = { path = "../sdk", version = "0.12.2" } -solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" } -solana-vote-signer = { path = "../vote-signer", version = "0.12.2" } +solana = { path = "../core", version = "0.12.3" } +solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" } +solana-client = { path = "../client", version = "0.12.3" } +solana-drone = { path = "../drone", version = "0.12.3" } +solana-logger = { path = "../logger", version = "0.12.3" } +solana-sdk = { path = "../sdk", version = "0.12.3" } +solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" } +solana-vote-signer = { path = "../vote-signer", version = "0.12.3" } [dev-dependencies] -solana-budget-program = { path = "../programs/budget", version = "0.12.2" } +solana-budget-program = { path = "../programs/budget", version = "0.12.3" } [features] cuda = ["solana/cuda"]