Rename genesis block to genesis config (#6816)

This commit is contained in:
Justin Starry 2019-11-08 23:56:57 -05:00 committed by GitHub
parent 63425bed10
commit 9807f47d4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
79 changed files with 1104 additions and 1094 deletions

View File

@ -9,7 +9,7 @@ use rayon::prelude::*;
use solana_core::banking_stage::{create_test_recorder, BankingStage}; use solana_core::banking_stage::{create_test_recorder, BankingStage};
use solana_core::cluster_info::ClusterInfo; use solana_core::cluster_info::ClusterInfo;
use solana_core::cluster_info::Node; use solana_core::cluster_info::Node;
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use solana_core::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_core::packet::to_packets_chunked; use solana_core::packet::to_packets_chunked;
use solana_core::poh_recorder::PohRecorder; use solana_core::poh_recorder::PohRecorder;
use solana_core::poh_recorder::WorkingBankEntry; use solana_core::poh_recorder::WorkingBankEntry;
@ -102,21 +102,21 @@ fn main() {
const PACKETS_PER_BATCH: usize = 192; const PACKETS_PER_BATCH: usize = 192;
let txes = PACKETS_PER_BATCH * num_threads * CHUNKS; let txes = PACKETS_PER_BATCH * num_threads * CHUNKS;
let mint_total = 1_000_000_000_000; let mint_total = 1_000_000_000_000;
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(mint_total); } = create_genesis_config(mint_total);
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
let (vote_sender, vote_receiver) = unbounded(); let (vote_sender, vote_receiver) = unbounded();
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank0); let mut bank_forks = BankForks::new(0, bank0);
let mut bank = bank_forks.working_bank(); let mut bank = bank_forks.working_bank();
info!("threads: {} txs: {}", num_threads, txes); info!("threads: {} txs: {}", num_threads, txes);
let mut transactions = make_accounts_txs(txes, &mint_keypair, genesis_block.hash()); let mut transactions = make_accounts_txs(txes, &mint_keypair, genesis_config.hash());
// fund all the accounts // fund all the accounts
transactions.iter().for_each(|tx| { transactions.iter().for_each(|tx| {
@ -124,7 +124,7 @@ fn main() {
&mint_keypair, &mint_keypair,
&tx.message.account_keys[0], &tx.message.account_keys[0],
mint_total / txes as u64, mint_total / txes as u64,
genesis_block.hash(), genesis_config.hash(),
); );
let x = bank.process_transaction(&fund); let x = bank.process_transaction(&fund);
x.unwrap(); x.unwrap();

View File

@ -1038,7 +1038,7 @@ mod tests {
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::fee_calculator::FeeCalculator; use solana_sdk::fee_calculator::FeeCalculator;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
#[test] #[test]
fn test_switch_directions() { fn test_switch_directions() {
@ -1057,8 +1057,8 @@ mod tests {
#[test] #[test]
fn test_bench_tps_bank_client() { fn test_bench_tps_bank_client() {
let (genesis_block, id) = create_genesis_block(10_000); let (genesis_config, id) = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let clients = vec![BankClient::new(bank)]; let clients = vec![BankClient::new(bank)];
let mut config = Config::default(); let mut config = Config::default();
@ -1075,8 +1075,8 @@ mod tests {
#[test] #[test]
fn test_bench_tps_fund_keys() { fn test_bench_tps_fund_keys() {
let (genesis_block, id) = create_genesis_block(10_000); let (genesis_config, id) = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let client = BankClient::new(bank); let client = BankClient::new(bank);
let tx_count = 10; let tx_count = 10;
let lamports = 20; let lamports = 20;
@ -1096,10 +1096,10 @@ mod tests {
#[test] #[test]
fn test_bench_tps_fund_keys_with_fees() { fn test_bench_tps_fund_keys_with_fees() {
let (mut genesis_block, id) = create_genesis_block(10_000); let (mut genesis_config, id) = create_genesis_config(10_000);
let fee_calculator = FeeCalculator::new(11, 0); let fee_calculator = FeeCalculator::new(11, 0);
genesis_block.fee_calculator = fee_calculator; genesis_config.fee_calculator = fee_calculator;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let client = BankClient::new(bank); let client = BankClient::new(bank);
let tx_count = 10; let tx_count = 10;
let lamports = 20; let lamports = 20;

View File

@ -200,7 +200,7 @@ SUBCOMMANDS:
claim-storage-reward Redeem storage reward credits claim-storage-reward Redeem storage reward credits
cluster-version Get the version of the cluster entrypoint cluster-version Get the version of the cluster entrypoint
confirm Confirm transaction by signature confirm Confirm transaction by signature
create-archiver-storage-account Create an archiver storage account create-archiver-storage-account Create an archiver storage account
create-stake-account Create a stake account create-stake-account Create a stake account
create-validator-storage-account Create a validator storage account create-validator-storage-account Create a validator storage account
create-vote-account Create a vote account create-vote-account Create a vote account
@ -210,7 +210,7 @@ SUBCOMMANDS:
fees Display current cluster fees fees Display current cluster fees
get Get cli config settings get Get cli config settings
get-epoch-info Get information about the current epoch get-epoch-info Get information about the current epoch
get-genesis-blockhash Get the genesis blockhash get-genesis-hash Get the genesis hash
get-slot Get current slot get-slot Get current slot
get-transaction-count Get current transaction count get-transaction-count Get current transaction count
help Prints this message or the help of the given subcommand(s) help Prints this message or the help of the given subcommand(s)
@ -236,7 +236,7 @@ SUBCOMMANDS:
#### solana-address #### solana-address
```text ```text
solana-address solana-address
Get your public key Get your public key
USAGE: USAGE:
@ -254,7 +254,7 @@ OPTIONS:
#### solana-airdrop #### solana-airdrop
```text ```text
solana-airdrop solana-airdrop
Request lamports Request lamports
USAGE: USAGE:
@ -278,7 +278,7 @@ ARGS:
#### solana-balance #### solana-balance
```text ```text
solana-balance solana-balance
Get your balance Get your balance
USAGE: USAGE:
@ -300,7 +300,7 @@ ARGS:
#### solana-cancel #### solana-cancel
```text ```text
solana-cancel solana-cancel
Cancel a transfer Cancel a transfer
USAGE: USAGE:
@ -321,7 +321,7 @@ ARGS:
#### solana-claim-storage-reward #### solana-claim-storage-reward
```text ```text
solana-claim-storage-reward solana-claim-storage-reward
Redeem storage reward credits Redeem storage reward credits
USAGE: USAGE:
@ -343,7 +343,7 @@ ARGS:
#### solana-cluster-version #### solana-cluster-version
```text ```text
solana-cluster-version solana-cluster-version
Get the version of the cluster entrypoint Get the version of the cluster entrypoint
USAGE: USAGE:
@ -361,7 +361,7 @@ OPTIONS:
#### solana-confirm #### solana-confirm
```text ```text
solana-confirm solana-confirm
Confirm transaction by signature Confirm transaction by signature
USAGE: USAGE:
@ -382,7 +382,7 @@ ARGS:
#### solana-create-archiver-storage-account #### solana-create-archiver-storage-account
```text ```text
solana-create-archiver-storage-account solana-create-archiver-storage-account
Create an archiver storage account Create an archiver storage account
USAGE: USAGE:
@ -404,7 +404,7 @@ ARGS:
#### solana-create-stake-account #### solana-create-stake-account
```text ```text
solana-create-stake-account solana-create-stake-account
Create a stake account Create a stake account
USAGE: USAGE:
@ -432,7 +432,7 @@ ARGS:
#### solana-create-validator-storage-account #### solana-create-validator-storage-account
```text ```text
solana-create-validator-storage-account solana-create-validator-storage-account
Create a validator storage account Create a validator storage account
USAGE: USAGE:
@ -454,7 +454,7 @@ ARGS:
#### solana-create-vote-account #### solana-create-vote-account
```text ```text
solana-create-vote-account solana-create-vote-account
Create a vote account Create a vote account
USAGE: USAGE:
@ -480,7 +480,7 @@ ARGS:
#### solana-deactivate-stake #### solana-deactivate-stake
```text ```text
solana-deactivate-stake solana-deactivate-stake
Deactivate the delegated stake from the stake account Deactivate the delegated stake from the stake account
USAGE: USAGE:
@ -501,7 +501,7 @@ ARGS:
#### solana-delegate-stake #### solana-delegate-stake
```text ```text
solana-delegate-stake solana-delegate-stake
Delegate stake to a vote account Delegate stake to a vote account
USAGE: USAGE:
@ -523,7 +523,7 @@ ARGS:
#### solana-deploy #### solana-deploy
```text ```text
solana-deploy solana-deploy
Deploy a program Deploy a program
USAGE: USAGE:
@ -544,7 +544,7 @@ ARGS:
#### solana-fees #### solana-fees
```text ```text
solana-fees solana-fees
Display current cluster fees Display current cluster fees
USAGE: USAGE:
@ -562,7 +562,7 @@ OPTIONS:
#### solana-get #### solana-get
```text ```text
solana-get solana-get
Get cli config settings Get cli config settings
USAGE: USAGE:
@ -583,7 +583,7 @@ ARGS:
#### solana-get-epoch-info #### solana-get-epoch-info
```text ```text
solana-get-epoch-info solana-get-epoch-info
Get information about the current epoch Get information about the current epoch
USAGE: USAGE:
@ -599,13 +599,13 @@ OPTIONS:
-k, --keypair <PATH> /path/to/id.json -k, --keypair <PATH> /path/to/id.json
``` ```
#### solana-get-genesis-blockhash #### solana-get-genesis-hash
```text ```text
solana-get-genesis-blockhash solana-get-genesis-hash
Get the genesis blockhash Get the genesis hash
USAGE: USAGE:
solana get-genesis-blockhash [OPTIONS] solana get-genesis-hash [OPTIONS]
FLAGS: FLAGS:
-h, --help Prints help information -h, --help Prints help information
@ -619,7 +619,7 @@ OPTIONS:
#### solana-get-slot #### solana-get-slot
```text ```text
solana-get-slot solana-get-slot
Get current slot Get current slot
USAGE: USAGE:
@ -637,7 +637,7 @@ OPTIONS:
#### solana-get-transaction-count #### solana-get-transaction-count
```text ```text
solana-get-transaction-count solana-get-transaction-count
Get current transaction count Get current transaction count
USAGE: USAGE:
@ -655,7 +655,7 @@ OPTIONS:
#### solana-help #### solana-help
```text ```text
solana-help solana-help
Prints this message or the help of the given subcommand(s) Prints this message or the help of the given subcommand(s)
USAGE: USAGE:
@ -667,7 +667,7 @@ ARGS:
#### solana-pay #### solana-pay
```text ```text
solana-pay solana-pay
Send a payment Send a payment
USAGE: USAGE:
@ -695,7 +695,7 @@ ARGS:
#### solana-ping #### solana-ping
```text ```text
solana-ping solana-ping
Submit transactions sequentially Submit transactions sequentially
USAGE: USAGE:
@ -716,7 +716,7 @@ OPTIONS:
#### solana-redeem-vote-credits #### solana-redeem-vote-credits
```text ```text
solana-redeem-vote-credits solana-redeem-vote-credits
Redeem credits in the stake account Redeem credits in the stake account
USAGE: USAGE:
@ -738,7 +738,7 @@ ARGS:
#### solana-send-signature #### solana-send-signature
```text ```text
solana-send-signature solana-send-signature
Send a signature to authorize a transfer Send a signature to authorize a transfer
USAGE: USAGE:
@ -760,7 +760,7 @@ ARGS:
#### solana-send-timestamp #### solana-send-timestamp
```text ```text
solana-send-timestamp solana-send-timestamp
Send a timestamp to unlock a transfer Send a timestamp to unlock a transfer
USAGE: USAGE:
@ -783,7 +783,7 @@ ARGS:
#### solana-set #### solana-set
```text ```text
solana-set solana-set
Set a cli config setting Set a cli config setting
USAGE: USAGE:
@ -801,7 +801,7 @@ OPTIONS:
#### solana-show-account #### solana-show-account
```text ```text
solana-show-account solana-show-account
Show the contents of an account Show the contents of an account
USAGE: USAGE:
@ -824,7 +824,7 @@ ARGS:
#### solana-show-stake-account #### solana-show-stake-account
```text ```text
solana-show-stake-account solana-show-stake-account
Show the contents of a stake account Show the contents of a stake account
USAGE: USAGE:
@ -846,7 +846,7 @@ ARGS:
#### solana-show-storage-account #### solana-show-storage-account
```text ```text
solana-show-storage-account solana-show-storage-account
Show the contents of a storage account Show the contents of a storage account
USAGE: USAGE:
@ -867,7 +867,7 @@ ARGS:
#### solana-show-validators #### solana-show-validators
```text ```text
solana-show-validators solana-show-validators
Show information about the current validators Show information about the current validators
USAGE: USAGE:
@ -886,7 +886,7 @@ OPTIONS:
#### solana-show-vote-account #### solana-show-vote-account
```text ```text
solana-show-vote-account solana-show-vote-account
Show the contents of a vote account Show the contents of a vote account
USAGE: USAGE:
@ -908,7 +908,7 @@ ARGS:
#### solana-stake-authorize-staker #### solana-stake-authorize-staker
```text ```text
solana-stake-authorize-staker solana-stake-authorize-staker
Authorize a new stake signing keypair for the given stake account Authorize a new stake signing keypair for the given stake account
USAGE: USAGE:
@ -930,7 +930,7 @@ ARGS:
#### solana-stake-authorize-withdrawer #### solana-stake-authorize-withdrawer
```text ```text
solana-stake-authorize-withdrawer solana-stake-authorize-withdrawer
Authorize a new withdraw signing keypair for the given stake account Authorize a new withdraw signing keypair for the given stake account
USAGE: USAGE:
@ -952,7 +952,7 @@ ARGS:
#### solana-uptime #### solana-uptime
```text ```text
solana-uptime solana-uptime
Show the uptime of a validator, based on epoch voting history Show the uptime of a validator, based on epoch voting history
USAGE: USAGE:
@ -975,7 +975,7 @@ ARGS:
#### solana-validator-info #### solana-validator-info
```text ```text
solana-validator-info solana-validator-info
Publish/get Validator info on Solana Publish/get Validator info on Solana
USAGE: USAGE:
@ -998,7 +998,7 @@ SUBCOMMANDS:
#### solana-vote-authorize-voter #### solana-vote-authorize-voter
```text ```text
solana-vote-authorize-voter solana-vote-authorize-voter
Authorize a new vote signing keypair for the given vote account Authorize a new vote signing keypair for the given vote account
USAGE: USAGE:
@ -1020,7 +1020,7 @@ ARGS:
#### solana-vote-authorize-withdrawer #### solana-vote-authorize-withdrawer
```text ```text
solana-vote-authorize-withdrawer solana-vote-authorize-withdrawer
Authorize a new withdraw signing keypair for the given vote account Authorize a new withdraw signing keypair for the given vote account
USAGE: USAGE:
@ -1042,7 +1042,7 @@ ARGS:
#### solana-withdraw-stake #### solana-withdraw-stake
```text ```text
solana-withdraw-stake solana-withdraw-stake
Withdraw the unstaked lamports from the stake account Withdraw the unstaked lamports from the stake account
USAGE: USAGE:
@ -1063,4 +1063,3 @@ ARGS:
<AMOUNT> The amount to withdraw from the stake account (default unit SOL) <AMOUNT> The amount to withdraw from the stake account (default unit SOL)
<UNIT> Specify unit to use for request [possible values: SOL, lamports] <UNIT> Specify unit to use for request [possible values: SOL, lamports]
``` ```

View File

@ -21,7 +21,7 @@ To interact with a Solana node inside a JavaScript application, use the [solana-
* [getClusterNodes](jsonrpc-api.md#getclusternodes) * [getClusterNodes](jsonrpc-api.md#getclusternodes)
* [getEpochInfo](jsonrpc-api.md#getepochinfo) * [getEpochInfo](jsonrpc-api.md#getepochinfo)
* [getEpochSchedule](jsonrpc-api.md#getepochschedule) * [getEpochSchedule](jsonrpc-api.md#getepochschedule)
* [getGenesisBlockhash](jsonrpc-api.md#getgenesisblockhash) * [getGenesisHash](jsonrpc-api.md#getgenesishash)
* [getLeaderSchedule](jsonrpc-api.md#getleaderschedule) * [getLeaderSchedule](jsonrpc-api.md#getleaderschedule)
* [getMinimumBalanceForRentExemption](jsonrpc-api.md#getminimumbalanceforrentexemption) * [getMinimumBalanceForRentExemption](jsonrpc-api.md#getminimumbalanceforrentexemption)
* [getNumBlocksSinceSignatureConfirmation](jsonrpc-api.md#getnumblockssincesignatureconfirmation) * [getNumBlocksSinceSignatureConfirmation](jsonrpc-api.md#getnumblockssincesignatureconfirmation)
@ -255,7 +255,7 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "m
### getEpochSchedule ### getEpochSchedule
Returns epoch schedule information from this cluster's genesis block Returns epoch schedule information from this cluster's genesis config
#### Parameters: #### Parameters:
@ -281,9 +281,9 @@ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "m
{"jsonrpc":"2.0","result":{"first_normal_epoch":8,"first_normal_slot":8160,"leader_schedule_slot_offset":8192,"slots_per_epoch":8192,"warmup":true},"id":1} {"jsonrpc":"2.0","result":{"first_normal_epoch":8,"first_normal_slot":8160,"leader_schedule_slot_offset":8192,"slots_per_epoch":8192,"warmup":true},"id":1}
``` ```
### getGenesisBlockhash ### getGenesisHash
Returns the genesis block hash Returns the genesis hash
#### Parameters: #### Parameters:
@ -297,7 +297,7 @@ None
```bash ```bash
// Request // Request
curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getGenesisBlockhash"}' http://localhost:8899 curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1, "method":"getGenesisHash"}' http://localhost:8899
// Result // Result
{"jsonrpc":"2.0","result":"GH7ome3EiwEr7tu9JuTh2dpYWBJK3z69Xm1ZE3MEE6JC","id":1} {"jsonrpc":"2.0","result":"GH7ome3EiwEr7tu9JuTh2dpYWBJK3z69Xm1ZE3MEE6JC","id":1}

View File

@ -4,7 +4,7 @@ A Solana cluster is a set of validators working together to serve client transac
## Creating a Cluster ## Creating a Cluster
Before starting any validators, one first needs to create a _genesis block_. The block contains entries referencing two public keys, a _mint_ and a _bootstrap leader_. The validator holding the bootstrap leader's private key is responsible for appending the first entries to the ledger. It initializes its internal state with the mint's account. That account will hold the number of native tokens defined by the genesis block. The second validator then contacts the bootstrap leader to register as a _validator_ or _archiver_. Additional validators then register with any registered member of the cluster. Before starting any validators, one first needs to create a _genesis config_. The config references two public keys, a _mint_ and a _bootstrap leader_. The validator holding the bootstrap leader's private key is responsible for appending the first entries to the ledger. It initializes its internal state with the mint's account. That account will hold the number of native tokens defined by the genesis config. The second validator then contacts the bootstrap leader to register as a _validator_ or _archiver_. Additional validators then register with any registered member of the cluster.
A validator receives all entries from the leader and submits votes confirming those entries are valid. After voting, the validator is expected to store those entries until archiver nodes submit proofs that they have stored copies of it. Once the validator observes a sufficient number of copies exist, it deletes its copy. A validator receives all entries from the leader and submits votes confirming those entries are valid. After voting, the validator is expected to store those entries until archiver nodes submit proofs that they have stored copies of it. Once the validator observes a sufficient number of copies exist, it deletes its copy.
@ -38,4 +38,3 @@ Solana rotates leaders at fixed intervals, called _slots_. Each leader may only
Next, transactions are broken into batches so that a node can send transactions to multiple parties without making multiple copies. If, for example, the leader needed to send 60 transactions to 6 nodes, it would break that collection of 60 into batches of 10 transactions and send one to each node. This allows the leader to put 60 transactions on the wire, not 60 transactions for each node. Each node then shares its batch with its peers. Once the node has collected all 6 batches, it reconstructs the original set of 60 transactions. Next, transactions are broken into batches so that a node can send transactions to multiple parties without making multiple copies. If, for example, the leader needed to send 60 transactions to 6 nodes, it would break that collection of 60 into batches of 10 transactions and send one to each node. This allows the leader to put 60 transactions on the wire, not 60 transactions for each node. Each node then shares its batch with its peers. Once the node has collected all 6 batches, it reconstructs the original set of 60 transactions.
A batch of transactions can only be split so many times before it is so small that header information becomes the primary consumer of network bandwidth. At the time of this writing, the approach is scaling well up to about 150 validators. To scale up to hundreds of thousands of validators, each node can apply the same technique as the leader node to another set of nodes of equal size. We call the technique _data plane fanout_; learn more in the [data plan fanout](https://github.com/solana-labs/solana/tree/aacead62c0eb052068172eba6b53fc85874d6d54/book/src/data-plane-fanout.md) section. A batch of transactions can only be split so many times before it is so small that header information becomes the primary consumer of network bandwidth. At the time of this writing, the approach is scaling well up to about 150 validators. To scale up to hundreds of thousands of validators, each node can apply the same technique as the leader node to another set of nodes of equal size. We call the technique _data plane fanout_; learn more in the [data plan fanout](https://github.com/solana-labs/solana/tree/aacead62c0eb052068172eba6b53fc85874d6d54/book/src/data-plane-fanout.md) section.

View File

@ -40,7 +40,7 @@ After observing the cluster for a sufficient amount of time, the leader schedule
## Leader Schedule Generation at Genesis ## Leader Schedule Generation at Genesis
The genesis block declares the first leader for the first epoch. This leader ends up scheduled for the first two epochs because the leader schedule is also generated at slot 0 for the next epoch. The length of the first two epochs can be specified in the genesis block as well. The minimum length of the first epochs must be greater than or equal to the maximum rollback depth as defined in [Tower BFT](../implemented-proposals/tower-bft.md). The genesis config declares the first leader for the first epoch. This leader ends up scheduled for the first two epochs because the leader schedule is also generated at slot 0 for the next epoch. The length of the first two epochs can be specified in the genesis config as well. The minimum length of the first epochs must be greater than or equal to the maximum rollback depth as defined in [Tower BFT](../implemented-proposals/tower-bft.md).
## Leader Schedule Generation Algorithm ## Leader Schedule Generation Algorithm
@ -73,7 +73,7 @@ The seed that is selected is predictable but unbiasable. There is no grinding at
A leader can bias the active set by censoring validator votes. Two possible ways exist for leaders to censor the active set: A leader can bias the active set by censoring validator votes. Two possible ways exist for leaders to censor the active set:
* Ignore votes from validators * Ignore votes from validators
* Refuse to vote for blocks with votes from validators * Refuse to vote for blocks with votes from validators
To reduce the likelihood of censorship, the active set is calculated at the leader schedule offset boundary over an _active set sampling duration_. The active set sampling duration is long enough such that votes will have been collected by multiple leaders. To reduce the likelihood of censorship, the active set is calculated at the leader schedule offset boundary over an _active set sampling duration_. The active set sampling duration is long enough such that votes will have been collected by multiple leaders.
@ -95,4 +95,3 @@ The lifetime of a leader schedule is called an _epoch_. The epoch is split into
A leader transmits entries during its slot. After `T` ticks, all the validators switch to the next scheduled leader. Validators must ignore entries sent outside a leader's assigned slot. A leader transmits entries during its slot. After `T` ticks, all the validators switch to the next scheduled leader. Validators must ignore entries sent outside a leader's assigned slot.
All `T` ticks must be observed by the next leader for it to build its own entries on. If entries are not observed \(leader is down\) or entries are invalid \(leader is buggy or malicious\), the next leader must produce ticks to fill the previous leader's slot. Note that the next leader should do repair requests in parallel, and postpone sending ticks until it is confident other validators also failed to observe the previous leader's entries. If a leader incorrectly builds on its own ticks, the leader following it must replace all its ticks. All `T` ticks must be observed by the next leader for it to build its own entries on. If entries are not observed \(leader is down\) or entries are invalid \(leader is buggy or malicious\), the next leader must produce ticks to fill the previous leader's slot. Note that the next leader should do repair requests in parallel, and postpone sending ticks until it is confident other validators also failed to observe the previous leader's entries. If a leader incorrectly builds on its own ticks, the leader following it must replace all its ticks.

View File

@ -4,7 +4,7 @@ Transactions currently include a fee field that indicates the maximum fee field
## Congestion-driven fees ## Congestion-driven fees
Each validator uses _signatures per slot_ \(SPS\) to estimate network congestion and _SPS target_ to estimate the desired processing capacity of the cluster. The validator learns the SPS target from the genesis block, whereas it calculates SPS from recently processed transactions. The genesis block also defines a target `lamports_per_signature`, which is the fee to charge per signature when the cluster is operating at _SPS target_. Each validator uses _signatures per slot_ \(SPS\) to estimate network congestion and _SPS target_ to estimate the desired processing capacity of the cluster. The validator learns the SPS target from the genesis config, whereas it calculates SPS from recently processed transactions. The genesis config also defines a target `lamports_per_signature`, which is the fee to charge per signature when the cluster is operating at _SPS target_.
## Calculating fees ## Calculating fees
@ -28,4 +28,3 @@ Future parameters might include:
### Hijacking the SPS Target ### Hijacking the SPS Target
A group of validators can centralize the cluster if they can convince it to raise the SPS Target above a point where the rest of the validators can keep up. Raising the target will cause fees to drop, presumably creating more demand and therefore higher TPS. If the validator doesn't have hardware that can process that many transactions that fast, its confirmation votes will eventually get so long that the cluster will be forced to boot it. A group of validators can centralize the cluster if they can convince it to raise the SPS Target above a point where the rest of the validators can keep up. Raising the target will cause fees to drop, presumably creating more demand and therefore higher TPS. If the validator doesn't have hardware that can process that many transactions that fast, its confirmation votes will eventually get so long that the cluster will be forced to boot it.

View File

@ -153,7 +153,7 @@ startNodes() {
addLogs=true addLogs=true
fi fi
initCompleteFiles=() initCompleteFiles=()
maybeExpectedGenesisBlockhash= maybeExpectedGenesisHash=
for i in $(seq 0 $((${#nodes[@]} - 1))); do for i in $(seq 0 $((${#nodes[@]} - 1))); do
declare cmd=${nodes[$i]} declare cmd=${nodes[$i]}
@ -162,7 +162,7 @@ startNodes() {
rm -f "$initCompleteFile" rm -f "$initCompleteFile"
initCompleteFiles+=("$initCompleteFile") initCompleteFiles+=("$initCompleteFile")
fi fi
startNode "$i" "$cmd $maybeExpectedGenesisBlockhash" startNode "$i" "$cmd $maybeExpectedGenesisHash"
if $addLogs; then if $addLogs; then
logs+=("$(getNodeLogFile "$i" "$cmd")") logs+=("$(getNodeLogFile "$i" "$cmd")")
fi fi
@ -176,9 +176,9 @@ startNodes() {
( (
set -x set -x
$solana_cli --keypair config/bootstrap-leader/identity-keypair.json \ $solana_cli --keypair config/bootstrap-leader/identity-keypair.json \
--url http://127.0.0.1:8899 get-genesis-blockhash --url http://127.0.0.1:8899 get-genesis-hash
) | tee genesis-blockhash.log ) | tee genesis-hash.log
maybeExpectedGenesisBlockhash="--expected-genesis-blockhash $(tail -n1 genesis-blockhash.log)" maybeExpectedGenesisHash="--expected-genesis-hash $(tail -n1 genesis-hash.log)"
fi fi
done done

View File

@ -75,11 +75,11 @@ Deploys a CD testnet
-S - Stop network software without tearing down nodes. -S - Stop network software without tearing down nodes.
-f - Discard validator nodes that didn't bootup successfully -f - Discard validator nodes that didn't bootup successfully
--no-airdrop --no-airdrop
- If set, disables airdrops. Nodes must be funded in genesis block when airdrops are disabled. - If set, disables airdrops. Nodes must be funded in genesis config when airdrops are disabled.
--internal-nodes-stake-lamports NUM_LAMPORTS --internal-nodes-stake-lamports NUM_LAMPORTS
- Amount to stake internal nodes. - Amount to stake internal nodes.
--internal-nodes-lamports NUM_LAMPORTS --internal-nodes-lamports NUM_LAMPORTS
- Amount to fund internal nodes in genesis block - Amount to fund internal nodes in genesis config
--external-accounts-file FILE_PATH --external-accounts-file FILE_PATH
- Path to external Primordial Accounts file, if it exists. - Path to external Primordial Accounts file, if it exists.
--hashes-per-tick NUM_HASHES|sleep|auto --hashes-per-tick NUM_HASHES|sleep|auto

View File

@ -72,7 +72,7 @@ pub enum CliCommand {
ClusterVersion, ClusterVersion,
Fees, Fees,
GetEpochInfo, GetEpochInfo,
GetGenesisBlockhash, GetGenesisHash,
GetSlot, GetSlot,
GetTransactionCount, GetTransactionCount,
Ping { Ping {
@ -247,8 +247,8 @@ pub fn parse_command(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, Box<dyn
command: CliCommand::GetEpochInfo, command: CliCommand::GetEpochInfo,
require_keypair: false, require_keypair: false,
}), }),
("get-genesis-blockhash", Some(_matches)) => Ok(CliCommandInfo { ("get-genesis-hash", Some(_matches)) => Ok(CliCommandInfo {
command: CliCommand::GetGenesisBlockhash, command: CliCommand::GetGenesisHash,
require_keypair: false, require_keypair: false,
}), }),
("get-slot", Some(_matches)) => Ok(CliCommandInfo { ("get-slot", Some(_matches)) => Ok(CliCommandInfo {
@ -849,7 +849,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
// Return software version of solana-cli and cluster entrypoint node // Return software version of solana-cli and cluster entrypoint node
CliCommand::ClusterVersion => process_cluster_version(&rpc_client, config), CliCommand::ClusterVersion => process_cluster_version(&rpc_client, config),
CliCommand::Fees => process_fees(&rpc_client), CliCommand::Fees => process_fees(&rpc_client),
CliCommand::GetGenesisBlockhash => process_get_genesis_blockhash(&rpc_client), CliCommand::GetGenesisHash => process_get_genesis_hash(&rpc_client),
CliCommand::GetSlot => process_get_slot(&rpc_client), CliCommand::GetSlot => process_get_slot(&rpc_client),
CliCommand::GetEpochInfo => process_get_epoch_info(&rpc_client), CliCommand::GetEpochInfo => process_get_epoch_info(&rpc_client),
CliCommand::GetTransactionCount => process_get_transaction_count(&rpc_client), CliCommand::GetTransactionCount => process_get_transaction_count(&rpc_client),

View File

@ -41,7 +41,7 @@ impl ClusterQuerySubCommands for App<'_, '_> {
.about("Get information about the current epoch"), .about("Get information about the current epoch"),
) )
.subcommand( .subcommand(
SubCommand::with_name("get-genesis-blockhash").about("Get the genesis blockhash"), SubCommand::with_name("get-genesis-hash").about("Get the genesis hash"),
) )
.subcommand(SubCommand::with_name("get-slot").about("Get current slot")) .subcommand(SubCommand::with_name("get-slot").about("Get current slot"))
.subcommand( .subcommand(
@ -186,9 +186,9 @@ pub fn process_get_epoch_info(rpc_client: &RpcClient) -> ProcessResult {
Ok("".to_string()) Ok("".to_string())
} }
pub fn process_get_genesis_blockhash(rpc_client: &RpcClient) -> ProcessResult { pub fn process_get_genesis_hash(rpc_client: &RpcClient) -> ProcessResult {
let genesis_blockhash = rpc_client.get_genesis_blockhash()?; let genesis_hash = rpc_client.get_genesis_hash()?;
Ok(genesis_blockhash.to_string()) Ok(genesis_hash.to_string())
} }
pub fn process_get_slot(rpc_client: &RpcClient) -> ProcessResult { pub fn process_get_slot(rpc_client: &RpcClient) -> ProcessResult {
@ -463,13 +463,13 @@ mod tests {
} }
); );
let test_get_genesis_blockhash = test_commands let test_get_genesis_hash = test_commands
.clone() .clone()
.get_matches_from(vec!["test", "get-genesis-blockhash"]); .get_matches_from(vec!["test", "get-genesis-hash"]);
assert_eq!( assert_eq!(
parse_command(&test_get_genesis_blockhash).unwrap(), parse_command(&test_get_genesis_hash).unwrap(),
CliCommandInfo { CliCommandInfo {
command: CliCommand::GetGenesisBlockhash, command: CliCommand::GetGenesisHash,
require_keypair: false require_keypair: false
} }
); );

View File

@ -620,31 +620,31 @@ impl RpcClient {
)) ))
} }
pub fn get_genesis_blockhash(&self) -> io::Result<Hash> { pub fn get_genesis_hash(&self) -> io::Result<Hash> {
let response = self let response = self
.client .client
.send(&RpcRequest::GetGenesisBlockhash, None, 0, None) .send(&RpcRequest::GetGenesisHash, None, 0, None)
.map_err(|err| { .map_err(|err| {
io::Error::new( io::Error::new(
io::ErrorKind::Other, io::ErrorKind::Other,
format!("GetGenesisBlockhash request failure: {:?}", err), format!("GetGenesisHash request failure: {:?}", err),
) )
})?; })?;
let blockhash = serde_json::from_value::<String>(response).map_err(|err| { let hash = serde_json::from_value::<String>(response).map_err(|err| {
io::Error::new( io::Error::new(
io::ErrorKind::Other, io::ErrorKind::Other,
format!("GetGenesisBlockhash parse failure: {:?}", err), format!("GetGenesisHash parse failure: {:?}", err),
) )
})?; })?;
let blockhash = blockhash.parse().map_err(|err| { let hash = hash.parse().map_err(|err| {
io::Error::new( io::Error::new(
io::ErrorKind::Other, io::ErrorKind::Other,
format!("GetGenesisBlockhash hash parse failure: {:?}", err), format!("GetGenesisHash hash parse failure: {:?}", err),
) )
})?; })?;
Ok(blockhash) Ok(hash)
} }
pub fn poll_balance_with_timeout_and_commitment( pub fn poll_balance_with_timeout_and_commitment(

View File

@ -63,7 +63,7 @@ pub enum RpcRequest {
GetClusterNodes, GetClusterNodes,
GetEpochInfo, GetEpochInfo,
GetEpochSchedule, GetEpochSchedule,
GetGenesisBlockhash, GetGenesisHash,
GetInflation, GetInflation,
GetNumBlocksSinceSignatureConfirmation, GetNumBlocksSinceSignatureConfirmation,
GetProgramAccounts, GetProgramAccounts,
@ -102,7 +102,7 @@ impl RpcRequest {
RpcRequest::GetClusterNodes => "getClusterNodes", RpcRequest::GetClusterNodes => "getClusterNodes",
RpcRequest::GetEpochInfo => "getEpochInfo", RpcRequest::GetEpochInfo => "getEpochInfo",
RpcRequest::GetEpochSchedule => "getEpochSchedule", RpcRequest::GetEpochSchedule => "getEpochSchedule",
RpcRequest::GetGenesisBlockhash => "getGenesisBlockhash", RpcRequest::GetGenesisHash => "getGenesisHash",
RpcRequest::GetInflation => "getInflation", RpcRequest::GetInflation => "getInflation",
RpcRequest::GetNumBlocksSinceSignatureConfirmation => { RpcRequest::GetNumBlocksSinceSignatureConfirmation => {
"getNumBlocksSinceSignatureConfirmation" "getNumBlocksSinceSignatureConfirmation"

View File

@ -11,7 +11,7 @@ use rayon::prelude::*;
use solana_core::banking_stage::{create_test_recorder, BankingStage}; use solana_core::banking_stage::{create_test_recorder, BankingStage};
use solana_core::cluster_info::ClusterInfo; use solana_core::cluster_info::ClusterInfo;
use solana_core::cluster_info::Node; use solana_core::cluster_info::Node;
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use solana_core::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_core::packet::to_packets_chunked; use solana_core::packet::to_packets_chunked;
use solana_core::poh_recorder::WorkingBankEntry; use solana_core::poh_recorder::WorkingBankEntry;
use solana_core::service::Service; use solana_core::service::Service;
@ -20,7 +20,7 @@ use solana_ledger::blocktree_processor::process_entries;
use solana_ledger::entry::{next_hash, Entry}; use solana_ledger::entry::{next_hash, Entry};
use solana_perf::test_tx::test_tx; use solana_perf::test_tx::test_tx;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::Keypair; use solana_sdk::signature::Keypair;
@ -55,8 +55,8 @@ fn check_txs(receiver: &Arc<Receiver<WorkingBankEntry>>, ref_tx_count: usize) {
#[bench] #[bench]
fn bench_consume_buffered(bencher: &mut Bencher) { fn bench_consume_buffered(bencher: &mut Bencher) {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(100_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(100_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let ledger_path = get_tmp_ledger_path!(); let ledger_path = get_tmp_ledger_path!();
let my_pubkey = Pubkey::new_rand(); let my_pubkey = Pubkey::new_rand();
{ {
@ -139,25 +139,25 @@ fn bench_banking(bencher: &mut Bencher, tx_type: TransactionType) {
const PACKETS_PER_BATCH: usize = 192; const PACKETS_PER_BATCH: usize = 192;
let txes = PACKETS_PER_BATCH * num_threads * CHUNKS; let txes = PACKETS_PER_BATCH * num_threads * CHUNKS;
let mint_total = 1_000_000_000_000; let mint_total = 1_000_000_000_000;
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(mint_total); } = create_genesis_config(mint_total);
// Set a high ticks_per_slot so we don't run out of ticks // Set a high ticks_per_slot so we don't run out of ticks
// during the benchmark // during the benchmark
genesis_block.ticks_per_slot = 10_000; genesis_config.ticks_per_slot = 10_000;
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
let (vote_sender, vote_receiver) = unbounded(); let (vote_sender, vote_receiver) = unbounded();
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
debug!("threads: {} txs: {}", num_threads, txes); debug!("threads: {} txs: {}", num_threads, txes);
let transactions = match tx_type { let transactions = match tx_type {
TransactionType::Accounts => make_accounts_txs(txes, &mint_keypair, genesis_block.hash()), TransactionType::Accounts => make_accounts_txs(txes, &mint_keypair, genesis_config.hash()),
TransactionType::Programs => make_programs_txs(txes, genesis_block.hash()), TransactionType::Programs => make_programs_txs(txes, genesis_config.hash()),
}; };
// fund all the accounts // fund all the accounts
@ -166,7 +166,7 @@ fn bench_banking(bencher: &mut Bencher, tx_type: TransactionType) {
&mint_keypair, &mint_keypair,
&tx.message.account_keys[0], &tx.message.account_keys[0],
mint_total / txes as u64, mint_total / txes as u64,
genesis_block.hash(), genesis_config.hash(),
); );
let x = bank.process_transaction(&fund); let x = bank.process_transaction(&fund);
x.unwrap(); x.unwrap();
@ -262,12 +262,12 @@ fn simulate_process_entries(
randomize_txs: bool, randomize_txs: bool,
mint_keypair: &Keypair, mint_keypair: &Keypair,
mut tx_vector: Vec<Transaction>, mut tx_vector: Vec<Transaction>,
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
keypairs: &Vec<Keypair>, keypairs: &Vec<Keypair>,
initial_lamports: u64, initial_lamports: u64,
num_accounts: usize, num_accounts: usize,
) { ) {
let bank = Arc::new(Bank::new(genesis_block)); let bank = Arc::new(Bank::new(genesis_config));
for i in 0..(num_accounts / 2) { for i in 0..(num_accounts / 2) {
bank.transfer(initial_lamports, mint_keypair, &keypairs[i * 2].pubkey()) bank.transfer(initial_lamports, mint_keypair, &keypairs[i * 2].pubkey())
@ -301,11 +301,11 @@ fn bench_process_entries(randomize_txs: bool, bencher: &mut Bencher) {
// number of accounts need to be in multiple of 4 for correct // number of accounts need to be in multiple of 4 for correct
// execution of the test. // execution of the test.
let num_accounts = entropy_multiplier * 4; let num_accounts = entropy_multiplier * 4;
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block((num_accounts + 1) as u64 * initial_lamports); } = create_genesis_config((num_accounts + 1) as u64 * initial_lamports);
let mut keypairs: Vec<Keypair> = vec![]; let mut keypairs: Vec<Keypair> = vec![];
let tx_vector: Vec<Transaction> = Vec::with_capacity(num_accounts / 2); let tx_vector: Vec<Transaction> = Vec::with_capacity(num_accounts / 2);
@ -320,7 +320,7 @@ fn bench_process_entries(randomize_txs: bool, bencher: &mut Bencher) {
randomize_txs, randomize_txs,
&mint_keypair, &mint_keypair,
tx_vector.clone(), tx_vector.clone(),
&genesis_block, &genesis_config,
&keypairs, &keypairs,
initial_lamports, initial_lamports,
num_accounts, num_accounts,

View File

@ -6,7 +6,7 @@ extern crate test;
use log::*; use log::*;
use solana_core::cluster_info::{ClusterInfo, Node}; use solana_core::cluster_info::{ClusterInfo, Node};
use solana_core::contact_info::ContactInfo; use solana_core::contact_info::ContactInfo;
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use solana_core::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_core::packet::to_packets_chunked; use solana_core::packet::to_packets_chunked;
use solana_core::retransmit_stage::retransmitter; use solana_core::retransmit_stage::retransmitter;
use solana_ledger::bank_forks::BankForks; use solana_ledger::bank_forks::BankForks;
@ -47,8 +47,8 @@ fn bench_retransmitter(bencher: &mut Bencher) {
let peer_sockets = Arc::new(peer_sockets); let peer_sockets = Arc::new(peer_sockets);
let cluster_info = Arc::new(RwLock::new(cluster_info)); let cluster_info = Arc::new(RwLock::new(cluster_info));
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(100_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(100_000);
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let bank_forks = BankForks::new(0, bank0); let bank_forks = BankForks::new(0, bank0);
let bank = bank_forks.working_bank(); let bank = bank_forks.working_bank();
let bank_forks = Arc::new(RwLock::new(bank_forks)); let bank_forks = Arc::new(RwLock::new(bank_forks));

View File

@ -973,7 +973,7 @@ pub fn create_test_recorder(
mod tests { mod tests {
use super::*; use super::*;
use crate::cluster_info::Node; use crate::cluster_info::Node;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::packet::to_packets; use crate::packet::to_packets;
use crate::poh_recorder::WorkingBank; use crate::poh_recorder::WorkingBank;
use crossbeam_channel::unbounded; use crossbeam_channel::unbounded;
@ -989,8 +989,8 @@ mod tests {
#[test] #[test]
fn test_banking_stage_shutdown1() { fn test_banking_stage_shutdown1() {
let genesis_block = create_genesis_block(2).genesis_block; let genesis_config = create_genesis_config(2).genesis_config;
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
let (vote_sender, vote_receiver) = unbounded(); let (vote_sender, vote_receiver) = unbounded();
let ledger_path = get_tmp_ledger_path!(); let ledger_path = get_tmp_ledger_path!();
@ -1020,12 +1020,12 @@ mod tests {
#[test] #[test]
fn test_banking_stage_tick() { fn test_banking_stage_tick() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(2); } = create_genesis_config(2);
genesis_block.ticks_per_slot = 4; genesis_config.ticks_per_slot = 4;
let num_extra_ticks = 2; let num_extra_ticks = 2;
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let start_hash = bank.last_blockhash(); let start_hash = bank.last_blockhash();
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
let (vote_sender, vote_receiver) = unbounded(); let (vote_sender, vote_receiver) = unbounded();
@ -1059,7 +1059,7 @@ mod tests {
.map(|(_bank, (entry, _tick_height))| entry) .map(|(_bank, (entry, _tick_height))| entry)
.collect(); .collect();
trace!("done"); trace!("done");
assert_eq!(entries.len(), genesis_block.ticks_per_slot as usize); assert_eq!(entries.len(), genesis_config.ticks_per_slot as usize);
assert!(entries.verify(&start_hash)); assert!(entries.verify(&start_hash));
assert_eq!(entries[entries.len() - 1].hash, bank.last_blockhash()); assert_eq!(entries[entries.len() - 1].hash, bank.last_blockhash());
banking_stage.join().unwrap(); banking_stage.join().unwrap();
@ -1080,12 +1080,12 @@ mod tests {
#[test] #[test]
fn test_banking_stage_entries_only() { fn test_banking_stage_entries_only() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10); } = create_genesis_config(10);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let start_hash = bank.last_blockhash(); let start_hash = bank.last_blockhash();
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
let (vote_sender, vote_receiver) = unbounded(); let (vote_sender, vote_receiver) = unbounded();
@ -1152,7 +1152,7 @@ mod tests {
drop(poh_recorder); drop(poh_recorder);
let mut blockhash = start_hash; let mut blockhash = start_hash;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
bank.process_transaction(&fund_tx).unwrap(); bank.process_transaction(&fund_tx).unwrap();
//receive entries + ticks //receive entries + ticks
loop { loop {
@ -1192,17 +1192,17 @@ mod tests {
// In this attack we'll demonstrate that a verifier can interpret the ledger // In this attack we'll demonstrate that a verifier can interpret the ledger
// differently if either the server doesn't signal the ledger to add an // differently if either the server doesn't signal the ledger to add an
// Entry OR if the verifier tries to parallelize across multiple Entries. // Entry OR if the verifier tries to parallelize across multiple Entries.
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(2); } = create_genesis_config(2);
let (verified_sender, verified_receiver) = unbounded(); let (verified_sender, verified_receiver) = unbounded();
// Process a batch that includes a transaction that receives two lamports. // Process a batch that includes a transaction that receives two lamports.
let alice = Keypair::new(); let alice = Keypair::new();
let tx = let tx =
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 2, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &alice.pubkey(), 2, genesis_config.hash());
let packets = to_packets(&[tx]); let packets = to_packets(&[tx]);
let packets = packets let packets = packets
@ -1214,7 +1214,7 @@ mod tests {
// Process a second batch that uses the same from account, so conflicts with above TX // Process a second batch that uses the same from account, so conflicts with above TX
let tx = let tx =
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_config.hash());
let packets = to_packets(&[tx]); let packets = to_packets(&[tx]);
let packets = packets let packets = packets
.into_iter() .into_iter()
@ -1228,7 +1228,7 @@ mod tests {
{ {
let entry_receiver = { let entry_receiver = {
// start a banking_stage to eat verified receiver // start a banking_stage to eat verified receiver
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let blocktree = Arc::new( let blocktree = Arc::new(
Blocktree::open(&ledger_path) Blocktree::open(&ledger_path)
.expect("Expected to be able to open database ledger"), .expect("Expected to be able to open database ledger"),
@ -1267,7 +1267,7 @@ mod tests {
.map(|(_bank, (entry, _tick_height))| entry) .map(|(_bank, (entry, _tick_height))| entry)
.collect(); .collect();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
for entry in &entries { for entry in &entries {
bank.process_transactions(&entry.transactions) bank.process_transactions(&entry.transactions)
.iter() .iter()
@ -1284,12 +1284,12 @@ mod tests {
#[test] #[test]
fn test_bank_record_transactions() { fn test_bank_record_transactions() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let working_bank = WorkingBank { let working_bank = WorkingBank {
bank: bank.clone(), bank: bank.clone(),
min_tick_height: bank.tick_height(), min_tick_height: bank.tick_height(),
@ -1318,8 +1318,8 @@ mod tests {
let pubkey2 = Pubkey::new_rand(); let pubkey2 = Pubkey::new_rand();
let transactions = vec![ let transactions = vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&keypair2, &pubkey2, 1, genesis_block.hash()), system_transaction::transfer(&keypair2, &pubkey2, 1, genesis_config.hash()),
]; ];
let mut results = vec![Ok(()), Ok(())]; let mut results = vec![Ok(()), Ok(())];
@ -1385,11 +1385,11 @@ mod tests {
#[test] #[test]
fn test_bank_filter_transaction_indexes() { fn test_bank_filter_transaction_indexes() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let transactions = vec![ let transactions = vec![
@ -1398,19 +1398,19 @@ mod tests {
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
Some(system_transaction::transfer( Some(system_transaction::transfer(
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
Some(system_transaction::transfer( Some(system_transaction::transfer(
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
None, None,
None, None,
@ -1418,33 +1418,33 @@ mod tests {
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
None, None,
Some(system_transaction::transfer( Some(system_transaction::transfer(
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
None, None,
Some(system_transaction::transfer( Some(system_transaction::transfer(
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
None, None,
None, None,
]; ];
let filtered_transactions = vec![ let filtered_transactions = vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
]; ];
assert_eq!( assert_eq!(
@ -1466,20 +1466,20 @@ mod tests {
#[test] #[test]
fn test_bank_prepare_filter_for_pending_transaction() { fn test_bank_prepare_filter_for_pending_transaction() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let transactions = vec![ let transactions = vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
]; ];
assert_eq!( assert_eq!(
@ -1608,19 +1608,19 @@ mod tests {
#[test] #[test]
fn test_bank_process_and_record_transactions() { fn test_bank_process_and_record_transactions() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let transactions = vec![system_transaction::transfer( let transactions = vec![system_transaction::transfer(
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
1, 1,
genesis_block.hash(), genesis_config.hash(),
)]; )];
let working_bank = WorkingBank { let working_bank = WorkingBank {
@ -1673,7 +1673,7 @@ mod tests {
&mint_keypair, &mint_keypair,
&pubkey, &pubkey,
2, 2,
genesis_block.hash(), genesis_config.hash(),
)]; )];
assert_matches!( assert_matches!(
@ -1695,18 +1695,18 @@ mod tests {
#[test] #[test]
fn test_bank_process_and_record_transactions_account_in_use() { fn test_bank_process_and_record_transactions_account_in_use() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let pubkey1 = Pubkey::new_rand(); let pubkey1 = Pubkey::new_rand();
let transactions = vec![ let transactions = vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&mint_keypair, &pubkey1, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey1, 1, genesis_config.hash()),
]; ];
let working_bank = WorkingBank { let working_bank = WorkingBank {
@ -1786,17 +1786,20 @@ mod tests {
#[test] #[test]
fn test_process_transactions_returns_unprocessed_txs() { fn test_process_transactions_returns_unprocessed_txs() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let transactions = let transactions =
vec![system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash(),); 3]; vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash(),);
3
];
let ledger_path = get_tmp_ledger_path!(); let ledger_path = get_tmp_ledger_path!();
{ {

View File

@ -101,7 +101,7 @@ impl Service for BlockstreamService {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use bincode::{deserialize, serialize}; use bincode::{deserialize, serialize};
use chrono::{DateTime, FixedOffset}; use chrono::{DateTime, FixedOffset};
use serde_json::Value; use serde_json::Value;
@ -118,13 +118,13 @@ mod test {
let ticks_per_slot = 5; let ticks_per_slot = 5;
let leader_pubkey = Pubkey::new_rand(); let leader_pubkey = Pubkey::new_rand();
// Set up genesis block and blocktree // Set up genesis config and blocktree
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
genesis_block.ticks_per_slot = ticks_per_slot; genesis_config.ticks_per_slot = ticks_per_slot;
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
// Set up blockstream // Set up blockstream

View File

@ -192,7 +192,7 @@ impl Service for BroadcastStage {
mod test { mod test {
use super::*; use super::*;
use crate::cluster_info::{ClusterInfo, Node}; use crate::cluster_info::{ClusterInfo, Node};
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::service::Service; use crate::service::Service;
use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree}; use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree};
use solana_ledger::entry::create_ticks; use solana_ledger::entry::create_ticks;
@ -235,8 +235,8 @@ mod test {
let exit_sender = Arc::new(AtomicBool::new(false)); let exit_sender = Arc::new(AtomicBool::new(false));
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let leader_keypair = cluster_info.read().unwrap().keypair.clone(); let leader_keypair = cluster_info.read().unwrap().keypair.clone();
// Start up the broadcast stage // Start up the broadcast stage

View File

@ -76,37 +76,37 @@ pub(super) fn recv_slot_entries(receiver: &Receiver<WorkingBankEntry>) -> Result
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::system_transaction; use solana_sdk::system_transaction;
use solana_sdk::transaction::Transaction; use solana_sdk::transaction::Transaction;
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
fn setup_test() -> (GenesisBlock, Arc<Bank>, Transaction) { fn setup_test() -> (GenesisConfig, Arc<Bank>, Transaction) {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(2); } = create_genesis_config(2);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let tx = system_transaction::transfer( let tx = system_transaction::transfer(
&mint_keypair, &mint_keypair,
&Pubkey::new_rand(), &Pubkey::new_rand(),
1, 1,
genesis_block.hash(), genesis_config.hash(),
); );
(genesis_block, bank0, tx) (genesis_config, bank0, tx)
} }
#[test] #[test]
fn test_recv_slot_entries_1() { fn test_recv_slot_entries_1() {
let (genesis_block, bank0, tx) = setup_test(); let (genesis_config, bank0, tx) = setup_test();
let bank1 = Arc::new(Bank::new_from_parent(&bank0, &Pubkey::default(), 1)); let bank1 = Arc::new(Bank::new_from_parent(&bank0, &Pubkey::default(), 1));
let (s, r) = channel(); let (s, r) = channel();
let mut last_hash = genesis_block.hash(); let mut last_hash = genesis_config.hash();
assert!(bank1.max_tick_height() > 1); assert!(bank1.max_tick_height() > 1);
let entries: Vec<_> = (1..bank1.max_tick_height() + 1) let entries: Vec<_> = (1..bank1.max_tick_height() + 1)
@ -131,13 +131,13 @@ mod tests {
#[test] #[test]
fn test_recv_slot_entries_2() { fn test_recv_slot_entries_2() {
let (genesis_block, bank0, tx) = setup_test(); let (genesis_config, bank0, tx) = setup_test();
let bank1 = Arc::new(Bank::new_from_parent(&bank0, &Pubkey::default(), 1)); let bank1 = Arc::new(Bank::new_from_parent(&bank0, &Pubkey::default(), 1));
let bank2 = Arc::new(Bank::new_from_parent(&bank1, &Pubkey::default(), 2)); let bank2 = Arc::new(Bank::new_from_parent(&bank1, &Pubkey::default(), 2));
let (s, r) = channel(); let (s, r) = channel();
let mut last_hash = genesis_block.hash(); let mut last_hash = genesis_config.hash();
assert!(bank1.max_tick_height() > 1); assert!(bank1.max_tick_height() > 1);
// Simulate slot 2 interrupting slot 1's transmission // Simulate slot 2 interrupting slot 1's transmission
let expected_last_height = bank1.max_tick_height(); let expected_last_height = bank1.max_tick_height();

View File

@ -298,7 +298,7 @@ impl BroadcastRun for StandardBroadcastRun {
mod test { mod test {
use super::*; use super::*;
use crate::cluster_info::{ClusterInfo, Node}; use crate::cluster_info::{ClusterInfo, Node};
use crate::genesis_utils::create_genesis_block; use crate::genesis_utils::create_genesis_config;
use solana_ledger::{ use solana_ledger::{
blocktree::{get_tmp_ledger_path, Blocktree}, blocktree::{get_tmp_ledger_path, Blocktree},
entry::create_ticks, entry::create_ticks,
@ -307,7 +307,7 @@ mod test {
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::{ use solana_sdk::{
clock::Slot, clock::Slot,
genesis_block::GenesisBlock, genesis_config::GenesisConfig,
signature::{Keypair, KeypairUtil}, signature::{Keypair, KeypairUtil},
}; };
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
@ -317,7 +317,7 @@ mod test {
num_shreds_per_slot: Slot, num_shreds_per_slot: Slot,
) -> ( ) -> (
Arc<Blocktree>, Arc<Blocktree>,
GenesisBlock, GenesisConfig,
Arc<RwLock<ClusterInfo>>, Arc<RwLock<ClusterInfo>>,
Arc<Bank>, Arc<Bank>,
Arc<Keypair>, Arc<Keypair>,
@ -335,12 +335,12 @@ mod test {
leader_info.info.clone(), leader_info.info.clone(),
))); )));
let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let mut genesis_block = create_genesis_block(10_000).genesis_block; let mut genesis_config = create_genesis_config(10_000).genesis_config;
genesis_block.ticks_per_slot = max_ticks_per_n_shreds(num_shreds_per_slot) + 1; genesis_config.ticks_per_slot = max_ticks_per_n_shreds(num_shreds_per_slot) + 1;
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
( (
blocktree, blocktree,
genesis_block, genesis_config,
cluster_info, cluster_info,
bank0, bank0,
leader_keypair, leader_keypair,
@ -384,11 +384,11 @@ mod test {
fn test_slot_interrupt() { fn test_slot_interrupt() {
// Setup // Setup
let num_shreds_per_slot = 2; let num_shreds_per_slot = 2;
let (blocktree, genesis_block, cluster_info, bank0, leader_keypair, socket) = let (blocktree, genesis_config, cluster_info, bank0, leader_keypair, socket) =
setup(num_shreds_per_slot); setup(num_shreds_per_slot);
// Insert 1 less than the number of ticks needed to finish the slot // Insert 1 less than the number of ticks needed to finish the slot
let ticks0 = create_ticks(genesis_block.ticks_per_slot - 1, 0, genesis_block.hash()); let ticks0 = create_ticks(genesis_config.ticks_per_slot - 1, 0, genesis_config.hash());
let receive_results = ReceiveResults { let receive_results = ReceiveResults {
entries: ticks0.clone(), entries: ticks0.clone(),
time_elapsed: Duration::new(3, 0), time_elapsed: Duration::new(3, 0),
@ -426,7 +426,7 @@ mod test {
// Interrupting the slot should cause the unfinished_slot and stats to reset // Interrupting the slot should cause the unfinished_slot and stats to reset
let num_shreds = 1; let num_shreds = 1;
assert!(num_shreds < num_shreds_per_slot); assert!(num_shreds < num_shreds_per_slot);
let ticks1 = create_ticks(max_ticks_per_n_shreds(num_shreds), 0, genesis_block.hash()); let ticks1 = create_ticks(max_ticks_per_n_shreds(num_shreds), 0, genesis_config.hash());
let receive_results = ReceiveResults { let receive_results = ReceiveResults {
entries: ticks1.clone(), entries: ticks1.clone(),
time_elapsed: Duration::new(2, 0), time_elapsed: Duration::new(2, 0),
@ -461,11 +461,11 @@ mod test {
fn test_slot_finish() { fn test_slot_finish() {
// Setup // Setup
let num_shreds_per_slot = 2; let num_shreds_per_slot = 2;
let (blocktree, genesis_block, cluster_info, bank0, leader_keypair, socket) = let (blocktree, genesis_config, cluster_info, bank0, leader_keypair, socket) =
setup(num_shreds_per_slot); setup(num_shreds_per_slot);
// Insert complete slot of ticks needed to finish the slot // Insert complete slot of ticks needed to finish the slot
let ticks = create_ticks(genesis_block.ticks_per_slot, 0, genesis_block.hash()); let ticks = create_ticks(genesis_config.ticks_per_slot, 0, genesis_config.hash());
let receive_results = ReceiveResults { let receive_results = ReceiveResults {
entries: ticks.clone(), entries: ticks.clone(),
time_elapsed: Duration::new(3, 0), time_elapsed: Duration::new(3, 0),

View File

@ -243,7 +243,7 @@ impl Service for AggregateCommitmentService {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_stake_api::stake_state; use solana_stake_api::stake_state;
use solana_vote_api::vote_state; use solana_vote_api::vote_state;
@ -431,9 +431,9 @@ mod tests {
#[test] #[test]
fn test_aggregate_commitment_validity() { fn test_aggregate_commitment_validity() {
let ancestors = vec![3, 4, 5, 7, 9, 10, 11]; let ancestors = vec![3, 4, 5, 7, 9, 10, 11];
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let sk1 = Pubkey::new_rand(); let sk1 = Pubkey::new_rand();
let pk1 = Pubkey::new_rand(); let pk1 = Pubkey::new_rand();
@ -444,7 +444,7 @@ mod tests {
let mut vote_account2 = vote_state::create_account(&pk2, &Pubkey::new_rand(), 0, 50); let mut vote_account2 = vote_state::create_account(&pk2, &Pubkey::new_rand(), 0, 50);
let stake_account2 = stake_state::create_account(&sk2, &pk2, &vote_account2, 50); let stake_account2 = stake_state::create_account(&sk2, &pk2, &vote_account2, 50);
genesis_block.accounts.extend(vec![ genesis_config.accounts.extend(vec![
(pk1, vote_account1.clone()), (pk1, vote_account1.clone()),
(sk1, stake_account1), (sk1, stake_account1),
(pk2, vote_account2.clone()), (pk2, vote_account2.clone()),
@ -452,7 +452,7 @@ mod tests {
]); ]);
// Create bank // Create bank
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let mut vote_state1 = VoteState::from(&vote_account1).unwrap(); let mut vote_state1 = VoteState::from(&vote_account1).unwrap();
vote_state1.process_slot_vote_unchecked(3); vote_state1.process_slot_vote_unchecked(3);

View File

@ -468,7 +468,7 @@ impl PohRecorder {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree}; use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree};
use solana_perf::test_tx::test_tx; use solana_perf::test_tx::test_tx;
use solana_sdk::clock::DEFAULT_TICKS_PER_SLOT; use solana_sdk::clock::DEFAULT_TICKS_PER_SLOT;
@ -561,8 +561,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
@ -595,8 +595,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -644,8 +644,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -691,8 +691,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -729,8 +729,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
@ -769,8 +769,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -815,8 +815,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -859,8 +859,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, entry_receiver) = PohRecorder::new( let (mut poh_recorder, entry_receiver) = PohRecorder::new(
0, 0,
@ -983,8 +983,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
Hash::default(), Hash::default(),
@ -1014,8 +1014,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let (sender, receiver) = sync_channel(1); let (sender, receiver) = sync_channel(1);
let (mut poh_recorder, _entry_receiver) = PohRecorder::new_with_clear_signal( let (mut poh_recorder, _entry_receiver) = PohRecorder::new_with_clear_signal(
0, 0,
@ -1044,11 +1044,11 @@ mod tests {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let ticks_per_slot = 5; let ticks_per_slot = 5;
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(2); } = create_genesis_config(2);
genesis_block.ticks_per_slot = ticks_per_slot; genesis_config.ticks_per_slot = ticks_per_slot;
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
@ -1096,8 +1096,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
@ -1216,8 +1216,8 @@ mod tests {
{ {
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
@ -1283,9 +1283,9 @@ mod tests {
// test that virtual ticks are flushed into a newly set bank asap // test that virtual ticks are flushed into a newly set bank asap
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"); Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger");
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let genesis_blockhash = bank.last_blockhash(); let genesis_hash = bank.last_blockhash();
let (mut poh_recorder, _entry_receiver) = PohRecorder::new( let (mut poh_recorder, _entry_receiver) = PohRecorder::new(
0, 0,
@ -1305,7 +1305,7 @@ mod tests {
poh_recorder.tick(); poh_recorder.tick();
} }
poh_recorder.set_bank(&bank.clone()); poh_recorder.set_bank(&bank.clone());
assert!(!bank.check_hash_age(&genesis_blockhash, 1)); assert!(!bank.check_hash_age(&genesis_hash, 1));
} }
} }

View File

@ -109,7 +109,7 @@ impl Service for PohService {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::poh_recorder::WorkingBank; use crate::poh_recorder::WorkingBank;
use crate::result::Result; use crate::result::Result;
use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree}; use solana_ledger::blocktree::{get_tmp_ledger_path, Blocktree};
@ -122,8 +122,8 @@ mod tests {
#[test] #[test]
fn test_poh_service() { fn test_poh_service() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let prev_hash = bank.last_blockhash(); let prev_hash = bank.last_blockhash();
let ledger_path = get_tmp_ledger_path!(); let ledger_path = get_tmp_ledger_path!();
{ {

View File

@ -940,7 +940,7 @@ impl Service for ReplayStage {
mod test { mod test {
use super::*; use super::*;
use crate::commitment::BlockCommitment; use crate::commitment::BlockCommitment;
use crate::genesis_utils::{create_genesis_block, create_genesis_block_with_leader}; use crate::genesis_utils::{create_genesis_config, create_genesis_config_with_leader};
use crate::replay_stage::ReplayStage; use crate::replay_stage::ReplayStage;
use solana_ledger::blocktree::make_slot_entries; use solana_ledger::blocktree::make_slot_entries;
use solana_ledger::blocktree::{entries_to_test_shreds, get_tmp_ledger_path, BlocktreeError}; use solana_ledger::blocktree::{entries_to_test_shreds, get_tmp_ledger_path, BlocktreeError};
@ -949,7 +949,7 @@ mod test {
CodingShredHeader, DataShredHeader, Shred, ShredCommonHeader, DATA_COMPLETE_SHRED, CodingShredHeader, DataShredHeader, Shred, ShredCommonHeader, DATA_COMPLETE_SHRED,
SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADER, SIZE_OF_DATA_SHRED_PAYLOAD, SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADER, SIZE_OF_DATA_SHRED_PAYLOAD,
}; };
use solana_runtime::genesis_utils::GenesisBlockInfo; use solana_runtime::genesis_utils::GenesisConfigInfo;
use solana_sdk::hash::{hash, Hash}; use solana_sdk::hash::{hash, Hash};
use solana_sdk::packet::PACKET_DATA_SIZE; use solana_sdk::packet::PACKET_DATA_SIZE;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
@ -967,8 +967,8 @@ mod test {
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"), Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"),
); );
let genesis_block = create_genesis_block(10_000).genesis_block; let genesis_config = create_genesis_config(10_000).genesis_config;
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let leader_schedule_cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank0)); let leader_schedule_cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank0));
let mut bank_forks = BankForks::new(0, bank0); let mut bank_forks = BankForks::new(0, bank0);
bank_forks.working_bank().freeze(); bank_forks.working_bank().freeze();
@ -1002,8 +1002,8 @@ mod test {
#[test] #[test]
fn test_handle_new_root() { fn test_handle_new_root() {
let genesis_block = create_genesis_block(10_000).genesis_block; let genesis_config = create_genesis_config(10_000).genesis_config;
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank0))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank0)));
let mut progress = HashMap::new(); let mut progress = HashMap::new();
progress.insert(5, ForkProgress::new(0, Hash::default())); progress.insert(5, ForkProgress::new(0, Hash::default()));
@ -1221,13 +1221,13 @@ mod test {
let blocktree = Arc::new( let blocktree = Arc::new(
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"), Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"),
); );
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
genesis_block.poh_config.hashes_per_tick = Some(2); genesis_config.poh_config.hashes_per_tick = Some(2);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let mut progress = HashMap::new(); let mut progress = HashMap::new();
let last_blockhash = bank0.last_blockhash(); let last_blockhash = bank0.last_blockhash();
progress.insert(bank0.slot(), ForkProgress::new(0, last_blockhash)); progress.insert(bank0.slot(), ForkProgress::new(0, last_blockhash));
@ -1268,14 +1268,14 @@ mod test {
let leader_pubkey = Pubkey::new_rand(); let leader_pubkey = Pubkey::new_rand();
let leader_lamports = 3; let leader_lamports = 3;
let genesis_block_info = let genesis_config_info =
create_genesis_block_with_leader(50, &leader_pubkey, leader_lamports); create_genesis_config_with_leader(50, &leader_pubkey, leader_lamports);
let mut genesis_block = genesis_block_info.genesis_block; let mut genesis_config = genesis_config_info.genesis_config;
let leader_voting_pubkey = genesis_block_info.voting_keypair.pubkey(); let leader_voting_pubkey = genesis_config_info.voting_keypair.pubkey();
genesis_block.epoch_schedule.warmup = false; genesis_config.epoch_schedule.warmup = false;
genesis_block.ticks_per_slot = 4; genesis_config.ticks_per_slot = 4;
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
for _ in 0..genesis_block.ticks_per_slot { for _ in 0..genesis_config.ticks_per_slot {
bank0.register_tick(&Hash::default()); bank0.register_tick(&Hash::default());
} }
bank0.freeze(); bank0.freeze();
@ -1297,8 +1297,8 @@ mod test {
.is_none()); .is_none());
let bank1 = Bank::new_from_parent(&arc_bank0, &Pubkey::default(), arc_bank0.slot() + 1); let bank1 = Bank::new_from_parent(&arc_bank0, &Pubkey::default(), arc_bank0.slot() + 1);
let _res = bank1.transfer(10, &genesis_block_info.mint_keypair, &Pubkey::new_rand()); let _res = bank1.transfer(10, &genesis_config_info.mint_keypair, &Pubkey::new_rand());
for _ in 0..genesis_block.ticks_per_slot { for _ in 0..genesis_config.ticks_per_slot {
bank1.register_tick(&Hash::default()); bank1.register_tick(&Hash::default());
} }
bank1.freeze(); bank1.freeze();
@ -1308,8 +1308,8 @@ mod test {
ReplayStage::update_commitment_cache(arc_bank1.clone(), leader_lamports, &lockouts_sender); ReplayStage::update_commitment_cache(arc_bank1.clone(), leader_lamports, &lockouts_sender);
let bank2 = Bank::new_from_parent(&arc_bank1, &Pubkey::default(), arc_bank1.slot() + 1); let bank2 = Bank::new_from_parent(&arc_bank1, &Pubkey::default(), arc_bank1.slot() + 1);
let _res = bank2.transfer(10, &genesis_block_info.mint_keypair, &Pubkey::new_rand()); let _res = bank2.transfer(10, &genesis_config_info.mint_keypair, &Pubkey::new_rand());
for _ in 0..genesis_block.ticks_per_slot { for _ in 0..genesis_config.ticks_per_slot {
bank2.register_tick(&Hash::default()); bank2.register_tick(&Hash::default());
} }
bank2.freeze(); bank2.freeze();

View File

@ -274,7 +274,7 @@ impl Service for RetransmitStage {
mod tests { mod tests {
use super::*; use super::*;
use crate::contact_info::ContactInfo; use crate::contact_info::ContactInfo;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::packet::{self, Meta, Packet, Packets}; use crate::packet::{self, Meta, Packet, Packets};
use solana_ledger::blocktree::create_new_tmp_ledger; use solana_ledger::blocktree::create_new_tmp_ledger;
use solana_ledger::blocktree_processor::{process_blocktree, ProcessOptions}; use solana_ledger::blocktree_processor::{process_blocktree, ProcessOptions};
@ -283,15 +283,15 @@ mod tests {
#[test] #[test]
fn test_skip_repair() { fn test_skip_repair() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(123); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(123);
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
let opts = ProcessOptions { let opts = ProcessOptions {
full_leader_cache: true, full_leader_cache: true,
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, _, cached_leader_schedule) = let (bank_forks, _, cached_leader_schedule) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
let leader_schedule_cache = Arc::new(cached_leader_schedule); let leader_schedule_cache = Arc::new(cached_leader_schedule);
let bank_forks = Arc::new(RwLock::new(bank_forks)); let bank_forks = Arc::new(RwLock::new(bank_forks));

View File

@ -129,7 +129,7 @@ impl JsonRpcRequestProcessor {
} }
pub fn get_epoch_schedule(&self) -> Result<EpochSchedule> { pub fn get_epoch_schedule(&self) -> Result<EpochSchedule> {
// Since epoch schedule data comes from the genesis block, any commitment level should be // Since epoch schedule data comes from the genesis config, any commitment level should be
// fine // fine
Ok(*self.bank(None).epoch_schedule()) Ok(*self.bank(None).epoch_schedule())
} }
@ -278,7 +278,7 @@ fn verify_signature(input: &str) -> Result<Signature> {
pub struct Meta { pub struct Meta {
pub request_processor: Arc<RwLock<JsonRpcRequestProcessor>>, pub request_processor: Arc<RwLock<JsonRpcRequestProcessor>>,
pub cluster_info: Arc<RwLock<ClusterInfo>>, pub cluster_info: Arc<RwLock<ClusterInfo>>,
pub genesis_blockhash: Hash, pub genesis_hash: Hash,
} }
impl Metadata for Meta {} impl Metadata for Meta {}
@ -372,8 +372,8 @@ pub trait RpcSol {
block: u64, block: u64,
) -> Result<(Option<BlockCommitment>, u64)>; ) -> Result<(Option<BlockCommitment>, u64)>;
#[rpc(meta, name = "getGenesisBlockhash")] #[rpc(meta, name = "getGenesisHash")]
fn get_genesis_blockhash(&self, meta: Self::Metadata) -> Result<String>; fn get_genesis_hash(&self, meta: Self::Metadata) -> Result<String>;
#[rpc(meta, name = "getLeaderSchedule")] #[rpc(meta, name = "getLeaderSchedule")]
fn get_leader_schedule( fn get_leader_schedule(
@ -647,9 +647,9 @@ impl RpcSol for RpcSolImpl {
.get_block_commitment(block)) .get_block_commitment(block))
} }
fn get_genesis_blockhash(&self, meta: Self::Metadata) -> Result<String> { fn get_genesis_hash(&self, meta: Self::Metadata) -> Result<String> {
debug!("get_genesis_blockhash rpc request received"); debug!("get_genesis_hash rpc request received");
Ok(meta.genesis_blockhash.to_string()) Ok(meta.genesis_hash.to_string())
} }
fn get_leader_schedule( fn get_leader_schedule(
@ -928,7 +928,7 @@ pub mod tests {
use super::*; use super::*;
use crate::{ use crate::{
contact_info::ContactInfo, contact_info::ContactInfo,
genesis_utils::{create_genesis_block, GenesisBlockInfo}, genesis_utils::{create_genesis_config, GenesisConfigInfo},
}; };
use jsonrpc_core::{MetaIoHandler, Output, Response, Value}; use jsonrpc_core::{MetaIoHandler, Output, Response, Value};
use solana_sdk::{ use solana_sdk::{
@ -1009,7 +1009,7 @@ pub mod tests {
let meta = Meta { let meta = Meta {
request_processor, request_processor,
cluster_info, cluster_info,
genesis_blockhash: Hash::default(), genesis_hash: Hash::default(),
}; };
RpcHandler { RpcHandler {
io, io,
@ -1463,7 +1463,7 @@ pub mod tests {
cluster_info: Arc::new(RwLock::new(ClusterInfo::new_with_invalid_keypair( cluster_info: Arc::new(RwLock::new(ClusterInfo::new_with_invalid_keypair(
ContactInfo::default(), ContactInfo::default(),
))), ))),
genesis_blockhash: Hash::default(), genesis_hash: Hash::default(),
}; };
let req = let req =
@ -1515,16 +1515,16 @@ pub mod tests {
} }
fn new_bank_forks() -> (Arc<RwLock<BankForks>>, Keypair) { fn new_bank_forks() -> (Arc<RwLock<BankForks>>, Keypair) {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(TEST_MINT_LAMPORTS); } = create_genesis_config(TEST_MINT_LAMPORTS);
genesis_block.rent.lamports_per_byte_year = 50; genesis_config.rent.lamports_per_byte_year = 50;
genesis_block.rent.exemption_threshold = 2.0; genesis_config.rent.exemption_threshold = 2.0;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
( (
Arc::new(RwLock::new(BankForks::new(bank.slot(), bank))), Arc::new(RwLock::new(BankForks::new(bank.slot(), bank))),
mint_keypair, mint_keypair,

View File

@ -241,7 +241,7 @@ impl RpcSolPubSub for RpcSolPubSubImpl {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use jsonrpc_core::futures::sync::mpsc; use jsonrpc_core::futures::sync::mpsc;
use jsonrpc_core::Response; use jsonrpc_core::Response;
use jsonrpc_pubsub::{PubSubHandler, Session}; use jsonrpc_pubsub::{PubSubHandler, Session};
@ -280,14 +280,14 @@ mod tests {
#[test] #[test]
fn test_signature_subscribe() { fn test_signature_subscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair: alice, mint_keypair: alice,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bob = Keypair::new(); let bob = Keypair::new();
let bob_pubkey = bob.pubkey(); let bob_pubkey = bob.pubkey();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
@ -317,13 +317,13 @@ mod tests {
#[test] #[test]
fn test_signature_unsubscribe() { fn test_signature_unsubscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair: alice, mint_keypair: alice,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bob_pubkey = Pubkey::new_rand(); let bob_pubkey = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let arc_bank = Arc::new(bank); let arc_bank = Arc::new(bank);
let blockhash = arc_bank.last_blockhash(); let blockhash = arc_bank.last_blockhash();
@ -363,14 +363,14 @@ mod tests {
#[test] #[test]
fn test_account_subscribe() { fn test_account_subscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair: alice, mint_keypair: alice,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
// This test depends on the budget program // This test depends on the budget program
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_budget_program!()); .push(solana_budget_program!());
@ -379,7 +379,7 @@ mod tests {
let contract_funds = Keypair::new(); let contract_funds = Keypair::new();
let contract_state = Keypair::new(); let contract_state = Keypair::new();
let budget_program_id = solana_budget_api::id(); let budget_program_id = solana_budget_api::id();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
@ -504,12 +504,12 @@ mod tests {
#[test] #[test]
#[should_panic] #[should_panic]
fn test_account_confirmations_not_fulfilled() { fn test_account_confirmations_not_fulfilled() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair: alice, mint_keypair: alice,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
let bob = Keypair::new(); let bob = Keypair::new();
@ -533,12 +533,12 @@ mod tests {
#[test] #[test]
fn test_account_confirmations() { fn test_account_confirmations() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair: alice, mint_keypair: alice,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
let bob = Keypair::new(); let bob = Keypair::new();

View File

@ -94,7 +94,7 @@ impl JsonRpcService {
bank_forks: Arc<RwLock<BankForks>>, bank_forks: Arc<RwLock<BankForks>>,
block_commitment_cache: Arc<RwLock<BlockCommitmentCache>>, block_commitment_cache: Arc<RwLock<BlockCommitmentCache>>,
ledger_path: &Path, ledger_path: &Path,
genesis_blockhash: Hash, genesis_hash: Hash,
validator_exit: &Arc<RwLock<Option<ValidatorExit>>>, validator_exit: &Arc<RwLock<Option<ValidatorExit>>>,
) -> Self { ) -> Self {
info!("rpc bound to {:?}", rpc_addr); info!("rpc bound to {:?}", rpc_addr);
@ -123,7 +123,7 @@ impl JsonRpcService {
ServerBuilder::with_meta_extractor(io, move |_req: &hyper::Request<hyper::Body>| Meta { ServerBuilder::with_meta_extractor(io, move |_req: &hyper::Request<hyper::Body>| Meta {
request_processor: request_processor_.clone(), request_processor: request_processor_.clone(),
cluster_info: cluster_info.clone(), cluster_info: cluster_info.clone(),
genesis_blockhash genesis_hash
}).threads(4) }).threads(4)
.cors(DomainsValidation::AllowOnly(vec![ .cors(DomainsValidation::AllowOnly(vec![
AccessControlAllowOrigin::Any, AccessControlAllowOrigin::Any,
@ -175,7 +175,7 @@ impl Service for JsonRpcService {
mod tests { mod tests {
use super::*; use super::*;
use crate::contact_info::ContactInfo; use crate::contact_info::ContactInfo;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::rpc::tests::create_validator_exit; use crate::rpc::tests::create_validator_exit;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::signature::KeypairUtil; use solana_sdk::signature::KeypairUtil;
@ -184,14 +184,14 @@ mod tests {
#[test] #[test]
fn test_rpc_new() { fn test_rpc_new() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let validator_exit = create_validator_exit(&exit); let validator_exit = create_validator_exit(&exit);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let cluster_info = Arc::new(RwLock::new(ClusterInfo::new_with_invalid_keypair( let cluster_info = Arc::new(RwLock::new(ClusterInfo::new_with_invalid_keypair(
ContactInfo::default(), ContactInfo::default(),
))); )));

View File

@ -296,7 +296,7 @@ impl RpcSubscriptions {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use jsonrpc_pubsub::typed::Subscriber; use jsonrpc_pubsub::typed::Subscriber;
use solana_budget_api; use solana_budget_api;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
@ -305,12 +305,12 @@ mod tests {
#[test] #[test]
fn test_check_account_subscribe() { fn test_check_account_subscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100); } = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
let alice = Keypair::new(); let alice = Keypair::new();
@ -360,12 +360,12 @@ mod tests {
#[test] #[test]
fn test_check_program_subscribe() { fn test_check_program_subscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100); } = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
let alice = Keypair::new(); let alice = Keypair::new();
@ -414,12 +414,12 @@ mod tests {
} }
#[test] #[test]
fn test_check_signature_subscribe() { fn test_check_signature_subscribe() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100); } = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank))); let bank_forks = Arc::new(RwLock::new(BankForks::new(0, bank)));
let alice = Keypair::new(); let alice = Keypair::new();

View File

@ -82,7 +82,7 @@ impl SigVerifier for ShredSigVerifier {
#[cfg(test)] #[cfg(test)]
pub mod tests { pub mod tests {
use super::*; use super::*;
use crate::genesis_utils::create_genesis_block_with_leader; use crate::genesis_utils::create_genesis_config_with_leader;
use crate::packet::Packet; use crate::packet::Packet;
use solana_ledger::shred::{Shred, Shredder}; use solana_ledger::shred::{Shred, Shredder};
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
@ -131,7 +131,7 @@ pub mod tests {
let leader_keypair = Arc::new(Keypair::new()); let leader_keypair = Arc::new(Keypair::new());
let leader_pubkey = leader_keypair.pubkey(); let leader_pubkey = leader_keypair.pubkey();
let bank = let bank =
Bank::new(&create_genesis_block_with_leader(100, &leader_pubkey, 10).genesis_block); Bank::new(&create_genesis_config_with_leader(100, &leader_pubkey, 10).genesis_config);
let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));
let bf = Arc::new(RwLock::new(BankForks::new(0, bank))); let bf = Arc::new(RwLock::new(BankForks::new(0, bank)));
let verifier = ShredSigVerifier::new(bf, cache); let verifier = ShredSigVerifier::new(bf, cache);

View File

@ -650,7 +650,7 @@ pub fn test_cluster_info(id: &Pubkey) -> Arc<RwLock<ClusterInfo>> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::service::Service; use crate::service::Service;
use rayon::prelude::*; use rayon::prelude::*;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
@ -668,8 +668,8 @@ mod tests {
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let cluster_info = test_cluster_info(&keypair.pubkey()); let cluster_info = test_cluster_info(&keypair.pubkey());
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(1000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks( let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks(
&[bank.clone()], &[bank.clone()],
vec![0], vec![0],

View File

@ -235,7 +235,7 @@ pub mod tests {
use super::*; use super::*;
use crate::banking_stage::create_test_recorder; use crate::banking_stage::create_test_recorder;
use crate::cluster_info::{ClusterInfo, Node}; use crate::cluster_info::{ClusterInfo, Node};
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_ledger::blocktree::create_new_tmp_ledger; use solana_ledger::blocktree::create_new_tmp_ledger;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use std::sync::atomic::Ordering; use std::sync::atomic::Ordering;
@ -248,16 +248,16 @@ pub mod tests {
let target1 = Node::new_localhost_with_pubkey(&target1_keypair.pubkey()); let target1 = Node::new_localhost_with_pubkey(&target1_keypair.pubkey());
let starting_balance = 10_000; let starting_balance = 10_000;
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(starting_balance); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(starting_balance);
let bank_forks = BankForks::new(0, Bank::new(&genesis_block)); let bank_forks = BankForks::new(0, Bank::new(&genesis_config));
//start cluster_info1 //start cluster_info1
let mut cluster_info1 = ClusterInfo::new_with_invalid_keypair(target1.info.clone()); let mut cluster_info1 = ClusterInfo::new_with_invalid_keypair(target1.info.clone());
cluster_info1.insert_info(leader.info.clone()); cluster_info1.insert_info(leader.info.clone());
let cref1 = Arc::new(RwLock::new(cluster_info1)); let cref1 = Arc::new(RwLock::new(cluster_info1));
let (blocktree_path, _) = create_new_tmp_ledger!(&genesis_block); let (blocktree_path, _) = create_new_tmp_ledger!(&genesis_config);
let (blocktree, l_receiver, completed_slots_receiver) = let (blocktree, l_receiver, completed_slots_receiver) =
Blocktree::open_with_signal(&blocktree_path) Blocktree::open_with_signal(&blocktree_path)
.expect("Expected to successfully open ledger"); .expect("Expected to successfully open ledger");

View File

@ -28,7 +28,7 @@ use solana_ledger::{
use solana_metrics::datapoint_info; use solana_metrics::datapoint_info;
use solana_sdk::{ use solana_sdk::{
clock::{Slot, DEFAULT_SLOTS_PER_TURN}, clock::{Slot, DEFAULT_SLOTS_PER_TURN},
genesis_block::GenesisBlock, genesis_config::GenesisConfig,
hash::Hash, hash::Hash,
poh_config::PohConfig, poh_config::PohConfig,
pubkey::Pubkey, pubkey::Pubkey,
@ -50,7 +50,7 @@ use std::{
pub struct ValidatorConfig { pub struct ValidatorConfig {
pub dev_sigverify_disabled: bool, pub dev_sigverify_disabled: bool,
pub dev_halt_at_slot: Option<Slot>, pub dev_halt_at_slot: Option<Slot>,
pub expected_genesis_blockhash: Option<Hash>, pub expected_genesis_hash: Option<Hash>,
pub voting_disabled: bool, pub voting_disabled: bool,
pub blockstream_unix_socket: Option<PathBuf>, pub blockstream_unix_socket: Option<PathBuf>,
pub storage_slots_per_turn: u64, pub storage_slots_per_turn: u64,
@ -66,7 +66,7 @@ impl Default for ValidatorConfig {
Self { Self {
dev_sigverify_disabled: false, dev_sigverify_disabled: false,
dev_halt_at_slot: None, dev_halt_at_slot: None,
expected_genesis_blockhash: None, expected_genesis_hash: None,
voting_disabled: false, voting_disabled: false,
blockstream_unix_socket: None, blockstream_unix_socket: None,
storage_slots_per_turn: DEFAULT_SLOTS_PER_TURN, storage_slots_per_turn: DEFAULT_SLOTS_PER_TURN,
@ -158,7 +158,7 @@ impl Validator {
info!("creating bank..."); info!("creating bank...");
let ( let (
genesis_blockhash, genesis_hash,
bank_forks, bank_forks,
bank_forks_info, bank_forks_info,
blocktree, blocktree,
@ -167,7 +167,7 @@ impl Validator {
leader_schedule_cache, leader_schedule_cache,
poh_config, poh_config,
) = new_banks_from_blocktree( ) = new_banks_from_blocktree(
config.expected_genesis_blockhash, config.expected_genesis_hash,
ledger_path, ledger_path,
config.account_paths.clone(), config.account_paths.clone(),
config.snapshot_config.clone(), config.snapshot_config.clone(),
@ -210,7 +210,7 @@ impl Validator {
bank_forks.clone(), bank_forks.clone(),
block_commitment_cache.clone(), block_commitment_cache.clone(),
ledger_path, ledger_path,
genesis_blockhash, genesis_hash,
&validator_exit, &validator_exit,
)) ))
}; };
@ -409,7 +409,7 @@ impl Validator {
} }
pub fn new_banks_from_blocktree( pub fn new_banks_from_blocktree(
expected_genesis_blockhash: Option<Hash>, expected_genesis_hash: Option<Hash>,
blocktree_path: &Path, blocktree_path: &Path,
account_paths: Option<String>, account_paths: Option<String>,
snapshot_config: Option<SnapshotConfig>, snapshot_config: Option<SnapshotConfig>,
@ -425,16 +425,14 @@ pub fn new_banks_from_blocktree(
LeaderScheduleCache, LeaderScheduleCache,
PohConfig, PohConfig,
) { ) {
let genesis_block = GenesisBlock::load(blocktree_path).expect("Failed to load genesis block"); let genesis_config =
let genesis_blockhash = genesis_block.hash(); GenesisConfig::load(blocktree_path).expect("Failed to load genesis config");
info!("genesis blockhash: {}", genesis_blockhash); let genesis_hash = genesis_config.hash();
info!("genesis hash: {}", genesis_hash);
if let Some(expected_genesis_blockhash) = expected_genesis_blockhash { if let Some(expected_genesis_hash) = expected_genesis_hash {
if genesis_blockhash != expected_genesis_blockhash { if genesis_hash != expected_genesis_hash {
error!( error!("genesis hash mismatch: expected {}", expected_genesis_hash);
"genesis blockhash mismatch: expected {}",
expected_genesis_blockhash
);
error!( error!(
"Delete the ledger directory to continue: {:?}", "Delete the ledger directory to continue: {:?}",
blocktree_path blocktree_path
@ -453,7 +451,7 @@ pub fn new_banks_from_blocktree(
}; };
let (mut bank_forks, bank_forks_info, leader_schedule_cache) = bank_forks_utils::load( let (mut bank_forks, bank_forks_info, leader_schedule_cache) = bank_forks_utils::load(
&genesis_block, &genesis_config,
&blocktree, &blocktree,
account_paths, account_paths,
snapshot_config.as_ref(), snapshot_config.as_ref(),
@ -467,14 +465,14 @@ pub fn new_banks_from_blocktree(
bank_forks.set_snapshot_config(snapshot_config); bank_forks.set_snapshot_config(snapshot_config);
( (
genesis_blockhash, genesis_hash,
bank_forks, bank_forks,
bank_forks_info, bank_forks_info,
blocktree, blocktree,
ledger_signal_receiver, ledger_signal_receiver,
completed_slots_receiver, completed_slots_receiver,
leader_schedule_cache, leader_schedule_cache,
genesis_block.poh_config, genesis_config.poh_config,
) )
} }
@ -501,26 +499,26 @@ impl Service for Validator {
} }
pub fn new_validator_for_tests() -> (Validator, ContactInfo, Keypair, PathBuf) { pub fn new_validator_for_tests() -> (Validator, ContactInfo, Keypair, PathBuf) {
use crate::genesis_utils::{create_genesis_block_with_leader, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config_with_leader, GenesisConfigInfo};
use solana_ledger::blocktree::create_new_tmp_ledger; use solana_ledger::blocktree::create_new_tmp_ledger;
let node_keypair = Arc::new(Keypair::new()); let node_keypair = Arc::new(Keypair::new());
let node = Node::new_localhost_with_pubkey(&node_keypair.pubkey()); let node = Node::new_localhost_with_pubkey(&node_keypair.pubkey());
let contact_info = node.info.clone(); let contact_info = node.info.clone();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
voting_keypair, voting_keypair,
} = create_genesis_block_with_leader(10_000, &contact_info.id, 42); } = create_genesis_config_with_leader(10_000, &contact_info.id, 42);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_budget_program!()); .push(solana_budget_program!());
genesis_block.rent.lamports_per_byte_year = 1; genesis_config.rent.lamports_per_byte_year = 1;
genesis_block.rent.exemption_threshold = 1.0; genesis_config.rent.exemption_threshold = 1.0;
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let leader_voting_keypair = Arc::new(voting_keypair); let leader_voting_keypair = Arc::new(voting_keypair);
let storage_keypair = Arc::new(Keypair::new()); let storage_keypair = Arc::new(Keypair::new());
@ -542,7 +540,7 @@ pub fn new_validator_for_tests() -> (Validator, ContactInfo, Keypair, PathBuf) {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::create_genesis_block_with_leader; use crate::genesis_utils::create_genesis_config_with_leader;
use solana_ledger::blocktree::create_new_tmp_ledger; use solana_ledger::blocktree::create_new_tmp_ledger;
use std::fs::remove_dir_all; use std::fs::remove_dir_all;
@ -554,9 +552,10 @@ mod tests {
let validator_keypair = Keypair::new(); let validator_keypair = Keypair::new();
let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey()); let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey());
let genesis_block = let genesis_config =
create_genesis_block_with_leader(10_000, &leader_keypair.pubkey(), 1000).genesis_block; create_genesis_config_with_leader(10_000, &leader_keypair.pubkey(), 1000)
let (validator_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); .genesis_config;
let (validator_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let voting_keypair = Arc::new(Keypair::new()); let voting_keypair = Arc::new(Keypair::new());
let storage_keypair = Arc::new(Keypair::new()); let storage_keypair = Arc::new(Keypair::new());
@ -585,10 +584,10 @@ mod tests {
.map(|_| { .map(|_| {
let validator_keypair = Keypair::new(); let validator_keypair = Keypair::new();
let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey()); let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey());
let genesis_block = let genesis_config =
create_genesis_block_with_leader(10_000, &leader_keypair.pubkey(), 1000) create_genesis_config_with_leader(10_000, &leader_keypair.pubkey(), 1000)
.genesis_block; .genesis_config;
let (validator_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (validator_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
ledger_paths.push(validator_ledger_path.clone()); ledger_paths.push(validator_ledger_path.clone());
let voting_keypair = Arc::new(Keypair::new()); let voting_keypair = Arc::new(Keypair::new());
let storage_keypair = Arc::new(Keypair::new()); let storage_keypair = Arc::new(Keypair::new());

View File

@ -279,7 +279,7 @@ mod test {
use crate::{ use crate::{
cluster_info::ClusterInfo, cluster_info::ClusterInfo,
contact_info::ContactInfo, contact_info::ContactInfo,
genesis_utils::create_genesis_block_with_leader, genesis_utils::create_genesis_config_with_leader,
packet::{Packet, Packets}, packet::{Packet, Packets},
repair_service::RepairSlotRange, repair_service::RepairSlotRange,
service::Service, service::Service,
@ -345,7 +345,7 @@ mod test {
let leader_keypair = Arc::new(Keypair::new()); let leader_keypair = Arc::new(Keypair::new());
let leader_pubkey = leader_keypair.pubkey(); let leader_pubkey = leader_keypair.pubkey();
let bank = Arc::new(Bank::new( let bank = Arc::new(Bank::new(
&create_genesis_block_with_leader(100, &leader_pubkey, 10).genesis_block, &create_genesis_config_with_leader(100, &leader_pubkey, 10).genesis_config,
)); ));
let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));

View File

@ -6,7 +6,7 @@ mod tests {
use fs_extra::dir::CopyOptions; use fs_extra::dir::CopyOptions;
use itertools::Itertools; use itertools::Itertools;
use solana_core::{ use solana_core::{
genesis_utils::{create_genesis_block, GenesisBlockInfo}, genesis_utils::{create_genesis_config, GenesisConfigInfo},
service::Service, service::Service,
snapshot_packager_service::SnapshotPackagerService, snapshot_packager_service::SnapshotPackagerService,
}; };
@ -43,16 +43,16 @@ mod tests {
_snapshot_output_path: TempDir, _snapshot_output_path: TempDir,
snapshot_config: SnapshotConfig, snapshot_config: SnapshotConfig,
bank_forks: BankForks, bank_forks: BankForks,
genesis_block_info: GenesisBlockInfo, genesis_config_info: GenesisConfigInfo,
} }
fn setup_snapshot_test(snapshot_interval_slots: usize) -> SnapshotTestConfig { fn setup_snapshot_test(snapshot_interval_slots: usize) -> SnapshotTestConfig {
let accounts_dir = TempDir::new().unwrap(); let accounts_dir = TempDir::new().unwrap();
let snapshot_dir = TempDir::new().unwrap(); let snapshot_dir = TempDir::new().unwrap();
let snapshot_output_path = TempDir::new().unwrap(); let snapshot_output_path = TempDir::new().unwrap();
let genesis_block_info = create_genesis_block(10_000); let genesis_config_info = create_genesis_config(10_000);
let bank0 = Bank::new_with_paths( let bank0 = Bank::new_with_paths(
&genesis_block_info.genesis_block, &genesis_config_info.genesis_config,
Some(accounts_dir.path().to_str().unwrap().to_string()), Some(accounts_dir.path().to_str().unwrap().to_string()),
); );
bank0.freeze(); bank0.freeze();
@ -70,7 +70,7 @@ mod tests {
_snapshot_output_path: snapshot_output_path, _snapshot_output_path: snapshot_output_path,
snapshot_config, snapshot_config,
bank_forks, bank_forks,
genesis_block_info, genesis_config_info,
} }
} }
@ -121,7 +121,7 @@ mod tests {
let bank_forks = &mut snapshot_test_config.bank_forks; let bank_forks = &mut snapshot_test_config.bank_forks;
let accounts_dir = &snapshot_test_config.accounts_dir; let accounts_dir = &snapshot_test_config.accounts_dir;
let snapshot_config = &snapshot_test_config.snapshot_config; let snapshot_config = &snapshot_test_config.snapshot_config;
let mint_keypair = &snapshot_test_config.genesis_block_info.mint_keypair; let mint_keypair = &snapshot_test_config.genesis_config_info.mint_keypair;
let (s, _r) = channel(); let (s, _r) = channel();
let sender = Some(s); let sender = Some(s);
@ -198,8 +198,8 @@ mod tests {
let accounts_dir = &snapshot_test_config.accounts_dir; let accounts_dir = &snapshot_test_config.accounts_dir;
let snapshots_dir = &snapshot_test_config.snapshot_dir; let snapshots_dir = &snapshot_test_config.snapshot_dir;
let snapshot_config = &snapshot_test_config.snapshot_config; let snapshot_config = &snapshot_test_config.snapshot_config;
let mint_keypair = &snapshot_test_config.genesis_block_info.mint_keypair; let mint_keypair = &snapshot_test_config.genesis_config_info.mint_keypair;
let genesis_block = &snapshot_test_config.genesis_block_info.genesis_block; let genesis_config = &snapshot_test_config.genesis_config_info.genesis_config;
// Take snapshot of zeroth bank // Take snapshot of zeroth bank
let bank0 = bank_forks.get(0).unwrap(); let bank0 = bank_forks.get(0).unwrap();
@ -230,7 +230,7 @@ mod tests {
); );
let slot = bank.slot(); let slot = bank.slot();
let key1 = Keypair::new().pubkey(); let key1 = Keypair::new().pubkey();
let tx = system_transaction::transfer(&mint_keypair, &key1, 1, genesis_block.hash()); let tx = system_transaction::transfer(&mint_keypair, &key1, 1, genesis_config.hash());
assert_eq!(bank.process_transaction(&tx), Ok(())); assert_eq!(bank.process_transaction(&tx), Ok(()));
bank.freeze(); bank.freeze();
bank_forks.insert(bank); bank_forks.insert(bank);

View File

@ -6,7 +6,7 @@ extern crate solana_ledger;
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use log::*; use log::*;
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use solana_core::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_core::service::Service; use solana_core::service::Service;
use solana_core::storage_stage::{test_cluster_info, SLOTS_PER_TURN_TEST}; use solana_core::storage_stage::{test_cluster_info, SLOTS_PER_TURN_TEST};
use solana_core::storage_stage::{StorageStage, StorageState}; use solana_core::storage_stage::{StorageStage, StorageState};
@ -38,19 +38,19 @@ mod tests {
let archiver_keypair = Arc::new(Keypair::new()); let archiver_keypair = Arc::new(Keypair::new());
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_storage_program::solana_storage_program!()); .push(solana_storage_program::solana_storage_program!());
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap()); let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap());
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks( let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks(
&[bank.clone()], &[bank.clone()],
@ -164,12 +164,12 @@ mod tests {
let storage_keypair = Arc::new(Keypair::new()); let storage_keypair = Arc::new(Keypair::new());
let exit = Arc::new(AtomicBool::new(false)); let exit = Arc::new(AtomicBool::new(false));
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(1000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(1000);
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap()); let blocktree = Arc::new(Blocktree::open(&ledger_path).unwrap());
let slot = 1; let slot = 1;
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks( let bank_forks = Arc::new(RwLock::new(BankForks::new_from_banks(
&[bank.clone()], &[bank.clone()],
vec![0], vec![0],

View File

@ -1,4 +1,4 @@
//! A command-line executable for generating the chain's genesis block. //! A command-line executable for generating the chain's genesis config.
mod genesis_accounts; mod genesis_accounts;
@ -12,7 +12,7 @@ use solana_sdk::{
clock, clock,
epoch_schedule::EpochSchedule, epoch_schedule::EpochSchedule,
fee_calculator::FeeCalculator, fee_calculator::FeeCalculator,
genesis_block::{GenesisBlock, OperatingMode}, genesis_config::{GenesisConfig, OperatingMode},
native_token::sol_to_lamports, native_token::sol_to_lamports,
poh_config::PohConfig, poh_config::PohConfig,
pubkey::{read_pubkey_file, Pubkey}, pubkey::{read_pubkey_file, Pubkey},
@ -44,7 +44,7 @@ fn pubkey_from_str(key_str: &str) -> Result<Pubkey, Box<dyn error::Error>> {
}) })
} }
pub fn add_genesis_accounts(file: &str, genesis_block: &mut GenesisBlock) -> io::Result<()> { pub fn add_genesis_accounts(file: &str, genesis_config: &mut GenesisConfig) -> io::Result<()> {
let accounts_file = File::open(file.to_string())?; let accounts_file = File::open(file.to_string())?;
let genesis_accounts: HashMap<String, Base64Account> = let genesis_accounts: HashMap<String, Base64Account> =
@ -77,7 +77,7 @@ pub fn add_genesis_accounts(file: &str, genesis_block: &mut GenesisBlock) -> io:
} }
account.executable = account_details.executable; account.executable = account_details.executable;
genesis_block.add_account(pubkey, account); genesis_config.add_account(pubkey, account);
} }
Ok(()) Ok(())
@ -385,7 +385,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
let native_instruction_processors = let native_instruction_processors =
solana_genesis_programs::get_programs(operating_mode, 0).unwrap(); solana_genesis_programs::get_programs(operating_mode, 0).unwrap();
let inflation = solana_genesis_programs::get_inflation(operating_mode, 0).unwrap(); let inflation = solana_genesis_programs::get_inflation(operating_mode, 0).unwrap();
let mut genesis_block = GenesisBlock { let mut genesis_config = GenesisConfig {
accounts, accounts,
native_instruction_processors, native_instruction_processors,
ticks_per_slot, ticks_per_slot,
@ -395,27 +395,27 @@ fn main() -> Result<(), Box<dyn error::Error>> {
rent, rent,
poh_config, poh_config,
operating_mode, operating_mode,
..GenesisBlock::default() ..GenesisConfig::default()
}; };
if let Some(files) = matches.values_of("primordial_accounts_file") { if let Some(files) = matches.values_of("primordial_accounts_file") {
for file in files { for file in files {
add_genesis_accounts(file, &mut genesis_block)?; add_genesis_accounts(file, &mut genesis_config)?;
} }
} }
// add genesis stuff from storage and stake // add genesis stuff from storage and stake
solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_block); solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_config);
solana_stake_api::add_genesis_accounts(&mut genesis_block); solana_stake_api::add_genesis_accounts(&mut genesis_config);
create_new_ledger(&ledger_path, &genesis_block)?; create_new_ledger(&ledger_path, &genesis_config)?;
Ok(()) Ok(())
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use std::collections::HashMap; use std::collections::HashMap;
use std::fs::remove_file; use std::fs::remove_file;
@ -426,9 +426,9 @@ mod tests {
#[test] #[test]
fn test_append_primordial_accounts_to_genesis() { fn test_append_primordial_accounts_to_genesis() {
// Test invalid file returns error // Test invalid file returns error
assert!(add_genesis_accounts("unknownfile", &mut GenesisBlock::default()).is_err()); assert!(add_genesis_accounts("unknownfile", &mut GenesisConfig::default()).is_err());
let mut genesis_block = GenesisBlock::default(); let mut genesis_config = GenesisConfig::default();
let mut genesis_accounts = HashMap::new(); let mut genesis_accounts = HashMap::new();
genesis_accounts.insert( genesis_accounts.insert(
@ -466,7 +466,7 @@ mod tests {
add_genesis_accounts( add_genesis_accounts(
"test_append_primordial_accounts_to_genesis.yml", "test_append_primordial_accounts_to_genesis.yml",
&mut genesis_block, &mut genesis_config,
) )
.expect("test_append_primordial_accounts_to_genesis.yml"); .expect("test_append_primordial_accounts_to_genesis.yml");
// Test valid file returns ok // Test valid file returns ok
@ -475,28 +475,28 @@ mod tests {
{ {
// Test all accounts were added // Test all accounts were added
assert_eq!(genesis_block.accounts.len(), genesis_accounts.len()); assert_eq!(genesis_config.accounts.len(), genesis_accounts.len());
// Test account data matches // Test account data matches
(0..genesis_accounts.len()).for_each(|i| { (0..genesis_accounts.len()).for_each(|i| {
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].owner, genesis_accounts[&genesis_config.accounts[i].0.to_string()].owner,
genesis_block.accounts[i].1.owner.to_string() genesis_config.accounts[i].1.owner.to_string()
); );
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].balance, genesis_accounts[&genesis_config.accounts[i].0.to_string()].balance,
genesis_block.accounts[i].1.lamports genesis_config.accounts[i].1.lamports
); );
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].executable, genesis_accounts[&genesis_config.accounts[i].0.to_string()].executable,
genesis_block.accounts[i].1.executable genesis_config.accounts[i].1.executable
); );
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].data, genesis_accounts[&genesis_config.accounts[i].0.to_string()].data,
base64::encode(&genesis_block.accounts[i].1.data) base64::encode(&genesis_config.accounts[i].1.data)
); );
}); });
} }
@ -538,7 +538,7 @@ mod tests {
add_genesis_accounts( add_genesis_accounts(
"test_append_primordial_accounts_to_genesis.yml", "test_append_primordial_accounts_to_genesis.yml",
&mut genesis_block, &mut genesis_config,
) )
.expect("test_append_primordial_accounts_to_genesis.yml"); .expect("test_append_primordial_accounts_to_genesis.yml");
@ -546,57 +546,57 @@ mod tests {
// Test total number of accounts is correct // Test total number of accounts is correct
assert_eq!( assert_eq!(
genesis_block.accounts.len(), genesis_config.accounts.len(),
genesis_accounts.len() + genesis_accounts1.len() genesis_accounts.len() + genesis_accounts1.len()
); );
// Test old accounts are still there // Test old accounts are still there
(0..genesis_accounts.len()).for_each(|i| { (0..genesis_accounts.len()).for_each(|i| {
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].balance, genesis_accounts[&genesis_config.accounts[i].0.to_string()].balance,
genesis_block.accounts[i].1.lamports, genesis_config.accounts[i].1.lamports,
); );
}); });
// Test new account data matches // Test new account data matches
(0..genesis_accounts1.len()).for_each(|i| { (0..genesis_accounts1.len()).for_each(|i| {
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.owner, .owner,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.owner .owner
.to_string(), .to_string(),
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.balance, .balance,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.lamports, .lamports,
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.executable, .executable,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.executable, .executable,
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.data, .data,
base64::encode(&genesis_block.accounts[genesis_accounts.len() + i].1.data), base64::encode(&genesis_config.accounts[genesis_accounts.len() + i].1.data),
); );
}); });
@ -638,67 +638,67 @@ mod tests {
add_genesis_accounts( add_genesis_accounts(
"test_append_primordial_accounts_to_genesis.yml", "test_append_primordial_accounts_to_genesis.yml",
&mut genesis_block, &mut genesis_config,
) )
.expect("genesis"); .expect("genesis");
solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_block); solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_config);
remove_file(path).unwrap(); remove_file(path).unwrap();
// Test total number of accounts is correct // Test total number of accounts is correct
assert_eq!( assert_eq!(
genesis_block.accounts.len(), genesis_config.accounts.len(),
genesis_accounts.len() + genesis_accounts1.len() + genesis_accounts2.len() genesis_accounts.len() + genesis_accounts1.len() + genesis_accounts2.len()
); );
// Test old accounts are still there // Test old accounts are still there
(0..genesis_accounts.len()).for_each(|i| { (0..genesis_accounts.len()).for_each(|i| {
assert_eq!( assert_eq!(
genesis_accounts[&genesis_block.accounts[i].0.to_string()].balance, genesis_accounts[&genesis_config.accounts[i].0.to_string()].balance,
genesis_block.accounts[i].1.lamports, genesis_config.accounts[i].1.lamports,
); );
}); });
// Test new account data matches // Test new account data matches
(0..genesis_accounts1.len()).for_each(|i| { (0..genesis_accounts1.len()).for_each(|i| {
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.owner, .owner,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.owner .owner
.to_string(), .to_string(),
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.balance, .balance,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.lamports, .lamports,
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.executable, .executable,
genesis_block.accounts[genesis_accounts.len() + i] genesis_config.accounts[genesis_accounts.len() + i]
.1 .1
.executable, .executable,
); );
assert_eq!( assert_eq!(
genesis_accounts1[&genesis_block.accounts[genesis_accounts.len() + i] genesis_accounts1[&genesis_config.accounts[genesis_accounts.len() + i]
.0 .0
.to_string()] .to_string()]
.data, .data,
base64::encode(&genesis_block.accounts[genesis_accounts.len() + i].1.data), base64::encode(&genesis_config.accounts[genesis_accounts.len() + i].1.data),
); );
}); });
@ -707,7 +707,7 @@ mod tests {
account_keypairs.iter().for_each(|keypair| { account_keypairs.iter().for_each(|keypair| {
let mut i = 0; let mut i = 0;
(offset..(offset + account_keypairs.len())).for_each(|n| { (offset..(offset + account_keypairs.len())).for_each(|n| {
if keypair.pubkey() == genesis_block.accounts[n].0 { if keypair.pubkey() == genesis_config.accounts[n].0 {
i = n; i = n;
} }
}); });
@ -717,25 +717,25 @@ mod tests {
assert_eq!( assert_eq!(
genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()] genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()]
.owner, .owner,
genesis_block.accounts[i].1.owner.to_string(), genesis_config.accounts[i].1.owner.to_string(),
); );
assert_eq!( assert_eq!(
genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()] genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()]
.balance, .balance,
genesis_block.accounts[i].1.lamports, genesis_config.accounts[i].1.lamports,
); );
assert_eq!( assert_eq!(
genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()] genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()]
.executable, .executable,
genesis_block.accounts[i].1.executable, genesis_config.accounts[i].1.executable,
); );
assert_eq!( assert_eq!(
genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()] genesis_accounts2[&serde_json::to_string(&keypair.to_bytes().to_vec()).unwrap()]
.data, .data,
base64::encode(&genesis_block.accounts[i].1.data), base64::encode(&genesis_config.accounts[i].1.data),
); );
}); });
} }
@ -769,11 +769,11 @@ mod tests {
let mut file = File::create(path).unwrap(); let mut file = File::create(path).unwrap();
file.write_all(yaml_string_pubkey.as_bytes()).unwrap(); file.write_all(yaml_string_pubkey.as_bytes()).unwrap();
let mut genesis_block = GenesisBlock::default(); let mut genesis_config = GenesisConfig::default();
add_genesis_accounts(path.to_str().unwrap(), &mut genesis_block).expect("genesis"); add_genesis_accounts(path.to_str().unwrap(), &mut genesis_config).expect("genesis");
remove_file(path).unwrap(); remove_file(path).unwrap();
assert_eq!(genesis_block.accounts.len(), 4); assert_eq!(genesis_config.accounts.len(), 4);
let yaml_string_keypair = "--- let yaml_string_keypair = "---
\"[17,12,234,59,35,246,168,6,64,36,169,164,219,96,253,79,238,202,164,160,195,89,9,96,179,117,255,239,32,64,124,66,233,130,19,107,172,54,86,32,119,148,4,39,199,40,122,230,249,47,150,168,163,159,83,233,97,18,25,238,103,25,253,108]\": \"[17,12,234,59,35,246,168,6,64,36,169,164,219,96,253,79,238,202,164,160,195,89,9,96,179,117,255,239,32,64,124,66,233,130,19,107,172,54,86,32,119,148,4,39,199,40,122,230,249,47,150,168,163,159,83,233,97,18,25,238,103,25,253,108]\":
@ -797,10 +797,10 @@ mod tests {
let mut file = File::create(path).unwrap(); let mut file = File::create(path).unwrap();
file.write_all(yaml_string_keypair.as_bytes()).unwrap(); file.write_all(yaml_string_keypair.as_bytes()).unwrap();
let mut genesis_block = GenesisBlock::default(); let mut genesis_config = GenesisConfig::default();
add_genesis_accounts(path.to_str().unwrap(), &mut genesis_block).expect("genesis"); add_genesis_accounts(path.to_str().unwrap(), &mut genesis_config).expect("genesis");
remove_file(path).unwrap(); remove_file(path).unwrap();
assert_eq!(genesis_block.accounts.len(), 3); assert_eq!(genesis_config.accounts.len(), 3);
} }
} }

View File

@ -1,5 +1,5 @@
use solana_sdk::{ use solana_sdk::{
clock::Epoch, genesis_block::OperatingMode, inflation::Inflation, clock::Epoch, genesis_config::OperatingMode, inflation::Inflation,
move_loader::solana_move_loader_program, pubkey::Pubkey, system_program::solana_system_program, move_loader::solana_move_loader_program, pubkey::Pubkey, system_program::solana_system_program,
}; };

View File

@ -8,7 +8,7 @@ use solana_ledger::{
blocktree_processor, blocktree_processor,
rooted_slot_iterator::RootedSlotIterator, rooted_slot_iterator::RootedSlotIterator,
}; };
use solana_sdk::{clock::Slot, genesis_block::GenesisBlock, native_token::lamports_to_sol}; use solana_sdk::{clock::Slot, genesis_config::GenesisConfig, native_token::lamports_to_sol};
use solana_vote_api::vote_state::VoteState; use solana_vote_api::vote_state::VoteState;
use std::{ use std::{
collections::{BTreeMap, HashMap, HashSet}, collections::{BTreeMap, HashMap, HashSet},
@ -376,9 +376,9 @@ fn main() {
let ledger_path = PathBuf::from(value_t_or_exit!(matches, "ledger", String)); let ledger_path = PathBuf::from(value_t_or_exit!(matches, "ledger", String));
let genesis_block = GenesisBlock::load(&ledger_path).unwrap_or_else(|err| { let genesis_config = GenesisConfig::load(&ledger_path).unwrap_or_else(|err| {
eprintln!( eprintln!(
"Failed to open ledger genesis_block at {:?}: {}", "Failed to open ledger genesis_config at {:?}: {}",
ledger_path, err ledger_path, err
); );
exit(1); exit(1);
@ -433,7 +433,7 @@ fn main() {
}; };
match bank_forks_utils::load( match bank_forks_utils::load(
&genesis_block, &genesis_config,
&blocktree, &blocktree,
account_paths, account_paths,
snapshot_config.as_ref(), snapshot_config.as_ref(),

View File

@ -3,7 +3,7 @@ extern crate solana_ledger;
use assert_cmd::prelude::*; use assert_cmd::prelude::*;
use solana_ledger::blocktree::create_new_tmp_ledger; use solana_ledger::blocktree::create_new_tmp_ledger;
use solana_ledger::genesis_utils::create_genesis_block; use solana_ledger::genesis_utils::create_genesis_config;
use std::process::Command; use std::process::Command;
use std::process::Output; use std::process::Output;
@ -32,10 +32,10 @@ fn bad_arguments() {
#[test] #[test]
fn nominal() { fn nominal() {
let genesis_block = create_genesis_block(100).genesis_block; let genesis_config = create_genesis_config(100).genesis_config;
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let ticks = ticks_per_slot as usize; let ticks = ticks_per_slot as usize;
let ledger_path = ledger_path.to_str().unwrap(); let ledger_path = ledger_path.to_str().unwrap();

View File

@ -304,14 +304,14 @@ impl BankForks {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
#[test] #[test]
fn test_bank_forks() { fn test_bank_forks() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank); let mut bank_forks = BankForks::new(0, bank);
let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1); let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1);
child_bank.register_tick(&Hash::default()); child_bank.register_tick(&Hash::default());
@ -322,8 +322,8 @@ mod tests {
#[test] #[test]
fn test_bank_forks_descendants() { fn test_bank_forks_descendants() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank); let mut bank_forks = BankForks::new(0, bank);
let bank0 = bank_forks[0].clone(); let bank0 = bank_forks[0].clone();
let bank = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); let bank = Bank::new_from_parent(&bank0, &Pubkey::default(), 1);
@ -339,8 +339,8 @@ mod tests {
#[test] #[test]
fn test_bank_forks_ancestors() { fn test_bank_forks_ancestors() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank); let mut bank_forks = BankForks::new(0, bank);
let bank0 = bank_forks[0].clone(); let bank0 = bank_forks[0].clone();
let bank = Bank::new_from_parent(&bank0, &Pubkey::default(), 1); let bank = Bank::new_from_parent(&bank0, &Pubkey::default(), 1);
@ -357,8 +357,8 @@ mod tests {
#[test] #[test]
fn test_bank_forks_frozen_banks() { fn test_bank_forks_frozen_banks() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank); let mut bank_forks = BankForks::new(0, bank);
let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1); let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1);
bank_forks.insert(child_bank); bank_forks.insert(child_bank);
@ -368,8 +368,8 @@ mod tests {
#[test] #[test]
fn test_bank_forks_active_banks() { fn test_bank_forks_active_banks() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mut bank_forks = BankForks::new(0, bank); let mut bank_forks = BankForks::new(0, bank);
let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1); let child_bank = Bank::new_from_parent(&bank_forks[0u64], &Pubkey::default(), 1);
bank_forks.insert(child_bank); bank_forks.insert(child_bank);

View File

@ -6,11 +6,11 @@ use crate::{
snapshot_utils, snapshot_utils,
}; };
use log::*; use log::*;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use std::{fs, sync::Arc}; use std::{fs, sync::Arc};
pub fn load( pub fn load(
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
blocktree: &Blocktree, blocktree: &Blocktree,
account_paths: Option<String>, account_paths: Option<String>,
snapshot_config: Option<&SnapshotConfig>, snapshot_config: Option<&SnapshotConfig>,
@ -40,7 +40,7 @@ pub fn load(
.expect("Load from snapshot failed"); .expect("Load from snapshot failed");
return blocktree_processor::process_blocktree_from_root( return blocktree_processor::process_blocktree_from_root(
genesis_block, genesis_config,
blocktree, blocktree,
Arc::new(deserialized_bank), Arc::new(deserialized_bank),
&process_options, &process_options,
@ -54,7 +54,7 @@ pub fn load(
info!("Processing ledger from genesis"); info!("Processing ledger from genesis");
blocktree_processor::process_blocktree( blocktree_processor::process_blocktree(
&genesis_block, &genesis_config,
&blocktree, &blocktree,
account_paths, account_paths,
process_options, process_options,

View File

@ -21,7 +21,7 @@ use solana_measure::measure::Measure;
use solana_metrics::{datapoint_debug, datapoint_error}; use solana_metrics::{datapoint_debug, datapoint_error};
use solana_rayon_threadlimit::get_thread_count; use solana_rayon_threadlimit::get_thread_count;
use solana_sdk::clock::{Slot, DEFAULT_TICKS_PER_SECOND}; use solana_sdk::clock::{Slot, DEFAULT_TICKS_PER_SECOND};
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use solana_sdk::hash::Hash; use solana_sdk::hash::Hash;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::timing::timestamp; use solana_sdk::timing::timestamp;
@ -1716,15 +1716,15 @@ fn slot_has_updates(slot_meta: &SlotMeta, slot_meta_backup: &Option<SlotMeta>) -
// Creates a new ledger with slot 0 full of ticks (and only ticks). // Creates a new ledger with slot 0 full of ticks (and only ticks).
// //
// Returns the blockhash that can be used to append entries with. // Returns the blockhash that can be used to append entries with.
pub fn create_new_ledger(ledger_path: &Path, genesis_block: &GenesisBlock) -> Result<Hash> { pub fn create_new_ledger(ledger_path: &Path, genesis_config: &GenesisConfig) -> Result<Hash> {
Blocktree::destroy(ledger_path)?; Blocktree::destroy(ledger_path)?;
genesis_block.write(&ledger_path)?; genesis_config.write(&ledger_path)?;
// Fill slot 0 with ticks that link back to the genesis_block to bootstrap the ledger. // Fill slot 0 with ticks that link back to the genesis_config to bootstrap the ledger.
let blocktree = Blocktree::open(ledger_path)?; let blocktree = Blocktree::open(ledger_path)?;
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
let hashes_per_tick = genesis_block.poh_config.hashes_per_tick.unwrap_or(0); let hashes_per_tick = genesis_config.poh_config.hashes_per_tick.unwrap_or(0);
let entries = create_ticks(ticks_per_slot, hashes_per_tick, genesis_block.hash()); let entries = create_ticks(ticks_per_slot, hashes_per_tick, genesis_config.hash());
let last_hash = entries.last().unwrap().hash; let last_hash = entries.last().unwrap().hash;
let shredder = Shredder::new(0, 0, 0.0, Arc::new(Keypair::new()), 0) let shredder = Shredder::new(0, 0, 0.0, Arc::new(Keypair::new()), 0)
@ -1773,8 +1773,8 @@ pub fn get_tmp_ledger_path(name: &str) -> PathBuf {
#[macro_export] #[macro_export]
macro_rules! create_new_tmp_ledger { macro_rules! create_new_tmp_ledger {
($genesis_block:expr) => { ($genesis_config:expr) => {
create_new_tmp_ledger(tmp_ledger_name!(), $genesis_block) create_new_tmp_ledger(tmp_ledger_name!(), $genesis_config)
}; };
} }
@ -1800,9 +1800,9 @@ pub fn verify_shred_slots(slot: Slot, parent_slot: Slot, last_root: u64) -> bool
// //
// Note: like `create_new_ledger` the returned ledger will have slot 0 full of ticks (and only // Note: like `create_new_ledger` the returned ledger will have slot 0 full of ticks (and only
// ticks) // ticks)
pub fn create_new_tmp_ledger(name: &str, genesis_block: &GenesisBlock) -> (PathBuf, Hash) { pub fn create_new_tmp_ledger(name: &str, genesis_config: &GenesisConfig) -> (PathBuf, Hash) {
let ledger_path = get_tmp_ledger_path(name); let ledger_path = get_tmp_ledger_path(name);
let blockhash = create_new_ledger(&ledger_path, genesis_block).unwrap(); let blockhash = create_new_ledger(&ledger_path, genesis_config).unwrap();
(ledger_path, blockhash) (ledger_path, blockhash)
} }
@ -1913,7 +1913,7 @@ fn adjust_ulimit_nofile() {
#[cfg(test)] #[cfg(test)]
pub mod tests { pub mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use crate::shred::{max_ticks_per_n_shreds, DataShredHeader}; use crate::shred::{max_ticks_per_n_shreds, DataShredHeader};
use itertools::Itertools; use itertools::Itertools;
use rand::seq::SliceRandom; use rand::seq::SliceRandom;
@ -1926,11 +1926,11 @@ pub mod tests {
#[test] #[test]
fn test_create_new_ledger() { fn test_create_new_ledger() {
let mint_total = 1_000_000_000_000; let mint_total = 1_000_000_000_000;
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(mint_total); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(mint_total);
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let ledger = Blocktree::open(&ledger_path).unwrap(); let ledger = Blocktree::open(&ledger_path).unwrap();
let ticks = create_ticks(genesis_block.ticks_per_slot, 0, genesis_block.hash()); let ticks = create_ticks(genesis_config.ticks_per_slot, 0, genesis_config.hash());
let entries = ledger.get_slot_entries(0, 0, None).unwrap(); let entries = ledger.get_slot_entries(0, 0, None).unwrap();
assert_eq!(ticks, entries); assert_eq!(ticks, entries);

View File

@ -15,7 +15,7 @@ use solana_rayon_threadlimit::get_thread_count;
use solana_runtime::{bank::Bank, transaction_batch::TransactionBatch}; use solana_runtime::{bank::Bank, transaction_batch::TransactionBatch};
use solana_sdk::{ use solana_sdk::{
clock::{Slot, MAX_RECENT_BLOCKHASHES}, clock::{Slot, MAX_RECENT_BLOCKHASHES},
genesis_block::GenesisBlock, genesis_config::GenesisConfig,
hash::Hash, hash::Hash,
signature::{Keypair, KeypairUtil}, signature::{Keypair, KeypairUtil},
timing::duration_as_ms, timing::duration_as_ms,
@ -214,7 +214,7 @@ pub struct ProcessOptions {
} }
pub fn process_blocktree( pub fn process_blocktree(
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
blocktree: &Blocktree, blocktree: &Blocktree,
account_paths: Option<String>, account_paths: Option<String>,
opts: ProcessOptions, opts: ProcessOptions,
@ -229,15 +229,15 @@ pub fn process_blocktree(
} }
// Setup bank for slot 0 // Setup bank for slot 0
let bank0 = Arc::new(Bank::new_with_paths(&genesis_block, account_paths)); let bank0 = Arc::new(Bank::new_with_paths(&genesis_config, account_paths));
info!("processing ledger for bank 0..."); info!("processing ledger for bank 0...");
process_bank_0(&bank0, blocktree, &opts)?; process_bank_0(&bank0, blocktree, &opts)?;
process_blocktree_from_root(genesis_block, blocktree, bank0, &opts) process_blocktree_from_root(genesis_config, blocktree, bank0, &opts)
} }
// Process blocktree from a known root bank // Process blocktree from a known root bank
pub fn process_blocktree_from_root( pub fn process_blocktree_from_root(
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
blocktree: &Blocktree, blocktree: &Blocktree,
bank: Arc<Bank>, bank: Arc<Bank>,
opts: &ProcessOptions, opts: &ProcessOptions,
@ -250,7 +250,7 @@ pub fn process_blocktree_from_root(
let mut rooted_path = vec![start_slot]; let mut rooted_path = vec![start_slot];
bank.set_entered_epoch_callback(solana_genesis_programs::get_entered_epoch_callback( bank.set_entered_epoch_callback(solana_genesis_programs::get_entered_epoch_callback(
genesis_block.operating_mode, genesis_config.operating_mode,
)); ));
blocktree blocktree
@ -540,7 +540,7 @@ pub mod tests {
use crate::blocktree::create_new_tmp_ledger; use crate::blocktree::create_new_tmp_ledger;
use crate::entry::{create_ticks, next_entry, next_entry_mut}; use crate::entry::{create_ticks, next_entry, next_entry_mut};
use crate::genesis_utils::{ use crate::genesis_utils::{
create_genesis_block, create_genesis_block_with_leader, GenesisBlockInfo, create_genesis_config, create_genesis_config_with_leader, GenesisConfigInfo,
}; };
use matches::assert_matches; use matches::assert_matches;
use rand::{thread_rng, Rng}; use rand::{thread_rng, Rng};
@ -561,13 +561,13 @@ pub mod tests {
solana_logger::setup(); solana_logger::setup();
let hashes_per_tick = 2; let hashes_per_tick = 2;
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
genesis_block.poh_config.hashes_per_tick = Some(hashes_per_tick); genesis_config.poh_config.hashes_per_tick = Some(hashes_per_tick);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger"); Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
@ -592,7 +592,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
assert_eq!( assert_eq!(
process_blocktree(&genesis_block, &blocktree, None, opts).err(), process_blocktree(&genesis_config, &blocktree, None, opts).err(),
Some(BlocktreeProcessorError::InvalidBlock( Some(BlocktreeProcessorError::InvalidBlock(
BlockError::InvalidTickHashCount BlockError::InvalidTickHashCount
)), )),
@ -603,11 +603,11 @@ pub mod tests {
fn test_process_blocktree_with_invalid_slot_tick_count() { fn test_process_blocktree_with_invalid_slot_tick_count() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
// Create a new ledger with slot 0 full of ticks // Create a new ledger with slot 0 full of ticks
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
// Write slot 1 with one tick missing // Write slot 1 with one tick missing
@ -632,7 +632,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
assert_eq!( assert_eq!(
process_blocktree(&genesis_block, &blocktree, None, opts).err(), process_blocktree(&genesis_config, &blocktree, None, opts).err(),
Some(BlocktreeProcessorError::InvalidBlock( Some(BlocktreeProcessorError::InvalidBlock(
BlockError::InvalidTickCount BlockError::InvalidTickCount
)), )),
@ -643,14 +643,14 @@ pub mod tests {
fn test_process_blocktree_with_slot_with_trailing_entry() { fn test_process_blocktree_with_slot_with_trailing_entry() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
mint_keypair, mint_keypair,
genesis_block, genesis_config,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
let mut entries = create_ticks(ticks_per_slot, 0, blockhash); let mut entries = create_ticks(ticks_per_slot, 0, blockhash);
@ -683,7 +683,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
assert_eq!( assert_eq!(
process_blocktree(&genesis_block, &blocktree, None, opts).err(), process_blocktree(&genesis_config, &blocktree, None, opts).err(),
Some(BlocktreeProcessorError::InvalidBlock( Some(BlocktreeProcessorError::InvalidBlock(
BlockError::TrailingEntry BlockError::TrailingEntry
)), )),
@ -694,8 +694,8 @@ pub mod tests {
fn test_process_blocktree_with_incomplete_slot() { fn test_process_blocktree_with_incomplete_slot() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
/* /*
Build a blocktree in the ledger with the following fork structure: Build a blocktree in the ledger with the following fork structure:
@ -710,7 +710,7 @@ pub mod tests {
*/ */
// Create a new ledger with slot 0 full of ticks // Create a new ledger with slot 0 full of ticks
let (ledger_path, mut blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, mut blockhash) = create_new_tmp_ledger!(&genesis_config);
debug!("ledger_path: {:?}", ledger_path); debug!("ledger_path: {:?}", ledger_path);
let blocktree = let blocktree =
@ -749,7 +749,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (mut _bank_forks, bank_forks_info, _) = let (mut _bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); assert_eq!(bank_forks_info.len(), 1);
assert_eq!( assert_eq!(
@ -764,11 +764,11 @@ pub mod tests {
fn test_process_blocktree_with_two_forks_and_squash() { fn test_process_blocktree_with_two_forks_and_squash() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
// Create a new ledger with slot 0 full of ticks // Create a new ledger with slot 0 full of ticks
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
debug!("ledger_path: {:?}", ledger_path); debug!("ledger_path: {:?}", ledger_path);
let mut last_entry_hash = blockhash; let mut last_entry_hash = blockhash;
@ -811,7 +811,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); // One fork, other one is ignored b/c not a descendant of the root assert_eq!(bank_forks_info.len(), 1); // One fork, other one is ignored b/c not a descendant of the root
@ -838,11 +838,11 @@ pub mod tests {
fn test_process_blocktree_with_two_forks() { fn test_process_blocktree_with_two_forks() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
// Create a new ledger with slot 0 full of ticks // Create a new ledger with slot 0 full of ticks
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
debug!("ledger_path: {:?}", ledger_path); debug!("ledger_path: {:?}", ledger_path);
let mut last_entry_hash = blockhash; let mut last_entry_hash = blockhash;
@ -885,7 +885,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 2); // There are two forks assert_eq!(bank_forks_info.len(), 2); // There are two forks
assert_eq!( assert_eq!(
@ -927,18 +927,18 @@ pub mod tests {
fn test_process_blocktree_epoch_boundary_root() { fn test_process_blocktree_epoch_boundary_root() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(10_000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(10_000);
let ticks_per_slot = genesis_block.ticks_per_slot; let ticks_per_slot = genesis_config.ticks_per_slot;
// Create a new ledger with slot 0 full of ticks // Create a new ledger with slot 0 full of ticks
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
let mut last_entry_hash = blockhash; let mut last_entry_hash = blockhash;
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger"); Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
// Let last_slot be the number of slots in the first two epochs // Let last_slot be the number of slots in the first two epochs
let epoch_schedule = get_epoch_schedule(&genesis_block, None); let epoch_schedule = get_epoch_schedule(&genesis_config, None);
let last_slot = epoch_schedule.get_last_slot_in_epoch(1); let last_slot = epoch_schedule.get_last_slot_in_epoch(1);
// Create a single chain of slots with all indexes in the range [0, last_slot + 1] // Create a single chain of slots with all indexes in the range [0, last_slot + 1]
@ -965,7 +965,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); // There is one fork assert_eq!(bank_forks_info.len(), 1); // There is one fork
assert_eq!( assert_eq!(
@ -1021,14 +1021,14 @@ pub mod tests {
fn test_process_empty_entry_is_registered() { fn test_process_empty_entry_is_registered() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(2); } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair = Keypair::new(); let keypair = Keypair::new();
let slot_entries = create_ticks(genesis_block.ticks_per_slot, 1, genesis_block.hash()); let slot_entries = create_ticks(genesis_config.ticks_per_slot, 1, genesis_config.hash());
let tx = system_transaction::transfer( let tx = system_transaction::transfer(
&mint_keypair, &mint_keypair,
&keypair.pubkey(), &keypair.pubkey(),
@ -1053,18 +1053,18 @@ pub mod tests {
let leader_pubkey = Pubkey::new_rand(); let leader_pubkey = Pubkey::new_rand();
let mint = 100; let mint = 100;
let hashes_per_tick = 10; let hashes_per_tick = 10;
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(mint, &leader_pubkey, 50); } = create_genesis_config_with_leader(mint, &leader_pubkey, 50);
genesis_block.poh_config.hashes_per_tick = Some(hashes_per_tick); genesis_config.poh_config.hashes_per_tick = Some(hashes_per_tick);
let (ledger_path, mut last_entry_hash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, mut last_entry_hash) = create_new_tmp_ledger!(&genesis_config);
debug!("ledger_path: {:?}", ledger_path); debug!("ledger_path: {:?}", ledger_path);
let deducted_from_mint = 3; let deducted_from_mint = 3;
let mut entries = vec![]; let mut entries = vec![];
let blockhash = genesis_block.hash(); let blockhash = genesis_config.hash();
for _ in 0..deducted_from_mint { for _ in 0..deducted_from_mint {
// Transfer one token from the mint to a random account // Transfer one token from the mint to a random account
let keypair = Keypair::new(); let keypair = Keypair::new();
@ -1087,8 +1087,8 @@ pub mod tests {
// Fill up the rest of slot 1 with ticks // Fill up the rest of slot 1 with ticks
entries.extend(create_ticks( entries.extend(create_ticks(
genesis_block.ticks_per_slot - 1, genesis_config.ticks_per_slot - 1,
genesis_block.poh_config.hashes_per_tick.unwrap(), genesis_config.poh_config.hashes_per_tick.unwrap(),
last_entry_hash, last_entry_hash,
)); ));
let last_blockhash = entries.last().unwrap().hash; let last_blockhash = entries.last().unwrap().hash;
@ -1100,7 +1100,7 @@ pub mod tests {
1, 1,
0, 0,
0, 0,
genesis_block.ticks_per_slot, genesis_config.ticks_per_slot,
None, None,
true, true,
&Arc::new(Keypair::new()), &Arc::new(Keypair::new()),
@ -1112,7 +1112,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); assert_eq!(bank_forks_info.len(), 1);
assert_eq!(bank_forks.root(), 0); assert_eq!(bank_forks.root(), 0);
@ -1123,17 +1123,17 @@ pub mod tests {
bank.get_balance(&mint_keypair.pubkey()), bank.get_balance(&mint_keypair.pubkey()),
mint - deducted_from_mint mint - deducted_from_mint
); );
assert_eq!(bank.tick_height(), 2 * genesis_block.ticks_per_slot); assert_eq!(bank.tick_height(), 2 * genesis_config.ticks_per_slot);
assert_eq!(bank.last_blockhash(), last_blockhash); assert_eq!(bank.last_blockhash(), last_blockhash);
} }
#[test] #[test]
fn test_process_ledger_with_one_tick_per_slot() { fn test_process_ledger_with_one_tick_per_slot() {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(123); } = create_genesis_config(123);
genesis_block.ticks_per_slot = 1; genesis_config.ticks_per_slot = 1;
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
let opts = ProcessOptions { let opts = ProcessOptions {
@ -1141,7 +1141,7 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); assert_eq!(bank_forks_info.len(), 1);
assert_eq!(bank_forks_info[0], BankForksInfo { bank_slot: 0 }); assert_eq!(bank_forks_info[0], BankForksInfo { bank_slot: 0 });
@ -1151,15 +1151,15 @@ pub mod tests {
#[test] #[test]
fn test_process_ledger_options_override_threads() { fn test_process_ledger_options_override_threads() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(123); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(123);
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
let opts = ProcessOptions { let opts = ProcessOptions {
override_num_threads: Some(1), override_num_threads: Some(1),
..ProcessOptions::default() ..ProcessOptions::default()
}; };
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
PAR_THREAD_POOL.with(|pool| { PAR_THREAD_POOL.with(|pool| {
assert_eq!(pool.borrow().current_num_threads(), 1); assert_eq!(pool.borrow().current_num_threads(), 1);
}); });
@ -1167,8 +1167,8 @@ pub mod tests {
#[test] #[test]
fn test_process_ledger_options_full_leader_cache() { fn test_process_ledger_options_full_leader_cache() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(123); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(123);
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
let opts = ProcessOptions { let opts = ProcessOptions {
@ -1176,21 +1176,21 @@ pub mod tests {
..ProcessOptions::default() ..ProcessOptions::default()
}; };
let (_bank_forks, _bank_forks_info, cached_leader_schedule) = let (_bank_forks, _bank_forks_info, cached_leader_schedule) =
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(cached_leader_schedule.max_schedules(), std::usize::MAX); assert_eq!(cached_leader_schedule.max_schedules(), std::usize::MAX);
} }
#[test] #[test]
fn test_process_ledger_options_entry_callback() { fn test_process_ledger_options_entry_callback() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100); } = create_genesis_config(100);
let (ledger_path, last_entry_hash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, last_entry_hash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = let blocktree =
Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger"); Blocktree::open(&ledger_path).expect("Expected to successfully open database ledger");
let blockhash = genesis_block.hash(); let blockhash = genesis_config.hash();
let keypairs = [Keypair::new(), Keypair::new(), Keypair::new()]; let keypairs = [Keypair::new(), Keypair::new(), Keypair::new()];
let tx = system_transaction::transfer(&mint_keypair, &keypairs[0].pubkey(), 1, blockhash); let tx = system_transaction::transfer(&mint_keypair, &keypairs[0].pubkey(), 1, blockhash);
@ -1201,7 +1201,7 @@ pub mod tests {
let mut entries = vec![entry_1, entry_2]; let mut entries = vec![entry_1, entry_2];
entries.extend(create_ticks( entries.extend(create_ticks(
genesis_block.ticks_per_slot, genesis_config.ticks_per_slot,
0, 0,
last_entry_hash, last_entry_hash,
)); ));
@ -1210,7 +1210,7 @@ pub mod tests {
1, 1,
0, 0,
0, 0,
genesis_block.ticks_per_slot, genesis_config.ticks_per_slot,
None, None,
true, true,
&Arc::new(Keypair::new()), &Arc::new(Keypair::new()),
@ -1235,30 +1235,30 @@ pub mod tests {
entry_callback: Some(entry_callback), entry_callback: Some(entry_callback),
..ProcessOptions::default() ..ProcessOptions::default()
}; };
process_blocktree(&genesis_block, &blocktree, None, opts).unwrap(); process_blocktree(&genesis_config, &blocktree, None, opts).unwrap();
assert_eq!(*callback_counter.write().unwrap(), 2); assert_eq!(*callback_counter.write().unwrap(), 2);
} }
#[test] #[test]
fn test_process_entries_tick() { fn test_process_entries_tick() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(1000); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
// ensure bank can process a tick // ensure bank can process a tick
assert_eq!(bank.tick_height(), 0); assert_eq!(bank.tick_height(), 0);
let tick = next_entry(&genesis_block.hash(), 1, vec![]); let tick = next_entry(&genesis_config.hash(), 1, vec![]);
assert_eq!(process_entries(&bank, &[tick.clone()], true), Ok(())); assert_eq!(process_entries(&bank, &[tick.clone()], true), Ok(()));
assert_eq!(bank.tick_height(), 1); assert_eq!(bank.tick_height(), 1);
} }
#[test] #[test]
fn test_process_entries_2_entries_collision() { fn test_process_entries_2_entries_collision() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
@ -1287,12 +1287,12 @@ pub mod tests {
#[test] #[test]
fn test_process_entries_2_txes_collision() { fn test_process_entries_2_txes_collision() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let keypair3 = Keypair::new(); let keypair3 = Keypair::new();
@ -1344,12 +1344,12 @@ pub mod tests {
#[test] #[test]
fn test_process_entries_2_txes_collision_and_error() { fn test_process_entries_2_txes_collision_and_error() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let keypair3 = Keypair::new(); let keypair3 = Keypair::new();
@ -1429,12 +1429,12 @@ pub mod tests {
fn test_process_entries_2nd_entry_collision_with_self_and_error() { fn test_process_entries_2nd_entry_collision_with_self_and_error() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let keypair3 = Keypair::new(); let keypair3 = Keypair::new();
@ -1524,12 +1524,12 @@ pub mod tests {
#[test] #[test]
fn test_process_entries_2_entries_par() { fn test_process_entries_2_entries_par() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let keypair3 = Keypair::new(); let keypair3 = Keypair::new();
@ -1567,12 +1567,12 @@ pub mod tests {
#[test] #[test]
fn test_process_entry_tx_random_execution_with_error() { fn test_process_entry_tx_random_execution_with_error() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1_000_000_000); } = create_genesis_config(1_000_000_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
const NUM_TRANSFERS_PER_ENTRY: usize = 8; const NUM_TRANSFERS_PER_ENTRY: usize = 8;
const NUM_TRANSFERS: usize = NUM_TRANSFERS_PER_ENTRY * 32; const NUM_TRANSFERS: usize = NUM_TRANSFERS_PER_ENTRY * 32;
@ -1630,13 +1630,13 @@ pub mod tests {
// number of accounts need to be in multiple of 4 for correct // number of accounts need to be in multiple of 4 for correct
// execution of the test. // execution of the test.
let num_accounts = entropy_multiplier * 4; let num_accounts = entropy_multiplier * 4;
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block((num_accounts + 1) as u64 * initial_lamports); } = create_genesis_config((num_accounts + 1) as u64 * initial_lamports);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let mut keypairs: Vec<Keypair> = vec![]; let mut keypairs: Vec<Keypair> = vec![];
@ -1698,12 +1698,12 @@ pub mod tests {
#[test] #[test]
fn test_process_entries_2_entries_tick() { fn test_process_entries_2_entries_tick() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let keypair3 = Keypair::new(); let keypair3 = Keypair::new();
@ -1761,12 +1761,12 @@ pub mod tests {
#[test] #[test]
fn test_update_transaction_statuses() { fn test_update_transaction_statuses() {
// Make sure instruction errors still update the signature cache // Make sure instruction errors still update the signature cache
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(11_000); } = create_genesis_config(11_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
bank.transfer(1_000, &mint_keypair, &pubkey).unwrap(); bank.transfer(1_000, &mint_keypair, &pubkey).unwrap();
assert_eq!(bank.transaction_count(), 1); assert_eq!(bank.transaction_count(), 1);
@ -1802,12 +1802,12 @@ pub mod tests {
#[test] #[test]
fn test_update_transaction_statuses_fail() { fn test_update_transaction_statuses_fail() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(11_000); } = create_genesis_config(11_000);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let success_tx = system_transaction::transfer( let success_tx = system_transaction::transfer(
@ -1843,13 +1843,13 @@ pub mod tests {
#[test] #[test]
fn test_process_blocktree_from_root() { fn test_process_blocktree_from_root() {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, .. mut genesis_config, ..
} = create_genesis_block(123); } = create_genesis_config(123);
let ticks_per_slot = 1; let ticks_per_slot = 1;
genesis_block.ticks_per_slot = ticks_per_slot; genesis_config.ticks_per_slot = ticks_per_slot;
let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_block); let (ledger_path, blockhash) = create_new_tmp_ledger!(&genesis_config);
let blocktree = Blocktree::open(&ledger_path).unwrap(); let blocktree = Blocktree::open(&ledger_path).unwrap();
/* /*
@ -1878,7 +1878,7 @@ pub mod tests {
blocktree.set_roots(&[3, 5]).unwrap(); blocktree.set_roots(&[3, 5]).unwrap();
// Set up bank1 // Set up bank1
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let opts = ProcessOptions { let opts = ProcessOptions {
poh_verify: true, poh_verify: true,
..ProcessOptions::default() ..ProcessOptions::default()
@ -1892,7 +1892,7 @@ pub mod tests {
// Test process_blocktree_from_root() from slot 1 onwards // Test process_blocktree_from_root() from slot 1 onwards
let (bank_forks, bank_forks_info, _) = let (bank_forks, bank_forks_info, _) =
process_blocktree_from_root(&genesis_block, &blocktree, bank1, &opts).unwrap(); process_blocktree_from_root(&genesis_config, &blocktree, bank1, &opts).unwrap();
assert_eq!(bank_forks_info.len(), 1); // One fork assert_eq!(bank_forks_info.len(), 1); // One fork
assert_eq!( assert_eq!(
@ -1923,12 +1923,12 @@ pub mod tests {
// this test throws lots of rayon threads at process_entries() // this test throws lots of rayon threads at process_entries()
// finds bugs in very low-layer stuff // finds bugs in very low-layer stuff
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1_000_000_000); } = create_genesis_config(1_000_000_000);
let mut bank = Arc::new(Bank::new(&genesis_block)); let mut bank = Arc::new(Bank::new(&genesis_config));
const NUM_TRANSFERS_PER_ENTRY: usize = 8; const NUM_TRANSFERS_PER_ENTRY: usize = 8;
const NUM_TRANSFERS: usize = NUM_TRANSFERS_PER_ENTRY * 32; const NUM_TRANSFERS: usize = NUM_TRANSFERS_PER_ENTRY * 32;
@ -2028,17 +2028,17 @@ pub mod tests {
#[test] #[test]
fn test_process_ledger_ticks_ordering() { fn test_process_ledger_ticks_ordering() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100); } = create_genesis_config(100);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let genesis_hash = genesis_block.hash(); let genesis_hash = genesis_config.hash();
let keypair = Keypair::new(); let keypair = Keypair::new();
// Simulate a slot of virtual ticks, creates a new blockhash // Simulate a slot of virtual ticks, creates a new blockhash
let mut entries = create_ticks(genesis_block.ticks_per_slot, 1, genesis_hash); let mut entries = create_ticks(genesis_config.ticks_per_slot, 1, genesis_hash);
// The new blockhash is going to be the hash of the last tick in the block // The new blockhash is going to be the hash of the last tick in the block
let new_blockhash = entries.last().unwrap().hash; let new_blockhash = entries.last().unwrap().hash;
@ -2054,10 +2054,10 @@ pub mod tests {
} }
fn get_epoch_schedule( fn get_epoch_schedule(
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
account_paths: Option<String>, account_paths: Option<String>,
) -> EpochSchedule { ) -> EpochSchedule {
let bank = Bank::new_with_paths(&genesis_block, account_paths); let bank = Bank::new_with_paths(&genesis_config, account_paths);
bank.epoch_schedule().clone() bank.epoch_schedule().clone()
} }

View File

@ -1,12 +1,12 @@
pub use solana_runtime::genesis_utils::{ pub use solana_runtime::genesis_utils::{
create_genesis_block_with_leader, GenesisBlockInfo, BOOTSTRAP_LEADER_LAMPORTS, create_genesis_config_with_leader, GenesisConfigInfo, BOOTSTRAP_LEADER_LAMPORTS,
}; };
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
// same as genesis_block::create_genesis_block, but with bootstrap_leader staking logic // same as genesis_config::create_genesis_config, but with bootstrap_leader staking logic
// for the core crate tests // for the core crate tests
pub fn create_genesis_block(mint_lamports: u64) -> GenesisBlockInfo { pub fn create_genesis_config(mint_lamports: u64) -> GenesisConfigInfo {
create_genesis_block_with_leader( create_genesis_config_with_leader(
mint_lamports, mint_lamports,
&Pubkey::new_rand(), &Pubkey::new_rand(),
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,

View File

@ -237,7 +237,7 @@ mod tests {
use crate::{ use crate::{
blocktree::{get_tmp_ledger_path, make_slot_entries}, blocktree::{get_tmp_ledger_path, make_slot_entries},
genesis_utils::{ genesis_utils::{
create_genesis_block, create_genesis_block_with_leader, GenesisBlockInfo, create_genesis_config, create_genesis_config_with_leader, GenesisConfigInfo,
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
}, },
staking_utils::tests::setup_vote_and_stake_accounts, staking_utils::tests::setup_vote_and_stake_accounts,
@ -252,8 +252,8 @@ mod tests {
#[test] #[test]
fn test_new_cache() { fn test_new_cache() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let cache = LeaderScheduleCache::new_from_bank(&bank); let cache = LeaderScheduleCache::new_from_bank(&bank);
assert_eq!(bank.slot(), 0); assert_eq!(bank.slot(), 0);
assert_eq!(cache.max_schedules(), MAX_SCHEDULES); assert_eq!(cache.max_schedules(), MAX_SCHEDULES);
@ -315,8 +315,8 @@ mod tests {
fn run_thread_race() { fn run_thread_race() {
let slots_per_epoch = MINIMUM_SLOTS_PER_EPOCH as u64; let slots_per_epoch = MINIMUM_SLOTS_PER_EPOCH as u64;
let epoch_schedule = EpochSchedule::custom(slots_per_epoch, slots_per_epoch / 2, true); let epoch_schedule = EpochSchedule::custom(slots_per_epoch, slots_per_epoch / 2, true);
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let cache = Arc::new(LeaderScheduleCache::new(epoch_schedule, &bank)); let cache = Arc::new(LeaderScheduleCache::new(epoch_schedule, &bank));
let num_threads = 10; let num_threads = 10;
@ -354,19 +354,19 @@ mod tests {
#[test] #[test]
fn test_next_leader_slot() { fn test_next_leader_slot() {
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let mut genesis_block = create_genesis_block_with_leader( let mut genesis_config = create_genesis_config_with_leader(
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
&pubkey, &pubkey,
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
) )
.genesis_block; .genesis_config;
genesis_block.epoch_schedule = EpochSchedule::custom( genesis_config.epoch_schedule = EpochSchedule::custom(
DEFAULT_SLOTS_PER_EPOCH, DEFAULT_SLOTS_PER_EPOCH,
DEFAULT_LEADER_SCHEDULE_SLOT_OFFSET, DEFAULT_LEADER_SCHEDULE_SLOT_OFFSET,
false, false,
); );
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));
assert_eq!( assert_eq!(
@ -384,7 +384,7 @@ mod tests {
assert_eq!( assert_eq!(
cache.next_leader_slot( cache.next_leader_slot(
&pubkey, &pubkey,
2 * genesis_block.epoch_schedule.slots_per_epoch - 1, // no schedule generated for epoch 2 2 * genesis_config.epoch_schedule.slots_per_epoch - 1, // no schedule generated for epoch 2
&bank, &bank,
None None
), ),
@ -405,15 +405,15 @@ mod tests {
#[test] #[test]
fn test_next_leader_slot_blocktree() { fn test_next_leader_slot_blocktree() {
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let mut genesis_block = create_genesis_block_with_leader( let mut genesis_config = create_genesis_config_with_leader(
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
&pubkey, &pubkey,
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
) )
.genesis_block; .genesis_config;
genesis_block.epoch_schedule.warmup = false; genesis_config.epoch_schedule.warmup = false;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));
let ledger_path = get_tmp_ledger_path!(); let ledger_path = get_tmp_ledger_path!();
{ {
@ -463,7 +463,7 @@ mod tests {
assert_eq!( assert_eq!(
cache.next_leader_slot( cache.next_leader_slot(
&pubkey, &pubkey,
2 * genesis_block.epoch_schedule.slots_per_epoch - 1, // no schedule generated for epoch 2 2 * genesis_config.epoch_schedule.slots_per_epoch - 1, // no schedule generated for epoch 2
&bank, &bank,
Some(&blocktree) Some(&blocktree)
), ),
@ -485,14 +485,14 @@ mod tests {
#[test] #[test]
fn test_next_leader_slot_next_epoch() { fn test_next_leader_slot_next_epoch() {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
genesis_block.epoch_schedule.warmup = false; genesis_config.epoch_schedule.warmup = false;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank)); let cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));
// Create new vote account // Create new vote account
@ -525,7 +525,7 @@ mod tests {
let mut index = 0; let mut index = 0;
while schedule[index] != node_pubkey { while schedule[index] != node_pubkey {
index += 1; index += 1;
assert_ne!(index, genesis_block.epoch_schedule.slots_per_epoch); assert_ne!(index, genesis_config.epoch_schedule.slots_per_epoch);
} }
expected_slot += index; expected_slot += index;
@ -546,8 +546,8 @@ mod tests {
#[test] #[test]
fn test_schedule_for_unconfirmed_epoch() { fn test_schedule_for_unconfirmed_epoch() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let cache = LeaderScheduleCache::new_from_bank(&bank); let cache = LeaderScheduleCache::new_from_bank(&bank);
assert_eq!(*cache.max_epoch.read().unwrap(), 1); assert_eq!(*cache.max_epoch.read().unwrap(), 1);
@ -577,8 +577,8 @@ mod tests {
#[test] #[test]
fn test_set_max_schedules() { fn test_set_max_schedules() {
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(2); let GenesisConfigInfo { genesis_config, .. } = create_genesis_config(2);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let mut cache = LeaderScheduleCache::new_from_bank(&bank); let mut cache = LeaderScheduleCache::new_from_bank(&bank);
// Max schedules must be greater than 0 // Max schedules must be greater than 0

View File

@ -55,22 +55,22 @@ fn sort_stakes(stakes: &mut Vec<(Pubkey, u64)>) {
mod tests { mod tests {
use super::*; use super::*;
use solana_runtime::genesis_utils::{ use solana_runtime::genesis_utils::{
create_genesis_block_with_leader, BOOTSTRAP_LEADER_LAMPORTS, create_genesis_config_with_leader, BOOTSTRAP_LEADER_LAMPORTS,
}; };
#[test] #[test]
fn test_leader_schedule_via_bank() { fn test_leader_schedule_via_bank() {
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let genesis_block = let genesis_config =
create_genesis_block_with_leader(0, &pubkey, BOOTSTRAP_LEADER_LAMPORTS).genesis_block; create_genesis_config_with_leader(0, &pubkey, BOOTSTRAP_LEADER_LAMPORTS).genesis_config;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let pubkeys_and_stakes: Vec<_> = staking_utils::staked_nodes(&bank).into_iter().collect(); let pubkeys_and_stakes: Vec<_> = staking_utils::staked_nodes(&bank).into_iter().collect();
let seed = [0u8; 32]; let seed = [0u8; 32];
let leader_schedule = LeaderSchedule::new( let leader_schedule = LeaderSchedule::new(
&pubkeys_and_stakes, &pubkeys_and_stakes,
seed, seed,
genesis_block.epoch_schedule.slots_per_epoch, genesis_config.epoch_schedule.slots_per_epoch,
NUM_CONSECUTIVE_LEADER_SLOTS, NUM_CONSECUTIVE_LEADER_SLOTS,
); );
@ -82,13 +82,13 @@ mod tests {
#[test] #[test]
fn test_leader_scheduler1_basic() { fn test_leader_scheduler1_basic() {
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let genesis_block = create_genesis_block_with_leader( let genesis_config = create_genesis_config_with_leader(
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
&pubkey, &pubkey,
BOOTSTRAP_LEADER_LAMPORTS, BOOTSTRAP_LEADER_LAMPORTS,
) )
.genesis_block; .genesis_config;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
assert_eq!(slot_leader_at(bank.slot(), &bank).unwrap(), pubkey); assert_eq!(slot_leader_at(bank.slot(), &bank).unwrap(), pubkey);
} }

View File

@ -100,7 +100,9 @@ where
#[cfg(test)] #[cfg(test)]
pub(crate) mod tests { pub(crate) mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block, GenesisBlockInfo, BOOTSTRAP_LEADER_LAMPORTS}; use crate::genesis_utils::{
create_genesis_config, GenesisConfigInfo, BOOTSTRAP_LEADER_LAMPORTS,
};
use solana_sdk::{ use solana_sdk::{
instruction::Instruction, instruction::Instruction,
pubkey::Pubkey, pubkey::Pubkey,
@ -187,18 +189,18 @@ pub(crate) mod tests {
let validator = Keypair::new(); let validator = Keypair::new();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(10_000); } = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let vote_account = Keypair::new(); let vote_account = Keypair::new();
// Give the validator some stake but don't setup a staking account // Give the validator some stake but don't setup a staking account
// Validator has no lamports staked, so they get filtered out. Only the bootstrap leader // Validator has no lamports staked, so they get filtered out. Only the bootstrap leader
// created by the genesis block will get included // created by the genesis config will get included
bank.transfer(1, &mint_keypair, &validator.pubkey()) bank.transfer(1, &mint_keypair, &validator.pubkey())
.unwrap(); .unwrap();

View File

@ -4,7 +4,7 @@ use solana_core::{
archiver::Archiver, archiver::Archiver,
cluster_info::{Node, VALIDATOR_PORT_RANGE}, cluster_info::{Node, VALIDATOR_PORT_RANGE},
contact_info::ContactInfo, contact_info::ContactInfo,
genesis_utils::{create_genesis_block_with_leader, GenesisBlockInfo}, genesis_utils::{create_genesis_config_with_leader, GenesisConfigInfo},
gossip_service::discover_cluster, gossip_service::discover_cluster,
service::Service, service::Service,
validator::{Validator, ValidatorConfig}, validator::{Validator, ValidatorConfig},
@ -15,7 +15,7 @@ use solana_sdk::{
clock::{DEFAULT_SLOTS_PER_EPOCH, DEFAULT_SLOTS_PER_SEGMENT, DEFAULT_TICKS_PER_SLOT}, clock::{DEFAULT_SLOTS_PER_EPOCH, DEFAULT_SLOTS_PER_SEGMENT, DEFAULT_TICKS_PER_SLOT},
commitment_config::CommitmentConfig, commitment_config::CommitmentConfig,
epoch_schedule::EpochSchedule, epoch_schedule::EpochSchedule,
genesis_block::{GenesisBlock, OperatingMode}, genesis_config::{GenesisConfig, OperatingMode},
message::Message, message::Message,
poh_config::PohConfig, poh_config::PohConfig,
pubkey::Pubkey, pubkey::Pubkey,
@ -106,7 +106,7 @@ pub struct LocalCluster {
pub validator_infos: HashMap<Pubkey, ClusterValidatorInfo>, pub validator_infos: HashMap<Pubkey, ClusterValidatorInfo>,
pub listener_infos: HashMap<Pubkey, ClusterValidatorInfo>, pub listener_infos: HashMap<Pubkey, ClusterValidatorInfo>,
validators: HashMap<Pubkey, Validator>, validators: HashMap<Pubkey, Validator>,
pub genesis_block: GenesisBlock, pub genesis_config: GenesisConfig,
archivers: Vec<Archiver>, archivers: Vec<Archiver>,
pub archiver_infos: HashMap<Pubkey, ArchiverInfo>, pub archiver_infos: HashMap<Pubkey, ArchiverInfo>,
} }
@ -132,55 +132,55 @@ impl LocalCluster {
let leader_keypair = Arc::new(Keypair::new()); let leader_keypair = Arc::new(Keypair::new());
let leader_pubkey = leader_keypair.pubkey(); let leader_pubkey = leader_keypair.pubkey();
let leader_node = Node::new_localhost_with_pubkey(&leader_keypair.pubkey()); let leader_node = Node::new_localhost_with_pubkey(&leader_keypair.pubkey());
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
voting_keypair, voting_keypair,
} = create_genesis_block_with_leader( } = create_genesis_config_with_leader(
config.cluster_lamports, config.cluster_lamports,
&leader_pubkey, &leader_pubkey,
config.node_stakes[0], config.node_stakes[0],
); );
genesis_block.ticks_per_slot = config.ticks_per_slot; genesis_config.ticks_per_slot = config.ticks_per_slot;
genesis_block.slots_per_segment = config.slots_per_segment; genesis_config.slots_per_segment = config.slots_per_segment;
genesis_block.epoch_schedule = genesis_config.epoch_schedule =
EpochSchedule::custom(config.slots_per_epoch, config.stakers_slot_offset, true); EpochSchedule::custom(config.slots_per_epoch, config.stakers_slot_offset, true);
genesis_block.operating_mode = config.operating_mode; genesis_config.operating_mode = config.operating_mode;
genesis_block.poh_config = config.poh_config.clone(); genesis_config.poh_config = config.poh_config.clone();
match genesis_block.operating_mode { match genesis_config.operating_mode {
OperatingMode::SoftLaunch => { OperatingMode::SoftLaunch => {
genesis_block.native_instruction_processors = genesis_config.native_instruction_processors =
solana_genesis_programs::get_programs(genesis_block.operating_mode, 0).unwrap() solana_genesis_programs::get_programs(genesis_config.operating_mode, 0).unwrap()
} }
// create_genesis_block_with_leader() assumes OperatingMode::Development so do // create_genesis_config_with_leader() assumes OperatingMode::Development so do
// nothing... // nothing...
OperatingMode::Development => (), OperatingMode::Development => (),
} }
genesis_block.inflation = genesis_config.inflation =
solana_genesis_programs::get_inflation(genesis_block.operating_mode, 0).unwrap(); solana_genesis_programs::get_inflation(genesis_config.operating_mode, 0).unwrap();
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.extend_from_slice(&config.native_instruction_processors); .extend_from_slice(&config.native_instruction_processors);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_storage_program!()); .push(solana_storage_program!());
let storage_keypair = Keypair::new(); let storage_keypair = Keypair::new();
genesis_block.accounts.push(( genesis_config.accounts.push((
storage_keypair.pubkey(), storage_keypair.pubkey(),
storage_contract::create_validator_storage_account(leader_pubkey, 1), storage_contract::create_validator_storage_account(leader_pubkey, 1),
)); ));
// Replace staking config // Replace staking config
genesis_block.accounts = genesis_block genesis_config.accounts = genesis_config
.accounts .accounts
.into_iter() .into_iter()
.filter(|(pubkey, _)| *pubkey != stake_config::id()) .filter(|(pubkey, _)| *pubkey != stake_config::id())
.collect(); .collect();
genesis_block.accounts.push(( genesis_config.accounts.push((
stake_config::id(), stake_config::id(),
stake_config::create_account( stake_config::create_account(
1, 1,
@ -192,7 +192,7 @@ impl LocalCluster {
), ),
)); ));
let (leader_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (leader_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
let leader_contact_info = leader_node.info.clone(); let leader_contact_info = leader_node.info.clone();
let leader_storage_keypair = Arc::new(storage_keypair); let leader_storage_keypair = Arc::new(storage_keypair);
let leader_voting_keypair = Arc::new(voting_keypair); let leader_voting_keypair = Arc::new(voting_keypair);
@ -229,7 +229,7 @@ impl LocalCluster {
entry_point_info: leader_contact_info, entry_point_info: leader_contact_info,
validators, validators,
archivers: vec![], archivers: vec![],
genesis_block, genesis_config,
validator_infos, validator_infos,
archiver_infos: HashMap::new(), archiver_infos: HashMap::new(),
listener_infos: HashMap::new(), listener_infos: HashMap::new(),
@ -297,7 +297,7 @@ impl LocalCluster {
let validator_pubkey = validator_keypair.pubkey(); let validator_pubkey = validator_keypair.pubkey();
let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey()); let validator_node = Node::new_localhost_with_pubkey(&validator_keypair.pubkey());
let contact_info = validator_node.info.clone(); let contact_info = validator_node.info.clone();
let (ledger_path, _blockhash) = create_new_tmp_ledger!(&self.genesis_block); let (ledger_path, _blockhash) = create_new_tmp_ledger!(&self.genesis_config);
if validator_config.voting_disabled { if validator_config.voting_disabled {
// setup as a listener // setup as a listener
@ -383,7 +383,7 @@ impl LocalCluster {
Self::setup_storage_account(&client, &storage_keypair, &archiver_keypair, true).unwrap(); Self::setup_storage_account(&client, &storage_keypair, &archiver_keypair, true).unwrap();
let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&self.genesis_block); let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&self.genesis_config);
let archiver = Archiver::new( let archiver = Archiver::new(
&archiver_ledger_path, &archiver_ledger_path,
archiver_node, archiver_node,

View File

@ -12,7 +12,7 @@ use solana_core::{
use solana_ledger::blocktree::{create_new_tmp_ledger, get_tmp_ledger_path, Blocktree}; use solana_ledger::blocktree::{create_new_tmp_ledger, get_tmp_ledger_path, Blocktree};
use solana_sdk::{ use solana_sdk::{
commitment_config::CommitmentConfig, commitment_config::CommitmentConfig,
genesis_block::create_genesis_block, genesis_config::create_genesis_config,
signature::{Keypair, KeypairUtil}, signature::{Keypair, KeypairUtil},
}; };
use std::{ use std::{
@ -87,8 +87,8 @@ fn test_archiver_startup_leader_hang() {
info!("starting archiver test"); info!("starting archiver test");
let leader_ledger_path = std::path::PathBuf::from("archiver_test_leader_ledger"); let leader_ledger_path = std::path::PathBuf::from("archiver_test_leader_ledger");
let (genesis_block, _mint_keypair) = create_genesis_block(10_000); let (genesis_config, _mint_keypair) = create_genesis_config(10_000);
let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_block); let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&genesis_config);
{ {
let archiver_keypair = Arc::new(Keypair::new()); let archiver_keypair = Arc::new(Keypair::new());
@ -134,7 +134,7 @@ fn test_archiver_startup_ledger_hang() {
// Pass bad TVU sockets to prevent successful ledger download // Pass bad TVU sockets to prevent successful ledger download
archiver_node.sockets.tvu = vec![std::net::UdpSocket::bind("0.0.0.0:0").unwrap()]; archiver_node.sockets.tvu = vec![std::net::UdpSocket::bind("0.0.0.0:0").unwrap()];
let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&cluster.genesis_block); let (archiver_ledger_path, _blockhash) = create_new_tmp_ledger!(&cluster.genesis_config);
let archiver_res = Archiver::new( let archiver_res = Archiver::new(
&archiver_ledger_path, &archiver_ledger_path,

View File

@ -7,7 +7,7 @@ use solana_exchange_api::exchange_processor::process_instruction;
use solana_exchange_api::id; use solana_exchange_api::id;
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use std::process::exit; use std::process::exit;
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
@ -81,8 +81,8 @@ fn test_exchange_local_cluster() {
#[test] #[test]
fn test_exchange_bank_client() { fn test_exchange_bank_client() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, identity) = create_genesis_block(100_000_000_000_000); let (genesis_config, identity) = create_genesis_config(100_000_000_000_000);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
let clients = vec![BankClient::new(bank)]; let clients = vec![BankClient::new(bank)];

View File

@ -17,7 +17,7 @@ use solana_sdk::{
clock, clock,
commitment_config::CommitmentConfig, commitment_config::CommitmentConfig,
epoch_schedule::{EpochSchedule, MINIMUM_SLOTS_PER_EPOCH}, epoch_schedule::{EpochSchedule, MINIMUM_SLOTS_PER_EPOCH},
genesis_block::OperatingMode, genesis_config::OperatingMode,
poh_config::PohConfig, poh_config::PohConfig,
}; };
use std::{ use std::{
@ -206,7 +206,7 @@ fn test_two_unbalanced_stakes() {
cluster_tests::sleep_n_epochs( cluster_tests::sleep_n_epochs(
10.0, 10.0,
&cluster.genesis_block.poh_config, &cluster.genesis_config.poh_config,
num_ticks_per_slot, num_ticks_per_slot,
num_slots_per_epoch, num_slots_per_epoch,
); );
@ -265,14 +265,14 @@ fn test_restart_node() {
let nodes = cluster.get_node_pubkeys(); let nodes = cluster.get_node_pubkeys();
cluster_tests::sleep_n_epochs( cluster_tests::sleep_n_epochs(
1.0, 1.0,
&cluster.genesis_block.poh_config, &cluster.genesis_config.poh_config,
clock::DEFAULT_TICKS_PER_SLOT, clock::DEFAULT_TICKS_PER_SLOT,
slots_per_epoch, slots_per_epoch,
); );
cluster.exit_restart_node(&nodes[0], validator_config); cluster.exit_restart_node(&nodes[0], validator_config);
cluster_tests::sleep_n_epochs( cluster_tests::sleep_n_epochs(
0.5, 0.5,
&cluster.genesis_block.poh_config, &cluster.genesis_config.poh_config,
clock::DEFAULT_TICKS_PER_SLOT, clock::DEFAULT_TICKS_PER_SLOT,
slots_per_epoch, slots_per_epoch,
); );
@ -608,7 +608,7 @@ fn test_faulty_node(faulty_node_type: BroadcastStageType) {
// Wait for the corrupted leader to be scheduled afer the warmup epochs expire // Wait for the corrupted leader to be scheduled afer the warmup epochs expire
cluster_tests::sleep_n_epochs( cluster_tests::sleep_n_epochs(
(num_warmup_epochs + 1) as f64, (num_warmup_epochs + 1) as f64,
&cluster.genesis_block.poh_config, &cluster.genesis_config.poh_config,
cluster_config.ticks_per_slot, cluster_config.ticks_per_slot,
cluster_config.slots_per_epoch, cluster_config.slots_per_epoch,
); );
@ -735,7 +735,7 @@ fn run_repairman_catchup(num_repairmen: u64) {
// Sleep for longer than the first N warmup epochs, with a one epoch buffer for timing issues // Sleep for longer than the first N warmup epochs, with a one epoch buffer for timing issues
cluster_tests::sleep_n_epochs( cluster_tests::sleep_n_epochs(
num_warmup_epochs as f64 + 1.0, num_warmup_epochs as f64 + 1.0,
&cluster.genesis_block.poh_config, &cluster.genesis_config.poh_config,
num_ticks_per_slot, num_ticks_per_slot,
num_slots_per_epoch, num_slots_per_epoch,
); );

View File

@ -57,7 +57,7 @@ if [[ -z $CI ]]; then # Skip in CI
source "$here"/../scripts/tune-system.sh source "$here"/../scripts/tune-system.sh
fi fi
# These keypairs are created by ./setup.sh and included in the genesis block # These keypairs are created by ./setup.sh and included in the genesis config
identity_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader/identity-keypair.json identity_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader/identity-keypair.json
vote_keypair="$SOLANA_CONFIG_DIR"/bootstrap-leader/vote-keypair.json vote_keypair="$SOLANA_CONFIG_DIR"/bootstrap-leader/vote-keypair.json
storage_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader/storage-keypair.json storage_keypair=$SOLANA_CONFIG_DIR/bootstrap-leader/storage-keypair.json

View File

@ -23,11 +23,11 @@ OPTIONS:
--init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete --init-complete-file FILE - create this file, if it doesn't already exist, once node initialization is complete
--label LABEL - Append the given label to the configuration files, useful when running --label LABEL - Append the given label to the configuration files, useful when running
multiple validators in the same workspace multiple validators in the same workspace
--node-lamports LAMPORTS - Number of lamports this node has been funded from the genesis block --node-lamports LAMPORTS - Number of lamports this node has been funded from the genesis config
--no-voting - start node without vote signer --no-voting - start node without vote signer
--rpc-port port - custom RPC port for this node --rpc-port port - custom RPC port for this node
--no-restart - do not restart the node if it exits --no-restart - do not restart the node if it exits
--no-airdrop - The genesis block has an account for the node. Airdrops are not required. --no-airdrop - The genesis config has an account for the node. Airdrops are not required.
EOF EOF
exit 1 exit 1
@ -36,7 +36,7 @@ EOF
args=() args=()
airdrops_enabled=1 airdrops_enabled=1
node_lamports=500000000000 # 500 SOL: number of lamports to airdrop the node for transaction fees (ignored if airdrops_enabled=0) node_lamports=500000000000 # 500 SOL: number of lamports to airdrop the node for transaction fees (ignored if airdrops_enabled=0)
poll_for_new_genesis_block=0 poll_for_new_genesis_config=0
label= label=
identity_keypair_path= identity_keypair_path=
voting_keypair_path= voting_keypair_path=
@ -54,8 +54,8 @@ while [[ -n $1 ]]; do
elif [[ $1 = --no-restart ]]; then elif [[ $1 = --no-restart ]]; then
no_restart=1 no_restart=1
shift shift
elif [[ $1 = --poll-for-new-genesis-block ]]; then elif [[ $1 = --poll-for-new-genesis-config ]]; then
poll_for_new_genesis_block=1 poll_for_new_genesis_config=1
shift shift
elif [[ $1 = --node-lamports ]]; then elif [[ $1 = --node-lamports ]]; then
node_lamports="$2" node_lamports="$2"
@ -67,7 +67,7 @@ while [[ -n $1 ]]; do
elif [[ $1 = --blockstream ]]; then elif [[ $1 = --blockstream ]]; then
args+=("$1" "$2") args+=("$1" "$2")
shift 2 shift 2
elif [[ $1 = --expected-genesis-blockhash ]]; then elif [[ $1 = --expected-genesis-hash ]]; then
args+=("$1" "$2") args+=("$1" "$2")
shift 2 shift 2
elif [[ $1 = --identity ]]; then elif [[ $1 = --identity ]]; then
@ -232,7 +232,7 @@ if [[ -z $CI ]]; then # Skip in CI
source "$here"/../scripts/tune-system.sh source "$here"/../scripts/tune-system.sh
fi fi
new_genesis_block() { new_genesis_config() {
if [[ ! -d "$ledger_dir" ]]; then if [[ ! -d "$ledger_dir" ]]; then
return return
fi fi
@ -336,9 +336,9 @@ while true; do
sleep 1 sleep 1
if ((poll_for_new_genesis_block && --secs_to_next_genesis_poll == 0)); then if ((poll_for_new_genesis_config && --secs_to_next_genesis_poll == 0)); then
echo "Polling for new genesis block..." echo "Polling for new genesis config..."
if new_genesis_block; then if new_genesis_config; then
echo "############## New genesis detected, restarting ##############" echo "############## New genesis detected, restarting ##############"
( (
set -x set -x

View File

@ -60,16 +60,16 @@ Operate a configured testnet
--hashes-per-tick NUM_HASHES|sleep|auto --hashes-per-tick NUM_HASHES|sleep|auto
- Override the default --hashes-per-tick for the cluster - Override the default --hashes-per-tick for the cluster
--no-airdrop --no-airdrop
- If set, disables airdrops. Nodes must be funded in genesis block when airdrops are disabled. - If set, disables airdrops. Nodes must be funded in genesis config when airdrops are disabled.
--lamports NUM_LAMPORTS_TO_MINT --lamports NUM_LAMPORTS_TO_MINT
- Override the default 500000000000000000 lamports minted in genesis - Override the default 500000000000000000 lamports minted in genesis
--internal-nodes-stake-lamports NUM_LAMPORTS_PER_NODE --internal-nodes-stake-lamports NUM_LAMPORTS_PER_NODE
- Amount to stake internal nodes. - Amount to stake internal nodes.
--internal-nodes-lamports NUM_LAMPORTS_PER_NODE --internal-nodes-lamports NUM_LAMPORTS_PER_NODE
- Amount to fund internal nodes in genesis block. - Amount to fund internal nodes in genesis config.
--external-accounts-file FILE_PATH --external-accounts-file FILE_PATH
- A YML file with a list of account pubkeys and corresponding lamport balances - A YML file with a list of account pubkeys and corresponding lamport balances
in genesis block for external nodes in genesis config for external nodes
--no-snapshot-fetch --no-snapshot-fetch
- If set, disables booting validators from a snapshot - If set, disables booting validators from a snapshot
--skip-poh-verify --skip-poh-verify

View File

@ -2,7 +2,7 @@
mod bpf { mod bpf {
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_runtime::genesis_utils::{create_genesis_block, GenesisBlockInfo}; use solana_runtime::genesis_utils::{create_genesis_config, GenesisConfigInfo};
use solana_runtime::loader_utils::load_program; use solana_runtime::loader_utils::load_program;
use std::env; use std::env;
use std::fs::File; use std::fs::File;
@ -52,12 +52,12 @@ mod bpf {
let mut elf = Vec::new(); let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap(); file.read_to_end(&mut elf).unwrap();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(50); } = create_genesis_config(50);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let bank_client = BankClient::new(bank); let bank_client = BankClient::new(bank);
// Call user program // Call user program
@ -110,12 +110,12 @@ mod bpf {
let mut elf = Vec::new(); let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap(); file.read_to_end(&mut elf).unwrap();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(50); } = create_genesis_config(50);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
// Create bank with specific slot, used by solana_bpf_rust_sysvar test // Create bank with specific slot, used by solana_bpf_rust_sysvar test
let bank = let bank =
Bank::new_from_parent(&bank, &Pubkey::default(), DEFAULT_SLOTS_PER_EPOCH + 1); Bank::new_from_parent(&bank, &Pubkey::default(), DEFAULT_SLOTS_PER_EPOCH + 1);

View File

@ -190,7 +190,7 @@ mod tests {
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::account::Account; use solana_sdk::account::Account;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::hash::hash; use solana_sdk::hash::hash;
use solana_sdk::instruction::InstructionError; use solana_sdk::instruction::InstructionError;
use solana_sdk::message::Message; use solana_sdk::message::Message;
@ -198,8 +198,8 @@ mod tests {
use solana_sdk::transaction::TransactionError; use solana_sdk::transaction::TransactionError;
fn create_bank(lamports: u64) -> (Bank, Keypair) { fn create_bank(lamports: u64) -> (Bank, Keypair) {
let (genesis_block, mint_keypair) = create_genesis_block(lamports); let (genesis_config, mint_keypair) = create_genesis_config(lamports);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
(bank, mint_keypair) (bank, mint_keypair)
} }

View File

@ -9,7 +9,7 @@ use solana_config_api::{
use solana_runtime::{bank::Bank, bank_client::BankClient}; use solana_runtime::{bank::Bank, bank_client::BankClient};
use solana_sdk::{ use solana_sdk::{
client::SyncClient, client::SyncClient,
genesis_block::create_genesis_block, genesis_config::create_genesis_config,
instruction::InstructionError, instruction::InstructionError,
message::Message, message::Message,
pubkey::Pubkey, pubkey::Pubkey,
@ -43,8 +43,8 @@ impl ConfigState for MyConfig {
} }
fn create_bank(lamports: u64) -> (Bank, Keypair) { fn create_bank(lamports: u64) -> (Bank, Keypair) {
let (genesis_block, mint_keypair) = create_genesis_block(lamports); let (genesis_config, mint_keypair) = create_genesis_config(lamports);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
(bank, mint_keypair) (bank, mint_keypair)
} }

View File

@ -457,7 +457,7 @@ mod test {
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::message::Message; use solana_sdk::message::Message;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_instruction; use solana_sdk::system_instruction;
@ -541,8 +541,8 @@ mod test {
} }
fn create_bank(lamports: u64) -> (Bank, Keypair) { fn create_bank(lamports: u64) -> (Bank, Keypair) {
let (genesis_block, mint_keypair) = create_genesis_block(lamports); let (genesis_config, mint_keypair) = create_genesis_config(lamports);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
(bank, mint_keypair) (bank, mint_keypair)
} }

View File

@ -2,7 +2,7 @@ use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_runtime::loader_utils::create_invoke_instruction; use solana_runtime::loader_utils::create_invoke_instruction;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::instruction::InstructionError; use solana_sdk::instruction::InstructionError;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::KeypairUtil; use solana_sdk::signature::KeypairUtil;
@ -10,9 +10,9 @@ use solana_sdk::transaction::TransactionError;
#[test] #[test]
fn test_program_native_failure() { fn test_program_native_failure() {
let (genesis_block, alice_keypair) = create_genesis_block(50); let (genesis_config, alice_keypair) = create_genesis_config(50);
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
bank.register_native_instruction_processor("solana_failure_program", &program_id); bank.register_native_instruction_processor("solana_failure_program", &program_id);
// Call user program // Call user program

View File

@ -143,13 +143,13 @@ mod tests {
use crate::{create_genesis, upload_mint_program, upload_payment_program}; use crate::{create_genesis, upload_mint_program, upload_payment_program};
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use std::sync::Arc; use std::sync::Arc;
fn create_bank(lamports: u64) -> (Arc<Bank>, Keypair, Keypair, Pubkey, Pubkey) { fn create_bank(lamports: u64) -> (Arc<Bank>, Keypair, Keypair, Pubkey, Pubkey) {
let (genesis_block, mint_keypair) = create_genesis_block(lamports); let (genesis_config, mint_keypair) = create_genesis_config(lamports);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor( bank.add_instruction_processor(
solana_sdk::move_loader::id(), solana_sdk::move_loader::id(),
solana_move_loader_api::processor::process_instruction, solana_move_loader_api::processor::process_instruction,

View File

@ -1,6 +1,6 @@
use crate::config::create_genesis_account; use crate::config::create_genesis_account;
use crate::rewards_pools::create_rewards_accounts; use crate::rewards_pools::create_rewards_accounts;
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
pub mod config; pub mod config;
pub mod rewards_pools; pub mod rewards_pools;
@ -17,11 +17,11 @@ solana_sdk::solana_name_id!(
"Stake11111111111111111111111111111111111111" "Stake11111111111111111111111111111111111111"
); );
pub fn add_genesis_accounts(genesis_block: &mut GenesisBlock) { pub fn add_genesis_accounts(genesis_config: &mut GenesisConfig) {
for (pubkey, account) in create_rewards_accounts() { for (pubkey, account) in create_rewards_accounts() {
genesis_block.add_rewards_pool(pubkey, account); genesis_config.add_rewards_pool(pubkey, account);
} }
let (pubkey, account) = create_genesis_account(); let (pubkey, account) = create_genesis_account();
genesis_block.add_account(pubkey, account); genesis_config.add_account(pubkey, account);
} }

View File

@ -2,7 +2,7 @@ use assert_matches::assert_matches;
use solana_runtime::{ use solana_runtime::{
bank::Bank, bank::Bank,
bank_client::BankClient, bank_client::BankClient,
genesis_utils::{create_genesis_block_with_leader, GenesisBlockInfo}, genesis_utils::{create_genesis_config_with_leader, GenesisConfigInfo},
}; };
use solana_sdk::{ use solana_sdk::{
account::Account, account::Account,
@ -66,15 +66,15 @@ fn test_stake_account_delegate() {
let vote_pubkey = vote_keypair.pubkey(); let vote_pubkey = vote_keypair.pubkey();
let node_pubkey = Pubkey::new_rand(); let node_pubkey = Pubkey::new_rand();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(100_000_000_000, &Pubkey::new_rand(), 1_000_000); } = create_genesis_config_with_leader(100_000_000_000, &Pubkey::new_rand(), 1_000_000);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_stake_program::solana_stake_program!()); .push(solana_stake_program::solana_stake_program!());
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let mint_pubkey = mint_keypair.pubkey(); let mint_pubkey = mint_keypair.pubkey();
let mut bank = Arc::new(bank); let mut bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let bank_client = BankClient::new_shared(&bank);
@ -252,7 +252,7 @@ fn test_stake_account_delegate() {
let mut bank = Bank::new_from_parent( let mut bank = Bank::new_from_parent(
&bank, &bank,
&Pubkey::default(), &Pubkey::default(),
genesis_block.epoch_schedule.slots_per_epoch * 10 + bank.slot(), genesis_config.epoch_schedule.slots_per_epoch * 10 + bank.slot(),
); );
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
let bank = Arc::new(bank); let bank = Arc::new(bank);

View File

@ -5,7 +5,7 @@
use crate::storage_contract::create_rewards_pool; use crate::storage_contract::create_rewards_pool;
use rand::{thread_rng, Rng}; use rand::{thread_rng, Rng};
use solana_sdk::genesis_block::GenesisBlock; use solana_sdk::genesis_config::GenesisConfig;
use solana_sdk::hash::{hash, Hash}; use solana_sdk::hash::{hash, Hash};
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
@ -20,11 +20,11 @@ solana_sdk::solana_name_id!(ID, "StorageMiningPoo111111111111111111111111111");
// to cut down on collisions for redemptions, we make multiple accounts // to cut down on collisions for redemptions, we make multiple accounts
pub const NUM_REWARDS_POOLS: usize = 32; pub const NUM_REWARDS_POOLS: usize = 32;
pub fn add_genesis_accounts(genesis_block: &mut GenesisBlock) { pub fn add_genesis_accounts(genesis_config: &mut GenesisConfig) {
let mut pubkey = id(); let mut pubkey = id();
for _i in 0..NUM_REWARDS_POOLS { for _i in 0..NUM_REWARDS_POOLS {
genesis_block.add_rewards_pool(pubkey, create_rewards_pool()); genesis_config.add_rewards_pool(pubkey, create_rewards_pool());
pubkey = Pubkey::new(hash(pubkey.as_ref()).as_ref()); pubkey = Pubkey::new(hash(pubkey.as_ref()).as_ref());
} }
} }
@ -45,12 +45,12 @@ mod tests {
#[test] #[test]
fn test() { fn test() {
let mut genesis_block = GenesisBlock::default(); let mut genesis_config = GenesisConfig::default();
add_genesis_accounts(&mut genesis_block); add_genesis_accounts(&mut genesis_config);
for _i in 0..NUM_REWARDS_POOLS { for _i in 0..NUM_REWARDS_POOLS {
let id = random_id(); let id = random_id();
assert!(genesis_block assert!(genesis_config
.rewards_pools .rewards_pools
.iter() .iter()
.position(|x| x.0 == id) .position(|x| x.0 == id)

View File

@ -4,7 +4,7 @@ use log::*;
use solana_runtime::{ use solana_runtime::{
bank::Bank, bank::Bank,
bank_client::BankClient, bank_client::BankClient,
genesis_utils::{create_genesis_block, GenesisBlockInfo}, genesis_utils::{create_genesis_config, GenesisConfigInfo},
}; };
use solana_sdk::{ use solana_sdk::{
account::{create_keyed_accounts, Account, KeyedAccount}, account::{create_keyed_accounts, Account, KeyedAccount},
@ -61,12 +61,12 @@ fn test_account_owner() {
let archiver_storage_keypair = Keypair::new(); let archiver_storage_keypair = Keypair::new();
let archiver_storage_pubkey = archiver_storage_keypair.pubkey(); let archiver_storage_pubkey = archiver_storage_keypair.pubkey();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
let mint_pubkey = mint_keypair.pubkey(); let mint_pubkey = mint_keypair.pubkey();
bank.add_instruction_processor(id(), process_instruction); bank.add_instruction_processor(id(), process_instruction);
let bank = Arc::new(bank); let bank = Arc::new(bank);
@ -263,12 +263,12 @@ fn test_submit_mining_ok() {
#[test] #[test]
fn test_validate_mining() { fn test_validate_mining() {
solana_logger::setup(); solana_logger::setup();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(100_000_000_000); } = create_genesis_config(100_000_000_000);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_storage_program::solana_storage_program!()); .push(solana_storage_program::solana_storage_program!());
let mint_pubkey = mint_keypair.pubkey(); let mint_pubkey = mint_keypair.pubkey();
@ -284,7 +284,7 @@ fn test_validate_mining() {
let validator_storage_keypair = Keypair::new(); let validator_storage_keypair = Keypair::new();
let validator_storage_id = validator_storage_keypair.pubkey(); let validator_storage_id = validator_storage_keypair.pubkey();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let bank = Arc::new(bank); let bank = Arc::new(bank);
let bank_client = BankClient::new_shared(&bank); let bank_client = BankClient::new_shared(&bank);
@ -564,12 +564,12 @@ fn get_storage_blockhash<C: SyncClient>(client: &C, account: &Pubkey) -> Hash {
#[test] #[test]
fn test_bank_storage() { fn test_bank_storage() {
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block(1000); } = create_genesis_config(1000);
genesis_block genesis_config
.native_instruction_processors .native_instruction_processors
.push(solana_storage_program::solana_storage_program!()); .push(solana_storage_program::solana_storage_program!());
let mint_pubkey = mint_keypair.pubkey(); let mint_pubkey = mint_keypair.pubkey();
@ -578,7 +578,7 @@ fn test_bank_storage() {
let validator_keypair = Keypair::new(); let validator_keypair = Keypair::new();
let validator_pubkey = validator_keypair.pubkey(); let validator_pubkey = validator_keypair.pubkey();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
// tick the bank up until it's moved into storage segment 2 // tick the bank up until it's moved into storage segment 2
// create a new bank in storage segment 2 // create a new bank in storage segment 2
let bank = Bank::new_from_parent( let bank = Bank::new_from_parent(

View File

@ -137,7 +137,7 @@ mod tests {
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::hash::hash; use solana_sdk::hash::hash;
use solana_sdk::message::Message; use solana_sdk::message::Message;
use solana_sdk::signature::{Keypair, KeypairUtil, Signature}; use solana_sdk::signature::{Keypair, KeypairUtil, Signature};
@ -146,8 +146,8 @@ mod tests {
use std::sync::Arc; use std::sync::Arc;
fn create_bank(lamports: u64) -> (Bank, Keypair) { fn create_bank(lamports: u64) -> (Bank, Keypair) {
let (genesis_block, mint_keypair) = create_genesis_block(lamports); let (genesis_config, mint_keypair) = create_genesis_config(lamports);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor( bank.add_instruction_processor(
solana_config_api::id(), solana_config_api::id(),
solana_config_api::config_processor::process_instruction, solana_config_api::config_processor::process_instruction,

View File

@ -5,7 +5,7 @@ extern crate test;
use solana_runtime::accounts::{create_test_accounts, Accounts}; use solana_runtime::accounts::{create_test_accounts, Accounts};
use solana_runtime::bank::*; use solana_runtime::bank::*;
use solana_sdk::account::Account; use solana_sdk::account::Account;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use std::sync::Arc; use std::sync::Arc;
use test::Bencher; use test::Bencher;
@ -23,8 +23,8 @@ fn deposit_many(bank: &Bank, pubkeys: &mut Vec<Pubkey>, num: usize) {
#[bench] #[bench]
fn test_accounts_create(bencher: &mut Bencher) { fn test_accounts_create(bencher: &mut Bencher) {
let (genesis_block, _) = create_genesis_block(10_000); let (genesis_config, _) = create_genesis_config(10_000);
let bank0 = Bank::new_with_paths(&genesis_block, Some("bench_a0".to_string())); let bank0 = Bank::new_with_paths(&genesis_config, Some("bench_a0".to_string()));
bencher.iter(|| { bencher.iter(|| {
let mut pubkeys: Vec<Pubkey> = vec![]; let mut pubkeys: Vec<Pubkey> = vec![];
deposit_many(&bank0, &mut pubkeys, 1000); deposit_many(&bank0, &mut pubkeys, 1000);
@ -33,10 +33,10 @@ fn test_accounts_create(bencher: &mut Bencher) {
#[bench] #[bench]
fn test_accounts_squash(bencher: &mut Bencher) { fn test_accounts_squash(bencher: &mut Bencher) {
let (genesis_block, _) = create_genesis_block(100_000); let (genesis_config, _) = create_genesis_config(100_000);
let mut banks: Vec<Arc<Bank>> = Vec::with_capacity(10); let mut banks: Vec<Arc<Bank>> = Vec::with_capacity(10);
banks.push(Arc::new(Bank::new_with_paths( banks.push(Arc::new(Bank::new_with_paths(
&genesis_block, &genesis_config,
Some("bench_a1".to_string()), Some("bench_a1".to_string()),
))); )));
let mut pubkeys: Vec<Pubkey> = vec![]; let mut pubkeys: Vec<Pubkey> = vec![];

View File

@ -10,7 +10,7 @@ use solana_sdk::account::KeyedAccount;
use solana_sdk::client::AsyncClient; use solana_sdk::client::AsyncClient;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::clock::MAX_RECENT_BLOCKHASHES; use solana_sdk::clock::MAX_RECENT_BLOCKHASHES;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::instruction::InstructionError; use solana_sdk::instruction::InstructionError;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
@ -121,9 +121,9 @@ fn do_bench_transactions(
) { ) {
solana_logger::setup(); solana_logger::setup();
let ns_per_s = 1_000_000_000; let ns_per_s = 1_000_000_000;
let (mut genesis_block, mint_keypair) = create_genesis_block(100_000_000); let (mut genesis_config, mint_keypair) = create_genesis_config(100_000_000);
genesis_block.ticks_per_slot = 100; genesis_config.ticks_per_slot = 100;
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor(Pubkey::new(&BUILTIN_PROGRAM_ID), process_instruction); bank.add_instruction_processor(Pubkey::new(&BUILTIN_PROGRAM_ID), process_instruction);
bank.register_native_instruction_processor( bank.register_native_instruction_processor(
"solana_noop_program", "solana_noop_program",
@ -178,10 +178,10 @@ fn bench_bank_async_process_native_loader_transactions(bencher: &mut Bencher) {
#[bench] #[bench]
#[ignore] #[ignore]
fn bench_bank_update_recent_blockhashes(bencher: &mut Bencher) { fn bench_bank_update_recent_blockhashes(bencher: &mut Bencher) {
let (genesis_block, _mint_keypair) = create_genesis_block(100); let (genesis_config, _mint_keypair) = create_genesis_config(100);
let mut bank = Arc::new(Bank::new(&genesis_block)); let mut bank = Arc::new(Bank::new(&genesis_config));
goto_end_of_slot(Arc::get_mut(&mut bank).unwrap()); goto_end_of_slot(Arc::get_mut(&mut bank).unwrap());
let genesis_blockhash = bank.last_blockhash(); let genesis_hash = bank.last_blockhash();
// Prime blockhash_queue // Prime blockhash_queue
for i in 0..(MAX_RECENT_BLOCKHASHES + 1) { for i in 0..(MAX_RECENT_BLOCKHASHES + 1) {
bank = Arc::new(Bank::new_from_parent( bank = Arc::new(Bank::new_from_parent(
@ -191,8 +191,8 @@ fn bench_bank_update_recent_blockhashes(bencher: &mut Bencher) {
)); ));
goto_end_of_slot(Arc::get_mut(&mut bank).unwrap()); goto_end_of_slot(Arc::get_mut(&mut bank).unwrap());
} }
// Verify blockhash_queue is full (genesis blockhash has been kicked out) // Verify blockhash_queue is full (genesis hash has been kicked out)
assert!(!bank.check_hash_age(&genesis_blockhash, MAX_RECENT_BLOCKHASHES)); assert!(!bank.check_hash_age(&genesis_hash, MAX_RECENT_BLOCKHASHES));
bencher.iter(|| { bencher.iter(|| {
bank.update_recent_blockhashes(); bank.update_recent_blockhashes();
}); });

View File

@ -32,7 +32,7 @@ use solana_sdk::{
clock::{get_segment_from_slot, Epoch, Slot, MAX_RECENT_BLOCKHASHES}, clock::{get_segment_from_slot, Epoch, Slot, MAX_RECENT_BLOCKHASHES},
epoch_schedule::EpochSchedule, epoch_schedule::EpochSchedule,
fee_calculator::FeeCalculator, fee_calculator::FeeCalculator,
genesis_block::GenesisBlock, genesis_config::GenesisConfig,
hash::{hashv, Hash}, hash::{hashv, Hash},
inflation::Inflation, inflation::Inflation,
native_loader, native_loader,
@ -275,15 +275,15 @@ impl Default for BlockhashQueue {
} }
impl Bank { impl Bank {
pub fn new(genesis_block: &GenesisBlock) -> Self { pub fn new(genesis_config: &GenesisConfig) -> Self {
Self::new_with_paths(&genesis_block, None) Self::new_with_paths(&genesis_config, None)
} }
pub fn new_with_paths(genesis_block: &GenesisBlock, paths: Option<String>) -> Self { pub fn new_with_paths(genesis_config: &GenesisConfig, paths: Option<String>) -> Self {
let mut bank = Self::default(); let mut bank = Self::default();
bank.ancestors.insert(bank.slot(), 0); bank.ancestors.insert(bank.slot(), 0);
bank.rc.accounts = Arc::new(Accounts::new(paths)); bank.rc.accounts = Arc::new(Accounts::new(paths));
bank.process_genesis_block(genesis_block); bank.process_genesis_config(genesis_config);
// genesis needs stakes for all epochs up to the epoch implied by // genesis needs stakes for all epochs up to the epoch implied by
// slot = 0 and genesis configuration // slot = 0 and genesis configuration
{ {
@ -401,7 +401,7 @@ impl Bank {
} }
pub fn create_with_genesis( pub fn create_with_genesis(
genesis_block: &GenesisBlock, genesis_config: &GenesisConfig,
account_paths: String, account_paths: String,
status_cache_rc: &StatusCacheRc, status_cache_rc: &StatusCacheRc,
id: AppendVecId, id: AppendVecId,
@ -411,7 +411,7 @@ impl Bank {
&BankRc::new(account_paths, id, bank.slot()), &BankRc::new(account_paths, id, bank.slot()),
&status_cache_rc, &status_cache_rc,
); );
bank.process_genesis_block(genesis_block); bank.process_genesis_config(genesis_config);
bank.ancestors.insert(0, 0); bank.ancestors.insert(0, 0);
bank bank
} }
@ -651,22 +651,22 @@ impl Bank {
self.rc.parent.read().unwrap().clone() self.rc.parent.read().unwrap().clone()
} }
fn process_genesis_block(&mut self, genesis_block: &GenesisBlock) { fn process_genesis_config(&mut self, genesis_config: &GenesisConfig) {
// Bootstrap leader collects fees until `new_from_parent` is called. // Bootstrap leader collects fees until `new_from_parent` is called.
self.fee_calculator = genesis_block.fee_calculator.clone(); self.fee_calculator = genesis_config.fee_calculator.clone();
self.update_fees(); self.update_fees();
for (pubkey, account) in genesis_block.accounts.iter() { for (pubkey, account) in genesis_config.accounts.iter() {
if self.get_account(&pubkey).is_some() { if self.get_account(&pubkey).is_some() {
panic!("{} repeated in genesis block", pubkey); panic!("{} repeated in genesis config", pubkey);
} }
self.store_account(pubkey, account); self.store_account(pubkey, account);
self.capitalization self.capitalization
.fetch_add(account.lamports, Ordering::Relaxed); .fetch_add(account.lamports, Ordering::Relaxed);
} }
for (pubkey, account) in genesis_block.rewards_pools.iter() { for (pubkey, account) in genesis_config.rewards_pools.iter() {
if self.get_account(&pubkey).is_some() { if self.get_account(&pubkey).is_some() {
panic!("{} repeated in genesis block", pubkey); panic!("{} repeated in genesis config", pubkey);
} }
self.store_account(pubkey, account); self.store_account(pubkey, account);
} }
@ -682,32 +682,32 @@ impl Bank {
self.blockhash_queue self.blockhash_queue
.write() .write()
.unwrap() .unwrap()
.genesis_hash(&genesis_block.hash(), &self.fee_calculator); .genesis_hash(&genesis_config.hash(), &self.fee_calculator);
self.hashes_per_tick = genesis_block.poh_config.hashes_per_tick; self.hashes_per_tick = genesis_config.poh_config.hashes_per_tick;
self.ticks_per_slot = genesis_block.ticks_per_slot; self.ticks_per_slot = genesis_config.ticks_per_slot;
self.slots_per_segment = genesis_block.slots_per_segment; self.slots_per_segment = genesis_config.slots_per_segment;
self.max_tick_height = (self.slot + 1) * self.ticks_per_slot; self.max_tick_height = (self.slot + 1) * self.ticks_per_slot;
// ticks/year = seconds/year ... // ticks/year = seconds/year ...
self.slots_per_year = SECONDS_PER_YEAR self.slots_per_year = SECONDS_PER_YEAR
// * (ns/s)/(ns/tick) / ticks/slot = 1/s/1/tick = ticks/s // * (ns/s)/(ns/tick) / ticks/slot = 1/s/1/tick = ticks/s
*(1_000_000_000.0 / duration_as_ns(&genesis_block.poh_config.target_tick_duration) as f64) *(1_000_000_000.0 / duration_as_ns(&genesis_config.poh_config.target_tick_duration) as f64)
// / ticks/slot // / ticks/slot
/ self.ticks_per_slot as f64; / self.ticks_per_slot as f64;
self.epoch_schedule = genesis_block.epoch_schedule; self.epoch_schedule = genesis_config.epoch_schedule;
self.inflation = Arc::new(RwLock::new(genesis_block.inflation)); self.inflation = Arc::new(RwLock::new(genesis_config.inflation));
self.rent_collector = RentCollector::new( self.rent_collector = RentCollector::new(
self.epoch, self.epoch,
&self.epoch_schedule, &self.epoch_schedule,
self.slots_per_year, self.slots_per_year,
&genesis_block.rent, &genesis_config.rent,
); );
// Add additional native programs specified in the genesis block // Add additional native programs specified in the genesis config
for (name, program_id) in &genesis_block.native_instruction_processors { for (name, program_id) in &genesis_config.native_instruction_processors {
self.register_native_instruction_processor(name, program_id); self.register_native_instruction_processor(name, program_id);
} }
} }
@ -1628,7 +1628,7 @@ mod tests {
accounts_db::get_temp_accounts_paths, accounts_db::get_temp_accounts_paths,
accounts_db::tests::copy_append_vecs, accounts_db::tests::copy_append_vecs,
genesis_utils::{ genesis_utils::{
create_genesis_block_with_leader, GenesisBlockInfo, BOOTSTRAP_LEADER_LAMPORTS, create_genesis_config_with_leader, GenesisConfigInfo, BOOTSTRAP_LEADER_LAMPORTS,
}, },
status_cache::MAX_CACHE_ENTRIES, status_cache::MAX_CACHE_ENTRIES,
}; };
@ -1637,7 +1637,7 @@ mod tests {
account::KeyedAccount, account::KeyedAccount,
clock::DEFAULT_TICKS_PER_SLOT, clock::DEFAULT_TICKS_PER_SLOT,
epoch_schedule::MINIMUM_SLOTS_PER_EPOCH, epoch_schedule::MINIMUM_SLOTS_PER_EPOCH,
genesis_block::create_genesis_block, genesis_config::create_genesis_config,
instruction::InstructionError, instruction::InstructionError,
message::{Message, MessageHeader}, message::{Message, MessageHeader},
poh_config::PohConfig, poh_config::PohConfig,
@ -1659,23 +1659,23 @@ mod tests {
let dummy_leader_pubkey = Pubkey::new_rand(); let dummy_leader_pubkey = Pubkey::new_rand();
let dummy_leader_lamports = BOOTSTRAP_LEADER_LAMPORTS; let dummy_leader_lamports = BOOTSTRAP_LEADER_LAMPORTS;
let mint_lamports = 10_000; let mint_lamports = 10_000;
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
voting_keypair, voting_keypair,
.. ..
} = create_genesis_block_with_leader( } = create_genesis_config_with_leader(
mint_lamports, mint_lamports,
&dummy_leader_pubkey, &dummy_leader_pubkey,
dummy_leader_lamports, dummy_leader_lamports,
); );
genesis_block.rent = Rent { genesis_config.rent = Rent {
lamports_per_byte_year: 5, lamports_per_byte_year: 5,
exemption_threshold: 1.2, exemption_threshold: 1.2,
burn_percent: 5, burn_percent: 5,
}; };
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
assert_eq!(bank.get_balance(&mint_keypair.pubkey()), mint_lamports); assert_eq!(bank.get_balance(&mint_keypair.pubkey()), mint_lamports);
assert_eq!( assert_eq!(
bank.get_balance(&voting_keypair.pubkey()), bank.get_balance(&voting_keypair.pubkey()),
@ -1692,8 +1692,8 @@ mod tests {
#[test] #[test]
fn test_bank_block_height() { fn test_bank_block_height() {
let (genesis_block, _mint_keypair) = create_genesis_block(1); let (genesis_config, _mint_keypair) = create_genesis_config(1);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
assert_eq!(bank0.block_height(), 0); assert_eq!(bank0.block_height(), 0);
let bank1 = Arc::new(new_from_parent(&bank0)); let bank1 = Arc::new(new_from_parent(&bank0));
assert_eq!(bank1.block_height(), 1); assert_eq!(bank1.block_height(), 1);
@ -1701,12 +1701,12 @@ mod tests {
#[test] #[test]
fn test_bank_capitalization() { fn test_bank_capitalization() {
let bank = Arc::new(Bank::new(&GenesisBlock { let bank = Arc::new(Bank::new(&GenesisConfig {
accounts: (0..42) accounts: (0..42)
.into_iter() .into_iter()
.map(|_| (Pubkey::new_rand(), Account::new(42, 0, &Pubkey::default()))) .map(|_| (Pubkey::new_rand(), Account::new(42, 0, &Pubkey::default())))
.collect(), .collect(),
..GenesisBlock::default() ..GenesisConfig::default()
})); }));
assert_eq!(bank.capitalization(), 42 * 42); assert_eq!(bank.capitalization(), 42 * 42);
let bank1 = Bank::new_from_parent(&bank, &Pubkey::default(), 1); let bank1 = Bank::new_from_parent(&bank, &Pubkey::default(), 1);
@ -1716,12 +1716,12 @@ mod tests {
#[test] #[test]
fn test_bank_inflation() { fn test_bank_inflation() {
let key = Pubkey::default(); let key = Pubkey::default();
let bank = Arc::new(Bank::new(&GenesisBlock { let bank = Arc::new(Bank::new(&GenesisConfig {
accounts: (0..42) accounts: (0..42)
.into_iter() .into_iter()
.map(|_| (Pubkey::new_rand(), Account::new(42, 0, &key))) .map(|_| (Pubkey::new_rand(), Account::new(42, 0, &key)))
.collect(), .collect(),
..GenesisBlock::default() ..GenesisConfig::default()
})); }));
assert_eq!(bank.capitalization(), 42 * 42); assert_eq!(bank.capitalization(), 42 * 42);
@ -1745,7 +1745,7 @@ mod tests {
#[test] #[test]
fn test_bank_update_rewards() { fn test_bank_update_rewards() {
// create a bank that ticks really slowly... // create a bank that ticks really slowly...
let bank = Arc::new(Bank::new(&GenesisBlock { let bank = Arc::new(Bank::new(&GenesisConfig {
accounts: (0..42) accounts: (0..42)
.into_iter() .into_iter()
.map(|_| { .map(|_| {
@ -1766,7 +1766,7 @@ mod tests {
target_tick_count: None, target_tick_count: None,
}, },
..GenesisBlock::default() ..GenesisConfig::default()
})); }));
assert_eq!(bank.capitalization(), 42 * 1_000_000_000); assert_eq!(bank.capitalization(), 42 * 1_000_000_000);
@ -1827,8 +1827,8 @@ mod tests {
#[test] #[test]
fn test_purge_empty_accounts() { fn test_purge_empty_accounts() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(500_000); let (genesis_config, mint_keypair) = create_genesis_config(500_000);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let mut bank = parent; let mut bank = parent;
for _ in 0..10 { for _ in 0..10 {
let blockhash = bank.last_blockhash(); let blockhash = bank.last_blockhash();
@ -1886,10 +1886,10 @@ mod tests {
#[test] #[test]
fn test_two_payments_to_one_party() { fn test_two_payments_to_one_party() {
let (genesis_block, mint_keypair) = create_genesis_block(10_000); let (genesis_config, mint_keypair) = create_genesis_config(10_000);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
assert_eq!(bank.last_blockhash(), genesis_block.hash()); assert_eq!(bank.last_blockhash(), genesis_config.hash());
bank.transfer(1_000, &mint_keypair, &pubkey).unwrap(); bank.transfer(1_000, &mint_keypair, &pubkey).unwrap();
assert_eq!(bank.get_balance(&pubkey), 1_000); assert_eq!(bank.get_balance(&pubkey), 1_000);
@ -1901,14 +1901,14 @@ mod tests {
#[test] #[test]
fn test_one_source_two_tx_one_batch() { fn test_one_source_two_tx_one_batch() {
let (genesis_block, mint_keypair) = create_genesis_block(1); let (genesis_config, mint_keypair) = create_genesis_config(1);
let key1 = Pubkey::new_rand(); let key1 = Pubkey::new_rand();
let key2 = Pubkey::new_rand(); let key2 = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
assert_eq!(bank.last_blockhash(), genesis_block.hash()); assert_eq!(bank.last_blockhash(), genesis_config.hash());
let t1 = system_transaction::transfer(&mint_keypair, &key1, 1, genesis_block.hash()); let t1 = system_transaction::transfer(&mint_keypair, &key1, 1, genesis_config.hash());
let t2 = system_transaction::transfer(&mint_keypair, &key2, 1, genesis_block.hash()); let t2 = system_transaction::transfer(&mint_keypair, &key2, 1, genesis_config.hash());
let res = bank.process_transactions(&vec![t1.clone(), t2.clone()]); let res = bank.process_transactions(&vec![t1.clone(), t2.clone()]);
assert_eq!(res.len(), 2); assert_eq!(res.len(), 2);
@ -1925,16 +1925,16 @@ mod tests {
#[test] #[test]
fn test_one_tx_two_out_atomic_fail() { fn test_one_tx_two_out_atomic_fail() {
let (genesis_block, mint_keypair) = create_genesis_block(1); let (genesis_config, mint_keypair) = create_genesis_config(1);
let key1 = Pubkey::new_rand(); let key1 = Pubkey::new_rand();
let key2 = Pubkey::new_rand(); let key2 = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let instructions = let instructions =
system_instruction::transfer_many(&mint_keypair.pubkey(), &[(key1, 1), (key2, 1)]); system_instruction::transfer_many(&mint_keypair.pubkey(), &[(key1, 1), (key2, 1)]);
let tx = Transaction::new_signed_instructions( let tx = Transaction::new_signed_instructions(
&[&mint_keypair], &[&mint_keypair],
instructions, instructions,
genesis_block.hash(), genesis_config.hash(),
); );
assert_eq!( assert_eq!(
bank.process_transaction(&tx).unwrap_err(), bank.process_transaction(&tx).unwrap_err(),
@ -1950,16 +1950,16 @@ mod tests {
#[test] #[test]
fn test_one_tx_two_out_atomic_pass() { fn test_one_tx_two_out_atomic_pass() {
let (genesis_block, mint_keypair) = create_genesis_block(2); let (genesis_config, mint_keypair) = create_genesis_config(2);
let key1 = Pubkey::new_rand(); let key1 = Pubkey::new_rand();
let key2 = Pubkey::new_rand(); let key2 = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let instructions = let instructions =
system_instruction::transfer_many(&mint_keypair.pubkey(), &[(key1, 1), (key2, 1)]); system_instruction::transfer_many(&mint_keypair.pubkey(), &[(key1, 1), (key2, 1)]);
let tx = Transaction::new_signed_instructions( let tx = Transaction::new_signed_instructions(
&[&mint_keypair], &[&mint_keypair],
instructions, instructions,
genesis_block.hash(), genesis_config.hash(),
); );
bank.process_transaction(&tx).unwrap(); bank.process_transaction(&tx).unwrap();
assert_eq!(bank.get_balance(&mint_keypair.pubkey()), 0); assert_eq!(bank.get_balance(&mint_keypair.pubkey()), 0);
@ -1970,15 +1970,15 @@ mod tests {
// This test demonstrates that fees are paid even when a program fails. // This test demonstrates that fees are paid even when a program fails.
#[test] #[test]
fn test_detect_failed_duplicate_transactions() { fn test_detect_failed_duplicate_transactions() {
let (mut genesis_block, mint_keypair) = create_genesis_block(2); let (mut genesis_config, mint_keypair) = create_genesis_config(2);
genesis_block.fee_calculator.lamports_per_signature = 1; genesis_config.fee_calculator.lamports_per_signature = 1;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let dest = Keypair::new(); let dest = Keypair::new();
// source with 0 program context // source with 0 program context
let tx = let tx =
system_transaction::transfer(&mint_keypair, &dest.pubkey(), 2, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &dest.pubkey(), 2, genesis_config.hash());
let signature = tx.signatures[0]; let signature = tx.signatures[0];
assert!(!bank.has_signature(&signature)); assert!(!bank.has_signature(&signature));
@ -1999,8 +1999,8 @@ mod tests {
#[test] #[test]
fn test_account_not_found() { fn test_account_not_found() {
let (genesis_block, mint_keypair) = create_genesis_block(0); let (genesis_config, mint_keypair) = create_genesis_config(0);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let keypair = Keypair::new(); let keypair = Keypair::new();
assert_eq!( assert_eq!(
bank.transfer(1, &keypair, &mint_keypair.pubkey()), bank.transfer(1, &keypair, &mint_keypair.pubkey()),
@ -2011,8 +2011,8 @@ mod tests {
#[test] #[test]
fn test_insufficient_funds() { fn test_insufficient_funds() {
let (genesis_block, mint_keypair) = create_genesis_block(11_000); let (genesis_config, mint_keypair) = create_genesis_config(11_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
bank.transfer(1_000, &mint_keypair, &pubkey).unwrap(); bank.transfer(1_000, &mint_keypair, &pubkey).unwrap();
assert_eq!(bank.transaction_count(), 1); assert_eq!(bank.transaction_count(), 1);
@ -2034,8 +2034,8 @@ mod tests {
#[test] #[test]
fn test_transfer_to_newb() { fn test_transfer_to_newb() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(10_000); let (genesis_config, mint_keypair) = create_genesis_config(10_000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
bank.transfer(500, &mint_keypair, &pubkey).unwrap(); bank.transfer(500, &mint_keypair, &pubkey).unwrap();
assert_eq!(bank.get_balance(&pubkey), 500); assert_eq!(bank.get_balance(&pubkey), 500);
@ -2043,8 +2043,8 @@ mod tests {
#[test] #[test]
fn test_bank_deposit() { fn test_bank_deposit() {
let (genesis_block, _mint_keypair) = create_genesis_block(100); let (genesis_config, _mint_keypair) = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
// Test new account // Test new account
let key = Keypair::new(); let key = Keypair::new();
@ -2058,8 +2058,8 @@ mod tests {
#[test] #[test]
fn test_bank_withdraw() { fn test_bank_withdraw() {
let (genesis_block, _mint_keypair) = create_genesis_block(100); let (genesis_config, _mint_keypair) = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
// Test no account // Test no account
let key = Keypair::new(); let key = Keypair::new();
@ -2087,18 +2087,18 @@ mod tests {
let arbitrary_transfer_amount = 42; let arbitrary_transfer_amount = 42;
let mint = arbitrary_transfer_amount * 100; let mint = arbitrary_transfer_amount * 100;
let leader = Pubkey::new_rand(); let leader = Pubkey::new_rand();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(mint, &leader, 3); } = create_genesis_config_with_leader(mint, &leader, 3);
genesis_block.fee_calculator.lamports_per_signature = 4; // something divisible by 2 genesis_config.fee_calculator.lamports_per_signature = 4; // something divisible by 2
let expected_fee_paid = genesis_block.fee_calculator.lamports_per_signature; let expected_fee_paid = genesis_config.fee_calculator.lamports_per_signature;
let (expected_fee_collected, expected_fee_burned) = let (expected_fee_collected, expected_fee_burned) =
genesis_block.fee_calculator.burn(expected_fee_paid); genesis_config.fee_calculator.burn(expected_fee_paid);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
let capitalization = bank.capitalization(); let capitalization = bank.capitalization();
@ -2158,15 +2158,15 @@ mod tests {
//solana_logger::setup(); //solana_logger::setup();
let leader = Pubkey::new_rand(); let leader = Pubkey::new_rand();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(1_000_000, &leader, 3); } = create_genesis_config_with_leader(1_000_000, &leader, 3);
genesis_block.fee_calculator.target_lamports_per_signature = 1000; genesis_config.fee_calculator.target_lamports_per_signature = 1000;
genesis_block.fee_calculator.target_signatures_per_slot = 1; genesis_config.fee_calculator.target_signatures_per_slot = 1;
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
goto_end_of_slot(&mut bank); goto_end_of_slot(&mut bank);
let (cheap_blockhash, cheap_fee_calculator) = bank.last_blockhash_with_fee_calculator(); let (cheap_blockhash, cheap_fee_calculator) = bank.last_blockhash_with_fee_calculator();
assert_eq!(cheap_fee_calculator.lamports_per_signature, 0); assert_eq!(cheap_fee_calculator.lamports_per_signature, 0);
@ -2208,19 +2208,19 @@ mod tests {
#[test] #[test]
fn test_filter_program_errors_and_collect_fee() { fn test_filter_program_errors_and_collect_fee() {
let leader = Pubkey::new_rand(); let leader = Pubkey::new_rand();
let GenesisBlockInfo { let GenesisConfigInfo {
mut genesis_block, mut genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(100, &leader, 3); } = create_genesis_config_with_leader(100, &leader, 3);
genesis_block.fee_calculator.lamports_per_signature = 2; genesis_config.fee_calculator.lamports_per_signature = 2;
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let key = Keypair::new(); let key = Keypair::new();
let tx1 = let tx1 =
system_transaction::transfer(&mint_keypair, &key.pubkey(), 2, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key.pubkey(), 2, genesis_config.hash());
let tx2 = let tx2 =
system_transaction::transfer(&mint_keypair, &key.pubkey(), 5, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key.pubkey(), 5, genesis_config.hash());
let results = vec![ let results = vec![
Ok(()), Ok(()),
@ -2247,13 +2247,21 @@ mod tests {
#[test] #[test]
fn test_debits_before_credits() { fn test_debits_before_credits() {
let (genesis_block, mint_keypair) = create_genesis_block(2); let (genesis_config, mint_keypair) = create_genesis_config(2);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let keypair = Keypair::new(); let keypair = Keypair::new();
let tx0 = let tx0 = system_transaction::transfer(
system_transaction::transfer(&mint_keypair, &keypair.pubkey(), 2, genesis_block.hash()); &mint_keypair,
let tx1 = &keypair.pubkey(),
system_transaction::transfer(&keypair, &mint_keypair.pubkey(), 1, genesis_block.hash()); 2,
genesis_config.hash(),
);
let tx1 = system_transaction::transfer(
&keypair,
&mint_keypair.pubkey(),
1,
genesis_config.hash(),
);
let txs = vec![tx0, tx1]; let txs = vec![tx0, tx1];
let results = bank.process_transactions(&txs); let results = bank.process_transactions(&txs);
assert!(results[1].is_err()); assert!(results[1].is_err());
@ -2264,12 +2272,12 @@ mod tests {
#[test] #[test]
fn test_readonly_accounts() { fn test_readonly_accounts() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(500, &Pubkey::new_rand(), 0); } = create_genesis_config_with_leader(500, &Pubkey::new_rand(), 0);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let vote_pubkey0 = Pubkey::new_rand(); let vote_pubkey0 = Pubkey::new_rand();
let vote_pubkey1 = Pubkey::new_rand(); let vote_pubkey1 = Pubkey::new_rand();
@ -2340,13 +2348,13 @@ mod tests {
#[test] #[test]
fn test_interleaving_locks() { fn test_interleaving_locks() {
let (genesis_block, mint_keypair) = create_genesis_block(3); let (genesis_config, mint_keypair) = create_genesis_config(3);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let alice = Keypair::new(); let alice = Keypair::new();
let bob = Keypair::new(); let bob = Keypair::new();
let tx1 = let tx1 =
system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &alice.pubkey(), 1, genesis_config.hash());
let pay_alice = vec![tx1]; let pay_alice = vec![tx1];
let lock_result = bank.prepare_batch(&pay_alice, None); let lock_result = bank.prepare_batch(&pay_alice, None);
@ -2373,8 +2381,8 @@ mod tests {
#[test] #[test]
fn test_readonly_relaxed_locks() { fn test_readonly_relaxed_locks() {
let (genesis_block, _) = create_genesis_block(3); let (genesis_config, _) = create_genesis_config(3);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let key0 = Keypair::new(); let key0 = Keypair::new();
let key1 = Keypair::new(); let key1 = Keypair::new();
let key2 = Keypair::new(); let key2 = Keypair::new();
@ -2390,7 +2398,7 @@ mod tests {
recent_blockhash: Hash::default(), recent_blockhash: Hash::default(),
instructions: vec![], instructions: vec![],
}; };
let tx = Transaction::new(&[&key0], message, genesis_block.hash()); let tx = Transaction::new(&[&key0], message, genesis_config.hash());
let txs = vec![tx]; let txs = vec![tx];
let batch0 = bank.prepare_batch(&txs, None); let batch0 = bank.prepare_batch(&txs, None);
@ -2408,7 +2416,7 @@ mod tests {
recent_blockhash: Hash::default(), recent_blockhash: Hash::default(),
instructions: vec![], instructions: vec![],
}; };
let tx = Transaction::new(&[&key1], message, genesis_block.hash()); let tx = Transaction::new(&[&key1], message, genesis_config.hash());
let txs = vec![tx]; let txs = vec![tx];
let batch1 = bank.prepare_batch(&txs, None); let batch1 = bank.prepare_batch(&txs, None);
@ -2425,7 +2433,7 @@ mod tests {
recent_blockhash: Hash::default(), recent_blockhash: Hash::default(),
instructions: vec![], instructions: vec![],
}; };
let tx = Transaction::new(&[&key2], message, genesis_block.hash()); let tx = Transaction::new(&[&key2], message, genesis_config.hash());
let txs = vec![tx]; let txs = vec![tx];
let batch2 = bank.prepare_batch(&txs, None); let batch2 = bank.prepare_batch(&txs, None);
@ -2434,12 +2442,16 @@ mod tests {
#[test] #[test]
fn test_bank_invalid_account_index() { fn test_bank_invalid_account_index() {
let (genesis_block, mint_keypair) = create_genesis_block(1); let (genesis_config, mint_keypair) = create_genesis_config(1);
let keypair = Keypair::new(); let keypair = Keypair::new();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let tx = let tx = system_transaction::transfer(
system_transaction::transfer(&mint_keypair, &keypair.pubkey(), 1, genesis_block.hash()); &mint_keypair,
&keypair.pubkey(),
1,
genesis_config.hash(),
);
let mut tx_invalid_program_index = tx.clone(); let mut tx_invalid_program_index = tx.clone();
tx_invalid_program_index.message.instructions[0].program_id_index = 42; tx_invalid_program_index.message.instructions[0].program_id_index = 42;
@ -2458,13 +2470,13 @@ mod tests {
#[test] #[test]
fn test_bank_pay_to_self() { fn test_bank_pay_to_self() {
let (genesis_block, mint_keypair) = create_genesis_block(1); let (genesis_config, mint_keypair) = create_genesis_config(1);
let key1 = Keypair::new(); let key1 = Keypair::new();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
bank.transfer(1, &mint_keypair, &key1.pubkey()).unwrap(); bank.transfer(1, &mint_keypair, &key1.pubkey()).unwrap();
assert_eq!(bank.get_balance(&key1.pubkey()), 1); assert_eq!(bank.get_balance(&key1.pubkey()), 1);
let tx = system_transaction::transfer(&key1, &key1.pubkey(), 1, genesis_block.hash()); let tx = system_transaction::transfer(&key1, &key1.pubkey(), 1, genesis_config.hash());
let _res = bank.process_transaction(&tx); let _res = bank.process_transaction(&tx);
assert_eq!(bank.get_balance(&key1.pubkey()), 1); assert_eq!(bank.get_balance(&key1.pubkey()), 1);
@ -2484,8 +2496,8 @@ mod tests {
/// Verify that the parent's vector is computed correctly /// Verify that the parent's vector is computed correctly
#[test] #[test]
fn test_bank_parents() { fn test_bank_parents() {
let (genesis_block, _) = create_genesis_block(1); let (genesis_config, _) = create_genesis_config(1);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let bank = new_from_parent(&parent); let bank = new_from_parent(&parent);
assert!(Arc::ptr_eq(&bank.parents()[0], &parent)); assert!(Arc::ptr_eq(&bank.parents()[0], &parent));
@ -2494,12 +2506,12 @@ mod tests {
/// Verifies that last ids and status cache are correctly referenced from parent /// Verifies that last ids and status cache are correctly referenced from parent
#[test] #[test]
fn test_bank_parent_duplicate_signature() { fn test_bank_parent_duplicate_signature() {
let (genesis_block, mint_keypair) = create_genesis_block(2); let (genesis_config, mint_keypair) = create_genesis_config(2);
let key1 = Keypair::new(); let key1 = Keypair::new();
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let tx = let tx =
system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_config.hash());
assert_eq!(parent.process_transaction(&tx), Ok(())); assert_eq!(parent.process_transaction(&tx), Ok(()));
let bank = new_from_parent(&parent); let bank = new_from_parent(&parent);
assert_eq!( assert_eq!(
@ -2511,25 +2523,25 @@ mod tests {
/// Verifies that last ids and accounts are correctly referenced from parent /// Verifies that last ids and accounts are correctly referenced from parent
#[test] #[test]
fn test_bank_parent_account_spend() { fn test_bank_parent_account_spend() {
let (genesis_block, mint_keypair) = create_genesis_block(2); let (genesis_config, mint_keypair) = create_genesis_config(2);
let key1 = Keypair::new(); let key1 = Keypair::new();
let key2 = Keypair::new(); let key2 = Keypair::new();
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let tx = let tx =
system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_config.hash());
assert_eq!(parent.process_transaction(&tx), Ok(())); assert_eq!(parent.process_transaction(&tx), Ok(()));
let bank = new_from_parent(&parent); let bank = new_from_parent(&parent);
let tx = system_transaction::transfer(&key1, &key2.pubkey(), 1, genesis_block.hash()); let tx = system_transaction::transfer(&key1, &key2.pubkey(), 1, genesis_config.hash());
assert_eq!(bank.process_transaction(&tx), Ok(())); assert_eq!(bank.process_transaction(&tx), Ok(()));
assert_eq!(parent.get_signature_status(&tx.signatures[0]), None); assert_eq!(parent.get_signature_status(&tx.signatures[0]), None);
} }
#[test] #[test]
fn test_bank_hash_internal_state() { fn test_bank_hash_internal_state() {
let (genesis_block, mint_keypair) = create_genesis_block(2_000); let (genesis_config, mint_keypair) = create_genesis_config(2_000);
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let bank1 = Bank::new(&genesis_block); let bank1 = Bank::new(&genesis_config);
let initial_state = bank0.hash_internal_state(); let initial_state = bank0.hash_internal_state();
assert_eq!(bank1.hash_internal_state(), initial_state); assert_eq!(bank1.hash_internal_state(), initial_state);
@ -2552,8 +2564,8 @@ mod tests {
#[test] #[test]
fn test_bank_hash_internal_state_verify() { fn test_bank_hash_internal_state_verify() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(2_000); let (genesis_config, mint_keypair) = create_genesis_config(2_000);
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
info!("transfer 0 {} mint: {}", pubkey, mint_keypair.pubkey()); info!("transfer 0 {} mint: {}", pubkey, mint_keypair.pubkey());
@ -2574,8 +2586,8 @@ mod tests {
#[test] #[test]
fn test_bank_hash_internal_state_same_account_different_fork() { fn test_bank_hash_internal_state_same_account_different_fork() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(2_000); let (genesis_config, mint_keypair) = create_genesis_config(2_000);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let initial_state = bank0.hash_internal_state(); let initial_state = bank0.hash_internal_state();
let bank1 = Bank::new_from_parent(&bank0.clone(), &Pubkey::default(), 1); let bank1 = Bank::new_from_parent(&bank0.clone(), &Pubkey::default(), 1);
assert_eq!(bank1.hash_internal_state(), initial_state); assert_eq!(bank1.hash_internal_state(), initial_state);
@ -2595,8 +2607,8 @@ mod tests {
#[test] #[test]
fn test_hash_internal_state_genesis() { fn test_hash_internal_state_genesis() {
let bank0 = Bank::new(&create_genesis_block(10).0); let bank0 = Bank::new(&create_genesis_config(10).0);
let bank1 = Bank::new(&create_genesis_block(20).0); let bank1 = Bank::new(&create_genesis_config(20).0);
assert_ne!(bank0.hash_internal_state(), bank1.hash_internal_state()); assert_ne!(bank0.hash_internal_state(), bank1.hash_internal_state());
} }
@ -2604,9 +2616,9 @@ mod tests {
// of hash_internal_state // of hash_internal_state
#[test] #[test]
fn test_hash_internal_state_order() { fn test_hash_internal_state_order() {
let (genesis_block, mint_keypair) = create_genesis_block(100); let (genesis_config, mint_keypair) = create_genesis_config(100);
let bank0 = Bank::new(&genesis_block); let bank0 = Bank::new(&genesis_config);
let bank1 = Bank::new(&genesis_block); let bank1 = Bank::new(&genesis_config);
assert_eq!(bank0.hash_internal_state(), bank1.hash_internal_state()); assert_eq!(bank0.hash_internal_state(), bank1.hash_internal_state());
let key0 = Pubkey::new_rand(); let key0 = Pubkey::new_rand();
let key1 = Pubkey::new_rand(); let key1 = Pubkey::new_rand();
@ -2622,8 +2634,8 @@ mod tests {
#[test] #[test]
fn test_hash_internal_state_error() { fn test_hash_internal_state_error() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(100); let (genesis_config, mint_keypair) = create_genesis_config(100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let key0 = Pubkey::new_rand(); let key0 = Pubkey::new_rand();
bank.transfer(10, &mint_keypair, &key0).unwrap(); bank.transfer(10, &mint_keypair, &key0).unwrap();
let orig = bank.hash_internal_state(); let orig = bank.hash_internal_state();
@ -2641,7 +2653,7 @@ mod tests {
#[test] #[test]
fn test_bank_hash_internal_state_squash() { fn test_bank_hash_internal_state_squash() {
let collector_id = Pubkey::default(); let collector_id = Pubkey::default();
let bank0 = Arc::new(Bank::new(&create_genesis_block(10).0)); let bank0 = Arc::new(Bank::new(&create_genesis_config(10).0));
let hash0 = bank0.hash_internal_state(); let hash0 = bank0.hash_internal_state();
// save hash0 because new_from_parent // save hash0 because new_from_parent
// updates sysvar entries // updates sysvar entries
@ -2664,13 +2676,13 @@ mod tests {
#[test] #[test]
fn test_bank_squash() { fn test_bank_squash() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(2); let (genesis_config, mint_keypair) = create_genesis_config(2);
let key1 = Keypair::new(); let key1 = Keypair::new();
let key2 = Keypair::new(); let key2 = Keypair::new();
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let tx_transfer_mint_to_1 = let tx_transfer_mint_to_1 =
system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_config.hash());
trace!("parent process tx "); trace!("parent process tx ");
assert_eq!(parent.process_transaction(&tx_transfer_mint_to_1), Ok(())); assert_eq!(parent.process_transaction(&tx_transfer_mint_to_1), Ok(()));
trace!("done parent process tx "); trace!("done parent process tx ");
@ -2690,7 +2702,7 @@ mod tests {
assert_eq!(bank.transaction_count(), parent.transaction_count()); assert_eq!(bank.transaction_count(), parent.transaction_count());
let tx_transfer_1_to_2 = let tx_transfer_1_to_2 =
system_transaction::transfer(&key1, &key2.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&key1, &key2.pubkey(), 1, genesis_config.hash());
assert_eq!(bank.process_transaction(&tx_transfer_1_to_2), Ok(())); assert_eq!(bank.process_transaction(&tx_transfer_1_to_2), Ok(()));
assert_eq!(bank.transaction_count(), 2); assert_eq!(bank.transaction_count(), 2);
assert_eq!(parent.transaction_count(), 1); assert_eq!(parent.transaction_count(), 1);
@ -2725,8 +2737,8 @@ mod tests {
#[test] #[test]
fn test_bank_get_account_in_parent_after_squash() { fn test_bank_get_account_in_parent_after_squash() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let key1 = Keypair::new(); let key1 = Keypair::new();
@ -2740,8 +2752,8 @@ mod tests {
#[test] #[test]
fn test_bank_get_account_in_parent_after_squash2() { fn test_bank_get_account_in_parent_after_squash2() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let key1 = Keypair::new(); let key1 = Keypair::new();
@ -2787,18 +2799,18 @@ mod tests {
fn test_bank_epoch_vote_accounts() { fn test_bank_epoch_vote_accounts() {
let leader_pubkey = Pubkey::new_rand(); let leader_pubkey = Pubkey::new_rand();
let leader_lamports = 3; let leader_lamports = 3;
let mut genesis_block = let mut genesis_config =
create_genesis_block_with_leader(5, &leader_pubkey, leader_lamports).genesis_block; create_genesis_config_with_leader(5, &leader_pubkey, leader_lamports).genesis_config;
// set this up weird, forces future generation, odd mod(), etc. // set this up weird, forces future generation, odd mod(), etc.
// this says: "vote_accounts for epoch X should be generated at slot index 3 in epoch X-2... // this says: "vote_accounts for epoch X should be generated at slot index 3 in epoch X-2...
const SLOTS_PER_EPOCH: u64 = MINIMUM_SLOTS_PER_EPOCH as u64; const SLOTS_PER_EPOCH: u64 = MINIMUM_SLOTS_PER_EPOCH as u64;
const LEADER_SCHEDULE_SLOT_OFFSET: u64 = SLOTS_PER_EPOCH * 3 - 3; const LEADER_SCHEDULE_SLOT_OFFSET: u64 = SLOTS_PER_EPOCH * 3 - 3;
// no warmup allows me to do the normal division stuff below // no warmup allows me to do the normal division stuff below
genesis_block.epoch_schedule = genesis_config.epoch_schedule =
EpochSchedule::custom(SLOTS_PER_EPOCH, LEADER_SCHEDULE_SLOT_OFFSET, false); EpochSchedule::custom(SLOTS_PER_EPOCH, LEADER_SCHEDULE_SLOT_OFFSET, false);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let mut leader_vote_stake: Vec<_> = parent let mut leader_vote_stake: Vec<_> = parent
.epoch_vote_accounts(0) .epoch_vote_accounts(0)
.map(|accounts| { .map(|accounts| {
@ -2886,8 +2898,8 @@ mod tests {
#[test] #[test]
fn test_zero_signatures() { fn test_zero_signatures() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.fee_calculator.lamports_per_signature = 2; bank.fee_calculator.lamports_per_signature = 2;
let key = Keypair::new(); let key = Keypair::new();
@ -2907,9 +2919,9 @@ mod tests {
#[test] #[test]
fn test_bank_get_slots_in_epoch() { fn test_bank_get_slots_in_epoch() {
let (genesis_block, _) = create_genesis_block(500); let (genesis_config, _) = create_genesis_config(500);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
assert_eq!(bank.get_slots_in_epoch(0), MINIMUM_SLOTS_PER_EPOCH as u64); assert_eq!(bank.get_slots_in_epoch(0), MINIMUM_SLOTS_PER_EPOCH as u64);
assert_eq!( assert_eq!(
@ -2918,14 +2930,14 @@ mod tests {
); );
assert_eq!( assert_eq!(
bank.get_slots_in_epoch(5000), bank.get_slots_in_epoch(5000),
genesis_block.epoch_schedule.slots_per_epoch genesis_config.epoch_schedule.slots_per_epoch
); );
} }
#[test] #[test]
fn test_bank_entered_epoch_callback() { fn test_bank_entered_epoch_callback() {
let (genesis_block, _) = create_genesis_block(500); let (genesis_config, _) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let callback_count = Arc::new(AtomicU64::new(0)); let callback_count = Arc::new(AtomicU64::new(0));
bank0.set_entered_epoch_callback({ bank0.set_entered_epoch_callback({
@ -2959,11 +2971,11 @@ mod tests {
#[test] #[test]
fn test_is_delta_true() { fn test_is_delta_true() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let key1 = Keypair::new(); let key1 = Keypair::new();
let tx_transfer_mint_to_1 = let tx_transfer_mint_to_1 =
system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_config.hash());
assert_eq!(bank.process_transaction(&tx_transfer_mint_to_1), Ok(())); assert_eq!(bank.process_transaction(&tx_transfer_mint_to_1), Ok(()));
assert_eq!(bank.is_delta.load(Ordering::Relaxed), true); assert_eq!(bank.is_delta.load(Ordering::Relaxed), true);
@ -2978,8 +2990,8 @@ mod tests {
#[test] #[test]
fn test_is_empty() { fn test_is_empty() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let key1 = Keypair::new(); let key1 = Keypair::new();
// The zeroth bank is empty becasue there are no transactions // The zeroth bank is empty becasue there are no transactions
@ -2987,15 +2999,15 @@ mod tests {
// Set is_delta to true, bank is no longer empty // Set is_delta to true, bank is no longer empty
let tx_transfer_mint_to_1 = let tx_transfer_mint_to_1 =
system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_block.hash()); system_transaction::transfer(&mint_keypair, &key1.pubkey(), 1, genesis_config.hash());
assert_eq!(bank0.process_transaction(&tx_transfer_mint_to_1), Ok(())); assert_eq!(bank0.process_transaction(&tx_transfer_mint_to_1), Ok(()));
assert_eq!(bank0.is_empty(), false); assert_eq!(bank0.is_empty(), false);
} }
#[test] #[test]
fn test_bank_inherit_tx_count() { fn test_bank_inherit_tx_count() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
// Bank 1 // Bank 1
let bank1 = Arc::new(new_from_parent(&bank0)); let bank1 = Arc::new(new_from_parent(&bank0));
@ -3008,7 +3020,7 @@ mod tests {
&mint_keypair, &mint_keypair,
&Keypair::new().pubkey(), &Keypair::new().pubkey(),
1, 1,
genesis_block.hash(), genesis_config.hash(),
)), )),
Ok(()) Ok(())
); );
@ -3033,10 +3045,10 @@ mod tests {
#[test] #[test]
fn test_bank_inherit_fee_calculator() { fn test_bank_inherit_fee_calculator() {
let (mut genesis_block, _mint_keypair) = create_genesis_block(500); let (mut genesis_config, _mint_keypair) = create_genesis_config(500);
genesis_block.fee_calculator.target_lamports_per_signature = 123; genesis_config.fee_calculator.target_lamports_per_signature = 123;
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let bank1 = Arc::new(new_from_parent(&bank0)); let bank1 = Arc::new(new_from_parent(&bank0));
assert_eq!( assert_eq!(
bank0.fee_calculator.target_lamports_per_signature / 2, bank0.fee_calculator.target_lamports_per_signature / 2,
@ -3046,12 +3058,12 @@ mod tests {
#[test] #[test]
fn test_bank_vote_accounts() { fn test_bank_vote_accounts() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(500, &Pubkey::new_rand(), 1); } = create_genesis_config_with_leader(500, &Pubkey::new_rand(), 1);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let vote_accounts = bank.vote_accounts(); let vote_accounts = bank.vote_accounts();
assert_eq!(vote_accounts.len(), 1); // bootstrap leader has assert_eq!(vote_accounts.len(), 1); // bootstrap leader has
@ -3093,9 +3105,9 @@ mod tests {
#[test] #[test]
fn test_bank_fees_account() { fn test_bank_fees_account() {
let (mut genesis_block, _) = create_genesis_block(500); let (mut genesis_config, _) = create_genesis_config(500);
genesis_block.fee_calculator.lamports_per_signature = 12345; genesis_config.fee_calculator.lamports_per_signature = 12345;
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
let fees_account = bank.get_account(&sysvar::fees::id()).unwrap(); let fees_account = bank.get_account(&sysvar::fees::id()).unwrap();
let fees = Fees::from_account(&fees_account).unwrap(); let fees = Fees::from_account(&fees_account).unwrap();
@ -3108,8 +3120,8 @@ mod tests {
#[test] #[test]
fn test_is_delta_with_no_committables() { fn test_is_delta_with_no_committables() {
let (genesis_block, mint_keypair) = create_genesis_block(8000); let (genesis_config, mint_keypair) = create_genesis_config(8000);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
bank.is_delta.store(false, Ordering::Relaxed); bank.is_delta.store(false, Ordering::Relaxed);
let keypair1 = Keypair::new(); let keypair1 = Keypair::new();
@ -3143,8 +3155,8 @@ mod tests {
#[test] #[test]
fn test_bank_serialize() { fn test_bank_serialize() {
let (genesis_block, _) = create_genesis_block(500); let (genesis_config, _) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let bank = new_from_parent(&bank0); let bank = new_from_parent(&bank0);
// Test new account // Test new account
@ -3181,8 +3193,8 @@ mod tests {
#[test] #[test]
fn test_check_point_values() { fn test_check_point_values() {
let (genesis_block, _) = create_genesis_block(500); let (genesis_config, _) = create_genesis_config(500);
let bank = Arc::new(Bank::new(&genesis_block)); let bank = Arc::new(Bank::new(&genesis_config));
// check that point values are 0 if no previous value was known and current values are not normal // check that point values are 0 if no previous value was known and current values are not normal
assert_eq!( assert_eq!(
@ -3203,8 +3215,8 @@ mod tests {
#[test] #[test]
fn test_bank_get_program_accounts() { fn test_bank_get_program_accounts() {
let (genesis_block, _mint_keypair) = create_genesis_block(500); let (genesis_config, _mint_keypair) = create_genesis_config(500);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let bank0 = Arc::new(new_from_parent(&parent)); let bank0 = Arc::new(new_from_parent(&parent));
@ -3250,8 +3262,8 @@ mod tests {
#[test] #[test]
fn test_status_cache_ancestors() { fn test_status_cache_ancestors() {
let (genesis_block, _mint_keypair) = create_genesis_block(500); let (genesis_config, _mint_keypair) = create_genesis_config(500);
let parent = Arc::new(Bank::new(&genesis_block)); let parent = Arc::new(Bank::new(&genesis_config));
let bank1 = Arc::new(new_from_parent(&parent)); let bank1 = Arc::new(new_from_parent(&parent));
let mut bank = bank1; let mut bank = bank1;
for _ in 0..MAX_CACHE_ENTRIES * 2 { for _ in 0..MAX_CACHE_ENTRIES * 2 {
@ -3268,8 +3280,8 @@ mod tests {
#[test] #[test]
fn test_add_instruction_processor() { fn test_add_instruction_processor() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
fn mock_vote_processor( fn mock_vote_processor(
_pubkey: &Pubkey, _pubkey: &Pubkey,
@ -3308,13 +3320,13 @@ mod tests {
#[test] #[test]
fn test_add_instruction_processor_for_existing_program() { fn test_add_instruction_processor_for_existing_program() {
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(500, &Pubkey::new_rand(), 0); } = create_genesis_config_with_leader(500, &Pubkey::new_rand(), 0);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
fn mock_vote_processor( fn mock_vote_processor(
_pubkey: &Pubkey, _pubkey: &Pubkey,
@ -3341,7 +3353,7 @@ mod tests {
let vote_loader_account = bank.get_account(&solana_vote_api::id()).unwrap(); let vote_loader_account = bank.get_account(&solana_vote_api::id()).unwrap();
bank.add_instruction_processor(solana_vote_api::id(), mock_vote_processor); bank.add_instruction_processor(solana_vote_api::id(), mock_vote_processor);
let new_vote_loader_account = bank.get_account(&solana_vote_api::id()).unwrap(); let new_vote_loader_account = bank.get_account(&solana_vote_api::id()).unwrap();
// Vote loader account should not be updated since it was included in the genesis block. // Vote loader account should not be updated since it was included in the genesis config.
assert_eq!(vote_loader_account.data, new_vote_loader_account.data); assert_eq!(vote_loader_account.data, new_vote_loader_account.data);
assert_eq!( assert_eq!(
bank.process_transaction(&transaction), bank.process_transaction(&transaction),
@ -3355,8 +3367,8 @@ mod tests {
#[test] #[test]
#[should_panic] #[should_panic]
fn test_add_instruction_processor_for_invalid_account() { fn test_add_instruction_processor_for_invalid_account() {
let (genesis_block, mint_keypair) = create_genesis_block(500); let (genesis_config, mint_keypair) = create_genesis_config(500);
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
fn mock_ix_processor( fn mock_ix_processor(
_pubkey: &Pubkey, _pubkey: &Pubkey,
@ -3371,8 +3383,8 @@ mod tests {
} }
#[test] #[test]
fn test_recent_blockhashes_sysvar() { fn test_recent_blockhashes_sysvar() {
let (genesis_block, _mint_keypair) = create_genesis_block(500); let (genesis_config, _mint_keypair) = create_genesis_config(500);
let mut bank = Arc::new(Bank::new(&genesis_block)); let mut bank = Arc::new(Bank::new(&genesis_config));
for i in 1..5 { for i in 1..5 {
let bhq_account = bank.get_account(&sysvar::recent_blockhashes::id()).unwrap(); let bhq_account = bank.get_account(&sysvar::recent_blockhashes::id()).unwrap();
let recent_blockhashes = let recent_blockhashes =
@ -3388,8 +3400,8 @@ mod tests {
} }
#[test] #[test]
fn test_bank_inherit_last_vote_sync() { fn test_bank_inherit_last_vote_sync() {
let (genesis_block, _) = create_genesis_block(500); let (genesis_config, _) = create_genesis_config(500);
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let last_ts = bank0.last_vote_sync.load(Ordering::Relaxed); let last_ts = bank0.last_vote_sync.load(Ordering::Relaxed);
assert_eq!(last_ts, 0); assert_eq!(last_ts, 0);
bank0.last_vote_sync.store(1, Ordering::Relaxed); bank0.last_vote_sync.store(1, Ordering::Relaxed);

View File

@ -266,17 +266,17 @@ impl BankClient {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::instruction::AccountMeta; use solana_sdk::instruction::AccountMeta;
#[test] #[test]
fn test_bank_client_new_with_keypairs() { fn test_bank_client_new_with_keypairs() {
let (genesis_block, john_doe_keypair) = create_genesis_block(10_000); let (genesis_config, john_doe_keypair) = create_genesis_config(10_000);
let john_pubkey = john_doe_keypair.pubkey(); let john_pubkey = john_doe_keypair.pubkey();
let jane_doe_keypair = Keypair::new(); let jane_doe_keypair = Keypair::new();
let jane_pubkey = jane_doe_keypair.pubkey(); let jane_pubkey = jane_doe_keypair.pubkey();
let doe_keypairs = vec![&john_doe_keypair, &jane_doe_keypair]; let doe_keypairs = vec![&john_doe_keypair, &jane_doe_keypair];
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let bank_client = BankClient::new(bank); let bank_client = BankClient::new(bank);
// Create 2-2 Multisig Transfer instruction. // Create 2-2 Multisig Transfer instruction.

View File

@ -1,7 +1,7 @@
use solana_sdk::{ use solana_sdk::{
account::Account, account::Account,
fee_calculator::FeeCalculator, fee_calculator::FeeCalculator,
genesis_block::GenesisBlock, genesis_config::GenesisConfig,
pubkey::Pubkey, pubkey::Pubkey,
signature::{Keypair, KeypairUtil}, signature::{Keypair, KeypairUtil},
system_program::{self, solana_system_program}, system_program::{self, solana_system_program},
@ -12,21 +12,21 @@ use solana_vote_api::vote_state;
// The default stake placed with the bootstrap leader // The default stake placed with the bootstrap leader
pub const BOOTSTRAP_LEADER_LAMPORTS: u64 = 42; pub const BOOTSTRAP_LEADER_LAMPORTS: u64 = 42;
pub struct GenesisBlockInfo { pub struct GenesisConfigInfo {
pub genesis_block: GenesisBlock, pub genesis_config: GenesisConfig,
pub mint_keypair: Keypair, pub mint_keypair: Keypair,
pub voting_keypair: Keypair, pub voting_keypair: Keypair,
} }
pub fn create_genesis_block(mint_lamports: u64) -> GenesisBlockInfo { pub fn create_genesis_config(mint_lamports: u64) -> GenesisConfigInfo {
create_genesis_block_with_leader(mint_lamports, &Pubkey::new_rand(), 0) create_genesis_config_with_leader(mint_lamports, &Pubkey::new_rand(), 0)
} }
pub fn create_genesis_block_with_leader( pub fn create_genesis_config_with_leader(
mint_lamports: u64, mint_lamports: u64,
bootstrap_leader_pubkey: &Pubkey, bootstrap_leader_pubkey: &Pubkey,
bootstrap_leader_stake_lamports: u64, bootstrap_leader_stake_lamports: u64,
) -> GenesisBlockInfo { ) -> GenesisConfigInfo {
let mint_keypair = Keypair::new(); let mint_keypair = Keypair::new();
let voting_keypair = Keypair::new(); let voting_keypair = Keypair::new();
let staking_keypair = Keypair::new(); let staking_keypair = Keypair::new();
@ -73,18 +73,18 @@ pub fn create_genesis_block_with_leader(
]; ];
let fee_calculator = FeeCalculator::new(0, 0); // most tests don't want fees let fee_calculator = FeeCalculator::new(0, 0); // most tests don't want fees
let mut genesis_block = GenesisBlock { let mut genesis_config = GenesisConfig {
accounts, accounts,
native_instruction_processors, native_instruction_processors,
fee_calculator, fee_calculator,
..GenesisBlock::default() ..GenesisConfig::default()
}; };
solana_stake_api::add_genesis_accounts(&mut genesis_block); solana_stake_api::add_genesis_accounts(&mut genesis_config);
solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_block); solana_storage_api::rewards_pools::add_genesis_accounts(&mut genesis_config);
GenesisBlockInfo { GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
voting_keypair, voting_keypair,
} }

View File

@ -83,7 +83,7 @@ pub(crate) mod tests {
use super::*; use super::*;
use crate::bank_client::BankClient; use crate::bank_client::BankClient;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::message::Message; use solana_sdk::message::Message;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_storage_api::{ use solana_storage_api::{
@ -95,13 +95,13 @@ pub(crate) mod tests {
#[test] #[test]
fn test_store_and_recover() { fn test_store_and_recover() {
let (genesis_block, mint_keypair) = create_genesis_block(1000); let (genesis_config, mint_keypair) = create_genesis_config(1000);
let mint_pubkey = mint_keypair.pubkey(); let mint_pubkey = mint_keypair.pubkey();
let archiver_keypair = Keypair::new(); let archiver_keypair = Keypair::new();
let archiver_pubkey = archiver_keypair.pubkey(); let archiver_pubkey = archiver_keypair.pubkey();
let validator_keypair = Keypair::new(); let validator_keypair = Keypair::new();
let validator_pubkey = validator_keypair.pubkey(); let validator_pubkey = validator_keypair.pubkey();
let mut bank = Bank::new(&genesis_block); let mut bank = Bank::new(&genesis_config);
bank.add_instruction_processor( bank.add_instruction_processor(
solana_storage_api::id(), solana_storage_api::id(),
storage_processor::process_instruction, storage_processor::process_instruction,

View File

@ -144,7 +144,7 @@ mod tests {
use bincode::serialize; use bincode::serialize;
use solana_sdk::account::Account; use solana_sdk::account::Account;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::instruction::{AccountMeta, Instruction, InstructionError}; use solana_sdk::instruction::{AccountMeta, Instruction, InstructionError};
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_program; use solana_sdk::system_program;
@ -472,13 +472,13 @@ mod tests {
#[test] #[test]
fn test_system_unsigned_transaction() { fn test_system_unsigned_transaction() {
let (genesis_block, alice_keypair) = create_genesis_block(100); let (genesis_config, alice_keypair) = create_genesis_config(100);
let alice_pubkey = alice_keypair.pubkey(); let alice_pubkey = alice_keypair.pubkey();
let mallory_keypair = Keypair::new(); let mallory_keypair = Keypair::new();
let mallory_pubkey = mallory_keypair.pubkey(); let mallory_pubkey = mallory_keypair.pubkey();
// Fund to account to bypass AccountNotFound error // Fund to account to bypass AccountNotFound error
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let bank_client = BankClient::new(bank); let bank_client = BankClient::new(bank);
bank_client bank_client
.transfer(50, &alice_keypair, &mallory_pubkey) .transfer(50, &alice_keypair, &mallory_pubkey)

View File

@ -56,7 +56,7 @@ impl<'a, 'b> Drop for TransactionBatch<'a, 'b> {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use crate::genesis_utils::{create_genesis_block_with_leader, GenesisBlockInfo}; use crate::genesis_utils::{create_genesis_config_with_leader, GenesisConfigInfo};
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::signature::{Keypair, KeypairUtil};
use solana_sdk::system_transaction; use solana_sdk::system_transaction;
@ -85,20 +85,20 @@ mod tests {
fn setup() -> (Bank, Vec<Transaction>) { fn setup() -> (Bank, Vec<Transaction>) {
let dummy_leader_pubkey = Pubkey::new_rand(); let dummy_leader_pubkey = Pubkey::new_rand();
let GenesisBlockInfo { let GenesisConfigInfo {
genesis_block, genesis_config,
mint_keypair, mint_keypair,
.. ..
} = create_genesis_block_with_leader(500, &dummy_leader_pubkey, 100); } = create_genesis_config_with_leader(500, &dummy_leader_pubkey, 100);
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
let pubkey = Pubkey::new_rand(); let pubkey = Pubkey::new_rand();
let keypair2 = Keypair::new(); let keypair2 = Keypair::new();
let pubkey2 = Pubkey::new_rand(); let pubkey2 = Pubkey::new_rand();
let txs = vec![ let txs = vec![
system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_block.hash()), system_transaction::transfer(&mint_keypair, &pubkey, 1, genesis_config.hash()),
system_transaction::transfer(&keypair2, &pubkey2, 1, genesis_block.hash()), system_transaction::transfer(&keypair2, &pubkey2, 1, genesis_config.hash()),
]; ];
(bank, txs) (bank, txs)

View File

@ -1,5 +1,5 @@
use solana_runtime::bank::Bank; use solana_runtime::bank::Bank;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::hash::hash; use solana_sdk::hash::hash;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use std::sync::Arc; use std::sync::Arc;
@ -9,13 +9,13 @@ use std::thread::Builder;
fn test_race_register_tick_freeze() { fn test_race_register_tick_freeze() {
solana_logger::setup(); solana_logger::setup();
let (mut genesis_block, _) = create_genesis_block(50); let (mut genesis_config, _) = create_genesis_config(50);
genesis_block.ticks_per_slot = 1; genesis_config.ticks_per_slot = 1;
let p = Pubkey::new_rand(); let p = Pubkey::new_rand();
let hash = hash(p.as_ref()); let hash = hash(p.as_ref());
for _ in 0..1000 { for _ in 0..1000 {
let bank0 = Arc::new(Bank::new(&genesis_block)); let bank0 = Arc::new(Bank::new(&genesis_config));
let bank0_ = bank0.clone(); let bank0_ = bank0.clone();
let freeze_thread = Builder::new() let freeze_thread = Builder::new()
.name("freeze".to_string()) .name("freeze".to_string())

View File

@ -2,7 +2,7 @@ use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient; use solana_runtime::bank_client::BankClient;
use solana_runtime::loader_utils::create_invoke_instruction; use solana_runtime::loader_utils::create_invoke_instruction;
use solana_sdk::client::SyncClient; use solana_sdk::client::SyncClient;
use solana_sdk::genesis_block::create_genesis_block; use solana_sdk::genesis_config::create_genesis_config;
use solana_sdk::pubkey::Pubkey; use solana_sdk::pubkey::Pubkey;
use solana_sdk::signature::KeypairUtil; use solana_sdk::signature::KeypairUtil;
@ -10,9 +10,9 @@ use solana_sdk::signature::KeypairUtil;
fn test_program_native_noop() { fn test_program_native_noop() {
solana_logger::setup(); solana_logger::setup();
let (genesis_block, alice_keypair) = create_genesis_block(50); let (genesis_config, alice_keypair) = create_genesis_config(50);
let program_id = Pubkey::new_rand(); let program_id = Pubkey::new_rand();
let bank = Bank::new(&genesis_block); let bank = Bank::new(&genesis_config);
bank.register_native_instruction_processor("solana_noop_program", &program_id); bank.register_native_instruction_processor("solana_noop_program", &program_id);
// Call user program // Call user program

View File

@ -1,4 +1,4 @@
//! The `genesis_block` module is a library for generating the chain's genesis block. //! The `genesis_config` module is a library for generating the chain's genesis config.
use crate::{ use crate::{
account::Account, account::Account,
@ -28,7 +28,7 @@ pub enum OperatingMode {
} }
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GenesisBlock { pub struct GenesisConfig {
pub accounts: Vec<(Pubkey, Account)>, pub accounts: Vec<(Pubkey, Account)>,
pub native_instruction_processors: Vec<(String, Pubkey)>, pub native_instruction_processors: Vec<(String, Pubkey)>,
pub rewards_pools: Vec<(Pubkey, Account)>, pub rewards_pools: Vec<(Pubkey, Account)>,
@ -43,10 +43,10 @@ pub struct GenesisBlock {
} }
// useful for basic tests // useful for basic tests
pub fn create_genesis_block(lamports: u64) -> (GenesisBlock, Keypair) { pub fn create_genesis_config(lamports: u64) -> (GenesisConfig, Keypair) {
let mint_keypair = Keypair::new(); let mint_keypair = Keypair::new();
( (
GenesisBlock::new( GenesisConfig::new(
&[( &[(
mint_keypair.pubkey(), mint_keypair.pubkey(),
Account::new(lamports, 0, &system_program::id()), Account::new(lamports, 0, &system_program::id()),
@ -57,7 +57,7 @@ pub fn create_genesis_block(lamports: u64) -> (GenesisBlock, Keypair) {
) )
} }
impl Default for GenesisBlock { impl Default for GenesisConfig {
fn default() -> Self { fn default() -> Self {
Self { Self {
accounts: Vec::new(), accounts: Vec::new(),
@ -75,7 +75,7 @@ impl Default for GenesisBlock {
} }
} }
impl GenesisBlock { impl GenesisConfig {
pub fn new( pub fn new(
accounts: &[(Pubkey, Account)], accounts: &[(Pubkey, Account)],
native_instruction_processors: &[(String, Pubkey)], native_instruction_processors: &[(String, Pubkey)],
@ -83,7 +83,7 @@ impl GenesisBlock {
Self { Self {
accounts: accounts.to_vec(), accounts: accounts.to_vec(),
native_instruction_processors: native_instruction_processors.to_vec(), native_instruction_processors: native_instruction_processors.to_vec(),
..GenesisBlock::default() ..GenesisConfig::default()
} }
} }
@ -100,9 +100,9 @@ impl GenesisBlock {
//UNSAFE: Required to create a Mmap //UNSAFE: Required to create a Mmap
let mem = unsafe { Mmap::map(&file).expect("failed to map the genesis file") }; let mem = unsafe { Mmap::map(&file).expect("failed to map the genesis file") };
let genesis_block = deserialize(&mem) let genesis_config = deserialize(&mem)
.map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, format!("{:?}", err)))?; .map_err(|err| std::io::Error::new(std::io::ErrorKind::Other, format!("{:?}", err)))?;
Ok(genesis_block) Ok(genesis_config)
} }
pub fn write(&self, ledger_path: &Path) -> Result<(), std::io::Error> { pub fn write(&self, ledger_path: &Path) -> Result<(), std::io::Error> {
@ -155,25 +155,25 @@ mod tests {
} }
#[test] #[test]
fn test_genesis_block() { fn test_genesis_config() {
let mint_keypair = Keypair::new(); let mint_keypair = Keypair::new();
let mut block = GenesisBlock::default(); let mut config = GenesisConfig::default();
block.add_account( config.add_account(
mint_keypair.pubkey(), mint_keypair.pubkey(),
Account::new(10_000, 0, &Pubkey::default()), Account::new(10_000, 0, &Pubkey::default()),
); );
block.add_account(Pubkey::new_rand(), Account::new(1, 0, &Pubkey::default())); config.add_account(Pubkey::new_rand(), Account::new(1, 0, &Pubkey::default()));
block.add_native_instruction_processor("hi".to_string(), Pubkey::new_rand()); config.add_native_instruction_processor("hi".to_string(), Pubkey::new_rand());
assert_eq!(block.accounts.len(), 2); assert_eq!(config.accounts.len(), 2);
assert!(block.accounts.iter().any( assert!(config.accounts.iter().any(
|(pubkey, account)| *pubkey == mint_keypair.pubkey() && account.lamports == 10_000 |(pubkey, account)| *pubkey == mint_keypair.pubkey() && account.lamports == 10_000
)); ));
let path = &make_tmp_path("genesis_block"); let path = &make_tmp_path("genesis_config");
block.write(&path).expect("write"); config.write(&path).expect("write");
let loaded_block = GenesisBlock::load(&path).expect("load"); let loaded_config = GenesisConfig::load(&path).expect("load");
assert_eq!(block.hash(), loaded_block.hash()); assert_eq!(config.hash(), loaded_config.hash());
let _ignored = std::fs::remove_file(&path); let _ignored = std::fs::remove_file(&path);
} }
} }

View File

@ -37,7 +37,7 @@ pub mod client;
#[cfg(not(feature = "program"))] #[cfg(not(feature = "program"))]
pub mod commitment_config; pub mod commitment_config;
#[cfg(not(feature = "program"))] #[cfg(not(feature = "program"))]
pub mod genesis_block; pub mod genesis_config;
#[cfg(not(feature = "program"))] #[cfg(not(feature = "program"))]
pub mod packet; pub mod packet;
#[cfg(not(feature = "program"))] #[cfg(not(feature = "program"))]

View File

@ -193,9 +193,7 @@ fn initialize_ledger_path(
}); });
let client = RpcClient::new_socket(rpc_addr); let client = RpcClient::new_socket(rpc_addr);
let genesis_blockhash = client let genesis_hash = client.get_genesis_hash().map_err(|err| err.to_string())?;
.get_genesis_blockhash()
.map_err(|err| err.to_string())?;
fs::create_dir_all(ledger_path).map_err(|err| err.to_string())?; fs::create_dir_all(ledger_path).map_err(|err| err.to_string())?;
@ -221,7 +219,7 @@ fn initialize_ledger_path(
Err(err) => warn!("Failed to get_slot from entrypoint: {}", err), Err(err) => warn!("Failed to get_slot from entrypoint: {}", err),
} }
Ok(genesis_blockhash) Ok(genesis_hash)
} }
// Return an error if a keypair file cannot be parsed. // Return an error if a keypair file cannot be parsed.
@ -410,12 +408,12 @@ pub fn main() {
.help("Use CUDA"), .help("Use CUDA"),
) )
.arg( .arg(
Arg::with_name("expected_genesis_blockhash") Arg::with_name("expected_genesis_hash")
.long("expected-genesis-blockhash") .long("expected-genesis-hash")
.value_name("HASH") .value_name("HASH")
.takes_value(true) .takes_value(true)
.validator(hash_validator) .validator(hash_validator)
.help("Require the genesis block have this blockhash"), .help("Require the genesis have this hash"),
) )
.arg( .arg(
Arg::with_name("logfile") Arg::with_name("logfile")
@ -522,8 +520,8 @@ pub fn main() {
.value_of("blockstream_unix_socket") .value_of("blockstream_unix_socket")
.map(PathBuf::from); .map(PathBuf::from);
validator_config.expected_genesis_blockhash = matches validator_config.expected_genesis_hash = matches
.value_of("expected_genesis_blockhash") .value_of("expected_genesis_hash")
.map(|s| Hash::from_str(&s).unwrap()); .map(|s| Hash::from_str(&s).unwrap());
println!( println!(
@ -644,23 +642,23 @@ pub fn main() {
&udp_sockets, &udp_sockets,
); );
let genesis_blockhash = let genesis_hash =
initialize_ledger_path(cluster_entrypoint, &ledger_path, no_snapshot_fetch) initialize_ledger_path(cluster_entrypoint, &ledger_path, no_snapshot_fetch)
.unwrap_or_else(|err| { .unwrap_or_else(|err| {
error!("Failed to download ledger: {}", err); error!("Failed to download ledger: {}", err);
exit(1); exit(1);
}); });
if let Some(expected_genesis_blockhash) = validator_config.expected_genesis_blockhash { if let Some(expected_genesis_hash) = validator_config.expected_genesis_hash {
if expected_genesis_blockhash != genesis_blockhash { if expected_genesis_hash != genesis_hash {
error!( error!(
"Genesis blockhash mismatch: expected {} but local genesis blockhash is {}", "Genesis hash mismatch: expected {} but local genesis hash is {}",
expected_genesis_blockhash, genesis_blockhash, expected_genesis_hash, genesis_hash,
); );
exit(1); exit(1);
} }
} }
validator_config.expected_genesis_blockhash = Some(genesis_blockhash); validator_config.expected_genesis_hash = Some(genesis_hash);
} else { } else {
// Without a cluster entrypoint, ledger_path must already be present // Without a cluster entrypoint, ledger_path must already be present
if !ledger_path.is_dir() { if !ledger_path.is_dir() {