Step 1 - Create the required keypairs
mkdir solana-private-chain && cd solana-private-chain
# Bootstrap validator keypairs
solana-keygen new --outfile bootstrap-validator-keypair.json --no-bip39-passphrase
solana-keygen new --outfile bootstrap-vote-keypair.json --no-bip39-passphrase
solana-keygen new --outfile bootstrap-stake-keypair.json --no-bip39-passphrase
# Second validator keypairs
solana-keygen new --outfile validator2-keypair.json --no-bip39-passphrase
solana-keygen new --outfile vote2-keypair.json --no-bip39-passphrase
solana-keygen new --outfile stake2-keypair.json --no-bip39-passphrase
# Third validator keypairs
solana-keygen new --outfile validator3-keypair.json --no-bip39-passphrase
solana-keygen new --outfile vote3-keypair.json --no-bip39-passphrase
solana-keygen new --outfile stake3-keypair.json --no-bip39-passphrase
# Treasury keypair (for initial funds)
solana-keygen new --outfile treasury-keypair.json --no-bip39-passphrase
Step 2 - Create the Primordial Accounts File
cat > primordial-accounts.yaml << EOF
$(solana-keygen pubkey treasury-keypair.json):
balance: 10000000000000000
owner: 11111111111111111111111111111111
executable: false
data: ""
EOF
Step 3 - Create the genesis block
solana-genesis \\
--cluster-type mainnet-beta \\
--ledger genesis-ledger \\
--bootstrap-validator \\
bootstrap-validator-keypair.json \\
bootstrap-vote-keypair.json \\
bootstrap-stake-keypair.json \\
--bootstrap-validator \\
validator2-keypair.json \\
vote2-keypair.json \\
stake2-keypair.json \\
--bootstrap-validator \\
validator3-keypair.json \\
vote3-keypair.json \\
stake3-keypair.json \\
--bootstrap-stake-authorized-pubkey $(solana-keygen pubkey bootstrap-stake-keypair.json) \\
--bootstrap-validator-lamports 1000000000000000 \\
--bootstrap-validator-stake-lamports 100000000000000 \\
--primordial-accounts-file primordial-accounts.yaml \\
--hashes-per-tick auto \\
--slots-per-epoch 432000 \\
--target-lamports-per-signature 5000 \\
--inflation full \\
--rent-burn-percentage 100 \\
--faucet-lamports 100
Step 4 - start the bootstrap validator
agave-validator \\
--identity bootstrap-validator-keypair.json \\
--vote-account bootstrap-vote-keypair.json \\
--authorized-voter bootstrap-stake-keypair.json \\
--ledger genesis-ledger \\
--rpc-port 8899 \\
--rpc-bind-address 0.0.0.0 \\
--dynamic-port-range 8000-8020 \\
--gossip-port 8001 \\
--enable-rpc-transaction-history \\
--enable-extended-tx-metadata-storage \\
--limit-ledger-size 200000000 \\
--log bootstrap-validator.log
Step 5 - start validator #2
agave-validator \\
--identity validator2-keypair.json \\
--vote-account vote2-keypair.json \\
--authorized-voter stake2-keypair.json \\
--ledger validator2-ledger \\
--entrypoint 127.0.0.1:8001 \\
--rpc-port 8900 \\
--dynamic-port-range 8021-8040 \\
--gossip-port 8022 \\
--enable-rpc-transaction-history \\
--limit-ledger-size 200000000 \\
--log validator-2.log
Step 6 - start validator #3
agave-validator \\
--identity validator3-keypair.json \\
--vote-account vote3-keypair.json \\
--authorized-voter stake3-keypair.json \\
--ledger validator3-ledger \\
--entrypoint 127.0.0.1:8001 \\
--rpc-port 8901 \\
--dynamic-port-range 8041-8060 \\
--gossip-port 8043 \\
--enable-rpc-transaction-history \\
--limit-ledger-size 200000000 \\
--log validator-3.log