* BorrowedAccount: add set_data_from_slice(), make set_data() take owned values
set_data() used to take a slice and would force alloc+copy if the caller
has owned values (eg account creation, account lookup table).
Expose set_data_from_slice() for callers that have slices, and switch
set_data() to taking an owned Vec.
* BorrowAccount: refactor common accounts_update_delta code in helper method
* BorrowedAccount: add extend_from_slice()
This allows avoiding copies appending entries to account lookup tables.
* BorrowedAccount: remove unnecessary ifs around update_accounts_resize_delta
* Lets instruction_accounts_lamport_sum() have the &InstructionContext as parameter directly.
* Updates docu comments.
* Uses accessors methods instead of accessing private properties of other structs.
* Adds #![deny(clippy::indexing_slicing)].
* Has get_signers() return a Result instead of using unwrap().
* Removes InvokeContext::get_key_of_account_at_index().
* Replaces InstructionContext::new() by InstructionContext::configure().
Adds TransactionContext::get_next_instruction_context().
* Switch back to using references as parameters.
* Hoists InstructionContext::configure() from TransactionContext::push() into InvokeContext::push().
* Moves InstructionContext::config() to the beginning of InvokeContext::push().
* Hoists InstructionContext::configure() from InvokeContext::push() into InvokeContext::process_instruction().
* Review feedback: Updates docu comments.
* Plumb priority_fee_cache into rpc
* Add PrioritizationFeeCache api
* Add getRecentPrioritizationFees rpc endpoint
* Use MAX_TX_ACCOUNT_LOCKS to limit input keys
* Remove unused cache apis
* Map fee data by slot, and make rpc account inputs optional
* Add priority_fee_cache to rpc test framework, and add test
* Add endpoint to jsonrpc docs
* Update docs/src/developing/clients/jsonrpc-api.md
* Update docs/src/developing/clients/jsonrpc-api.md
* Marks methods and structs which are only to be used by the program runtime.
* Removes TransactionContext::get_keys_of_accounts().
* Adds InstructionContext::get_instruction_accounts_lamport_sum().
In kin-sim, we found that bounded channel causes halt for account
background services. As the number of accounts grows, the time for
pruning and cleaning increases, which would leads to longer intervals
between the pruning of deaded bank slots. With 1.7B accounts, we will
exceed the 10K bounded channel threshold that causes halt of account
back ground services. Without pruning, the node will eventually run out
of memory.
* Add snapshot_storage_lengths_from_fields
* Add SnapshotUnpacker
* Add SnapshotStorageRebuilder
* Rebuild snapshot storage during unpack
* move snapshot unpacker back into snapshot_utils
* use SerializedAppendVecId in storage rebuilder
* create AccountStorageMap type alias
* Wrap storage and next_append_vec_id in a type
* fixed typo
* move use StorageAndNextAppendVecId
* calculate num_rebuilder_threads more concisely
* Add a SanitizedMessage type that caches writable accounts indexes
* Add is_writable_account_cache to both SanitizedMessage variants, cache is initialized in constructors
* Check overflow on vote tx compaction boundary
Check for overflow during the conversion between VoteStateUpdate and
CompactVoteStateUpdate.
* Try removing clippy supress
The commit adds sanity checks that when loading a bank from snapshots:
* cached vote accounts are consistent with accounts-db.
* all valid vote-accounts referenced in stake delegations are already
cached.
* refactor: extract store_stake_accounts fn
* refactor: extract store_vote_account fn
* refactor: extract reward history update fn
* remove avg point value from pay_valiator fn. not used
* clippy: slice
* clippy: slice
* remove abort() from test-validator (#27124)
* chore: bump bytes from 1.1.0 to 1.2.1 (#27172)
* chore: bump bytes from 1.1.0 to 1.2.1
Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.1.0 to 1.2.1.
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.1.0...v1.2.1)
---
updated-dependencies:
- dependency-name: bytes
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
* [auto-commit] Update all Cargo lock files
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-buildkite <dependabot-buildkite@noreply.solana.com>
* Share Ancestors API get with contains_key (#27161)
consolidate similar fns
* Rename to `MAX_BLOCK_ACCOUNTS_DATA_SIZE_DELTA` (#27175)
* chore: bump libc from 0.2.129 to 0.2.131 (#27162)
* chore: bump libc from 0.2.129 to 0.2.131
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.129 to 0.2.131.
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.129...0.2.131)
---
updated-dependencies:
- dependency-name: libc
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
* [auto-commit] Update all Cargo lock files
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-buildkite <dependabot-buildkite@noreply.solana.com>
* reverts wide fanout in broadcast when the root node is down (#26359)
A change included in
https://github.com/solana-labs/solana/pull/20480
was that when the root node in turbine broadcast tree is down, the
leader will broadcast the shred to all nodes in the first layer.
The intention was to mitigate the impact of dead nodes on shreds
propagation, because if the root node is down, then the entire cluster
will miss out the shred.
On the other hand, if x% of stake is down, this will cause 200*x% + 1
packets/shreds ratio at the broadcast stage which might contribute to
line-rate saturation and packet drop.
To avoid this bandwidth saturation issue, this commit reverts that logic
and always broadcasts shreds from the leader only to the root node.
As before we rely on erasure codes to recover shreds lost due to staked
nodes being offline.
* add getTokenLargestAccounts rpc method to rust client (#26840)
* add get token largest accounts rpc call to client
* split to include with commitment
* Bump spl-token-2022 (#27181)
* Bump token-2022 to 0.4.3
* Allow cargo to bump stuff to v1.11.5
* VoteProgram.safeWithdraw function to safeguard against accidental vote account closures (#26586)
feat: safe withdraw function
Co-authored-by: aschonfeld <andrew@proofofalpha.io>
* chore: bump futures from 0.3.21 to 0.3.23 (#27182)
* chore: bump futures from 0.3.21 to 0.3.23
Bumps [futures](https://github.com/rust-lang/futures-rs) from 0.3.21 to 0.3.23.
- [Release notes](https://github.com/rust-lang/futures-rs/releases)
- [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.21...0.3.23)
---
updated-dependencies:
- dependency-name: futures
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
* [auto-commit] Update all Cargo lock files
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-buildkite <dependabot-buildkite@noreply.solana.com>
* chore: bump nix from 0.24.2 to 0.25.0 (#27179)
* chore: bump nix from 0.24.2 to 0.25.0
Bumps [nix](https://github.com/nix-rust/nix) from 0.24.2 to 0.25.0.
- [Release notes](https://github.com/nix-rust/nix/releases)
- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nix-rust/nix/compare/v0.24.2...v0.25.0)
---
updated-dependencies:
- dependency-name: nix
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
* [auto-commit] Update all Cargo lock files
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-buildkite <dependabot-buildkite@noreply.solana.com>
* Parse ConfidentialTransaction instructions (#26825)
Parse ConfidentialTransfer instructions
* snapshots: serialize version file first (#27192)
serialize version file first
* serialize incremental_snapshot_hash (#26839)
* serialize incremental_snapshot_hash
* pr feedback
* derives Error trait for ClusterInfoError and core::result::Error (#27208)
* Add clean_accounts_for_tests() (#27200)
* Rust v1.63.0 (#27148)
* Upgrade to Rust v1.63.0
* Add nightly_clippy_allows
* Resolve some new clippy nightly lints
* Increase QUIC packets completion timeout
Co-authored-by: Michael Vines <mvines@gmail.com>
* docs: updated "transaction fees" page (#26861)
* docs: transaction fees, compute units, compute budget
* docs: added messages definition
* Revert "docs: added messages definition"
This reverts commit 3c56156dfaaf17158c5eafbc5877080a83607a06.
* docs: added messages definition
* Update docs/src/transaction_fees.md
Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com>
* fix: updates from feedback
Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com>
* sdk: Fix args after "--" in build-bpf and test-bpf (#27221)
* Flaky Unit Test test_rpc_subscriptions (#27214)
Increase unit test timeout from 5 seconds to 10 seconds
* chore: only buildkite pipelines use sccache in docker-run.sh (#27204)
chore: only buildkite ci use sccache
* clean feature: `prevent_calling_precompiles_as_programs` (#27100)
* clean feature: prevent_calling_precompiles_as_programs
* fix tests
* fix test
* remove comment
* fix test
* feedback
* Add get_account_with_commitment to BenchTpsClient (#27176)
* Fix a corner-case panic in get_entries_in_data_block() (#27195)
#### Problem
get_entries_in_data_block() panics when there's inconsistency between
slot_meta and data_shred.
However, as we don't lock on reads, reading across multiple column families is
not atomic (especially for older slots) and thus does not guarantee consistency
as the background cleanup service could purge the slot in the middle. Such
panic was reported in #26980 when the validator serves a high load of RPC calls.
#### Summary of Changes
This PR makes get_entries_in_data_block() panic only when the inconsistency
between slot-meta and data-shred happens on a slot older than lowest_cleanup_slot.
* Verify snapshot slot deltas (#26666)
* store-tool: log lamports for each account (#27168)
log lamports for each account
* add an assert for a debug feature to avoid wasted time (#27210)
* remove redundant call that bumps age to future (#27215)
* Use from_secs api to create duration (#27222)
use from_secs api to create duration
* reorder slot # in debug hash data path (#27217)
* create helper fn for clarity (#27216)
* Verifying snapshot bank must always specify the snapshot slot (#27234)
* Remove `Bank::ensure_no_storage_rewards_pool()` (#26468)
* cli: Add subcommands for address lookup tables (#27123)
* cli: Add subcommand for creating address lookup tables
* cli: Add additional subcommands for address lookup tables
* short commands
* adds hash domain to ping-pong protocol (#27193)
In order to maintain backward compatibility, for now the responding node
will hash the token both with and without domain so that the other node
will accept the response regardless of its upgrade status.
Once the cluster has upgraded to the new code, we will remove the legacy
domain = false case.
* Revert "Rust v1.63.0 (#27148)" (#27245)
This reverts commit a2e7bdf50a.
* correct double negation (#27240)
* Enable QUIC client by default. Add arg to disable QUIC client. (Forward port #26927) (#27194)
Enable QUIC client by default. Add arg to disable QUIC client.
* Enable QUIC client by default. Add arg to disable QUIC client.
* Deprecate --disable-quic-servers arg
* Add #[ignore] annotation to failing tests
* slots_connected: check if the range is connected (>= ending_slot) (#27152)
* create-snapshot check if snapshot slot exists (#27153)
* Add Bank::clean_accounts_for_tests() (#27209)
* Call `AccountsDb::shrink_all_slots()` directly (#27235)
* add ed25519_program to built-in instruction cost list (#27199)
* add ed25519_program to built-in instruction cost list
* Remove unnecessary and stale comment
* simple refactorings to disk idx (#27238)
* add _inclusive for clarity (#27239)
* eliminate unnecessary ZERO_RAW_LAMPORTS_SENTINEL (#27218)
* make test code more clear (#27260)
* banking stage: actually aggregate tracer packet stats (#27118)
* aggregated_tracer_packet_stats_option was alwasys None
* Actually accumulate tracer packet stats
* Refactor epoch reward 1 (#27253)
* refactor: extract store_stake_accounts fn
* clippy: slice
Co-authored-by: haoran <haoran@mbook>
* recovers merkle shreds from erasure codes (#27136)
The commit
* Identifies Merkle shreds when recovering from erasure codes and
dispatches specialized code to reconstruct shreds.
* Coding shred headers are added to recovered erasure shards.
* Merkle tree is reconstructed for the erasure batch and added to
recovered shreds.
* The common signature (for the root of Merkle tree) is attached to all
recovered shreds.
* Simplify `Bank::clean_accounts()` by removing params (#27254)
* Account files remove (#26910)
* Create a new function cleanup_accounts_paths, a trivial change
* Remove account files asynchronously
* Update and simplify the implementation after the validator test runs.
* Fixes after testing on the dev device
* Discard tokio. Use thread instead
* Fix comments format
* Fix config type to pass the github test
* Fix failed tests. Handle the case of non-existing path
* Final cleanup, addressing the review comments
Avoided OsString.
Made the function more generic with "impl AsRef<Path>"
Co-authored-by: Jeff Washington <jeff.washington@solana.com>
* Refactor: Flattens `TransactionContext::instruction_trace` (#27109)
* Flattens TransactionContext::instruction_trace.
* Stop the search at transaction level.
* Renames get_instruction_context_at => get_instruction_context_at_nesting_level.
* Removes TransactionContext::get_instruction_trace().
Adds TransactionContext::get_instruction_trace_length() and TransactionContext::get_instruction_context_at_index().
* Have TransactionContext::instruction_accounts_lamport_sum() accept an iterator instead of a slice.
* Removes instruction_trace from ExecutionRecord.
* make InstructionContext::new() private
* Parallel insertion of dirty store keys during clean (#27058)
parallelize dirty store key insertion
* Refactor epoch reward 2 (#27257)
* refactor: extract store_stake_accounts fn
* refactor: extract store_vote_account fn
* clippy: slice
* clippy: slice
* fix merge error
Co-authored-by: haoran <haoran@mbook>
* Standardize thread names
Tenets:
1. Limit thread names to 15 characters
2. Prefix all Solana-controlled threads with "sol"
3. Use Camel case. It's more character dense than Snake or Kebab case
* cleanup comment on filter_zero_lamport_clean_for_incremental_snapshots (#27273)
* remove inaccurate log (#27255)
* patches metrics for invalid cached vote/stake accounts (#27266)
patches invalid cached vote/stake accounts metrics
Invalid cached vote accounts is overcounting actual mismatches, and
invalid cached stake accounts is undercounting.
* Refactor epoch reward 3 (#27259)
* refactor: extract store_stake_accounts fn
* refactor: extract store_vote_account fn
* refactor: extract reward history update fn
* clippy: slice
* clippy: slice
Co-authored-by: haoran <haoran@mbook>
* fix merges
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: haoran <haoran@mbook>
Co-authored-by: Jeff Biseda <jbiseda@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: dependabot-buildkite <dependabot-buildkite@noreply.solana.com>
Co-authored-by: Brooks Prumo <brooks@solana.com>
Co-authored-by: behzad nouri <behzadnouri@gmail.com>
Co-authored-by: AJ Taylor <anthonjtaylor@gmail.com>
Co-authored-by: Tyera Eulberg <tyera@solana.com>
Co-authored-by: Andrew Schonfeld <andrew.schonfeld1@gmail.com>
Co-authored-by: aschonfeld <andrew@proofofalpha.io>
Co-authored-by: apfitzge <apfitzge@users.noreply.github.com>
Co-authored-by: Jeff Washington (jwash) <wash678@gmail.com>
Co-authored-by: Brennan Watt <brennan.watt@solana.com>
Co-authored-by: Michael Vines <mvines@gmail.com>
Co-authored-by: Nick Frostbutter <75431177+nickfrosty@users.noreply.github.com>
Co-authored-by: Jacob Creech <82475023+jacobcreech@users.noreply.github.com>
Co-authored-by: Jon Cinque <jon.cinque@gmail.com>
Co-authored-by: Yihau Chen <a122092487@gmail.com>
Co-authored-by: Justin Starry <justin@solana.com>
Co-authored-by: kirill lykov <kirill.lykov@solana.com>
Co-authored-by: Yueh-Hsuan Chiang <93241502+yhchiang-sol@users.noreply.github.com>
Co-authored-by: leonardkulms <42893075+leonardkulms@users.noreply.github.com>
Co-authored-by: Will Hickey <will.hickey@solana.com>
Co-authored-by: Tao Zhu <82401714+taozhu-chicago@users.noreply.github.com>
Co-authored-by: Xiang Zhu <xzhu70@gmail.com>
Co-authored-by: Jeff Washington <jeff.washington@solana.com>
Co-authored-by: Alexander Meißner <AlexanderMeissner@gmx.net>
Tenets:
1. Limit thread names to 15 characters
2. Prefix all Solana-controlled threads with "sol"
3. Use Camel case. It's more character dense than Snake or Kebab case
* Flattens TransactionContext::instruction_trace.
* Stop the search at transaction level.
* Renames get_instruction_context_at => get_instruction_context_at_nesting_level.
* Removes TransactionContext::get_instruction_trace().
Adds TransactionContext::get_instruction_trace_length() and TransactionContext::get_instruction_context_at_index().
* Have TransactionContext::instruction_accounts_lamport_sum() accept an iterator instead of a slice.
* Removes instruction_trace from ExecutionRecord.
* make InstructionContext::new() private