From 62810d769aa2a171050f76760ed4a21b95ef3517 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Sun, 8 Dec 2019 09:17:42 -0700 Subject: [PATCH] Account for all tokens at genesis (#7350) * Towards accounting for all tokens * Move 5m tokens back into the big pool * Flesh out batch 4 * Add a script to generate ValidatorInfo structs from a CSV file * Remove commented out code and improve test --- Cargo.lock | 45 +++ Cargo.toml | 1 + genesis/src/genesis_accounts.rs | 476 +++++--------------------- scripts/Cargo.toml | 19 + scripts/src/csv_to_validator_infos.rs | 42 +++ 5 files changed, 185 insertions(+), 398 deletions(-) create mode 100644 scripts/Cargo.toml create mode 100644 scripts/src/csv_to_validator_infos.rs diff --git a/Cargo.lock b/Cargo.lock index 300dffd1cf..a94de4d557 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -283,7 +283,10 @@ name = "bstr" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -703,6 +706,26 @@ dependencies = [ "subtle 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "csv" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bstr 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "ryu 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "csv-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "ct-logs" version = "0.6.0" @@ -1705,6 +1728,9 @@ dependencies = [ name = "memchr" version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] [[package]] name = "memmap" @@ -2633,6 +2659,14 @@ dependencies = [ "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "regex-automata" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "regex-syntax" version = "0.3.9" @@ -3849,6 +3883,14 @@ dependencies = [ "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "solana-scripts" +version = "0.22.0" +dependencies = [ + "csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "solana-sdk" version = "0.22.0" @@ -5495,6 +5537,8 @@ dependencies = [ "checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" "checksum crunchy 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" "checksum crypto-mac 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +"checksum csv 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "37519ccdfd73a75821cac9319d4fce15a81b9fcf75f951df5b9988aa3a0af87d" +"checksum csv-core 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9b5cadb6b25c77aeff80ba701712494213f4a8418fcda2ee11b6560c3ad0bf4c" "checksum ct-logs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" "checksum ctrlc 3.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c7dfd2d8b4c82121dfdff120f818e09fc4380b0b7e17a742081a89b94853e87f" "checksum curve25519-dalek 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8b7dcd30ba50cdf88b55b033456138b7c0ac4afdc436d82e1b79f370f24cc66d" @@ -5709,6 +5753,7 @@ dependencies = [ "checksum redox_users 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe5204c3a17e97dde73f285d49be585df59ed84b50a872baf416e73b62c3828" "checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" "checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd" +"checksum regex-automata 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "92b73c2a1770c255c240eaa4ee600df1704a38dc3feaa6e949e7fcd4f8dc09f9" "checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" "checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" "checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" diff --git a/Cargo.toml b/Cargo.toml index 1f7b2b702a..a4176ee31e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,6 +41,7 @@ members = [ "runtime", "sdk", "sdk-c", + "scripts", "sys-tuner", "upload-perf", "net-utils", diff --git a/genesis/src/genesis_accounts.rs b/genesis/src/genesis_accounts.rs index bb980b6478..5104dd37d7 100644 --- a/genesis/src/genesis_accounts.rs +++ b/genesis/src/genesis_accounts.rs @@ -23,427 +23,111 @@ const UNLOCKS_BY_TENTHS_FOR_60_MONTHS: UnlockInfo = UnlockInfo { custodian: "11111111111111111111111111111111", }; -// 1st batch -const BATCH_ONE_STAKER_INFOS: &[StakerInfo] = &[ +pub const BATCH_FOUR_STAKER_INFOS: &[StakerInfo] = &[ StakerInfo { - name: "diligent bridge", - staker: "BwwM47pLHwUgjJXKQKVNiRfGhtPNWfNLH27na2HJQHhd", - sol: 6_250_000.0, - }, - StakerInfo { - name: "four wish", - staker: "8A6ZEEW2odkqXNjTWHNG6tUk7uj6zCzHueTyEr9pM1tH", - sol: 10_000_000.0, - }, - StakerInfo { - name: "simple friends", - staker: "D89HyaBmr2WmrTehsfkQrY23wCXcDfsFnN9gMfUXHaDd", - sol: 1_250_000.0, - }, - StakerInfo { - name: "noxious leather", - staker: "FwPvDpvUmnco1CSfwXQDTbUbuhG5eP7h2vgCKYKVL7at", - sol: 6_250_000.0, - }, - StakerInfo { - name: "worthless direction", - staker: "4K16iBoC9kAQRT8pUEKeD2h9WEx1zsRgEmJFssXcXmqq", - sol: 12_500_000.0, - }, - StakerInfo { - name: "historical company", - staker: "rmLpENW4V6QNeEhdJJVxo9Xt99oKgNUFZS4Y4375amW", - sol: 322_850.0, - }, - StakerInfo { - name: "callous money", - staker: "5kAztE3XtrpeyGZZxckSUt3ZWojNTmph1QSC9S2682z4", - sol: 5_927_155.25, - }, - StakerInfo { - name: "outstanding jump", - staker: "H6HMVuDR8XCw3EuhLvFG4EciVvGo76Agq1kSBL2ozoDs", - sol: 625_000.0, - }, - StakerInfo { - name: "feeble toes", - staker: "3sfv8tk5ZSDBWbTkFkvFxCvJUyW5yDJUu6VMJcUARQWq", - sol: 750_000.0, - }, - StakerInfo { - name: "disillusioned deer", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_250_000.0, - }, - StakerInfo { - name: "unwritten songs", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_250_000.0, - }, - StakerInfo { - name: "overt dime", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 500_000.0, - }, - StakerInfo { - name: "slow committee", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 625_000.0, - }, - StakerInfo { - name: "curvy twig", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 625_000.0, - }, - StakerInfo { - name: "gamy scissors", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 250_000.0, - }, - StakerInfo { - name: "mushy key", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_250_000.0, - }, - StakerInfo { - name: "marked silver", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 250_000.0, - }, - StakerInfo { - name: "free sock", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 625_000.0, - }, - StakerInfo { - name: "tremendous meeting", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_250_000.0, - }, - StakerInfo { - name: "panoramic cloth", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 625_000.0, - }, - StakerInfo { - name: "normal kick", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_500_000.0, - }, - StakerInfo { - name: "unbecoming observation", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 250_000.0, - }, - StakerInfo { - name: "cut beginner", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 250_000.0, - }, - StakerInfo { - name: "alcoholic button", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 625_000.0, - }, - StakerInfo { - name: "old-fashioned clover", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 750_000.0, - }, - StakerInfo { - name: "expensive underwear", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_500_000.0, - }, - StakerInfo { - name: "like dust", - staker: "P1aceHo1derPubkey11111111111111111111111111", + name: "impossible pizza", + staker: "CDtJpwRSiPRDGeKrvymWQKM7JY9M3hU7iimEKBDxZyoP", sol: 5_000_000.0, }, StakerInfo { - name: "rapid straw", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 5_850_000.0, + name: "wretched texture", + staker: "HbENu65qjWLEB5TrMouSSWLq9mbtGx2bvfhPjk2FpYek", + sol: 225_000.0, }, StakerInfo { - name: "windy trousers", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_579_350.0, + name: "nutritious examination", + staker: "C9CfFpmLDsQsz6wt7MrrZquNB5oS4QkpJkmDAiboVEZZ", + sol: 5_000_000.0, }, StakerInfo { - name: "dramatic veil", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 3_611_110.50, + name: "tidy impression", + staker: "6ne6Rbag4FAnop1KNgVdM1SEHnJEysHSWyqvRpFrzaig", + sol: 5_000_000.0, }, StakerInfo { - name: "incandescent skin", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 3_000_000.0, + name: "unbecoming silver", + // TODO: staker: "42yapY7Vrs5jqht9TCKsPoyb4vDFYcPfRkqAP85NSAQ", WrongSize + staker: "GS7RFm4nrxzYGcPTmu1otzHzZbURWDKuxo2L4AQDvTg2", + sol: 28_800.0, }, StakerInfo { - name: "spiky love", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 3_250_000.0, - }, -]; - -const BATCH_TWO_STAKER_INFOS: &[StakerInfo] = &[ - // 2nd batch - StakerInfo { - name: "macabre note", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, + name: "dramatic treatment", + staker: "GTyawCMwt3kMb51AgDtfdp97mDot7jNwc8ifuS9qqANg", + sol: 1_205_602.0, }, StakerInfo { - name: "alcoholic letter", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, + name: "angry noise", + staker: "Fqxs9MhqjKuMq6YwjBG4ktEapuZQ3kj19mpuHLZKtkg9", + sol: 5_000_000.0, }, StakerInfo { - name: "heady trucks", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, + name: "hard cousin", + staker: "9MYDzj7QuAX9QAK7da1GhzPB4gA3qbPNWsW3MMSZobru", + sol: 5_000_000.0, }, StakerInfo { - name: "ten support", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_000_000.0, - }, - StakerInfo { - name: "foregoing middle", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 800_000.0, - }, - StakerInfo { - name: "ludicrous destruction", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, - }, - StakerInfo { - name: "numberless wheel", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, - }, - StakerInfo { - name: "short powder", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, - }, - StakerInfo { - name: "cut name", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, - }, - StakerInfo { - name: "six fly", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, - }, - StakerInfo { - name: "mindless pickle", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 100_000.0, - }, - StakerInfo { - name: "marked rabbit", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 38_741.36, - }, - StakerInfo { - name: "jagged doctor", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 711_258.64, - }, - StakerInfo { - name: "truthful pollution", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_587_300.0, - }, - StakerInfo { - name: "unkempt activity", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_222_220.0, - }, - StakerInfo { - name: "ritzy view", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 40_000.0, - }, - StakerInfo { - name: "remarkable plant", - staker: "P1aceHo1derPubkey11111111111111111111111111", + name: "inexpensive uncle", + staker: "E4DLNkmdL34ejA48ApfPDoFVuD9XWAFqi8bXzBGRhKst", sol: 300_000.0, }, StakerInfo { - name: "busy value", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 100_000.0, + name: "lopsided skill", + staker: "8cV7zCTF5UMrZakZXiL2Jw5uY3ms2Wz4twzFXEY9Kge2", + sol: 5_000_000.0, }, StakerInfo { - name: "imperfect slave", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 222_065.84, + name: "red snake", + staker: "JBGnGdLyo7V2z9hz51mnnbyDp9sBACtw5WYH9YRG8n7e", + sol: 3_655_292.0, }, StakerInfo { - name: "uneven drawer", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 400_000.0, + name: "hellish money", + staker: "CqKdQ57mBj2mKcAbpjWc28Ls7yXzBXboxSTCRWocmUVj", + sol: 200_000.0, }, StakerInfo { - name: "far behavior", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 4_000_000.0, + name: "full grape", + staker: "2SCJKvh7wWo32PtfUZdVZQ84WnMWoUpF4WTm6ZxcCJ15", + sol: 450_000.0, }, StakerInfo { - name: "abaft memory", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 400_000.0, + name: "nice ghost", + staker: "FeumxB3gfzrVQzABBiha8AacKPY3Rf4BTFSh2aZWHqR8", + sol: 650_000.0, }, StakerInfo { - name: "poor glove", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_000_000.0, + name: "jolly year", + staker: "HBwFWNGPVZgkf3yqUKxuAds5aANGWX62LzUFvZVCWLdJ", + sol: 5_000_000.0, }, StakerInfo { - name: "strange iron", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_000_000.0, + name: "typical initiative", + staker: "3JMz3kaDUZEVK2JVjRqwERGMp7LbWbgUjAFBb42qxoHb", + sol: 5_000_000.0, }, - StakerInfo { - name: "nonstop rail", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_000_000.0, - }, - StakerInfo { - name: "milky bait", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 400_000.0, - }, - StakerInfo { - name: "wandering start", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_200_000.0, - }, -]; - -pub const BATCH_THREE_STAKER_INFOS: &[StakerInfo] = &[ - // 3rd batch - StakerInfo { - name: "dusty dress", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_212_121.21, - }, - StakerInfo { - name: "godly bed", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 151_515.15, - }, - StakerInfo { - name: "innocent property", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 227_272.73, - }, - StakerInfo { - name: "responsible bikes", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 3_030_303.03, - }, - StakerInfo { - name: "learned market", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 3_030_303.03, - }, - StakerInfo { - name: "jumpy school", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 303_030.30, - }, - StakerInfo { - name: "sticky houses", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_515_151.52, - }, - StakerInfo { - name: "bustling basketball", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 1_515_152.52, - }, - StakerInfo { - name: "ordinary dad", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 606_060.61, - }, - StakerInfo { - name: "absurd bat", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 90_909.09, - }, - StakerInfo { - name: "cloudy ocean", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 67_945.45, - }, - StakerInfo { - name: "black-and-white fold", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 757_575.76, - }, - StakerInfo { - name: "stale part", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 45_454.55, - }, - StakerInfo { - name: "available health", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 2_797_575.76, - }, - StakerInfo { - name: "afraid visitor", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 481_818.18, - }, - StakerInfo { - name: "arrogant front", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 151_515.15, - }, - StakerInfo { - name: "juvenile zinc", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 151_515.15, - }, - StakerInfo { - name: "disturbed box", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 303_030.30, - }, - StakerInfo { - name: "disagreeable skate", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 454_545.45, - }, - StakerInfo { - name: "miscreant sidewalk", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 75_757.58, - }, - StakerInfo { - name: "shy play", - staker: "P1aceHo1derPubkey11111111111111111111111111", - sol: 303_030.30, - }, -]; - -pub const BATCH_FOUR_STAKER_INFOS: &[StakerInfo] = &[ StakerInfo { name: "deserted window", staker: "XTeBBZextvHkoRqDF8yb4hihjcraKQDwTEXhzjd8fip", sol: 3_655_292.0, }, StakerInfo { - name: "hard cousin", - staker: "9MYDzj7QuAX9QAK7da1GhzPB4gA3qbPNWsW3MMSZobru", + name: "eight nation", + staker: "E5bSU5ywqPiz3ije89ef5gaEC7jy81BAc72Zeb9MqeHY", + sol: 103_519.0, + }, + StakerInfo { + name: "earsplitting meaning", + staker: "4ZemkSoE75RFE1SVLnnmHcaNWT4qN8KFrKP2wAYfv8CB", + sol: 5_000_000.0, + }, + StakerInfo { + name: "alike cheese", + staker: "72BGEwYee5txFonmpEarTEKCZVN2UxcSUgdphdhcx3V", + sol: 3_880_295.0, + }, + StakerInfo { + name: "noisy honey", + staker: "DRp1Scyn4yJZQfMAdQew2x8RtvRmsNELN37JTK5Xvzgn", sol: 5_000_000.0, }, ]; @@ -457,7 +141,7 @@ pub const POOL_STAKER_INFOS: &[StakerInfo] = &[ StakerInfo { name: "legal gate", staker: "FwMbkDZUb78aiMWhZY4BEroAcqmnrXZV77nwrg71C57d", - sol: 21_086_641.0, + sol: 16_086_641.0, }, StakerInfo { name: "cluttered complaint", @@ -467,7 +151,7 @@ pub const POOL_STAKER_INFOS: &[StakerInfo] = &[ StakerInfo { name: "one thanks", staker: "3b7akieYUyCgz3Cwt5sTSErMWjg8NEygD6mbGjhGkduB", - sol: 157_613_284.59, + sol: 178_699_925.59, }, StakerInfo { name: "lyrical supermarket", @@ -587,21 +271,6 @@ fn add_validators(genesis_config: &mut GenesisConfig, validator_infos: &[Validat pub fn add_genesis_accounts(genesis_config: &mut GenesisConfig) -> u64 { add_stakes( - genesis_config, - &BATCH_ONE_STAKER_INFOS, - &UNLOCKS_BY_FIFTHS_FOR_30_MONTHS, - sol_to_lamports(1_000_000.0), - ) + add_stakes( - genesis_config, - &BATCH_TWO_STAKER_INFOS, - &UNLOCKS_BY_FIFTHS_FOR_30_MONTHS, - sol_to_lamports(1_000_000.0), - ) + add_stakes( - genesis_config, - &BATCH_THREE_STAKER_INFOS, - &UNLOCKS_BY_FIFTHS_FOR_30_MONTHS, - sol_to_lamports(1_000_000.0), - ) + add_stakes( genesis_config, &BATCH_FOUR_STAKER_INFOS, &UNLOCKS_BY_FIFTHS_FOR_30_MONTHS, @@ -622,6 +291,12 @@ mod tests { fn test_add_genesis_accounts() { let mut genesis_config = GenesisConfig::default(); + let bootstrap_lamports = genesis_config + .accounts + .iter() + .map(|(_, account)| account.lamports) + .sum::(); + let issued_lamports = add_genesis_accounts(&mut genesis_config); let lamports = genesis_config @@ -631,5 +306,10 @@ mod tests { .sum::(); assert_eq!(issued_lamports, lamports); + let validator_reserves = 42 * 500 * 1_000_000_000; + let rent_fees = 20; // TODO: Need a place to pay rent from. + let expected_lamports = + 500_000_000_000_000_000 - bootstrap_lamports - validator_reserves + rent_fees; + assert_eq!(lamports, expected_lamports); } } diff --git a/scripts/Cargo.toml b/scripts/Cargo.toml new file mode 100644 index 0000000000..e6b80391b1 --- /dev/null +++ b/scripts/Cargo.toml @@ -0,0 +1,19 @@ +[package] +authors = ["Solana Maintainers "] +edition = "2018" +name = "solana-scripts" +description = "Blockchain, Rebuilt for Scale" +version = "0.22.0" +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +publish = false + +[dependencies] +csv = "1.1" +serde = { version = "1.0.103", features = ["derive"] } + +[[bin]] +name = "solana-csv-to-validator-infos" +path = "src/csv_to_validator_infos.rs" + diff --git a/scripts/src/csv_to_validator_infos.rs b/scripts/src/csv_to_validator_infos.rs new file mode 100644 index 0000000000..b6f1b47263 --- /dev/null +++ b/scripts/src/csv_to_validator_infos.rs @@ -0,0 +1,42 @@ +// Utility to print ValidatorInfo structs for `genesis_accounts.rs` +// +// Usage: +// cargo run --bin solana-csv-to-validator-infos < validators.csv + +use serde::Deserialize; +use std::error::Error; +use std::io; +use std::process; + +#[derive(Debug, Deserialize)] +struct ValidatorRecord { + id: u64, + tokens: f64, + adjective: String, + noun: String, + identity_pubkey: String, + vote_pubkey: String, +} + +fn parse_csv() -> Result<(), Box> { + let mut rdr = csv::Reader::from_reader(io::stdin()); + for result in rdr.deserialize() { + let record: ValidatorRecord = result?; + println!( + r#"ValidatorInfo {{name: "{adjective} {noun}", node: "{identity_pubkey}", node_sol: {tokens:.1}, vote: "{vote_pubkey}", commission: 0}},"#, + tokens = &record.tokens, + adjective = &record.adjective, + noun = &record.noun, + identity_pubkey = &record.identity_pubkey, + vote_pubkey = &record.vote_pubkey, + ); + } + Ok(()) +} + +fn main() { + if let Err(err) = parse_csv() { + println!("error: {}", err); + process::exit(1); + } +}