Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
623ac6567b | ||
|
a628034eb5 | ||
|
8bce2dd446 | ||
|
60020632c1 | ||
|
864253a85b | ||
|
637ac7933b | ||
|
5a29e95f71 | ||
|
ba72f347e4 | ||
|
720ad85632 | ||
|
e5623d288e | ||
|
ad530d73ce | ||
|
36122a27af | ||
|
a6ded6a5ed | ||
|
c5541efdc2 | ||
|
3f3e1b30d6 | ||
|
5365b939bf | ||
|
1b6de0f08d |
689
Cargo.lock
generated
689
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-account-decoder"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana account decoder"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -19,9 +19,9 @@ lazy_static = "1.4.0"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
serde_json = "1.0.79"
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
spl-token = { version = "=3.2.0", features = ["no-entrypoint"] }
|
||||
thiserror = "1.0"
|
||||
zstd = "0.11.1"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-accounts-bench"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -12,11 +12,11 @@ publish = false
|
||||
clap = "2.33.1"
|
||||
log = "0.4.14"
|
||||
rayon = "1.5.1"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-accounts-cluster-bench"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -13,25 +13,25 @@ clap = "2.33.1"
|
||||
log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.8" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
spl-token = { version = "=3.2.0", features = ["no-entrypoint"] }
|
||||
|
||||
[dev-dependencies]
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.6" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.8" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-banking-bench"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -14,17 +14,17 @@ crossbeam-channel = "0.5"
|
||||
log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-poh = { path = "../poh", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-poh = { path = "../poh", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-banks-client"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana banks client"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -12,17 +12,17 @@ edition = "2021"
|
||||
[dependencies]
|
||||
borsh = "0.9.3"
|
||||
futures = "0.3"
|
||||
solana-banks-interface = { path = "../banks-interface", version = "=1.10.6" }
|
||||
solana-program = { path = "../sdk/program", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-banks-interface = { path = "../banks-interface", version = "=1.10.8" }
|
||||
solana-program = { path = "../sdk/program", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
tarpc = { version = "0.27.2", features = ["full"] }
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-serde = { version = "0.8", features = ["bincode"] }
|
||||
|
||||
[dev-dependencies]
|
||||
solana-banks-server = { path = "../banks-server", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-banks-server = { path = "../banks-server", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-banks-interface"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana banks RPC interface"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -11,7 +11,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
serde = { version = "1.0.136", features = ["derive"] }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
tarpc = { version = "0.27.2", features = ["full"] }
|
||||
|
||||
[lib]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-banks-server"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana banks server"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -13,10 +13,10 @@ edition = "2021"
|
||||
bincode = "1.3.3"
|
||||
crossbeam-channel = "0.5"
|
||||
futures = "0.3"
|
||||
solana-banks-interface = { path = "../banks-interface", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.10.6" }
|
||||
solana-banks-interface = { path = "../banks-interface", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.10.8" }
|
||||
tarpc = { version = "0.27.2", features = ["full"] }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-serde = { version = "0.8", features = ["bincode"] }
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-bench-streamer"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -11,9 +11,9 @@ publish = false
|
||||
[dependencies]
|
||||
clap = "2.33.1"
|
||||
crossbeam-channel = "0.5"
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-bench-tps"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -15,23 +15,23 @@ log = "0.4.14"
|
||||
rayon = "1.5.1"
|
||||
serde_json = "1.0.79"
|
||||
serde_yaml = "0.8.23"
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.6" }
|
||||
solana-genesis = { path = "../genesis", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.8" }
|
||||
solana-genesis = { path = "../genesis", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[dev-dependencies]
|
||||
serial_test = "0.6.0"
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.6" }
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bloom"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana bloom filter"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -17,9 +17,9 @@ rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
serde = { version = "1.0.136", features = ["rc"] }
|
||||
serde_derive = "1.0.103"
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bucket-map"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "solana-bucket-map"
|
||||
homepage = "https://solana.com/"
|
||||
documentation = "https://docs.rs/solana-bucket-map"
|
||||
@@ -15,14 +15,14 @@ log = { version = "0.4.11" }
|
||||
memmap2 = "0.5.3"
|
||||
modular-bitfield = "0.11.2"
|
||||
rand = "0.7.0"
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
tempfile = "3.3.0"
|
||||
|
||||
[dev-dependencies]
|
||||
fs_extra = "1.2.0"
|
||||
rayon = "1.5.0"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-clap-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana utilities for the clap"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -13,9 +13,9 @@ edition = "2021"
|
||||
chrono = "0.4"
|
||||
clap = "2.33.0"
|
||||
rpassword = "6.0"
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.6", default-features = false }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.8", default-features = false }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
thiserror = "1.0.30"
|
||||
tiny-bip39 = "0.8.2"
|
||||
uriparse = "0.6.3"
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-cli-config"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-cli-output"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -19,12 +19,12 @@ humantime = "2.0.1"
|
||||
indicatif = "0.16.2"
|
||||
serde = "1.0.136"
|
||||
serde_json = "1.0.79"
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.8" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
|
||||
|
||||
[dev-dependencies]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-cli"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -27,29 +27,29 @@ semver = "1.0.6"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
serde_json = "1.0.79"
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.6" }
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.6" }
|
||||
solana-cli-output = { path = "../cli-output", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.6" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.6" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.8" }
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.8" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.8" }
|
||||
solana-cli-output = { path = "../cli-output", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.8" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.8" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
solana_rbpf = "=0.2.24"
|
||||
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
|
||||
thiserror = "1.0.30"
|
||||
tiny-bip39 = "0.8.2"
|
||||
|
||||
[dev-dependencies]
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.8" }
|
||||
tempfile = "3.3.0"
|
||||
|
||||
[[bin]]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-client-test"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana RPC Test"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -14,25 +14,25 @@ publish = false
|
||||
futures-util = "0.3.21"
|
||||
serde_json = "1.0.79"
|
||||
serial_test = "0.6.0"
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-merkle-tree = { path = "../merkle-tree", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-merkle-tree = { path = "../merkle-tree", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-test-validator = { path = "../test-validator", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
systemstat = "0.1.10"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
||||
[dev-dependencies]
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-client"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Client"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -35,16 +35,16 @@ semver = "1.0.6"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
serde_json = "1.0.79"
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.8" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-faucet = { path = "../faucet", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-stream = "0.1.8"
|
||||
@@ -55,7 +55,7 @@ url = "2.2.2"
|
||||
[dev-dependencies]
|
||||
assert_matches = "1.5.0"
|
||||
jsonrpc-http-server = "18.0.0"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -3727,6 +3727,61 @@ impl RpcClient {
|
||||
commitment: Some(self.maybe_map_commitment(commitment_config).await?),
|
||||
data_slice: None,
|
||||
};
|
||||
|
||||
self.get_account_with_config(pubkey, config).await
|
||||
}
|
||||
|
||||
/// Returns all information associated with the account of the provided pubkey.
|
||||
///
|
||||
/// If the account does not exist, this method returns `Ok(None)`.
|
||||
///
|
||||
/// To get multiple accounts at once, use the [`get_multiple_accounts_with_config`] method.
|
||||
///
|
||||
/// [`get_multiple_accounts_with_config`]: RpcClient::get_multiple_accounts_with_config
|
||||
///
|
||||
/// # RPC Reference
|
||||
///
|
||||
/// This method is built on the [`getAccountInfo`] RPC method.
|
||||
///
|
||||
/// [`getAccountInfo`]: https://docs.solana.com/developing/clients/jsonrpc-api#getaccountinfo
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// # use solana_client::{
|
||||
/// # rpc_client::{self, RpcClient},
|
||||
/// # rpc_config::RpcAccountInfoConfig,
|
||||
/// # client_error::ClientError,
|
||||
/// # };
|
||||
/// # use solana_sdk::{
|
||||
/// # signature::Signer,
|
||||
/// # signer::keypair::Keypair,
|
||||
/// # pubkey::Pubkey,
|
||||
/// # commitment_config::CommitmentConfig,
|
||||
/// # };
|
||||
/// # use solana_account_decoder::UiAccountEncoding;
|
||||
/// # use std::str::FromStr;
|
||||
/// # let mocks = rpc_client::create_rpc_client_mocks();
|
||||
/// # let rpc_client = RpcClient::new_mock_with_mocks("succeeds".to_string(), mocks);
|
||||
/// let alice_pubkey = Pubkey::from_str("BgvYtJEfmZYdVKiptmMjxGzv8iQoo4MWjsP3QsTkhhxa").unwrap();
|
||||
/// let commitment_config = CommitmentConfig::processed();
|
||||
/// let config = RpcAccountInfoConfig {
|
||||
/// encoding: Some(UiAccountEncoding::Base64),
|
||||
/// commitment: Some(commitment_config),
|
||||
/// .. RpcAccountInfoConfig::default()
|
||||
/// };
|
||||
/// let account = rpc_client.get_account_with_config(
|
||||
/// &alice_pubkey,
|
||||
/// config,
|
||||
/// )?;
|
||||
/// assert!(account.value.is_some());
|
||||
/// # Ok::<(), ClientError>(())
|
||||
/// ```
|
||||
pub async fn get_account_with_config(
|
||||
&self,
|
||||
pubkey: &Pubkey,
|
||||
config: RpcAccountInfoConfig,
|
||||
) -> RpcResult<Option<Account>> {
|
||||
let response = self
|
||||
.send(
|
||||
RpcRequest::GetAccountInfo,
|
||||
|
@@ -3245,6 +3245,60 @@ impl RpcClient {
|
||||
)
|
||||
}
|
||||
|
||||
/// Returns all information associated with the account of the provided pubkey.
|
||||
///
|
||||
/// If the account does not exist, this method returns `Ok(None)`.
|
||||
///
|
||||
/// To get multiple accounts at once, use the [`get_multiple_accounts_with_config`] method.
|
||||
///
|
||||
/// [`get_multiple_accounts_with_config`]: RpcClient::get_multiple_accounts_with_config
|
||||
///
|
||||
/// # RPC Reference
|
||||
///
|
||||
/// This method is built on the [`getAccountInfo`] RPC method.
|
||||
///
|
||||
/// [`getAccountInfo`]: https://docs.solana.com/developing/clients/jsonrpc-api#getaccountinfo
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// # use solana_client::{
|
||||
/// # rpc_client::{self, RpcClient},
|
||||
/// # rpc_config::RpcAccountInfoConfig,
|
||||
/// # client_error::ClientError,
|
||||
/// # };
|
||||
/// # use solana_sdk::{
|
||||
/// # signature::Signer,
|
||||
/// # signer::keypair::Keypair,
|
||||
/// # pubkey::Pubkey,
|
||||
/// # commitment_config::CommitmentConfig,
|
||||
/// # };
|
||||
/// # use solana_account_decoder::UiAccountEncoding;
|
||||
/// # use std::str::FromStr;
|
||||
/// # let mocks = rpc_client::create_rpc_client_mocks();
|
||||
/// # let rpc_client = RpcClient::new_mock_with_mocks("succeeds".to_string(), mocks);
|
||||
/// let alice_pubkey = Pubkey::from_str("BgvYtJEfmZYdVKiptmMjxGzv8iQoo4MWjsP3QsTkhhxa").unwrap();
|
||||
/// let commitment_config = CommitmentConfig::processed();
|
||||
/// let config = RpcAccountInfoConfig {
|
||||
/// encoding: Some(UiAccountEncoding::Base64),
|
||||
/// commitment: Some(commitment_config),
|
||||
/// .. RpcAccountInfoConfig::default()
|
||||
/// };
|
||||
/// let account = rpc_client.get_account_with_config(
|
||||
/// &alice_pubkey,
|
||||
/// config,
|
||||
/// )?;
|
||||
/// assert!(account.value.is_some());
|
||||
/// # Ok::<(), ClientError>(())
|
||||
/// ```
|
||||
pub fn get_account_with_config(
|
||||
&self,
|
||||
pubkey: &Pubkey,
|
||||
config: RpcAccountInfoConfig,
|
||||
) -> RpcResult<Option<Account>> {
|
||||
self.invoke(self.rpc_client.get_account_with_config(pubkey, config))
|
||||
}
|
||||
|
||||
/// Get the max slot seen from retransmit stage.
|
||||
///
|
||||
/// # RPC Reference
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "solana-core"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
homepage = "https://solana.com/"
|
||||
documentation = "https://docs.rs/solana-core"
|
||||
readme = "../README.md"
|
||||
@@ -21,42 +21,42 @@ bs58 = "0.4.0"
|
||||
chrono = { version = "0.4.11", features = ["serde"] }
|
||||
crossbeam-channel = "0.5"
|
||||
dashmap = { version = "4.0.2", features = ["rayon", "raw-api"] }
|
||||
etcd-client = { version = "0.8.4", features = ["tls"] }
|
||||
etcd-client = { version = "0.9.0", features = ["tls"] }
|
||||
fs_extra = "1.2.0"
|
||||
histogram = "0.6.9"
|
||||
itertools = "0.10.3"
|
||||
log = "0.4.14"
|
||||
lru = "0.7.3"
|
||||
lru = "0.7.5"
|
||||
rand = "0.7.0"
|
||||
rand_chacha = "0.2.2"
|
||||
rayon = "1.5.1"
|
||||
retain_mut = "0.1.7"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.10.6" }
|
||||
solana-bloom = { path = "../bloom", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-poh = { path = "../poh", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-replica-lib = { path = "../replica-lib", version = "=1.10.6" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-address-lookup-table-program = { path = "../programs/address-lookup-table", version = "=1.10.8" }
|
||||
solana-bloom = { path = "../bloom", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-geyser-plugin-manager = { path = "../geyser-plugin-manager", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-poh = { path = "../poh", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-replica-lib = { path = "../replica-lib", version = "=1.10.8" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-send-transaction-service = { path = "../send-transaction-service", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
sys-info = "0.9.1"
|
||||
tempfile = "3.3.0"
|
||||
thiserror = "1.0"
|
||||
@@ -69,10 +69,10 @@ raptorq = "1.6.5"
|
||||
reqwest = { version = "0.11.10", default-features = false, features = ["blocking", "rustls-tls", "json"] }
|
||||
serde_json = "1.0.79"
|
||||
serial_test = "0.6.0"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.6" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.8" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
static_assertions = "1.1.0"
|
||||
systemstat = "0.1.10"
|
||||
|
||||
|
@@ -9,7 +9,12 @@ use {
|
||||
retransmit_stage::RetransmitStage,
|
||||
},
|
||||
solana_gossip::contact_info::ContactInfo,
|
||||
solana_sdk::{clock::Slot, hash::hashv, pubkey::Pubkey, signature::Signature},
|
||||
solana_ledger::{
|
||||
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
||||
shred::Shred,
|
||||
},
|
||||
solana_runtime::bank::Bank,
|
||||
solana_sdk::pubkey::Pubkey,
|
||||
test::Bencher,
|
||||
};
|
||||
|
||||
@@ -26,87 +31,48 @@ fn make_cluster_nodes<R: Rng>(
|
||||
|
||||
fn get_retransmit_peers_deterministic(
|
||||
cluster_nodes: &ClusterNodes<RetransmitStage>,
|
||||
slot: &Slot,
|
||||
shred: &mut Shred,
|
||||
slot_leader: &Pubkey,
|
||||
root_bank: &Bank,
|
||||
num_simulated_shreds: usize,
|
||||
) {
|
||||
for i in 0..num_simulated_shreds {
|
||||
// see Shred::seed
|
||||
let shred_seed = hashv(&[
|
||||
&slot.to_le_bytes(),
|
||||
&(i as u32).to_le_bytes(),
|
||||
&slot_leader.to_bytes(),
|
||||
])
|
||||
.to_bytes();
|
||||
|
||||
let (_neighbors, _children) = cluster_nodes.get_retransmit_peers_deterministic(
|
||||
shred_seed,
|
||||
solana_gossip::cluster_info::DATA_PLANE_FANOUT,
|
||||
shred.common_header.index = i as u32;
|
||||
let (_neighbors, _children) = cluster_nodes.get_retransmit_peers(
|
||||
*slot_leader,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_retransmit_peers_compat(
|
||||
cluster_nodes: &ClusterNodes<RetransmitStage>,
|
||||
slot_leader: &Pubkey,
|
||||
signatures: &[Signature],
|
||||
) {
|
||||
for signature in signatures.iter() {
|
||||
// see Shred::seed
|
||||
let signature = signature.as_ref();
|
||||
let offset = signature.len().checked_sub(32).unwrap();
|
||||
let shred_seed = signature[offset..].try_into().unwrap();
|
||||
|
||||
let (_neighbors, _children) = cluster_nodes.get_retransmit_peers_compat(
|
||||
shred_seed,
|
||||
shred,
|
||||
root_bank,
|
||||
solana_gossip::cluster_info::DATA_PLANE_FANOUT,
|
||||
*slot_leader,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_retransmit_peers_deterministic_wrapper(b: &mut Bencher, unstaked_ratio: Option<(u32, u32)>) {
|
||||
let mut rng = rand::thread_rng();
|
||||
let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
|
||||
let bank = Bank::new_for_benches(&genesis_config);
|
||||
let (nodes, cluster_nodes) = make_cluster_nodes(&mut rng, unstaked_ratio);
|
||||
let slot_leader = nodes[1..].choose(&mut rng).unwrap().id;
|
||||
let slot = rand::random::<u64>();
|
||||
let mut shred = Shred::new_empty_data_shred();
|
||||
shred.common_header.slot = slot;
|
||||
b.iter(|| {
|
||||
get_retransmit_peers_deterministic(
|
||||
&cluster_nodes,
|
||||
&slot,
|
||||
&mut shred,
|
||||
&slot_leader,
|
||||
&bank,
|
||||
NUM_SIMULATED_SHREDS,
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
fn get_retransmit_peers_compat_wrapper(b: &mut Bencher, unstaked_ratio: Option<(u32, u32)>) {
|
||||
let mut rng = rand::thread_rng();
|
||||
let (nodes, cluster_nodes) = make_cluster_nodes(&mut rng, unstaked_ratio);
|
||||
let slot_leader = nodes[1..].choose(&mut rng).unwrap().id;
|
||||
let signatures: Vec<_> = std::iter::repeat_with(Signature::new_unique)
|
||||
.take(NUM_SIMULATED_SHREDS)
|
||||
.collect();
|
||||
b.iter(|| get_retransmit_peers_compat(&cluster_nodes, &slot_leader, &signatures));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_get_retransmit_peers_deterministic_unstaked_ratio_1_2(b: &mut Bencher) {
|
||||
get_retransmit_peers_deterministic_wrapper(b, Some((1, 2)));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_get_retransmit_peers_compat_unstaked_ratio_1_2(b: &mut Bencher) {
|
||||
get_retransmit_peers_compat_wrapper(b, Some((1, 2)));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_get_retransmit_peers_deterministic_unstaked_ratio_1_32(b: &mut Bencher) {
|
||||
get_retransmit_peers_deterministic_wrapper(b, Some((1, 32)));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_get_retransmit_peers_compat_unstaked_ratio_1_32(b: &mut Bencher) {
|
||||
get_retransmit_peers_compat_wrapper(b, Some((1, 32)));
|
||||
}
|
||||
|
@@ -1353,38 +1353,28 @@ impl BankingStage {
|
||||
gossip_vote_sender: &ReplayVoteSender,
|
||||
qos_service: &QosService,
|
||||
) -> ProcessTransactionBatchOutput {
|
||||
let ((transactions_qos_results, cost_model_throttled_transactions_count), cost_model_time) =
|
||||
Measure::this(
|
||||
|_| {
|
||||
let tx_costs = qos_service.compute_transaction_costs(txs.iter());
|
||||
let mut cost_model_time = Measure::start("cost_model");
|
||||
|
||||
let (transactions_qos_results, num_included) =
|
||||
qos_service.select_transactions_per_cost(txs.iter(), tx_costs.iter(), bank);
|
||||
let transaction_costs = qos_service.compute_transaction_costs(txs.iter());
|
||||
|
||||
let cost_model_throttled_transactions_count =
|
||||
txs.len().saturating_sub(num_included);
|
||||
let (transactions_qos_results, num_included) =
|
||||
qos_service.select_transactions_per_cost(txs.iter(), transaction_costs.iter(), bank);
|
||||
|
||||
qos_service.accumulate_estimated_transaction_costs(
|
||||
&Self::accumulate_batched_transaction_costs(
|
||||
tx_costs.iter(),
|
||||
transactions_qos_results.iter(),
|
||||
),
|
||||
);
|
||||
(
|
||||
transactions_qos_results,
|
||||
cost_model_throttled_transactions_count,
|
||||
)
|
||||
},
|
||||
(),
|
||||
"cost_model",
|
||||
);
|
||||
let cost_model_throttled_transactions_count = txs.len().saturating_sub(num_included);
|
||||
|
||||
qos_service.accumulate_estimated_transaction_costs(
|
||||
&Self::accumulate_batched_transaction_costs(
|
||||
transaction_costs.iter(),
|
||||
transactions_qos_results.iter(),
|
||||
),
|
||||
);
|
||||
cost_model_time.stop();
|
||||
|
||||
// Only lock accounts for those transactions are selected for the block;
|
||||
// Once accounts are locked, other threads cannot encode transactions that will modify the
|
||||
// same account state
|
||||
let mut lock_time = Measure::start("lock_time");
|
||||
let batch =
|
||||
bank.prepare_sanitized_batch_with_results(txs, transactions_qos_results.into_iter());
|
||||
let batch = bank.prepare_sanitized_batch_with_results(txs, transactions_qos_results.iter());
|
||||
lock_time.stop();
|
||||
|
||||
// retryable_txs includes AccountInUse, WouldExceedMaxBlockCostLimit
|
||||
@@ -1399,21 +1389,31 @@ impl BankingStage {
|
||||
gossip_vote_sender,
|
||||
);
|
||||
|
||||
let mut unlock_time = Measure::start("unlock_time");
|
||||
// Once the accounts are new transactions can enter the pipeline to process them
|
||||
drop(batch);
|
||||
unlock_time.stop();
|
||||
|
||||
let ExecuteAndCommitTransactionsOutput {
|
||||
ref mut retryable_transaction_indexes,
|
||||
ref execute_and_commit_timings,
|
||||
..
|
||||
} = execute_and_commit_transactions_output;
|
||||
|
||||
// TODO: This does not revert the cost tracker changes from all unexecuted transactions
|
||||
// yet: For example tx that are too old will not be included in the block, but are not
|
||||
// retryable.
|
||||
QosService::update_or_remove_transaction_costs(
|
||||
transaction_costs.iter(),
|
||||
transactions_qos_results.iter(),
|
||||
retryable_transaction_indexes,
|
||||
bank,
|
||||
);
|
||||
|
||||
retryable_transaction_indexes
|
||||
.iter_mut()
|
||||
.for_each(|x| *x += chunk_offset);
|
||||
|
||||
let mut unlock_time = Measure::start("unlock_time");
|
||||
// Once the accounts are new transactions can enter the pipeline to process them
|
||||
drop(batch);
|
||||
unlock_time.stop();
|
||||
|
||||
let (cu, us) =
|
||||
Self::accumulate_execute_units_and_time(&execute_and_commit_timings.execute_timings);
|
||||
qos_service.accumulate_actual_execute_cu(cu);
|
||||
@@ -2898,6 +2898,131 @@ mod tests {
|
||||
Blockstore::destroy(ledger_path.path()).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bank_process_and_record_transactions_cost_tracker() {
|
||||
solana_logger::setup();
|
||||
let GenesisConfigInfo {
|
||||
genesis_config,
|
||||
mint_keypair,
|
||||
..
|
||||
} = create_slow_genesis_config(10_000);
|
||||
let bank = Arc::new(Bank::new_no_wallclock_throttle_for_tests(&genesis_config));
|
||||
let pubkey = solana_sdk::pubkey::new_rand();
|
||||
|
||||
let ledger_path = get_tmp_ledger_path_auto_delete!();
|
||||
{
|
||||
let blockstore = Blockstore::open(ledger_path.path())
|
||||
.expect("Expected to be able to open database ledger");
|
||||
let (poh_recorder, _entry_receiver, record_receiver) = PohRecorder::new(
|
||||
bank.tick_height(),
|
||||
bank.last_blockhash(),
|
||||
bank.clone(),
|
||||
Some((4, 4)),
|
||||
bank.ticks_per_slot(),
|
||||
&pubkey,
|
||||
&Arc::new(blockstore),
|
||||
&Arc::new(LeaderScheduleCache::new_from_bank(&bank)),
|
||||
&Arc::new(PohConfig::default()),
|
||||
Arc::new(AtomicBool::default()),
|
||||
);
|
||||
let recorder = poh_recorder.recorder();
|
||||
let poh_recorder = Arc::new(Mutex::new(poh_recorder));
|
||||
|
||||
let poh_simulator = simulate_poh(record_receiver, &poh_recorder);
|
||||
|
||||
poh_recorder.lock().unwrap().set_bank(&bank);
|
||||
let (gossip_vote_sender, _gossip_vote_receiver) = unbounded();
|
||||
|
||||
let qos_service = QosService::new(Arc::new(RwLock::new(CostModel::default())), 1);
|
||||
|
||||
let get_block_cost = || bank.read_cost_tracker().unwrap().block_cost();
|
||||
let get_tx_count = || bank.read_cost_tracker().unwrap().transaction_count();
|
||||
assert_eq!(get_block_cost(), 0);
|
||||
assert_eq!(get_tx_count(), 0);
|
||||
|
||||
//
|
||||
// TEST: cost tracker's block cost increases when successfully processing a tx
|
||||
//
|
||||
|
||||
let transactions = sanitize_transactions(vec![system_transaction::transfer(
|
||||
&mint_keypair,
|
||||
&pubkey,
|
||||
1,
|
||||
genesis_config.hash(),
|
||||
)]);
|
||||
|
||||
let process_transactions_batch_output = BankingStage::process_and_record_transactions(
|
||||
&bank,
|
||||
&transactions,
|
||||
&recorder,
|
||||
0,
|
||||
None,
|
||||
&gossip_vote_sender,
|
||||
&qos_service,
|
||||
);
|
||||
|
||||
let ExecuteAndCommitTransactionsOutput {
|
||||
executed_with_successful_result_count,
|
||||
commit_transactions_result,
|
||||
..
|
||||
} = process_transactions_batch_output.execute_and_commit_transactions_output;
|
||||
assert_eq!(executed_with_successful_result_count, 1);
|
||||
assert!(commit_transactions_result.is_ok());
|
||||
|
||||
let single_transfer_cost = get_block_cost();
|
||||
assert_ne!(single_transfer_cost, 0);
|
||||
assert_eq!(get_tx_count(), 1);
|
||||
|
||||
//
|
||||
// TEST: When a tx in a batch can't be executed (here because of account
|
||||
// locks), then its cost does not affect the cost tracker.
|
||||
//
|
||||
|
||||
let allocate_keypair = Keypair::new();
|
||||
let transactions = sanitize_transactions(vec![
|
||||
system_transaction::transfer(&mint_keypair, &pubkey, 2, genesis_config.hash()),
|
||||
// intentionally use a tx that has a different cost
|
||||
system_transaction::allocate(
|
||||
&mint_keypair,
|
||||
&allocate_keypair,
|
||||
genesis_config.hash(),
|
||||
1,
|
||||
),
|
||||
]);
|
||||
|
||||
let process_transactions_batch_output = BankingStage::process_and_record_transactions(
|
||||
&bank,
|
||||
&transactions,
|
||||
&recorder,
|
||||
0,
|
||||
None,
|
||||
&gossip_vote_sender,
|
||||
&qos_service,
|
||||
);
|
||||
|
||||
let ExecuteAndCommitTransactionsOutput {
|
||||
executed_with_successful_result_count,
|
||||
commit_transactions_result,
|
||||
retryable_transaction_indexes,
|
||||
..
|
||||
} = process_transactions_batch_output.execute_and_commit_transactions_output;
|
||||
assert_eq!(executed_with_successful_result_count, 1);
|
||||
assert!(commit_transactions_result.is_ok());
|
||||
assert_eq!(retryable_transaction_indexes, vec![1]);
|
||||
|
||||
assert_eq!(get_block_cost(), 2 * single_transfer_cost);
|
||||
assert_eq!(get_tx_count(), 2);
|
||||
|
||||
poh_recorder
|
||||
.lock()
|
||||
.unwrap()
|
||||
.is_exited
|
||||
.store(true, Ordering::Relaxed);
|
||||
let _ = poh_simulator.join();
|
||||
}
|
||||
Blockstore::destroy(ledger_path.path()).unwrap();
|
||||
}
|
||||
|
||||
fn simulate_poh(
|
||||
record_receiver: CrossbeamReceiver<Record>,
|
||||
poh_recorder: &Arc<Mutex<PohRecorder>>,
|
||||
|
@@ -10,13 +10,12 @@ use {
|
||||
crds::GossipRoute,
|
||||
crds_gossip_pull::CRDS_GOSSIP_PULL_CRDS_TIMEOUT_MS,
|
||||
crds_value::{CrdsData, CrdsValue},
|
||||
weighted_shuffle::{weighted_best, weighted_shuffle, WeightedShuffle},
|
||||
weighted_shuffle::WeightedShuffle,
|
||||
},
|
||||
solana_ledger::shred::Shred,
|
||||
solana_runtime::bank::Bank,
|
||||
solana_sdk::{
|
||||
clock::{Epoch, Slot},
|
||||
feature_set,
|
||||
pubkey::Pubkey,
|
||||
signature::Keypair,
|
||||
timing::timestamp,
|
||||
@@ -56,10 +55,6 @@ pub struct ClusterNodes<T> {
|
||||
// Reverse index from nodes pubkey to their index in self.nodes.
|
||||
index: HashMap<Pubkey, /*index:*/ usize>,
|
||||
weighted_shuffle: WeightedShuffle</*stake:*/ u64>,
|
||||
// Weights and indices for sampling peers. weighted_{shuffle,best} expect
|
||||
// weights >= 1. For backward compatibility we use max(1, stake) for
|
||||
// weights and exclude nodes with no contact-info.
|
||||
compat_index: Vec<(/*weight:*/ u64, /*index:*/ usize)>,
|
||||
_phantom: PhantomData<T>,
|
||||
}
|
||||
|
||||
@@ -92,14 +87,15 @@ impl Node {
|
||||
|
||||
impl<T> ClusterNodes<T> {
|
||||
pub(crate) fn num_peers(&self) -> usize {
|
||||
self.compat_index.len()
|
||||
self.nodes.len().saturating_sub(1)
|
||||
}
|
||||
|
||||
// A peer is considered live if they generated their contact info recently.
|
||||
pub(crate) fn num_peers_live(&self, now: u64) -> usize {
|
||||
self.compat_index
|
||||
self.nodes
|
||||
.iter()
|
||||
.filter_map(|(_, index)| self.nodes[*index].contact_info())
|
||||
.filter(|node| node.pubkey() != self.pubkey)
|
||||
.filter_map(|node| node.contact_info())
|
||||
.filter(|node| {
|
||||
let elapsed = if node.wallclock < now {
|
||||
now - node.wallclock
|
||||
@@ -120,20 +116,12 @@ impl ClusterNodes<BroadcastStage> {
|
||||
pub(crate) fn get_broadcast_addrs(
|
||||
&self,
|
||||
shred: &Shred,
|
||||
root_bank: &Bank,
|
||||
_root_bank: &Bank,
|
||||
fanout: usize,
|
||||
socket_addr_space: &SocketAddrSpace,
|
||||
) -> Vec<SocketAddr> {
|
||||
const MAX_CONTACT_INFO_AGE: Duration = Duration::from_secs(2 * 60);
|
||||
let shred_seed = shred.seed(self.pubkey, root_bank);
|
||||
if !enable_turbine_peers_shuffle_patch(shred.slot(), root_bank) {
|
||||
if let Some(node) = self.get_broadcast_peer(shred_seed) {
|
||||
if socket_addr_space.check(&node.tvu) {
|
||||
return vec![node.tvu];
|
||||
}
|
||||
}
|
||||
return Vec::default();
|
||||
}
|
||||
let shred_seed = shred.seed(self.pubkey);
|
||||
let mut rng = ChaChaRng::from_seed(shred_seed);
|
||||
let index = match self.weighted_shuffle.first(&mut rng) {
|
||||
None => return Vec::default(),
|
||||
@@ -175,20 +163,6 @@ impl ClusterNodes<BroadcastStage> {
|
||||
.filter(|addr| ContactInfo::is_valid_address(addr, socket_addr_space))
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Returns the root of turbine broadcast tree, which the leader sends the
|
||||
/// shred to.
|
||||
fn get_broadcast_peer(&self, shred_seed: [u8; 32]) -> Option<&ContactInfo> {
|
||||
if self.compat_index.is_empty() {
|
||||
None
|
||||
} else {
|
||||
let index = weighted_best(&self.compat_index, shred_seed);
|
||||
match &self.nodes[index].node {
|
||||
NodeId::ContactInfo(node) => Some(node),
|
||||
NodeId::Pubkey(_) => panic!("this should not happen!"),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ClusterNodes<RetransmitStage> {
|
||||
@@ -223,32 +197,17 @@ impl ClusterNodes<RetransmitStage> {
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn get_retransmit_peers(
|
||||
pub fn get_retransmit_peers(
|
||||
&self,
|
||||
slot_leader: Pubkey,
|
||||
shred: &Shred,
|
||||
root_bank: &Bank,
|
||||
_root_bank: &Bank,
|
||||
fanout: usize,
|
||||
) -> (
|
||||
Vec<&Node>, // neighbors
|
||||
Vec<&Node>, // children
|
||||
) {
|
||||
let shred_seed = shred.seed(slot_leader, root_bank);
|
||||
if !enable_turbine_peers_shuffle_patch(shred.slot(), root_bank) {
|
||||
return self.get_retransmit_peers_compat(shred_seed, fanout, slot_leader);
|
||||
}
|
||||
self.get_retransmit_peers_deterministic(shred_seed, fanout, slot_leader)
|
||||
}
|
||||
|
||||
pub fn get_retransmit_peers_deterministic(
|
||||
&self,
|
||||
shred_seed: [u8; 32],
|
||||
fanout: usize,
|
||||
slot_leader: Pubkey,
|
||||
) -> (
|
||||
Vec<&Node>, // neighbors
|
||||
Vec<&Node>, // children
|
||||
) {
|
||||
let shred_seed = shred.seed(slot_leader);
|
||||
let mut weighted_shuffle = self.weighted_shuffle.clone();
|
||||
// Exclude slot leader from list of nodes.
|
||||
if slot_leader == self.pubkey {
|
||||
@@ -271,46 +230,6 @@ impl ClusterNodes<RetransmitStage> {
|
||||
debug_assert_eq!(neighbors[self_index % fanout].pubkey(), self.pubkey);
|
||||
(neighbors, children)
|
||||
}
|
||||
|
||||
pub fn get_retransmit_peers_compat(
|
||||
&self,
|
||||
shred_seed: [u8; 32],
|
||||
fanout: usize,
|
||||
slot_leader: Pubkey,
|
||||
) -> (
|
||||
Vec<&Node>, // neighbors
|
||||
Vec<&Node>, // children
|
||||
) {
|
||||
// Exclude leader from list of nodes.
|
||||
let (weights, index): (Vec<u64>, Vec<usize>) = if slot_leader == self.pubkey {
|
||||
error!("retransmit from slot leader: {}", slot_leader);
|
||||
self.compat_index.iter().copied().unzip()
|
||||
} else {
|
||||
self.compat_index
|
||||
.iter()
|
||||
.filter(|(_, i)| self.nodes[*i].pubkey() != slot_leader)
|
||||
.copied()
|
||||
.unzip()
|
||||
};
|
||||
let index: Vec<_> = {
|
||||
let shuffle = weighted_shuffle(weights.into_iter(), shred_seed);
|
||||
shuffle.into_iter().map(|i| index[i]).collect()
|
||||
};
|
||||
let self_index = index
|
||||
.iter()
|
||||
.position(|i| self.nodes[*i].pubkey() == self.pubkey)
|
||||
.unwrap();
|
||||
let (neighbors, children) = compute_retransmit_peers(fanout, self_index, &index);
|
||||
// Assert that the node itself is included in the set of neighbors, at
|
||||
// the right offset.
|
||||
debug_assert_eq!(
|
||||
self.nodes[neighbors[self_index % fanout]].pubkey(),
|
||||
self.pubkey
|
||||
);
|
||||
let neighbors = neighbors.into_iter().map(|i| &self.nodes[i]).collect();
|
||||
let children = children.into_iter().map(|i| &self.nodes[i]).collect();
|
||||
(neighbors, children)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_cluster_nodes<T: 'static>(
|
||||
@@ -330,26 +249,11 @@ pub fn new_cluster_nodes<T: 'static>(
|
||||
if broadcast {
|
||||
weighted_shuffle.remove_index(index[&self_pubkey]);
|
||||
}
|
||||
// For backward compatibility:
|
||||
// * nodes which do not have contact-info are excluded.
|
||||
// * stakes are floored at 1.
|
||||
// The sorting key here should be equivalent to
|
||||
// solana_gossip::deprecated::sorted_stakes_with_index.
|
||||
// Leader itself is excluded when sampling broadcast peers.
|
||||
let compat_index = nodes
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter(|(_, node)| node.contact_info().is_some())
|
||||
.filter(|(_, node)| !broadcast || node.pubkey() != self_pubkey)
|
||||
.sorted_by_key(|(_, node)| Reverse((node.stake.max(1), node.pubkey())))
|
||||
.map(|(index, node)| (node.stake.max(1), index))
|
||||
.collect();
|
||||
ClusterNodes {
|
||||
pubkey: self_pubkey,
|
||||
nodes,
|
||||
index,
|
||||
weighted_shuffle,
|
||||
compat_index,
|
||||
_phantom: PhantomData::default(),
|
||||
}
|
||||
}
|
||||
@@ -387,21 +291,6 @@ fn get_nodes(cluster_info: &ClusterInfo, stakes: &HashMap<Pubkey, u64>) -> Vec<N
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn enable_turbine_peers_shuffle_patch(shred_slot: Slot, root_bank: &Bank) -> bool {
|
||||
let feature_slot = root_bank
|
||||
.feature_set
|
||||
.activated_slot(&feature_set::turbine_peers_shuffle::id());
|
||||
match feature_slot {
|
||||
None => false,
|
||||
Some(feature_slot) => {
|
||||
let epoch_schedule = root_bank.epoch_schedule();
|
||||
let feature_epoch = epoch_schedule.get_epoch(feature_slot);
|
||||
let shred_epoch = epoch_schedule.get_epoch(shred_slot);
|
||||
feature_epoch < shred_epoch
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> ClusterNodesCache<T> {
|
||||
pub fn new(
|
||||
// Capacity of underlying LRU-cache in terms of number of epochs.
|
||||
@@ -528,42 +417,16 @@ pub fn make_test_cluster<R: Rng>(
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use {
|
||||
super::*,
|
||||
solana_gossip::deprecated::{
|
||||
shuffle_peers_and_index, sorted_retransmit_peers_and_stakes, sorted_stakes_with_index,
|
||||
},
|
||||
};
|
||||
|
||||
// Legacy methods copied for testing backward compatibility.
|
||||
|
||||
fn get_broadcast_peers(
|
||||
cluster_info: &ClusterInfo,
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> (Vec<ContactInfo>, Vec<(u64, usize)>) {
|
||||
let mut peers = cluster_info.tvu_peers();
|
||||
let peers_and_stakes = stake_weight_peers(&mut peers, stakes);
|
||||
(peers, peers_and_stakes)
|
||||
}
|
||||
|
||||
fn stake_weight_peers(
|
||||
peers: &mut Vec<ContactInfo>,
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> Vec<(u64, usize)> {
|
||||
peers.dedup();
|
||||
sorted_stakes_with_index(peers, stakes)
|
||||
}
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_cluster_nodes_retransmit() {
|
||||
let mut rng = rand::thread_rng();
|
||||
let (nodes, stakes, cluster_info) = make_test_cluster(&mut rng, 1_000, None);
|
||||
let this_node = cluster_info.my_contact_info();
|
||||
// ClusterInfo::tvu_peers excludes the node itself.
|
||||
assert_eq!(cluster_info.tvu_peers().len(), nodes.len() - 1);
|
||||
let cluster_nodes = new_cluster_nodes::<RetransmitStage>(&cluster_info, &stakes);
|
||||
// All nodes with contact-info should be in the index.
|
||||
assert_eq!(cluster_nodes.compat_index.len(), nodes.len());
|
||||
// Staked nodes with no contact-info should be included.
|
||||
assert!(cluster_nodes.nodes.len() > nodes.len());
|
||||
// Assert that all nodes keep their contact-info.
|
||||
@@ -583,56 +446,6 @@ mod tests {
|
||||
}
|
||||
}
|
||||
}
|
||||
let (peers, stakes_and_index) =
|
||||
sorted_retransmit_peers_and_stakes(&cluster_info, Some(&stakes));
|
||||
assert_eq!(stakes_and_index.len(), peers.len());
|
||||
assert_eq!(cluster_nodes.compat_index.len(), peers.len());
|
||||
for (i, node) in cluster_nodes
|
||||
.compat_index
|
||||
.iter()
|
||||
.map(|(_, i)| &cluster_nodes.nodes[*i])
|
||||
.enumerate()
|
||||
{
|
||||
let (stake, index) = stakes_and_index[i];
|
||||
// Wallclock may be update by ClusterInfo::push_self.
|
||||
if node.pubkey() == this_node.id {
|
||||
assert_eq!(this_node.id, peers[index].id)
|
||||
} else {
|
||||
assert_eq!(node.contact_info().unwrap(), &peers[index]);
|
||||
}
|
||||
assert_eq!(node.stake.max(1), stake);
|
||||
}
|
||||
let slot_leader = nodes[1..].choose(&mut rng).unwrap().id;
|
||||
// Remove slot leader from peers indices.
|
||||
let stakes_and_index: Vec<_> = stakes_and_index
|
||||
.into_iter()
|
||||
.filter(|(_stake, index)| peers[*index].id != slot_leader)
|
||||
.collect();
|
||||
assert_eq!(peers.len(), stakes_and_index.len() + 1);
|
||||
let mut shred_seed = [0u8; 32];
|
||||
rng.fill(&mut shred_seed[..]);
|
||||
let (self_index, shuffled_peers_and_stakes) =
|
||||
shuffle_peers_and_index(&this_node.id, &peers, &stakes_and_index, shred_seed);
|
||||
let shuffled_index: Vec<_> = shuffled_peers_and_stakes
|
||||
.into_iter()
|
||||
.map(|(_, index)| index)
|
||||
.collect();
|
||||
assert_eq!(this_node.id, peers[shuffled_index[self_index]].id);
|
||||
for fanout in 1..200 {
|
||||
let (neighbors_indices, children_indices) =
|
||||
compute_retransmit_peers(fanout, self_index, &shuffled_index);
|
||||
let (neighbors, children) =
|
||||
cluster_nodes.get_retransmit_peers_compat(shred_seed, fanout, slot_leader);
|
||||
assert_eq!(children.len(), children_indices.len());
|
||||
for (node, index) in children.into_iter().zip(children_indices) {
|
||||
assert_eq!(*node.contact_info().unwrap(), peers[index]);
|
||||
}
|
||||
assert_eq!(neighbors.len(), neighbors_indices.len());
|
||||
assert_eq!(neighbors[0].pubkey(), peers[neighbors_indices[0]].id);
|
||||
for (node, index) in neighbors.into_iter().zip(neighbors_indices).skip(1) {
|
||||
assert_eq!(*node.contact_info().unwrap(), peers[index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -644,7 +457,6 @@ mod tests {
|
||||
let cluster_nodes = ClusterNodes::<BroadcastStage>::new(&cluster_info, &stakes);
|
||||
// All nodes with contact-info should be in the index.
|
||||
// Excluding this node itself.
|
||||
assert_eq!(cluster_nodes.compat_index.len() + 1, nodes.len());
|
||||
// Staked nodes with no contact-info should be included.
|
||||
assert!(cluster_nodes.nodes.len() > nodes.len());
|
||||
// Assert that all nodes keep their contact-info.
|
||||
@@ -664,25 +476,5 @@ mod tests {
|
||||
}
|
||||
}
|
||||
}
|
||||
let (peers, peers_and_stakes) = get_broadcast_peers(&cluster_info, Some(&stakes));
|
||||
assert_eq!(peers_and_stakes.len(), peers.len());
|
||||
assert_eq!(cluster_nodes.compat_index.len(), peers.len());
|
||||
for (i, node) in cluster_nodes
|
||||
.compat_index
|
||||
.iter()
|
||||
.map(|(_, i)| &cluster_nodes.nodes[*i])
|
||||
.enumerate()
|
||||
{
|
||||
let (stake, index) = peers_and_stakes[i];
|
||||
assert_eq!(node.contact_info().unwrap(), &peers[index]);
|
||||
assert_eq!(node.stake.max(1), stake);
|
||||
}
|
||||
for _ in 0..100 {
|
||||
let mut shred_seed = [0u8; 32];
|
||||
rng.fill(&mut shred_seed[..]);
|
||||
let index = weighted_best(&peers_and_stakes, shred_seed);
|
||||
let peer = cluster_nodes.get_broadcast_peer(shred_seed).unwrap();
|
||||
assert_eq!(*peer, peers[index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -133,7 +133,7 @@ impl QosService {
|
||||
let mut num_included = 0;
|
||||
let select_results = transactions
|
||||
.zip(transactions_costs)
|
||||
.map(|(tx, cost)| match cost_tracker.try_add(tx, cost) {
|
||||
.map(|(tx, cost)| match cost_tracker.try_add(cost) {
|
||||
Ok(current_block_cost) => {
|
||||
debug!("slot {:?}, transaction {:?}, cost {:?}, fit into current block, current block cost {}", bank.slot(), tx, cost, current_block_cost);
|
||||
self.metrics.stats.selected_txs_count.fetch_add(1, Ordering::Relaxed);
|
||||
@@ -170,6 +170,35 @@ impl QosService {
|
||||
(select_results, num_included)
|
||||
}
|
||||
|
||||
/// Update the transaction cost in the cost_tracker with the real cost for
|
||||
/// transactions that were executed successfully;
|
||||
/// Otherwise remove the cost from the cost tracker, therefore preventing cost_tracker
|
||||
/// being inflated with unsuccessfully executed transactions.
|
||||
pub fn update_or_remove_transaction_costs<'a>(
|
||||
transaction_costs: impl Iterator<Item = &'a TransactionCost>,
|
||||
transaction_qos_results: impl Iterator<Item = &'a transaction::Result<()>>,
|
||||
retryable_transaction_indexes: &[usize],
|
||||
bank: &Arc<Bank>,
|
||||
) {
|
||||
let mut cost_tracker = bank.write_cost_tracker().unwrap();
|
||||
transaction_costs
|
||||
.zip(transaction_qos_results)
|
||||
.enumerate()
|
||||
.for_each(|(index, (tx_cost, qos_inclusion_result))| {
|
||||
// Only transactions that the qos service incuded have been added to the
|
||||
// cost tracker.
|
||||
if qos_inclusion_result.is_ok() && retryable_transaction_indexes.contains(&index) {
|
||||
cost_tracker.remove(tx_cost);
|
||||
} else {
|
||||
// TODO: Update the cost tracker with the actual execution compute units.
|
||||
// Will have to plumb it in next; For now, keep estimated costs.
|
||||
//
|
||||
// let actual_execution_cost = 0;
|
||||
// cost_tracker.update_execution_cost(tx_cost, actual_execution_cost);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// metrics are reported by bank slot
|
||||
pub fn report_metrics(&self, bank: Arc<Bank>) {
|
||||
self.report_sender
|
||||
|
@@ -525,85 +525,7 @@ impl RetransmitStage {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use {
|
||||
super::*,
|
||||
solana_gossip::contact_info::ContactInfo,
|
||||
solana_ledger::{
|
||||
blockstore_processor::{test_process_blockstore, ProcessOptions},
|
||||
create_new_tmp_ledger,
|
||||
genesis_utils::{create_genesis_config, GenesisConfigInfo},
|
||||
},
|
||||
solana_net_utils::find_available_port_in_range,
|
||||
solana_sdk::signature::Keypair,
|
||||
solana_streamer::socket::SocketAddrSpace,
|
||||
std::net::{IpAddr, Ipv4Addr},
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_skip_repair() {
|
||||
solana_logger::setup();
|
||||
let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(123);
|
||||
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
|
||||
let blockstore = Blockstore::open(&ledger_path).unwrap();
|
||||
let opts = ProcessOptions {
|
||||
accounts_db_test_hash_calculation: true,
|
||||
full_leader_cache: true,
|
||||
..ProcessOptions::default()
|
||||
};
|
||||
let (bank_forks, leader_schedule_cache) =
|
||||
test_process_blockstore(&genesis_config, &blockstore, opts);
|
||||
let leader_schedule_cache = Arc::new(leader_schedule_cache);
|
||||
let bank_forks = Arc::new(RwLock::new(bank_forks));
|
||||
|
||||
let mut me = ContactInfo::new_localhost(&solana_sdk::pubkey::new_rand(), 0);
|
||||
let ip_addr = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
|
||||
let port = find_available_port_in_range(ip_addr, (8000, 10000)).unwrap();
|
||||
let me_retransmit = UdpSocket::bind(format!("127.0.0.1:{}", port)).unwrap();
|
||||
// need to make sure tvu and tpu are valid addresses
|
||||
me.tvu_forwards = me_retransmit.local_addr().unwrap();
|
||||
|
||||
let port = find_available_port_in_range(ip_addr, (8000, 10000)).unwrap();
|
||||
me.tvu = UdpSocket::bind(format!("127.0.0.1:{}", port))
|
||||
.unwrap()
|
||||
.local_addr()
|
||||
.unwrap();
|
||||
// This fixes the order of nodes returned by shuffle_peers_and_index,
|
||||
// and makes turbine retransmit tree deterministic for the purpose of
|
||||
// the test.
|
||||
let other = std::iter::repeat_with(solana_sdk::pubkey::new_rand)
|
||||
.find(|pk| me.id < *pk)
|
||||
.unwrap();
|
||||
let other = ContactInfo::new_localhost(&other, 0);
|
||||
let cluster_info = ClusterInfo::new(
|
||||
other,
|
||||
Arc::new(Keypair::new()),
|
||||
SocketAddrSpace::Unspecified,
|
||||
);
|
||||
cluster_info.insert_info(me);
|
||||
|
||||
let retransmit_socket = Arc::new(vec![UdpSocket::bind("0.0.0.0:0").unwrap()]);
|
||||
let cluster_info = Arc::new(cluster_info);
|
||||
|
||||
let (retransmit_sender, retransmit_receiver) = unbounded();
|
||||
let _retransmit_sender = retransmit_sender.clone();
|
||||
let _t_retransmit = retransmitter(
|
||||
retransmit_socket,
|
||||
bank_forks,
|
||||
leader_schedule_cache,
|
||||
cluster_info,
|
||||
retransmit_receiver,
|
||||
Arc::default(), // MaxSlots
|
||||
None,
|
||||
);
|
||||
|
||||
let shred = Shred::new_from_data(0, 0, 0, None, true, true, 0, 0x20, 0);
|
||||
// it should send this over the sockets.
|
||||
retransmit_sender.send(vec![shred]).unwrap();
|
||||
let mut packet_batch = PacketBatch::new(vec![]);
|
||||
solana_streamer::packet::recv_from(&mut packet_batch, &me_retransmit, 1).unwrap();
|
||||
assert_eq!(packet_batch.packets.len(), 1);
|
||||
assert!(!packet_batch.packets[0].meta.repair());
|
||||
}
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_already_received() {
|
||||
|
@@ -17,7 +17,7 @@ use {
|
||||
solana_gossip::{
|
||||
cluster_info::{ClusterInfo, ClusterInfoError},
|
||||
contact_info::ContactInfo,
|
||||
weighted_shuffle::{weighted_best, weighted_shuffle},
|
||||
weighted_shuffle::WeightedShuffle,
|
||||
},
|
||||
solana_ledger::{
|
||||
ancestor_iterator::{AncestorIterator, AncestorIteratorWithHash},
|
||||
@@ -525,16 +525,17 @@ impl ServeRepair {
|
||||
if repair_peers.is_empty() {
|
||||
return Err(ClusterInfoError::NoPeers.into());
|
||||
}
|
||||
let weights = cluster_slots.compute_weights_exclude_nonfrozen(slot, &repair_peers);
|
||||
let mut sampled_validators = weighted_shuffle(
|
||||
weights.into_iter().map(|(stake, _i)| stake),
|
||||
solana_sdk::pubkey::new_rand().to_bytes(),
|
||||
);
|
||||
sampled_validators.truncate(ANCESTOR_HASH_REPAIR_SAMPLE_SIZE);
|
||||
Ok(sampled_validators
|
||||
let (weights, index): (Vec<_>, Vec<_>) = cluster_slots
|
||||
.compute_weights_exclude_nonfrozen(slot, &repair_peers)
|
||||
.into_iter()
|
||||
.unzip();
|
||||
let peers = WeightedShuffle::new("repair_request_ancestor_hashes", &weights)
|
||||
.shuffle(&mut rand::thread_rng())
|
||||
.take(ANCESTOR_HASH_REPAIR_SAMPLE_SIZE)
|
||||
.map(|i| index[i])
|
||||
.map(|i| (repair_peers[i].id, repair_peers[i].serve_repair))
|
||||
.collect())
|
||||
.collect();
|
||||
Ok(peers)
|
||||
}
|
||||
|
||||
pub fn repair_request_duplicate_compute_best_peer(
|
||||
@@ -547,8 +548,12 @@ impl ServeRepair {
|
||||
if repair_peers.is_empty() {
|
||||
return Err(ClusterInfoError::NoPeers.into());
|
||||
}
|
||||
let weights = cluster_slots.compute_weights_exclude_nonfrozen(slot, &repair_peers);
|
||||
let n = weighted_best(&weights, solana_sdk::pubkey::new_rand().to_bytes());
|
||||
let (weights, index): (Vec<_>, Vec<_>) = cluster_slots
|
||||
.compute_weights_exclude_nonfrozen(slot, &repair_peers)
|
||||
.into_iter()
|
||||
.unzip();
|
||||
let k = WeightedIndex::new(weights)?.sample(&mut rand::thread_rng());
|
||||
let n = index[k];
|
||||
Ok((repair_peers[n].id, repair_peers[n].serve_repair))
|
||||
}
|
||||
|
||||
|
@@ -40,7 +40,8 @@ use {
|
||||
},
|
||||
solana_runtime::{
|
||||
accounts_background_service::{
|
||||
AbsRequestHandler, AbsRequestSender, AccountsBackgroundService, SnapshotRequestHandler,
|
||||
AbsRequestHandler, AbsRequestSender, AccountsBackgroundService, DroppedSlotsReceiver,
|
||||
SnapshotRequestHandler,
|
||||
},
|
||||
accounts_db::AccountShrinkThreshold,
|
||||
bank_forks::BankForks,
|
||||
@@ -57,7 +58,6 @@ use {
|
||||
},
|
||||
solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Keypair},
|
||||
std::{
|
||||
boxed::Box,
|
||||
collections::HashSet,
|
||||
net::UdpSocket,
|
||||
sync::{atomic::AtomicBool, Arc, Mutex, RwLock},
|
||||
@@ -148,6 +148,7 @@ impl Tvu {
|
||||
last_full_snapshot_slot: Option<Slot>,
|
||||
block_metadata_notifier: Option<BlockMetadataNotifierLock>,
|
||||
wait_to_vote_slot: Option<Slot>,
|
||||
pruned_banks_receiver: DroppedSlotsReceiver,
|
||||
) -> Self {
|
||||
let TvuSockets {
|
||||
repair: repair_socket,
|
||||
@@ -248,23 +249,6 @@ impl Tvu {
|
||||
}
|
||||
};
|
||||
|
||||
let (pruned_banks_sender, pruned_banks_receiver) = unbounded();
|
||||
|
||||
// Before replay starts, set the callbacks in each of the banks in BankForks
|
||||
// Note after this callback is created, only the AccountsBackgroundService should be calling
|
||||
// AccountsDb::purge_slot() to clean up dropped banks.
|
||||
let callback = bank_forks
|
||||
.read()
|
||||
.unwrap()
|
||||
.root_bank()
|
||||
.rc
|
||||
.accounts
|
||||
.accounts_db
|
||||
.create_drop_bank_callback(pruned_banks_sender);
|
||||
for bank in bank_forks.read().unwrap().banks().values() {
|
||||
bank.set_callback(Some(Box::new(callback.clone())));
|
||||
}
|
||||
|
||||
let accounts_background_request_sender = AbsRequestSender::new(snapshot_request_sender);
|
||||
|
||||
let accounts_background_request_handler = AbsRequestHandler {
|
||||
@@ -465,6 +449,7 @@ pub mod tests {
|
||||
let tower = Tower::default();
|
||||
let accounts_package_channel = unbounded();
|
||||
let max_complete_transaction_status_slot = Arc::new(AtomicU64::default());
|
||||
let (_pruned_banks_sender, pruned_banks_receiver) = unbounded();
|
||||
let tvu = Tvu::new(
|
||||
&vote_keypair.pubkey(),
|
||||
Arc::new(RwLock::new(vec![Arc::new(vote_keypair)])),
|
||||
@@ -514,6 +499,7 @@ pub mod tests {
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
pruned_banks_receiver,
|
||||
);
|
||||
exit.store(true, Ordering::Relaxed);
|
||||
tvu.join().unwrap();
|
||||
|
@@ -67,6 +67,7 @@ use {
|
||||
transaction_status_service::TransactionStatusService,
|
||||
},
|
||||
solana_runtime::{
|
||||
accounts_background_service::DroppedSlotsReceiver,
|
||||
accounts_db::{AccountShrinkThreshold, AccountsDbConfig},
|
||||
accounts_index::AccountSecondaryIndexes,
|
||||
accounts_update_notifier_interface::AccountsUpdateNotifier,
|
||||
@@ -503,6 +504,7 @@ impl Validator {
|
||||
},
|
||||
blockstore_process_options,
|
||||
blockstore_root_scan,
|
||||
pruned_banks_receiver,
|
||||
) = load_blockstore(
|
||||
config,
|
||||
ledger_path,
|
||||
@@ -522,6 +524,7 @@ impl Validator {
|
||||
config.snapshot_config.as_ref(),
|
||||
accounts_package_channel.0.clone(),
|
||||
blockstore_root_scan,
|
||||
pruned_banks_receiver.clone(),
|
||||
);
|
||||
let last_full_snapshot_slot =
|
||||
last_full_snapshot_slot.or_else(|| starting_snapshot_hashes.map(|x| x.full.hash.0));
|
||||
@@ -927,6 +930,7 @@ impl Validator {
|
||||
last_full_snapshot_slot,
|
||||
block_metadata_notifier,
|
||||
config.wait_to_vote_slot,
|
||||
pruned_banks_receiver,
|
||||
);
|
||||
|
||||
let tpu = Tpu::new(
|
||||
@@ -1261,6 +1265,7 @@ fn load_blockstore(
|
||||
TransactionHistoryServices,
|
||||
blockstore_processor::ProcessOptions,
|
||||
BlockstoreRootScan,
|
||||
DroppedSlotsReceiver,
|
||||
) {
|
||||
info!("loading ledger from {:?}...", ledger_path);
|
||||
*start_progress.write().unwrap() = ValidatorStartProgress::LoadingLedger;
|
||||
@@ -1339,19 +1344,23 @@ fn load_blockstore(
|
||||
TransactionHistoryServices::default()
|
||||
};
|
||||
|
||||
let (mut bank_forks, mut leader_schedule_cache, starting_snapshot_hashes) =
|
||||
bank_forks_utils::load_bank_forks(
|
||||
&genesis_config,
|
||||
&blockstore,
|
||||
config.account_paths.clone(),
|
||||
config.account_shrink_paths.clone(),
|
||||
config.snapshot_config.as_ref(),
|
||||
&process_options,
|
||||
transaction_history_services
|
||||
.cache_block_meta_sender
|
||||
.as_ref(),
|
||||
accounts_update_notifier,
|
||||
);
|
||||
let (
|
||||
mut bank_forks,
|
||||
mut leader_schedule_cache,
|
||||
starting_snapshot_hashes,
|
||||
pruned_banks_receiver,
|
||||
) = bank_forks_utils::load_bank_forks(
|
||||
&genesis_config,
|
||||
&blockstore,
|
||||
config.account_paths.clone(),
|
||||
config.account_shrink_paths.clone(),
|
||||
config.snapshot_config.as_ref(),
|
||||
&process_options,
|
||||
transaction_history_services
|
||||
.cache_block_meta_sender
|
||||
.as_ref(),
|
||||
accounts_update_notifier,
|
||||
);
|
||||
|
||||
leader_schedule_cache.set_fixed_leader_schedule(config.fixed_leader_schedule.clone());
|
||||
bank_forks.set_snapshot_config(config.snapshot_config.clone());
|
||||
@@ -1373,9 +1382,11 @@ fn load_blockstore(
|
||||
transaction_history_services,
|
||||
process_options,
|
||||
blockstore_root_scan,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
fn process_blockstore(
|
||||
blockstore: &Blockstore,
|
||||
bank_forks: &mut BankForks,
|
||||
@@ -1386,6 +1397,7 @@ fn process_blockstore(
|
||||
snapshot_config: Option<&SnapshotConfig>,
|
||||
accounts_package_sender: AccountsPackageSender,
|
||||
blockstore_root_scan: BlockstoreRootScan,
|
||||
pruned_banks_receiver: DroppedSlotsReceiver,
|
||||
) -> Option<Slot> {
|
||||
let last_full_snapshot_slot = blockstore_processor::process_blockstore_from_root(
|
||||
blockstore,
|
||||
@@ -1396,6 +1408,7 @@ fn process_blockstore(
|
||||
cache_block_meta_sender,
|
||||
snapshot_config,
|
||||
accounts_package_sender,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
.unwrap_or_else(|err| {
|
||||
error!("Failed to load ledger: {:?}", err);
|
||||
|
@@ -179,6 +179,7 @@ module.exports = {
|
||||
"proposals/block-confirmation",
|
||||
"proposals/cluster-test-framework",
|
||||
"proposals/embedding-move",
|
||||
"proposals/handle-duplicate-block",
|
||||
"proposals/interchain-transaction-verification",
|
||||
"proposals/ledger-replication-to-implement",
|
||||
"proposals/optimistic-confirmation-and-slashing",
|
||||
|
@@ -33,6 +33,14 @@ solana airdrop 1 <RECIPIENT_ACCOUNT_ADDRESS> --url https://api.devnet.solana.com
|
||||
where you replace the text `<RECIPIENT_ACCOUNT_ADDRESS>` with your base58-encoded
|
||||
public key/wallet address.
|
||||
|
||||
A response with the signature of the transaction will be returned. If the balance
|
||||
of the address does not change by the expected amount, run the following command
|
||||
for more information on what potentially went wrong:
|
||||
|
||||
```bash
|
||||
solana confirm -v <TRANSACTION_SIGNATURE>
|
||||
```
|
||||
|
||||
#### Check your balance
|
||||
|
||||
Confirm the airdrop was successful by checking the account's balance.
|
||||
|
@@ -3059,7 +3059,7 @@ curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d '
|
||||
Result:
|
||||
|
||||
```json
|
||||
{ "jsonrpc": "2.0", "result": { "solana-core": "1.10.6" }, "id": 1 }
|
||||
{ "jsonrpc": "2.0", "result": { "solana-core": "1.10.8" }, "id": 1 }
|
||||
```
|
||||
|
||||
### getVoteAccounts
|
||||
|
@@ -1,3 +1,7 @@
|
||||
---
|
||||
title: Handle Duplicate Block
|
||||
---
|
||||
|
||||
# Leader Duplicate Block Slashing
|
||||
|
||||
This design describes how the cluster slashes leaders that produce duplicate
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-dos"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -15,18 +15,18 @@ clap = {version = "3.1.5", features = ["derive", "cargo"]}
|
||||
log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
serde = "1.0.136"
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
||||
[dev-dependencies]
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.6" }
|
||||
solana-local-cluster = { path = "../local-cluster", version = "=1.10.8" }
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-download-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Download Utils"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -14,8 +14,8 @@ console = "0.15.0"
|
||||
indicatif = "0.16.2"
|
||||
log = "0.4.14"
|
||||
reqwest = { version = "0.11.10", default-features = false, features = ["blocking", "rustls-tls", "json"] }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-entry"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Entry"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -18,16 +18,16 @@ log = "0.4.11"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
serde = "1.0.136"
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-merkle-tree = { path = "../merkle-tree", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-merkle-tree = { path = "../merkle-tree", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[dev-dependencies]
|
||||
matches = "0.1.9"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-faucet"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Faucet"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -17,12 +17,12 @@ crossbeam-channel = "0.5"
|
||||
log = "0.4.14"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] }
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-frozen-abi"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Frozen ABI"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -18,7 +18,7 @@ serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
serde_bytes = "0.11"
|
||||
sha2 = "0.10.2"
|
||||
solana-frozen-abi-macro = { path = "macro", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "macro", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
|
||||
[target.'cfg(not(target_arch = "bpf"))'.dependencies]
|
||||
@@ -27,7 +27,7 @@ im = { version = "15.0.0", features = ["rayon", "serde"] }
|
||||
memmap2 = "0.5.3"
|
||||
|
||||
[target.'cfg(not(target_arch = "bpf"))'.dev-dependencies]
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[build-dependencies]
|
||||
rustc_version = "0.4"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-frozen-abi-macro"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Frozen ABI Macro"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-genesis-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Genesis Utils"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,9 +10,9 @@ documentation = "https://docs.rs/solana-download-utils"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-download-utils = { path = "../download-utils", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-download-utils = { path = "../download-utils", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-genesis"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -15,16 +15,16 @@ clap = "2.33.1"
|
||||
serde = "1.0.136"
|
||||
serde_json = "1.0.79"
|
||||
serde_yaml = "0.8.23"
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
tempfile = "3.3.0"
|
||||
|
||||
[[bin]]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-geyser-plugin-interface"
|
||||
description = "The Solana Geyser plugin interface."
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -11,8 +11,8 @@ documentation = "https://docs.rs/solana-geyser-plugin-interface"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4.11"
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
thiserror = "1.0.30"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-geyser-plugin-manager"
|
||||
description = "The Solana Geyser plugin manager."
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -16,13 +16,13 @@ json5 = "0.4.1"
|
||||
libloading = "0.7.3"
|
||||
log = "0.4.11"
|
||||
serde_json = "1.0.79"
|
||||
solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-geyser-plugin-interface = { path = "../geyser-plugin-interface", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-rpc = { path = "../rpc", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
thiserror = "1.0.30"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-gossip"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -18,7 +18,7 @@ flate2 = "1.0"
|
||||
indexmap = { version = "1.8", features = ["rayon"] }
|
||||
itertools = "0.10.3"
|
||||
log = "0.4.14"
|
||||
lru = "0.7.3"
|
||||
lru = "0.7.5"
|
||||
matches = "0.1.9"
|
||||
num-traits = "0.2"
|
||||
rand = "0.7.0"
|
||||
@@ -27,24 +27,24 @@ rayon = "1.5.1"
|
||||
serde = "1.0.136"
|
||||
serde_bytes = "0.11"
|
||||
serde_derive = "1.0.103"
|
||||
solana-bloom = { path = "../bloom", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-bloom = { path = "../bloom", version = "=1.10.8" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-net-utils = { path = "../net-utils", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
|
||||
[dev-dependencies]
|
||||
|
@@ -5,7 +5,7 @@ extern crate test;
|
||||
use {
|
||||
rand::{Rng, SeedableRng},
|
||||
rand_chacha::ChaChaRng,
|
||||
solana_gossip::weighted_shuffle::{weighted_shuffle, WeightedShuffle},
|
||||
solana_gossip::weighted_shuffle::WeightedShuffle,
|
||||
std::iter::repeat_with,
|
||||
test::Bencher,
|
||||
};
|
||||
@@ -15,18 +15,7 @@ fn make_weights<R: Rng>(rng: &mut R) -> Vec<u64> {
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_weighted_shuffle_old(bencher: &mut Bencher) {
|
||||
let mut seed = [0u8; 32];
|
||||
let mut rng = rand::thread_rng();
|
||||
let weights = make_weights(&mut rng);
|
||||
bencher.iter(|| {
|
||||
rng.fill(&mut seed[..]);
|
||||
weighted_shuffle::<u64, &u64, std::slice::Iter<'_, u64>>(weights.iter(), seed);
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_weighted_shuffle_new(bencher: &mut Bencher) {
|
||||
fn bench_weighted_shuffle(bencher: &mut Bencher) {
|
||||
let mut seed = [0u8; 32];
|
||||
let mut rng = rand::thread_rng();
|
||||
let weights = make_weights(&mut rng);
|
||||
|
@@ -449,46 +449,28 @@ pub(crate) fn submit_gossip_stats(
|
||||
i64
|
||||
),
|
||||
);
|
||||
let counts: Vec<_> = crds_stats
|
||||
.pull
|
||||
.counts
|
||||
.iter()
|
||||
.zip(crds_stats.push.counts.iter())
|
||||
.map(|(a, b)| a + b)
|
||||
.collect();
|
||||
datapoint_info!(
|
||||
"cluster_info_crds_stats",
|
||||
("ContactInfo", counts[0], i64),
|
||||
("ContactInfo-push", crds_stats.push.counts[0], i64),
|
||||
("ContactInfo-pull", crds_stats.pull.counts[0], i64),
|
||||
("Vote", counts[1], i64),
|
||||
("Vote-push", crds_stats.push.counts[1], i64),
|
||||
("Vote-pull", crds_stats.pull.counts[1], i64),
|
||||
("LowestSlot", counts[2], i64),
|
||||
("LowestSlot-push", crds_stats.push.counts[2], i64),
|
||||
("LowestSlot-pull", crds_stats.pull.counts[2], i64),
|
||||
("SnapshotHashes", counts[3], i64),
|
||||
("SnapshotHashes-push", crds_stats.push.counts[3], i64),
|
||||
("SnapshotHashes-pull", crds_stats.pull.counts[3], i64),
|
||||
("AccountsHashes", counts[4], i64),
|
||||
("AccountsHashes-push", crds_stats.push.counts[4], i64),
|
||||
("AccountsHashes-pull", crds_stats.pull.counts[4], i64),
|
||||
("EpochSlots", counts[5], i64),
|
||||
("EpochSlots-push", crds_stats.push.counts[5], i64),
|
||||
("EpochSlots-pull", crds_stats.pull.counts[5], i64),
|
||||
("LegacyVersion", counts[6], i64),
|
||||
("LegacyVersion-push", crds_stats.push.counts[6], i64),
|
||||
("LegacyVersion-pull", crds_stats.pull.counts[6], i64),
|
||||
("Version", counts[7], i64),
|
||||
("Version-push", crds_stats.push.counts[7], i64),
|
||||
("Version-pull", crds_stats.pull.counts[7], i64),
|
||||
("NodeInstance", counts[8], i64),
|
||||
("NodeInstance-push", crds_stats.push.counts[8], i64),
|
||||
("NodeInstance-pull", crds_stats.pull.counts[8], i64),
|
||||
("DuplicateShred", counts[9], i64),
|
||||
("DuplicateShred-push", crds_stats.push.counts[9], i64),
|
||||
("DuplicateShred-pull", crds_stats.pull.counts[9], i64),
|
||||
("IncrementalSnapshotHashes", counts[10], i64),
|
||||
(
|
||||
"IncrementalSnapshotHashes-push",
|
||||
crds_stats.push.counts[10],
|
||||
@@ -499,7 +481,6 @@ pub(crate) fn submit_gossip_stats(
|
||||
crds_stats.pull.counts[10],
|
||||
i64
|
||||
),
|
||||
("all", counts.iter().sum::<usize>(), i64),
|
||||
(
|
||||
"all-push",
|
||||
crds_stats.push.counts.iter().sum::<usize>(),
|
||||
@@ -511,46 +492,28 @@ pub(crate) fn submit_gossip_stats(
|
||||
i64
|
||||
),
|
||||
);
|
||||
let fails: Vec<_> = crds_stats
|
||||
.pull
|
||||
.fails
|
||||
.iter()
|
||||
.zip(crds_stats.push.fails.iter())
|
||||
.map(|(a, b)| a + b)
|
||||
.collect();
|
||||
datapoint_info!(
|
||||
"cluster_info_crds_stats_fails",
|
||||
("ContactInfo", fails[0], i64),
|
||||
("ContactInfo-push", crds_stats.push.fails[0], i64),
|
||||
("ContactInfo-pull", crds_stats.pull.fails[0], i64),
|
||||
("Vote", fails[1], i64),
|
||||
("Vote-push", crds_stats.push.fails[1], i64),
|
||||
("Vote-pull", crds_stats.pull.fails[1], i64),
|
||||
("LowestSlot", fails[2], i64),
|
||||
("LowestSlot-push", crds_stats.push.fails[2], i64),
|
||||
("LowestSlot-pull", crds_stats.pull.fails[2], i64),
|
||||
("SnapshotHashes", fails[3], i64),
|
||||
("SnapshotHashes-push", crds_stats.push.fails[3], i64),
|
||||
("SnapshotHashes-pull", crds_stats.pull.fails[3], i64),
|
||||
("AccountsHashes", fails[4], i64),
|
||||
("AccountsHashes-push", crds_stats.push.fails[4], i64),
|
||||
("AccountsHashes-pull", crds_stats.pull.fails[4], i64),
|
||||
("EpochSlots", fails[5], i64),
|
||||
("EpochSlots-push", crds_stats.push.fails[5], i64),
|
||||
("EpochSlots-pull", crds_stats.pull.fails[5], i64),
|
||||
("LegacyVersion", fails[6], i64),
|
||||
("LegacyVersion-push", crds_stats.push.fails[6], i64),
|
||||
("LegacyVersion-pull", crds_stats.pull.fails[6], i64),
|
||||
("Version", fails[7], i64),
|
||||
("Version-push", crds_stats.push.fails[7], i64),
|
||||
("Version-pull", crds_stats.pull.fails[7], i64),
|
||||
("NodeInstance", fails[8], i64),
|
||||
("NodeInstance-push", crds_stats.push.fails[8], i64),
|
||||
("NodeInstance-pull", crds_stats.pull.fails[8], i64),
|
||||
("DuplicateShred", fails[9], i64),
|
||||
("DuplicateShred-push", crds_stats.push.fails[9], i64),
|
||||
("DuplicateShred-pull", crds_stats.pull.fails[9], i64),
|
||||
("IncrementalSnapshotHashes", fails[10], i64),
|
||||
(
|
||||
"IncrementalSnapshotHashes-push",
|
||||
crds_stats.push.fails[10],
|
||||
@@ -561,24 +524,19 @@ pub(crate) fn submit_gossip_stats(
|
||||
crds_stats.pull.fails[10],
|
||||
i64
|
||||
),
|
||||
("all", fails.iter().sum::<usize>(), i64),
|
||||
("all-push", crds_stats.push.fails.iter().sum::<usize>(), i64),
|
||||
("all-pull", crds_stats.pull.fails.iter().sum::<usize>(), i64),
|
||||
);
|
||||
if !log::log_enabled!(log::Level::Trace) {
|
||||
return;
|
||||
}
|
||||
submit_vote_stats("cluster_info_crds_stats_votes_pull", &crds_stats.pull.votes);
|
||||
submit_vote_stats("cluster_info_crds_stats_votes_push", &crds_stats.push.votes);
|
||||
let votes: HashMap<Slot, usize> = crds_stats
|
||||
.pull
|
||||
.votes
|
||||
.into_iter()
|
||||
.map(|(slot, num_votes)| (*slot, *num_votes))
|
||||
.chain(
|
||||
crds_stats
|
||||
.push
|
||||
.votes
|
||||
.into_iter()
|
||||
.map(|(slot, num_votes)| (*slot, *num_votes)),
|
||||
)
|
||||
.chain(crds_stats.push.votes.into_iter())
|
||||
.into_grouping_map()
|
||||
.aggregate(|acc, _slot, num_votes| Some(acc.unwrap_or_default() + num_votes));
|
||||
submit_vote_stats("cluster_info_crds_stats_votes", &votes);
|
||||
@@ -589,12 +547,12 @@ where
|
||||
I: IntoIterator<Item = (&'a Slot, /*num-votes:*/ &'a usize)>,
|
||||
{
|
||||
// Submit vote stats only for the top most voted slots.
|
||||
const NUM_SLOTS: usize = 20;
|
||||
const NUM_SLOTS: usize = 10;
|
||||
let mut votes: Vec<_> = votes.into_iter().map(|(k, v)| (*k, *v)).collect();
|
||||
if votes.len() > NUM_SLOTS {
|
||||
votes.select_nth_unstable_by_key(NUM_SLOTS, |(_, num)| Reverse(*num));
|
||||
}
|
||||
for (slot, num_votes) in votes.into_iter().take(NUM_SLOTS) {
|
||||
datapoint_info!(name, ("slot", slot, i64), ("num_votes", num_votes, i64),);
|
||||
datapoint_trace!(name, ("slot", slot, i64), ("num_votes", num_votes, i64));
|
||||
}
|
||||
}
|
||||
|
@@ -1,11 +1,4 @@
|
||||
use {
|
||||
crate::{
|
||||
cluster_info::ClusterInfo, contact_info::ContactInfo, weighted_shuffle::weighted_shuffle,
|
||||
},
|
||||
itertools::Itertools,
|
||||
solana_sdk::{clock::Slot, pubkey::Pubkey},
|
||||
std::collections::HashMap,
|
||||
};
|
||||
use solana_sdk::clock::Slot;
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, AbiExample, AbiEnumVisitor)]
|
||||
enum CompressionType {
|
||||
@@ -26,74 +19,3 @@ pub(crate) struct EpochIncompleteSlots {
|
||||
compression: CompressionType,
|
||||
compressed_list: Vec<u8>,
|
||||
}
|
||||
|
||||
// Legacy methods copied for testing backward compatibility.
|
||||
|
||||
pub fn sorted_retransmit_peers_and_stakes(
|
||||
cluster_info: &ClusterInfo,
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> (Vec<ContactInfo>, Vec<(u64, usize)>) {
|
||||
let mut peers = cluster_info.tvu_peers();
|
||||
// insert "self" into this list for the layer and neighborhood computation
|
||||
peers.push(cluster_info.my_contact_info());
|
||||
let stakes_and_index = sorted_stakes_with_index(&peers, stakes);
|
||||
(peers, stakes_and_index)
|
||||
}
|
||||
|
||||
pub fn sorted_stakes_with_index(
|
||||
peers: &[ContactInfo],
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> Vec<(u64, usize)> {
|
||||
let stakes_and_index: Vec<_> = peers
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, c)| {
|
||||
// For stake weighted shuffle a valid weight is atleast 1. Weight 0 is
|
||||
// assumed to be missing entry. So let's make sure stake weights are atleast 1
|
||||
let stake = 1.max(
|
||||
stakes
|
||||
.as_ref()
|
||||
.map_or(1, |stakes| *stakes.get(&c.id).unwrap_or(&1)),
|
||||
);
|
||||
(stake, i)
|
||||
})
|
||||
.sorted_by(|(l_stake, l_info), (r_stake, r_info)| {
|
||||
if r_stake == l_stake {
|
||||
peers[*r_info].id.cmp(&peers[*l_info].id)
|
||||
} else {
|
||||
r_stake.cmp(l_stake)
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
stakes_and_index
|
||||
}
|
||||
|
||||
pub fn shuffle_peers_and_index(
|
||||
id: &Pubkey,
|
||||
peers: &[ContactInfo],
|
||||
stakes_and_index: &[(u64, usize)],
|
||||
seed: [u8; 32],
|
||||
) -> (usize, Vec<(u64, usize)>) {
|
||||
let shuffled_stakes_and_index = stake_weighted_shuffle(stakes_and_index, seed);
|
||||
let self_index = shuffled_stakes_and_index
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(i, (_stake, index))| {
|
||||
if peers[*index].id == *id {
|
||||
Some(i)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
(self_index, shuffled_stakes_and_index)
|
||||
}
|
||||
|
||||
fn stake_weighted_shuffle(stakes_and_index: &[(u64, usize)], seed: [u8; 32]) -> Vec<(u64, usize)> {
|
||||
let stake_weights = stakes_and_index.iter().map(|(w, _)| *w);
|
||||
|
||||
let shuffle = weighted_shuffle(stake_weights, seed);
|
||||
|
||||
shuffle.iter().map(|x| stakes_and_index[*x]).collect()
|
||||
}
|
||||
|
@@ -13,7 +13,7 @@ pub mod crds_gossip_pull;
|
||||
pub mod crds_gossip_push;
|
||||
pub mod crds_shards;
|
||||
pub mod crds_value;
|
||||
pub mod deprecated;
|
||||
mod deprecated;
|
||||
pub mod duplicate_shred;
|
||||
pub mod epoch_slots;
|
||||
pub mod gossip_error;
|
||||
|
@@ -1,18 +1,12 @@
|
||||
//! The `weighted_shuffle` module provides an iterator over shuffled weights.
|
||||
|
||||
use {
|
||||
itertools::Itertools,
|
||||
num_traits::{CheckedAdd, FromPrimitive, ToPrimitive},
|
||||
num_traits::CheckedAdd,
|
||||
rand::{
|
||||
distributions::uniform::{SampleUniform, UniformSampler},
|
||||
Rng, SeedableRng,
|
||||
},
|
||||
rand_chacha::ChaChaRng,
|
||||
std::{
|
||||
borrow::Borrow,
|
||||
iter,
|
||||
ops::{AddAssign, Div, Sub, SubAssign},
|
||||
Rng,
|
||||
},
|
||||
std::ops::{AddAssign, Sub, SubAssign},
|
||||
};
|
||||
|
||||
/// Implements an iterator where indices are shuffled according to their
|
||||
@@ -182,68 +176,12 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a list of indexes shuffled based on the input weights
|
||||
/// Note - The sum of all weights must not exceed `u64::MAX`
|
||||
pub fn weighted_shuffle<T, B, F>(weights: F, seed: [u8; 32]) -> Vec<usize>
|
||||
where
|
||||
T: Copy + PartialOrd + iter::Sum + Div<T, Output = T> + FromPrimitive + ToPrimitive,
|
||||
B: Borrow<T>,
|
||||
F: Iterator<Item = B> + Clone,
|
||||
{
|
||||
let total_weight: T = weights.clone().map(|x| *x.borrow()).sum();
|
||||
let mut rng = ChaChaRng::from_seed(seed);
|
||||
weights
|
||||
.enumerate()
|
||||
.map(|(i, weight)| {
|
||||
let weight = weight.borrow();
|
||||
// This generates an "inverse" weight but it avoids floating point math
|
||||
let x = (total_weight / *weight)
|
||||
.to_u64()
|
||||
.expect("values > u64::max are not supported");
|
||||
(
|
||||
i,
|
||||
// capture the u64 into u128s to prevent overflow
|
||||
rng.gen_range(1, u128::from(std::u16::MAX)) * u128::from(x),
|
||||
)
|
||||
})
|
||||
// sort in ascending order
|
||||
.sorted_by(|(_, l_val), (_, r_val)| l_val.cmp(r_val))
|
||||
.map(|x| x.0)
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Returns the highest index after computing a weighted shuffle.
|
||||
/// Saves doing any sorting for O(n) max calculation.
|
||||
// TODO: Remove in favor of rand::distributions::WeightedIndex.
|
||||
pub fn weighted_best(weights_and_indexes: &[(u64, usize)], seed: [u8; 32]) -> usize {
|
||||
if weights_and_indexes.is_empty() {
|
||||
return 0;
|
||||
}
|
||||
let mut rng = ChaChaRng::from_seed(seed);
|
||||
let total_weight: u64 = weights_and_indexes.iter().map(|x| x.0).sum();
|
||||
let mut lowest_weight = std::u128::MAX;
|
||||
let mut best_index = 0;
|
||||
for v in weights_and_indexes {
|
||||
// This generates an "inverse" weight but it avoids floating point math
|
||||
let x = (total_weight / v.0)
|
||||
.to_u64()
|
||||
.expect("values > u64::max are not supported");
|
||||
// capture the u64 into u128s to prevent overflow
|
||||
let computed_weight = rng.gen_range(1, u128::from(std::u16::MAX)) * u128::from(x);
|
||||
// The highest input weight maps to the lowest computed weight
|
||||
if computed_weight < lowest_weight {
|
||||
lowest_weight = computed_weight;
|
||||
best_index = v.1;
|
||||
}
|
||||
}
|
||||
|
||||
best_index
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use {
|
||||
super::*,
|
||||
rand::SeedableRng,
|
||||
rand_chacha::ChaChaRng,
|
||||
std::{convert::TryInto, iter::repeat_with},
|
||||
};
|
||||
|
||||
@@ -280,72 +218,6 @@ mod tests {
|
||||
shuffle
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_weighted_shuffle_iterator() {
|
||||
let mut test_set = [0; 6];
|
||||
let mut count = 0;
|
||||
let shuffle = weighted_shuffle(vec![50, 10, 2, 1, 1, 1].into_iter(), [0x5a; 32]);
|
||||
shuffle.into_iter().for_each(|x| {
|
||||
assert_eq!(test_set[x], 0);
|
||||
test_set[x] = 1;
|
||||
count += 1;
|
||||
});
|
||||
assert_eq!(count, 6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_weighted_shuffle_iterator_large() {
|
||||
let mut test_set = [0; 100];
|
||||
let mut test_weights = vec![0; 100];
|
||||
(0..100).for_each(|i| test_weights[i] = (i + 1) as u64);
|
||||
let mut count = 0;
|
||||
let shuffle = weighted_shuffle(test_weights.into_iter(), [0xa5; 32]);
|
||||
shuffle.into_iter().for_each(|x| {
|
||||
assert_eq!(test_set[x], 0);
|
||||
test_set[x] = 1;
|
||||
count += 1;
|
||||
});
|
||||
assert_eq!(count, 100);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_weighted_shuffle_compare() {
|
||||
let shuffle = weighted_shuffle(vec![50, 10, 2, 1, 1, 1].into_iter(), [0x5a; 32]);
|
||||
|
||||
let shuffle1 = weighted_shuffle(vec![50, 10, 2, 1, 1, 1].into_iter(), [0x5a; 32]);
|
||||
shuffle1
|
||||
.into_iter()
|
||||
.zip(shuffle.into_iter())
|
||||
.for_each(|(x, y)| {
|
||||
assert_eq!(x, y);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_weighted_shuffle_imbalanced() {
|
||||
let mut weights = vec![std::u32::MAX as u64; 3];
|
||||
weights.push(1);
|
||||
let shuffle = weighted_shuffle(weights.iter().cloned(), [0x5a; 32]);
|
||||
shuffle.into_iter().for_each(|x| {
|
||||
if x == weights.len() - 1 {
|
||||
assert_eq!(weights[x], 1);
|
||||
} else {
|
||||
assert_eq!(weights[x], std::u32::MAX as u64);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_weighted_best() {
|
||||
let weights_and_indexes: Vec<_> = vec![100u64, 1000, 10_000, 10]
|
||||
.into_iter()
|
||||
.enumerate()
|
||||
.map(|(i, weight)| (weight, i))
|
||||
.collect();
|
||||
let best_index = weighted_best(&weights_and_indexes, [0x5b; 32]);
|
||||
assert_eq!(best_index, 2);
|
||||
}
|
||||
|
||||
// Asserts that empty weights will return empty shuffle.
|
||||
#[test]
|
||||
fn test_weighted_shuffle_empty_weights() {
|
||||
|
@@ -1,12 +1,15 @@
|
||||
#![allow(clippy::integer_arithmetic)]
|
||||
use {
|
||||
crossbeam_channel::{unbounded, Receiver, Sender, TryRecvError},
|
||||
itertools::Itertools,
|
||||
rand::SeedableRng,
|
||||
rand_chacha::ChaChaRng,
|
||||
rayon::{iter::ParallelIterator, prelude::*},
|
||||
serial_test::serial,
|
||||
solana_gossip::{
|
||||
cluster_info::{compute_retransmit_peers, ClusterInfo},
|
||||
contact_info::ContactInfo,
|
||||
deprecated::{shuffle_peers_and_index, sorted_retransmit_peers_and_stakes},
|
||||
weighted_shuffle::WeightedShuffle,
|
||||
},
|
||||
solana_sdk::{pubkey::Pubkey, signer::keypair::Keypair},
|
||||
solana_streamer::socket::SocketAddrSpace,
|
||||
@@ -32,6 +35,77 @@ fn find_insert_shred(id: &Pubkey, shred: i32, batches: &mut [Nodes]) {
|
||||
});
|
||||
}
|
||||
|
||||
fn sorted_retransmit_peers_and_stakes(
|
||||
cluster_info: &ClusterInfo,
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> (Vec<ContactInfo>, Vec<(u64, usize)>) {
|
||||
let mut peers = cluster_info.tvu_peers();
|
||||
// insert "self" into this list for the layer and neighborhood computation
|
||||
peers.push(cluster_info.my_contact_info());
|
||||
let stakes_and_index = sorted_stakes_with_index(&peers, stakes);
|
||||
(peers, stakes_and_index)
|
||||
}
|
||||
|
||||
fn sorted_stakes_with_index(
|
||||
peers: &[ContactInfo],
|
||||
stakes: Option<&HashMap<Pubkey, u64>>,
|
||||
) -> Vec<(u64, usize)> {
|
||||
let stakes_and_index: Vec<_> = peers
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, c)| {
|
||||
// For stake weighted shuffle a valid weight is atleast 1. Weight 0 is
|
||||
// assumed to be missing entry. So let's make sure stake weights are atleast 1
|
||||
let stake = 1.max(
|
||||
stakes
|
||||
.as_ref()
|
||||
.map_or(1, |stakes| *stakes.get(&c.id).unwrap_or(&1)),
|
||||
);
|
||||
(stake, i)
|
||||
})
|
||||
.sorted_by(|(l_stake, l_info), (r_stake, r_info)| {
|
||||
if r_stake == l_stake {
|
||||
peers[*r_info].id.cmp(&peers[*l_info].id)
|
||||
} else {
|
||||
r_stake.cmp(l_stake)
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
stakes_and_index
|
||||
}
|
||||
|
||||
fn shuffle_peers_and_index(
|
||||
id: &Pubkey,
|
||||
peers: &[ContactInfo],
|
||||
stakes_and_index: &[(u64, usize)],
|
||||
seed: [u8; 32],
|
||||
) -> (usize, Vec<(u64, usize)>) {
|
||||
let shuffled_stakes_and_index = stake_weighted_shuffle(stakes_and_index, seed);
|
||||
let self_index = shuffled_stakes_and_index
|
||||
.iter()
|
||||
.enumerate()
|
||||
.find_map(|(i, (_stake, index))| {
|
||||
if peers[*index].id == *id {
|
||||
Some(i)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
(self_index, shuffled_stakes_and_index)
|
||||
}
|
||||
|
||||
fn stake_weighted_shuffle(stakes_and_index: &[(u64, usize)], seed: [u8; 32]) -> Vec<(u64, usize)> {
|
||||
let mut rng = ChaChaRng::from_seed(seed);
|
||||
let stake_weights: Vec<_> = stakes_and_index.iter().map(|(w, _)| *w).collect();
|
||||
let shuffle = WeightedShuffle::new("stake_weighted_shuffle", &stake_weights);
|
||||
shuffle
|
||||
.shuffle(&mut rng)
|
||||
.map(|i| stakes_and_index[i])
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn retransmit(
|
||||
mut shuffled_nodes: Vec<ContactInfo>,
|
||||
senders: &HashMap<Pubkey, Sender<(i32, bool)>>,
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-install"
|
||||
description = "The solana cluster software installer"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -26,12 +26,12 @@ reqwest = { version = "0.11.10", default-features = false, features = ["blocking
|
||||
semver = "1.0.6"
|
||||
serde = { version = "1.0.136", features = ["derive"] }
|
||||
serde_yaml = "0.8.23"
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
tar = "0.4.38"
|
||||
tempfile = "3.3.0"
|
||||
url = "2.2.2"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-keygen"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana key generation utility"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -14,11 +14,11 @@ bs58 = "0.4.0"
|
||||
clap = "2.33"
|
||||
dirs-next = "2.0.0"
|
||||
num_cpus = "1.13.1"
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.6" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-cli-config = { path = "../cli-config", version = "=1.10.8" }
|
||||
solana-remote-wallet = { path = "../remote-wallet", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
tiny-bip39 = "0.8.2"
|
||||
|
||||
[[bin]]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-ledger-tool"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -21,20 +21,20 @@ log = { version = "0.4.14" }
|
||||
regex = "1"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0.79"
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.6" }
|
||||
solana-cli-output = { path = "../cli-output", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.6" }
|
||||
solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-clap-utils = { path = "../clap-utils", version = "=1.10.8" }
|
||||
solana-cli-output = { path = "../cli-output", version = "=1.10.8" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.8" }
|
||||
solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
||||
[target.'cfg(not(target_env = "msvc"))'.dependencies]
|
||||
|
@@ -803,7 +803,7 @@ fn compute_slot_cost(blockstore: &Blockstore, slot: Slot) -> Result<(), String>
|
||||
num_programs += transaction.message().instructions().len();
|
||||
|
||||
let tx_cost = cost_model.calculate_cost(&transaction);
|
||||
let result = cost_tracker.try_add(&transaction, &tx_cost);
|
||||
let result = cost_tracker.try_add(&tx_cost);
|
||||
if result.is_err() {
|
||||
println!(
|
||||
"Slot: {}, CostModel rejected transaction {:?}, reason {:?}",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-ledger"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana ledger"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -22,11 +22,11 @@ itertools = "0.10.3"
|
||||
lazy_static = "1.4.0"
|
||||
libc = "0.2.120"
|
||||
log = { version = "0.4.14" }
|
||||
lru = "0.7.3"
|
||||
lru = "0.7.5"
|
||||
num-derive = "0.3"
|
||||
num-traits = "0.2"
|
||||
num_cpus = "1.13.1"
|
||||
prost = "0.9.0"
|
||||
prost = "0.10.0"
|
||||
rand = "0.7.0"
|
||||
rand_chacha = "0.2.2"
|
||||
rayon = "1.5.1"
|
||||
@@ -34,21 +34,21 @@ reed-solomon-erasure = { version = "5.0.1", features = ["simd-accel"] }
|
||||
serde = "1.0.136"
|
||||
serde_bytes = "0.11.5"
|
||||
sha2 = "0.10.2"
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.10.6" }
|
||||
solana-storage-proto = { path = "../storage-proto", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-storage-bigtable = { path = "../storage-bigtable", version = "=1.10.8" }
|
||||
solana-storage-proto = { path = "../storage-proto", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../transaction-status", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
tempfile = "3.3.0"
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
@@ -65,8 +65,8 @@ features = ["lz4"]
|
||||
[dev-dependencies]
|
||||
assert_matches = "1.5.0"
|
||||
matches = "0.1.9"
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../account-decoder", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[build-dependencies]
|
||||
rustc_version = "0.4"
|
||||
|
@@ -7,8 +7,10 @@ use {
|
||||
},
|
||||
leader_schedule_cache::LeaderScheduleCache,
|
||||
},
|
||||
crossbeam_channel::unbounded,
|
||||
log::*,
|
||||
solana_runtime::{
|
||||
accounts_background_service::DroppedSlotsReceiver,
|
||||
accounts_update_notifier_interface::AccountsUpdateNotifier,
|
||||
bank_forks::BankForks,
|
||||
snapshot_archive_info::SnapshotArchiveInfoGetter,
|
||||
@@ -47,16 +49,17 @@ pub fn load(
|
||||
accounts_package_sender: AccountsPackageSender,
|
||||
accounts_update_notifier: Option<AccountsUpdateNotifier>,
|
||||
) -> LoadResult {
|
||||
let (mut bank_forks, leader_schedule_cache, starting_snapshot_hashes) = load_bank_forks(
|
||||
genesis_config,
|
||||
blockstore,
|
||||
account_paths,
|
||||
shrink_paths,
|
||||
snapshot_config,
|
||||
&process_options,
|
||||
cache_block_meta_sender,
|
||||
accounts_update_notifier,
|
||||
);
|
||||
let (mut bank_forks, leader_schedule_cache, starting_snapshot_hashes, pruned_banks_receiver) =
|
||||
load_bank_forks(
|
||||
genesis_config,
|
||||
blockstore,
|
||||
account_paths,
|
||||
shrink_paths,
|
||||
snapshot_config,
|
||||
&process_options,
|
||||
cache_block_meta_sender,
|
||||
accounts_update_notifier,
|
||||
);
|
||||
|
||||
blockstore_processor::process_blockstore_from_root(
|
||||
blockstore,
|
||||
@@ -67,6 +70,7 @@ pub fn load(
|
||||
cache_block_meta_sender,
|
||||
snapshot_config,
|
||||
accounts_package_sender,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
.map(|_| (bank_forks, leader_schedule_cache, starting_snapshot_hashes))
|
||||
}
|
||||
@@ -85,6 +89,7 @@ pub fn load_bank_forks(
|
||||
BankForks,
|
||||
LeaderScheduleCache,
|
||||
Option<StartingSnapshotHashes>,
|
||||
DroppedSlotsReceiver,
|
||||
) {
|
||||
let snapshot_present = if let Some(snapshot_config) = snapshot_config {
|
||||
info!(
|
||||
@@ -144,12 +149,30 @@ pub fn load_bank_forks(
|
||||
)
|
||||
};
|
||||
|
||||
let mut leader_schedule_cache = LeaderScheduleCache::new_from_bank(&bank_forks.root_bank());
|
||||
// Before replay starts, set the callbacks in each of the banks in BankForks so that
|
||||
// all dropped banks come through the `pruned_banks_receiver` channel. This way all bank
|
||||
// drop behavior can be safely synchronized with any other ongoing accounts activity like
|
||||
// cache flush, clean, shrink, as long as the same thread performing those activities also
|
||||
// is processing the dropped banks from the `pruned_banks_receiver` channel.
|
||||
|
||||
// There should only be one bank, the root bank in BankForks. Thus all banks added to
|
||||
// BankForks from now on will be descended from the root bank and thus will inherit
|
||||
// the bank drop callback.
|
||||
assert_eq!(bank_forks.banks().len(), 1);
|
||||
let (pruned_banks_sender, pruned_banks_receiver) = unbounded();
|
||||
let root_bank = bank_forks.root_bank();
|
||||
let callback = root_bank
|
||||
.rc
|
||||
.accounts
|
||||
.accounts_db
|
||||
.create_drop_bank_callback(pruned_banks_sender);
|
||||
root_bank.set_callback(Some(Box::new(callback)));
|
||||
|
||||
let mut leader_schedule_cache = LeaderScheduleCache::new_from_bank(&root_bank);
|
||||
if process_options.full_leader_cache {
|
||||
leader_schedule_cache.set_max_schedules(std::usize::MAX);
|
||||
}
|
||||
|
||||
assert_eq!(bank_forks.banks().len(), 1);
|
||||
if let Some(ref new_hard_forks) = process_options.new_hard_forks {
|
||||
let root_bank = bank_forks.root_bank();
|
||||
let hard_forks = root_bank.hard_forks();
|
||||
@@ -166,7 +189,12 @@ pub fn load_bank_forks(
|
||||
}
|
||||
}
|
||||
|
||||
(bank_forks, leader_schedule_cache, starting_snapshot_hashes)
|
||||
(
|
||||
bank_forks,
|
||||
leader_schedule_cache,
|
||||
starting_snapshot_hashes,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
}
|
||||
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
|
@@ -17,6 +17,7 @@ use {
|
||||
solana_program_runtime::timings::{ExecuteTimingType, ExecuteTimings},
|
||||
solana_rayon_threadlimit::get_thread_count,
|
||||
solana_runtime::{
|
||||
accounts_background_service::DroppedSlotsReceiver,
|
||||
accounts_db::{AccountShrinkThreshold, AccountsDbConfig},
|
||||
accounts_index::AccountSecondaryIndexes,
|
||||
accounts_update_notifier_interface::AccountsUpdateNotifier,
|
||||
@@ -566,16 +567,17 @@ pub fn test_process_blockstore(
|
||||
blockstore: &Blockstore,
|
||||
opts: ProcessOptions,
|
||||
) -> (BankForks, LeaderScheduleCache) {
|
||||
let (mut bank_forks, leader_schedule_cache, ..) = crate::bank_forks_utils::load_bank_forks(
|
||||
genesis_config,
|
||||
blockstore,
|
||||
Vec::new(),
|
||||
None,
|
||||
None,
|
||||
&opts,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let (mut bank_forks, leader_schedule_cache, .., pruned_banks_receiver) =
|
||||
crate::bank_forks_utils::load_bank_forks(
|
||||
genesis_config,
|
||||
blockstore,
|
||||
Vec::new(),
|
||||
None,
|
||||
None,
|
||||
&opts,
|
||||
None,
|
||||
None,
|
||||
);
|
||||
let (accounts_package_sender, _) = unbounded();
|
||||
process_blockstore_from_root(
|
||||
blockstore,
|
||||
@@ -586,6 +588,7 @@ pub fn test_process_blockstore(
|
||||
None,
|
||||
None,
|
||||
accounts_package_sender,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
.unwrap();
|
||||
(bank_forks, leader_schedule_cache)
|
||||
@@ -636,6 +639,7 @@ pub fn process_blockstore_from_root(
|
||||
cache_block_meta_sender: Option<&CacheBlockMetaSender>,
|
||||
snapshot_config: Option<&SnapshotConfig>,
|
||||
accounts_package_sender: AccountsPackageSender,
|
||||
pruned_banks_receiver: DroppedSlotsReceiver,
|
||||
) -> result::Result<Option<Slot>, BlockstoreProcessorError> {
|
||||
if let Some(num_threads) = opts.override_num_threads {
|
||||
PAR_THREAD_POOL.with(|pool| {
|
||||
@@ -695,6 +699,7 @@ pub fn process_blockstore_from_root(
|
||||
accounts_package_sender,
|
||||
&mut timing,
|
||||
&mut last_full_snapshot_slot,
|
||||
pruned_banks_receiver,
|
||||
)?;
|
||||
} else {
|
||||
// If there's no meta for the input `start_slot`, then we started from a snapshot
|
||||
@@ -1116,6 +1121,7 @@ fn load_frozen_forks(
|
||||
accounts_package_sender: AccountsPackageSender,
|
||||
timing: &mut ExecuteTimings,
|
||||
last_full_snapshot_slot: &mut Option<Slot>,
|
||||
pruned_banks_receiver: DroppedSlotsReceiver,
|
||||
) -> result::Result<(), BlockstoreProcessorError> {
|
||||
let recyclers = VerifyRecyclers::default();
|
||||
let mut all_banks = HashMap::new();
|
||||
@@ -1284,6 +1290,17 @@ fn load_frozen_forks(
|
||||
}
|
||||
|
||||
if last_free.elapsed() > Duration::from_secs(10) {
|
||||
// Purge account state for all dropped banks
|
||||
for (pruned_slot, pruned_bank_id) in pruned_banks_receiver.try_iter() {
|
||||
// Simulate this purge being from the AccountsBackgroundService
|
||||
let is_from_abs = true;
|
||||
new_root_bank.rc.accounts.purge_slot(
|
||||
pruned_slot,
|
||||
pruned_bank_id,
|
||||
is_from_abs,
|
||||
);
|
||||
}
|
||||
|
||||
// Must be called after `squash()`, so that AccountsDb knows what
|
||||
// the roots are for the cache flushing in exhaustively_free_unused_resource().
|
||||
// This could take few secs; so update last_free later
|
||||
@@ -3143,6 +3160,7 @@ pub mod tests {
|
||||
|
||||
// Test process_blockstore_from_root() from slot 1 onwards
|
||||
let (accounts_package_sender, _) = unbounded();
|
||||
let (_pruned_banks_sender, pruned_banks_receiver) = unbounded();
|
||||
process_blockstore_from_root(
|
||||
&blockstore,
|
||||
&mut bank_forks,
|
||||
@@ -3152,6 +3170,7 @@ pub mod tests {
|
||||
None,
|
||||
None,
|
||||
accounts_package_sender,
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
@@ -3252,6 +3271,7 @@ pub mod tests {
|
||||
let (accounts_package_sender, accounts_package_receiver) = unbounded();
|
||||
let leader_schedule_cache = LeaderScheduleCache::new_from_bank(&bank);
|
||||
|
||||
let (_pruned_banks_sender, pruned_banks_receiver) = unbounded();
|
||||
process_blockstore_from_root(
|
||||
&blockstore,
|
||||
&mut bank_forks,
|
||||
@@ -3261,6 +3281,7 @@ pub mod tests {
|
||||
None,
|
||||
Some(&snapshot_config),
|
||||
accounts_package_sender.clone(),
|
||||
pruned_banks_receiver,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
|
@@ -60,16 +60,14 @@ use {
|
||||
solana_measure::measure::Measure,
|
||||
solana_perf::packet::{limited_deserialize, Packet},
|
||||
solana_rayon_threadlimit::get_thread_count,
|
||||
solana_runtime::bank::Bank,
|
||||
solana_sdk::{
|
||||
clock::Slot,
|
||||
feature_set,
|
||||
hash::{hashv, Hash},
|
||||
packet::PACKET_DATA_SIZE,
|
||||
pubkey::Pubkey,
|
||||
signature::{Keypair, Signature, Signer},
|
||||
},
|
||||
std::{cell::RefCell, convert::TryInto, mem::size_of},
|
||||
std::{cell::RefCell, mem::size_of},
|
||||
thiserror::Error,
|
||||
};
|
||||
|
||||
@@ -609,19 +607,13 @@ impl Shred {
|
||||
self.common_header.signature
|
||||
}
|
||||
|
||||
pub fn seed(&self, leader_pubkey: Pubkey, root_bank: &Bank) -> [u8; 32] {
|
||||
if enable_deterministic_seed(self.slot(), root_bank) {
|
||||
hashv(&[
|
||||
&self.slot().to_le_bytes(),
|
||||
&self.index().to_le_bytes(),
|
||||
&leader_pubkey.to_bytes(),
|
||||
])
|
||||
.to_bytes()
|
||||
} else {
|
||||
let signature = self.common_header.signature.as_ref();
|
||||
let offset = signature.len().checked_sub(32).unwrap();
|
||||
signature[offset..].try_into().unwrap()
|
||||
}
|
||||
pub fn seed(&self, leader_pubkey: Pubkey) -> [u8; 32] {
|
||||
hashv(&[
|
||||
&self.slot().to_le_bytes(),
|
||||
&self.index().to_le_bytes(),
|
||||
&leader_pubkey.to_bytes(),
|
||||
])
|
||||
.to_bytes()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@@ -711,21 +703,6 @@ impl Shred {
|
||||
}
|
||||
}
|
||||
|
||||
fn enable_deterministic_seed(shred_slot: Slot, bank: &Bank) -> bool {
|
||||
let feature_slot = bank
|
||||
.feature_set
|
||||
.activated_slot(&feature_set::deterministic_shred_seed_enabled::id());
|
||||
match feature_slot {
|
||||
None => false,
|
||||
Some(feature_slot) => {
|
||||
let epoch_schedule = bank.epoch_schedule();
|
||||
let feature_epoch = epoch_schedule.get_epoch(feature_slot);
|
||||
let shred_epoch = epoch_schedule.get_epoch(shred_slot);
|
||||
feature_epoch < shred_epoch
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Shredder {
|
||||
pub slot: Slot,
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-local-cluster"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -16,25 +16,25 @@ itertools = "0.10.3"
|
||||
log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
solana-client = { path = "../client", version = "=1.10.6" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.6" }
|
||||
solana-core = { path = "../core", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.6" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-client = { path = "../client", version = "=1.10.8" }
|
||||
solana-config-program = { path = "../programs/config", version = "=1.10.8" }
|
||||
solana-core = { path = "../core", version = "=1.10.8" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-gossip = { path = "../gossip", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-stake-program = { path = "../programs/stake", version = "=1.10.8" }
|
||||
solana-streamer = { path = "../streamer", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
tempfile = "3.3.0"
|
||||
|
||||
[dev-dependencies]
|
||||
assert_matches = "1.5.0"
|
||||
gag = "1.0.0"
|
||||
serial_test = "0.6.0"
|
||||
solana-download-utils = { path = "../download-utils", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-download-utils = { path = "../download-utils", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||
edition = "2021"
|
||||
name = "solana-log-analyzer"
|
||||
description = "The solana cluster network analysis tool"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -14,8 +14,8 @@ byte-unit = "4.0.14"
|
||||
clap = "2.33.1"
|
||||
serde = "1.0.136"
|
||||
serde_json = "1.0.79"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[[bin]]
|
||||
name = "solana-log-analyzer"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-logger"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Logger"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "solana-measure"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
homepage = "https://solana.com/"
|
||||
documentation = "https://docs.rs/solana-measure"
|
||||
readme = "../README.md"
|
||||
@@ -12,7 +12,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
log = "0.4.14"
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-merkle-root-bench"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -11,11 +11,11 @@ publish = false
|
||||
[dependencies]
|
||||
clap = "2.33.1"
|
||||
log = "0.4.14"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-merkle-tree"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Merkle Tree"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -11,7 +11,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
fast-math = "0.1"
|
||||
solana-program = { path = "../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../sdk/program", version = "=1.10.8" }
|
||||
|
||||
# This can go once the BPF toolchain target Rust 1.42.0+
|
||||
[target.bpfel-unknown-unknown.dependencies]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-metrics"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Metrics"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -15,7 +15,7 @@ gethostname = "0.2.3"
|
||||
lazy_static = "1.4.0"
|
||||
log = "0.4.14"
|
||||
reqwest = { version = "0.11.10", default-features = false, features = ["blocking", "rustls-tls", "json"] }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
|
||||
[dev-dependencies]
|
||||
env_logger = "0.9.0"
|
||||
|
@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-net-shaper"
|
||||
description = "The solana cluster network shaping tool"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -14,7 +14,7 @@ clap = "2.33.1"
|
||||
rand = "0.7.0"
|
||||
serde = "1.0.136"
|
||||
serde_json = "1.0.79"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[[bin]]
|
||||
name = "solana-net-shaper"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-net-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Network Utilities"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -19,9 +19,9 @@ rand = "0.7.0"
|
||||
serde = "1.0.136"
|
||||
serde_derive = "1.0.103"
|
||||
socket2 = "0.4.4"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
url = "2.2.2"
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-notifier"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Notifier"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-perf"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana Performance APIs"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -22,10 +22,10 @@ log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
serde = "1.0.136"
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
|
||||
[target."cfg(target_os = \"linux\")".dependencies]
|
||||
caps = "0.5.3"
|
||||
@@ -37,7 +37,7 @@ name = "solana_perf"
|
||||
|
||||
[dev-dependencies]
|
||||
matches = "0.1.9"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[[bench]]
|
||||
name = "sigverify"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
edition = "2021"
|
||||
name = "solana-poh-bench"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
homepage = "https://solana.com/"
|
||||
@@ -14,12 +14,12 @@ clap = "2.33.1"
|
||||
log = "0.4.14"
|
||||
rand = "0.7.0"
|
||||
rayon = "1.5.1"
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-version = { path = "../version", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-version = { path = "../version", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-poh"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana PoH"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -13,21 +13,21 @@ edition = "2021"
|
||||
core_affinity = "0.5.10"
|
||||
crossbeam-channel = "0.5"
|
||||
log = "0.4.14"
|
||||
solana-entry = { path = "../entry", version = "=1.10.6" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-sys-tuner = { path = "../sys-tuner", version = "=1.10.6" }
|
||||
solana-entry = { path = "../entry", version = "=1.10.8" }
|
||||
solana-ledger = { path = "../ledger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-metrics = { path = "../metrics", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-sys-tuner = { path = "../sys-tuner", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
|
||||
[dev-dependencies]
|
||||
bincode = "1.3.3"
|
||||
matches = "0.1.9"
|
||||
rand = "0.7.0"
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-perf = { path = "../perf", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-program-runtime"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana program runtime"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -19,15 +19,15 @@ log = "0.4.14"
|
||||
num-derive = { version = "0.3" }
|
||||
num-traits = { version = "0.2" }
|
||||
serde = { version = "1.0.129", features = ["derive", "rc"] }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-measure = { path = "../measure", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
enum-iterator = "0.7.0"
|
||||
|
||||
[dev-dependencies]
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib"]
|
||||
|
@@ -5,7 +5,7 @@ edition = "2021"
|
||||
license = "Apache-2.0"
|
||||
name = "solana-program-test"
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
|
||||
[dependencies]
|
||||
async-trait = "0.1.52"
|
||||
@@ -14,13 +14,13 @@ bincode = "1.3.3"
|
||||
chrono-humanize = "0.2.1"
|
||||
log = "0.4.14"
|
||||
serde = "1.0.136"
|
||||
solana-banks-client = { path = "../banks-client", version = "=1.10.6" }
|
||||
solana-banks-server = { path = "../banks-server", version = "=1.10.6" }
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.6" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.6" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.6" }
|
||||
solana-banks-client = { path = "../banks-client", version = "=1.10.8" }
|
||||
solana-banks-server = { path = "../banks-server", version = "=1.10.8" }
|
||||
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "=1.10.8" }
|
||||
solana-logger = { path = "../logger", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../program-runtime", version = "=1.10.8" }
|
||||
solana-runtime = { path = "../runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../sdk", version = "=1.10.8" }
|
||||
solana-vote-program = { path = "../programs/vote", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
|
@@ -3,7 +3,7 @@
|
||||
|
||||
[package]
|
||||
name = "solana-address-lookup-table-program-tests"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
license = "Apache-2.0"
|
||||
@@ -14,9 +14,9 @@ publish = false
|
||||
[dev-dependencies]
|
||||
assert_matches = "1.5.0"
|
||||
bincode = "1.3.3"
|
||||
solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.10.6" }
|
||||
solana-program-test = { path = "../../program-test", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.6" }
|
||||
solana-address-lookup-table-program = { path = "../address-lookup-table", version = "=1.10.8" }
|
||||
solana-program-test = { path = "../../program-test", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-address-lookup-table-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana address lookup table program"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -16,14 +16,14 @@ log = "0.4.14"
|
||||
num-derive = "0.3"
|
||||
num-traits = "0.2"
|
||||
serde = { version = "1.0.136", features = ["derive"] }
|
||||
solana-frozen-abi = { path = "../../frozen-abi", version = "=1.10.6" }
|
||||
solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.10.6" }
|
||||
solana-program = { path = "../../sdk/program", version = "=1.10.6" }
|
||||
solana-frozen-abi = { path = "../../frozen-abi", version = "=1.10.8" }
|
||||
solana-frozen-abi-macro = { path = "../../frozen-abi/macro", version = "=1.10.8" }
|
||||
solana-program = { path = "../../sdk/program", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
|
||||
[target.'cfg(not(target_arch = "bpf"))'.dependencies]
|
||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.8" }
|
||||
|
||||
[build-dependencies]
|
||||
rustc_version = "0.4"
|
||||
|
308
programs/bpf/Cargo.lock
generated
308
programs/bpf/Cargo.lock
generated
@@ -2799,7 +2799,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-account-decoder"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"base64 0.13.0",
|
||||
@@ -2820,7 +2820,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-address-lookup-table-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"bytemuck",
|
||||
@@ -2829,9 +2829,9 @@ dependencies = [
|
||||
"num-traits",
|
||||
"rustc_version 0.4.0",
|
||||
"serde",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-program 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-program 1.10.8",
|
||||
"solana-program-runtime",
|
||||
"solana-sdk",
|
||||
"thiserror",
|
||||
@@ -2839,12 +2839,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-banks-client"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"borsh",
|
||||
"futures",
|
||||
"solana-banks-interface",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-sdk",
|
||||
"tarpc",
|
||||
"thiserror",
|
||||
@@ -2854,7 +2854,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-banks-interface"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"solana-sdk",
|
||||
@@ -2863,7 +2863,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-banks-server"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"crossbeam-channel",
|
||||
@@ -2880,7 +2880,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-loader-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"byteorder 1.4.3",
|
||||
@@ -2897,7 +2897,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-programs"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"byteorder 1.4.3",
|
||||
@@ -2912,7 +2912,7 @@ dependencies = [
|
||||
"solana-bpf-rust-realloc",
|
||||
"solana-bpf-rust-realloc-invoke",
|
||||
"solana-cli-output",
|
||||
"solana-logger 1.10.6",
|
||||
"solana-logger 1.10.8",
|
||||
"solana-measure",
|
||||
"solana-program-runtime",
|
||||
"solana-runtime",
|
||||
@@ -2924,171 +2924,171 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-128bit"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-128bit-dep",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-128bit-dep"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-alloc"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-call-depth"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-caller-access"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-custom-heap"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-dep-crate"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"byteorder 1.4.3",
|
||||
"solana-address-lookup-table-program",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-deprecated-loader"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-dup-accounts"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-error-handling"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"num-derive",
|
||||
"num-traits",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-external-spend"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-finalize"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-instruction-introspection"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-invoke"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-invoked",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-invoke-and-error"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-invoke-and-ok"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-invoke-and-return"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-invoked"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-iter"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-log-data"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-many-args"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-many-args-dep",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-many-args-dep"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-mem"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-program-runtime",
|
||||
"solana-program-test",
|
||||
"solana-sdk",
|
||||
@@ -3096,84 +3096,84 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-membuiltins"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-mem",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-noop"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-panic"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-param-passing"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-param-passing-dep",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-param-passing-dep"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-rand"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"getrandom 0.1.14",
|
||||
"rand 0.7.3",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-realloc"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-realloc-invoke"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-bpf-rust-realloc",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-ro-account_modify"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-ro-modify"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-sanity"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-program-runtime",
|
||||
"solana-program-test",
|
||||
"solana-sdk",
|
||||
@@ -3181,52 +3181,52 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-secp256k1-recover"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-sha"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"blake3 1.3.1",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-sibling-instructions"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-sibling_inner-instructions"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-spoof1"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-spoof1-system"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-sysvar"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-program-runtime",
|
||||
"solana-program-test",
|
||||
"solana-sdk",
|
||||
@@ -3234,29 +3234,29 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-upgradeable"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-upgraded"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bpf-rust-zk_token_elgamal"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-zk-token-sdk",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-bucket-map"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"log",
|
||||
"memmap2 0.5.3",
|
||||
@@ -3269,7 +3269,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-clap-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"clap",
|
||||
@@ -3285,7 +3285,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-cli-config"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"dirs-next",
|
||||
"lazy_static",
|
||||
@@ -3297,7 +3297,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-cli-output"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"base64 0.13.0",
|
||||
@@ -3319,7 +3319,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-client"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"async-mutex",
|
||||
"async-trait",
|
||||
@@ -3366,7 +3366,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-compute-budget-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"solana-program-runtime",
|
||||
"solana-sdk",
|
||||
@@ -3374,7 +3374,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-config-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"chrono",
|
||||
@@ -3386,7 +3386,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-faucet"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"byteorder 1.4.3",
|
||||
@@ -3397,7 +3397,7 @@ dependencies = [
|
||||
"serde_derive",
|
||||
"solana-clap-utils",
|
||||
"solana-cli-config",
|
||||
"solana-logger 1.10.6",
|
||||
"solana-logger 1.10.8",
|
||||
"solana-metrics",
|
||||
"solana-sdk",
|
||||
"solana-version",
|
||||
@@ -3428,7 +3428,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-frozen-abi"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bs58 0.4.0",
|
||||
"bv",
|
||||
@@ -3442,7 +3442,7 @@ dependencies = [
|
||||
"serde_bytes",
|
||||
"serde_derive",
|
||||
"sha2 0.10.2",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
@@ -3460,7 +3460,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-frozen-abi-macro"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"proc-macro2 1.0.24",
|
||||
"quote 1.0.6",
|
||||
@@ -3481,7 +3481,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-logger"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"env_logger 0.9.0",
|
||||
"lazy_static",
|
||||
@@ -3490,7 +3490,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-measure"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"log",
|
||||
"solana-sdk",
|
||||
@@ -3498,7 +3498,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-metrics"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"gethostname",
|
||||
@@ -3510,7 +3510,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-net-utils"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"clap",
|
||||
@@ -3521,7 +3521,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"socket2",
|
||||
"solana-logger 1.10.6",
|
||||
"solana-logger 1.10.8",
|
||||
"solana-sdk",
|
||||
"solana-version",
|
||||
"tokio",
|
||||
@@ -3530,7 +3530,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-perf"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"bincode",
|
||||
@@ -3590,7 +3590,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"bincode",
|
||||
@@ -3621,16 +3621,16 @@ dependencies = [
|
||||
"serde_derive",
|
||||
"sha2 0.10.2",
|
||||
"sha3 0.10.1",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-sdk-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-sdk-macro 1.10.8",
|
||||
"thiserror",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-program-runtime"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"bincode",
|
||||
@@ -3643,8 +3643,8 @@ dependencies = [
|
||||
"num-traits",
|
||||
"rustc_version 0.4.0",
|
||||
"serde",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-measure",
|
||||
"solana-sdk",
|
||||
"thiserror",
|
||||
@@ -3652,7 +3652,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-program-test"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64 0.13.0",
|
||||
@@ -3663,7 +3663,7 @@ dependencies = [
|
||||
"solana-banks-client",
|
||||
"solana-banks-server",
|
||||
"solana-bpf-loader-program",
|
||||
"solana-logger 1.10.6",
|
||||
"solana-logger 1.10.8",
|
||||
"solana-program-runtime",
|
||||
"solana-runtime",
|
||||
"solana-sdk",
|
||||
@@ -3674,7 +3674,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-rayon-threadlimit"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"num_cpus",
|
||||
@@ -3682,7 +3682,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-remote-wallet"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"console",
|
||||
"dialoguer",
|
||||
@@ -3699,7 +3699,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-runtime"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"arrayref",
|
||||
"bincode",
|
||||
@@ -3733,8 +3733,8 @@ dependencies = [
|
||||
"solana-bucket-map",
|
||||
"solana-compute-budget-program",
|
||||
"solana-config-program",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-measure",
|
||||
"solana-metrics",
|
||||
"solana-program-runtime",
|
||||
@@ -3753,7 +3753,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-sdk"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"assert_matches",
|
||||
"base64 0.13.0",
|
||||
@@ -3790,11 +3790,11 @@ dependencies = [
|
||||
"serde_json",
|
||||
"sha2 0.10.2",
|
||||
"sha3 0.10.1",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-logger 1.10.6",
|
||||
"solana-program 1.10.6",
|
||||
"solana-sdk-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-logger 1.10.8",
|
||||
"solana-program 1.10.8",
|
||||
"solana-sdk-macro 1.10.8",
|
||||
"thiserror",
|
||||
"uriparse",
|
||||
"wasm-bindgen",
|
||||
@@ -3815,7 +3815,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-sdk-macro"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bs58 0.4.0",
|
||||
"proc-macro2 1.0.24",
|
||||
@@ -3826,7 +3826,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-send-transaction-service"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"log",
|
||||
@@ -3839,7 +3839,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-stake-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"log",
|
||||
@@ -3849,8 +3849,8 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"solana-config-program",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-metrics",
|
||||
"solana-program-runtime",
|
||||
"solana-sdk",
|
||||
@@ -3860,7 +3860,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-streamer"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"futures-util",
|
||||
@@ -3884,7 +3884,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-transaction-status"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"base64 0.13.0",
|
||||
@@ -3909,20 +3909,20 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-version"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"log",
|
||||
"rustc_version 0.4.0",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-sdk",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "solana-vote-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"log",
|
||||
@@ -3931,8 +3931,8 @@ dependencies = [
|
||||
"rustc_version 0.4.0",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"solana-frozen-abi 1.10.6",
|
||||
"solana-frozen-abi-macro 1.10.6",
|
||||
"solana-frozen-abi 1.10.8",
|
||||
"solana-frozen-abi-macro 1.10.8",
|
||||
"solana-metrics",
|
||||
"solana-program-runtime",
|
||||
"solana-sdk",
|
||||
@@ -3941,7 +3941,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-zk-token-proof-program"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"getrandom 0.1.14",
|
||||
@@ -3954,7 +3954,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "solana-zk-token-sdk"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
dependencies = [
|
||||
"aes-gcm-siv",
|
||||
"arrayref",
|
||||
@@ -3973,7 +3973,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha3 0.9.1",
|
||||
"solana-program 1.10.6",
|
||||
"solana-program 1.10.8",
|
||||
"solana-sdk",
|
||||
"subtle",
|
||||
"thiserror",
|
||||
|
@@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "solana-bpf-programs"
|
||||
description = "Blockchain, Rebuilt for Scale"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
documentation = "https://docs.rs/solana"
|
||||
homepage = "https://solana.com/"
|
||||
readme = "README.md"
|
||||
@@ -26,19 +26,19 @@ itertools = "0.10.1"
|
||||
log = "0.4.11"
|
||||
miow = "0.3.6"
|
||||
net2 = "0.2.37"
|
||||
solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.10.6"}
|
||||
solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.10.6"}
|
||||
solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.10.6"}
|
||||
solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.10.6"}
|
||||
solana-cli-output = { path = "../../cli-output", version = "=1.10.6" }
|
||||
solana-logger = { path = "../../logger", version = "=1.10.6" }
|
||||
solana-measure = { path = "../../measure", version = "=1.10.6" }
|
||||
solana-bpf-rust-invoke = { path = "rust/invoke", version = "=1.10.8"}
|
||||
solana-bpf-loader-program = { path = "../bpf_loader", version = "=1.10.8"}
|
||||
solana-bpf-rust-realloc = { path = "rust/realloc", version = "=1.10.8"}
|
||||
solana-bpf-rust-realloc-invoke = { path = "rust/realloc_invoke", version = "=1.10.8"}
|
||||
solana-cli-output = { path = "../../cli-output", version = "=1.10.8" }
|
||||
solana-logger = { path = "../../logger", version = "=1.10.8" }
|
||||
solana-measure = { path = "../../measure", version = "=1.10.8" }
|
||||
solana_rbpf = "=0.2.24"
|
||||
solana-runtime = { path = "../../runtime", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.6" }
|
||||
solana-transaction-status = { path = "../../transaction-status", version = "=1.10.6" }
|
||||
solana-account-decoder = { path = "../../account-decoder", version = "=1.10.6" }
|
||||
solana-runtime = { path = "../../runtime", version = "=1.10.8" }
|
||||
solana-program-runtime = { path = "../../program-runtime", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../../sdk", version = "=1.10.8" }
|
||||
solana-transaction-status = { path = "../../transaction-status", version = "=1.10.8" }
|
||||
solana-account-decoder = { path = "../../account-decoder", version = "=1.10.8" }
|
||||
|
||||
[[bench]]
|
||||
name = "bpf_loader"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-128bit"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-128bit-dep"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-128bit-dep"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-alloc"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-alloc"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-call-depth"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-call-depth"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-caller-access"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-caller-access"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-custom-heap"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-custom-heap"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[features]
|
||||
default = ["custom-heap"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-dep-crate"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -11,9 +11,9 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
byteorder = { version = "1", default-features = false }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
# list of crates which must be buildable for bpf programs
|
||||
solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.10.6" }
|
||||
solana-address-lookup-table-program = { path = "../../../../programs/address-lookup-table", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-deprecated-loader"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-deprecated-loader"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-dup-accounts"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-dup-accounts"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-error-handling"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -12,7 +12,7 @@ edition = "2021"
|
||||
[dependencies]
|
||||
num-derive = "0.3"
|
||||
num-traits = "0.2"
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
thiserror = "1.0"
|
||||
|
||||
[lib]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-external-spend"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-external-spend"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-finalize"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-finalize"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-instruction-introspection"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-instruction-introspection"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-invoke"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -15,7 +15,7 @@ program = []
|
||||
|
||||
[dependencies]
|
||||
solana-bpf-rust-invoked = { path = "../invoked", default-features = false }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib", "cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-invoke-and-error"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-error"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-invoke-and-ok"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-ok"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-invoke-and-return"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-invoke-and-return"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-invoked"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -14,7 +14,7 @@ default = ["program"]
|
||||
program = []
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["lib", "cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-iter"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-iter"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-log-data"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-log-data"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[features]
|
||||
default = ["program"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-many-args"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,8 +10,8 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-many-args-dep"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -10,7 +10,7 @@ documentation = "https://docs.rs/solana-bpf-rust-many-args-dep"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
targets = ["x86_64-unknown-linux-gnu"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "solana-bpf-rust-mem"
|
||||
version = "1.10.6"
|
||||
version = "1.10.8"
|
||||
description = "Solana BPF test program written in Rust"
|
||||
authors = ["Solana Maintainers <maintainers@solana.foundation>"]
|
||||
repository = "https://github.com/solana-labs/solana"
|
||||
@@ -13,12 +13,12 @@ edition = "2021"
|
||||
no-entrypoint = []
|
||||
|
||||
[dependencies]
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.6" }
|
||||
solana-program = { path = "../../../../sdk/program", version = "=1.10.8" }
|
||||
|
||||
[dev-dependencies]
|
||||
solana-program-runtime = { path = "../../../../program-runtime", version = "=1.10.6" }
|
||||
solana-program-test = { path = "../../../../program-test", version = "=1.10.6" }
|
||||
solana-sdk = { path = "../../../../sdk", version = "=1.10.6" }
|
||||
solana-program-runtime = { path = "../../../../program-runtime", version = "=1.10.8" }
|
||||
solana-program-test = { path = "../../../../program-test", version = "=1.10.8" }
|
||||
solana-sdk = { path = "../../../../sdk", version = "=1.10.8" }
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib", "lib"]
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user