Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
b328e5f6ec | |||
0a4b6cedc7 | |||
d9a53eb9d4 | |||
a5b8ee645f | |||
1cbd1c42df | |||
b380bdd54f | |||
cb194eaee7 | |||
ff3f810284 | |||
7e7e9603c9 | |||
4c0e29cd2a | |||
065cf51a3f | |||
d4ec81fe61 | |||
e2508e5d12 | |||
c7fea37964 | |||
b197edea84 | |||
11f99faf0a | |||
728314c96f | |||
2530448474 | |||
49ad5e0b69 | |||
3c49d48666 | |||
2fe93101cc | |||
e90d97e244 |
350
Cargo.lock
generated
350
Cargo.lock
generated
@ -2136,7 +2136,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana"
|
name = "solana"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2166,20 +2166,20 @@ dependencies = [
|
|||||||
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (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.13.0",
|
"solana-budget-api 0.13.1",
|
||||||
"solana-budget-program 0.13.0",
|
"solana-budget-program 0.13.1",
|
||||||
"solana-client 0.13.0",
|
"solana-client 0.13.1",
|
||||||
"solana-drone 0.13.0",
|
"solana-drone 0.13.1",
|
||||||
"solana-kvstore 0.13.0",
|
"solana-kvstore 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-storage-api 0.13.0",
|
"solana-storage-api 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
"solana-vote-program 0.13.0",
|
"solana-vote-program 0.13.1",
|
||||||
"solana-vote-signer 0.13.0",
|
"solana-vote-signer 0.13.1",
|
||||||
"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.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio 0.1.18 (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)",
|
||||||
@ -2188,85 +2188,85 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bench-streamer"
|
name = "solana-bench-streamer"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.13.0",
|
"solana 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bench-tps"
|
name = "solana-bench-tps"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.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.13.0",
|
"solana 0.13.1",
|
||||||
"solana-client 0.13.0",
|
"solana-client 0.13.1",
|
||||||
"solana-drone 0.13.0",
|
"solana-drone 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-bpf-programs"
|
name = "solana-bpf-programs"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.13.0",
|
"solana-bpfloader 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"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.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.51 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.51 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"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.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-budget-program"
|
name = "solana-budget-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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-budget-api 0.13.0",
|
"solana-budget-api 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-client"
|
name = "solana-client"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2277,37 +2277,37 @@ dependencies = [
|
|||||||
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-config-api"
|
name = "solana-config-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-config-program"
|
name = "solana-config-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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-config-api 0.13.0",
|
"solana-config-api 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-drone"
|
name = "solana-drone"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2316,94 +2316,94 @@ 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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tokio 0.1.18 (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-exchange-api"
|
name = "solana-exchange-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-exchange-program"
|
name = "solana-exchange-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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-exchange-api 0.13.0",
|
"solana-exchange-api 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-failure-program"
|
name = "solana-failure-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-fullnode"
|
name = "solana-fullnode"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.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.13.0",
|
"solana 0.13.1",
|
||||||
"solana-drone 0.13.0",
|
"solana-drone 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
"solana-vote-signer 0.13.0",
|
"solana-vote-signer 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-genesis"
|
name = "solana-genesis"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"hashbrown 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hashbrown 0.2.1 (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.13.0",
|
"solana 0.13.1",
|
||||||
"solana-budget-api 0.13.0",
|
"solana-budget-api 0.13.1",
|
||||||
"solana-config-api 0.13.0",
|
"solana-config-api 0.13.1",
|
||||||
"solana-exchange-api 0.13.0",
|
"solana-exchange-api 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-storage-api 0.13.0",
|
"solana-storage-api 0.13.1",
|
||||||
"solana-token-api 0.13.0",
|
"solana-token-api 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-gossip"
|
name = "solana-gossip"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"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)",
|
||||||
"solana 0.13.0",
|
"solana 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-install"
|
name = "solana-install"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2420,10 +2420,10 @@ dependencies = [
|
|||||||
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_yaml 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_yaml 0.8.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-client 0.13.0",
|
"solana-client 0.13.1",
|
||||||
"solana-config-api 0.13.0",
|
"solana-config-api 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"tar 0.4.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tar 0.4.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2431,16 +2431,16 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.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.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-kvstore"
|
name = "solana-kvstore"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2455,40 +2455,40 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-ledger-tool"
|
name = "solana-ledger-tool"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"assert_cmd 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.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.13.0",
|
"solana 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-logger"
|
name = "solana-logger"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0"
|
version = "0.13.1"
|
||||||
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.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
"reqwest 0.9.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"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.13.0"
|
version = "0.13.1"
|
||||||
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)",
|
||||||
@ -2497,33 +2497,33 @@ 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.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
"reqwest 0.9.15 (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.13.0",
|
"solana-logger 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-noop-program"
|
name = "solana-noop-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-replicator"
|
name = "solana-replicator"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana 0.13.0",
|
"solana 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-runtime"
|
name = "solana-runtime"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2539,15 +2539,15 @@ dependencies = [
|
|||||||
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-sdk"
|
name = "solana-sdk"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2568,109 +2568,109 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-stake-api"
|
name = "solana-stake-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-stake-program"
|
name = "solana-stake-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-stake-api 0.13.0",
|
"solana-stake-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-storage-api"
|
name = "solana-storage-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-storage-program"
|
name = "solana-storage-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-storage-api 0.13.0",
|
"solana-storage-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-token-api"
|
name = "solana-token-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-token-program"
|
name = "solana-token-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-token-api 0.13.0",
|
"solana-token-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-upload-perf"
|
name = "solana-upload-perf"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-metrics 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-api"
|
name = "solana-vote-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-metrics 0.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-runtime 0.13.0",
|
"solana-runtime 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-program"
|
name = "solana-vote-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-vote-signer"
|
name = "solana-vote-signer"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -2680,13 +2680,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.90 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.90 (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.13.0",
|
"solana-metrics 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "solana-wallet"
|
name = "solana-wallet"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bincode 1.1.3 (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)",
|
||||||
@ -2695,16 +2695,16 @@ 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.13.0",
|
"solana 0.13.1",
|
||||||
"solana-budget-api 0.13.0",
|
"solana-budget-api 0.13.1",
|
||||||
"solana-budget-program 0.13.0",
|
"solana-budget-program 0.13.1",
|
||||||
"solana-client 0.13.0",
|
"solana-client 0.13.1",
|
||||||
"solana-drone 0.13.0",
|
"solana-drone 0.13.1",
|
||||||
"solana-logger 0.13.0",
|
"solana-logger 0.13.1",
|
||||||
"solana-netutil 0.13.0",
|
"solana-netutil 0.13.1",
|
||||||
"solana-sdk 0.13.0",
|
"solana-sdk 0.13.1",
|
||||||
"solana-vote-api 0.13.0",
|
"solana-vote-api 0.13.1",
|
||||||
"solana-vote-signer 0.13.0",
|
"solana-vote-signer 0.13.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -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.13.0"
|
version = "0.13.1"
|
||||||
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.33.0"
|
clap = "2.33.0"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0"
|
version = "0.13.1"
|
||||||
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,13 +11,13 @@ homepage = "https://solana.com/"
|
|||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
rayon = "1.0.3"
|
rayon = "1.0.3"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-client = { path = "../client", version = "0.13.0" }
|
solana-client = { path = "../client", version = "0.13.1" }
|
||||||
solana-drone = { path = "../drone", version = "0.13.0" }
|
solana-drone = { path = "../drone", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
@ -9,7 +9,8 @@ in future releases.
|
|||||||
The beta testnet features a validator running at beta.testnet.solana.com, which
|
The beta testnet features a validator running at beta.testnet.solana.com, which
|
||||||
serves as the entrypoint to the cluster for your validator.
|
serves as the entrypoint to the cluster for your validator.
|
||||||
|
|
||||||
Additionally there is a blockexplorer available at http://beta.testnet.solana.com/.
|
Additionally there is a blockexplorer available at
|
||||||
|
[http://beta.testnet.solana.com/](http://beta.testnet.solana.com/).
|
||||||
|
|
||||||
The beta testnet is configured to reset the ledger every 24hours, or sooner
|
The beta testnet is configured to reset the ledger every 24hours, or sooner
|
||||||
should an hourly automated sanity test fail.
|
should an hourly automated sanity test fail.
|
||||||
@ -25,6 +26,28 @@ traversal issues. A cloud-hosted machine works best. Ensure that IP ports
|
|||||||
Prebuilt binaries are available for Linux x86_64 (Ubuntu 18.04 recommended).
|
Prebuilt binaries are available for Linux x86_64 (Ubuntu 18.04 recommended).
|
||||||
MacOS or WSL users may build from source.
|
MacOS or WSL users may build from source.
|
||||||
|
|
||||||
|
#### Confirm The Testnet Is Reachable
|
||||||
|
Before attaching a validator node, sanity check that the cluster is accessible
|
||||||
|
to your machine by running some simple wallet commands. If any of these
|
||||||
|
commands fail, please retry 5-10 minutes later to confirm the testnet is not
|
||||||
|
just restarting itself before debugging further.
|
||||||
|
|
||||||
|
Fetch the current testnet transaction count over JSON RPC:
|
||||||
|
```bash
|
||||||
|
$ curl -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' http://beta.testnet.solana.com:8899
|
||||||
|
```
|
||||||
|
|
||||||
|
Inspect the blockexplorer at [http://beta.testnet.solana.com/](http://beta.testnet.solana.com/) for activity.
|
||||||
|
|
||||||
|
Run the following command to join the gossip network and view all the other nodes in the cluster:
|
||||||
|
```bash
|
||||||
|
$ solana-gossip --network beta.testnet.solana.com:8001
|
||||||
|
```
|
||||||
|
|
||||||
|
View the [metrics dashboard](
|
||||||
|
https://metrics.solana.com:3000/d/U9-26Cqmk/testnet-monitor-cloud?refresh=60s&orgId=2&var-testnet=testnet-beta&var-hostid=All)
|
||||||
|
for more detail on cluster activity.
|
||||||
|
|
||||||
### Validator Setup
|
### Validator Setup
|
||||||
#### Obtaining The Software
|
#### Obtaining The Software
|
||||||
##### Bootstrap with `solana-install`
|
##### Bootstrap with `solana-install`
|
||||||
@ -35,7 +58,7 @@ software on Linux x86_64 systems.
|
|||||||
Install the latest release with a single shell command:
|
Install the latest release with a single shell command:
|
||||||
```bash
|
```bash
|
||||||
$ curl -sSf https://raw.githubusercontent.com/solana-labs/solana/v0.13.0/install/solana-install-init.sh | \
|
$ curl -sSf https://raw.githubusercontent.com/solana-labs/solana/v0.13.0/install/solana-install-init.sh | \
|
||||||
sh -c - --url https://api.beta.testnet.solana.com
|
sh -s - --url https://api.beta.testnet.solana.com
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively build the `solana-install` program from source and run the
|
Alternatively build the `solana-install` program from source and run the
|
||||||
@ -67,47 +90,31 @@ $ ./scripts/cargo-install-all.sh .
|
|||||||
$ export PATH=$PWD/bin:$PATH
|
$ export PATH=$PWD/bin:$PATH
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Confirm The Testnet Is Reachable
|
### Starting The Validator
|
||||||
Before attaching a validator node, sanity check that the cluster is accessible
|
|
||||||
to your machine by running some simple wallet commands. If any of these
|
|
||||||
commands fail, please retry 5-10 minutes later to confirm the testnet is not
|
|
||||||
just restarting itself before debugging further.
|
|
||||||
|
|
||||||
Receive an airdrop of lamports from the testnet drone:
|
Sanity check that you are able to interact with the cluster by receiving a small
|
||||||
|
airdrop of lamports from the testnet drone:
|
||||||
```bash
|
```bash
|
||||||
$ solana-wallet -n beta.testnet.solana.com airdrop 123
|
$ solana-wallet -n beta.testnet.solana.com airdrop 123
|
||||||
$ solana-wallet -n beta.testnet.solana.com balance
|
$ solana-wallet -n beta.testnet.solana.com balance
|
||||||
```
|
```
|
||||||
|
|
||||||
Fetch the current testnet transaction count over JSON RPC:
|
Then the following command will start a new validator node.
|
||||||
```bash
|
|
||||||
$ curl -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' http://beta.testnet.solana.com:8899
|
|
||||||
```
|
|
||||||
|
|
||||||
Inspect the blockexplorer at http://beta.testnet.solana.com/ for activity.
|
|
||||||
|
|
||||||
Run the following command to join the gossip network and view all the other nodes in the cluster:
|
|
||||||
```bash
|
|
||||||
$ solana-gossip --network beta.testnet.solana.com:8001
|
|
||||||
```
|
|
||||||
|
|
||||||
### Starting The Validator
|
|
||||||
The following command will start a new validator node.
|
|
||||||
|
|
||||||
If this is a `solana-install`-installation:
|
If this is a `solana-install`-installation:
|
||||||
```bash
|
```bash
|
||||||
$ fullnode-x.sh --public-address --poll-for-new-genesis-block beta.testnet.solana.com:8001
|
$ fullnode-x.sh --public-address --poll-for-new-genesis-block beta.testnet.solana.com
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, the `solana-install run` command can be used to run the validator
|
Alternatively, the `solana-install run` command can be used to run the validator
|
||||||
node while periodically checking for and applying software updates:
|
node while periodically checking for and applying software updates:
|
||||||
```bash
|
```bash
|
||||||
$ solana-install run fullnode-x.sh --public-address --poll-for-new-genesis-block beta.testnet.solana.com:8001
|
$ solana-install run fullnode-x.sh -- --public-address --poll-for-new-genesis-block beta.testnet.solana.com
|
||||||
```
|
```
|
||||||
|
|
||||||
When not using `solana-install`:
|
When not using `solana-install`:
|
||||||
```bash
|
```bash
|
||||||
$ USE_INSTALL=1 ./multinode-demo/fullnode-x.sh --public-address --poll-for-new-genesis-block beta.testnet.solana.com:8001
|
$ USE_INSTALL=1 ./multinode-demo/fullnode-x.sh --public-address --poll-for-new-genesis-block beta.testnet.solana.com
|
||||||
```
|
```
|
||||||
|
|
||||||
Then from another console, confirm the IP address if your node is now visible in
|
Then from another console, confirm the IP address if your node is now visible in
|
||||||
@ -133,4 +140,3 @@ export p="password obtained from the Solana maintainers"
|
|||||||
export SOLANA_METRICS_CONFIG="db=testnet-beta,u=${u:?},p=${p:?}"
|
export SOLANA_METRICS_CONFIG="db=testnet-beta,u=${u:?},p=${p:?}"
|
||||||
source scripts/configure-metrics.sh
|
source scripts/configure-metrics.sh
|
||||||
```
|
```
|
||||||
Inspect for your contributions to our [metrics dashboard](https://metrics.solana.com:3000/d/U9-26Cqmk/testnet-monitor-cloud?refresh=60s&orgId=2&var-hostid=All).
|
|
||||||
|
@ -55,7 +55,7 @@ while getopts "ch?i:k:brxR" opt; do
|
|||||||
restartInterval=$OPTARG
|
restartInterval=$OPTARG
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
maybeNoLeaderRotation="--only-bootstrap-stake"
|
maybeNoLeaderRotation="--stake 0"
|
||||||
;;
|
;;
|
||||||
x)
|
x)
|
||||||
extraNodes=$((extraNodes + 1))
|
extraNodes=$((extraNodes + 1))
|
||||||
@ -78,7 +78,6 @@ source scripts/configure-metrics.sh
|
|||||||
nodes=(
|
nodes=(
|
||||||
"multinode-demo/drone.sh"
|
"multinode-demo/drone.sh"
|
||||||
"multinode-demo/bootstrap-leader.sh \
|
"multinode-demo/bootstrap-leader.sh \
|
||||||
$maybeNoLeaderRotation \
|
|
||||||
--enable-rpc-exit \
|
--enable-rpc-exit \
|
||||||
--init-complete-file init-complete-node1.log"
|
--init-complete-file init-complete-node1.log"
|
||||||
"multinode-demo/fullnode.sh \
|
"multinode-demo/fullnode.sh \
|
||||||
|
@ -19,9 +19,10 @@ CRATES=(
|
|||||||
metrics
|
metrics
|
||||||
client
|
client
|
||||||
drone
|
drone
|
||||||
programs/{budget_api,config_api,storage_api,token_api,vote_api}
|
programs/{budget_api,config_api,stake_api,storage_api,token_api,vote_api,exchange_api}
|
||||||
|
programs/{vote_program,budget_program,bpf_loader,config_program,exchange_program,failure_program}
|
||||||
|
programs/{noop_program,stake_program,storage_program,token_program}
|
||||||
runtime
|
runtime
|
||||||
programs/{budget,bpf_loader,config,vote,storage,token,vote}
|
|
||||||
vote-signer
|
vote-signer
|
||||||
core
|
core
|
||||||
fullnode
|
fullnode
|
||||||
@ -32,7 +33,6 @@ CRATES=(
|
|||||||
install
|
install
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Only package/publish if this is a tagged release
|
# Only package/publish if this is a tagged release
|
||||||
[[ -n $TRIGGERED_BUILDKITE_TAG ]] || {
|
[[ -n $TRIGGERED_BUILDKITE_TAG ]] || {
|
||||||
echo TRIGGERED_BUILDKITE_TAG unset, skipped
|
echo TRIGGERED_BUILDKITE_TAG unset, skipped
|
||||||
@ -55,7 +55,7 @@ for crate in "${CRATES[@]}"; do
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "-- $crate"
|
echo "-- $crate"
|
||||||
grep -q "^version = \"$expectedCrateVersion\"$" Cargo.toml || {
|
grep -q "^version = \"$expectedCrateVersion\"$" "$crate"/Cargo.toml || {
|
||||||
echo "Error: $crate/Cargo.toml version is not $expectedCrateVersion"
|
echo "Error: $crate/Cargo.toml version is not $expectedCrateVersion"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
@ -72,6 +72,9 @@ export SOLANA_METRICS_CONFIG="db=$TESTNET,$SOLANA_METRICS_PARTIAL_CONFIG"
|
|||||||
echo "SOLANA_METRICS_CONFIG: $SOLANA_METRICS_CONFIG"
|
echo "SOLANA_METRICS_CONFIG: $SOLANA_METRICS_CONFIG"
|
||||||
source scripts/configure-metrics.sh
|
source scripts/configure-metrics.sh
|
||||||
|
|
||||||
|
EC2_ZONES=(us-west-1a sa-east-1a ap-northeast-2a eu-central-1a ca-central-1a)
|
||||||
|
GCE_ZONES=(us-west1-b asia-east2-a europe-west4-a southamerica-east1-b us-east4-c)
|
||||||
|
|
||||||
ci/channel-info.sh
|
ci/channel-info.sh
|
||||||
eval "$(ci/channel-info.sh)"
|
eval "$(ci/channel-info.sh)"
|
||||||
|
|
||||||
@ -124,7 +127,8 @@ sanity() {
|
|||||||
testnet-edge)
|
testnet-edge)
|
||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
ci/testnet-sanity.sh edge-testnet-solana-com ec2 us-west-1a
|
NO_LEDGER_VERIFY=1 \
|
||||||
|
ci/testnet-sanity.sh edge-testnet-solana-com ec2 us-west-1a
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
testnet-edge-perf)
|
testnet-edge-perf)
|
||||||
@ -139,22 +143,21 @@ sanity() {
|
|||||||
testnet-beta)
|
testnet-beta)
|
||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
EC2_ZONES=(us-west-1a sa-east-1a ap-northeast-2a eu-central-1a ca-central-1a)
|
|
||||||
ok=true
|
|
||||||
for zone in "${EC2_ZONES[@]}"; do
|
|
||||||
if ! $ok; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
ci/testnet-sanity.sh beta-testnet-solana-com ec2 "$zone" || ok=false
|
|
||||||
done
|
|
||||||
|
|
||||||
GCE_ZONES=(us-west1-b asia-east2-a europe-west4-a southamerica-east1-b us-east4-c)
|
ok=true
|
||||||
for zone in "${GCE_ZONES[@]}"; do
|
if [[ -n $EC2_NODE_COUNT ]]; then
|
||||||
if ! $ok; then
|
NO_LEDGER_VERIFY=1 \
|
||||||
break
|
ci/testnet-sanity.sh beta-testnet-solana-com ec2 "${EC2_ZONES[0]}" || ok=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $ok && [[ -n $GCE_NODE_COUNT ]]; then
|
||||||
|
if [[ -n $EC2_NODE_COUNT ]]; then
|
||||||
|
echo "TODO: Fix testnet-sanity.sh to work with a multinode testnet. It needs an '-x'-like argument"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
ci/testnet-sanity.sh beta-testnet-solana-com gce "$zone" || ok=false
|
NO_LEDGER_VERIFY=1 \
|
||||||
done
|
ci/testnet-sanity.sh beta-testnet-solana-com gce "${GCE_ZONES[0]}" || ok=false
|
||||||
|
fi
|
||||||
$ok
|
$ok
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
@ -170,7 +173,8 @@ sanity() {
|
|||||||
testnet)
|
testnet)
|
||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
ci/testnet-sanity.sh testnet-solana-com ec2 us-west-1a
|
NO_LEDGER_VERIFY=1 \
|
||||||
|
ci/testnet-sanity.sh testnet-solana-com ec2 us-west-1a
|
||||||
#ci/testnet-sanity.sh testnet-solana-com gce us-east1-c
|
#ci/testnet-sanity.sh testnet-solana-com gce us-east1-c
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
@ -227,8 +231,6 @@ start() {
|
|||||||
testnet-beta)
|
testnet-beta)
|
||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
EC2_ZONES=(us-west-1a sa-east-1a ap-northeast-2a eu-central-1a ca-central-1a)
|
|
||||||
GCE_ZONES=(us-west1-b asia-east2-a europe-west4-a southamerica-east1-b us-east4-c)
|
|
||||||
|
|
||||||
# Build an array to pass as opts to testnet-deploy.sh: "-z zone1 -z zone2 ..."
|
# Build an array to pass as opts to testnet-deploy.sh: "-z zone1 -z zone2 ..."
|
||||||
GCE_ZONE_ARGS=()
|
GCE_ZONE_ARGS=()
|
||||||
@ -241,19 +243,23 @@ start() {
|
|||||||
EC2_ZONE_ARGS+=("-z $val")
|
EC2_ZONE_ARGS+=("-z $val")
|
||||||
done
|
done
|
||||||
|
|
||||||
[[ -n $EC2_NODE_COUNT ]] || EC2_NODE_COUNT=60
|
if [[ -n $EC2_NODE_COUNT ]]; then
|
||||||
[[ -n $GCE_NODE_COUNT ]] || GCE_NODE_COUNT=40
|
# shellcheck disable=SC2068
|
||||||
|
ci/testnet-deploy.sh -p beta-testnet-solana-com -C ec2 ${EC2_ZONE_ARGS[@]} \
|
||||||
|
-t "$CHANNEL_OR_TAG" -n "$EC2_NODE_COUNT" -c 0 -u -P -a eipalloc-0f286cf8a0771ce35 \
|
||||||
|
${maybeReuseLedger:+-r} \
|
||||||
|
${maybeDelete:+-D} \
|
||||||
|
${GCE_NODE_COUNT:+-s}
|
||||||
|
fi
|
||||||
|
|
||||||
# shellcheck disable=SC2068
|
if [[ -n $GCE_NODE_COUNT ]]; then
|
||||||
ci/testnet-deploy.sh -p beta-testnet-solana-com -C ec2 ${EC2_ZONE_ARGS[@]} \
|
# shellcheck disable=SC2068
|
||||||
-t "$CHANNEL_OR_TAG" -n "$EC2_NODE_COUNT" -c 0 -s -u -P -a eipalloc-0f286cf8a0771ce35 \
|
ci/testnet-deploy.sh -p beta-testnet-solana-com -C gce ${GCE_ZONE_ARGS[@]} \
|
||||||
${maybeReuseLedger:+-r} \
|
-t "$CHANNEL_OR_TAG" -n "$GCE_NODE_COUNT" -c 0 -P \
|
||||||
${maybeDelete:+-D}
|
${maybeReuseLedger:+-r} \
|
||||||
# shellcheck disable=SC2068
|
${maybeDelete:+-D} \
|
||||||
ci/testnet-deploy.sh -p beta-testnet-solana-com -C gce ${GCE_ZONE_ARGS[@]} \
|
${EC2_NODE_COUNT:+-x}
|
||||||
-t "$CHANNEL_OR_TAG" -n "$GCE_NODE_COUNT" -c 0 -x -P \
|
fi
|
||||||
${maybeReuseLedger:+-r} \
|
|
||||||
${maybeDelete:+-D}
|
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
testnet-beta-perf)
|
testnet-beta-perf)
|
||||||
|
@ -11,13 +11,13 @@ usage() {
|
|||||||
echo "Error: $*"
|
echo "Error: $*"
|
||||||
fi
|
fi
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
usage: $0 [name] [cloud] [zone]
|
usage: $0 [name] [cloud] [zone1] ... [zoneN]
|
||||||
|
|
||||||
Sanity check a CD testnet
|
Sanity check a testnet
|
||||||
|
|
||||||
name - name of the network
|
name - name of the network
|
||||||
cloud - cloud provider to use (gce, ec2)
|
cloud - cloud provider to use (gce, ec2)
|
||||||
zone - cloud provider zone of the network
|
zone1 .. zoneN - cloud provider zones to check
|
||||||
|
|
||||||
Note: the SOLANA_METRICS_CONFIG environment variable is used to configure
|
Note: the SOLANA_METRICS_CONFIG environment variable is used to configure
|
||||||
metrics
|
metrics
|
||||||
@ -27,10 +27,10 @@ EOF
|
|||||||
|
|
||||||
netName=$1
|
netName=$1
|
||||||
cloudProvider=$2
|
cloudProvider=$2
|
||||||
zone=$3
|
|
||||||
[[ -n $netName ]] || usage ""
|
[[ -n $netName ]] || usage ""
|
||||||
[[ -n $cloudProvider ]] || usage "Cloud provider not specified"
|
[[ -n $cloudProvider ]] || usage "Cloud provider not specified"
|
||||||
[[ -n $zone ]] || usage "Zone not specified"
|
shift 2
|
||||||
|
[[ -n $1 ]] || usage "zone1 not specified"
|
||||||
|
|
||||||
shutdown() {
|
shutdown() {
|
||||||
exitcode=$?
|
exitcode=$?
|
||||||
@ -52,17 +52,20 @@ rm -f net/config/config
|
|||||||
trap shutdown EXIT INT
|
trap shutdown EXIT INT
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
echo "--- $cloudProvider.sh config"
|
for zone in "$@"; do
|
||||||
timeout 5m net/"$cloudProvider".sh config -p "$netName" -z "$zone"
|
echo "--- $cloudProvider config [$zone]"
|
||||||
net/init-metrics.sh -e
|
timeout 5m net/"$cloudProvider".sh config -p "$netName" -z "$zone"
|
||||||
echo "+++ $cloudProvider.sh info"
|
net/init-metrics.sh -e
|
||||||
net/"$cloudProvider".sh info
|
echo "+++ $cloudProvider.sh info"
|
||||||
echo --- net.sh sanity
|
net/"$cloudProvider".sh info
|
||||||
ok=true
|
echo "--- net.sh sanity [$cloudProvider:$zone]"
|
||||||
timeout 5m net/net.sh sanity \
|
ok=true
|
||||||
${NO_LEDGER_VERIFY:+-o noLedgerVerify} \
|
timeout 5m net/net.sh sanity \
|
||||||
${NO_VALIDATOR_SANITY:+-o noValidatorSanity} \
|
${NO_LEDGER_VERIFY:+-o noLedgerVerify} \
|
||||||
${REJECT_EXTRA_NODES:+-o rejectExtraNodes} || ok=false
|
${NO_VALIDATOR_SANITY:+-o noValidatorSanity} \
|
||||||
|
${REJECT_EXTRA_NODES:+-o rejectExtraNodes} \
|
||||||
|
$zone || ok=false
|
||||||
|
|
||||||
net/net.sh logs
|
net/net.sh logs
|
||||||
$ok
|
$ok
|
||||||
|
done
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-client"
|
name = "solana-client"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -17,10 +17,10 @@ reqwest = "0.9.11"
|
|||||||
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-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana"
|
name = "solana"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
documentation = "https://docs.rs/solana"
|
documentation = "https://docs.rs/solana"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
readme = "../README.md"
|
readme = "../README.md"
|
||||||
@ -46,18 +46,18 @@ 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.13.0" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.13.1" }
|
||||||
solana-client = { path = "../client", version = "0.13.0" }
|
solana-client = { path = "../client", version = "0.13.1" }
|
||||||
solana-drone = { path = "../drone", version = "0.13.0" }
|
solana-drone = { path = "../drone", version = "0.13.1" }
|
||||||
solana-kvstore = { path = "../kvstore", version = "0.13.0", optional = true }
|
solana-kvstore = { path = "../kvstore", version = "0.13.1", optional = true }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../runtime", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-storage-api = { path = "../programs/storage_api", version = "0.13.0" }
|
solana-storage-api = { path = "../programs/storage_api", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.13.1" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.13.0" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.13.1" }
|
||||||
sys-info = "0.5.6"
|
sys-info = "0.5.6"
|
||||||
tokio = "0.1"
|
tokio = "0.1"
|
||||||
tokio-codec = "0.1"
|
tokio-codec = "0.1"
|
||||||
@ -66,8 +66,8 @@ untrusted = "0.6.2"
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
hex-literal = "0.1.4"
|
hex-literal = "0.1.4"
|
||||||
matches = "0.1.6"
|
matches = "0.1.6"
|
||||||
solana-vote-program = { path = "../programs/vote_program", version = "0.13.0" }
|
solana-vote-program = { path = "../programs/vote_program", version = "0.13.1" }
|
||||||
solana-budget-program = { path = "../programs/budget_program", version = "0.13.0" }
|
solana-budget-program = { path = "../programs/budget_program", version = "0.13.1" }
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "banking_stage"
|
name = "banking_stage"
|
||||||
|
@ -296,8 +296,8 @@ impl Blocktree {
|
|||||||
|
|
||||||
let slot_meta = &mut entry.0.borrow_mut();
|
let slot_meta = &mut entry.0.borrow_mut();
|
||||||
|
|
||||||
// This slot is full, skip the bogus blob
|
// Check if this blob should be inserted
|
||||||
if slot_meta.is_full() {
|
if !self.should_insert_blob(&slot_meta, &prev_inserted_blob_datas, blob) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1036,12 +1036,6 @@ impl Blocktree {
|
|||||||
let blob_slot = blob_to_insert.slot();
|
let blob_slot = blob_to_insert.slot();
|
||||||
let blob_size = blob_to_insert.size();
|
let blob_size = blob_to_insert.size();
|
||||||
|
|
||||||
if blob_index < slot_meta.consumed
|
|
||||||
|| prev_inserted_blob_datas.contains_key(&(blob_slot, blob_index))
|
|
||||||
{
|
|
||||||
return Err(Error::BlocktreeError(BlocktreeError::BlobForIndexExists));
|
|
||||||
}
|
|
||||||
|
|
||||||
let new_consumed = {
|
let new_consumed = {
|
||||||
if slot_meta.consumed == blob_index {
|
if slot_meta.consumed == blob_index {
|
||||||
let blob_datas = self.get_slot_consecutive_blobs(
|
let blob_datas = self.get_slot_consecutive_blobs(
|
||||||
@ -1276,6 +1270,64 @@ impl Blocktree {
|
|||||||
self.db.write(batch)?;
|
self.db.write(batch)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_insert_blob(
|
||||||
|
&self,
|
||||||
|
slot: &SlotMeta,
|
||||||
|
prev_inserted_blob_datas: &HashMap<(u64, u64), &[u8]>,
|
||||||
|
blob: &Blob,
|
||||||
|
) -> bool {
|
||||||
|
let blob_index = blob.index();
|
||||||
|
let blob_slot = blob.slot();
|
||||||
|
|
||||||
|
// Check that the blob doesn't already exist
|
||||||
|
if blob_index < slot.consumed
|
||||||
|
|| prev_inserted_blob_datas.contains_key(&(blob_slot, blob_index))
|
||||||
|
|| self
|
||||||
|
.get_data_blob_bytes(blob_slot, blob_index)
|
||||||
|
.unwrap()
|
||||||
|
.is_some()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that we do not receive blobs >= than the last_index
|
||||||
|
// for the slot
|
||||||
|
let last_index = slot.last_index;
|
||||||
|
if blob_index >= last_index {
|
||||||
|
solana_metrics::submit(
|
||||||
|
solana_metrics::influxdb::Point::new("blocktree_invalid_blob_error")
|
||||||
|
.add_field(
|
||||||
|
"error",
|
||||||
|
solana_metrics::influxdb::Value::String(format!(
|
||||||
|
"Received last blob with index {} >= slot.last_index {}",
|
||||||
|
blob_index, last_index
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
.to_owned(),
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check that we do not receive a blob with "last_index" true, but index
|
||||||
|
// less than our current received
|
||||||
|
if blob.is_last_in_slot() && blob_index < slot.received {
|
||||||
|
solana_metrics::submit(
|
||||||
|
solana_metrics::influxdb::Point::new("blocktree_invalid_blob_error")
|
||||||
|
.add_field(
|
||||||
|
"error",
|
||||||
|
solana_metrics::influxdb::Value::String(format!(
|
||||||
|
"Received last blob with index {} < slot.received {}",
|
||||||
|
blob_index, slot.received
|
||||||
|
)),
|
||||||
|
)
|
||||||
|
.to_owned(),
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates a new ledger with slot 0 full of ticks (and only ticks).
|
// Creates a new ledger with slot 0 full of ticks (and only ticks).
|
||||||
@ -2665,6 +2717,69 @@ pub mod tests {
|
|||||||
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn test_should_insert_blob() {
|
||||||
|
let (mut blobs, _) = make_slot_entries(0, 0, 20);
|
||||||
|
let blocktree_path = get_tmp_ledger_path!();
|
||||||
|
let blocktree = Blocktree::open(&blocktree_path).unwrap();
|
||||||
|
|
||||||
|
// Insert the first 5 blobs, we don't have a "is_last" blob yet
|
||||||
|
blocktree.insert_data_blobs(&blobs[0..5]).unwrap();
|
||||||
|
|
||||||
|
// Trying to insert a blob less than consumed should fail
|
||||||
|
let slot_meta = blocktree.meta(0).unwrap().unwrap();
|
||||||
|
assert_eq!(slot_meta.consumed, 5);
|
||||||
|
assert!(!blocktree.should_insert_blob(&slot_meta, &HashMap::new(), &blobs[4].clone()));
|
||||||
|
|
||||||
|
// Trying to insert the same blob again should fail
|
||||||
|
blocktree.insert_data_blobs(&blobs[7..8]).unwrap();
|
||||||
|
let slot_meta = blocktree.meta(0).unwrap().unwrap();
|
||||||
|
assert!(!blocktree.should_insert_blob(&slot_meta, &HashMap::new(), &blobs[7].clone()));
|
||||||
|
|
||||||
|
// Trying to insert another "is_last" blob with index < the received index
|
||||||
|
// should fail
|
||||||
|
blocktree.insert_data_blobs(&blobs[8..9]).unwrap();
|
||||||
|
let slot_meta = blocktree.meta(0).unwrap().unwrap();
|
||||||
|
assert_eq!(slot_meta.received, 9);
|
||||||
|
blobs[8].set_is_last_in_slot();
|
||||||
|
assert!(!blocktree.should_insert_blob(&slot_meta, &HashMap::new(), &blobs[8].clone()));
|
||||||
|
|
||||||
|
// Insert the 10th blob, which is marked as "is_last"
|
||||||
|
blobs[9].set_is_last_in_slot();
|
||||||
|
blocktree.insert_data_blobs(&blobs[9..10]).unwrap();
|
||||||
|
let slot_meta = blocktree.meta(0).unwrap().unwrap();
|
||||||
|
|
||||||
|
// Trying to insert a blob with index > the "is_last" blob should fail
|
||||||
|
assert!(!blocktree.should_insert_blob(&slot_meta, &HashMap::new(), &blobs[10].clone()));
|
||||||
|
|
||||||
|
drop(blocktree);
|
||||||
|
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
pub fn test_insert_multiple_is_last() {
|
||||||
|
let (mut blobs, _) = make_slot_entries(0, 0, 20);
|
||||||
|
let blocktree_path = get_tmp_ledger_path!();
|
||||||
|
let blocktree = Blocktree::open(&blocktree_path).unwrap();
|
||||||
|
|
||||||
|
// Inserting multiple blobs with the is_last flag set should only insert
|
||||||
|
// the first blob with the "is_last" flag, and drop the rest
|
||||||
|
for i in 6..20 {
|
||||||
|
blobs[i].set_is_last_in_slot();
|
||||||
|
}
|
||||||
|
|
||||||
|
blocktree.insert_data_blobs(&blobs[..]).unwrap();
|
||||||
|
let slot_meta = blocktree.meta(0).unwrap().unwrap();
|
||||||
|
|
||||||
|
assert_eq!(slot_meta.consumed, 7);
|
||||||
|
assert_eq!(slot_meta.received, 7);
|
||||||
|
assert_eq!(slot_meta.last_index, 6);
|
||||||
|
assert!(slot_meta.is_full());
|
||||||
|
|
||||||
|
drop(blocktree);
|
||||||
|
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "erasure")]
|
#[cfg(feature = "erasure")]
|
||||||
mod erasure {
|
mod erasure {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -5,7 +5,7 @@ use crate::cluster_info::{ClusterInfo, ClusterInfoError, DATA_PLANE_FANOUT};
|
|||||||
use crate::entry::{EntrySender, EntrySlice};
|
use crate::entry::{EntrySender, EntrySlice};
|
||||||
#[cfg(feature = "erasure")]
|
#[cfg(feature = "erasure")]
|
||||||
use crate::erasure::CodingGenerator;
|
use crate::erasure::CodingGenerator;
|
||||||
use crate::packet::index_blobs;
|
use crate::packet::index_blobs_with_genesis;
|
||||||
use crate::poh_recorder::WorkingBankEntries;
|
use crate::poh_recorder::WorkingBankEntries;
|
||||||
use crate::result::{Error, Result};
|
use crate::result::{Error, Result};
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
@ -13,6 +13,7 @@ use crate::staking_utils;
|
|||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_metrics::{influxdb, submit};
|
use solana_metrics::{influxdb, submit};
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::timing::duration_as_ms;
|
use solana_sdk::timing::duration_as_ms;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
@ -42,6 +43,7 @@ impl Broadcast {
|
|||||||
sock: &UdpSocket,
|
sock: &UdpSocket,
|
||||||
blocktree: &Arc<Blocktree>,
|
blocktree: &Arc<Blocktree>,
|
||||||
storage_entry_sender: &EntrySender,
|
storage_entry_sender: &EntrySender,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let timer = Duration::new(1, 0);
|
let timer = Duration::new(1, 0);
|
||||||
let (mut bank, entries) = receiver.recv_timeout(timer)?;
|
let (mut bank, entries) = receiver.recv_timeout(timer)?;
|
||||||
@ -103,9 +105,10 @@ impl Broadcast {
|
|||||||
.map(|meta| meta.consumed)
|
.map(|meta| meta.consumed)
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
|
|
||||||
index_blobs(
|
index_blobs_with_genesis(
|
||||||
&blobs,
|
&blobs,
|
||||||
&self.id,
|
&self.id,
|
||||||
|
genesis_blockhash,
|
||||||
blob_index,
|
blob_index,
|
||||||
bank.slot(),
|
bank.slot(),
|
||||||
bank.parent().map_or(0, |parent| parent.slot()),
|
bank.parent().map_or(0, |parent| parent.slot()),
|
||||||
@ -192,6 +195,7 @@ impl BroadcastStage {
|
|||||||
receiver: &Receiver<WorkingBankEntries>,
|
receiver: &Receiver<WorkingBankEntries>,
|
||||||
blocktree: &Arc<Blocktree>,
|
blocktree: &Arc<Blocktree>,
|
||||||
storage_entry_sender: EntrySender,
|
storage_entry_sender: EntrySender,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> BroadcastStageReturnType {
|
) -> BroadcastStageReturnType {
|
||||||
let me = cluster_info.read().unwrap().my_data().clone();
|
let me = cluster_info.read().unwrap().my_data().clone();
|
||||||
|
|
||||||
@ -208,6 +212,7 @@ impl BroadcastStage {
|
|||||||
sock,
|
sock,
|
||||||
blocktree,
|
blocktree,
|
||||||
&storage_entry_sender,
|
&storage_entry_sender,
|
||||||
|
genesis_blockhash,
|
||||||
) {
|
) {
|
||||||
match e {
|
match e {
|
||||||
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) | Error::SendError => {
|
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) | Error::SendError => {
|
||||||
@ -247,9 +252,11 @@ impl BroadcastStage {
|
|||||||
exit_sender: &Arc<AtomicBool>,
|
exit_sender: &Arc<AtomicBool>,
|
||||||
blocktree: &Arc<Blocktree>,
|
blocktree: &Arc<Blocktree>,
|
||||||
storage_entry_sender: EntrySender,
|
storage_entry_sender: EntrySender,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let blocktree = blocktree.clone();
|
let blocktree = blocktree.clone();
|
||||||
let exit_sender = exit_sender.clone();
|
let exit_sender = exit_sender.clone();
|
||||||
|
let genesis_blockhash = *genesis_blockhash;
|
||||||
let thread_hdl = Builder::new()
|
let thread_hdl = Builder::new()
|
||||||
.name("solana-broadcaster".to_string())
|
.name("solana-broadcaster".to_string())
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
@ -260,6 +267,7 @@ impl BroadcastStage {
|
|||||||
&receiver,
|
&receiver,
|
||||||
&blocktree,
|
&blocktree,
|
||||||
storage_entry_sender,
|
storage_entry_sender,
|
||||||
|
&genesis_blockhash,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
@ -331,6 +339,7 @@ mod test {
|
|||||||
&exit_sender,
|
&exit_sender,
|
||||||
&blocktree,
|
&blocktree,
|
||||||
storage_sender,
|
storage_sender,
|
||||||
|
&Hash::default(),
|
||||||
);
|
);
|
||||||
|
|
||||||
MockBroadcastStage {
|
MockBroadcastStage {
|
||||||
|
@ -164,7 +164,7 @@ mod tests {
|
|||||||
use bs58;
|
use bs58;
|
||||||
// golden needs to be updated if blob stuff changes....
|
// golden needs to be updated if blob stuff changes....
|
||||||
let golden = Hash::new(
|
let golden = Hash::new(
|
||||||
&bs58::decode("5NBn4cBZmNZRftkjxj3um8W1eyYPzn2RgUJSA3SVbHaJ")
|
&bs58::decode("F5zEvoozmV87cgS1sfG226nYSJoupRjKA93QUQiWd31E")
|
||||||
.into_vec()
|
.into_vec()
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
|
@ -853,8 +853,6 @@ impl ClusterInfo {
|
|||||||
.collect();
|
.collect();
|
||||||
if pr.is_empty() {
|
if pr.is_empty() {
|
||||||
self.add_entrypoint(&mut pr);
|
self.add_entrypoint(&mut pr);
|
||||||
} else {
|
|
||||||
self.entrypoint = None;
|
|
||||||
}
|
}
|
||||||
pr.into_iter()
|
pr.into_iter()
|
||||||
.map(|(peer, filter, gossip, self_info)| {
|
.map(|(peer, filter, gossip, self_info)| {
|
||||||
@ -1071,21 +1069,16 @@ impl ClusterInfo {
|
|||||||
.process_pull_request(caller, filter, now);
|
.process_pull_request(caller, filter, now);
|
||||||
let len = data.len();
|
let len = data.len();
|
||||||
trace!("get updates since response {}", len);
|
trace!("get updates since response {}", len);
|
||||||
if data.is_empty() {
|
let rsp = Protocol::PullResponse(self_id, data);
|
||||||
trace!("no updates me {}", self_id);
|
// The remote node may not know its public IP:PORT. Record what it looks like to us.
|
||||||
vec![]
|
// This may or may not be correct for everybody, but it's better than leaving the remote with
|
||||||
} else {
|
// an unspecified address in our table
|
||||||
let rsp = Protocol::PullResponse(self_id, data);
|
if from.gossip.ip().is_unspecified() {
|
||||||
// the remote side may not know his public IP:PORT, record what he looks like to us
|
inc_new_counter_info!("cluster_info-window-request-updates-unspec-gossip", 1);
|
||||||
// this may or may not be correct for everybody but it's better than leaving him with
|
from.gossip = *from_addr;
|
||||||
// an unspecified address in our table
|
|
||||||
if from.gossip.ip().is_unspecified() {
|
|
||||||
inc_new_counter_info!("cluster_info-window-request-updates-unspec-gossip", 1);
|
|
||||||
from.gossip = *from_addr;
|
|
||||||
}
|
|
||||||
inc_new_counter_info!("cluster_info-pull_request-rsp", len);
|
|
||||||
to_shared_blob(rsp, from.gossip).ok().into_iter().collect()
|
|
||||||
}
|
}
|
||||||
|
inc_new_counter_info!("cluster_info-pull_request-rsp", len);
|
||||||
|
to_shared_blob(rsp, from.gossip).ok().into_iter().collect()
|
||||||
}
|
}
|
||||||
fn handle_pull_response(me: &Arc<RwLock<Self>>, from: &Pubkey, data: Vec<CrdsValue>) {
|
fn handle_pull_response(me: &Arc<RwLock<Self>>, from: &Pubkey, data: Vec<CrdsValue>) {
|
||||||
let len = data.len();
|
let len = data.len();
|
||||||
@ -2200,5 +2193,5 @@ fn test_add_entrypoint() {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.new_pull_requests(&HashMap::new());
|
.new_pull_requests(&HashMap::new());
|
||||||
assert_eq!(1, pulls.len());
|
assert_eq!(1, pulls.len());
|
||||||
assert_eq!(cluster_info.read().unwrap().entrypoint, None);
|
assert_eq!(cluster_info.read().unwrap().entrypoint, Some(entrypoint));
|
||||||
}
|
}
|
||||||
|
@ -100,6 +100,7 @@ impl Fullnode {
|
|||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let bank_info = &bank_forks_info[0];
|
let bank_info = &bank_forks_info[0];
|
||||||
let bank = bank_forks[bank_info.bank_slot].clone();
|
let bank = bank_forks[bank_info.bank_slot].clone();
|
||||||
|
let genesis_blockhash = bank.last_blockhash();
|
||||||
|
|
||||||
info!(
|
info!(
|
||||||
"starting PoH... {} {}",
|
"starting PoH... {} {}",
|
||||||
@ -232,6 +233,7 @@ impl Fullnode {
|
|||||||
sender.clone(),
|
sender.clone(),
|
||||||
receiver,
|
receiver,
|
||||||
&exit,
|
&exit,
|
||||||
|
&genesis_blockhash,
|
||||||
);
|
);
|
||||||
let tpu = Tpu::new(
|
let tpu = Tpu::new(
|
||||||
&id,
|
&id,
|
||||||
@ -245,6 +247,7 @@ impl Fullnode {
|
|||||||
&blocktree,
|
&blocktree,
|
||||||
sender,
|
sender,
|
||||||
&exit,
|
&exit,
|
||||||
|
&genesis_blockhash,
|
||||||
);
|
);
|
||||||
|
|
||||||
inc_new_counter_info!("fullnode-new", 1);
|
inc_new_counter_info!("fullnode-new", 1);
|
||||||
|
@ -5,6 +5,7 @@ use bincode;
|
|||||||
use byteorder::{ByteOrder, LittleEndian};
|
use byteorder::{ByteOrder, LittleEndian};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
pub use solana_sdk::packet::PACKET_DATA_SIZE;
|
pub use solana_sdk::packet::PACKET_DATA_SIZE;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
@ -363,7 +364,8 @@ const SLOT_RANGE: std::ops::Range<usize> = range!(PARENT_RANGE.end, u64);
|
|||||||
const INDEX_RANGE: std::ops::Range<usize> = range!(SLOT_RANGE.end, u64);
|
const INDEX_RANGE: std::ops::Range<usize> = range!(SLOT_RANGE.end, u64);
|
||||||
const ID_RANGE: std::ops::Range<usize> = range!(INDEX_RANGE.end, Pubkey);
|
const ID_RANGE: std::ops::Range<usize> = range!(INDEX_RANGE.end, Pubkey);
|
||||||
const FORWARD_RANGE: std::ops::Range<usize> = range!(ID_RANGE.end, bool);
|
const FORWARD_RANGE: std::ops::Range<usize> = range!(ID_RANGE.end, bool);
|
||||||
const FLAGS_RANGE: std::ops::Range<usize> = range!(FORWARD_RANGE.end, u32);
|
const GENESIS_RANGE: std::ops::Range<usize> = range!(FORWARD_RANGE.end, Hash);
|
||||||
|
const FLAGS_RANGE: std::ops::Range<usize> = range!(GENESIS_RANGE.end, u32);
|
||||||
const SIZE_RANGE: std::ops::Range<usize> = range!(FLAGS_RANGE.end, u64);
|
const SIZE_RANGE: std::ops::Range<usize> = range!(FLAGS_RANGE.end, u64);
|
||||||
|
|
||||||
macro_rules! align {
|
macro_rules! align {
|
||||||
@ -439,6 +441,14 @@ impl Blob {
|
|||||||
self.data[FORWARD_RANGE][0] = u8::from(forward)
|
self.data[FORWARD_RANGE][0] = u8::from(forward)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_genesis_blockhash(&mut self, blockhash: &Hash) {
|
||||||
|
self.data[GENESIS_RANGE].copy_from_slice(blockhash.as_ref())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn genesis_blockhash(&self) -> Hash {
|
||||||
|
Hash::new(&self.data[GENESIS_RANGE])
|
||||||
|
}
|
||||||
|
|
||||||
pub fn flags(&self) -> u32 {
|
pub fn flags(&self) -> u32 {
|
||||||
LittleEndian::read_u32(&self.data[FLAGS_RANGE])
|
LittleEndian::read_u32(&self.data[FLAGS_RANGE])
|
||||||
}
|
}
|
||||||
@ -577,12 +587,24 @@ impl Blob {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn index_blobs(blobs: &[SharedBlob], id: &Pubkey, mut blob_index: u64, slot: u64, parent: u64) {
|
pub fn index_blobs(blobs: &[SharedBlob], id: &Pubkey, blob_index: u64, slot: u64, parent: u64) {
|
||||||
|
index_blobs_with_genesis(blobs, id, &Hash::default(), blob_index, slot, parent)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn index_blobs_with_genesis(
|
||||||
|
blobs: &[SharedBlob],
|
||||||
|
id: &Pubkey,
|
||||||
|
genesis: &Hash,
|
||||||
|
mut blob_index: u64,
|
||||||
|
slot: u64,
|
||||||
|
parent: u64,
|
||||||
|
) {
|
||||||
// enumerate all the blobs, those are the indices
|
// enumerate all the blobs, those are the indices
|
||||||
for blob in blobs.iter() {
|
for blob in blobs.iter() {
|
||||||
let mut blob = blob.write().unwrap();
|
let mut blob = blob.write().unwrap();
|
||||||
|
|
||||||
blob.set_index(blob_index);
|
blob.set_index(blob_index);
|
||||||
|
blob.set_genesis_blockhash(genesis);
|
||||||
blob.set_slot(slot);
|
blob.set_slot(slot);
|
||||||
blob.set_parent(parent);
|
blob.set_parent(parent);
|
||||||
blob.set_id(id);
|
blob.set_id(id);
|
||||||
@ -835,4 +857,14 @@ mod tests {
|
|||||||
assert!(p1 != p2);
|
assert!(p1 != p2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_blob_genesis_blockhash() {
|
||||||
|
let mut blob = Blob::default();
|
||||||
|
assert_eq!(blob.genesis_blockhash(), Hash::default());
|
||||||
|
|
||||||
|
let hash = Hash::new(&Pubkey::new_rand().as_ref());
|
||||||
|
blob.set_genesis_blockhash(&hash);
|
||||||
|
assert_eq!(blob.genesis_blockhash(), hash);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ use solana_client::rpc_client::RpcClient;
|
|||||||
use solana_client::rpc_request::RpcRequest;
|
use solana_client::rpc_request::RpcRequest;
|
||||||
use solana_client::thin_client::{create_client, ThinClient};
|
use solana_client::thin_client::{create_client, ThinClient};
|
||||||
use solana_sdk::client::{AsyncClient, SyncClient};
|
use solana_sdk::client::{AsyncClient, SyncClient};
|
||||||
|
|
||||||
use solana_sdk::hash::{Hash, Hasher};
|
use solana_sdk::hash::{Hash, Hasher};
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil, Signature};
|
use solana_sdk::signature::{Keypair, KeypairUtil, Signature};
|
||||||
use solana_sdk::system_transaction;
|
use solana_sdk::system_transaction;
|
||||||
@ -239,6 +238,7 @@ impl Replicator {
|
|||||||
let (retransmit_sender, retransmit_receiver) = channel();
|
let (retransmit_sender, retransmit_receiver) = channel();
|
||||||
|
|
||||||
let window_service = WindowService::new(
|
let window_service = WindowService::new(
|
||||||
|
None, //TODO: need a way to validate blobs... https://github.com/solana-labs/solana/issues/3924
|
||||||
blocktree.clone(),
|
blocktree.clone(),
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
blob_fetch_receiver,
|
blob_fetch_receiver,
|
||||||
@ -246,6 +246,7 @@ impl Replicator {
|
|||||||
repair_socket,
|
repair_socket,
|
||||||
&exit,
|
&exit,
|
||||||
Some(repair_slot_range),
|
Some(repair_slot_range),
|
||||||
|
&Hash::default(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let client = create_client(cluster_entrypoint.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(cluster_entrypoint.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
@ -14,6 +14,7 @@ use crate::streamer::BlobReceiver;
|
|||||||
use crate::window_service::WindowService;
|
use crate::window_service::WindowService;
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_metrics::{influxdb, submit};
|
use solana_metrics::{influxdb, submit};
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
@ -79,6 +80,7 @@ fn retransmitter(
|
|||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
r: BlobReceiver,
|
r: BlobReceiver,
|
||||||
) -> JoinHandle<()> {
|
) -> JoinHandle<()> {
|
||||||
|
let bank_forks = bank_forks.clone();
|
||||||
Builder::new()
|
Builder::new()
|
||||||
.name("solana-retransmitter".to_string())
|
.name("solana-retransmitter".to_string())
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
@ -107,13 +109,14 @@ pub struct RetransmitStage {
|
|||||||
impl RetransmitStage {
|
impl RetransmitStage {
|
||||||
#[allow(clippy::new_ret_no_self)]
|
#[allow(clippy::new_ret_no_self)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
bank_forks: &Arc<RwLock<BankForks>>,
|
bank_forks: Arc<RwLock<BankForks>>,
|
||||||
blocktree: Arc<Blocktree>,
|
blocktree: Arc<Blocktree>,
|
||||||
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
||||||
retransmit_socket: Arc<UdpSocket>,
|
retransmit_socket: Arc<UdpSocket>,
|
||||||
repair_socket: Arc<UdpSocket>,
|
repair_socket: Arc<UdpSocket>,
|
||||||
fetch_stage_receiver: BlobReceiver,
|
fetch_stage_receiver: BlobReceiver,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let (retransmit_sender, retransmit_receiver) = channel();
|
let (retransmit_sender, retransmit_receiver) = channel();
|
||||||
|
|
||||||
@ -124,6 +127,7 @@ impl RetransmitStage {
|
|||||||
retransmit_receiver,
|
retransmit_receiver,
|
||||||
);
|
);
|
||||||
let window_service = WindowService::new(
|
let window_service = WindowService::new(
|
||||||
|
Some(bank_forks),
|
||||||
blocktree,
|
blocktree,
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
fetch_stage_receiver,
|
fetch_stage_receiver,
|
||||||
@ -131,6 +135,7 @@ impl RetransmitStage {
|
|||||||
repair_socket,
|
repair_socket,
|
||||||
exit,
|
exit,
|
||||||
None,
|
None,
|
||||||
|
genesis_blockhash,
|
||||||
);
|
);
|
||||||
|
|
||||||
let thread_hdls = vec![t_retransmit];
|
let thread_hdls = vec![t_retransmit];
|
||||||
|
@ -42,7 +42,7 @@ pub fn vote_account_balances_at_epoch(
|
|||||||
node_staked_accounts.map(|epoch_state| epoch_state.map(|(id, stake, _)| (*id, stake)).collect())
|
node_staked_accounts.map(|epoch_state| epoch_state.map(|(id, stake, _)| (*id, stake)).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// At the specified epoch, collect the delgate account balance and vote states for delegates
|
/// At the specified epoch, collect the delegate account balance and vote states for delegates
|
||||||
/// that have non-zero balance in any of their managed staking accounts
|
/// that have non-zero balance in any of their managed staking accounts
|
||||||
pub fn delegated_stakes_at_epoch(bank: &Bank, epoch_height: u64) -> Option<HashMap<Pubkey, u64>> {
|
pub fn delegated_stakes_at_epoch(bank: &Bank, epoch_height: u64) -> Option<HashMap<Pubkey, u64>> {
|
||||||
let node_staked_accounts = node_staked_accounts_at_epoch(bank, epoch_height);
|
let node_staked_accounts = node_staked_accounts_at_epoch(bank, epoch_height);
|
||||||
|
@ -11,6 +11,7 @@ use crate::fetch_stage::FetchStage;
|
|||||||
use crate::poh_recorder::{PohRecorder, WorkingBankEntries};
|
use crate::poh_recorder::{PohRecorder, WorkingBankEntries};
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::sigverify_stage::SigVerifyStage;
|
use crate::sigverify_stage::SigVerifyStage;
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
@ -40,6 +41,7 @@ impl Tpu {
|
|||||||
blocktree: &Arc<Blocktree>,
|
blocktree: &Arc<Blocktree>,
|
||||||
storage_entry_sender: EntrySender,
|
storage_entry_sender: EntrySender,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
cluster_info.write().unwrap().set_leader(id);
|
cluster_info.write().unwrap().set_leader(id);
|
||||||
|
|
||||||
@ -72,6 +74,7 @@ impl Tpu {
|
|||||||
&exit,
|
&exit,
|
||||||
blocktree,
|
blocktree,
|
||||||
storage_entry_sender,
|
storage_entry_sender,
|
||||||
|
genesis_blockhash,
|
||||||
);
|
);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
@ -25,6 +25,7 @@ use crate::retransmit_stage::RetransmitStage;
|
|||||||
use crate::rpc_subscriptions::RpcSubscriptions;
|
use crate::rpc_subscriptions::RpcSubscriptions;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::storage_stage::{StorageStage, StorageState};
|
use crate::storage_stage::{StorageStage, StorageState};
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
@ -72,6 +73,7 @@ impl Tvu {
|
|||||||
storage_entry_sender: EntrySender,
|
storage_entry_sender: EntrySender,
|
||||||
storage_entry_receiver: EntryReceiver,
|
storage_entry_receiver: EntryReceiver,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Self
|
) -> Self
|
||||||
where
|
where
|
||||||
T: 'static + KeypairUtil + Sync + Send,
|
T: 'static + KeypairUtil + Sync + Send,
|
||||||
@ -100,13 +102,14 @@ impl Tvu {
|
|||||||
//the packets coming out of blob_receiver need to be sent to the GPU and verified
|
//the packets coming out of blob_receiver need to be sent to the GPU and verified
|
||||||
//then sent to the window, which does the erasure coding reconstruction
|
//then sent to the window, which does the erasure coding reconstruction
|
||||||
let retransmit_stage = RetransmitStage::new(
|
let retransmit_stage = RetransmitStage::new(
|
||||||
&bank_forks,
|
bank_forks.clone(),
|
||||||
blocktree.clone(),
|
blocktree.clone(),
|
||||||
&cluster_info,
|
&cluster_info,
|
||||||
Arc::new(retransmit_socket),
|
Arc::new(retransmit_socket),
|
||||||
repair_socket,
|
repair_socket,
|
||||||
blob_fetch_receiver,
|
blob_fetch_receiver,
|
||||||
&exit,
|
&exit,
|
||||||
|
genesis_blockhash,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (replay_stage, slot_full_receiver) = ReplayStage::new(
|
let (replay_stage, slot_full_receiver) = ReplayStage::new(
|
||||||
@ -237,6 +240,7 @@ pub mod tests {
|
|||||||
storage_entry_sender,
|
storage_entry_sender,
|
||||||
storage_entry_receiver,
|
storage_entry_receiver,
|
||||||
&exit,
|
&exit,
|
||||||
|
&Hash::default(),
|
||||||
);
|
);
|
||||||
exit.store(true, Ordering::Relaxed);
|
exit.store(true, Ordering::Relaxed);
|
||||||
tvu.join().unwrap();
|
tvu.join().unwrap();
|
||||||
|
@ -1,15 +1,18 @@
|
|||||||
//! `window_service` handles the data plane incoming blobs, storing them in
|
//! `window_service` handles the data plane incoming blobs, storing them in
|
||||||
//! blocktree and retransmitting where required
|
//! blocktree and retransmitting where required
|
||||||
//!
|
//!
|
||||||
|
use crate::bank_forks::BankForks;
|
||||||
use crate::blocktree::Blocktree;
|
use crate::blocktree::Blocktree;
|
||||||
use crate::cluster_info::ClusterInfo;
|
use crate::cluster_info::ClusterInfo;
|
||||||
use crate::packet::{SharedBlob, BLOB_HEADER_SIZE};
|
use crate::leader_schedule_utils::slot_leader_at;
|
||||||
|
use crate::packet::{Blob, SharedBlob, BLOB_HEADER_SIZE};
|
||||||
use crate::repair_service::{RepairService, RepairSlotRange};
|
use crate::repair_service::{RepairService, RepairSlotRange};
|
||||||
use crate::result::{Error, Result};
|
use crate::result::{Error, Result};
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::streamer::{BlobReceiver, BlobSender};
|
use crate::streamer::{BlobReceiver, BlobSender};
|
||||||
use solana_metrics::counter::Counter;
|
use solana_metrics::counter::Counter;
|
||||||
use solana_metrics::{influxdb, submit};
|
use solana_runtime::bank::Bank;
|
||||||
|
use solana_sdk::hash::Hash;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::timing::duration_as_ms;
|
use solana_sdk::timing::duration_as_ms;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
@ -64,33 +67,57 @@ fn process_blobs(blobs: &[SharedBlob], blocktree: &Arc<Blocktree>) -> Result<()>
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// drop blobs that are from myself or not from the correct leader for the
|
||||||
|
/// blob's slot
|
||||||
|
fn should_retransmit_and_persist(blob: &Blob, bank: Option<&Arc<Bank>>, my_id: &Pubkey) -> bool {
|
||||||
|
let slot_leader_id = bank.and_then(|bank| slot_leader_at(blob.slot(), &bank));
|
||||||
|
|
||||||
|
if blob.id() == *my_id {
|
||||||
|
inc_new_counter_info!("streamer-recv_window-circular_transmission", 1);
|
||||||
|
false
|
||||||
|
} else if slot_leader_id == None {
|
||||||
|
inc_new_counter_info!("streamer-recv_window-unknown_leader", 1);
|
||||||
|
true
|
||||||
|
} else if slot_leader_id != Some(blob.id()) {
|
||||||
|
inc_new_counter_info!("streamer-recv_window-wrong_leader", 1);
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn recv_window(
|
fn recv_window(
|
||||||
|
bank_forks: Option<&Arc<RwLock<BankForks>>>,
|
||||||
blocktree: &Arc<Blocktree>,
|
blocktree: &Arc<Blocktree>,
|
||||||
id: &Pubkey,
|
my_id: &Pubkey,
|
||||||
r: &BlobReceiver,
|
r: &BlobReceiver,
|
||||||
retransmit: &BlobSender,
|
retransmit: &BlobSender,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let timer = Duration::from_millis(200);
|
let timer = Duration::from_millis(200);
|
||||||
let mut dq = r.recv_timeout(timer)?;
|
let mut blobs = r.recv_timeout(timer)?;
|
||||||
|
|
||||||
while let Ok(mut nq) = r.try_recv() {
|
while let Ok(mut blob) = r.try_recv() {
|
||||||
dq.append(&mut nq)
|
blobs.append(&mut blob)
|
||||||
}
|
}
|
||||||
let now = Instant::now();
|
let now = Instant::now();
|
||||||
inc_new_counter_info!("streamer-recv_window-recv", dq.len(), 100);
|
inc_new_counter_info!("streamer-recv_window-recv", blobs.len());
|
||||||
|
|
||||||
submit(
|
blobs.retain(|blob| {
|
||||||
influxdb::Point::new("recv-window")
|
should_retransmit_and_persist(
|
||||||
.add_field("count", influxdb::Value::Integer(dq.len() as i64))
|
&blob.read().unwrap(),
|
||||||
.to_owned(),
|
bank_forks
|
||||||
);
|
.map(|bank_forks| bank_forks.read().unwrap().working_bank())
|
||||||
|
.as_ref(),
|
||||||
|
my_id,
|
||||||
|
) && blob.read().unwrap().genesis_blockhash() == *genesis_blockhash
|
||||||
|
});
|
||||||
|
|
||||||
retransmit_blobs(&dq, retransmit, id)?;
|
retransmit_blobs(&blobs, retransmit, my_id)?;
|
||||||
|
|
||||||
//send a contiguous set of blocks
|
trace!("{} num blobs received: {}", my_id, blobs.len());
|
||||||
trace!("{} num blobs received: {}", id, dq.len());
|
|
||||||
|
|
||||||
process_blobs(&dq, blocktree)?;
|
process_blobs(&blobs, blocktree)?;
|
||||||
|
|
||||||
trace!(
|
trace!(
|
||||||
"Elapsed processing time in recv_window(): {}",
|
"Elapsed processing time in recv_window(): {}",
|
||||||
@ -124,7 +151,9 @@ pub struct WindowService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl WindowService {
|
impl WindowService {
|
||||||
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
|
bank_forks: Option<Arc<RwLock<BankForks>>>,
|
||||||
blocktree: Arc<Blocktree>,
|
blocktree: Arc<Blocktree>,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
r: BlobReceiver,
|
r: BlobReceiver,
|
||||||
@ -132,6 +161,7 @@ impl WindowService {
|
|||||||
repair_socket: Arc<UdpSocket>,
|
repair_socket: Arc<UdpSocket>,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
repair_slot_range: Option<RepairSlotRange>,
|
repair_slot_range: Option<RepairSlotRange>,
|
||||||
|
genesis_blockhash: &Hash,
|
||||||
) -> WindowService {
|
) -> WindowService {
|
||||||
let repair_service = RepairService::new(
|
let repair_service = RepairService::new(
|
||||||
blocktree.clone(),
|
blocktree.clone(),
|
||||||
@ -141,6 +171,8 @@ impl WindowService {
|
|||||||
repair_slot_range,
|
repair_slot_range,
|
||||||
);
|
);
|
||||||
let exit = exit.clone();
|
let exit = exit.clone();
|
||||||
|
let bank_forks = bank_forks.clone();
|
||||||
|
let hash = *genesis_blockhash;
|
||||||
let t_window = Builder::new()
|
let t_window = Builder::new()
|
||||||
.name("solana-window".to_string())
|
.name("solana-window".to_string())
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
@ -151,7 +183,9 @@ impl WindowService {
|
|||||||
if exit.load(Ordering::Relaxed) {
|
if exit.load(Ordering::Relaxed) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if let Err(e) = recv_window(&blocktree, &id, &r, &retransmit) {
|
if let Err(e) =
|
||||||
|
recv_window(bank_forks.as_ref(), &blocktree, &id, &r, &retransmit, &hash)
|
||||||
|
{
|
||||||
match e {
|
match e {
|
||||||
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break,
|
Error::RecvTimeoutError(RecvTimeoutError::Disconnected) => break,
|
||||||
Error::RecvTimeoutError(RecvTimeoutError::Timeout) => (),
|
Error::RecvTimeoutError(RecvTimeoutError::Timeout) => (),
|
||||||
@ -184,12 +218,15 @@ impl Service for WindowService {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::bank_forks::BankForks;
|
||||||
use crate::blocktree::{get_tmp_ledger_path, Blocktree};
|
use crate::blocktree::{get_tmp_ledger_path, Blocktree};
|
||||||
use crate::cluster_info::{ClusterInfo, Node};
|
use crate::cluster_info::{ClusterInfo, Node};
|
||||||
use crate::entry::{make_consecutive_blobs, make_tiny_test_entries, EntrySlice};
|
use crate::entry::{make_consecutive_blobs, make_tiny_test_entries, EntrySlice};
|
||||||
use crate::packet::index_blobs;
|
use crate::packet::{index_blobs, Blob};
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::streamer::{blob_receiver, responder};
|
use crate::streamer::{blob_receiver, responder};
|
||||||
|
use solana_runtime::bank::Bank;
|
||||||
|
use solana_sdk::genesis_block::GenesisBlock;
|
||||||
use solana_sdk::hash::Hash;
|
use solana_sdk::hash::Hash;
|
||||||
use std::fs::remove_dir_all;
|
use std::fs::remove_dir_all;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
@ -221,6 +258,46 @@ mod test {
|
|||||||
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
Blocktree::destroy(&blocktree_path).expect("Expected successful database destruction");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_should_retransmit_and_persist() {
|
||||||
|
let me_id = Pubkey::new_rand();
|
||||||
|
let leader_id = Pubkey::new_rand();
|
||||||
|
let bank = Arc::new(Bank::new(
|
||||||
|
&GenesisBlock::new_with_leader(100, &leader_id, 10).0,
|
||||||
|
));
|
||||||
|
|
||||||
|
let mut blob = Blob::default();
|
||||||
|
blob.set_id(&leader_id);
|
||||||
|
|
||||||
|
// without a Bank and blobs not from me, blob continues
|
||||||
|
assert_eq!(should_retransmit_and_persist(&blob, None, &me_id), true);
|
||||||
|
|
||||||
|
// with a Bank for slot 0, blob continues
|
||||||
|
assert_eq!(
|
||||||
|
should_retransmit_and_persist(&blob, Some(&bank), &me_id),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// set the blob to have come from the wrong leader
|
||||||
|
blob.set_id(&Pubkey::new_rand());
|
||||||
|
assert_eq!(
|
||||||
|
should_retransmit_and_persist(&blob, Some(&bank), &me_id),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
// with a Bank and no idea who leader is, we keep the blobs (for now)
|
||||||
|
// TODO: persistr in blocktree that we didn't know who the leader was at the time?
|
||||||
|
blob.set_slot(100);
|
||||||
|
assert_eq!(
|
||||||
|
should_retransmit_and_persist(&blob, Some(&bank), &me_id),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// if the blob came back from me, it doesn't continue, whether or not I have a bank
|
||||||
|
blob.set_id(&me_id);
|
||||||
|
assert_eq!(should_retransmit_and_persist(&blob, None, &me_id), false);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
pub fn window_send_test() {
|
pub fn window_send_test() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
@ -241,6 +318,10 @@ mod test {
|
|||||||
Blocktree::open(&blocktree_path).expect("Expected to be able to open database ledger"),
|
Blocktree::open(&blocktree_path).expect("Expected to be able to open database ledger"),
|
||||||
);
|
);
|
||||||
let t_window = WindowService::new(
|
let t_window = WindowService::new(
|
||||||
|
Some(Arc::new(RwLock::new(BankForks::new(
|
||||||
|
0,
|
||||||
|
Bank::new(&GenesisBlock::new_with_leader(100, &me_id, 10).0),
|
||||||
|
)))),
|
||||||
blocktree,
|
blocktree,
|
||||||
subs,
|
subs,
|
||||||
r_reader,
|
r_reader,
|
||||||
@ -248,6 +329,7 @@ mod test {
|
|||||||
Arc::new(leader_node.sockets.repair),
|
Arc::new(leader_node.sockets.repair),
|
||||||
&exit,
|
&exit,
|
||||||
None,
|
None,
|
||||||
|
&Hash::default(),
|
||||||
);
|
);
|
||||||
let t_responder = {
|
let t_responder = {
|
||||||
let (s_responder, r_responder) = channel();
|
let (s_responder, r_responder) = channel();
|
||||||
@ -313,6 +395,10 @@ mod test {
|
|||||||
Blocktree::open(&blocktree_path).expect("Expected to be able to open database ledger"),
|
Blocktree::open(&blocktree_path).expect("Expected to be able to open database ledger"),
|
||||||
);
|
);
|
||||||
let t_window = WindowService::new(
|
let t_window = WindowService::new(
|
||||||
|
Some(Arc::new(RwLock::new(BankForks::new(
|
||||||
|
0,
|
||||||
|
Bank::new(&GenesisBlock::new_with_leader(100, &me_id, 10).0),
|
||||||
|
)))),
|
||||||
blocktree,
|
blocktree,
|
||||||
subs.clone(),
|
subs.clone(),
|
||||||
r_reader,
|
r_reader,
|
||||||
@ -320,6 +406,7 @@ mod test {
|
|||||||
Arc::new(leader_node.sockets.repair),
|
Arc::new(leader_node.sockets.repair),
|
||||||
&exit,
|
&exit,
|
||||||
None,
|
None,
|
||||||
|
&Hash::default(),
|
||||||
);
|
);
|
||||||
let t_responder = {
|
let t_responder = {
|
||||||
let (s_responder, r_responder) = channel();
|
let (s_responder, r_responder) = channel();
|
||||||
|
@ -127,6 +127,7 @@ fn test_replay() {
|
|||||||
storage_sender,
|
storage_sender,
|
||||||
storage_receiver,
|
storage_receiver,
|
||||||
&exit,
|
&exit,
|
||||||
|
&solana_sdk::hash::Hash::default(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut mint_ref_balance = starting_mint_balance;
|
let mut mint_ref_balance = starting_mint_balance;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-drone"
|
name = "solana-drone"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -20,9 +20,9 @@ clap = "2.33"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
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.13.0"
|
version = "0.13.1"
|
||||||
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.33.0"
|
clap = "2.33.0"
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-drone = { path = "../drone", version = "0.13.0" }
|
solana-drone = { path = "../drone", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../runtime", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.13.1" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.13.0" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0"
|
version = "0.13.1"
|
||||||
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,18 +11,18 @@ homepage = "https://solana.com/"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-budget-api = { path = "../programs/budget_api", version = "0.13.0" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.13.1" }
|
||||||
solana-storage-api = { path = "../programs/storage_api", version = "0.13.0" }
|
solana-storage-api = { path = "../programs/storage_api", version = "0.13.1" }
|
||||||
solana-token-api = { path = "../programs/token_api", version = "0.13.0" }
|
solana-token-api = { path = "../programs/token_api", version = "0.13.1" }
|
||||||
solana-config-api = { path = "../programs/config_api", version = "0.13.0" }
|
solana-config-api = { path = "../programs/config_api", version = "0.13.1" }
|
||||||
solana-exchange-api = { path = "../programs/exchange_api", version = "0.13.0" }
|
solana-exchange-api = { path = "../programs/exchange_api", version = "0.13.1" }
|
||||||
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
hashbrown = "0.2.1"
|
hashbrown = "0.2.1"
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.13.1" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = ["solana/cuda"]
|
cuda = ["solana/cuda"]
|
||||||
|
@ -14,6 +14,7 @@ use std::error;
|
|||||||
pub const BOOTSTRAP_LEADER_LAMPORTS: u64 = 43;
|
pub const BOOTSTRAP_LEADER_LAMPORTS: u64 = 43;
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn error::Error>> {
|
fn main() -> Result<(), Box<dyn error::Error>> {
|
||||||
|
let default_bootstrap_leader_lamports = &BOOTSTRAP_LEADER_LAMPORTS.to_string();
|
||||||
let matches = App::new(crate_name!())
|
let matches = App::new(crate_name!())
|
||||||
.about(crate_description!())
|
.about(crate_description!())
|
||||||
.version(crate_version!())
|
.version(crate_version!())
|
||||||
@ -62,6 +63,15 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
.required(true)
|
.required(true)
|
||||||
.help("Path to file containing the bootstrap leader's staking keypair"),
|
.help("Path to file containing the bootstrap leader's staking keypair"),
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("bootstrap_leader_lamports")
|
||||||
|
.long("bootstrap-leader-lamports")
|
||||||
|
.value_name("LAMPORTS")
|
||||||
|
.takes_value(true)
|
||||||
|
.default_value(default_bootstrap_leader_lamports)
|
||||||
|
.required(true)
|
||||||
|
.help("Number of lamports to assign to the bootstrap leader"),
|
||||||
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let bootstrap_leader_keypair_file = matches.value_of("bootstrap_leader_keypair_file").unwrap();
|
let bootstrap_leader_keypair_file = matches.value_of("bootstrap_leader_keypair_file").unwrap();
|
||||||
@ -69,6 +79,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
let ledger_path = matches.value_of("ledger_path").unwrap();
|
let ledger_path = matches.value_of("ledger_path").unwrap();
|
||||||
let mint_keypair_file = matches.value_of("mint_keypair_file").unwrap();
|
let mint_keypair_file = matches.value_of("mint_keypair_file").unwrap();
|
||||||
let lamports = value_t_or_exit!(matches, "lamports", u64);
|
let lamports = value_t_or_exit!(matches, "lamports", u64);
|
||||||
|
let bootstrap_leader_lamports = value_t_or_exit!(matches, "bootstrap_leader_lamports", u64);
|
||||||
|
|
||||||
let bootstrap_leader_keypair = read_keypair(bootstrap_leader_keypair_file)?;
|
let bootstrap_leader_keypair = read_keypair(bootstrap_leader_keypair_file)?;
|
||||||
let bootstrap_vote_keypair = read_keypair(bootstrap_vote_keypair_file)?;
|
let bootstrap_vote_keypair = read_keypair(bootstrap_vote_keypair_file)?;
|
||||||
@ -77,7 +88,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
let (mut genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(
|
let (mut genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(
|
||||||
lamports,
|
lamports,
|
||||||
&bootstrap_leader_keypair.pubkey(),
|
&bootstrap_leader_keypair.pubkey(),
|
||||||
BOOTSTRAP_LEADER_LAMPORTS,
|
bootstrap_leader_lamports,
|
||||||
);
|
);
|
||||||
genesis_block.mint_id = mint_keypair.pubkey();
|
genesis_block.mint_id = mint_keypair.pubkey();
|
||||||
genesis_block.bootstrap_leader_vote_account_id = bootstrap_vote_keypair.pubkey();
|
genesis_block.bootstrap_leader_vote_account_id = bootstrap_vote_keypair.pubkey();
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-gossip"
|
name = "solana-gossip"
|
||||||
description = "Blockchain, Rebuilt for Scale"
|
description = "Blockchain, Rebuilt for Scale"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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,9 +11,9 @@ homepage = "https://solana.com/"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
env_logger = "0.6.1"
|
env_logger = "0.6.1"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
chacha = []
|
chacha = []
|
||||||
|
@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
|||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-install"
|
name = "solana-install"
|
||||||
description = "The solana cluster software installer"
|
description = "The solana cluster software installer"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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/"
|
||||||
@ -28,10 +28,10 @@ ring = "0.13.2"
|
|||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
serde_yaml = "0.8.8"
|
serde_yaml = "0.8.8"
|
||||||
solana-client = { path = "../client", version = "0.13.0" }
|
solana-client = { path = "../client", version = "0.13.1" }
|
||||||
solana-config-api = { path = "../programs/config_api", version = "0.13.0" }
|
solana-config-api = { path = "../programs/config_api", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
tar = "0.4.22"
|
tar = "0.4.22"
|
||||||
tempdir = "0.3.7"
|
tempdir = "0.3.7"
|
||||||
url = "1.7.2"
|
url = "1.7.2"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -15,7 +15,7 @@ erasure = []
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
dirs = "1.0.5"
|
dirs = "1.0.5"
|
||||||
clap = "2.33"
|
clap = "2.33"
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "solana-keygen"
|
name = "solana-keygen"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-kvstore"
|
name = "solana-kvstore"
|
||||||
description = "Embedded Key-Value store for solana"
|
description = "Embedded Key-Value store for solana"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
|
@ -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.13.0"
|
version = "0.13.1"
|
||||||
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.33.0"
|
clap = "2.33.0"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0"
|
version = "0.13.1"
|
||||||
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.13.0"
|
version = "0.13.1"
|
||||||
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.15"
|
reqwest = "0.9.15"
|
||||||
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.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
rand = "0.6.5"
|
rand = "0.6.5"
|
||||||
|
@ -138,6 +138,7 @@ setup_vote_account() {
|
|||||||
declare drone_address=$1
|
declare drone_address=$1
|
||||||
declare node_id_path=$2
|
declare node_id_path=$2
|
||||||
declare vote_id_path=$3
|
declare vote_id_path=$3
|
||||||
|
declare stake=$4
|
||||||
|
|
||||||
declare node_id
|
declare node_id
|
||||||
node_id=$($solana_wallet --keypair "$node_id_path" address)
|
node_id=$($solana_wallet --keypair "$node_id_path" address)
|
||||||
@ -147,19 +148,17 @@ setup_vote_account() {
|
|||||||
|
|
||||||
if [[ -f "$vote_id_path".configured ]]; then
|
if [[ -f "$vote_id_path".configured ]]; then
|
||||||
echo "Vote account has already been configured"
|
echo "Vote account has already been configured"
|
||||||
return 0
|
else
|
||||||
|
airdrop "$node_id_path" "$drone_address" "$stake" || return $?
|
||||||
|
|
||||||
|
# Fund the vote account from the node, with the node as the node_id
|
||||||
|
$solana_wallet --keypair "$node_id_path" --host "$drone_address" \
|
||||||
|
create-vote-account "$vote_id" "$node_id" $((stake - 1)) || return $?
|
||||||
|
|
||||||
|
touch "$vote_id_path".configured
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# A fullnode requires 43 lamports to function:
|
$solana_wallet --keypair "$node_id_path" --host "$drone_address" show-vote-account "$vote_id"
|
||||||
# - one lamport to keep the node identity public key valid. TODO: really??
|
|
||||||
# - 42 more for the vote account we fund
|
|
||||||
airdrop "$node_id_path" "$drone_address" 43 || return $?
|
|
||||||
|
|
||||||
# Fund the vote account from the node, with the node as the node_id
|
|
||||||
$solana_wallet --keypair "$node_id_path" --host "$drone_address" \
|
|
||||||
create-vote-account "$vote_id" "$node_id" 42 || return $?
|
|
||||||
|
|
||||||
touch "$vote_id_path".configured
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +168,7 @@ fullnode_usage() {
|
|||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
usage: $0 [-x] [--blockstream PATH] [--init-complete-file FILE] [--only-bootstrap-stake] [--no-voting] [--rpc-port port] [rsync network path to bootstrap leader configuration] [network entry point]
|
usage: $0 [-x] [--blockstream PATH] [--init-complete-file FILE] [--stake LAMPORTS] [--no-voting] [--rpc-port port] [rsync network path to bootstrap leader configuration] [network entry point]
|
||||||
|
|
||||||
Start a full node on the specified network
|
Start a full node on the specified network
|
||||||
|
|
||||||
@ -178,7 +177,7 @@ Start a full node on the specified network
|
|||||||
the specified label. Does not apply to the bootstrap leader
|
the specified label. Does not apply to the bootstrap leader
|
||||||
--blockstream PATH - open blockstream at this unix domain socket location
|
--blockstream PATH - open blockstream at this unix domain socket location
|
||||||
--init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete
|
--init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete
|
||||||
--only-bootstrap-stake - Only stake the bootstrap leader, effectively disabling leader rotation
|
--stake LAMPORTS - Number of lamports to stake
|
||||||
--public-address - advertise public machine address in gossip. By default the local machine address is advertised
|
--public-address - advertise public machine address in gossip. By default the local machine address is advertised
|
||||||
--no-voting - start node without vote signer
|
--no-voting - start node without vote signer
|
||||||
--rpc-port port - custom RPC port for this node
|
--rpc-port port - custom RPC port for this node
|
||||||
|
@ -16,7 +16,7 @@ fi
|
|||||||
gossip_port=
|
gossip_port=
|
||||||
extra_fullnode_args=()
|
extra_fullnode_args=()
|
||||||
self_setup=0
|
self_setup=0
|
||||||
setup_stakes=1
|
stake=43 # number of lamports to assign as stake (plus transaction fee to setup the stake)
|
||||||
poll_for_new_genesis_block=0
|
poll_for_new_genesis_block=0
|
||||||
|
|
||||||
while [[ ${1:0:1} = - ]]; do
|
while [[ ${1:0:1} = - ]]; do
|
||||||
@ -32,6 +32,7 @@ while [[ ${1:0:1} = - ]]; do
|
|||||||
poll_for_new_genesis_block=1
|
poll_for_new_genesis_block=1
|
||||||
shift
|
shift
|
||||||
elif [[ $1 = --blockstream ]]; then
|
elif [[ $1 = --blockstream ]]; then
|
||||||
|
stake=0
|
||||||
extra_fullnode_args+=("$1" "$2")
|
extra_fullnode_args+=("$1" "$2")
|
||||||
shift 2
|
shift 2
|
||||||
elif [[ $1 = --enable-rpc-exit ]]; then
|
elif [[ $1 = --enable-rpc-exit ]]; then
|
||||||
@ -40,9 +41,9 @@ while [[ ${1:0:1} = - ]]; do
|
|||||||
elif [[ $1 = --init-complete-file ]]; then
|
elif [[ $1 = --init-complete-file ]]; then
|
||||||
extra_fullnode_args+=("$1" "$2")
|
extra_fullnode_args+=("$1" "$2")
|
||||||
shift 2
|
shift 2
|
||||||
elif [[ $1 = --only-bootstrap-stake ]]; then
|
elif [[ $1 = --stake ]]; then
|
||||||
setup_stakes=0
|
stake="$2"
|
||||||
shift
|
shift 2
|
||||||
elif [[ $1 = --public-address ]]; then
|
elif [[ $1 = --public-address ]]; then
|
||||||
extra_fullnode_args+=("$1")
|
extra_fullnode_args+=("$1")
|
||||||
shift
|
shift
|
||||||
@ -169,6 +170,11 @@ while true; do
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
trap 'kill "$pid" && wait "$pid"' INT TERM ERR
|
trap 'kill "$pid" && wait "$pid"' INT TERM ERR
|
||||||
|
|
||||||
|
if ((stake)); then
|
||||||
|
setup_vote_account "${leader_address%:*}" "$fullnode_id_path" "$fullnode_vote_id_path" "$stake"
|
||||||
|
fi
|
||||||
|
|
||||||
$program \
|
$program \
|
||||||
--identity "$fullnode_id_path" \
|
--identity "$fullnode_id_path" \
|
||||||
--voting-keypair "$fullnode_vote_id_path" \
|
--voting-keypair "$fullnode_vote_id_path" \
|
||||||
@ -182,9 +188,6 @@ while true; do
|
|||||||
pid=$!
|
pid=$!
|
||||||
oom_score_adj "$pid" 1000
|
oom_score_adj "$pid" 1000
|
||||||
|
|
||||||
if ((setup_stakes)); then
|
|
||||||
setup_vote_account "${leader_address%:*}" "$fullnode_id_path" "$fullnode_vote_id_path"
|
|
||||||
fi
|
|
||||||
set +x
|
set +x
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
@ -201,7 +204,7 @@ while true; do
|
|||||||
$rsync -r "$rsync_leader_url"/config/ledger "$SOLANA_RSYNC_CONFIG_DIR" || true
|
$rsync -r "$rsync_leader_url"/config/ledger "$SOLANA_RSYNC_CONFIG_DIR" || true
|
||||||
if [[ -n $(diff "$SOLANA_RSYNC_CONFIG_DIR"/ledger/genesis.json "$ledger_config_dir"/genesis.json 2>&1) ]]; then
|
if [[ -n $(diff "$SOLANA_RSYNC_CONFIG_DIR"/ledger/genesis.json "$ledger_config_dir"/genesis.json 2>&1) ]]; then
|
||||||
echo "############## New genesis detected, restarting fullnode ##############"
|
echo "############## New genesis detected, restarting fullnode ##############"
|
||||||
rm -rf "$ledger_config_dir"
|
rm -rf "$ledger_config_dir" "$vote_id_path".configured
|
||||||
kill "$pid" || true
|
kill "$pid" || true
|
||||||
wait "$pid" || true
|
wait "$pid" || true
|
||||||
break
|
break
|
||||||
|
@ -29,8 +29,10 @@ EOF
|
|||||||
|
|
||||||
lamports=1000000000
|
lamports=1000000000
|
||||||
bootstrap_leader=true
|
bootstrap_leader=true
|
||||||
|
bootstrap_leader_lamports=
|
||||||
|
|
||||||
fullnode=true
|
fullnode=true
|
||||||
while getopts "h?n:lpt:" opt; do
|
while getopts "h?n:b:lpt:" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
h|\?)
|
h|\?)
|
||||||
usage
|
usage
|
||||||
@ -39,6 +41,9 @@ while getopts "h?n:lpt:" opt; do
|
|||||||
n)
|
n)
|
||||||
lamports="$OPTARG"
|
lamports="$OPTARG"
|
||||||
;;
|
;;
|
||||||
|
b)
|
||||||
|
bootstrap_leader_lamports="$OPTARG"
|
||||||
|
;;
|
||||||
t)
|
t)
|
||||||
node_type="$OPTARG"
|
node_type="$OPTARG"
|
||||||
case $OPTARG in
|
case $OPTARG in
|
||||||
@ -77,12 +82,20 @@ if $bootstrap_leader; then
|
|||||||
$solana_keygen -o "$SOLANA_CONFIG_DIR"/mint-id.json
|
$solana_keygen -o "$SOLANA_CONFIG_DIR"/mint-id.json
|
||||||
$solana_keygen -o "$SOLANA_CONFIG_DIR"/bootstrap-leader-id.json
|
$solana_keygen -o "$SOLANA_CONFIG_DIR"/bootstrap-leader-id.json
|
||||||
$solana_keygen -o "$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-id.json
|
$solana_keygen -o "$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-id.json
|
||||||
$solana_genesis \
|
|
||||||
--bootstrap-leader-keypair "$SOLANA_CONFIG_DIR"/bootstrap-leader-id.json \
|
args=(
|
||||||
--bootstrap-vote-keypair "$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-id.json \
|
--bootstrap-leader-keypair "$SOLANA_CONFIG_DIR"/bootstrap-leader-id.json
|
||||||
--ledger "$SOLANA_RSYNC_CONFIG_DIR"/ledger \
|
--bootstrap-vote-keypair "$SOLANA_CONFIG_DIR"/bootstrap-leader-vote-id.json
|
||||||
--mint "$SOLANA_CONFIG_DIR"/mint-id.json \
|
--ledger "$SOLANA_RSYNC_CONFIG_DIR"/ledger
|
||||||
|
--mint "$SOLANA_CONFIG_DIR"/mint-id.json
|
||||||
--lamports "$lamports"
|
--lamports "$lamports"
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ -n $bootstrap_leader_lamports ]]; then
|
||||||
|
args+=(--bootstrap-leader-lamports "$bootstrap_leader_lamports")
|
||||||
|
fi
|
||||||
|
|
||||||
|
$solana_genesis "${args[@]}"
|
||||||
cp -a "$SOLANA_RSYNC_CONFIG_DIR"/ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger
|
cp -a "$SOLANA_RSYNC_CONFIG_DIR"/ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
@ -15,6 +15,14 @@ leaderRotation="$8"
|
|||||||
set +x
|
set +x
|
||||||
export RUST_LOG
|
export RUST_LOG
|
||||||
|
|
||||||
|
# Use a very large stake (relative to the default multinode-demo/ stake of 43)
|
||||||
|
# for the testnet fullnodes setup by net/. This make it less likely that
|
||||||
|
# low-staked ephemeral validator a random user may attach to testnet will cause
|
||||||
|
# trouble
|
||||||
|
#
|
||||||
|
# Ref: https://github.com/solana-labs/solana/issues/3798
|
||||||
|
stake=424243
|
||||||
|
|
||||||
missing() {
|
missing() {
|
||||||
echo "Error: $1 not specified"
|
echo "Error: $1 not specified"
|
||||||
exit 1
|
exit 1
|
||||||
@ -69,20 +77,16 @@ local|tar)
|
|||||||
fi
|
fi
|
||||||
set -x
|
set -x
|
||||||
if [[ $skipSetup != true ]]; then
|
if [[ $skipSetup != true ]]; then
|
||||||
./multinode-demo/setup.sh -t bootstrap-leader
|
./multinode-demo/setup.sh -t bootstrap-leader -b $stake
|
||||||
fi
|
fi
|
||||||
./multinode-demo/drone.sh > drone.log 2>&1 &
|
./multinode-demo/drone.sh > drone.log 2>&1 &
|
||||||
|
|
||||||
maybeNoLeaderRotation=
|
|
||||||
if ! $leaderRotation; then
|
|
||||||
maybeNoLeaderRotation="--only-bootstrap-stake"
|
|
||||||
fi
|
|
||||||
maybePublicAddress=
|
maybePublicAddress=
|
||||||
if $publicNetwork; then
|
if $publicNetwork; then
|
||||||
maybePublicAddress="--public-address"
|
maybePublicAddress="--public-address"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./multinode-demo/bootstrap-leader.sh $maybeNoLeaderRotation $maybePublicAddress > bootstrap-leader.log 2>&1 &
|
./multinode-demo/bootstrap-leader.sh $maybePublicAddress > bootstrap-leader.log 2>&1 &
|
||||||
ln -sTf bootstrap-leader.log fullnode.log
|
ln -sTf bootstrap-leader.log fullnode.log
|
||||||
;;
|
;;
|
||||||
fullnode|blockstreamer)
|
fullnode|blockstreamer)
|
||||||
@ -94,9 +98,6 @@ local|tar)
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
args=()
|
args=()
|
||||||
if ! $leaderRotation; then
|
|
||||||
args+=("--only-bootstrap-stake")
|
|
||||||
fi
|
|
||||||
if $publicNetwork; then
|
if $publicNetwork; then
|
||||||
args+=("--public-address")
|
args+=("--public-address")
|
||||||
fi
|
fi
|
||||||
@ -104,7 +105,14 @@ local|tar)
|
|||||||
args+=(
|
args+=(
|
||||||
--blockstream /tmp/solana-blockstream.sock
|
--blockstream /tmp/solana-blockstream.sock
|
||||||
--no-voting
|
--no-voting
|
||||||
|
--stake 0
|
||||||
)
|
)
|
||||||
|
else
|
||||||
|
if $leaderRotation; then
|
||||||
|
args+=("--stake" "$stake")
|
||||||
|
else
|
||||||
|
args+=("--stake" 0)
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
args+=(
|
args+=(
|
||||||
|
@ -133,7 +133,7 @@ echo "--- $entrypointIp: validator sanity"
|
|||||||
if $validatorSanity; then
|
if $validatorSanity; then
|
||||||
(
|
(
|
||||||
set -x -o pipefail
|
set -x -o pipefail
|
||||||
timeout 10s ./multinode-demo/fullnode-x.sh \
|
timeout 10s ./multinode-demo/fullnode-x.sh --stake 0 \
|
||||||
"$entrypointRsyncUrl" \
|
"$entrypointRsyncUrl" \
|
||||||
"$entrypointIp:8001" 2>&1 | tee validator-sanity.log
|
"$entrypointIp:8001" 2>&1 | tee validator-sanity.log
|
||||||
) || {
|
) || {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-netutil"
|
name = "solana-netutil"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0"
|
version = "0.13.1"
|
||||||
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.3"
|
|||||||
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.13.0" }
|
solana-bpfloader = { path = "../bpf_loader", version = "0.13.1" }
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[[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.13.0"
|
version = "0.13.1"
|
||||||
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.13.0"
|
version = "0.13.1"
|
||||||
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.51"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana_rbpf = "=0.1.10"
|
solana_rbpf = "=0.1.10"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_bpf_loader"
|
name = "solana_bpf_loader"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-budget-api"
|
name = "solana-budget-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -14,10 +14,10 @@ chrono = { version = "0.4.0", features = ["serde"] }
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_budget_api"
|
name = "solana_budget_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-budget-program"
|
name = "solana-budget-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-budget-api = { path = "../budget_api", version = "0.13.0" }
|
solana-budget-api = { path = "../budget_api", version = "0.13.1" }
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_budget_program"
|
name = "solana_budget_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-config-api"
|
name = "solana-config-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "config program API"
|
description = "config 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,11 +13,11 @@ bincode = "1.1.3"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_config_api"
|
name = "solana_config_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-config-program"
|
name = "solana-config-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "config program"
|
description = "config 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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-config-api = { path = "../config_api", version = "0.13.0" }
|
solana-config-api = { path = "../config_api", version = "0.13.1" }
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_config_program"
|
name = "solana_config_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-exchange-api"
|
name = "solana-exchange-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "Solana Exchange program API"
|
description = "Solana Exchange 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,11 +13,11 @@ log = "0.4.2"
|
|||||||
bincode = "1.1.3"
|
bincode = "1.1.3"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_exchange_api"
|
name = "solana_exchange_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-exchange-program"
|
name = "solana-exchange-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "Solana exchange program"
|
description = "Solana exchange 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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-exchange-api = { path = "../exchange_api", version = "0.13.0" }
|
solana-exchange-api = { path = "../exchange_api", version = "0.13.1" }
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_exchange_program"
|
name = "solana_exchange_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-failure-program"
|
name = "solana-failure-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_failure_program"
|
name = "solana_failure_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-noop-program"
|
name = "solana-noop-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_noop_program"
|
name = "solana_noop_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-stake-api"
|
name = "solana-stake-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "Solana Stake program API"
|
description = "Solana Stake 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,13 +13,13 @@ bincode = "1.1.3"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../../metrics", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../vote_api", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_stake_api"
|
name = "solana_stake_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-stake-program"
|
name = "solana-stake-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
description = "Solana stake program"
|
description = "Solana stake 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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-stake-api = { path = "../stake_api", version = "0.13.0" }
|
solana-stake-api = { path = "../stake_api", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_stake_program"
|
name = "solana_stake_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-storage-api"
|
name = "solana-storage-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -13,11 +13,11 @@ bincode = "1.1.3"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_storage_api"
|
name = "solana_storage_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-storage-program"
|
name = "solana-storage-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-storage-api = { path = "../storage_api", version = "0.13.0" }
|
solana-storage-api = { path = "../storage_api", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_storage_program"
|
name = "solana_storage_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-token-api"
|
name = "solana-token-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -13,8 +13,8 @@ bincode = "1.1.3"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_token_api"
|
name = "solana_token_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-token-program"
|
name = "solana-token-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-token-api = { path = "../token_api", version = "0.13.0" }
|
solana-token-api = { path = "../token_api", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_token_program"
|
name = "solana_token_program"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-vote-api"
|
name = "solana-vote-api"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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,12 +13,12 @@ bincode = "1.1.3"
|
|||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_derive = "1.0.90"
|
serde_derive = "1.0.90"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../../metrics", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-runtime = { path = "../../runtime", version = "0.13.0" }
|
solana-runtime = { path = "../../runtime", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_vote_api"
|
name = "solana_vote_api"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-vote-program"
|
name = "solana-vote-program"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -10,9 +10,9 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.2"
|
log = "0.4.2"
|
||||||
solana-logger = { path = "../../logger", version = "0.13.0" }
|
solana-logger = { path = "../../logger", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../../sdk", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../vote_api", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_vote_program"
|
name = "solana_vote_program"
|
||||||
|
@ -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.13.0"
|
version = "0.13.1"
|
||||||
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.33.0"
|
clap = "2.33.0"
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
chacha = ["solana/chacha"]
|
chacha = ["solana/chacha"]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-runtime"
|
name = "solana-runtime"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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"
|
||||||
@ -23,10 +23,10 @@ rayon = "1.0.0"
|
|||||||
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-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.13.1" }
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "solana_runtime"
|
name = "solana_runtime"
|
||||||
|
@ -89,7 +89,7 @@ for Cargo_toml in "${Cargo_tomls[@]}"; do
|
|||||||
(
|
(
|
||||||
set -x
|
set -x
|
||||||
sed -i "$Cargo_toml" -e "
|
sed -i "$Cargo_toml" -e "
|
||||||
s/^$crate = .*path = \"\([^\"]*\)\".*\$/$crate = \{ path = \"\1\", version = \"$newVersion\" \}/
|
s/^$crate = { *path *= *\"\([^\"]*\)\" *, *version *= *\"[^\"]*\"\(.*\)} *\$/$crate = \{ path = \"\1\", version = \"$newVersion\"\2 \}/
|
||||||
"
|
"
|
||||||
)
|
)
|
||||||
done
|
done
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "solana-sdk"
|
name = "solana-sdk"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
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.13.0"
|
version = "0.13.1"
|
||||||
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.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
|
|
||||||
[[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.13.0"
|
version = "0.13.1"
|
||||||
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 = "11.0.0"
|
|||||||
jsonrpc-http-server = "11.0.0"
|
jsonrpc-http-server = "11.0.0"
|
||||||
serde = "1.0.90"
|
serde = "1.0.90"
|
||||||
serde_json = "1.0.39"
|
serde_json = "1.0.39"
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.13.0" }
|
solana-metrics = { path = "../metrics", version = "0.13.1" }
|
||||||
|
|
||||||
[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.13.0"
|
version = "0.13.1"
|
||||||
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,18 +16,18 @@ 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-budget-api = { path = "../programs/budget_api", version = "0.13.0" }
|
solana-budget-api = { path = "../programs/budget_api", version = "0.13.1" }
|
||||||
solana-client = { path = "../client", version = "0.13.0" }
|
solana-client = { path = "../client", version = "0.13.1" }
|
||||||
solana-drone = { path = "../drone", version = "0.13.0" }
|
solana-drone = { path = "../drone", version = "0.13.1" }
|
||||||
solana-logger = { path = "../logger", version = "0.13.0" }
|
solana-logger = { path = "../logger", version = "0.13.1" }
|
||||||
solana-netutil = { path = "../netutil", version = "0.13.0" }
|
solana-netutil = { path = "../netutil", version = "0.13.1" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.13.0" }
|
solana-sdk = { path = "../sdk", version = "0.13.1" }
|
||||||
solana-vote-api = { path = "../programs/vote_api", version = "0.13.0" }
|
solana-vote-api = { path = "../programs/vote_api", version = "0.13.1" }
|
||||||
solana-vote-signer = { path = "../vote-signer", version = "0.13.0" }
|
solana-vote-signer = { path = "../vote-signer", version = "0.13.1" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-budget-program = { path = "../programs/budget_program", version = "0.13.0" }
|
solana-budget-program = { path = "../programs/budget_program", version = "0.13.1" }
|
||||||
solana = { path = "../core", version = "0.13.0" }
|
solana = { path = "../core", version = "0.13.1" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
cuda = []
|
cuda = []
|
||||||
|
@ -268,6 +268,19 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
),
|
),
|
||||||
|
|
||||||
)
|
)
|
||||||
|
.subcommand(
|
||||||
|
SubCommand::with_name("show-vote-account")
|
||||||
|
.about("Show the contents of a vote account")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("voting_account_id")
|
||||||
|
.index(1)
|
||||||
|
.value_name("PUBKEY")
|
||||||
|
.takes_value(true)
|
||||||
|
.required(true)
|
||||||
|
.validator(is_pubkey)
|
||||||
|
.help("Vote account pubkey"),
|
||||||
|
)
|
||||||
|
)
|
||||||
.subcommand(
|
.subcommand(
|
||||||
SubCommand::with_name("deploy")
|
SubCommand::with_name("deploy")
|
||||||
.about("Deploy a program")
|
.about("Deploy a program")
|
||||||
|
@ -38,6 +38,7 @@ pub enum WalletCommand {
|
|||||||
// ConfigureStakingAccount(delegate_id, authorized_voter_id)
|
// ConfigureStakingAccount(delegate_id, authorized_voter_id)
|
||||||
AuthorizeVoter(Pubkey),
|
AuthorizeVoter(Pubkey),
|
||||||
CreateVoteAccount(Pubkey, Pubkey, u32, u64),
|
CreateVoteAccount(Pubkey, Pubkey, u32, u64),
|
||||||
|
ShowVoteAccount(Pubkey),
|
||||||
Deploy(String),
|
Deploy(String),
|
||||||
GetTransactionCount,
|
GetTransactionCount,
|
||||||
// Pay(lamports, to, timestamp, timestamp_pubkey, witness(es), cancelable)
|
// Pay(lamports, to, timestamp, timestamp_pubkey, witness(es), cancelable)
|
||||||
@ -184,6 +185,10 @@ pub fn parse_command(
|
|||||||
lamports,
|
lamports,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
("show-vote-account", Some(matches)) => {
|
||||||
|
let voting_account_id = pubkey_of(matches, "voting_account_id").unwrap();
|
||||||
|
Ok(WalletCommand::ShowVoteAccount(voting_account_id))
|
||||||
|
}
|
||||||
("deploy", Some(deploy_matches)) => Ok(WalletCommand::Deploy(
|
("deploy", Some(deploy_matches)) => Ok(WalletCommand::Deploy(
|
||||||
deploy_matches
|
deploy_matches
|
||||||
.value_of("program_location")
|
.value_of("program_location")
|
||||||
@ -368,6 +373,43 @@ fn process_create_staking(
|
|||||||
Ok(signature_str.to_string())
|
Ok(signature_str.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn process_show_staking(
|
||||||
|
rpc_client: &RpcClient,
|
||||||
|
_config: &WalletConfig,
|
||||||
|
voting_account_id: &Pubkey,
|
||||||
|
) -> ProcessResult {
|
||||||
|
use solana_vote_api::vote_state::VoteState;
|
||||||
|
let vote_account_lamports = rpc_client.retry_get_balance(voting_account_id, 5)?;
|
||||||
|
let vote_account_data = rpc_client.get_account_data(voting_account_id)?;
|
||||||
|
let vote_state = VoteState::deserialize(&vote_account_data).unwrap();
|
||||||
|
|
||||||
|
println!("account lamports: {}", vote_account_lamports.unwrap());
|
||||||
|
println!("node id: {}", vote_state.node_id);
|
||||||
|
println!("authorized voter id: {}", vote_state.authorized_voter_id);
|
||||||
|
println!("credits: {}", vote_state.credits());
|
||||||
|
println!(
|
||||||
|
"commission: {}%",
|
||||||
|
f64::from(vote_state.commission) / f64::from(std::u32::MAX)
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"root slot: {}",
|
||||||
|
match vote_state.root_slot {
|
||||||
|
Some(slot) => slot.to_string(),
|
||||||
|
None => "~".to_string(),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if !vote_state.votes.is_empty() {
|
||||||
|
println!("votes:");
|
||||||
|
for vote in vote_state.votes {
|
||||||
|
println!(
|
||||||
|
"- slot={}, confirmation count={}",
|
||||||
|
vote.slot, vote.confirmation_count
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok("".to_string())
|
||||||
|
}
|
||||||
|
|
||||||
fn process_deploy(
|
fn process_deploy(
|
||||||
rpc_client: &RpcClient,
|
rpc_client: &RpcClient,
|
||||||
config: &WalletConfig,
|
config: &WalletConfig,
|
||||||
@ -635,6 +677,10 @@ pub fn process_command(config: &WalletConfig) -> ProcessResult {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WalletCommand::ShowVoteAccount(voting_account_id) => {
|
||||||
|
process_show_staking(&rpc_client, config, &voting_account_id)
|
||||||
|
}
|
||||||
|
|
||||||
// Deploy a custom program to the chain
|
// Deploy a custom program to the chain
|
||||||
WalletCommand::Deploy(ref program_location) => {
|
WalletCommand::Deploy(ref program_location) => {
|
||||||
process_deploy(&rpc_client, config, program_location)
|
process_deploy(&rpc_client, config, program_location)
|
||||||
|
Reference in New Issue
Block a user