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
This commit is contained in:
committed by
GitHub
parent
e55249e63f
commit
cd3ff5c335
296
Cargo.lock
generated
296
Cargo.lock
generated
@ -1967,7 +1967,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana"
|
name = "solana"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-budget-api 0.12.2",
|
"solana-budget-api 0.12.3",
|
||||||
"solana-budget-program 0.12.2",
|
"solana-budget-program 0.12.3",
|
||||||
"solana-client 0.12.2",
|
"solana-client 0.12.3",
|
||||||
"solana-drone 0.12.2",
|
"solana-drone 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-storage-api 0.12.2",
|
"solana-storage-api 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
"solana-vote-program 0.12.2",
|
"solana-vote-program 0.12.3",
|
||||||
"solana-vote-signer 0.12.2",
|
"solana-vote-signer 0.12.3",
|
||||||
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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 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)",
|
"tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2016,87 +2016,87 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bench-streamer"
|
name = "solana-bench-streamer"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bench-tps"
|
name = "solana-bench-tps"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-client 0.12.2",
|
"solana-client 0.12.3",
|
||||||
"solana-drone 0.12.2",
|
"solana-drone 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bpf-programs"
|
name = "solana-bpf-programs"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"elf 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-bpfloader 0.12.2",
|
"solana-bpfloader 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana_rbpf 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bpfloader"
|
name = "solana-bpfloader"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana_rbpf 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"solana_rbpf 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-budget-api"
|
name = "solana-budget-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-budget-program"
|
name = "solana-budget-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-budget-api 0.12.2",
|
"solana-budget-api 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-client"
|
name = "solana-client"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-drone"
|
name = "solana-drone"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"tokio 0.1.15 (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)",
|
"tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-failure"
|
name = "solana-failure"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log 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)",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-fullnode"
|
name = "solana-fullnode"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-drone 0.12.2",
|
"solana-drone 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
"solana-vote-signer 0.12.2",
|
"solana-vote-signer 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-genesis"
|
name = "solana-genesis"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-ledger-tool"
|
name = "solana-ledger-tool"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-logger"
|
name = "solana-logger"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-metrics"
|
name = "solana-metrics"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"influx_db_client 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-netutil"
|
name = "solana-netutil"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ipnetwork 0.12.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"socket2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-noop"
|
name = "solana-noop"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log 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)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-replicator"
|
name = "solana-replicator"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-rewards-api"
|
name = "solana-rewards-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-rewards-program"
|
name = "solana-rewards-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-rewards-api 0.12.2",
|
"solana-rewards-api 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-runtime"
|
name = "solana-runtime"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-budget-api 0.12.2",
|
"solana-budget-api 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-storage-api 0.12.2",
|
"solana-storage-api 0.12.3",
|
||||||
"solana-token-api 0.12.2",
|
"solana-token-api 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-sdk"
|
name = "solana-sdk"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2315,85 +2315,85 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-storage-api"
|
name = "solana-storage-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-storage-program"
|
name = "solana-storage-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-storage-api 0.12.2",
|
"solana-storage-api 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-token-api"
|
name = "solana-token-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-token-program"
|
name = "solana-token-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-upload-perf"
|
name = "solana-upload-perf"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_json 1.0.39 (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-metrics 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-api"
|
name = "solana-vote-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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 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_derive 1.0.89 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-program"
|
name = "solana-vote-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-signer"
|
name = "solana-vote-signer"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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 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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-metrics 0.12.2",
|
"solana-metrics 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-wallet"
|
name = "solana-wallet"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-budget-api 0.12.2",
|
"solana-budget-api 0.12.3",
|
||||||
"solana-budget-program 0.12.2",
|
"solana-budget-program 0.12.3",
|
||||||
"solana-client 0.12.2",
|
"solana-client 0.12.3",
|
||||||
"solana-drone 0.12.2",
|
"solana-drone 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
"solana-vote-signer 0.12.2",
|
"solana-vote-signer 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-workspace"
|
name = "solana-workspace"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"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)",
|
"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)",
|
"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)",
|
"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)",
|
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.12.2",
|
"solana 0.12.3",
|
||||||
"solana-budget-program 0.12.2",
|
"solana-budget-program 0.12.3",
|
||||||
"solana-client 0.12.2",
|
"solana-client 0.12.3",
|
||||||
"solana-logger 0.12.2",
|
"solana-logger 0.12.3",
|
||||||
"solana-netutil 0.12.2",
|
"solana-netutil 0.12.3",
|
||||||
"solana-runtime 0.12.2",
|
"solana-runtime 0.12.3",
|
||||||
"solana-sdk 0.12.2",
|
"solana-sdk 0.12.3",
|
||||||
"solana-vote-api 0.12.2",
|
"solana-vote-api 0.12.3",
|
||||||
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
18
Cargo.toml
18
Cargo.toml
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-workspace"
|
name = "solana-workspace"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
documentation = "https://docs.rs/solana"
|
documentation = "https://docs.rs/solana"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@ -27,14 +27,14 @@ rand = "0.6.5"
|
|||||||
rayon = "1.0.0"
|
rayon = "1.0.0"
|
||||||
reqwest = "0.9.11"
|
reqwest = "0.9.11"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "core", version = "0.12.2" }
|
solana = { path = "core", version = "0.12.3" }
|
||||||
solana-budget-program = { path = "programs/budget", version = "0.12.2" }
|
solana-budget-program = { path = "programs/budget", version = "0.12.3" }
|
||||||
solana-client = { path = "client", version = "0.12.2" }
|
solana-client = { path = "client", version = "0.12.3" }
|
||||||
solana-logger = { path = "logger", version = "0.12.2" }
|
solana-logger = { path = "logger", version = "0.12.3" }
|
||||||
solana-netutil = { path = "netutil", version = "0.12.2" }
|
solana-netutil = { path = "netutil", version = "0.12.3" }
|
||||||
solana-runtime = { path = "runtime", version = "0.12.2" }
|
solana-runtime = { path = "runtime", version = "0.12.3" }
|
||||||
solana-sdk = { path = "sdk", version = "0.12.2" }
|
solana-sdk = { path = "sdk", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "programs/vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "programs/vote_api", version = "0.12.3" }
|
||||||
sys-info = "0.5.6"
|
sys-info = "0.5.6"
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-streamer"
|
name = "solana-bench-streamer"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.12.2" }
|
solana-netutil = { path = "../netutil", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-tps"
|
name = "solana-bench-tps"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -11,12 +11,12 @@ homepage = "https://solana.com/"
|
|||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
rayon = "1.0.3"
|
rayon = "1.0.3"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-client = { path = "../client", version = "0.12.2" }
|
solana-client = { path = "../client", version = "0.12.3" }
|
||||||
solana-drone = { path = "../drone", version = "0.12.2" }
|
solana-drone = { path = "../drone", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-client"
|
name = "solana-client"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Client"
|
description = "Solana Client"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -14,11 +14,11 @@ bs58 = "0.2.0"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
reqwest = "0.9.11"
|
reqwest = "0.9.11"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.12.2" }
|
solana-netutil = { path = "../netutil", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
jsonrpc-core = "10.1.0"
|
jsonrpc-core = "10.1.0"
|
||||||
jsonrpc-http-server = "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" }
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana"
|
name = "solana"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
documentation = "https://docs.rs/solana"
|
documentation = "https://docs.rs/solana"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
readme = "../README.md"
|
readme = "../README.md"
|
||||||
@ -44,17 +44,17 @@ rocksdb = "0.11.0"
|
|||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.88"
|
serde_derive = "1.0.88"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" }
|
||||||
solana-client = { path = "../client", version = "0.12.2" }
|
solana-client = { path = "../client", version = "0.12.3" }
|
||||||
solana-drone = { path = "../drone", version = "0.12.2" }
|
solana-drone = { path = "../drone", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.12.2" }
|
solana-netutil = { path = "../netutil", version = "0.12.3" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../runtime", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-storage-api = { path = "../programs/storage_api", version = "0.12.2" }
|
solana-storage-api = { path = "../programs/storage_api", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.12.2" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.12.3" }
|
||||||
sys-info = "0.5.6"
|
sys-info = "0.5.6"
|
||||||
tokio = "0.1"
|
tokio = "0.1"
|
||||||
tokio-codec = "0.1"
|
tokio-codec = "0.1"
|
||||||
@ -63,5 +63,5 @@ untrusted = "0.6.2"
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
hex-literal = "0.1.3"
|
hex-literal = "0.1.3"
|
||||||
matches = "0.1.6"
|
matches = "0.1.6"
|
||||||
solana-vote-program = { path = "../programs/vote", version = "0.12.2" }
|
solana-vote-program = { path = "../programs/vote", version = "0.12.3" }
|
||||||
solana-budget-program = { path = "../programs/budget", version = "0.12.2" }
|
solana-budget-program = { path = "../programs/budget", version = "0.12.3" }
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
use crate::cluster_info::ClusterInfo;
|
use crate::cluster_info::ClusterInfo;
|
||||||
use crate::entry::Entry;
|
use crate::entry::Entry;
|
||||||
use crate::leader_confirmation_service::LeaderConfirmationService;
|
|
||||||
use crate::leader_schedule_utils;
|
use crate::leader_schedule_utils;
|
||||||
use crate::packet;
|
use crate::packet;
|
||||||
use crate::packet::SharedPackets;
|
use crate::packet::SharedPackets;
|
||||||
@ -50,10 +49,8 @@ impl BankingStage {
|
|||||||
// Once an entry has been recorded, its blockhash is registered with the bank.
|
// Once an entry has been recorded, its blockhash is registered with the bank.
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
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.
|
// 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(|_| {
|
.map(|_| {
|
||||||
let verified_receiver = verified_receiver.clone();
|
let verified_receiver = verified_receiver.clone();
|
||||||
let poh_recorder = poh_recorder.clone();
|
let poh_recorder = poh_recorder.clone();
|
||||||
@ -68,7 +65,6 @@ impl BankingStage {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
bank_thread_hdls.push(lcs_handle);
|
|
||||||
Self { bank_thread_hdls }
|
Self { bank_thread_hdls }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -40,7 +40,6 @@ pub mod gen_keys;
|
|||||||
pub mod gossip_service;
|
pub mod gossip_service;
|
||||||
#[cfg(feature = "kvstore")]
|
#[cfg(feature = "kvstore")]
|
||||||
pub mod kvstore;
|
pub mod kvstore;
|
||||||
pub mod leader_confirmation_service;
|
|
||||||
pub mod leader_schedule;
|
pub mod leader_schedule;
|
||||||
pub mod leader_schedule_utils;
|
pub mod leader_schedule_utils;
|
||||||
pub mod local_cluster;
|
pub mod local_cluster;
|
||||||
|
@ -20,7 +20,7 @@ pub struct EpochStakes {
|
|||||||
delegate_id: Pubkey,
|
delegate_id: Pubkey,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default, Debug)]
|
||||||
pub struct StakeLockout {
|
pub struct StakeLockout {
|
||||||
lockout: u64,
|
lockout: u64,
|
||||||
stake: u64,
|
stake: u64,
|
||||||
@ -57,32 +57,32 @@ impl EpochStakes {
|
|||||||
let stakes = accounts.iter().map(|(k, v)| (*k, v.lamports)).collect();
|
let stakes = accounts.iter().map(|(k, v)| (*k, v.lamports)).collect();
|
||||||
Self::new(slot, stakes, &accounts[0].0)
|
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 bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
||||||
let stakes = staking_utils::vote_account_balances_at_epoch(bank, bank_epoch)
|
let stakes = staking_utils::vote_account_balances_at_epoch(bank, bank_epoch)
|
||||||
.expect("voting require a bank with stakes");
|
.expect("voting require a bank with stakes");
|
||||||
Self::new(bank_epoch, stakes, &bank.collector_id())
|
Self::new(bank_epoch, stakes, my_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Locktower {
|
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?
|
//TODO: which bank to start with?
|
||||||
let mut frozen_banks: Vec<_> = bank_forks.frozen_banks().values().cloned().collect();
|
let mut frozen_banks: Vec<_> = bank_forks.frozen_banks().values().cloned().collect();
|
||||||
frozen_banks.sort_by_key(|b| (b.parents().len(), b.slot()));
|
frozen_banks.sort_by_key(|b| (b.parents().len(), b.slot()));
|
||||||
if let Some(bank) = frozen_banks.last() {
|
if let Some(bank) = frozen_banks.last() {
|
||||||
Self::new_from_bank(bank)
|
Self::new_from_bank(bank, my_id)
|
||||||
} else {
|
} else {
|
||||||
Self::default()
|
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 current_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
||||||
let mut lockouts = VoteState::default();
|
let mut lockouts = VoteState::default();
|
||||||
if let Some(iter) = staking_utils::node_staked_accounts_at_epoch(bank, current_epoch) {
|
if let Some(iter) = staking_utils::node_staked_accounts_at_epoch(bank, current_epoch) {
|
||||||
for (delegate_id, _, account) in iter {
|
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");
|
let state = VoteState::deserialize(&account.data).expect("votes");
|
||||||
if lockouts.votes.len() < state.votes.len() {
|
if lockouts.votes.len() < state.votes.len() {
|
||||||
//TODO: which state to init with?
|
//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 {
|
Self {
|
||||||
epoch_stakes,
|
epoch_stakes,
|
||||||
threshold_depth: VOTE_THRESHOLD_DEPTH,
|
threshold_depth: VOTE_THRESHOLD_DEPTH,
|
||||||
@ -124,9 +124,16 @@ impl Locktower {
|
|||||||
}
|
}
|
||||||
let mut vote_state: VoteState = VoteState::deserialize(&account.data)
|
let mut vote_state: VoteState = VoteState::deserialize(&account.data)
|
||||||
.expect("bank should always have valid VoteState data");
|
.expect("bank should always have valid VoteState data");
|
||||||
|
|
||||||
if key == self.epoch_stakes.delegate_id
|
if key == self.epoch_stakes.delegate_id
|
||||||
|| vote_state.delegate_id == 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(
|
solana_metrics::submit(
|
||||||
influxdb::Point::new("counter-locktower-observed")
|
influxdb::Point::new("counter-locktower-observed")
|
||||||
.add_field(
|
.add_field(
|
||||||
@ -170,6 +177,20 @@ impl Locktower {
|
|||||||
stake_lockouts
|
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) {
|
pub fn update_epoch(&mut self, bank: &Bank) {
|
||||||
let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
let bank_epoch = bank.get_epoch_and_slot_index(bank.slot()).0;
|
||||||
if bank_epoch != self.epoch_stakes.slot {
|
if bank_epoch != self.epoch_stakes.slot {
|
||||||
@ -177,7 +198,7 @@ impl Locktower {
|
|||||||
bank_epoch > self.epoch_stakes.slot,
|
bank_epoch > self.epoch_stakes.slot,
|
||||||
"epoch_stakes cannot move backwards"
|
"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(
|
solana_metrics::submit(
|
||||||
influxdb::Point::new("counter-locktower-epoch")
|
influxdb::Point::new("counter-locktower-epoch")
|
||||||
.add_field(
|
.add_field(
|
||||||
@ -435,6 +456,43 @@ mod test {
|
|||||||
assert!(locktower.check_vote_stake_threshold(0, &stakes));
|
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]
|
#[test]
|
||||||
fn test_is_locked_out_empty() {
|
fn test_is_locked_out_empty() {
|
||||||
let locktower = Locktower::new(EpochStakes::new_for_tests(2), 0, 0.67);
|
let locktower = Locktower::new(EpochStakes::new_for_tests(2), 0, 0.67);
|
||||||
|
@ -6,12 +6,13 @@ use crate::blocktree_processor;
|
|||||||
use crate::cluster_info::ClusterInfo;
|
use crate::cluster_info::ClusterInfo;
|
||||||
use crate::entry::{Entry, EntryReceiver, EntrySender, EntrySlice};
|
use crate::entry::{Entry, EntryReceiver, EntrySender, EntrySlice};
|
||||||
use crate::leader_schedule_utils;
|
use crate::leader_schedule_utils;
|
||||||
use crate::locktower::Locktower;
|
use crate::locktower::{Locktower, StakeLockout};
|
||||||
use crate::packet::BlobError;
|
use crate::packet::BlobError;
|
||||||
use crate::poh_recorder::PohRecorder;
|
use crate::poh_recorder::PohRecorder;
|
||||||
use crate::result;
|
use crate::result;
|
||||||
use crate::rpc_subscriptions::RpcSubscriptions;
|
use crate::rpc_subscriptions::RpcSubscriptions;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
|
use hashbrown::HashMap;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_metrics::influxdb;
|
use solana_metrics::influxdb;
|
||||||
use solana_runtime::bank::Bank;
|
use solana_runtime::bank::Bank;
|
||||||
@ -20,7 +21,6 @@ use solana_sdk::pubkey::Pubkey;
|
|||||||
use solana_sdk::signature::KeypairUtil;
|
use solana_sdk::signature::KeypairUtil;
|
||||||
use solana_sdk::timing::{self, duration_as_ms};
|
use solana_sdk::timing::{self, duration_as_ms};
|
||||||
use solana_vote_api::vote_transaction::VoteTransaction;
|
use solana_vote_api::vote_transaction::VoteTransaction;
|
||||||
use std::collections::HashMap;
|
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender};
|
use std::sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender};
|
||||||
use std::sync::{Arc, Mutex, RwLock};
|
use std::sync::{Arc, Mutex, RwLock};
|
||||||
@ -52,6 +52,22 @@ pub struct ReplayStage {
|
|||||||
t_replay: JoinHandle<result::Result<()>>,
|
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 {
|
impl ReplayStage {
|
||||||
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
|
#[allow(clippy::new_ret_no_self, clippy::too_many_arguments)]
|
||||||
pub fn new<T>(
|
pub fn new<T>(
|
||||||
@ -79,7 +95,7 @@ impl ReplayStage {
|
|||||||
let my_id = *my_id;
|
let my_id = *my_id;
|
||||||
let vote_account = *vote_account;
|
let vote_account = *vote_account;
|
||||||
let mut ticks_per_slot = 0;
|
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
|
// Start the replay stage loop
|
||||||
let t_replay = Builder::new()
|
let t_replay = Builder::new()
|
||||||
@ -110,12 +126,7 @@ impl ReplayStage {
|
|||||||
}
|
}
|
||||||
let max_tick_height = (*bank_slot + 1) * bank.ticks_per_slot() - 1;
|
let max_tick_height = (*bank_slot + 1) * bank.ticks_per_slot() - 1;
|
||||||
if bank.tick_height() == max_tick_height {
|
if bank.tick_height() == max_tick_height {
|
||||||
Self::process_completed_bank(
|
Self::process_completed_bank(&my_id, bank, &slot_full_sender);
|
||||||
&my_id,
|
|
||||||
bank,
|
|
||||||
&mut progress,
|
|
||||||
&slot_full_sender,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,65 +136,8 @@ impl ReplayStage {
|
|||||||
ticks_per_slot = bank.ticks_per_slot();
|
ticks_per_slot = bank.ticks_per_slot();
|
||||||
}
|
}
|
||||||
|
|
||||||
let locktower_start = Instant::now();
|
let votable =
|
||||||
// Locktower voting
|
Self::generate_votable_banks(&bank_forks, &locktower, &mut progress);
|
||||||
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);
|
|
||||||
|
|
||||||
if let Some((_, bank)) = votable.last() {
|
if let Some((_, bank)) = votable.last() {
|
||||||
subscriptions.notify_subscribers(&bank);
|
subscriptions.notify_subscribers(&bank);
|
||||||
@ -352,10 +306,10 @@ impl ReplayStage {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn replay_blocktree_into_bank(
|
fn replay_blocktree_into_bank(
|
||||||
bank: &Bank,
|
bank: &Bank,
|
||||||
blocktree: &Blocktree,
|
blocktree: &Blocktree,
|
||||||
progress: &mut HashMap<u64, (Hash, usize)>,
|
progress: &mut HashMap<u64, ForkProgress>,
|
||||||
forward_entry_sender: &EntrySender,
|
forward_entry_sender: &EntrySender,
|
||||||
) -> result::Result<()> {
|
) -> result::Result<()> {
|
||||||
let (entries, num) = Self::load_blocktree_entries(bank, blocktree, progress)?;
|
let (entries, num) = Self::load_blocktree_entries(bank, blocktree, progress)?;
|
||||||
@ -373,32 +327,128 @@ impl ReplayStage {
|
|||||||
Ok(())
|
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,
|
bank: &Bank,
|
||||||
blocktree: &Blocktree,
|
blocktree: &Blocktree,
|
||||||
progress: &mut HashMap<u64, (Hash, usize)>,
|
progress: &mut HashMap<u64, ForkProgress>,
|
||||||
) -> result::Result<(Vec<Entry>, usize)> {
|
) -> result::Result<(Vec<Entry>, usize)> {
|
||||||
let bank_slot = bank.slot();
|
let bank_slot = bank.slot();
|
||||||
let bank_progress = &mut progress
|
let bank_progress = &mut progress
|
||||||
.entry(bank_slot)
|
.entry(bank_slot)
|
||||||
.or_insert((bank.last_blockhash(), 0));
|
.or_insert(ForkProgress::new(bank.last_blockhash()));
|
||||||
blocktree.get_slot_entries_with_blob_count(bank_slot, bank_progress.1 as u64, None)
|
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,
|
bank: &Bank,
|
||||||
entries: Vec<Entry>,
|
entries: Vec<Entry>,
|
||||||
progress: &mut HashMap<u64, (Hash, usize)>,
|
progress: &mut HashMap<u64, ForkProgress>,
|
||||||
forward_entry_sender: &EntrySender,
|
forward_entry_sender: &EntrySender,
|
||||||
num: usize,
|
num: usize,
|
||||||
) -> result::Result<()> {
|
) -> result::Result<()> {
|
||||||
let bank_progress = &mut progress
|
let bank_progress = &mut progress
|
||||||
.entry(bank.slot())
|
.entry(bank.slot())
|
||||||
.or_insert((bank.last_blockhash(), 0));
|
.or_insert(ForkProgress::new(bank.last_blockhash()));
|
||||||
let result = Self::verify_and_process_entries(&bank, &entries, &bank_progress.0);
|
let result = Self::verify_and_process_entries(&bank, &entries, &bank_progress.last_entry);
|
||||||
bank_progress.1 += num;
|
bank_progress.num_blobs += num;
|
||||||
if let Some(last_entry) = entries.last() {
|
if let Some(last_entry) = entries.last() {
|
||||||
bank_progress.0 = last_entry.hash;
|
bank_progress.last_entry = last_entry.hash;
|
||||||
}
|
}
|
||||||
if result.is_ok() {
|
if result.is_ok() {
|
||||||
forward_entry_sender.send(entries)?;
|
forward_entry_sender.send(entries)?;
|
||||||
@ -428,7 +478,7 @@ impl ReplayStage {
|
|||||||
|
|
||||||
fn handle_new_root(
|
fn handle_new_root(
|
||||||
bank_forks: &Arc<RwLock<BankForks>>,
|
bank_forks: &Arc<RwLock<BankForks>>,
|
||||||
progress: &mut HashMap<u64, (Hash, usize)>,
|
progress: &mut HashMap<u64, ForkProgress>,
|
||||||
) {
|
) {
|
||||||
let r_bank_forks = bank_forks.read().unwrap();
|
let r_bank_forks = bank_forks.read().unwrap();
|
||||||
progress.retain(|k, _| r_bank_forks.get(*k).is_some());
|
progress.retain(|k, _| r_bank_forks.get(*k).is_some());
|
||||||
@ -437,12 +487,10 @@ impl ReplayStage {
|
|||||||
fn process_completed_bank(
|
fn process_completed_bank(
|
||||||
my_id: &Pubkey,
|
my_id: &Pubkey,
|
||||||
bank: Arc<Bank>,
|
bank: Arc<Bank>,
|
||||||
progress: &mut HashMap<u64, (Hash, usize)>,
|
|
||||||
slot_full_sender: &Sender<(u64, Pubkey)>,
|
slot_full_sender: &Sender<(u64, Pubkey)>,
|
||||||
) {
|
) {
|
||||||
bank.freeze();
|
bank.freeze();
|
||||||
info!("bank frozen {}", bank.slot());
|
info!("bank frozen {}", bank.slot());
|
||||||
progress.remove(&bank.slot());
|
|
||||||
if let Err(e) = slot_full_sender.send((bank.slot(), bank.collector_id())) {
|
if let Err(e) = slot_full_sender.send((bank.slot(), bank.collector_id())) {
|
||||||
trace!("{} slot_full alert failed: {:?}", my_id, e);
|
trace!("{} slot_full alert failed: {:?}", my_id, e);
|
||||||
}
|
}
|
||||||
@ -668,7 +716,7 @@ mod test {
|
|||||||
let bank0 = Bank::default();
|
let bank0 = Bank::default();
|
||||||
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank0)));
|
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank0)));
|
||||||
let mut progress = HashMap::new();
|
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);
|
ReplayStage::handle_new_root(&bank_forks, &mut progress);
|
||||||
assert!(progress.is_empty());
|
assert!(progress.is_empty());
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-drone"
|
name = "solana-drone"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Drone"
|
description = "Solana Drone"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -19,9 +19,9 @@ clap = "2.31"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.89"
|
serde_derive = "1.0.89"
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
tokio = "0.1"
|
tokio = "0.1"
|
||||||
tokio-codec = "0.1"
|
tokio-codec = "0.1"
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-fullnode"
|
name = "solana-fullnode"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -12,15 +12,15 @@ homepage = "https://solana.com/"
|
|||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-drone = { path = "../drone", version = "0.12.2" }
|
solana-drone = { path = "../drone", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.12.2" }
|
solana-netutil = { path = "../netutil", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../runtime", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.12.2" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
chacha = ["solana/chacha"]
|
chacha = ["solana/chacha"]
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-genesis"
|
name = "solana-genesis"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -11,8 +11,8 @@ homepage = "https://solana.com/"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana key generation utility"
|
description = "Solana key generation utility"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -14,7 +14,7 @@ cuda = []
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
dirs = "1.0.5"
|
dirs = "1.0.5"
|
||||||
clap = "2.31"
|
clap = "2.31"
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-ledger-tool"
|
name = "solana-ledger-tool"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -11,10 +11,10 @@ homepage = "https://solana.com/"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "0.11"
|
assert_cmd = "0.11"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-logger"
|
name = "solana-logger"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Logger"
|
description = "Solana Logger"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-metrics"
|
name = "solana-metrics"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Metrics"
|
description = "Solana Metrics"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -14,7 +14,7 @@ log = "0.4.2"
|
|||||||
reqwest = "0.9.11"
|
reqwest = "0.9.11"
|
||||||
lazy_static = "1.3.0"
|
lazy_static = "1.3.0"
|
||||||
sys-info = "0.5.6"
|
sys-info = "0.5.6"
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.6.5"
|
rand = "0.6.5"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-netutil"
|
name = "solana-netutil"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Network Utilities"
|
description = "Solana Network Utilities"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -18,7 +18,7 @@ reqwest = "0.9.0"
|
|||||||
socket2 = "0.3.8"
|
socket2 = "0.3.8"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_netutil"
|
name = "solana_netutil"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-bpf-programs"
|
name = "solana-bpf-programs"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
documentation = "https://docs.rs/solana"
|
documentation = "https://docs.rs/solana"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@ -22,10 +22,10 @@ bincode = "1.1.2"
|
|||||||
byteorder = "1.3.1"
|
byteorder = "1.3.1"
|
||||||
elf = "0.0.10"
|
elf = "0.0.10"
|
||||||
solana_rbpf = "=0.1.10"
|
solana_rbpf = "=0.1.10"
|
||||||
solana-bpfloader = { path = "../bpf_loader", version = "0.12.2" }
|
solana-bpfloader = { path = "../bpf_loader", version = "0.12.3" }
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "bpf_loader"
|
name = "bpf_loader"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "solana-bpf-rust-noop"
|
name = "solana-bpf-rust-noop"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana BPF noop program written in Rust"
|
description = "Solana BPF noop program written in Rust"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-bpfloader"
|
name = "solana-bpfloader"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana BPF Loader"
|
description = "Solana BPF Loader"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -15,8 +15,8 @@ libc = "0.2.50"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana_rbpf = "=0.1.10"
|
solana_rbpf = "=0.1.10"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_loader"
|
name = "solana_bpf_loader"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-budget-program"
|
name = "solana-budget-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana budget program"
|
description = "Solana budget program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -14,12 +14,12 @@ chrono = { version = "0.4.0", features = ["serde"] }
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.89"
|
serde_derive = "1.0.89"
|
||||||
solana-budget-api = { path = "../budget_api", version = "0.12.2" }
|
solana-budget-api = { path = "../budget_api", version = "0.12.3" }
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_budget_program"
|
name = "solana_budget_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-budget-api"
|
name = "solana-budget-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Budget program API"
|
description = "Solana Budget program API"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -13,7 +13,7 @@ bincode = "1.1.2"
|
|||||||
chrono = { version = "0.4.0", features = ["serde"] }
|
chrono = { version = "0.4.0", features = ["serde"] }
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "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]
|
[lib]
|
||||||
name = "solana_budget_api"
|
name = "solana_budget_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-failure"
|
name = "solana-failure"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana failure program"
|
description = "Solana failure program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -9,11 +9,11 @@ homepage = "https://solana.com/"
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "failure"
|
name = "failure"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-noop"
|
name = "solana-noop"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana noop program"
|
description = "Solana noop program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -9,12 +9,12 @@ homepage = "https://solana.com/"
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "noop"
|
name = "noop"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-rewards-program"
|
name = "solana-rewards-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana rewards program"
|
description = "Solana rewards program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -11,13 +11,13 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.1.2"
|
bincode = "1.1.2"
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
solana-rewards-api = { path = "../rewards_api", version = "0.12.2" }
|
solana-rewards-api = { path = "../rewards_api", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../vote_api", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_rewards_program"
|
name = "solana_rewards_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-rewards-api"
|
name = "solana-rewards-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana rewards API"
|
description = "Solana rewards API"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -12,8 +12,8 @@ edition = "2018"
|
|||||||
bincode = "1.1.2"
|
bincode = "1.1.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.89"
|
serde_derive = "1.0.89"
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../vote_api", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_rewards_api"
|
name = "solana_rewards_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-storage-program"
|
name = "solana-storage-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana storage program"
|
description = "Solana storage program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -13,12 +13,12 @@ bincode = "1.1.2"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.89"
|
serde_derive = "1.0.89"
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
solana-storage-api = { path = "../storage_api", version = "0.12.2" }
|
solana-storage-api = { path = "../storage_api", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_storage_program"
|
name = "solana_storage_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-storage-api"
|
name = "solana-storage-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Storage program API"
|
description = "Solana Storage program API"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -12,7 +12,7 @@ edition = "2018"
|
|||||||
bincode = "1.1.2"
|
bincode = "1.1.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "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]
|
[lib]
|
||||||
name = "solana_storage_api"
|
name = "solana_storage_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-token-program"
|
name = "solana-token-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana token program"
|
description = "Solana token program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -13,8 +13,8 @@ bincode = "1.1.2"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "1.0.89"
|
serde_derive = "1.0.89"
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_token_program"
|
name = "solana_token_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-token-api"
|
name = "solana-token-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Token API"
|
description = "Solana Token API"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -12,7 +12,7 @@ edition = "2018"
|
|||||||
bincode = "1.1.2"
|
bincode = "1.1.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "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]
|
[lib]
|
||||||
name = "solana_token_api"
|
name = "solana_token_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-vote-program"
|
name = "solana-vote-program"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana vote program"
|
description = "Solana vote program"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -11,13 +11,13 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.1.2"
|
bincode = "1.1.2"
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.12.2" }
|
solana-logger = { path = "../../logger", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../../metrics", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../../sdk", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../vote_api", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.12.2" }
|
solana-runtime = { path = "../../runtime", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_vote_program"
|
name = "solana_vote_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-vote-api"
|
name = "solana-vote-api"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana Vote program API"
|
description = "Solana Vote program API"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -13,7 +13,7 @@ bincode = "1.1.2"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_derive = "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]
|
[lib]
|
||||||
name = "solana_vote_api"
|
name = "solana_vote_api"
|
||||||
|
@ -2,17 +2,17 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-replicator"
|
name = "solana-replicator"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.12.2" }
|
solana-netutil = { path = "../netutil", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
chacha = ["solana/chacha"]
|
chacha = ["solana/chacha"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-runtime"
|
name = "solana-runtime"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana runtime"
|
description = "Solana runtime"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -22,13 +22,13 @@ rand = "0.6.5"
|
|||||||
serde = "1.0.88"
|
serde = "1.0.88"
|
||||||
serde_derive = "1.0.88"
|
serde_derive = "1.0.88"
|
||||||
serde_json = "1.0.38"
|
serde_json = "1.0.38"
|
||||||
solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-storage-api = { path = "../programs/storage_api", version = "0.12.2" }
|
solana-storage-api = { path = "../programs/storage_api", version = "0.12.3" }
|
||||||
solana-token-api = { path = "../programs/token_api", version = "0.12.2" }
|
solana-token-api = { path = "../programs/token_api", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_runtime"
|
name = "solana_runtime"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-sdk"
|
name = "solana-sdk"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Solana SDK"
|
description = "Solana SDK"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-upload-perf"
|
name = "solana-upload-perf"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
description = "Metrics Upload Utility"
|
description = "Metrics Upload Utility"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
@ -10,7 +10,7 @@ homepage = "https://solana.com/"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "solana-upload-perf"
|
name = "solana-upload-perf"
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-vote-signer"
|
name = "solana-vote-signer"
|
||||||
description = "Solana Vote Signing Service"
|
description = "Solana Vote Signing Service"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -17,8 +17,8 @@ jsonrpc-derive = "10.1.0"
|
|||||||
jsonrpc-http-server = "10.1.0"
|
jsonrpc-http-server = "10.1.0"
|
||||||
serde = "1.0.89"
|
serde = "1.0.89"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.12.2" }
|
solana-metrics = { path = "../metrics", version = "0.12.3" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_vote_signer"
|
name = "solana_vote_signer"
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-wallet"
|
name = "solana-wallet"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.12.2"
|
version = "0.12.3"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -16,17 +16,17 @@ chrono = { version = "0.4.0", features = ["serde"] }
|
|||||||
dirs = "1.0.5"
|
dirs = "1.0.5"
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.12.2" }
|
solana = { path = "../core", version = "0.12.3" }
|
||||||
solana-budget-api = { path = "../programs/budget_api", version = "0.12.2" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.12.3" }
|
||||||
solana-client = { path = "../client", version = "0.12.2" }
|
solana-client = { path = "../client", version = "0.12.3" }
|
||||||
solana-drone = { path = "../drone", version = "0.12.2" }
|
solana-drone = { path = "../drone", version = "0.12.3" }
|
||||||
solana-logger = { path = "../logger", version = "0.12.2" }
|
solana-logger = { path = "../logger", version = "0.12.3" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.12.2" }
|
solana-sdk = { path = "../sdk", version = "0.12.3" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.12.2" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.12.3" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.12.2" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.12.3" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-budget-program = { path = "../programs/budget", version = "0.12.2" }
|
solana-budget-program = { path = "../programs/budget", version = "0.12.3" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
Reference in New Issue
Block a user