Compare commits

..

11 Commits

Author SHA1 Message Date
anatoly yakovenko
cd3ff5c335 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
2019-03-28 05:59:42 -07:00
Pankaj Garg
e55249e63f propagate TESTNET_DB_HOST env variable to next step in buildkite 2019-03-26 15:00:33 -07:00
Pankaj Garg
10bc0c6ee2 Add provisions to specify a database server in testnet manager buildkite 2019-03-26 15:00:33 -07:00
Anatoly Yakovenko
ed14b78d81 also check the delegate_id 2019-03-26 13:44:53 -07:00
Rob Walker
7f404941bb remove status_cache.freeze (#3509) 2019-03-26 12:10:46 -07:00
anatoly yakovenko
6d45ac1bc7 Record the current nodes locktower votes from the bank (#3502)
* observed_locktower_stats

* fixup! observed_locktower_stats
2019-03-26 11:45:59 -07:00
Rob Walker
fabb6d2092 delay freeze of status_cache until squash (#3503) 2019-03-26 11:37:38 -07:00
Pankaj Garg
93cea4c86c Remove rewards crate from publishing script 2019-03-25 21:34:54 -07:00
Pankaj Garg
5fb35f79c3 Added stats for locktower in testnet dashboard 2019-03-25 21:11:37 -07:00
Pankaj Garg
da11274b63 Add support for influx cloud 2019-03-25 21:11:37 -07:00
Pankaj Garg
5d70e2efa9 0.12.2 2019-03-25 20:38:48 -07:00
45 changed files with 801 additions and 615 deletions

296
Cargo.lock generated
View File

@@ -1967,7 +1967,7 @@ dependencies = [
[[package]]
name = "solana"
version = "0.12.1"
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.1",
"solana-budget-program 0.12.1",
"solana-client 0.12.1",
"solana-drone 0.12.1",
"solana-logger 0.12.1",
"solana-metrics 0.12.1",
"solana-netutil 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-storage-api 0.12.1",
"solana-vote-api 0.12.1",
"solana-vote-program 0.12.1",
"solana-vote-signer 0.12.1",
"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.1"
version = "0.12.3"
dependencies = [
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.12.1",
"solana-logger 0.12.1",
"solana-netutil 0.12.1",
"solana 0.12.3",
"solana-logger 0.12.3",
"solana-netutil 0.12.3",
]
[[package]]
name = "solana-bench-tps"
version = "0.12.1"
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.1",
"solana-client 0.12.1",
"solana-drone 0.12.1",
"solana-logger 0.12.1",
"solana-metrics 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-logger 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-budget-program"
version = "0.12.1"
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.1",
"solana-logger 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-metrics 0.12.1",
"solana-netutil 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-metrics 0.12.1",
"solana-sdk 0.12.1",
"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.1"
version = "0.12.3"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-runtime 0.12.3",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-fullnode"
version = "0.12.1"
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.1",
"solana-drone 0.12.1",
"solana-logger 0.12.1",
"solana-metrics 0.12.1",
"solana-netutil 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-vote-api 0.12.1",
"solana-vote-signer 0.12.1",
"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.1"
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.1",
"solana-sdk 0.12.1",
"solana 0.12.3",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-keygen"
version = "0.12.1"
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.1",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-ledger-tool"
version = "0.12.1"
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.1",
"solana-logger 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1"
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.1",
"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.1"
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.1",
"solana-logger 0.12.3",
]
[[package]]
name = "solana-noop"
version = "0.12.1"
version = "0.12.3"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-logger 0.12.3",
"solana-runtime 0.12.3",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-replicator"
version = "0.12.1"
version = "0.12.3"
dependencies = [
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.12.1",
"solana-logger 0.12.1",
"solana-netutil 0.12.1",
"solana-sdk 0.12.1",
"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.1"
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.1",
"solana-vote-api 0.12.1",
"solana-sdk 0.12.3",
"solana-vote-api 0.12.3",
]
[[package]]
name = "solana-rewards-program"
version = "0.12.1"
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.1",
"solana-rewards-api 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-vote-api 0.12.1",
"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.1"
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.1",
"solana-logger 0.12.1",
"solana-metrics 0.12.1",
"solana-sdk 0.12.1",
"solana-storage-api 0.12.1",
"solana-token-api 0.12.1",
"solana-vote-api 0.12.1",
"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.1"
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.1"
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.1",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-storage-program"
version = "0.12.1"
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.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-storage-api 0.12.1",
"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.1"
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.1",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-token-program"
version = "0.12.1"
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.1",
"solana-sdk 0.12.1",
"solana-logger 0.12.3",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-upload-perf"
version = "0.12.1"
version = "0.12.3"
dependencies = [
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-metrics 0.12.1",
"solana-metrics 0.12.3",
]
[[package]]
name = "solana-vote-api"
version = "0.12.1"
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.1",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-vote-program"
version = "0.12.1"
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.1",
"solana-metrics 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-vote-api 0.12.1",
"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.1"
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.1",
"solana-sdk 0.12.1",
"solana-metrics 0.12.3",
"solana-sdk 0.12.3",
]
[[package]]
name = "solana-wallet"
version = "0.12.1"
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.1",
"solana-budget-api 0.12.1",
"solana-budget-program 0.12.1",
"solana-client 0.12.1",
"solana-drone 0.12.1",
"solana-logger 0.12.1",
"solana-sdk 0.12.1",
"solana-vote-api 0.12.1",
"solana-vote-signer 0.12.1",
"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.1"
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.1",
"solana-budget-program 0.12.1",
"solana-client 0.12.1",
"solana-logger 0.12.1",
"solana-netutil 0.12.1",
"solana-runtime 0.12.1",
"solana-sdk 0.12.1",
"solana-vote-api 0.12.1",
"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)",
]

View File

@@ -1,7 +1,7 @@
[package]
name = "solana-workspace"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-budget-program = { path = "programs/budget", version = "0.12.1" }
solana-client = { path = "client", version = "0.12.1" }
solana-logger = { path = "logger", version = "0.12.1" }
solana-netutil = { path = "netutil", version = "0.12.1" }
solana-runtime = { path = "runtime", version = "0.12.1" }
solana-sdk = { path = "sdk", version = "0.12.1" }
solana-vote-api = { path = "programs/vote_api", version = "0.12.1" }
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]]

View File

@@ -2,16 +2,16 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-streamer"
version = "0.12.1"
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.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-netutil = { path = "../netutil", version = "0.12.1" }
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"]

View File

@@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-tps"
version = "0.12.1"
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.1" }
solana-client = { path = "../client", version = "0.12.1" }
solana-drone = { path = "../drone", version = "0.12.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
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"]

View File

@@ -18,9 +18,9 @@ CRATES=(
metrics
client
drone
programs/{budget_api,rewards_api,storage_api,token_api,vote_api}
programs/{budget_api,storage_api,token_api,vote_api}
runtime
programs/{budget,bpf_loader,vote,rewards,storage,token,vote}
programs/{budget,bpf_loader,storage,token,vote}
vote-signer
core
fullnode

View File

@@ -64,6 +64,10 @@ EOF
exit 0
fi
if [[ -n $TESTNET_DB_HOST ]]; then
SOLANA_METRICS_PARTIAL_CONFIG="host=$TESTNET_DB_HOST,$SOLANA_METRICS_PARTIAL_CONFIG"
fi
export SOLANA_METRICS_CONFIG="db=$TESTNET,$SOLANA_METRICS_PARTIAL_CONFIG"
echo "SOLANA_METRICS_CONFIG: $SOLANA_METRICS_CONFIG"
source scripts/configure-metrics.sh
@@ -102,6 +106,7 @@ steps:
env:
TESTNET: "$TESTNET"
TESTNET_OP: "$TESTNET_OP"
TESTNET_DB_HOST: "$TESTNET_DB_HOST"
EOF
) | buildkite-agent pipeline upload
exit 0

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-client"
version = "0.12.1"
version = "0.12.3"
description = "Solana Client"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-netutil = { path = "../netutil", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
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.1" }
solana-logger = { path = "../logger", version = "0.12.3" }

View File

@@ -1,7 +1,7 @@
[package]
name = "solana"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-client = { path = "../client", version = "0.12.1" }
solana-drone = { path = "../drone", version = "0.12.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
solana-netutil = { path = "../netutil", version = "0.12.1" }
solana-runtime = { path = "../runtime", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-storage-api = { path = "../programs/storage_api", version = "0.12.1" }
solana-vote-api = { path = "../programs/vote_api", version = "0.12.1" }
solana-vote-signer = { path = "../vote-signer", version = "0.12.1" }
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.1" }
solana-budget-program = { path = "../programs/budget", version = "0.12.1" }
solana-vote-program = { path = "../programs/vote", version = "0.12.3" }
solana-budget-program = { path = "../programs/budget", version = "0.12.3" }

View File

@@ -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<JoinHandle<()>> = (0..4)
let bank_thread_hdls: Vec<JoinHandle<()>> = (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 }
}

View File

@@ -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<u64, ConfirmationError> {
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<Mutex<PohRecorder>>, exit: Arc<AtomicBool>) -> 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);
}
}

View File

@@ -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;

View File

@@ -17,9 +17,10 @@ pub struct EpochStakes {
stakes: HashMap<Pubkey, u64>,
self_staked: u64,
total_staked: u64,
delegate_id: Pubkey,
}
#[derive(Default)]
#[derive(Default, Debug)]
pub struct StakeLockout {
lockout: u64,
stake: u64,
@@ -34,14 +35,15 @@ pub struct Locktower {
}
impl EpochStakes {
pub fn new(slot: u64, stakes: HashMap<Pubkey, u64>, self_id: &Pubkey) -> Self {
pub fn new(slot: u64, stakes: HashMap<Pubkey, u64>, delegate_id: &Pubkey) -> Self {
let total_staked = stakes.values().sum();
let self_staked = *stakes.get(&self_id).unwrap_or(&0);
let self_staked = *stakes.get(&delegate_id).unwrap_or(&0);
Self {
slot,
stakes,
total_staked,
self_staked,
delegate_id: *delegate_id,
}
}
pub fn new_for_tests(lamports: u64) -> Self {
@@ -55,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?
@@ -89,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,
@@ -122,6 +124,31 @@ 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(
"slot",
influxdb::Value::Integer(
vote_state.nth_recent_vote(0).map(|v| v.slot).unwrap_or(0) as i64,
),
)
.add_field(
"root",
influxdb::Value::Integer(vote_state.root_slot.unwrap_or(0) as i64),
)
.to_owned(),
);
}
let start_root = vote_state.root_slot;
vote_state.process_vote(Vote { slot: bank_slot });
for vote in &vote_state.votes {
@@ -150,6 +177,20 @@ impl Locktower {
stake_lockouts
}
pub fn is_slot_confirmed(&self, slot: u64, lockouts: &HashMap<u64, StakeLockout>) -> 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 {
@@ -157,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(
@@ -415,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);

View File

@@ -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<result::Result<()>>,
}
#[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<T>(
@@ -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<Bank>)> = 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<u128> = 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<u64, (Hash, usize)>,
progress: &mut HashMap<u64, ForkProgress>,
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<RwLock<BankForks>>,
locktower: &Locktower,
progress: &mut HashMap<u64, ForkProgress>,
) -> Vec<(u128, Arc<Bank>)> {
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<Bank>)> = 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<u128> = 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<u64, StakeLockout>,
progress: &mut HashMap<u64, ForkProgress>,
) {
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<u64, (Hash, usize)>,
progress: &mut HashMap<u64, ForkProgress>,
) -> result::Result<(Vec<Entry>, 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<Entry>,
progress: &mut HashMap<u64, (Hash, usize)>,
progress: &mut HashMap<u64, ForkProgress>,
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<RwLock<BankForks>>,
progress: &mut HashMap<u64, (Hash, usize)>,
progress: &mut HashMap<u64, ForkProgress>,
) {
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<Bank>,
progress: &mut HashMap<u64, (Hash, usize)>,
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());
}

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-drone"
version = "0.12.1"
version = "0.12.3"
description = "Solana Drone"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
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"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-fullnode"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-drone = { path = "../drone", version = "0.12.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-netutil = { path = "../netutil", version = "0.12.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
solana-runtime = { path = "../runtime", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-vote-api = { path = "../programs/vote_api", version = "0.12.1" }
solana-vote-signer = { path = "../vote-signer", version = "0.12.1" }
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"]

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-genesis"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana = { path = "../core", version = "0.12.3" }
solana-sdk = { path = "../sdk", version = "0.12.3" }
[features]
cuda = ["solana/cuda"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-keygen"
version = "0.12.1"
version = "0.12.3"
description = "Solana key generation utility"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../sdk", version = "0.12.3" }
[[bin]]
name = "solana-keygen"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-ledger-tool"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-runtime = { path = "../runtime", version = "0.12.1" }
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"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-logger"
version = "0.12.1"
version = "0.12.3"
description = "Solana Logger"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-metrics"
version = "0.12.1"
version = "0.12.3"
description = "Solana Metrics"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../sdk", version = "0.12.3" }
[dev-dependencies]
rand = "0.6.5"

View File

@@ -15,8 +15,8 @@
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 251,
"iteration": 1549301870214,
"id": 399,
"iteration": 1553559957575,
"links": [
{
"asDropdown": true,
@@ -3811,7 +3811,7 @@
"x": 0,
"y": 49
},
"id": 42,
"id": 34,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -4001,7 +4001,7 @@
"x": 12,
"y": 49
},
"id": 41,
"id": 35,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -4156,7 +4156,7 @@
"x": 0,
"y": 54
},
"id": 34,
"id": 36,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -4496,7 +4496,7 @@
"x": 12,
"y": 54
},
"id": 40,
"id": 37,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -4727,7 +4727,7 @@
"x": 0,
"y": 60
},
"id": 35,
"id": 38,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -4997,7 +4997,7 @@
"x": 12,
"y": 60
},
"id": 43,
"id": 39,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -5100,6 +5100,249 @@
"alignLevel": null
}
},
{
"aliasColors": {
"cluster-info.repair": "#ba43a9",
"counter-replay_stage-new_leader.last": "#00ffbb",
"window-service.receive": "#b7dbab",
"window-stage.consumed": "#5195ce"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "Solana Metrics (read-only)",
"fill": 1,
"gridPos": {
"h": 6,
"w": 12,
"x": 0,
"y": 66
},
"id": 44,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": true,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "counter-cluster_info-vote-count",
"orderByTime": "ASC",
"policy": "autogen",
"query": "SELECT last(\"latest\") - last(\"root\") FROM \"$testnet\".\"autogen\".\"counter-locktower-vote\" WHERE host_id =~ /$hostid/ AND $timeFilter GROUP BY time($__interval)",
"rawQuery": true,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"count"
],
"type": "field"
},
{
"params": [],
"type": "sum"
}
]
],
"tags": []
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Locktower Distance in Latest and Root Slot ($hostid)",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"cluster-info.repair": "#ba43a9",
"counter-locktower-vote.last": "#00ffbb",
"counter-replay_stage-new_leader.last": "#00ffbb",
"window-service.receive": "#b7dbab",
"window-stage.consumed": "#5195ce"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "Solana Metrics (read-only)",
"fill": 1,
"gridPos": {
"h": 6,
"w": 12,
"x": 12,
"y": 66
},
"id": 45,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": false,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 2,
"points": true,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"null"
],
"type": "fill"
}
],
"measurement": "counter-cluster_info-vote-count",
"orderByTime": "ASC",
"policy": "autogen",
"query": "SELECT last(\"root\") FROM \"$testnet\".\"autogen\".\"counter-locktower-vote\" WHERE host_id =~ /$hostid/ AND $timeFilter GROUP BY time($__interval)",
"rawQuery": true,
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"count"
],
"type": "field"
},
{
"params": [],
"type": "sum"
}
]
],
"tags": []
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "Locktower Root Slot ($hostid)",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
@@ -5111,9 +5354,9 @@
"h": 5,
"w": 12,
"x": 0,
"y": 66
"y": 72
},
"id": 36,
"id": 40,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -5343,9 +5586,9 @@
"h": 5,
"w": 12,
"x": 12,
"y": 66
"y": 72
},
"id": 38,
"id": 41,
"legend": {
"alignAsTable": false,
"avg": false,
@@ -5496,9 +5739,9 @@
"h": 1,
"w": 24,
"x": 0,
"y": 71
"y": 77
},
"id": 44,
"id": 42,
"panels": [],
"title": "Signature Verification",
"type": "row"
@@ -5514,9 +5757,9 @@
"h": 5,
"w": 12,
"x": 0,
"y": 72
"y": 78
},
"id": 45,
"id": 43,
"legend": {
"avg": false,
"current": false,
@@ -5701,5 +5944,5 @@
"timezone": "",
"title": "Testnet Monitor (edge)",
"uid": "testnet-edge",
"version": 116
"version": 117
}

View File

@@ -12,11 +12,12 @@ usage() {
echo "Error: $*"
fi
cat <<EOF
usage: $0 [-e] [-d] [username]
usage: $0 [-e] [-d] [-c] [username]
Creates a testnet dev metrics database
username InfluxDB user with access to create a new database
-c Use Influx Cloud instance
-d Delete the database instead of creating it
-e Assume database already exists and SOLANA_METRICS_CONFIG is
defined in the environment already
@@ -29,12 +30,16 @@ loadConfigFile
useEnv=false
delete=false
while getopts "hde" opt; do
host="https://metrics.solana.com:8086"
while getopts "hcde" opt; do
case $opt in
h|\?)
usage
exit 0
;;
c)
host="https://clocktower-f1d56615.influxcloud.net:8086"
;;
d)
delete=true
;;
@@ -62,7 +67,7 @@ else
query() {
echo "$*"
curl -XPOST \
"https://metrics.solana.com:8086/query?u=${username}&p=${password}" \
"$host/query?u=${username}&p=${password}" \
--data-urlencode "q=$*"
}
@@ -73,7 +78,7 @@ else
query "GRANT READ ON \"$netBasename\" TO \"ro\""
query "GRANT WRITE ON \"$netBasename\" TO \"scratch_writer\""
SOLANA_METRICS_CONFIG="db=$netBasename,u=scratch_writer,p=topsecret"
SOLANA_METRICS_CONFIG="host=$host,db=$netBasename,u=scratch_writer,p=topsecret"
fi
echo "export SOLANA_METRICS_CONFIG=\"$SOLANA_METRICS_CONFIG\"" >> "$configFile"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-netutil"
version = "0.12.1"
version = "0.12.3"
description = "Solana Network Utilities"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-logger = { path = "../logger", version = "0.12.3" }
[lib]
name = "solana_netutil"

View File

@@ -1,7 +1,7 @@
[package]
name = "solana-bpf-programs"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-logger = { path = "../../logger", version = "0.12.1" }
solana-runtime = { path = "../../runtime", version = "0.12.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
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"

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-noop"
version = "0.12.1"
version = "0.12.3"
description = "Solana BPF noop program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-bpfloader"
version = "0.12.1"
version = "0.12.3"
description = "Solana BPF Loader"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
solana-logger = { path = "../../logger", version = "0.12.3" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_bpf_loader"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-budget-program"
version = "0.12.1"
version = "0.12.3"
description = "Solana budget program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-logger = { path = "../../logger", version = "0.12.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
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.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "solana_budget_program"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-budget-api"
version = "0.12.1"
version = "0.12.3"
description = "Solana Budget program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_budget_api"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-failure"
version = "0.12.1"
version = "0.12.3"
description = "Solana failure program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
log = "0.4.2"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.12.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "failure"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-noop"
version = "0.12.1"
version = "0.12.3"
description = "Solana noop program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-logger = { path = "../../logger", version = "0.12.1" }
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.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "noop"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-rewards-program"
version = "0.12.1"
version = "0.12.3"
description = "Solana rewards program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
solana-rewards-api = { path = "../rewards_api", version = "0.12.1" }
solana-vote-api = { path = "../vote_api", version = "0.12.1" }
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.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "solana_rewards_program"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-rewards-api"
version = "0.12.1"
version = "0.12.3"
description = "Solana rewards API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-vote-api = { path = "../vote_api", version = "0.12.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
solana-vote-api = { path = "../vote_api", version = "0.12.3" }
[lib]
name = "solana_rewards_api"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-storage-program"
version = "0.12.1"
version = "0.12.3"
description = "Solana storage program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
solana-storage-api = { path = "../storage_api", version = "0.12.1" }
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.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "solana_storage_program"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-storage-api"
version = "0.12.1"
version = "0.12.3"
description = "Solana Storage program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_storage_api"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-token-program"
version = "0.12.1"
version = "0.12.3"
description = "Solana token program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
solana-logger = { path = "../../logger", version = "0.12.3" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_token_program"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-token-api"
version = "0.12.1"
version = "0.12.3"
description = "Solana Token API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_token_api"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-vote-program"
version = "0.12.1"
version = "0.12.3"
description = "Solana vote program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-metrics = { path = "../../metrics", version = "0.12.1" }
solana-sdk = { path = "../../sdk", version = "0.12.1" }
solana-vote-api = { path = "../vote_api", version = "0.12.1" }
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.1" }
solana-runtime = { path = "../../runtime", version = "0.12.3" }
[lib]
name = "solana_vote_program"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-vote-api"
version = "0.12.1"
version = "0.12.3"
description = "Solana Vote program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-sdk = { path = "../../sdk", version = "0.12.3" }
[lib]
name = "solana_vote_api"

View File

@@ -2,17 +2,17 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-replicator"
version = "0.12.1"
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.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-netutil = { path = "../netutil", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
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"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-runtime"
version = "0.12.1"
version = "0.12.3"
description = "Solana runtime"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-storage-api = { path = "../programs/storage_api", version = "0.12.1" }
solana-token-api = { path = "../programs/token_api", version = "0.12.1" }
solana-vote-api = { path = "../programs/vote_api", version = "0.12.1" }
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"

View File

@@ -289,7 +289,7 @@ impl Bank {
// freeze is a one-way trip, idempotent
*hash = self.hash_internal_state();
}
self.status_cache.write().unwrap().freeze();
// self.status_cache.write().unwrap().freeze();
}
/// squash the parent's state up into this Bank,
@@ -304,7 +304,11 @@ impl Bank {
let parent_caches: Vec<_> = parents
.iter()
.map(|b| b.status_cache.read().unwrap())
.map(|p| {
let mut parent = p.status_cache.write().unwrap();
parent.freeze();
parent
})
.collect();
self.status_cache.write().unwrap().squash(&parent_caches);
}

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-sdk"
version = "0.12.1"
version = "0.12.3"
description = "Solana SDK"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-upload-perf"
version = "0.12.1"
version = "0.12.3"
description = "Metrics Upload Utility"
authors = ["Solana Maintainers <maintainers@solana.com>"]
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.1" }
solana-metrics = { path = "../metrics", version = "0.12.3" }
[[bin]]
name = "solana-upload-perf"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-vote-signer"
description = "Solana Vote Signing Service"
version = "0.12.1"
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.1" }
solana-metrics = { path = "../metrics", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.3" }
solana-metrics = { path = "../metrics", version = "0.12.3" }
[lib]
name = "solana_vote_signer"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-wallet"
description = "Blockchain, Rebuilt for Scale"
version = "0.12.1"
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.1" }
solana-budget-api = { path = "../programs/budget_api", version = "0.12.1" }
solana-client = { path = "../client", version = "0.12.1" }
solana-drone = { path = "../drone", version = "0.12.1" }
solana-logger = { path = "../logger", version = "0.12.1" }
solana-sdk = { path = "../sdk", version = "0.12.1" }
solana-vote-api = { path = "../programs/vote_api", version = "0.12.1" }
solana-vote-signer = { path = "../vote-signer", version = "0.12.1" }
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.1" }
solana-budget-program = { path = "../programs/budget", version = "0.12.3" }
[features]
cuda = ["solana/cuda"]