Compare commits

...

23 Commits

Author SHA1 Message Date
dc60c72c2d Disable |solana-install| check for edge/beta testnets (#4565)
The release tarball URL changes for these testnets, which causes the
normal |solana-install| check to fail and the testnet is unnecessarily
rebooted.
2019-06-05 15:31:33 -07:00
e59c74562f Be explicit about return status 2019-06-05 14:11:03 -07:00
eb4ce8e3b2 shift 2019-06-05 12:07:34 -07:00
e2a050f77d Avoid sudo in tune-system.sh unless requested by the user (#4556) (#4557)
automerge
2019-06-05 09:38:43 -07:00
74b97166a9 Sanity check that runs on the blockstreamer node now checks that node instead of the bootstrap leader 2019-06-05 07:53:04 -07:00
b13d5c3264 Wait for crate to be locatable on crates.io after uploading (#4526) (#4550)
automerge
2019-06-04 21:27:36 -07:00
72a44c58d9 Increment cargo tomls and lock to 0.15.2 (#4499) 2019-05-31 12:04:01 -06:00
f6e804b0a1 minor update 2019-05-31 07:37:19 -07:00
827e794b6f Fix clear-config.sh 2019-05-30 15:30:35 -07:00
d916ffeba5 publish-crate fixups 2019-05-30 15:14:33 -07:00
dd1ed323e7 v0.15: cherrypick crates.io-related fixes from master (#4486)
* Remove runtime dependency on storage (#4480)

* Break noop_program -> runtime dependency (#4481)

* Clean up crates.io publishing (#4478)

* Clean up crates.io publishing

* Cargo.lock
2019-05-30 13:40:42 -07:00
491f82bbcd Fix stable metrics dashboard for current channel use (#4483) (#4485) 2019-05-30 13:21:07 -06:00
c486d1af8c Update cargo.toml and testnet participation doc for 0.15.0 (#4465) 2019-05-28 21:58:28 -06:00
b4adb1c266 Cherry pick fix for freeze (#4459)
* check freeze before updating slot_hashes (#4448)

* check freeze before updating slot_hashes

* fixup

* add more information to dropped vote warning (#4449)

* add more information to dropped vote warning

* fixup
2019-05-28 20:35:54 -06:00
b9b541441b update book with passive staking (#4451) (#4455)
* update book with passive staking (#4451)

* undelete votestate etc
2019-05-28 16:01:53 -07:00
e510d4e272 Drop influxcloud (#4461) 2019-05-28 15:34:36 -07:00
9341e64ec7 Lock down blockexplorer version (#4462) 2019-05-28 15:26:53 -07:00
d934f94e05 Add commented correct future test lines 2019-05-28 09:59:07 -06:00
59dc123fa8 Add test indicating need for credit-only account handling 2019-05-28 09:58:57 -06:00
0faea87c84 Revert --retry-on-http-error usage, Travis CI's wget doesn't recognize it 2019-05-27 19:34:46 -07:00
19137ce3f4 Bump logging level of validator procsesing errors (#4444)
automerge
2019-05-27 15:36:35 -07:00
8bdeb2d1ed Use nohup and sleep a little to improve stability when launching a node 2019-05-27 14:00:24 -07:00
d29a45266b data_dir -> data-dir 2019-05-27 07:32:29 -07:00
75 changed files with 863 additions and 614 deletions

413
Cargo.lock generated
View File

@ -2167,7 +2167,7 @@ dependencies = [
[[package]]
name = "solana"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2198,26 +2198,26 @@ dependencies = [
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (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.15.0",
"solana-budget-program 0.15.0",
"solana-client 0.15.0",
"solana-config-program 0.15.0",
"solana-drone 0.15.0",
"solana-budget-api 0.15.2",
"solana-budget-program 0.15.2",
"solana-client 0.15.2",
"solana-config-program 0.15.2",
"solana-drone 0.15.2",
"solana-ed25519-dalek 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-exchange-program 0.15.0",
"solana-kvstore 0.15.0",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-netutil 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-stake-api 0.15.0",
"solana-stake-program 0.15.0",
"solana-storage-api 0.15.0",
"solana-storage-program 0.15.0",
"solana-vote-api 0.15.0",
"solana-vote-program 0.15.0",
"solana-vote-signer 0.15.0",
"solana-exchange-program 0.15.2",
"solana-kvstore 0.15.2",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-netutil 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
"solana-stake-api 0.15.2",
"solana-stake-program 0.15.2",
"solana-storage-api 0.15.2",
"solana-storage-program 0.15.2",
"solana-vote-api 0.15.2",
"solana-vote-program 0.15.2",
"solana-vote-signer 0.15.2",
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2226,7 +2226,7 @@ dependencies = [
[[package]]
name = "solana-bench-exchange"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2241,80 +2241,80 @@ dependencies = [
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (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.15.0",
"solana-client 0.15.0",
"solana-drone 0.15.0",
"solana-exchange-api 0.15.0",
"solana-exchange-program 0.15.0",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-netutil 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana 0.15.2",
"solana-client 0.15.2",
"solana-drone 0.15.2",
"solana-exchange-api 0.15.2",
"solana-exchange-program 0.15.2",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-netutil 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
"untrusted 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"ws 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-bench-streamer"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-logger 0.15.0",
"solana-netutil 0.15.0",
"solana 0.15.2",
"solana-logger 0.15.2",
"solana-netutil 0.15.2",
]
[[package]]
name = "solana-bench-tps"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
"rayon 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-client 0.15.0",
"solana-drone 0.15.0",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-netutil 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana 0.15.2",
"solana-client 0.15.2",
"solana-drone 0.15.2",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-netutil 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-bpf-programs"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"elf 0.0.10 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-bpfloader 0.15.0",
"solana-logger 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-bpfloader 0.15.2",
"solana-logger 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
"solana_rbpf 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-bpfloader"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (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.55 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"solana_rbpf 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-budget-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"chrono 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2323,23 +2323,23 @@ dependencies = [
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-budget-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-budget-api 0.15.0",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-budget-api 0.15.2",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-client"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2350,37 +2350,37 @@ dependencies = [
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (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.15.0",
"solana-netutil 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-netutil 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-config-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-config-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-config-api 0.15.0",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-config-api 0.15.2",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-drone"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2389,9 +2389,9 @@ dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-sdk 0.15.2",
"tokio 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2410,77 +2410,77 @@ dependencies = [
[[package]]
name = "solana-exchange-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-exchange-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-exchange-api 0.15.0",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-exchange-api 0.15.2",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-failure-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-genesis"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hashbrown 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-budget-api 0.15.0",
"solana-budget-program 0.15.0",
"solana-config-api 0.15.0",
"solana-config-program 0.15.0",
"solana-exchange-api 0.15.0",
"solana-exchange-program 0.15.0",
"solana-sdk 0.15.0",
"solana-stake-api 0.15.0",
"solana-stake-program 0.15.0",
"solana-storage-api 0.15.0",
"solana-storage-program 0.15.0",
"solana-token-api 0.15.0",
"solana-token-program 0.15.0",
"solana-vote-api 0.15.0",
"solana-vote-program 0.15.0",
"solana 0.15.2",
"solana-budget-api 0.15.2",
"solana-budget-program 0.15.2",
"solana-config-api 0.15.2",
"solana-config-program 0.15.2",
"solana-exchange-api 0.15.2",
"solana-exchange-program 0.15.2",
"solana-sdk 0.15.2",
"solana-stake-api 0.15.2",
"solana-stake-program 0.15.2",
"solana-storage-api 0.15.2",
"solana-storage-program 0.15.2",
"solana-token-api 0.15.2",
"solana-token-program 0.15.2",
"solana-vote-api 0.15.2",
"solana-vote-program 0.15.2",
]
[[package]]
name = "solana-gossip"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
"solana 0.15.0",
"solana-client 0.15.0",
"solana-netutil 0.15.0",
"solana-sdk 0.15.0",
"solana 0.15.2",
"solana-client 0.15.2",
"solana-netutil 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-install"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2497,10 +2497,10 @@ dependencies = [
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_yaml 0.8.9 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-client 0.15.0",
"solana-config-api 0.15.0",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-client 0.15.2",
"solana-config-api 0.15.2",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"tar 0.4.26 (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)",
@ -2508,16 +2508,16 @@ dependencies = [
[[package]]
name = "solana-keygen"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
"solana-sdk 0.15.0",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-kvstore"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2532,27 +2532,27 @@ dependencies = [
[[package]]
name = "solana-ledger-tool"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-logger 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana 0.15.2",
"solana-logger 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-logger"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-metrics"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"env_logger 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"influx_db_client 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2560,13 +2560,13 @@ dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"reqwest 0.9.17 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-sdk 0.15.0",
"solana-sdk 0.15.2",
"sys-info 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-netutil"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2574,34 +2574,33 @@ dependencies = [
"nix 0.14.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
"socket2 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-logger 0.15.2",
"tokio 0.1.20 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "solana-noop-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-replicator"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-logger 0.15.0",
"solana-netutil 0.15.0",
"solana-sdk 0.15.0",
"solana 0.15.2",
"solana-logger 0.15.2",
"solana-netutil 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-runtime"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bv 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2617,21 +2616,19 @@ dependencies = [
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (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.15.0",
"solana-metrics 0.15.0",
"solana-noop-program 0.15.0",
"solana-sdk 0.15.0",
"solana-stake-api 0.15.0",
"solana-stake-program 0.15.0",
"solana-storage-api 0.15.0",
"solana-storage-program 0.15.0",
"solana-vote-api 0.15.0",
"solana-vote-program 0.15.0",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-noop-program 0.15.2",
"solana-sdk 0.15.2",
"solana-stake-api 0.15.2",
"solana-stake-program 0.15.2",
"solana-vote-api 0.15.2",
"solana-vote-program 0.15.2",
]
[[package]]
name = "solana-sdk"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2655,55 +2652,55 @@ dependencies = [
[[package]]
name = "solana-stake-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-sdk 0.15.0",
"solana-vote-api 0.15.0",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-sdk 0.15.2",
"solana-vote-api 0.15.2",
]
[[package]]
name = "solana-stake-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-stake-api 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"solana-stake-api 0.15.2",
]
[[package]]
name = "solana-storage-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"assert_matches 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 1.1.4 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-storage-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-storage-api 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"solana-storage-api 0.15.2",
]
[[package]]
name = "solana-token-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2711,73 +2708,73 @@ dependencies = [
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-token-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-token-api 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"solana-token-api 0.15.2",
]
[[package]]
name = "solana-upload-perf"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-metrics 0.15.0",
"solana-metrics 0.15.2",
]
[[package]]
name = "solana-validator"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
"serde_json 1.0.39 (registry+https://github.com/rust-lang/crates.io-index)",
"solana 0.15.0",
"solana-drone 0.15.0",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-netutil 0.15.0",
"solana-runtime 0.15.0",
"solana-sdk 0.15.0",
"solana-vote-api 0.15.0",
"solana-vote-signer 0.15.0",
"solana 0.15.2",
"solana-drone 0.15.2",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-netutil 0.15.2",
"solana-runtime 0.15.2",
"solana-sdk 0.15.2",
"solana-vote-api 0.15.2",
"solana-vote-signer 0.15.2",
]
[[package]]
name = "solana-vote-api"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (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.91 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.91 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-metrics 0.15.0",
"solana-sdk 0.15.0",
"solana-logger 0.15.2",
"solana-metrics 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-vote-program"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"solana-logger 0.15.0",
"solana-sdk 0.15.0",
"solana-vote-api 0.15.0",
"solana-logger 0.15.2",
"solana-sdk 0.15.2",
"solana-vote-api 0.15.2",
]
[[package]]
name = "solana-vote-signer"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"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)",
@ -2787,13 +2784,13 @@ dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.91 (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.15.0",
"solana-sdk 0.15.0",
"solana-metrics 0.15.2",
"solana-sdk 0.15.2",
]
[[package]]
name = "solana-wallet"
version = "0.15.0"
version = "0.15.2"
dependencies = [
"bincode 1.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2803,18 +2800,18 @@ dependencies = [
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.2.8 (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.15.0",
"solana-budget-api 0.15.0",
"solana-budget-program 0.15.0",
"solana-client 0.15.0",
"solana-drone 0.15.0",
"solana-logger 0.15.0",
"solana-netutil 0.15.0",
"solana-sdk 0.15.0",
"solana-stake-api 0.15.0",
"solana-storage-api 0.15.0",
"solana-vote-api 0.15.0",
"solana-vote-signer 0.15.0",
"solana 0.15.2",
"solana-budget-api 0.15.2",
"solana-budget-program 0.15.2",
"solana-client 0.15.2",
"solana-drone 0.15.2",
"solana-logger 0.15.2",
"solana-netutil 0.15.2",
"solana-sdk 0.15.2",
"solana-stake-api 0.15.2",
"solana-storage-api 0.15.2",
"solana-vote-api 0.15.2",
"solana-vote-signer 0.15.2",
"url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]

View File

@ -2,10 +2,11 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-exchange"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
publish = false
[dependencies]
bs58 = "0.2.0"
@ -22,16 +23,16 @@ serde = "1.0.91"
serde_derive = "1.0.91"
serde_json = "1.0.38"
# solana-runtime = { path = "../solana/runtime"}
solana = { path = "../core", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.0" }
solana-drone = { path = "../drone", version = "0.15.0" }
solana-exchange-api = { path = "../programs/exchange_api", version = "0.15.0" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-runtime = { path = "../runtime", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-client = { path = "../client", version = "0.15.2" }
solana-drone = { path = "../drone", version = "0.15.2" }
solana-exchange-api = { path = "../programs/exchange_api", version = "0.15.2" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-runtime = { path = "../runtime", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
ws = "0.8.1"
untrusted = "0.6.2"

View File

@ -2,16 +2,16 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-streamer"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
solana = { path = "../core", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
[features]
cuda = ["solana/cuda"]

View File

@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-tps"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -12,14 +12,14 @@ clap = "2.33.0"
log = "0.4.6"
rayon = "1.0.3"
serde_json = "1.0.39"
solana = { path = "../core", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.0" }
solana-drone = { path = "../drone", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-runtime = { path = "../runtime", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-client = { path = "../client", version = "0.15.2" }
solana-drone = { path = "../drone", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-runtime = { path = "../runtime", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[features]
cuda = ["solana/cuda"]

View File

@ -1,7 +1,8 @@
BOB_SRCS=$(wildcard art/*.bob)
MSC_SRCS=$(wildcard art/*.msc)
MD_SRCS=$(wildcard src/*.md)
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/img/%.svg)
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/img/%.svg) $(MSC_SRCS:art/%.msc=src/img/%.svg)
all: html/index.html
@ -17,6 +18,10 @@ src/img/%.svg: art/%.bob
@mkdir -p $(@D)
svgbob < $< > $@
src/img/%.svg: art/%.msc
@mkdir -p $(@D)
mscgen -T svg -i $< -o $@
src/%.md: %.md
@mkdir -p $(@D)
@cp $< $@

View File

@ -19,7 +19,7 @@
- [Data Plane Fanout](data-plane-fanout.md)
- [Ledger Replication](ledger-replication.md)
- [Secure Vote Signing](vote-signing.md)
- [Staking Delegation and Rewards](stake-delegation-and-rewards.md)
- [Stake Delegation and Rewards](stake-delegation-and-rewards.md)
- [Performance Metrics](performance-metrics.md)
- [Anatomy of a Validator](validator.md)
@ -39,7 +39,6 @@
- [Ledger Replication](ledger-replication-to-implement.md)
- [Secure Vote Signing](vote-signing-to-implement.md)
- [Staking Rewards](staking-rewards.md)
- [Passive Stake Delegation and Rewards](passive-stake-delegation-and-rewards.md)
- [Cluster Economics](ed_overview.md)
- [Validation-client Economics](ed_validation_client_economics.md)
- [State-validation Protocol-based Rewards](ed_vce_state_validation_protocol_based_rewards.md)
@ -67,3 +66,4 @@
- [Reliable Vote Transmission](reliable-vote-transmission.md)
- [Persistent Account Storage](persistent-account-storage.md)
- [Cluster Software Installation and Updates](installer.md)
- [Passive Stake Delegation and Rewards](passive-stake-delegation-and-rewards.md)

View File

@ -1,68 +1,195 @@
# Stake Delegation and Rewards
Stakers are rewarded for helping validate the ledger. They do it by delegating
their stake to fullnodes. Those fullnodes do the legwork and send votes to the
stakers' staking accounts. The rest of the cluster uses those stake-weighted
votes to select a block when forks arise. Both the fullnode and staker need
some economic incentive to play their part. The fullnode needs to be
compensated for its hardware and the staker needs to be compensated for risking
getting its stake slashed. The economics are covered in [staking
Stakers are rewarded for helping to validate the ledger. They do this by
delegating their stake to validator nodes. Those validators do the legwork of
replaying the ledger and send votes to a per-node vote account to which stakers
can delegate their stakes. The rest of the cluster uses those stake-weighted
votes to select a block when forks arise. Both the validator and staker need
some economic incentive to play their part. The validator needs to be
compensated for its hardware and the staker needs to be compensated for the risk
of getting its stake slashed. The economics are covered in [staking
rewards](staking-rewards.md). This chapter, on the other hand, describes the
underlying mechanics of its implementation.
## Vote and Rewards accounts
## Basic Besign
The rewards process is split into two on-chain programs. The Vote program
solves the problem of making stakes slashable. The Rewards account acts as
custodian of the rewards pool. It is responsible for paying out each staker
once the staker proves to the Rewards program that it participated in
validating the ledger.
The general idea is that the validator owns a Vote account. The Vote account
tracks validator votes, counts validator generated credits, and provides any
additional validator specific state. The Vote account is not aware of any
stakes delegated to it and has no staking weight.
The Vote account contains the following state information:
A separate Stake account (created by a staker) names a Vote account to which the
stake is delegated. Rewards generated are proportional to the amount of
lamports staked. The Stake account is owned by the staker only. Lamports
stored in this account are the stake.
* votes - The submitted votes.
## Passive Delegation
* `delegate_pubkey` - An identity that may operate with the weight of this
account's stake. It is typically the identity of a fullnode, but may be any
identity involved in stake-weighted computations.
Any number of Stake accounts can delegate to a single
Vote account without an interactive action from the identity controlling
the Vote account or submitting votes to the account.
* `authorized_voter_pubkey` - Only this identity is authorized to submit votes.
The total stake allocated to a Vote account can be calculated by the sum of
all the Stake accounts that have the Vote account pubkey as the
`StakeState::Delegate::voter_pubkey`.
* `credits` - The amount of unclaimed rewards.
## Vote and Stake accounts
* `root_slot` - The last slot to reach the full lockout commitment necessary
for rewards.
The rewards process is split into two on-chain programs. The Vote program solves
the problem of making stakes slashable. The Stake account acts as custodian of
the rewards pool, and provides passive delegation. The Stake program is
responsible for paying out each staker once the staker proves to the Stake
program that its delegate has participated in validating the ledger.
The Rewards program is stateless and pays out reward when a staker submits its
Vote account to the program. Claiming a reward requires a transaction that
includes the following instructions:
### VoteState
1. `RewardsInstruction::RedeemVoteCredits`
2. `VoteInstruction::ClearCredits`
VoteState is the current state of all the votes the validator has submitted to
the network. VoteState contains the following state information:
The Rewards program transfers lamports from the Rewards account to the Vote
account's public key. The Rewards program also ensures that the `ClearCredits`
instruction follows the `RedeemVoteCredits` instruction, such that a staker may
not claim rewards for the same work more than once.
* votes - The submitted votes data structure.
* credits - The total number of rewards this vote program has generated over its
lifetime.
* root\_slot - The last slot to reach the full lockout commitment necessary for
rewards.
* commission - The commission taken by this VoteState for any rewards claimed by
staker's Stake accounts. This is the percentage ceiling of the reward.
* Account::lamports - The accumulated lamports from the commission. These do not
count as stakes.
* `authorized_vote_signer` - Only this identity is authorized to submit votes. This field can only modified by this identity.
### VoteInstruction::Initialize
* `account[0]` - RW - The VoteState
`VoteState::authorized_vote_signer` is initialized to `account[0]`
other VoteState members defaulted
### VoteInstruction::AuthorizeVoteSigner(Pubkey)
* `account[0]` - RW - The VoteState
`VoteState::authorized_vote_signer` is set to to `Pubkey`, instruction must by
signed by Pubkey
### VoteInstruction::Vote(Vec<Vote>)
* `account[0]` - RW - The VoteState
`VoteState::lockouts` and `VoteState::credits` are updated according to voting lockout rules see [Fork Selection](fork-selection.md)
### Delegating Stake
* `account[1]` - RO - A list of some N most recent slots and their hashes for the vote to be verified against.
`VoteInstruction::DelegateStake` allows the staker to choose a fullnode to
validate the ledger on its behalf. By being a delegate, the fullnode is
entitled to collect transaction fees when its is leader. The larger the stake,
the more often the fullnode will be able to collect those fees.
### Authorizing a Vote Signer
### StakeState
A StakeState takes one of two forms, StakeState::Delegate and StakeState::MiningPool.
### StakeState::Delegate
StakeState is the current delegation preference of the **staker**. StakeState
contains the following state information:
* Account::lamports - The staked lamports.
* `voter_pubkey` - The pubkey of the VoteState instance the lamports are
delegated to.
* `credits_observed` - The total credits claimed over the lifetime of the
program.
### StakeState::MiningPool
There are two approaches to the mining pool. The bank could allow the
StakeState program to bypass the token balance check, or a program representing
the mining pool could run on the network. To avoid a single network wide lock,
the pool can be split into several mining pools. This design focuses on using
StakeState::MiningPool instances as the cluster wide mining pools.
* 256 StakeState::MiningPool are initialized, each with 1/256 number of mining pool
tokens stored as `Account::lamports`.
The stakes and the MiningPool are accounts that are owned by the same `Stake`
program.
### StakeInstruction::Initialize
* `account[0]` - RW - The StakeState::Delegate instance.
`StakeState::Delegate::credits_observed` is initialized to `VoteState::credits`.
`StakeState::Delegate::voter_pubkey` is initialized to `account[1]`
* `account[1]` - R - The VoteState instance.
### StakeInstruction::RedeemVoteCredits
The Staker or the owner of the Stake account sends a transaction with this
instruction to claim rewards.
The Vote account and the Stake account pair maintain a lifetime counter
of total rewards generated and claimed. When claiming rewards, the total lamports
deposited into the Stake account and as validator commission is proportional to
`VoteState::credits - StakeState::credits_observed`.
* `account[0]` - RW - The StakeState::MiningPool instance that will fulfill the
reward.
* `account[1]` - RW - The StakeState::Delegate instance that is redeeming votes
credits.
* `account[2]` - R - The VoteState instance, must be the same as
`StakeState::voter_pubkey`
Reward is paid out for the difference between `VoteState::credits` to
`StakeState::Delgate.credits_observed`, and `credits_observed` is updated to
`VoteState::credits`. The commission is deposited into the Vote account token
balance, and the reward is deposited to the Stake account token balance.
The total lamports paid is a percentage-rate of the lamports staked muiltplied by
the ratio of rewards being redeemed to rewards that could have been generated
during the rate period.
Any random MiningPool can be used to redeem the credits.
```rust,ignore
let credits_to_claim = vote_state.credits - stake_state.credits_observed;
stake_state.credits_observed = vote_state.credits;
```
`credits_to_claim` is used to compute the reward and commission, and
`StakeState::Delegate::credits_observed` is updated to the latest
`VoteState::credits` value.
## Collecting network fees into the MiningPool
At the end of the block, before the bank is frozen, but after it processed all
the transactions for the block, a virtual instruction is executed to collect
the transaction fees.
* A portion of the fees are deposited into the leader's account.
* A portion of the fees are deposited into the smallest StakeState::MiningPool
account.
## Authorizing a Vote Signer
`VoteInstruction::AuthorizeVoter` allows a staker to choose a signing service
for its votes. That service is responsible for ensuring the vote won't cause
the staker to be slashed.
## Limitations
## Benefits of the design
Many stakers may delegate their stakes to the same fullnode. The fullnode must
send a separate vote to each staking account. If there are far more stakers
than fullnodes, that's a lot of network traffic. An alternative design might
have fullnodes submit each vote to just one account and then have each staker
submit that account along with their own to collect its reward.
* Single vote for all the stakers.
* Clearing of the credit variable is not necessary for claiming rewards.
* Each delegated stake can claim its rewards independently.
* Commission for the work is deposited when a reward is claimed by the delegated
stake.
This proposal would benefit from the `read-only` accounts proposal to allow for
many rewards to be claimed concurrently.
## Example Callflow
<img alt="Passive Staking Callflow" src="img/passive-staking-callflow.svg" class="center"/>

View File

@ -1,8 +1,8 @@
# Staking Rewards
Initial Proof of Stake (PoS) (i.e. using in-protocol asset, SOL, to provide
secure consensus) design ideas outlined here. Solana will implement a proof of
stake reward/security scheme for node validators in the cluster. The purpose is
A Proof of Stake (PoS), (i.e. using in-protocol asset, SOL, to provide
secure consensus) design is outlined here. Solana implements a proof of
stake reward/security scheme for validator nodes in the cluster. The purpose is
threefold:
- Align validator incentives with that of the greater cluster through
@ -64,7 +64,7 @@ capital-at-risk to prevent a logical/optimal strategy of multiple chain voting.
We intend to implement slashing rules which, if broken, result some amount of
the offending validator's deposited stake to be removed from circulation. Given
the ordering properties of the PoH data structure, we believe we can simplify
our slashing rules to the level of a voting lockout time assigned per vote.
our slashing rules to the level of a voting lockout time assigned per vote.
I.e. Each vote has an associated lockout time (PoH duration) that represents a
duration by any additional vote from that validator must be in a PoH that
@ -110,7 +110,7 @@ in a slashable amount as a function of either:
1. the fraction of validators, out of the total validator pool, that were also
slashed during the same time period (ala Casper)
2. the amount of time since the vote was cast (e.g. a linearly increasing % of
total deposited as slashable amount over time), or both.
total deposited as slashable amount over time), or both.
This is an area currently under exploration

View File

@ -32,7 +32,7 @@ traversal issues. A cloud-hosted machine works best. **Ensure that IP ports
Prebuilt binaries are available for Linux x86_64 (Ubuntu 18.04 recommended).
MacOS or WSL users may build from source.
For a performance testnet with many transactions we have some preliminary recomended setups:
For a performance testnet with many transactions we have some preliminary recommended setups:
| | Low end | Medium end | High end | Notes |
| --- | ---------|------------|----------| -- |
@ -67,7 +67,7 @@ The `solana-install` tool can be used to easily install and upgrade the cluster
software on Linux x86_64 systems.
```bash
$ export SOLANA_RELEASE=v0.14.2 # skip this line to install the latest release
$ export SOLANA_RELEASE=v0.15.0 # skip this line to install the latest release
$ curl -sSf https://raw.githubusercontent.com/solana-labs/solana/v0.14.0/install/solana-install-init.sh | sh -s
```
@ -176,7 +176,7 @@ $ solana-gossip --entrypoint testnet.solana.com:8001 spy
Provide the **vote pubkey** to the `solana-wallet show-vote-account` command to view
the recent voting activity from your validator:
```bash
$ solana-wallet -n testnet.solana.com show-vote-account 2ozWvfaXQd1X6uKh8jERoRGApDqSqcEy6fF1oN13LL2G
$ solana-wallet show-vote-account 2ozWvfaXQd1X6uKh8jERoRGApDqSqcEy6fF1oN13LL2G
```
The vote pubkey for the validator can also be found by running:

View File

@ -0,0 +1,65 @@
#!/usr/bin/env python
#
# This script figures the order in which workspace crates must be published to
# crates.io. Along the way it also ensures there are no circular dependencies
# that would cause a |cargo publish| to fail.
#
# On success an ordered list of Cargo.toml files is written to stdout
#
import os
import json
import subprocess
import sys;
def load_metadata():
return json.loads(subprocess.Popen(
'cargo metadata --no-deps --format-version=1',
shell=True, stdout=subprocess.PIPE).communicate()[0])
def get_packages():
metadata = load_metadata()
manifest_path = dict()
# Build dictionary of packages and their immediate solana-only dependencies
dependency_graph = dict()
for pkg in metadata['packages']:
manifest_path[pkg['name']] = pkg['manifest_path'];
dependency_graph[pkg['name']] = [x['name'] for x in pkg['dependencies'] if x['name'].startswith('solana')];
# Check for direct circular dependencies
circular_dependencies = set()
for package, dependencies in dependency_graph.items():
for dependency in dependencies:
if dependency in dependency_graph and package in dependency_graph[dependency]:
circular_dependencies.add(' <--> '.join(sorted([package, dependency])))
for dependency in circular_dependencies:
sys.stderr.write('Error: Circular dependency: {}\n'.format(dependency))
if len(circular_dependencies) != 0:
sys.exit(1)
# Order dependencies
sorted_dependency_graph = []
max_iterations = pow(len(dependency_graph),2)
while dependency_graph:
if max_iterations == 0:
# TODO: Be more helpful and find the actual cycle for the user
sys.exit('Error: Circular dependency suspected between these packages: {}\n'.format(' '.join(dependency_graph.keys())))
max_iterations -= 1
for package, dependencies in dependency_graph.items():
for dependency in dependencies:
if dependency in dependency_graph:
break
else:
del dependency_graph[package]
sorted_dependency_graph.append((package, manifest_path[package]))
return sorted_dependency_graph
for package, manifest in get_packages():
print os.path.relpath(manifest)

View File

@ -3,35 +3,13 @@ set -e
cd "$(dirname "$0")/.."
source ci/semver_bash/semver.sh
# List of internal crates to publish
#
# IMPORTANT: the order of the CRATES *is* significant. Crates must be published
# before the crates that depend on them. Note that this information is already
# expressed in the various Cargo.toml files, and ideally would not be duplicated
# here. (TODO: figure the crate ordering dynamically)
#
CRATES=(
kvstore
logger
netutil
sdk
keygen
metrics
client
drone
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
vote-signer
core
validator
genesis
gossip
ledger-tool
wallet
install
)
# shellcheck disable=SC2086
is_crate_version_uploaded() {
name=$1
version=$2
curl https://crates.io/api/v1/crates/${name}/${version} | \
python3 -c "import sys,json; print('version' in json.load(sys.stdin));"
}
# Only package/publish if this is a tagged release
[[ -n $TRIGGERED_BUILDKITE_TAG ]] || {
@ -49,25 +27,37 @@ expectedCrateVersion="$MAJOR.$MINOR.$PATCH$SPECIAL"
cargoCommand="cargo publish --token $CRATES_IO_TOKEN"
for crate in "${CRATES[@]}"; do
if [[ ! -r $crate/Cargo.toml ]]; then
echo "Error: $crate/Cargo.toml does not exist"
exit 1
fi
echo "-- $crate"
grep -q "^version = \"$expectedCrateVersion\"$" "$crate"/Cargo.toml || {
echo "Error: $crate/Cargo.toml version is not $expectedCrateVersion"
Cargo_tomls=$(ci/order-crates-for-publishing.py)
for Cargo_toml in $Cargo_tomls; do
echo "-- $Cargo_toml"
grep -q "^version = \"$expectedCrateVersion\"$" "$Cargo_toml" || {
echo "Error: $Cargo_toml version is not $expectedCrateVersion"
exit 1
}
(
set -x
crate=$(dirname "$Cargo_toml")
# TODO: the rocksdb package does not build with the stock rust docker image,
# so use the solana rust docker image until this is resolved upstream
source ci/rust-version.sh
ci/docker-run.sh "$rust_stable_docker_image" bash -exc "cd $crate; $cargoCommand"
#ci/docker-run.sh rust bash -exc "cd $crate; $cargoCommand"
)
) || true # <-- Don't fail. We want to be able to retry the job in cases when a publish fails halfway due to network/cloud issues
# shellcheck disable=SC2086
crate_name=$(grep -m 1 '^name = ' $Cargo_toml | cut -f 3 -d ' ' | tr -d \")
numRetries=30
for ((i = 1 ; i <= numRetries ; i++)); do
echo "Attempt ${i} of ${numRetries}"
# shellcheck disable=SC2086
if [[ $(is_crate_version_uploaded $crate_name $expectedCrateVersion) = True ]] ; then
echo "Found ${crate_name} version ${expectedCrateVersion} on crates.io"
break
fi
echo "Did not find ${crate_name} version ${expectedCrateVersion} on crates.io. Sleeping for 2 seconds."
sleep 2
done
done
exit 0

View File

@ -45,7 +45,9 @@ beta)
CHANNEL_BRANCH=$BETA_CHANNEL
;;
stable)
CHANNEL_BRANCH=$STABLE_CHANNEL
# Set to whatever branch 'testnet' is on.
# TODO: Revert to $STABLE_CHANNEL for TdS
CHANNEL_BRANCH=$BETA_CHANNEL
;;
*)
echo "Error: Invalid PUBLISH_CHANNEL=$PUBLISH_CHANNEL"

View File

@ -88,7 +88,7 @@ EOF
set -e
cd "$(dirname "$0")"/..
export USE_INSTALL=1
exec multinode-demo/clear-validator-config.sh "$@"
exec multinode-demo/clear-config.sh "$@"
EOF
chmod +x solana-release/bin/clear-config.sh

View File

@ -14,6 +14,7 @@ _ cargo +"$rust_stable" clippy --all -- --version
_ cargo +"$rust_stable" clippy --all -- --deny=warnings
_ cargo +"$rust_stable" audit
_ ci/nits.sh
_ ci/order-crates-for-publishing.py
_ book/build.sh
echo --- ok

View File

@ -311,6 +311,9 @@ if ! $skipStart; then
if [[ -n $NO_LEDGER_VERIFY ]]; then
args+=(-o noLedgerVerify)
fi
if [[ -n $NO_INSTALL_CHECK ]]; then
args+=(-o noInstallCheck)
fi
if [[ -n $maybeHashesPerTick ]]; then
# shellcheck disable=SC2206 # Do not want to quote $maybeHashesPerTick
args+=($maybeHashesPerTick)

View File

@ -132,19 +132,16 @@ case $TESTNET in
testnet-edge|testnet-edge-perf)
CHANNEL_OR_TAG=edge
CHANNEL_BRANCH=$EDGE_CHANNEL
: "${TESTNET_DB_HOST:=https://clocktower-f1d56615.influxcloud.net:8086}"
;;
testnet-beta|testnet-beta-perf)
CHANNEL_OR_TAG=beta
CHANNEL_BRANCH=$BETA_CHANNEL
: "${TESTNET_DB_HOST:=https://clocktower-f1d56615.influxcloud.net:8086}"
;;
testnet)
CHANNEL_OR_TAG=$STABLE_CHANNEL_LATEST_TAG
CHANNEL_BRANCH=$STABLE_CHANNEL
: "${EC2_NODE_COUNT:=10}"
: "${GCE_NODE_COUNT:=}"
: "${TESTNET_DB_HOST:=https://clocktower-f1d56615.influxcloud.net:8086}"
;;
testnet-perf)
CHANNEL_OR_TAG=$STABLE_CHANNEL_LATEST_TAG
@ -155,7 +152,6 @@ testnet-demo)
CHANNEL_BRANCH=$BETA_CHANNEL
: "${GCE_NODE_COUNT:=150}"
: "${GCE_LOW_QUOTA_NODE_COUNT:=70}"
: "${TESTNET_DB_HOST:=https://clocktower-f1d56615.influxcloud.net:8086}"
;;
*)
echo "Error: Invalid TESTNET=$TESTNET"
@ -216,6 +212,7 @@ sanity() {
testnet-edge)
(
set -x
NO_INSTALL_CHECK=1 \
NO_LEDGER_VERIFY=1 \
ci/testnet-sanity.sh edge-testnet-solana-com ec2 us-west-1a
)
@ -232,6 +229,7 @@ sanity() {
testnet-beta)
(
set -x
NO_INSTALL_CHECK=1 \
NO_LEDGER_VERIFY=1 \
ci/testnet-sanity.sh beta-testnet-solana-com ec2 us-west-1a
)

View File

@ -64,6 +64,7 @@ for zone in "$@"; do
${NO_LEDGER_VERIFY:+-o noLedgerVerify} \
${NO_VALIDATOR_SANITY:+-o noValidatorSanity} \
${REJECT_EXTRA_NODES:+-o rejectExtraNodes} \
${NO_INSTALL_CHECK:+-o noInstallCheck} \
$zone || ok=false
net/net.sh logs

View File

@ -1,6 +1,6 @@
[package]
name = "solana-client"
version = "0.15.0"
version = "0.15.2"
description = "Solana Client"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -17,10 +17,10 @@ reqwest = "0.9.17"
serde = "1.0.89"
serde_derive = "1.0.91"
serde_json = "1.0.39"
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[dev-dependencies]
jsonrpc-core = "10.1.0"
jsonrpc-http-server = "10.1.0"
solana-logger = { path = "../logger", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.2" }

View File

@ -1,7 +1,7 @@
[package]
name = "solana"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
documentation = "https://docs.rs/solana"
homepage = "https://solana.com/"
readme = "../README.md"
@ -47,26 +47,26 @@ rocksdb = "0.11.0"
serde = "1.0.89"
serde_derive = "1.0.91"
serde_json = "1.0.39"
solana-budget-api = { path = "../programs/budget_api", version = "0.15.0" }
solana-budget-program = { path = "../programs/budget_program", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.0" }
solana-drone = { path = "../drone", version = "0.15.0" }
solana-budget-api = { path = "../programs/budget_api", version = "0.15.2" }
solana-budget-program = { path = "../programs/budget_program", version = "0.15.2" }
solana-client = { path = "../client", version = "0.15.2" }
solana-drone = { path = "../drone", version = "0.15.2" }
solana-ed25519-dalek = "0.2.0"
solana-kvstore = { path = "../kvstore", version = "0.15.0" , optional = true }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-runtime = { path = "../runtime", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.0" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.0" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.0" }
solana-storage-program = { path = "../programs/storage_program", version = "0.15.0" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.0" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.0" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.0" }
solana-config-program = { path = "../programs/config_program", version = "0.15.0" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.0" }
solana-kvstore = { path = "../kvstore", version = "0.15.2" , optional = true }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-runtime = { path = "../runtime", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.2" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.2" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.2" }
solana-storage-program = { path = "../programs/storage_program", version = "0.15.2" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.2" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.2" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.2" }
solana-config-program = { path = "../programs/config_program", version = "0.15.2" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.2" }
sys-info = "0.5.6"
tokio = "0.1"
tokio-codec = "0.1"

View File

@ -3,7 +3,7 @@ use crate::blocktree::Blocktree;
use crate::entry::{Entry, EntrySlice};
use crate::leader_schedule_cache::LeaderScheduleCache;
use rayon::prelude::*;
use solana_metrics::{datapoint, inc_new_counter_debug};
use solana_metrics::{datapoint, datapoint_error, inc_new_counter_debug};
use solana_runtime::bank::Bank;
use solana_runtime::locked_accounts_results::LockedAccountsResults;
use solana_sdk::genesis_block::GenesisBlock;
@ -45,7 +45,7 @@ fn par_execute_entries(
}
if !Bank::can_commit(&r) {
warn!("Unexpected validator error: {:?}, tx: {:?}", e, tx);
datapoint!(
datapoint_error!(
"validator_process_entry_error",
("error", format!("error: {:?}, tx: {:?}", e, tx), String)
);

View File

@ -21,6 +21,7 @@ use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
use solana_sdk::transaction::Transaction;
use solana_stake_api::stake_instruction;
use solana_storage_api::storage_instruction;
use solana_storage_program::genesis_block_util::GenesisBlockUtil;
use solana_vote_api::vote_instruction;
use solana_vote_api::vote_state::VoteState;
use std::collections::HashMap;
@ -124,12 +125,13 @@ impl LocalCluster {
mut genesis_block,
mint_keypair,
voting_keypair,
storage_keypair,
} = create_genesis_block_with_leader(
config.cluster_lamports,
&leader_pubkey,
config.node_stakes[0],
);
let storage_keypair = Keypair::new();
genesis_block.add_storage_program(&storage_keypair.pubkey());
genesis_block.ticks_per_slot = config.ticks_per_slot;
genesis_block.slots_per_epoch = config.slots_per_epoch;
genesis_block.stakers_slot_offset = config.stakers_slot_offset;

View File

@ -1,6 +1,6 @@
[package]
name = "solana-drone"
version = "0.15.0"
version = "0.15.2"
description = "Solana Drone"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -20,9 +20,9 @@ clap = "2.33"
log = "0.4.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../logger", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
tokio = "0.1"
tokio-codec = "0.1"

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-genesis"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -11,22 +11,22 @@ homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
serde_json = "1.0.39"
solana = { path = "../core", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-budget-api = { path = "../programs/budget_api", version = "0.15.0" }
solana-budget-program = { path = "../programs/budget_program", version = "0.15.0" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.0" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.0" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.0" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.0" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.0" }
solana-storage-program = { path = "../programs/storage_program", version = "0.15.0" }
solana-token-api = { path = "../programs/token_api", version = "0.15.0" }
solana-token-program = { path = "../programs/token_program", version = "0.15.0" }
solana-config-api = { path = "../programs/config_api", version = "0.15.0" }
solana-config-program = { path = "../programs/config_program", version = "0.15.0" }
solana-exchange-api = { path = "../programs/exchange_api", version = "0.15.0" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-budget-api = { path = "../programs/budget_api", version = "0.15.2" }
solana-budget-program = { path = "../programs/budget_program", version = "0.15.2" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.2" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.2" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.2" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.2" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.2" }
solana-storage-program = { path = "../programs/storage_program", version = "0.15.2" }
solana-token-api = { path = "../programs/token_api", version = "0.15.2" }
solana-token-program = { path = "../programs/token_program", version = "0.15.2" }
solana-config-api = { path = "../programs/config_api", version = "0.15.2" }
solana-config-program = { path = "../programs/config_program", version = "0.15.2" }
solana-exchange-api = { path = "../programs/exchange_api", version = "0.15.2" }
solana-exchange-program = { path = "../programs/exchange_program", version = "0.15.2" }
[dev-dependencies]
hashbrown = "0.3.0"

View File

@ -6,8 +6,6 @@ extern crate solana_stake_program;
#[macro_use]
extern crate solana_budget_program;
#[macro_use]
extern crate solana_storage_program;
#[macro_use]
extern crate solana_token_program;
#[macro_use]
extern crate solana_config_program;
@ -25,7 +23,7 @@ use solana_sdk::signature::{read_keypair, KeypairUtil};
use solana_sdk::system_program;
use solana_sdk::timing;
use solana_stake_api::stake_state;
use solana_storage_api::storage_contract;
use solana_storage_program::genesis_block_util::GenesisBlockUtil;
use solana_vote_api::vote_state;
use std::error;
use std::time::{Duration, Instant};
@ -213,22 +211,18 @@ fn main() -> Result<(), Box<dyn error::Error>> {
bootstrap_leader_stake_lamports,
),
),
// storage account
(
bootstrap_storage_keypair.pubkey(),
storage_contract::create_validator_storage_account(1),
),
],
&[
solana_vote_program!(),
solana_stake_program!(),
solana_budget_program!(),
solana_storage_program!(),
solana_token_program!(),
solana_config_program!(),
solana_exchange_program!(),
],
);
genesis_block.add_storage_program(&bootstrap_storage_keypair.pubkey());
genesis_block.fee_calculator.lamports_per_signature =
value_t_or_exit!(matches, "lamports_per_signature", u64);
genesis_block.ticks_per_slot = value_t_or_exit!(matches, "ticks_per_slot", u64);

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-gossip"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -11,10 +11,10 @@ homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
env_logger = "0.6.1"
solana = { path = "../core", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-client = { path = "../client", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[features]
chacha = []

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-install"
description = "The solana cluster software installer"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -28,10 +28,10 @@ ring = "0.13.2"
serde = "1.0.91"
serde_derive = "1.0.91"
serde_yaml = "0.8.9"
solana-client = { path = "../client", version = "0.15.0" }
solana-config-api = { path = "../programs/config_api", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.2" }
solana-config-api = { path = "../programs/config_api", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
tar = "0.4.26"
tempdir = "0.3.7"
url = "1.7.2"

View File

@ -58,7 +58,7 @@ fn main() -> Result<(), String> {
.arg({
let arg = Arg::with_name("data_dir")
.short("d")
.long("data_dir")
.long("data-dir")
.value_name("PATH")
.takes_value(true)
.required(true)

View File

@ -1,6 +1,6 @@
[package]
name = "solana-keygen"
version = "0.15.0"
version = "0.15.2"
description = "Solana key generation utility"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -15,7 +15,7 @@ erasure = []
[dependencies]
dirs = "1.0.5"
clap = "2.33"
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[[bin]]
name = "solana-keygen"

View File

@ -1,7 +1,7 @@
[package]
name = "solana-kvstore"
description = "Embedded Key-Value store for solana"
version = "0.15.0"
version = "0.15.2"
homepage = "https://solana.com/"
repository = "https://github.com/solana-labs/solana"
authors = ["Solana Maintainers <maintainers@solana.com>"]

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-ledger-tool"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -11,10 +11,10 @@ homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
serde_json = "1.0.39"
solana = { path = "../core", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-runtime = { path = "../runtime", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-runtime = { path = "../runtime", version = "0.15.2" }
[dev-dependencies]
assert_cmd = "0.11"

View File

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

View File

@ -1,6 +1,6 @@
[package]
name = "solana-metrics"
version = "0.15.0"
version = "0.15.2"
description = "Solana Metrics"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -15,7 +15,7 @@ log = "0.4.2"
reqwest = "0.9.17"
lazy_static = "1.3.0"
sys-info = "0.5.6"
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[dev-dependencies]
rand = "0.6.5"

View File

@ -17,7 +17,6 @@ usage: $0 [-e] [-d] [-c] [username]
Creates a testnet dev metrics database
username InfluxDB user with access to create a new database
-c Use Influx Cloud instance
-d Delete the database instead of creating it
-e Assume database already exists and SOLANA_METRICS_CONFIG is
defined in the environment already
@ -31,15 +30,12 @@ loadConfigFile
useEnv=false
delete=false
host="https://metrics.solana.com:8086"
while getopts "hcde" opt; do
while getopts "hde" opt; do
case $opt in
h|\?)
usage
exit 0
;;
c)
host="https://clocktower-f1d56615.influxcloud.net:8086"
;;
d)
delete=true
;;

View File

@ -58,6 +58,7 @@ Operate a configured testnet
-F - Discard validator nodes that didn't bootup successfully
-o noLedgerVerify - Skip ledger verification
-o noValidatorSanity - Skip fullnode sanity
-o noInstallCheck - Skip solana-install sanity
-o rejectExtraNodes - Require the exact number of nodes
stop-specific options:
@ -150,7 +151,7 @@ while getopts "h?T:t:o:f:rD:i:c:Fn:" opt "${shortArgs[@]}"; do
;;
o)
case $OPTARG in
noLedgerVerify|noValidatorSanity|rejectExtraNodes)
noLedgerVerify|noValidatorSanity|rejectExtraNodes|noInstallCheck)
sanityExtraArgs="$sanityExtraArgs -o $OPTARG"
;;
*)
@ -392,7 +393,7 @@ sanity() {
set -x
# shellcheck disable=SC2029 # remote-client.sh args are expanded on client side intentionally
ssh "${sshOptions[@]}" "$bootstrapLeader" \
"./solana/net/remote/remote-sanity.sh $sanityExtraArgs \"$RUST_LOG\""
"./solana/net/remote/remote-sanity.sh $bootstrapLeader $sanityExtraArgs \"$RUST_LOG\""
) || ok=false
$ok || exit 1
@ -403,7 +404,7 @@ sanity() {
set -x
# shellcheck disable=SC2029 # remote-client.sh args are expanded on client side intentionally
ssh "${sshOptions[@]}" "$blockstreamer" \
"./solana/net/remote/remote-sanity.sh $sanityExtraArgs -o noLedgerVerify -o noValidatorSanity \"$RUST_LOG\""
"./solana/net/remote/remote-sanity.sh $blockstreamer $sanityExtraArgs -o noLedgerVerify -o noValidatorSanity \"$RUST_LOG\""
) || ok=false
$ok || exit 1
fi

View File

@ -61,6 +61,7 @@ local|tar)
./fetch-perf-libs.sh
# shellcheck source=/dev/null
source ./target/perf-libs/env.sh
SUDO_OK=1 source scripts/tune-system.sh
(
sudo scripts/oom-monitor.sh
@ -89,7 +90,8 @@ local|tar)
--gossip-port "$entrypointIp":8001
)
./multinode-demo/validator.sh --bootstrap-leader "${args[@]}" > fullnode.log 2>&1 &
nohup ./multinode-demo/validator.sh --bootstrap-leader "${args[@]}" > fullnode.log 2>&1 &
sleep 1
;;
validator|blockstreamer)
net/scripts/rsync-retry.sh -vPrc "$entrypointIp":~/.cargo/bin/ ~/.cargo/bin/
@ -129,7 +131,7 @@ local|tar)
./multinode-demo/drone.sh > drone.log 2>&1 &
export BLOCKEXPLORER_GEOIP_WHITELIST=$PWD/net/config/geoip.yml
npm install @solana/blockexplorer@1
npm install @solana/blockexplorer@1.8.12
npx solana-blockexplorer > blockexplorer.log 2>&1 &
# Confirm the blockexplorer is accessible
@ -144,7 +146,8 @@ local|tar)
curl --head "$(curl ifconfig.io)"
fi
./multinode-demo/validator.sh "${args[@]}" > fullnode.log 2>&1 &
nohup ./multinode-demo/validator.sh "${args[@]}" > fullnode.log 2>&1 &
sleep 1
;;
*)
echo "Error: unknown node type: $nodeType"

View File

@ -6,6 +6,9 @@ set -e
cd "$(dirname "$0")"/../..
sanityTargetIp="$1"
shift
deployMethod=
entrypointIp=
numNodes=
@ -23,6 +26,7 @@ missing() {
exit 1
}
[[ -n $sanityTargetIp ]] || missing sanityTargetIp
[[ -n $deployMethod ]] || missing deployMethod
[[ -n $entrypointIp ]] || missing entrypointIp
[[ -n $numNodes ]] || missing numNodes
@ -30,6 +34,7 @@ missing() {
ledgerVerify=true
validatorSanity=true
installCheck=true
rejectExtraNodes=false
while [[ $1 = -o ]]; do
opt="$2"
@ -41,6 +46,9 @@ while [[ $1 = -o ]]; do
noValidatorSanity)
validatorSanity=false
;;
noInstallCheck)
installCheck=false
;;
rejectExtraNodes)
rejectExtraNodes=true
;;
@ -66,7 +74,7 @@ local|tar)
source target/perf-libs/env.sh
fi
entrypointRsyncUrl="$entrypointIp:~/solana"
entrypointRsyncUrl="$sanityTargetIp:~/solana"
solana_gossip=solana-gossip
solana_install=solana-install
@ -91,7 +99,7 @@ else
fi
fi
echo "+++ $entrypointIp: node count ($numSanityNodes expected)"
echo "+++ $sanityTargetIp: node count ($numSanityNodes expected)"
(
set -x
$solana_keygen -o "$client_id"
@ -101,26 +109,26 @@ echo "+++ $entrypointIp: node count ($numSanityNodes expected)"
nodeArg="num-nodes-exactly"
fi
timeout 2m $solana_gossip --entrypoint "$entrypointIp:8001" \
timeout 2m $solana_gossip --entrypoint "$sanityTargetIp:8001" \
spy --$nodeArg "$numSanityNodes" \
)
echo "--- RPC API: getTransactionCount"
echo "--- $sanityTargetIp: RPC API: getTransactionCount"
(
set -x
curl --retry 5 --retry-delay 2 --retry-connrefused \
-X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1, "method":"getTransactionCount"}' \
http://"$entrypointIp":8899
http://"$sanityTargetIp":8899
)
echo "--- $entrypointIp: wallet sanity"
echo "--- $sanityTargetIp: wallet sanity"
(
set -x
scripts/wallet-sanity.sh --url http://"$entrypointIp":8899
scripts/wallet-sanity.sh --url http://"$sanityTargetIp":8899
)
echo "--- $entrypointIp: verify ledger"
echo "--- $sanityTargetIp: verify ledger"
if $ledgerVerify; then
if [[ -d $ledger ]]; then
(
@ -140,13 +148,13 @@ else
fi
echo "--- $entrypointIp: validator sanity"
echo "--- $sanityTargetIp: validator sanity"
if $validatorSanity; then
(
set -x -o pipefail
timeout 10s ./multinode-demo/validator-x.sh --stake 0 \
"$entrypointRsyncUrl" \
"$entrypointIp:8001" 2>&1 | tee validator-sanity.log
"$sanityTargetIp:8001" 2>&1 | tee validator-sanity.log
) || {
exitcode=$?
[[ $exitcode -eq 124 ]] || exit $exitcode
@ -164,8 +172,8 @@ else
echo "Note: validator sanity disabled"
fi
if [[ -r update_manifest_keypair.json ]]; then
echo "--- $entrypointIp: solana-install test"
if $installCheck && [[ -r update_manifest_keypair.json ]]; then
echo "--- $sanityTargetIp: solana-install test"
(
set -x
@ -174,7 +182,7 @@ if [[ -r update_manifest_keypair.json ]]; then
$solana_install init \
--no-modify-path \
--data-dir install-data-dir \
--url http://"$entrypointIp":8899 \
--url http://"$sanityTargetIp":8899 \
--pubkey "$update_manifest_pubkey"
$solana_install info

View File

@ -1,6 +1,6 @@
[package]
name = "solana-netutil"
version = "0.15.0"
version = "0.15.2"
description = "Solana Network Utilities"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -15,7 +15,7 @@ log = "0.4.2"
nix = "0.14.0"
rand = "0.6.1"
socket2 = "0.3.9"
solana-logger = { path = "../logger", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.2" }
tokio = "0.1"
[lib]

View File

@ -1,7 +1,7 @@
[package]
name = "solana-bpf-programs"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
documentation = "https://docs.rs/solana"
homepage = "https://solana.com/"
readme = "README.md"
@ -22,10 +22,10 @@ bincode = "1.1.4"
byteorder = "1.3.1"
elf = "0.0.10"
solana_rbpf = "=0.1.12"
solana-bpfloader = { path = "../bpf_loader", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-bpfloader = { path = "../bpf_loader", version = "0.15.2" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[[bench]]
name = "bpf_loader"

View File

@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-alloc"
version = "0.15.0"
version = "0.15.2"
description = "Solana BPF alloc program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -12,7 +12,7 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.0" }
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.2" }
[workspace]
members = []

View File

@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-iter"
version = "0.15.0"
version = "0.15.2"
description = "Solana BPF iter program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -12,7 +12,7 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.0" }
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.2" }
[workspace]
members = []

View File

@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-noop"
version = "0.15.0"
version = "0.15.2"
description = "Solana BPF noop program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -12,7 +12,7 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.0" }
solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust-utils", version = "0.15.2" }
[workspace]
members = []

View File

@ -1,6 +1,6 @@
[package]
name = "solana-bpfloader"
version = "0.15.0"
version = "0.15.2"
description = "Solana BPF Loader"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -15,8 +15,8 @@ libc = "0.2.55"
log = "0.4.2"
solana_rbpf = "=0.1.12"
serde = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_bpf_loader"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-budget-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Budget program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -16,10 +16,10 @@ num-derive = "0.2"
num-traits = "0.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
[lib]
name = "solana_budget_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-budget-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana budget program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-budget-api = { path = "../budget_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-budget-api = { path = "../budget_api", version = "0.15.2" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_budget_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-config-api"
version = "0.15.0"
version = "0.15.2"
description = "config program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -13,11 +13,11 @@ bincode = "1.1.4"
log = "0.4.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
[lib]
name = "solana_config_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-config-program"
version = "0.15.0"
version = "0.15.2"
description = "config program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-config-api = { path = "../config_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-config-api = { path = "../config_api", version = "0.15.2" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_config_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-exchange-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Exchange program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -13,12 +13,12 @@ log = "0.4.2"
bincode = "1.1.4"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-metrics = { path = "../../metrics", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-metrics = { path = "../../metrics", version = "0.15.2" }
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
[lib]
name = "solana_exchange_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-exchange-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana exchange program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-exchange-api = { path = "../exchange_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-exchange-api = { path = "../exchange_api", version = "0.15.2" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_exchange_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-failure-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana failure program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -9,11 +9,11 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
log = "0.4.2"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
[lib]
name = "solana_failure_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-noop-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana noop program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -9,13 +9,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-logger = { path = "../../logger", version = "0.15.2" }
log = "0.4.2"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
[lib]
name = "solana_noop_program"
crate-type = ["cdylib"]

View File

@ -1,6 +1,6 @@
[package]
name = "solana-stake-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Stake program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -13,10 +13,10 @@ bincode = "1.1.4"
log = "0.4.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-metrics = { path = "../../metrics", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-vote-api = { path = "../vote_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-metrics = { path = "../../metrics", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-vote-api = { path = "../vote_api", version = "0.15.2" }
[lib]
name = "solana_stake_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-stake-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana stake program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-stake-api = { path = "../stake_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-stake-api = { path = "../stake_api", version = "0.15.2" }
[lib]
name = "solana_stake_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-storage-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Storage program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -13,12 +13,12 @@ bincode = "1.1.4"
log = "0.4.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
assert_matches = "1.3.0"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "0.15.0" }
solana-runtime = { path = "../../runtime", version = "0.15.2" }
[lib]
name = "solana_storage_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-storage-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana storage program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-storage-api = { path = "../storage_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-storage-api = { path = "../storage_api", version = "0.15.2" }
[lib]
name = "solana_storage_program"

View File

@ -0,0 +1,19 @@
use crate::solana_storage_program;
use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::pubkey::Pubkey;
use solana_storage_api::storage_contract;
pub trait GenesisBlockUtil {
fn add_storage_program(&mut self, validator_storage_pubkey: &Pubkey);
}
impl GenesisBlockUtil for GenesisBlock {
fn add_storage_program(&mut self, validator_storage_pubkey: &Pubkey) {
self.accounts.push((
*validator_storage_pubkey,
storage_contract::create_validator_storage_account(1),
));
self.native_instruction_processors
.push(solana_storage_program!());
}
}

View File

@ -1,3 +1,5 @@
pub mod genesis_block_util;
#[macro_export]
macro_rules! solana_storage_program {
() => {

View File

@ -1,6 +1,6 @@
[package]
name = "solana-token-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Token API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -15,8 +15,8 @@ num-derive = "0.2"
num-traits = "0.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_token_api"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-token-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana token program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-token-api = { path = "../token_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-token-api = { path = "../token_api", version = "0.15.2" }
[lib]
name = "solana_token_program"

View File

@ -1,6 +1,6 @@
[package]
name = "solana-vote-api"
version = "0.15.0"
version = "0.15.2"
description = "Solana Vote program API"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -13,9 +13,9 @@ bincode = "1.1.4"
log = "0.4.2"
serde = "1.0.91"
serde_derive = "1.0.91"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-metrics = { path = "../../metrics", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-metrics = { path = "../../metrics", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
[lib]
name = "solana_vote_api"

View File

@ -145,10 +145,22 @@ impl VoteState {
.iter()
.any(|(slot, hash)| vote.slot == *slot && vote.hash == *hash)
{
warn!(
"dropping vote {:?}, no matching slot/hash combination",
vote
);
if log_enabled!(log::Level::Warn) {
for (slot, hash) in slot_hashes {
if vote.slot == *slot {
warn!(
"dropped vote {:?} matched slot {}, but not hash {:?}",
vote, *slot, *hash
);
}
if vote.hash == *hash {
warn!(
"dropped vote {:?} matched hash {:?}, but not slot {}",
vote, *hash, *slot,
);
}
}
}
return;
}

View File

@ -1,6 +1,6 @@
[package]
name = "solana-vote-program"
version = "0.15.0"
version = "0.15.2"
description = "Solana Vote program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -10,9 +10,9 @@ edition = "2018"
[dependencies]
log = "0.4.2"
solana-logger = { path = "../../logger", version = "0.15.0" }
solana-sdk = { path = "../../sdk", version = "0.15.0" }
solana-vote-api = { path = "../vote_api", version = "0.15.0" }
solana-logger = { path = "../../logger", version = "0.15.2" }
solana-sdk = { path = "../../sdk", version = "0.15.2" }
solana-vote-api = { path = "../vote_api", version = "0.15.2" }
[lib]
name = "solana_vote_program"

View File

@ -2,17 +2,17 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-replicator"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
solana = { path = "../core", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
[features]
chacha = ["solana/chacha"]

View File

@ -1,6 +1,6 @@
[package]
name = "solana-runtime"
version = "0.15.0"
version = "0.15.2"
description = "Solana runtime"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@ -23,16 +23,14 @@ rayon = "1.0.0"
serde = "1.0.88"
serde_derive = "1.0.91"
serde_json = "1.0.38"
solana-logger = { path = "../logger", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.0" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.0" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.0" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.0" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.0" }
solana-storage-program = { path = "../programs/storage_program", version = "0.15.0" }
solana-noop-program = { path = "../programs/noop_program", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.2" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.2" }
solana-vote-program = { path = "../programs/vote_program", version = "0.15.2" }
solana-stake-program = { path = "../programs/stake_program", version = "0.15.2" }
solana-noop-program = { path = "../programs/noop_program", version = "0.15.2" }
[lib]
name = "solana_runtime"

View File

@ -215,18 +215,22 @@ impl Bank {
self.store(&slot_hashes::id(), &account);
}
fn set_hash(&self) {
fn set_hash(&self) -> bool {
let mut hash = self.hash.write().unwrap();
if *hash == Hash::default() {
// freeze is a one-way trip, idempotent
*hash = self.hash_internal_state();
true
} else {
false
}
}
pub fn freeze(&self) {
self.set_hash();
self.update_slot_hashes();
if self.set_hash() {
self.update_slot_hashes();
}
}
pub fn epoch_schedule(&self) -> &EpochSchedule {
@ -1347,6 +1351,36 @@ mod tests {
assert_eq!(bank.transaction_count(), 1);
}
#[test]
fn test_need_credit_only_accounts() {
let (genesis_block, mint_keypair) = create_genesis_block(10);
let bank = Bank::new(&genesis_block);
let payer0 = Keypair::new();
let payer1 = Keypair::new();
let recipient = Pubkey::new_rand();
// Fund additional payers
bank.transfer(3, &mint_keypair, &payer0.pubkey()).unwrap();
bank.transfer(3, &mint_keypair, &payer1.pubkey()).unwrap();
let tx0 = system_transaction::transfer(&mint_keypair, &recipient, 1, genesis_block.hash());
let tx1 = system_transaction::transfer(&payer0, &recipient, 1, genesis_block.hash());
let tx2 = system_transaction::transfer(&payer1, &recipient, 1, genesis_block.hash());
let txs = vec![tx0, tx1, tx2];
let results = bank.process_transactions(&txs);
// If multiple transactions attempt to deposit into the same account, only the first will
// succeed, even though such atomic adds are safe. A System Transfer `To` account should be
// given credit-only handling
assert_eq!(results[0], Ok(()));
assert_eq!(results[1], Err(TransactionError::AccountInUse));
assert_eq!(results[2], Err(TransactionError::AccountInUse));
// After credit-only account handling is implemented, the following checks should pass instead:
// assert_eq!(results[0], Ok(()));
// assert_eq!(results[1], Ok(()));
// assert_eq!(results[2], Ok(()));
}
#[test]
fn test_interleaving_locks() {
let (genesis_block, mint_keypair) = create_genesis_block(3);

View File

@ -4,7 +4,6 @@ use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_program;
use solana_stake_api::stake_state;
use solana_storage_api::storage_contract;
use solana_vote_api::vote_state;
// The default stake placed with the bootstrap leader
@ -14,7 +13,6 @@ pub struct GenesisBlockInfo {
pub genesis_block: GenesisBlock,
pub mint_keypair: Keypair,
pub voting_keypair: Keypair,
pub storage_keypair: Keypair,
}
pub fn create_genesis_block_with_leader(
@ -25,7 +23,6 @@ pub fn create_genesis_block_with_leader(
let mint_keypair = Keypair::new();
let voting_keypair = Keypair::new();
let staking_keypair = Keypair::new();
let storage_keypair = Keypair::new();
// TODO: de-duplicate the stake once passive staking
// is fully implemented
@ -61,23 +58,13 @@ pub fn create_genesis_block_with_leader(
bootstrap_leader_stake_lamports,
),
),
// storage account
(
storage_keypair.pubkey(),
storage_contract::create_validator_storage_account(1),
),
],
&[
solana_vote_program!(),
solana_stake_program!(),
solana_storage_program!(), // TODO: storage program is only needed by core/, move this line into core/src/genesis_utils.rs
],
&[solana_vote_program!(), solana_stake_program!()],
);
GenesisBlockInfo {
genesis_block,
mint_keypair,
voting_keypair,
storage_keypair,
}
}

View File

@ -25,8 +25,5 @@ extern crate solana_vote_program;
#[macro_use]
extern crate solana_stake_program;
#[macro_use]
extern crate solana_storage_program;
#[macro_use]
extern crate serde_derive;

View File

@ -6,35 +6,46 @@
# shellcheck source=scripts/ulimit-n.sh
source "$(dirname "${BASH_SOURCE[0]}")"/ulimit-n.sh
# Reference: https://medium.com/@CameronSparr/increase-os-udp-buffers-to-improve-performance-51d167bb1360
if [[ $(uname) = Linux ]]; then
(
set -x +e
# test the existence of the sysctls before trying to set them
# go ahead and return true and don't exit if these calls fail
sysctl net.core.rmem_max 2>/dev/null 1>/dev/null &&
sudo sysctl -w net.core.rmem_max=161061273 1>/dev/null 2>/dev/null
sysctl_write() {
declare name=$1
declare new_value=$2
sysctl net.core.rmem_default 2>/dev/null 1>/dev/null &&
sudo sysctl -w net.core.rmem_default=161061273 1>/dev/null 2>/dev/null
# Test the existence of the sysctl before trying to set it
sysctl "$name" 2>/dev/null 1>/dev/null || return 0
sysctl net.core.wmem_max 2>/dev/null 1>/dev/null &&
sudo sysctl -w net.core.wmem_max=161061273 1>/dev/null 2>/dev/null
declare current_value
current_value=$(sysctl -n "$name")
[[ $current_value != "$new_value" ]] || return 0
sysctl net.core.wmem_default 2>/dev/null 1>/dev/null &&
sudo sysctl -w net.core.wmem_default=161061273 1>/dev/null 2>/dev/null
) || true
fi
declare cmd="sysctl -w $name=$new_value"
if [[ -n $SUDO_OK ]]; then
cmd="sudo $cmd"
fi
if [[ $(uname) = Darwin ]]; then
(
if [[ $(sysctl net.inet.udp.maxdgram | cut -d\ -f2) != 65535 ]]; then
echo "Adjusting maxdgram to allow for large UDP packets, see BLOB_SIZE in src/packet.rs:"
set -x
sudo sysctl net.inet.udp.maxdgram=65535
fi
)
echo "$ $cmd"
$cmd
fi
# Some versions of sysctl exit with 0 on permission denied errors
current_value=$(sysctl -n "$name")
if [[ $current_value != "$new_value" ]]; then
echo "==> Failed to set $name. Try running: \"SUDO_OK=1 source ${BASH_SOURCE[0]}\""
fi
}
case $(uname) in
Linux)
# Reference: https://medium.com/@CameronSparr/increase-os-udp-buffers-to-improve-performance-51d167bb1360
sysctl_write net.core.rmem_max 161061273
sysctl_write net.core.rmem_default 161061273
sysctl_write net.core.wmem_max 161061273
sysctl_write net.core.wmem_default 161061273
;;
Darwin)
# Adjusting maxdgram to allow for large UDP packets, see BLOB_SIZE in core/src/packet.rs
sysctl_write net.inet.udp.maxdgram 65535
;;
*)
;;
esac

View File

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

View File

@ -1,7 +1,7 @@
[package]
name = "solana-sdk-bpf-utils"
version = "0.15.0"
version = "0.15.2"
description = "Solana BPF SDK Rust Utils"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@ -19,9 +19,6 @@ download() {
"--retry-connrefused"
"--read-timeout=30"
)
# Github release URLs 302 to AWS S3. Sometimes that S3 URL returns 403
args+=("--retry-on-http-error=403")
wget "${args[@]}"
}
@ -36,7 +33,7 @@ if [[ ! -r criterion-$machine-$version.md ]]; then
mkdir criterion
cd criterion
base=https://github.com/Snaipe/Criterion/releases/
base=https://github.com/Snaipe/Criterion/releases
download $base/download/$version/$filename $filename mega
tar --strip-components 1 -jxf $filename
rm -rf $filename

View File

@ -1,17 +1,18 @@
[package]
name = "solana-upload-perf"
version = "0.15.0"
version = "0.15.2"
description = "Metrics Upload Utility"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
edition = "2018"
homepage = "https://solana.com/"
publish = false
[dependencies]
log = "0.4.2"
serde_json = "1.0.39"
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
[[bin]]
name = "solana-upload-perf"

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-validator"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -12,15 +12,15 @@ homepage = "https://solana.com/"
clap = "2.33.0"
log = "0.4.2"
serde_json = "1.0.39"
solana = { path = "../core", version = "0.15.0" }
solana-drone = { path = "../drone", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-runtime = { path = "../runtime", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.0" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.0" }
solana = { path = "../core", version = "0.15.2" }
solana-drone = { path = "../drone", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
solana-runtime = { path = "../runtime", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.2" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.2" }
[features]
chacha = ["solana/chacha"]

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-vote-signer"
description = "Solana Vote Signing Service"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -17,8 +17,8 @@ jsonrpc-derive = "11.0.0"
jsonrpc-http-server = "11.0.0"
serde = "1.0.91"
serde_json = "1.0.39"
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-metrics = { path = "../metrics", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-metrics = { path = "../metrics", version = "0.15.2" }
[lib]
name = "solana_vote_signer"

View File

@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-wallet"
description = "Blockchain, Rebuilt for Scale"
version = "0.15.0"
version = "0.15.2"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@ -17,21 +17,21 @@ dirs = "1.0.5"
log = "0.4.2"
num-traits = "0.2"
serde_json = "1.0.39"
solana-budget-api = { path = "../programs/budget_api", version = "0.15.0" }
solana-client = { path = "../client", version = "0.15.0" }
solana-drone = { path = "../drone", version = "0.15.0" }
solana-logger = { path = "../logger", version = "0.15.0" }
solana-netutil = { path = "../netutil", version = "0.15.0" }
solana-sdk = { path = "../sdk", version = "0.15.0" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.0" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.0" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.0" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.0" }
solana-budget-api = { path = "../programs/budget_api", version = "0.15.2" }
solana-client = { path = "../client", version = "0.15.2" }
solana-drone = { path = "../drone", version = "0.15.2" }
solana-logger = { path = "../logger", version = "0.15.2" }
solana-netutil = { path = "../netutil", version = "0.15.2" }
solana-sdk = { path = "../sdk", version = "0.15.2" }
solana-stake-api = { path = "../programs/stake_api", version = "0.15.2" }
solana-storage-api = { path = "../programs/storage_api", version = "0.15.2" }
solana-vote-api = { path = "../programs/vote_api", version = "0.15.2" }
solana-vote-signer = { path = "../vote-signer", version = "0.15.2" }
url = "1.7.2"
[dev-dependencies]
solana-budget-program = { path = "../programs/budget_program", version = "0.15.0" }
solana = { path = "../core", version = "0.15.0" }
solana-budget-program = { path = "../programs/budget_program", version = "0.15.2" }
solana = { path = "../core", version = "0.15.2" }
[features]
cuda = []