Compare commits

..

16 Commits

Author SHA1 Message Date
mergify[bot]
02a83e7c6e Allow lower shred count (#9410) (#9451)
automerge
2020-04-11 14:49:32 -07:00
sakridge
83263e1737 Calculate account refs fix (#9448) 2020-04-11 12:56:20 -07:00
mergify[bot]
1f7ac22b60 Don't subject authorizing a new stake authority to lockup (#9434) (#9441)
automerge
2020-04-10 17:25:15 -07:00
Michael Vines
747debae56 Cache downloads to speed up CI
(cherry picked from commit b4e00275b2)
2020-04-10 12:25:49 -07:00
mergify[bot]
00b4186469 Improve coverage.sh usability when used locally (#9054) (#9424)
automerge
2020-04-10 05:59:35 -07:00
mergify[bot]
b087dabf4f Rpc: Add getConfirmedSignaturesForAddress (#9407) (#9417)
automerge
2020-04-09 21:20:28 -07:00
mergify[bot]
e00eb0a069 Remove Trust Wallet Beta install instructions (#9396) (#9397)
automerge
2020-04-09 08:52:04 -07:00
mergify[bot]
d4e49ffd06 Rpc: Add getConfirmedTransaction (#9381) (#9392)
automerge
2020-04-09 01:00:34 -07:00
Michael Vines
0f34a190ea Bump version to 1.0.16 2020-04-09 00:05:16 -07:00
mergify[bot]
df2fb8f5b3 Add --no-wait arg to transfer (#9388) (#9390)
automerge
2020-04-08 23:49:40 -07:00
mergify[bot]
80d2a6046b Moar vm.max_map_count (#9389)
automerge
2020-04-08 23:18:30 -07:00
mergify[bot]
24273b826f Add blockstore address-to-signature index (#9367) (#9378)
automerge
2020-04-08 13:55:53 -07:00
mergify[bot]
68d2616e35 stake-monitor: Add 1 SOL grace, to allow for a complaint system account to fund a reasonable number of transactions. (bp #9359) (#9363)
automerge
2020-04-08 11:56:01 -07:00
mergify[bot]
f506d39339 Improve ledger-tool/accounts for easier debuging (#9370) (#9371)
automerge
2020-04-08 11:31:41 -07:00
Michael Vines
bc58c9ec7e Cache solana-perf.tgz to speed up CI (#9360)
automerge

(cherry picked from commit dc91698b3a)
2020-04-07 13:32:13 -07:00
Michael Vines
b57a52cd85 Bump version to 1.0.15 2020-04-07 09:36:47 -07:00
107 changed files with 1774 additions and 899 deletions

704
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-archiver-lib"
version = "1.0.14"
version = "1.0.16"
description = "Solana Archiver Library"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,22 +15,22 @@ ed25519-dalek = "=1.0.0-pre.1"
log = "0.4.8"
rand = "0.6.5"
rand_chacha = "0.1.1"
solana-client = { path = "../client", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
thiserror = "1.0"
serde = "1.0.104"
serde_json = "1.0.46"
serde_derive = "1.0.103"
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-chacha = { path = "../chacha", version = "1.0.14" }
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-archiver-utils = { path = "../archiver-utils", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-chacha = { path = "../chacha", version = "1.0.16" }
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-archiver-utils = { path = "../archiver-utils", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
[dev-dependencies]
hex = "0.4.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-archiver-utils"
version = "1.0.14"
version = "1.0.16"
description = "Solana Archiver Utils"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -11,12 +11,12 @@ edition = "2018"
[dependencies]
log = "0.4.8"
rand = "0.6.5"
solana-chacha = { path = "../chacha", version = "1.0.14" }
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-chacha = { path = "../chacha", version = "1.0.16" }
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
hex = "0.4.0"

View File

@@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-archiver"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -10,11 +10,11 @@ homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
console = "0.9.2"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-archiver-lib = { path = "../archiver-lib", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-archiver-lib = { path = "../archiver-lib", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }

View File

@@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-banking-bench"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -10,11 +10,11 @@ homepage = "https://solana.com/"
[dependencies]
log = "0.4.6"
rayon = "1.2.0"
solana-core = { path = "../core", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-measure = { path = "../measure", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-measure = { path = "../measure", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
rand = "0.6.5"
crossbeam-channel = "0.3"

View File

@@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-exchange"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -18,17 +18,17 @@ rand = "0.6.5"
rayon = "1.2.0"
serde_json = "1.0.46"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-genesis = { path = "../genesis", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-faucet = { path = "../faucet", version = "1.0.14" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-genesis = { path = "../genesis", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-faucet = { path = "../faucet", version = "1.0.16" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
solana-local-cluster = { path = "../local-cluster", version = "1.0.14" }
solana-local-cluster = { path = "../local-cluster", version = "1.0.16" }

View File

@@ -2,14 +2,14 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-streamer"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }

View File

@@ -2,7 +2,7 @@
authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-bench-tps"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -14,24 +14,24 @@ log = "0.4.8"
rayon = "1.2.0"
serde_json = "1.0.46"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-genesis = { path = "../genesis", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-faucet = { path = "../faucet", version = "1.0.14" }
solana-librapay = { path = "../programs/librapay", version = "1.0.14", optional = true }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-measure = { path = "../measure", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-move-loader-program = { path = "../programs/move_loader", version = "1.0.14", optional = true }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-genesis = { path = "../genesis", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-faucet = { path = "../faucet", version = "1.0.16" }
solana-librapay = { path = "../programs/librapay", version = "1.0.16", optional = true }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-measure = { path = "../measure", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-move-loader-program = { path = "../programs/move_loader", version = "1.0.16", optional = true }
[dev-dependencies]
serial_test = "0.3.2"
serial_test_derive = "0.4.0"
solana-local-cluster = { path = "../local-cluster", version = "1.0.14" }
solana-local-cluster = { path = "../local-cluster", version = "1.0.16" }
[features]
move = ["solana-librapay", "solana-move-loader-program"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-chacha-cuda"
version = "1.0.14"
version = "1.0.16"
description = "Solana Chacha Cuda APIs"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -10,12 +10,12 @@ edition = "2018"
[dependencies]
log = "0.4.8"
solana-archiver-utils = { path = "../archiver-utils", version = "1.0.14" }
solana-chacha = { path = "../chacha", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-archiver-utils = { path = "../archiver-utils", version = "1.0.16" }
solana-chacha = { path = "../chacha", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
hex-literal = "0.2.1"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-chacha-sys"
version = "1.0.14"
version = "1.0.16"
description = "Solana chacha-sys"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-chacha"
version = "1.0.14"
version = "1.0.16"
description = "Solana Chacha APIs"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,11 +12,11 @@ edition = "2018"
log = "0.4.8"
rand = "0.6.5"
rand_chacha = "0.1.1"
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
hex-literal = "0.2.1"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-clap-utils"
version = "1.0.14"
version = "1.0.16"
description = "Solana utilities for the clap"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -11,8 +11,8 @@ edition = "2018"
[dependencies]
clap = "2.33.0"
rpassword = "4.0"
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
thiserror = "1.0.11"
tiny-bip39 = "0.7.0"
url = "2.1.0"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-cli-config"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-cli"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -26,28 +26,28 @@ reqwest = { version = "0.10.1", default-features = false, features = ["blocking"
serde = "1.0.104"
serde_derive = "1.0.103"
serde_json = "1.0.46"
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-cli-config = { path = "../cli-config", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-config-program = { path = "../programs/config", version = "1.0.14" }
solana-faucet = { path = "../faucet", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-vote-signer = { path = "../vote-signer", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-cli-config = { path = "../cli-config", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-config-program = { path = "../programs/config", version = "1.0.16" }
solana-faucet = { path = "../faucet", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
solana-vote-signer = { path = "../vote-signer", version = "1.0.16" }
titlecase = "1.1.0"
thiserror = "1.0.11"
url = "2.1.1"
[dev-dependencies]
solana-core = { path = "../core", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.16" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
tempfile = "3.1.0"
[[bin]]

View File

@@ -405,6 +405,7 @@ pub enum CliCommand {
to: Pubkey,
from: SignerIndex,
sign_only: bool,
no_wait: bool,
blockhash_query: BlockhashQuery,
nonce_account: Option<Pubkey>,
nonce_authority: SignerIndex,
@@ -902,6 +903,7 @@ pub fn parse_command(
let lamports = lamports_of_sol(matches, "amount").unwrap();
let to = pubkey_of_signer(matches, "to", wallet_manager)?.unwrap();
let sign_only = matches.is_present(SIGN_ONLY_ARG.name);
let no_wait = matches.is_present("no_wait");
let blockhash_query = BlockhashQuery::new_from_matches(matches);
let nonce_account = pubkey_of_signer(matches, NONCE_ARG.name, wallet_manager)?;
let (nonce_authority, nonce_authority_pubkey) =
@@ -927,6 +929,7 @@ pub fn parse_command(
lamports,
to,
sign_only,
no_wait,
blockhash_query,
nonce_account,
nonce_authority: signer_info.index_of(nonce_authority_pubkey).unwrap(),
@@ -1488,6 +1491,7 @@ fn process_transfer(
to: &Pubkey,
from: SignerIndex,
sign_only: bool,
no_wait: bool,
blockhash_query: &BlockhashQuery,
nonce_account: Option<&Pubkey>,
nonce_authority: SignerIndex,
@@ -1534,7 +1538,11 @@ fn process_transfer(
&fee_calculator,
&tx.message,
)?;
let result = rpc_client.send_and_confirm_transaction_with_spinner(&mut tx, &config.signers);
let result = if no_wait {
rpc_client.send_transaction(&tx)
} else {
rpc_client.send_and_confirm_transaction_with_spinner(&mut tx, &config.signers)
};
log_instruction_custom_error::<SystemError>(result)
}
}
@@ -2080,6 +2088,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
to,
from,
sign_only,
no_wait,
ref blockhash_query,
ref nonce_account,
nonce_authority,
@@ -2091,6 +2100,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
to,
*from,
*sign_only,
*no_wait,
blockhash_query,
nonce_account.as_ref(),
*nonce_authority,
@@ -2497,6 +2507,12 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
.validator(is_valid_signer)
.help("Source account of funds (if different from client local account)"),
)
.arg(
Arg::with_name("no_wait")
.long("no-wait")
.takes_value(false)
.help("Return signature immediately after submitting the transaction, instead of waiting for confirmations"),
)
.offline_args()
.arg(nonce_arg())
.arg(nonce_authority_arg())
@@ -3557,6 +3573,33 @@ mod tests {
to: to_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::All(blockhash_query::Source::Cluster),
nonce_account: None,
nonce_authority: 0,
fee_payer: 0,
},
signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()],
}
);
// Test Transfer no-wait
let test_transfer = test_commands.clone().get_matches_from(vec![
"test",
"transfer",
"--no-wait",
&to_string,
"42",
]);
assert_eq!(
parse_command(&test_transfer, &default_keypair_file, None).unwrap(),
CliCommandInfo {
command: CliCommand::Transfer {
lamports: 42_000_000_000,
to: to_pubkey,
from: 0,
sign_only: false,
no_wait: true,
blockhash_query: BlockhashQuery::All(blockhash_query::Source::Cluster),
nonce_account: None,
nonce_authority: 0,
@@ -3586,6 +3629,7 @@ mod tests {
to: to_pubkey,
from: 0,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(blockhash),
nonce_account: None,
nonce_authority: 0,
@@ -3620,6 +3664,7 @@ mod tests {
to: to_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(
blockhash_query::Source::Cluster,
blockhash
@@ -3658,6 +3703,7 @@ mod tests {
to: to_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(
blockhash_query::Source::NonceAccount(nonce_address),
blockhash

View File

@@ -338,6 +338,7 @@ fn test_create_account_with_seed() {
to: to_address,
from: 0,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(nonce_hash),
nonce_account: Some(nonce_address),
nonce_authority: 0,
@@ -358,6 +359,7 @@ fn test_create_account_with_seed() {
to: to_address,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(
blockhash_query::Source::NonceAccount(nonce_address),
sign_only.blockhash,

View File

@@ -68,6 +68,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::All(blockhash_query::Source::Cluster),
nonce_account: None,
nonce_authority: 0,
@@ -95,6 +96,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(blockhash),
nonce_account: None,
nonce_authority: 0,
@@ -110,6 +112,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash_query::Source::Cluster, blockhash),
nonce_account: None,
nonce_authority: 0,
@@ -147,6 +150,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(
blockhash_query::Source::NonceAccount(nonce_account.pubkey()),
nonce_hash,
@@ -187,6 +191,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(nonce_hash),
nonce_account: Some(nonce_account.pubkey()),
nonce_authority: 0,
@@ -202,6 +207,7 @@ fn test_transfer() {
to: recipient_pubkey,
from: 0,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(
blockhash_query::Source::NonceAccount(nonce_account.pubkey()),
sign_only.blockhash,
@@ -269,6 +275,7 @@ fn test_transfer_multisession_signing() {
to: to_pubkey,
from: 1,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(blockhash),
nonce_account: None,
nonce_authority: 0,
@@ -293,6 +300,7 @@ fn test_transfer_multisession_signing() {
to: to_pubkey,
from: 1,
sign_only: true,
no_wait: false,
blockhash_query: BlockhashQuery::None(blockhash),
nonce_account: None,
nonce_authority: 0,
@@ -314,6 +322,7 @@ fn test_transfer_multisession_signing() {
to: to_pubkey,
from: 1,
sign_only: false,
no_wait: false,
blockhash_query: BlockhashQuery::FeeCalculator(blockhash_query::Source::Cluster, blockhash),
nonce_account: None,
nonce_authority: 0,

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-client"
version = "1.0.14"
version = "1.0.16"
description = "Solana Client"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -19,10 +19,10 @@ reqwest = { version = "0.10.1", default-features = false, features = ["blocking"
serde = "1.0.104"
serde_derive = "1.0.103"
serde_json = "1.0.46"
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
thiserror = "1.0"
tungstenite = "0.10.1"
url = "2.1.1"
@@ -31,4 +31,4 @@ url = "2.1.1"
assert_matches = "1.3.0"
jsonrpc-core = "14.0.5"
jsonrpc-http-server = "14.0.6"
solana-logger = { path = "../logger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.16" }

View File

@@ -1,7 +1,7 @@
[package]
name = "solana-core"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
documentation = "https://docs.rs/solana"
homepage = "https://solana.com/"
readme = "../README.md"
@@ -43,34 +43,34 @@ regex = "1.3.4"
serde = "1.0.104"
serde_derive = "1.0.103"
serde_json = "1.0.46"
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.14" }
solana-faucet = { path = "../faucet", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.16" }
solana-faucet = { path = "../faucet", version = "1.0.16" }
ed25519-dalek = "=1.0.0-pre.1"
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-merkle-tree = { path = "../merkle-tree", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-measure = { path = "../measure", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-chacha-cuda = { path = "../chacha-cuda", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-vote-signer = { path = "../vote-signer", version = "1.0.14" }
solana-sys-tuner = { path = "../sys-tuner", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-merkle-tree = { path = "../merkle-tree", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-measure = { path = "../measure", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-chacha-cuda = { path = "../chacha-cuda", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
solana-vote-signer = { path = "../vote-signer", version = "1.0.16" }
solana-sys-tuner = { path = "../sys-tuner", version = "1.0.16" }
tempfile = "3.1.0"
thiserror = "1.0"
tokio = "0.1"
tokio-codec = "0.1"
tokio-fs = "0.1"
tokio-io = "0.1"
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.14" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.16" }
trees = "0.2.1"
[dev-dependencies]

View File

@@ -13,15 +13,18 @@ use std::thread;
use std::thread::{Builder, JoinHandle};
use std::time::Duration;
// - To try and keep the RocksDB size under 512GB:
// Seeing about 1600b/shred, using 2000b/shred for margin, so 250m shreds can be stored in 512gb.
// at 5k shreds/slot at 50k tps, this is 500k slots (~5.5 hours).
// - To try and keep the RocksDB size under 400GB:
// Seeing about 1600b/shred, using 2000b/shred for margin, so 200m shreds can be stored in 400gb.
// at 5k shreds/slot at 50k tps, this is 500k slots (~5 hours).
// At idle, 60 shreds/slot this is about 4m slots (18 days)
// This is chosen to allow enough time for
// - A validator to download a snapshot from a peer and boot from it
// - To make sure that if a validator needs to reboot from its own snapshot, it has enough slots locally
// to catch back up to where it was when it stopped
pub const DEFAULT_MAX_LEDGER_SHREDS: u64 = 250_000_000;
pub const DEFAULT_MAX_LEDGER_SHREDS: u64 = 200_000_000;
// Allow down to 50m, or 3.5 days at idle, 1hr at 50k load, around ~100GB
pub const DEFAULT_MIN_MAX_LEDGER_SHREDS: u64 = 50_000_000;
// Check for removing slots at this interval so we don't purge too often
// and starve other blockstore users.

View File

@@ -24,7 +24,9 @@ use solana_sdk::{
timing::slot_duration_from_slots_per_year,
transaction::{self, Transaction},
};
use solana_transaction_status::{ConfirmedBlock, TransactionEncoding, TransactionStatus};
use solana_transaction_status::{
ConfirmedBlock, ConfirmedTransaction, TransactionEncoding, TransactionStatus,
};
use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY};
use std::{
collections::HashMap,
@@ -36,6 +38,7 @@ use std::{
};
const MAX_QUERY_ITEMS: usize = 256;
const MAX_SLOT_RANGE: u64 = 10_000;
type RpcResponse<T> = Result<Response<T>>;
@@ -503,6 +506,37 @@ impl JsonRpcRequestProcessor {
}
})
}
pub fn get_confirmed_transaction(
&self,
signature: Signature,
encoding: Option<TransactionEncoding>,
) -> Result<Option<ConfirmedTransaction>> {
if self.config.enable_rpc_transaction_history {
Ok(self
.blockstore
.get_confirmed_transaction(signature, encoding)
.unwrap_or(None))
} else {
Ok(None)
}
}
pub fn get_confirmed_signatures_for_address(
&self,
pubkey: Pubkey,
start_slot: Slot,
end_slot: Slot,
) -> Result<Vec<Signature>> {
if self.config.enable_rpc_transaction_history {
Ok(self
.blockstore
.get_confirmed_signatures_for_address(pubkey, start_slot, end_slot)
.unwrap_or_else(|_| vec![]))
} else {
Ok(vec![])
}
}
}
fn get_tpu_addr(cluster_info: &Arc<RwLock<ClusterInfo>>) -> Result<SocketAddr> {
@@ -744,6 +778,23 @@ pub trait RpcSol {
start_slot: Slot,
end_slot: Option<Slot>,
) -> Result<Vec<Slot>>;
#[rpc(meta, name = "getConfirmedTransaction")]
fn get_confirmed_transaction(
&self,
meta: Self::Metadata,
signature_str: String,
encoding: Option<TransactionEncoding>,
) -> Result<Option<ConfirmedTransaction>>;
#[rpc(meta, name = "getConfirmedSignaturesForAddress")]
fn get_confirmed_signatures_for_address(
&self,
meta: Self::Metadata,
pubkey_str: String,
start_slot: Slot,
end_slot: Slot,
) -> Result<Vec<String>>;
}
pub struct RpcSolImpl;
@@ -1287,6 +1338,51 @@ impl RpcSol for RpcSolImpl {
fn get_block_time(&self, meta: Self::Metadata, slot: Slot) -> Result<Option<UnixTimestamp>> {
meta.request_processor.read().unwrap().get_block_time(slot)
}
fn get_confirmed_transaction(
&self,
meta: Self::Metadata,
signature_str: String,
encoding: Option<TransactionEncoding>,
) -> Result<Option<ConfirmedTransaction>> {
let signature = verify_signature(&signature_str)?;
meta.request_processor
.read()
.unwrap()
.get_confirmed_transaction(signature, encoding)
}
fn get_confirmed_signatures_for_address(
&self,
meta: Self::Metadata,
pubkey_str: String,
start_slot: Slot,
end_slot: Slot,
) -> Result<Vec<String>> {
let pubkey = verify_pubkey(pubkey_str)?;
if end_slot <= start_slot {
return Err(Error::invalid_params(format!(
"start_slot {} must be smaller than end_slot {}",
start_slot, end_slot
)));
}
if end_slot - start_slot > MAX_SLOT_RANGE {
return Err(Error::invalid_params(format!(
"Slot range too large; max {}",
MAX_SLOT_RANGE
)));
}
meta.request_processor
.read()
.unwrap()
.get_confirmed_signatures_for_address(pubkey, start_slot, end_slot)
.map(|signatures| {
signatures
.iter()
.map(|signature| signature.to_string())
.collect()
})
}
}
#[cfg(test)]

View File

@@ -70,9 +70,14 @@ impl TransactionStatusService {
}
.expect("FeeCalculator must exist");
let fee = fee_calculator.calculate_fee(transaction.message());
let (writable_keys, readonly_keys) =
transaction.message.get_account_keys_by_lock_type();
blockstore
.write_transaction_status(
(transaction.signatures[0], slot),
slot,
transaction.signatures[0],
writable_keys,
readonly_keys,
&TransactionStatusMeta {
status,
fee,

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-crate-features"
version = "1.0.14"
version = "1.0.16"
description = "Solana Crate Features"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

View File

@@ -21,6 +21,8 @@ To interact with a Solana node inside a JavaScript application, use the [solana-
* [getClusterNodes](jsonrpc-api.md#getclusternodes)
* [getConfirmedBlock](jsonrpc-api.md#getconfirmedblock)
* [getConfirmedBlocks](jsonrpc-api.md#getconfirmedblocks)
* [getConfirmedSignaturesForAddress](jsonrpc-api.md#getconfirmedsignaturesforaddress)
* [getConfirmedTransaction](jsonrpc-api.md#getconfirmedtransaction)
* [getEpochInfo](jsonrpc-api.md#getepochinfo)
* [getEpochSchedule](jsonrpc-api.md#getepochschedule)
* [getFeeCalculatorForBlockhash](jsonrpc-api.md#getfeecalculatorforblockhash)
@@ -345,6 +347,72 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"m
{"jsonrpc":"2.0","result":[5,6,7,8,9,10],"id":1}
```
### getConfirmedSignaturesForAddress
Returns a list of all the confirmed signatures for transactions involving an address, within a specified Slot range. Max range allowed is 10_000 Slots.
#### Parameters:
* `<string>` - account address as base-58 encoded string
* `<u64>` - start slot, inclusive
* `<u64>` - end slot, inclusive
#### Results:
The result field will be an array of:
* `<string>` - transaction signature as base-58 encoded string
The signatures will be ordered based on the Slot in which they were confirmed in, from lowest to highest Slot
#### Example:
```bash
// Request
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedSignaturesForAddress","params":["6H94zdiaYfRfPfKjYLjyr2VFBg6JHXygy84r3qhc3NsC", 0, 100]}' localhost:8899
// Result
{"jsonrpc":"2.0","result":{["35YGay1Lwjwgxe9zaH6APSHbt9gYQUCtBWTNL3aVwVGn9xTFw2fgds7qK5AL29mP63A9j3rh8KpN1TgSR62XCaby","4bJdGN8Tt2kLWZ3Fa1dpwPSEkXWWTSszPSf1rRVsCwNjxbbUdwTeiWtmi8soA26YmwnKD4aAxNp8ci1Gjpdv4gsr","4LQ14a7BYY27578Uj8LPCaVhSdJGLn9DJqnUJHpy95FMqdKf9acAhUhecPQNjNUy6VoNFUbvwYkPociFSf87cWbG"]},"id":1}
```
### getConfirmedTransaction
Returns transaction details for a confirmed transaction
#### Parameters:
* `<string>` - transaction signature as base-58 encoded string
* `<string>` - (optional) encoding for the returned Transaction, either "json" or "binary". If not provided, the default encoding is JSON.
#### Results:
The result field will be an object with the following fields:
* `slot: <u64>` - the slot this transaction was processed in
* `transaction: <object|string>` - [Transaction](#transaction-structure) object, either in JSON format or base-58 encoded binary data, depending on encoding parameter
* `meta: <object>` - transaction status metadata object, containing `null` or:
* `err: <object | null>` - Error if transaction failed, null if transaction succeeded. [TransactionError definitions](https://github.com/solana-labs/solana/blob/master/sdk/src/transaction.rs#L14)
* `fee: <u64>` - fee this transaction was charged, as u64 integer
* `preBalances: <array>` - array of u64 account balances from before the transaction was processed
* `postBalances: <array>` - array of u64 account balances after the transaction was processed
* DEPRECATED: `status: <object>` - Transaction status
* `"Ok": <null>` - Transaction was successful
* `"Err": <ERR>` - Transaction failed with TransactionError
#### Example:
```bash
// Request
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedTransaction","params":["35YGay1Lwjwgxe9zaH6APSHbt9gYQUCtBWTNL3aVwVGn9xTFw2fgds7qK5AL29mP63A9j3rh8KpN1TgSR62XCaby", "json"]}' localhost:8899
// Result
{"jsonrpc":"2.0","result":{"slot":430,"transaction":{"message":{"accountKeys":["6H94zdiaYfRfPfKjYLjyr2VFBg6JHXygy84r3qhc3NsC","39UAy8hsoYPywGPGdmun747omSr79zLSjqvPJN3zetoH","SysvarS1otHashes111111111111111111111111111","SysvarC1ock11111111111111111111111111111111","Vote111111111111111111111111111111111111111"],"header":{"numReadonlySignedAccounts":0,"numReadonlyUnsignedAccounts":3,"numRequiredSignatures":2},"instructions":[{"accounts":[1,2,3],"data":"29z5mr1JoRmJYQ6ynmk3pf31cGFRziAF1M3mT3L6sFXf5cKLdkEaMXMT8AqLpD4CpcupHmuMEmtZHpomrwfdZetSomNy3d","programIdIndex":4}],"recentBlockhash":"EFejToxii1L5aUF2NrK9dsbAEmZSNyN5nsipmZHQR1eA"},"signatures":["35YGay1Lwjwgxe9zaH6APSHbt9gYQUCtBWTNL3aVwVGn9xTFw2fgds7qK5AL29mP63A9j3rh8KpN1TgSR62XCaby","4vANMjSKiwEchGSXwVrQkwHnmsbKQmy9vdrsYxWdCup1bLsFzX8gKrFTSVDCZCae2dbxJB9mPNhqB2sD1vvr4sAD"]},"meta":{"err":null,"fee":18000,"postBalances":[499999972500,15298080,1,1,1],"preBalances":[499999990500,15298080,1,1,1],"status":{"Ok":null}}},"id":1}
// Request
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0","id":1,"method":"getConfirmedTransaction","params":["35YGay1Lwjwgxe9zaH6APSHbt9gYQUCtBWTNL3aVwVGn9xTFw2fgds7qK5AL29mP63A9j3rh8KpN1TgSR62XCaby", "binary"]}' localhost:8899
// Result
{"jsonrpc":"2.0","result":{"slot":430,"transaction":"81UZJt4dh4Do66jDhrgkQudS8J2N6iG3jaVav7gJrqJSFY4Ug53iA9JFJZh2gxKWcaFdLJwhHx9mRdg9JwDAWB4ywiu5154CRwXV4FMdnPLg7bhxRLwhhYaLsVgMF5AyNRcTzjCVoBvqFgDU7P8VEKDEiMvD3qxzm1pLZVxDG1LTQpT3Dz4Uviv4KQbFQNuC22KupBoyHFB7Zh6KFdMqux4M9PvhoqcoJsJKwXjWpKu7xmEKnnrSbfLadkgjBmmjhW3fdTrFvnhQdTkhtdJxUL1xS9GMuJQer8YgSKNtUXB1eXZQwXU8bU2BjYkZE6Q5Xww8hu9Z4E4Mo4QsooVtHoP6BM3NKw8zjVbWfoCQqxTrwuSzrNCWCWt58C24LHecH67CTt2uXbYSviixvrYkK7A3t68BxTJcF1dXJitEPTFe2ceTkauLJqrJgnER4iUrsjr26T8YgWvpY9wkkWFSviQW6wV5RASTCUasVEcrDiaKj8EQMkgyDoe9HyKitSVg67vMWJFpUXpQobseWJUs5FTWWzmfHmFp8FZ","meta":{"err":null,"fee":18000,"postBalances":[499999972500,15298080,1,1,1],"preBalances":[499999990500,15298080,1,1,1],"status":{"Ok":null}}},"id":1}
```
### getEpochInfo
Returns information about the current epoch
@@ -872,7 +940,7 @@ The result field will be a JSON object with the following fields:
// Request
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getVersion"}' http://localhost:8899
// Result
{"jsonrpc":"2.0","result":{"solana-core": "1.0.14"},"id":1}
{"jsonrpc":"2.0","result":{"solana-core": "1.0.16"},"id":1}
```
### getVoteAccounts

View File

@@ -171,7 +171,7 @@ $ solana send-timestamp <PUBKEY> <PROCESS_ID> --date 2018-12-24T23:59:00
## Usage
### solana-cli
```text
solana-cli 1.0.14 [channel=unknown commit=unknown]
solana-cli 1.0.16 [channel=unknown commit=unknown]
Blockchain, Rebuilt for Scale
USAGE:

View File

@@ -5,50 +5,18 @@ simplest way for most users to get started with a Solana wallet.
## Install Trust Wallet
#### iOS
- Open the App Store
- Download “Trust: Crypto & Bitcoin Wallet” from Six Days LLC
- Requires iOS 13.0 or higher
- Open Trust Wallet and follow the app prompts to get started
***
#### Android
**NOTE: At this time, Solana's SOL tokens are only supported in the Beta version
of Trust Wallet for Android. The following steps explain how to install this
Beta version to start using your Solana wallet. Check back here or check the
latest official Trust Wallet release notes for when support is added to their
official Android release.**
- Open the Play Store
- Download the official version of Trust Wallet
- “Trust: Crypto & Bitcoin Wallet” from Six Days LLC
- Download “Trust Crypto Wallet” from Six Days LLC
- Requires Android 6.0 or higher
![Install the Official Version of Trust Wallet](../.gitbook/assets/install-official-trust-wallet.png)
##### Enable Beta version of Trust Wallet
- Make sure you already have the official version installed
- Open Play Store and view Trust Wallet's app page
- Scroll down to the bottom to the "Beta" section and tap "Join"
- It may take a few minutes for your device to get access to the Beta version
![Join the Beta program](../.gitbook/assets/join-beta-trust-wallet.png)
##### Upgrade to the Beta version
- Open Play Store .
- Tap Menu --> My apps and games --> Beta.
- Tap Trust Wallet
- Tap Upgrade when brought back to the Trust Wallet (Beta) install page
![Find Beta app you've joined](../.gitbook/assets/find-beta-apps.png)
***
![Upgrade to Trust Wallet Beta](../.gitbook/assets/update-trust-wallet-to-beta.png)
##### Beta Install Support for Android
- [Google's Official Help for Installing Beta Versions of Apps](https://support.google.com/googleplay/answer/7003180?hl=en)
- Open Trust Wallet and follow the app prompts to get started
## Add Solana (SOL) tokens to your wallet
- From the main page, go to the “Tokens” tab at the top of the screen

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-faucet"
version = "1.0.14"
version = "1.0.16"
description = "Solana Faucet"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -19,10 +19,10 @@ clap = "2.33"
log = "0.4.8"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
tokio = "0.1"
tokio-codec = "0.1"

View File

@@ -21,10 +21,20 @@ if [[ ! -f target/perf-libs/.$VERSION ]]; then
(
set -x
cd target/perf-libs
curl -L --retry 5 --retry-delay 2 --retry-connrefused -o solana-perf.tgz \
https://github.com/solana-labs/solana-perf-libs/releases/download/$PERF_LIBS_VERSION/solana-perf.tgz
if [[ -r ~/.cache/solana-perf-$PERF_LIBS_VERSION.tgz ]]; then
cp ~/.cache/solana-perf-$PERF_LIBS_VERSION.tgz solana-perf.tgz
else
curl -L --retry 5 --retry-delay 2 --retry-connrefused -o solana-perf.tgz \
https://github.com/solana-labs/solana-perf-libs/releases/download/$PERF_LIBS_VERSION/solana-perf.tgz
fi
tar zxvf solana-perf.tgz
rm -f solana-perf.tgz
if [[ ! -r ~/.cache/solana-perf-$PERF_LIBS_VERSION.tgz ]]; then
# Save it for next time
mkdir -p ~/.cache
mv solana-perf.tgz ~/.cache/solana-perf-$PERF_LIBS_VERSION.tgz
fi
touch .$VERSION
)

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-genesis-programs"
version = "1.0.14"
version = "1.0.16"
description = "Solana genesis programs"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -10,16 +10,16 @@ edition = "2018"
[dependencies]
log = { version = "0.4.8" }
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-config-program = { path = "../programs/config", version = "1.0.14" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vest-program = { path = "../programs/vest", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "1.0.16" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
solana-config-program = { path = "../programs/config", version = "1.0.16" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vest-program = { path = "../programs/vest", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
[lib]
crate-type = ["lib"]

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-genesis"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -15,13 +15,13 @@ chrono = "0.4"
serde = "1.0.104"
serde_json = "1.0.46"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
tempfile = "3.1.0"
[[bin]]

View File

@@ -3,19 +3,19 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-gossip"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
[dependencies]
clap = "2.33.0"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-net-utils = { path = "../net-utils", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-net-utils = { path = "../net-utils", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-install"
description = "The solana cluster software installer"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -24,11 +24,11 @@ reqwest = { version = "0.10.1", default-features = false, features = ["blocking"
serde = "1.0.104"
serde_derive = "1.0.103"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-config-program = { path = "../programs/config", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-config-program = { path = "../programs/config", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
semver = "0.9.0"
tar = "0.4.26"
tempdir = "0.3.7"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-keygen"
version = "1.0.14"
version = "1.0.16"
description = "Solana key generation utility"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -13,10 +13,10 @@ bs58 = "0.3.0"
clap = "2.33"
dirs = "2.0.2"
num_cpus = "1.12.0"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-cli-config = { path = "../cli-config", version = "1.0.14" }
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-cli-config = { path = "../cli-config", version = "1.0.16" }
solana-remote-wallet = { path = "../remote-wallet", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
tiny-bip39 = "0.7.0"
[[bin]]

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-ledger-tool"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -14,13 +14,13 @@ clap = "2.33.0"
histogram = "*"
serde_json = "1.0.46"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
tempfile = "3.1.0"
[dev-dependencies]

View File

@@ -808,6 +808,12 @@ fn main() {
.arg(&account_paths_arg)
.arg(&halt_at_slot_arg)
.arg(&hard_forks_arg)
.arg(
Arg::with_name("include_sysvars")
.long("include-sysvars")
.takes_value(false)
.help("Include sysvars too"),
)
).subcommand(
SubCommand::with_name("prune")
.about("Prune the ledger at the block height")
@@ -1090,6 +1096,7 @@ fn main() {
..ProcessOptions::default()
};
let genesis_config = open_genesis_config(&ledger_path);
let include_sysvars = arg_matches.is_present("include_sysvars");
match load_bank_forks(arg_matches, &ledger_path, &genesis_config, process_options) {
Ok((bank_forks, bank_forks_info, _leader_schedule_cache, _snapshot_hash)) => {
let slot = dev_halt_at_slot.unwrap_or_else(|| {
@@ -1105,19 +1112,23 @@ fn main() {
exit(1);
});
let accounts: Vec<_> = bank
let accounts: BTreeMap<_, _> = bank
.get_program_accounts(None)
.into_iter()
.filter(|(pubkey, _account)| !solana_sdk::sysvar::is_sysvar_id(pubkey))
.filter(|(pubkey, _account)| {
include_sysvars || !solana_sdk::sysvar::is_sysvar_id(pubkey)
})
.collect();
println!("---");
for (pubkey, account) in accounts.into_iter() {
let data_len = account.data.len();
println!("{}:", pubkey);
println!(" - lamports: {}", account.lamports);
println!(" - owner: '{}'", account.owner);
println!(" - executable: {}", account.executable);
println!(" - data: '{}'", bs58::encode(account.data).into_string());
println!(" - data_len: {}", data_len);
}
}
Err(err) => {

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-ledger"
version = "1.0.14"
version = "1.0.16"
description = "Solana ledger"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -28,19 +28,19 @@ reed-solomon-erasure = { package = "solana-reed-solomon-erasure", version = "4.0
regex = "1.3.4"
serde = "1.0.104"
serde_bytes = "0.11.3"
solana-transaction-status = { path = "../transaction-status", version = "1.0.14" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-measure = { path = "../measure", version = "1.0.14" }
solana-merkle-tree = { path = "../merkle-tree", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-perf = { path = "../perf", version = "1.0.14" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.16" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-measure = { path = "../measure", version = "1.0.16" }
solana-merkle-tree = { path = "../merkle-tree", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-perf = { path = "../perf", version = "1.0.16" }
ed25519-dalek = "1.0.0-pre.1"
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
symlink = "0.1.0"
tar = "0.4.26"
thiserror = "1.0"
@@ -57,7 +57,7 @@ features = ["lz4"]
[dev-dependencies]
assert_matches = "1.3.0"
matches = "0.1.6"
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
[lib]
crate-type = ["lib"]

View File

@@ -37,8 +37,8 @@ use solana_sdk::{
transaction::Transaction,
};
use solana_transaction_status::{
ConfirmedBlock, EncodedTransaction, Rewards, RpcTransactionStatusMeta, TransactionEncoding,
TransactionStatusMeta, TransactionWithStatusMeta,
ConfirmedBlock, ConfirmedTransaction, EncodedTransaction, Rewards, RpcTransactionStatusMeta,
TransactionEncoding, TransactionStatusMeta, TransactionWithStatusMeta,
};
use solana_vote_program::{vote_instruction::VoteInstruction, vote_state::TIMESTAMP_SLOT_INTERVAL};
use std::{
@@ -87,6 +87,7 @@ pub struct Blockstore {
data_shred_cf: LedgerColumn<cf::ShredData>,
code_shred_cf: LedgerColumn<cf::ShredCode>,
transaction_status_cf: LedgerColumn<cf::TransactionStatus>,
address_signatures_cf: LedgerColumn<cf::AddressSignatures>,
transaction_status_index_cf: LedgerColumn<cf::TransactionStatusIndex>,
active_transaction_status_index: RwLock<u64>,
rewards_cf: LedgerColumn<cf::Rewards>,
@@ -201,6 +202,7 @@ impl Blockstore {
let data_shred_cf = db.column();
let code_shred_cf = db.column();
let transaction_status_cf = db.column();
let address_signatures_cf = db.column();
let transaction_status_index_cf = db.column();
let rewards_cf = db.column();
@@ -217,7 +219,9 @@ impl Blockstore {
// Get active transaction-status index or 0
let active_transaction_status_index = db
.iter::<cf::TransactionStatusIndex>(IteratorMode::Start)?
.next()
.next();
let initialize_transaction_status_index = active_transaction_status_index.is_none();
let active_transaction_status_index = active_transaction_status_index
.and_then(|(_, data)| {
let index0: TransactionStatusIndexMeta = deserialize(&data).unwrap();
if index0.frozen {
@@ -241,6 +245,7 @@ impl Blockstore {
data_shred_cf,
code_shred_cf,
transaction_status_cf,
address_signatures_cf,
transaction_status_index_cf,
active_transaction_status_index: RwLock::new(active_transaction_status_index),
rewards_cf,
@@ -251,6 +256,9 @@ impl Blockstore {
lowest_cleanup_slot: Arc::new(RwLock::new(0)),
no_compaction: false,
};
if initialize_transaction_status_index {
blockstore.initialize_transaction_status_index()?;
}
Ok(blockstore)
}
@@ -386,10 +394,14 @@ impl Blockstore {
&mut w_active_transaction_status_index,
to_slot,
)? {
columns_empty &= &self
columns_empty &= self
.db
.delete_range_cf::<cf::TransactionStatus>(&mut write_batch, index, index + 1)
.unwrap_or(false);
.unwrap_or(false)
& self
.db
.delete_range_cf::<cf::AddressSignatures>(&mut write_batch, index, index + 1)
.unwrap_or(false);
}
let mut write_timer = Measure::start("write_batch");
if let Err(e) = self.db.write(write_batch) {
@@ -449,6 +461,14 @@ impl Blockstore {
.transaction_status_cf
.compact_range(0, 2)
.unwrap_or(false)
&& self
.address_signatures_cf
.compact_range(0, 2)
.unwrap_or(false)
&& self
.transaction_status_index_cf
.compact_range(0, 2)
.unwrap_or(false)
&& self
.rewards_cf
.compact_range(from_slot, to_slot)
@@ -1512,8 +1532,12 @@ impl Blockstore {
.put(1, &TransactionStatusIndexMeta::default())?;
// This dummy status improves compaction performance
self.transaction_status_cf.put(
(2, Signature::default(), 0),
cf::TransactionStatus::as_index(2),
&TransactionStatusMeta::default(),
)?;
self.address_signatures_cf.put(
cf::AddressSignatures::as_index(2),
&AddressSignatureMeta::default(),
)
}
@@ -1564,15 +1588,11 @@ impl Blockstore {
}
}
fn make_transaction_status_index(
fn get_primary_index(
&self,
index: (Signature, Slot),
slot: Slot,
w_active_transaction_status_index: &mut u64,
) -> Result<(u64, Signature, Slot)> {
let (signature, slot) = index;
if self.transaction_status_index_cf.get(0)?.is_none() {
self.initialize_transaction_status_index()?;
}
) -> Result<u64> {
let i = *w_active_transaction_status_index;
let mut index_meta = self.transaction_status_index_cf.get(i)?.unwrap();
if slot > index_meta.max_slot {
@@ -1580,7 +1600,7 @@ impl Blockstore {
index_meta.max_slot = slot;
self.transaction_status_index_cf.put(i, &index_meta)?;
}
Ok((i, signature, slot))
Ok(i)
}
pub fn read_transaction_status(
@@ -1598,16 +1618,32 @@ impl Blockstore {
pub fn write_transaction_status(
&self,
index: (Signature, Slot),
slot: Slot,
signature: Signature,
writable_keys: Vec<&Pubkey>,
readonly_keys: Vec<&Pubkey>,
status: &TransactionStatusMeta,
) -> Result<()> {
// This write lock prevents interleaving issues with the transactions_status_index_cf by
// gating writes to that column
// This write lock prevents interleaving issues with the transaction_status_index_cf by gating
// writes to that column
let mut w_active_transaction_status_index =
self.active_transaction_status_index.write().unwrap();
let index =
self.make_transaction_status_index(index, &mut w_active_transaction_status_index)?;
self.transaction_status_cf.put(index, status)
let primary_index = self.get_primary_index(slot, &mut w_active_transaction_status_index)?;
self.transaction_status_cf
.put((primary_index, signature, slot), status)?;
for address in writable_keys {
self.address_signatures_cf.put(
(primary_index, *address, slot, signature),
&AddressSignatureMeta { writeable: true },
)?;
}
for address in readonly_keys {
self.address_signatures_cf.put(
(primary_index, *address, slot, signature),
&AddressSignatureMeta { writeable: false },
)?;
}
Ok(())
}
// Returns a transaction status if it was processed in a root, as well as a loop counter for
@@ -1645,6 +1681,85 @@ impl Blockstore {
.map(|(status, _)| status)
}
/// Returns a complete transaction if it was processed in a root
pub fn get_confirmed_transaction(
&self,
signature: Signature,
encoding: Option<TransactionEncoding>,
) -> Result<Option<ConfirmedTransaction>> {
if let Some((slot, status)) = self.get_transaction_status(signature.clone())? {
let transaction = self.find_transaction_in_slot(slot, signature)?
.expect("Transaction to exist in slot entries if it exists in statuses and hasn't been cleaned up");
let encoding = encoding.unwrap_or(TransactionEncoding::Json);
let encoded_transaction = EncodedTransaction::encode(transaction, encoding);
Ok(Some(ConfirmedTransaction {
slot,
transaction: TransactionWithStatusMeta {
transaction: encoded_transaction,
meta: Some(status.into()),
},
}))
} else {
Ok(None)
}
}
fn find_transaction_in_slot(
&self,
slot: Slot,
signature: Signature,
) -> Result<Option<Transaction>> {
let slot_entries = self.get_slot_entries(slot, 0, None)?;
Ok(slot_entries
.iter()
.cloned()
.flat_map(|entry| entry.transactions)
.find(|transaction| transaction.signatures[0] == signature))
}
// Returns all cached signatures for an address, ordered by slot that the transaction was
// processed in
fn find_address_signatures(
&self,
pubkey: Pubkey,
start_slot: Slot,
end_slot: Slot,
) -> Result<Vec<(Slot, Signature)>> {
let mut signatures: Vec<(Slot, Signature)> = vec![];
for transaction_status_cf_primary_index in 0..=1 {
let index_iterator = self.address_signatures_cf.iter(IteratorMode::From(
(
transaction_status_cf_primary_index,
pubkey,
start_slot,
Signature::default(),
),
IteratorDirection::Forward,
))?;
for ((i, address, slot, signature), _) in index_iterator {
if i != transaction_status_cf_primary_index || slot > end_slot || address != pubkey
{
break;
}
if self.is_root(slot) {
signatures.push((slot, signature));
}
}
}
signatures.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap());
Ok(signatures)
}
pub fn get_confirmed_signatures_for_address(
&self,
pubkey: Pubkey,
start_slot: Slot,
end_slot: Slot,
) -> Result<Vec<Signature>> {
self.find_address_signatures(pubkey, start_slot, end_slot)
.map(|signatures| signatures.iter().map(|(_, signature)| *signature).collect())
}
pub fn read_rewards(&self, index: Slot) -> Result<Option<Rewards>> {
self.rewards_cf.get(index)
}
@@ -2771,7 +2886,18 @@ pub mod tests {
.iter::<cf::TransactionStatus>(IteratorMode::Start)
.unwrap()
.next()
.map(|((_, _, slot), _)| slot >= min_slot)
.map(|((primary_index, _, slot), _)| {
slot >= min_slot || (primary_index == 2 && slot == 0)
})
.unwrap_or(true)
& blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::Start)
.unwrap()
.next()
.map(|((primary_index, _, slot, _), _)| {
slot >= min_slot || (primary_index == 2 && slot == 0)
})
.unwrap_or(true)
& blockstore
.db
@@ -5344,14 +5470,18 @@ pub mod tests {
let transaction_status_index_cf = blockstore.db.column::<cf::TransactionStatusIndex>();
let slot0 = 10;
assert!(transaction_status_index_cf.get(0).unwrap().is_none());
assert!(transaction_status_index_cf.get(1).unwrap().is_none());
// Primary index column is initialized on Blockstore::open
assert!(transaction_status_index_cf.get(0).unwrap().is_some());
assert!(transaction_status_index_cf.get(1).unwrap().is_some());
for _ in 0..5 {
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
blockstore
.write_transaction_status(
(Signature::new(&random_bytes), slot0),
slot0,
Signature::new(&random_bytes),
vec![&Pubkey::new(&random_bytes[0..32])],
vec![&Pubkey::new(&random_bytes[32..])],
&TransactionStatusMeta::default(),
)
.unwrap();
@@ -5373,7 +5503,7 @@ pub mod tests {
let first_status_entry = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
@@ -5382,6 +5512,18 @@ pub mod tests {
.0;
assert_eq!(first_status_entry.0, 0);
assert_eq!(first_status_entry.2, slot0);
let first_address_entry = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
.next()
.unwrap()
.0;
assert_eq!(first_address_entry.0, 0);
assert_eq!(first_address_entry.2, slot0);
blockstore.run_purge(0, 8).unwrap();
// First successful prune freezes index 0
@@ -5402,7 +5544,10 @@ pub mod tests {
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
blockstore
.write_transaction_status(
(Signature::new(&random_bytes), slot1),
slot1,
Signature::new(&random_bytes),
vec![&Pubkey::new(&random_bytes[0..32])],
vec![&Pubkey::new(&random_bytes[32..])],
&TransactionStatusMeta::default(),
)
.unwrap();
@@ -5424,11 +5569,11 @@ pub mod tests {
}
);
// Index 0 statuses still exist
// Index 0 statuses and address records still exist
let first_status_entry = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
@@ -5437,11 +5582,23 @@ pub mod tests {
.0;
assert_eq!(first_status_entry.0, 0);
assert_eq!(first_status_entry.2, 10);
// New statuses are stored in index 1
let first_address_entry = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
.next()
.unwrap()
.0;
assert_eq!(first_address_entry.0, 0);
assert_eq!(first_address_entry.2, slot0);
// New statuses and address records are stored in index 1
let index1_first_status_entry = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(1, Signature::default(), 0),
cf::TransactionStatus::as_index(1),
IteratorDirection::Forward,
))
.unwrap()
@@ -5450,6 +5607,18 @@ pub mod tests {
.0;
assert_eq!(index1_first_status_entry.0, 1);
assert_eq!(index1_first_status_entry.2, slot1);
let index1_first_address_entry = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(1),
IteratorDirection::Forward,
))
.unwrap()
.next()
.unwrap()
.0;
assert_eq!(index1_first_address_entry.0, 1);
assert_eq!(index1_first_address_entry.2, slot1);
blockstore.run_purge(0, 18).unwrap();
// Successful prune toggles TransactionStatusIndex
@@ -5468,11 +5637,11 @@ pub mod tests {
}
);
// Index 0 has been pruned, so first status entry is now index 1
// Index 0 has been pruned, so first status and address entries are now index 1
let first_status_entry = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
@@ -5481,6 +5650,18 @@ pub mod tests {
.0;
assert_eq!(first_status_entry.0, 1);
assert_eq!(first_status_entry.2, slot1);
let first_address_entry = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap()
.next()
.unwrap()
.0;
assert_eq!(first_address_entry.0, 1);
assert_eq!(first_address_entry.2, slot1);
}
Blockstore::destroy(&blockstore_path).expect("Expected successful database destruction");
}
@@ -5496,7 +5677,10 @@ pub mod tests {
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
blockstore
.write_transaction_status(
(Signature::new(&random_bytes), slot),
slot,
Signature::new(&random_bytes),
vec![&Pubkey::new(&random_bytes[0..32])],
vec![&Pubkey::new(&random_bytes[32..])],
&TransactionStatusMeta::default(),
)
.unwrap();
@@ -5506,7 +5690,7 @@ pub mod tests {
let mut status_entry_iterator = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
@@ -5515,6 +5699,18 @@ pub mod tests {
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
let mut address_transactions_iterator = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
(0, Pubkey::default(), 0, Signature::default()),
IteratorDirection::Forward,
))
.unwrap();
for _ in 0..10 {
let entry = address_transactions_iterator.next().unwrap().0;
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
assert_eq!(
transaction_status_index_cf.get(0).unwrap().unwrap(),
TransactionStatusIndexMeta {
@@ -5528,7 +5724,7 @@ pub mod tests {
let mut status_entry_iterator = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
@@ -5537,6 +5733,18 @@ pub mod tests {
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
let mut address_transactions_iterator = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
for _ in 0..10 {
let entry = address_transactions_iterator.next().unwrap().0;
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
assert_eq!(
transaction_status_index_cf.get(0).unwrap().unwrap(),
TransactionStatusIndexMeta {
@@ -5550,7 +5758,7 @@ pub mod tests {
let mut status_entry_iterator = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
@@ -5559,6 +5767,18 @@ pub mod tests {
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
let mut address_transactions_iterator = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
for _ in 0..10 {
let entry = address_transactions_iterator.next().unwrap().0;
assert_eq!(entry.0, 0);
assert_eq!(entry.2, slot);
}
assert_eq!(
transaction_status_index_cf.get(0).unwrap().unwrap(),
TransactionStatusIndexMeta {
@@ -5571,7 +5791,7 @@ pub mod tests {
let mut status_entry_iterator = blockstore
.db
.iter::<cf::TransactionStatus>(IteratorMode::From(
(0, Signature::default(), 0),
cf::TransactionStatus::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
@@ -5579,6 +5799,17 @@ pub mod tests {
assert_eq!(padding_entry.0, 2);
assert_eq!(padding_entry.2, 0);
assert!(status_entry_iterator.next().is_none());
let mut address_transactions_iterator = blockstore
.db
.iter::<cf::AddressSignatures>(IteratorMode::From(
cf::AddressSignatures::as_index(0),
IteratorDirection::Forward,
))
.unwrap();
let padding_entry = address_transactions_iterator.next().unwrap().0;
assert_eq!(padding_entry.0, 2);
assert_eq!(padding_entry.2, 0);
assert!(address_transactions_iterator.next().is_none());
assert_eq!(
transaction_status_index_cf.get(0).unwrap().unwrap(),
TransactionStatusIndexMeta {
@@ -5602,6 +5833,7 @@ pub mod tests {
let blockstore_path = get_tmp_ledger_path!();
{
let blockstore = Blockstore::open(&blockstore_path).unwrap();
// TransactionStatus column opens initialized with one entry at index 2
let transaction_status_cf = blockstore.db.column::<cf::TransactionStatus>();
let pre_balances_vec = vec![1, 2, 3];
@@ -5692,7 +5924,7 @@ pub mod tests {
.get_transaction_status_with_counter(signature5)
.unwrap();
assert_eq!(status, None);
assert_eq!(counter, 5);
assert_eq!(counter, 6);
// Signature does not exist, smaller than existing entries
let (status, counter) = blockstore
@@ -5713,7 +5945,227 @@ pub mod tests {
.get_transaction_status_with_counter(signature6)
.unwrap();
assert_eq!(status, None);
assert_eq!(counter, 1);
assert_eq!(counter, 2);
}
Blockstore::destroy(&blockstore_path).expect("Expected successful database destruction");
}
#[test]
fn test_get_confirmed_transaction() {
let slot = 2;
let entries = make_slot_entries_with_transactions(5);
let shreds = entries_to_test_shreds(entries.clone(), slot, slot - 1, true, 0);
let ledger_path = get_tmp_ledger_path!();
let blockstore = Blockstore::open(&ledger_path).unwrap();
blockstore.insert_shreds(shreds, None, false).unwrap();
blockstore.set_roots(&[slot - 1, slot]).unwrap();
let expected_transactions: Vec<(Transaction, Option<RpcTransactionStatusMeta>)> = entries
.iter()
.cloned()
.filter(|entry| !entry.is_tick())
.flat_map(|entry| entry.transactions)
.map(|transaction| {
let mut pre_balances: Vec<u64> = vec![];
let mut post_balances: Vec<u64> = vec![];
for (i, _account_key) in transaction.message.account_keys.iter().enumerate() {
pre_balances.push(i as u64 * 10);
post_balances.push(i as u64 * 11);
}
let signature = transaction.signatures[0];
blockstore
.transaction_status_cf
.put(
(0, signature, slot),
&TransactionStatusMeta {
status: Ok(()),
fee: 42,
pre_balances: pre_balances.clone(),
post_balances: post_balances.clone(),
},
)
.unwrap();
(
transaction,
Some(
TransactionStatusMeta {
status: Ok(()),
fee: 42,
pre_balances,
post_balances,
}
.into(),
),
)
})
.collect();
for (transaction, status) in expected_transactions.clone() {
let signature = transaction.signatures[0];
let encoded_transaction =
EncodedTransaction::encode(transaction, TransactionEncoding::Json);
let expected_transaction = ConfirmedTransaction {
slot,
transaction: TransactionWithStatusMeta {
transaction: encoded_transaction,
meta: status,
},
};
assert_eq!(
blockstore
.get_confirmed_transaction(signature, None)
.unwrap(),
Some(expected_transaction)
);
}
blockstore.run_purge(0, 2).unwrap();
*blockstore.lowest_cleanup_slot.write().unwrap() = slot;
for (transaction, _) in expected_transactions {
let signature = transaction.signatures[0];
assert_eq!(
blockstore
.get_confirmed_transaction(signature, None)
.unwrap(),
None,
);
}
}
#[test]
fn test_get_confirmed_signatures_for_address() {
let blockstore_path = get_tmp_ledger_path!();
{
let blockstore = Blockstore::open(&blockstore_path).unwrap();
let address0 = Pubkey::new_rand();
let address1 = Pubkey::new_rand();
let slot0 = 10;
for x in 1..5 {
let signature = Signature::new(&[x; 64]);
blockstore
.write_transaction_status(
slot0,
signature,
vec![&address0],
vec![&address1],
&TransactionStatusMeta::default(),
)
.unwrap();
}
// Purge to freeze index 0
blockstore.run_purge(0, 1).unwrap();
let slot1 = 20;
for x in 5..9 {
let signature = Signature::new(&[x; 64]);
blockstore
.write_transaction_status(
slot1,
signature,
vec![&address0],
vec![&address1],
&TransactionStatusMeta::default(),
)
.unwrap();
}
blockstore.set_roots(&[slot0, slot1]).unwrap();
let all0 = blockstore
.get_confirmed_signatures_for_address(address0, 0, 50)
.unwrap();
assert_eq!(all0.len(), 8);
for x in 1..9 {
let expected_signature = Signature::new(&[x; 64]);
assert_eq!(all0[x as usize - 1], expected_signature);
}
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 20, 50)
.unwrap()
.len(),
4
);
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 0, 10)
.unwrap()
.len(),
4
);
assert!(blockstore
.get_confirmed_signatures_for_address(address0, 1, 5)
.unwrap()
.is_empty());
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 1, 15)
.unwrap()
.len(),
4
);
let all1 = blockstore
.get_confirmed_signatures_for_address(address1, 0, 50)
.unwrap();
assert_eq!(all1.len(), 8);
for x in 1..9 {
let expected_signature = Signature::new(&[x; 64]);
assert_eq!(all1[x as usize - 1], expected_signature);
}
// Purge index 0
blockstore.run_purge(0, 10).unwrap();
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 0, 50)
.unwrap()
.len(),
4
);
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 20, 50)
.unwrap()
.len(),
4
);
assert!(blockstore
.get_confirmed_signatures_for_address(address0, 0, 10)
.unwrap()
.is_empty());
assert!(blockstore
.get_confirmed_signatures_for_address(address0, 1, 5)
.unwrap()
.is_empty());
assert_eq!(
blockstore
.get_confirmed_signatures_for_address(address0, 1, 25)
.unwrap()
.len(),
4
);
// Test sort, regardless of entry order or signature value
for slot in (21..25).rev() {
let random_bytes: Vec<u8> = (0..64).map(|_| rand::random::<u8>()).collect();
let signature = Signature::new(&random_bytes);
blockstore
.write_transaction_status(
slot,
signature,
vec![&address0],
vec![&address1],
&TransactionStatusMeta::default(),
)
.unwrap();
}
blockstore.set_roots(&[21, 22, 23, 24]).unwrap();
let mut past_slot = 0;
for (slot, _) in blockstore.find_address_signatures(address0, 1, 25).unwrap() {
assert!(slot >= past_slot);
past_slot = slot;
}
}
Blockstore::destroy(&blockstore_path).expect("Expected successful database destruction");
}

View File

@@ -10,7 +10,7 @@ use rocksdb::{
};
use serde::de::DeserializeOwned;
use serde::Serialize;
use solana_sdk::{clock::Slot, signature::Signature};
use solana_sdk::{clock::Slot, pubkey::Pubkey, signature::Signature};
use solana_transaction_status::{Rewards, TransactionStatusMeta};
use std::{collections::HashMap, fs, marker::PhantomData, path::Path, sync::Arc};
use thiserror::Error;
@@ -38,7 +38,9 @@ const DATA_SHRED_CF: &str = "data_shred";
const CODE_SHRED_CF: &str = "code_shred";
/// Column family for Transaction Status
const TRANSACTION_STATUS_CF: &str = "transaction_status";
/// Column family for Transaction Status
/// Column family for Address Signatures
const ADDRESS_SIGNATURES_CF: &str = "address_signatures";
/// Column family for Transaction Status Index
const TRANSACTION_STATUS_INDEX_CF: &str = "transaction_status_index";
/// Column family for Rewards
const REWARDS_CF: &str = "rewards";
@@ -110,6 +112,10 @@ pub mod columns {
/// The transaction status column
pub struct TransactionStatus;
#[derive(Debug)]
/// The address signatures column
pub struct AddressSignatures;
#[derive(Debug)]
/// The transaction status index column
pub struct TransactionStatusIndex;
@@ -125,8 +131,8 @@ struct Rocks(rocksdb::DB);
impl Rocks {
fn open(path: &Path) -> Result<Rocks> {
use columns::{
DeadSlots, DuplicateSlots, ErasureMeta, Index, Orphans, Rewards, Root, ShredCode,
ShredData, SlotMeta, TransactionStatus, TransactionStatusIndex,
AddressSignatures, DeadSlots, DuplicateSlots, ErasureMeta, Index, Orphans, Rewards,
Root, ShredCode, ShredData, SlotMeta, TransactionStatus, TransactionStatusIndex,
};
fs::create_dir_all(&path)?;
@@ -151,6 +157,8 @@ impl Rocks {
ColumnFamilyDescriptor::new(ShredCode::NAME, get_cf_options());
let transaction_status_cf_descriptor =
ColumnFamilyDescriptor::new(TransactionStatus::NAME, get_cf_options());
let address_signatures_cf_descriptor =
ColumnFamilyDescriptor::new(AddressSignatures::NAME, get_cf_options());
let transaction_status_index_cf_descriptor =
ColumnFamilyDescriptor::new(TransactionStatusIndex::NAME, get_cf_options());
let rewards_cf_descriptor = ColumnFamilyDescriptor::new(Rewards::NAME, get_cf_options());
@@ -166,6 +174,7 @@ impl Rocks {
shred_data_cf_descriptor,
shred_code_cf_descriptor,
transaction_status_cf_descriptor,
address_signatures_cf_descriptor,
transaction_status_index_cf_descriptor,
rewards_cf_descriptor,
];
@@ -178,8 +187,8 @@ impl Rocks {
fn columns(&self) -> Vec<&'static str> {
use columns::{
DeadSlots, DuplicateSlots, ErasureMeta, Index, Orphans, Rewards, Root, ShredCode,
ShredData, SlotMeta, TransactionStatus, TransactionStatusIndex,
AddressSignatures, DeadSlots, DuplicateSlots, ErasureMeta, Index, Orphans, Rewards,
Root, ShredCode, ShredData, SlotMeta, TransactionStatus, TransactionStatusIndex,
};
vec![
@@ -193,6 +202,7 @@ impl Rocks {
ShredData::NAME,
ShredCode::NAME,
TransactionStatus::NAME,
AddressSignatures::NAME,
TransactionStatusIndex::NAME,
Rewards::NAME,
]
@@ -282,6 +292,10 @@ impl TypedColumn for columns::TransactionStatus {
type Type = TransactionStatusMeta;
}
impl TypedColumn for columns::AddressSignatures {
type Type = blockstore_meta::AddressSignatureMeta;
}
impl TypedColumn for columns::TransactionStatusIndex {
type Type = blockstore_meta::TransactionStatusIndexMeta;
}
@@ -314,7 +328,7 @@ impl Column for columns::TransactionStatus {
type Index = (u64, Signature, Slot);
fn key((index, signature, slot): (u64, Signature, Slot)) -> Vec<u8> {
let mut key = vec![0; 8 + 8 + 64];
let mut key = vec![0; 8 + 64 + 8]; // size_of u64 + size_of Signature + size_of Slot
BigEndian::write_u64(&mut key[0..8], index);
key[8..72].clone_from_slice(&signature.as_ref()[0..64]);
BigEndian::write_u64(&mut key[72..80], slot);
@@ -341,6 +355,39 @@ impl ColumnName for columns::TransactionStatus {
const NAME: &'static str = TRANSACTION_STATUS_CF;
}
impl Column for columns::AddressSignatures {
type Index = (u64, Pubkey, Slot, Signature);
fn key((index, pubkey, slot, signature): (u64, Pubkey, Slot, Signature)) -> Vec<u8> {
let mut key = vec![0; 8 + 32 + 8 + 64]; // size_of u64 + size_of Pubkey + size_of Slot + size_of Signature
BigEndian::write_u64(&mut key[0..8], index);
key[8..40].clone_from_slice(&pubkey.as_ref()[0..32]);
BigEndian::write_u64(&mut key[40..48], slot);
key[48..112].clone_from_slice(&signature.as_ref()[0..64]);
key
}
fn index(key: &[u8]) -> (u64, Pubkey, Slot, Signature) {
let index = BigEndian::read_u64(&key[0..8]);
let pubkey = Pubkey::new(&key[8..40]);
let slot = BigEndian::read_u64(&key[40..48]);
let signature = Signature::new(&key[48..112]);
(index, pubkey, slot, signature)
}
fn primary_index(index: Self::Index) -> u64 {
index.0
}
fn as_index(index: u64) -> Self::Index {
(index, Pubkey::default(), 0, Signature::default())
}
}
impl ColumnName for columns::AddressSignatures {
const NAME: &'static str = ADDRESS_SIGNATURES_CF;
}
impl Column for columns::TransactionStatusIndex {
type Index = u64;

View File

@@ -228,6 +228,11 @@ pub struct TransactionStatusIndexMeta {
pub frozen: bool,
}
#[derive(Debug, Default, Deserialize, Serialize, PartialEq)]
pub struct AddressSignatureMeta {
pub writeable: bool,
}
#[cfg(test)]
mod test {
use super::*;

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-local-cluster"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -12,23 +12,23 @@ homepage = "https://solana.com/"
itertools = "0.8.1"
log = "0.4.8"
rand = "0.6.5"
solana-archiver-lib = { path = "../archiver-lib", version = "1.0.14" }
solana-config-program = { path = "../programs/config", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-faucet = { path = "../faucet", version = "1.0.14" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.14" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.14" }
solana-ledger = { path = "../ledger", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-runtime = { path = "../runtime", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vest-program = { path = "../programs/vest", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-archiver-lib = { path = "../archiver-lib", version = "1.0.16" }
solana-config-program = { path = "../programs/config", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-faucet = { path = "../faucet", version = "1.0.16" }
solana-exchange-program = { path = "../programs/exchange", version = "1.0.16" }
solana-genesis-programs = { path = "../genesis-programs", version = "1.0.16" }
solana-ledger = { path = "../ledger", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-runtime = { path = "../runtime", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vest-program = { path = "../programs/vest", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
tempfile = "3.1.0"
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.14" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.16" }
[dev-dependencies]
assert_matches = "1.3.0"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-log-analyzer"
description = "The solana cluster network analysis tool"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -14,8 +14,8 @@ byte-unit = "3.0.3"
clap = "2.33.0"
serde = "1.0.104"
serde_json = "1.0.46"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
[[bin]]
name = "solana-log-analyzer"

View File

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

View File

@@ -1,7 +1,7 @@
[package]
name = "solana-measure"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
documentation = "https://docs.rs/solana"
homepage = "https://solana.com/"
readme = "../README.md"
@@ -12,8 +12,8 @@ edition = "2018"
[dependencies]
log = "0.4.8"
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
[target."cfg(unix)".dependencies]
jemallocator = "0.3.2"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-merkle-tree"
version = "1.0.14"
version = "1.0.16"
description = "Solana Merkle Tree"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -9,7 +9,7 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
hex = "0.4.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-metrics"
version = "1.0.14"
version = "1.0.16"
description = "Solana Metrics"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -14,7 +14,7 @@ gethostname = "0.2.1"
lazy_static = "1.4.0"
log = "0.4.8"
reqwest = { version = "0.10.1", default-features = false, features = ["blocking", "rustls-tls"] }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
[dev-dependencies]
rand = "0.6.5"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-net-shaper"
description = "The solana cluster network shaping tool"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -13,8 +13,8 @@ publish = false
clap = "2.33.0"
serde = "1.0.104"
serde_json = "1.0.46"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
rand = "0.6.5"
[[bin]]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-net-utils"
version = "1.0.14"
version = "1.0.16"
description = "Solana Network Utilities"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -18,8 +18,8 @@ rand = "0.6.1"
serde = "1.0.104"
serde_derive = "1.0.103"
socket2 = "0.3.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
tokio = "0.1"
tokio-codec = "0.1"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-perf"
version = "1.0.14"
version = "1.0.16"
description = "Solana Performance APIs"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -17,11 +17,11 @@ serde = "1.0.104"
dlopen_derive = "0.1.4"
lazy_static = "1.4.0"
log = "0.4.8"
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.14" }
solana-budget-program = { path = "../programs/budget", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.16" }
solana-budget-program = { path = "../programs/budget", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
[lib]
name = "solana_perf"

View File

@@ -1,7 +1,7 @@
[package]
name = "solana-bpf-programs"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
documentation = "https://docs.rs/solana"
homepage = "https://solana.com/"
readme = "README.md"
@@ -22,10 +22,10 @@ walkdir = "2"
bincode = "1.1.4"
byteorder = "1.3.2"
elf = "0.0.10"
solana-bpf-loader-program = { path = "../bpf_loader", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-bpf-loader-program = { path = "../bpf_loader", version = "1.0.16" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
solana_rbpf = "=0.1.21"
[[bench]]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-128bit"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,11 +12,11 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "1.0.14" }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "1.0.16" }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-128bit-dep"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-alloc"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-dep-crate"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -13,10 +13,10 @@ edition = "2018"
[dependencies]
byteorder = { version = "1", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-dup-accounts"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-error-handling"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -14,11 +14,11 @@ edition = "2018"
[dependencies]
num-derive = "0.2"
num-traits = "0.2"
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
thiserror = "1.0"
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-external-spend"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-iter"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-many-args"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,11 +12,11 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "1.0.14" }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "1.0.16" }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-many-args-dep"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-noop"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-panic"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-param-passing"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,11 +12,11 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "1.0.14" }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "1.0.16" }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-param-passing-dep"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -3,7 +3,7 @@
[package]
name = "solana-bpf-rust-sysval"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF test program written in Rust"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -12,10 +12,10 @@ homepage = "https://solana.com/"
edition = "2018"
[dependencies]
solana-sdk = { path = "../../../../sdk/", version = "1.0.14", default-features = false }
solana-sdk = { path = "../../../../sdk/", version = "1.0.16", default-features = false }
[dev_dependencies]
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.14" }
solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "1.0.16" }
[features]
program = ["solana-sdk/program"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-bpf-loader-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF loader"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,8 +15,8 @@ libc = "0.2.66"
log = "0.4.8"
num-derive = { version = "0.3" }
num-traits = { version = "0.2" }
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
solana_rbpf = "=0.1.21"
thiserror = "1.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-btc-spv-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Bitcoin spv parsing program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,7 +15,7 @@ num-derive = "0.3"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-sdk = { path = "../../sdk", version = "1.0.14"}
solana-sdk = { path = "../../sdk", version = "1.0.16"}
hex = "0.3.2"
[lib]

View File

@@ -1,6 +1,6 @@
[package]
name = "btc_spv_bin"
version = "1.0.14"
version = "1.0.16"
description = "Solana Bitcoin spv parsing program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-budget-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Budget program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -16,11 +16,11 @@ num-derive = "0.3"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
thiserror = "1.0"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
[lib]
crate-type = ["lib", "cdylib"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-config-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Config program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -14,8 +14,8 @@ chrono = { version = "0.4.10", features = ["serde"] }
log = "0.4.8"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
[lib]
crate-type = ["lib", "cdylib"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-exchange-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Exchange program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,13 +15,13 @@ num-derive = { version = "0.3" }
num-traits = { version = "0.2" }
serde = "1.0.104"
serde_derive = "1.0.103"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-metrics = { path = "../../metrics", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-metrics = { path = "../../metrics", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
thiserror = "1.0"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
[lib]
crate-type = ["lib", "cdylib"]

View File

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

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-librapay"
version = "1.0.14"
version = "1.0.16"
description = "Solana Libra Payment"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -11,10 +11,10 @@ edition = "2018"
[dependencies]
bincode = "1.2.0"
log = "0.4.8"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-move-loader-program = { path = "../move_loader", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-move-loader-program = { path = "../move_loader", version = "1.0.16" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
types = { version = "0.0.1-sol4", package = "solana_libra_types" }
[lib]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-move-loader-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Move loader"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -16,8 +16,8 @@ serde = "1.0.104"
serde_bytes = "0.11"
serde_derive = "1.0.103"
serde_json = "1.0.46"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
bytecode_verifier = { version = "0.0.1-sol4", package = "solana_libra_bytecode_verifier" }
canonical_serialization = { version = "0.0.1-sol4", package = "solana_libra_canonical_serialization" }

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-noop-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Noop program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -10,8 +10,8 @@ edition = "2018"
[dependencies]
log = "0.4.8"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
[lib]
crate-type = ["lib", "cdylib"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-ownable"
version = "1.0.14"
version = "1.0.16"
description = "ownable program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -10,13 +10,13 @@ edition = "2018"
[dependencies]
bincode = "1.2.1"
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
num-derive = "0.3"
num-traits = "0.2"
thiserror = "1.0"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
[lib]
crate-type = ["lib", "cdylib"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-stake-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Stake program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,11 +15,11 @@ num-derive = "0.3"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-metrics = { path = "../../metrics", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-vote-program = { path = "../vote", version = "1.0.14" }
solana-config-program = { path = "../config", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-metrics = { path = "../../metrics", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
solana-vote-program = { path = "../vote", version = "1.0.16" }
solana-config-program = { path = "../config", version = "1.0.16" }
thiserror = "1.0"
[lib]

View File

@@ -151,7 +151,8 @@ impl Meta {
) -> Result<(), InstructionError> {
// verify that lockup has expired or that the authorization
// is *also* signed by the custodian
if self.lockup.is_in_force(clock, signers) {
if stake_authorize == StakeAuthorize::Withdrawer && self.lockup.is_in_force(clock, signers)
{
return Err(StakeError::LockupInForce.into());
}
self.authorized
@@ -948,23 +949,28 @@ mod tests {
meta.authorize(&staker, StakeAuthorize::Staker, &signers, &clock),
Ok(())
);
// verify lockup check
// verify staker not subject to lockup, but withdrawer is
meta.lockup.epoch = 1;
assert_eq!(
meta.authorize(&staker, StakeAuthorize::Staker, &signers, &clock),
Ok(())
);
// verify lockup check
assert_eq!(
meta.authorize(&staker, StakeAuthorize::Withdrawer, &signers, &clock),
Err(StakeError::LockupInForce.into())
);
// verify lockup check defeated by custodian
signers.insert(custodian);
assert_eq!(
meta.authorize(&staker, StakeAuthorize::Staker, &signers, &clock),
meta.authorize(&staker, StakeAuthorize::Withdrawer, &signers, &clock),
Ok(())
);
// verify lock expiry
signers.remove(&custodian);
clock.epoch = 1;
assert_eq!(
meta.authorize(&staker, StakeAuthorize::Staker, &signers, &clock),
meta.authorize(&staker, StakeAuthorize::Withdrawer, &signers, &clock),
Ok(())
);
}

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-storage-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Storage program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -16,8 +16,8 @@ num-derive = "0.3"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
[dev-dependencies]
assert_matches = "1.3.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-vest-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Vest program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,12 +15,12 @@ num-derive = "0.2"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-config-program = { path = "../config", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
solana-config-program = { path = "../config", version = "1.0.16" }
thiserror = "1.0"
[dev-dependencies]
solana-runtime = { path = "../../runtime", version = "1.0.14" }
solana-runtime = { path = "../../runtime", version = "1.0.16" }
[lib]
crate-type = ["lib"]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-vote-program"
version = "1.0.14"
version = "1.0.16"
description = "Solana Vote program"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -15,9 +15,9 @@ num-derive = "0.3"
num-traits = "0.2"
serde = "1.0.104"
serde_derive = "1.0.103"
solana-logger = { path = "../../logger", version = "1.0.14" }
solana-metrics = { path = "../../metrics", version = "1.0.14" }
solana-sdk = { path = "../../sdk", version = "1.0.14" }
solana-logger = { path = "../../logger", version = "1.0.16" }
solana-metrics = { path = "../../metrics", version = "1.0.16" }
solana-sdk = { path = "../../sdk", version = "1.0.16" }
thiserror = "1.0"
[lib]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-rayon-threadlimit"
version = "1.0.14"
version = "1.0.16"
description = "solana-rayon-threadlimit"
homepage = "https://solana.com/"
readme = "../README.md"

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-remote-wallet"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -16,7 +16,7 @@ hidapi = { version = "1.1.1", default-features = false }
log = "0.4.8"
parking_lot = "0.10"
semver = "0.9"
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
thiserror = "1.0"
url = "2.1.1"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-runtime"
version = "1.0.14"
version = "1.0.16"
description = "Solana runtime"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -26,15 +26,15 @@ rand = "0.6.5"
rayon = "1.2.0"
serde = { version = "1.0.104", features = ["rc"] }
serde_derive = "1.0.103"
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-measure = { path = "../measure", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-storage-program = { path = "../programs/storage", version = "1.0.14" }
solana-vote-program = { path = "../programs/vote", version = "1.0.14" }
solana-bpf-loader-program = { path = "../programs/bpf_loader", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-measure = { path = "../measure", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-rayon-threadlimit = { path = "../rayon-threadlimit", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-storage-program = { path = "../programs/storage", version = "1.0.16" }
solana-vote-program = { path = "../programs/vote", version = "1.0.16" }
tempfile = "3.1.0"
thiserror = "1.0"
@@ -45,4 +45,4 @@ name = "solana_runtime"
[dev-dependencies]
assert_matches = "1.3.0"
solana-noop-program = { path = "../programs/noop", version = "1.0.14" }
solana-noop-program = { path = "../programs/noop", version = "1.0.16" }

View File

@@ -681,6 +681,74 @@ impl AccountsDB {
drop(accounts_index);
}
fn inc_store_counts(
no_delete_id: AppendVecId,
purges: &HashMap<Pubkey, Vec<(Slot, AccountInfo)>>,
store_counts: &mut HashMap<AppendVecId, usize>,
already_counted: &mut HashSet<AppendVecId>,
) {
if already_counted.contains(&no_delete_id) {
return;
}
*store_counts.get_mut(&no_delete_id).unwrap() += 1;
already_counted.insert(no_delete_id);
let mut affected_pubkeys = HashSet::new();
for (key, account_infos) in purges {
for (_slot, account_info) in account_infos {
if account_info.store_id == no_delete_id {
affected_pubkeys.insert(key);
break;
}
}
}
for key in affected_pubkeys {
for (_slot, account_info) in purges.get(&key).unwrap() {
Self::inc_store_counts(
account_info.store_id,
purges,
store_counts,
already_counted,
);
}
}
}
fn calc_delete_dependencies(
accounts_index: &AccountsIndex<AccountInfo>,
purges: &HashMap<Pubkey, Vec<(Slot, AccountInfo)>>,
store_counts: &mut HashMap<AppendVecId, usize>,
) {
// Another pass to check if there are some filtered accounts which
// do not match the criteria of deleting all appendvecs which contain them
// then increment their storage count.
let mut already_counted = HashSet::new();
for (pubkey, account_infos) in purges.iter() {
let no_delete =
if account_infos.len() as u64 != accounts_index.ref_count_from_storage(&pubkey) {
true
} else {
let mut no_delete = false;
for (_slot, account_info) in account_infos {
if *store_counts.get(&account_info.store_id).unwrap() != 0 {
no_delete = true;
break;
}
}
no_delete
};
if no_delete {
for (_slot_id, account_info) in account_infos {
Self::inc_store_counts(
account_info.store_id,
&purges,
store_counts,
&mut already_counted,
);
}
}
}
}
// Purge zero lamport accounts and older rooted account states as garbage
// collection
// Only remove those accounts where the entire rooted history of the account
@@ -727,29 +795,7 @@ impl AccountsDB {
}
}
// Another pass to check if there are some filtered accounts which
// do not match the criteria of deleting all appendvecs which contain them
// then increment their storage count.
for (pubkey, account_infos) in &purges {
let no_delete =
if account_infos.len() as u64 != accounts_index.ref_count_from_storage(&pubkey) {
true
} else {
let mut no_delete = false;
for (_slot, account_info) in account_infos {
if *store_counts.get(&account_info.store_id).unwrap() != 0 {
no_delete = true;
break;
}
}
no_delete
};
if no_delete {
for (_slot_id, account_info) in account_infos {
*store_counts.get_mut(&account_info.store_id).unwrap() += 1;
}
}
}
Self::calc_delete_dependencies(&accounts_index, &purges, &mut store_counts);
// Only keep purges where the entire history of the account in the root set
// can be purged. All AppendVecs for those updates are dead.
@@ -3388,4 +3434,69 @@ pub mod tests {
dead_slots.insert(10);
accounts.clean_dead_slots(&mut dead_slots);
}
#[test]
fn test_delete_dependencies() {
solana_logger::setup();
let mut accounts_index = AccountsIndex::default();
let key0 = Pubkey::new_from_array([0u8; 32]);
let key1 = Pubkey::new_from_array([1u8; 32]);
let key2 = Pubkey::new_from_array([2u8; 32]);
let info0 = AccountInfo {
store_id: 0,
offset: 0,
lamports: 0,
};
let info1 = AccountInfo {
store_id: 1,
offset: 0,
lamports: 0,
};
let info2 = AccountInfo {
store_id: 2,
offset: 0,
lamports: 0,
};
let info3 = AccountInfo {
store_id: 3,
offset: 0,
lamports: 0,
};
let mut reclaims = vec![];
accounts_index.insert(0, &key0, info0.clone(), &mut reclaims);
accounts_index.insert(1, &key0, info1.clone(), &mut reclaims);
accounts_index.insert(1, &key1, info1.clone(), &mut reclaims);
accounts_index.insert(2, &key1, info2.clone(), &mut reclaims);
accounts_index.insert(2, &key2, info2.clone(), &mut reclaims);
accounts_index.insert(3, &key2, info3.clone(), &mut reclaims);
accounts_index.add_root(0);
accounts_index.add_root(1);
accounts_index.add_root(2);
accounts_index.add_root(3);
let mut purges = HashMap::new();
purges.insert(key0, accounts_index.would_purge(&key0));
purges.insert(key1, accounts_index.would_purge(&key1));
purges.insert(key2, accounts_index.would_purge(&key2));
for (key, list) in &purges {
info!(" purge {} =>", key);
for x in list {
info!(" {:?}", x);
}
}
let mut store_counts = HashMap::new();
store_counts.insert(0, 0);
store_counts.insert(1, 0);
store_counts.insert(2, 0);
store_counts.insert(3, 1);
AccountsDB::calc_delete_dependencies(&accounts_index, &purges, &mut store_counts);
let mut stores: Vec<_> = store_counts.keys().cloned().collect();
stores.sort();
for store in &stores {
info!("store: {:?} : {}", store, store_counts.get(&store).unwrap());
}
for x in 0..3 {
assert!(store_counts[&x] >= 1);
}
}
}

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-scripts"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"

View File

@@ -31,27 +31,33 @@ export RUST_MIN_STACK=8388608
echo "--- remove old coverage results"
if [[ -d target/cov ]]; then
find target/cov -name \*.gcda -delete
find target/cov -type f -name '*.gcda' -delete
fi
rm -rf target/cov/$reportName
mkdir -p target/cov
# Mark the base time for a clean room dir
timing_file=target/cov/before-test
touch "$timing_file"
touch target/cov/before-test
source ci/rust-version.sh nightly
# Force rebuild of possibly-cached proc macro crates and build.rs because
# we always want stable coverage for them
# Don't support odd file names in our repo ever
# shellcheck disable=SC2046
touch \
$(git ls-files :**/build.rs) \
$(git grep -l "proc-macro.*true" :**/Cargo.toml | sed 's|Cargo.toml|src/lib.rs|')
if [[ -n $CI || -z $1 ]]; then
# shellcheck disable=SC2046
touch \
$(git ls-files :**/build.rs) \
$(git grep -l "proc-macro.*true" :**/Cargo.toml | sed 's|Cargo.toml|src/lib.rs|')
fi
RUST_LOG=solana=trace _ cargo +$rust_nightly test --target-dir target/cov --no-run "${packages[@]}"
RUST_LOG=solana=trace _ cargo +$rust_nightly test --target-dir target/cov "${packages[@]}" 2> target/cov/coverage-stderr.log
if RUST_LOG=solana=trace _ cargo +$rust_nightly test --target-dir target/cov "${packages[@]}" 2> target/cov/coverage-stderr.log; then
test_status=0
else
test_status=$?
fi
touch target/cov/after-test
echo "--- grcov"
@@ -62,7 +68,7 @@ mkdir -p target/cov/tmp
# Can't use a simpler construct under the condition of SC2044 and bash 3
# (macOS's default). See: https://github.com/koalaman/shellcheck/wiki/SC2044
find target/cov -name \*.gcda -newer "$timing_file" -print0 |
find target/cov -type f -name '*.gcda' -newer target/cov/before-test ! -newer target/cov/after-test -print0 |
(while IFS= read -r -d '' gcda_file; do
gcno_file="${gcda_file%.gcda}.gcno"
ln -sf "../../../$gcda_file" "target/cov/tmp/$(basename "$gcda_file")"
@@ -115,3 +121,6 @@ genhtml --output-directory target/cov/$reportName \
)
ls -l target/cov/$reportName/index.html
ln -sfT $reportName target/cov/LATEST
exit $test_status

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-sdk-c"
version = "1.0.14"
version = "1.0.16"
description = "Solana SDK C"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -18,7 +18,7 @@ bs58 = "0.3.0"
libc = "0.2.66"
rand_chacha = "0.1.1"
rand_core = { version = ">=0.2, <0.4", default-features = false }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
ed25519-dalek = "1.0.0-pre.1"
[build-dependencies]

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-sdk"
version = "1.0.14"
version = "1.0.16"
description = "Solana SDK"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"
@@ -50,9 +50,9 @@ serde_json = { version = "1.0.46", optional = true }
sha2 = "0.8.1"
thiserror = "1.0"
ed25519-dalek = { version = "=1.0.0-pre.1", optional = true }
solana-crate-features = { path = "../crate-features", version = "1.0.14", optional = true }
solana-logger = { path = "../logger", version = "1.0.14", optional = true }
solana-sdk-macro = { path = "macro", version = "1.0.14" }
solana-crate-features = { path = "../crate-features", version = "1.0.16", optional = true }
solana-logger = { path = "../logger", version = "1.0.16", optional = true }
solana-sdk-macro = { path = "macro", version = "1.0.16" }
[dev-dependencies]
tiny-bip39 = "0.7.0"

View File

@@ -1,6 +1,6 @@
[package]
name = "solana-sdk-bpf-test"
version = "1.0.14"
version = "1.0.16"
description = "Solana BPF SDK test utilities"
authors = ["Solana Maintainers <maintainers@solana.com>"]
repository = "https://github.com/solana-labs/solana"

View File

@@ -12,6 +12,12 @@ download() {
declare url=$1
declare filename=$2
declare progress=$3
declare cache_filename=~/.cache/${filename//:\//_}
if [[ -r $cache_filename ]]; then
ln -s "$cache_filename" "$filename"
return
fi
declare args=(
"$url" -O "$filename"
@@ -19,7 +25,12 @@ download() {
"--retry-connrefused"
"--read-timeout=30"
)
wget "${args[@]}"
if wget "${args[@]}"; then
mkdir -p ~/.cache
cp "$filename" "$cache_filename"
return 0
fi
return 1
}
# Install xargo
@@ -123,11 +134,12 @@ fi
# Install Rust-BPF Sysroot sources
version=v0.12
if [[ ! -f rust-bpf-sysroot-$version.md ]]; then
(
set -ex
rm -rf rust-bpf-sysroot*
rm -rf xargo
cmd="git clone --recursive --single-branch --branch $version https://github.com/solana-labs/rust-bpf-sysroot.git"
cmd="git clone --recursive --depth 1 --single-branch --branch $version https://github.com/solana-labs/rust-bpf-sysroot.git"
$cmd
echo "$cmd" > rust-bpf-sysroot-$version.md

View File

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

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-stake-monitor"
description = "Blockchain, Rebuilt for Scale"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -14,20 +14,20 @@ console = "0.10.0"
log = "0.4.8"
serde = "1.0.105"
serde_yaml = "0.8.11"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-cli-config = { path = "../cli-config", version = "1.0.14" }
solana-client = { path = "../client", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-metrics = { path = "../metrics", version = "1.0.14" }
solana-sdk = { path = "../sdk", version = "1.0.14" }
solana-stake-program = { path = "../programs/stake", version = "1.0.14" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-cli-config = { path = "../cli-config", version = "1.0.16" }
solana-client = { path = "../client", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
solana-metrics = { path = "../metrics", version = "1.0.16" }
solana-sdk = { path = "../sdk", version = "1.0.16" }
solana-stake-program = { path = "../programs/stake", version = "1.0.16" }
solana-transaction-status = { path = "../transaction-status", version = "1.0.16" }
[dev-dependencies]
serial_test = "0.4.0"
serial_test_derive = "0.4.0"
solana-local-cluster = { path = "../local-cluster", version = "1.0.14" }
solana-core = { path = "../core", version = "1.0.14" }
solana-local-cluster = { path = "../local-cluster", version = "1.0.16" }
solana-core = { path = "../core", version = "1.0.16" }
tempfile = "3.1.0"
[[bin]]

View File

@@ -12,3 +12,6 @@ In terms of `solana` command-line subcommands:
* `delegate-stake` / `deactivate-stake` / `stake-authorize` / `split-stake`: These commands do not affect compliance
* `withdraw-stake` / `stake-set-lockup`: These commands will cause non-compliance
* `transfer`: Any additional funds transferred after `create-stake-account` are excluded from the "compliant balance"
System accounts can also be manually enrolled with the `solana-stake-monitor enroll` subcommand.
An enrolled system account must always maintain a balance greater than the balance it had at enrollment minus 1 SOL.

View File

@@ -3,8 +3,8 @@ use serde::{Deserialize, Serialize};
use solana_client::{client_error::Result as ClientResult, rpc_client::RpcClient};
use solana_metrics::{datapoint_error, datapoint_info};
use solana_sdk::{
clock::Slot, program_utils::limited_deserialize, pubkey::Pubkey, signature::Signature,
transaction::Transaction,
clock::Slot, native_token::LAMPORTS_PER_SOL, program_utils::limited_deserialize,
pubkey::Pubkey, signature::Signature, transaction::Transaction,
};
use solana_stake_program::{stake_instruction::StakeInstruction, stake_state::Lockup};
use solana_transaction_status::{ConfirmedBlock, RpcTransactionStatusMeta, TransactionEncoding};
@@ -203,7 +203,9 @@ fn process_transaction(
for (index, account_pubkey) in message.account_keys.iter().enumerate() {
if let Some(mut account_info) = accounts.get_mut(&account_pubkey.to_string()) {
let post_balance = meta.post_balances[index];
if account_info.compliant_since.is_some() && post_balance < account_info.lamports {
if account_info.compliant_since.is_some()
&& post_balance <= account_info.lamports.saturating_sub(LAMPORTS_PER_SOL)
{
account_info.compliant_since = None;
account_info.transactions.push(AccountTransactionInfo {
op: AccountOperation::FailedToMaintainMinimumBalance,

View File

@@ -3,7 +3,7 @@ authors = ["Solana Maintainers <maintainers@solana.com>"]
edition = "2018"
name = "solana-sys-tuner"
description = "The solana cluster system tuner daemon"
version = "1.0.14"
version = "1.0.16"
repository = "https://github.com/solana-labs/solana"
license = "Apache-2.0"
homepage = "https://solana.com/"
@@ -13,8 +13,8 @@ publish = true
clap = "2.33.0"
log = "0.4.8"
libc = "0.2.66"
solana-clap-utils = { path = "../clap-utils", version = "1.0.14" }
solana-logger = { path = "../logger", version = "1.0.14" }
solana-clap-utils = { path = "../clap-utils", version = "1.0.16" }
solana-logger = { path = "../logger", version = "1.0.16" }
[target."cfg(unix)".dependencies]
unix_socket2 = "0.5.4"

View File

@@ -93,7 +93,7 @@ fn tune_kernel_udp_buffers_and_vmmap() {
sysctl_write("net.core.wmem_default", "134217728");
// increase mmap counts for many append_vecs
sysctl_write("vm.max_map_count", "262144");
sysctl_write("vm.max_map_count", "1000000");
}
#[cfg(unix)]

Some files were not shown because too many files have changed in this diff Show More