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
This commit is contained in:
parent
5253c27ca8
commit
62810d769a
|
@ -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"
|
||||
|
|
|
@ -41,6 +41,7 @@ members = [
|
|||
"runtime",
|
||||
"sdk",
|
||||
"sdk-c",
|
||||
"scripts",
|
||||
"sys-tuner",
|
||||
"upload-perf",
|
||||
"net-utils",
|
||||
|
|
|
@ -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::<u64>();
|
||||
|
||||
let issued_lamports = add_genesis_accounts(&mut genesis_config);
|
||||
|
||||
let lamports = genesis_config
|
||||
|
@ -631,5 +306,10 @@ mod tests {
|
|||
.sum::<u64>();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
[package]
|
||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||
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"
|
||||
|
|
@ -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<dyn Error>> {
|
||||
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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue