Support primordial accounts with no data (#6053)
This commit is contained in:
parent
57e90948a8
commit
d7e4c8e3cf
|
@ -46,17 +46,34 @@ pub fn append_primordial_accounts(
|
||||||
|
|
||||||
for (account, account_details) in primordial_accounts {
|
for (account, account_details) in primordial_accounts {
|
||||||
let pubkey = match file_format {
|
let pubkey = match file_format {
|
||||||
AccountFileFormat::Pubkey => Pubkey::from_str(account.as_str()).unwrap(),
|
AccountFileFormat::Pubkey => Pubkey::from_str(account.as_str()).map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!("Invalid pubkey {}: {:?}", account, err),
|
||||||
|
)
|
||||||
|
})?,
|
||||||
AccountFileFormat::Keypair => {
|
AccountFileFormat::Keypair => {
|
||||||
let bytes: Vec<u8> = serde_json::from_str(account.as_str()).unwrap();
|
let bytes: Vec<u8> = serde_json::from_str(account.as_str()).unwrap();
|
||||||
Keypair::from_bytes(&bytes).unwrap().pubkey()
|
Keypair::from_bytes(&bytes).unwrap().pubkey()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let owner_program_id = Pubkey::from_str(account_details.owner.as_str()).unwrap();
|
let owner_program_id = Pubkey::from_str(account_details.owner.as_str()).map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!("Invalid owner: {}: {:?}", account_details.owner, err),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
|
||||||
let mut account = Account::new(account_details.balance, 0, &owner_program_id);
|
let mut account = Account::new(account_details.balance, 0, &owner_program_id);
|
||||||
account.data = base64::decode(account_details.data.as_str()).unwrap();
|
if account_details.data != "~" {
|
||||||
|
account.data = base64::decode(account_details.data.as_str()).map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!("Invalid account data: {}: {:?}", account_details.data, err),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
}
|
||||||
account.executable = account_details.executable;
|
account.executable = account_details.executable;
|
||||||
|
|
||||||
builder = builder.account(pubkey, account);
|
builder = builder.account(pubkey, account);
|
||||||
|
@ -733,9 +750,14 @@ mod tests {
|
||||||
fn test_primordial_account_struct_compatibility() {
|
fn test_primordial_account_struct_compatibility() {
|
||||||
let yaml_string_pubkey = "---
|
let yaml_string_pubkey = "---
|
||||||
98frSc8R8toHoS3tQ1xWSvHCvGEADRM9hAm5qmUKjSDX:
|
98frSc8R8toHoS3tQ1xWSvHCvGEADRM9hAm5qmUKjSDX:
|
||||||
balance: 3
|
balance: 4
|
||||||
owner: Gw6S9CPzR8jHku1QQMdiqcmUKjC2dhJ3gzagWduA6PGw
|
owner: Gw6S9CPzR8jHku1QQMdiqcmUKjC2dhJ3gzagWduA6PGw
|
||||||
data: bWUgaGVsbG8gdG8gd29ybGQ=
|
data:
|
||||||
|
executable: true
|
||||||
|
88frSc8R8toHoS3tQ1xWSvHCvGEADRM9hAm5qmUKjSDX:
|
||||||
|
balance: 3
|
||||||
|
owner: Gw7S9CPzR8jHku1QQMdiqcmUKjC2dhJ3gzagWduA6PGw
|
||||||
|
data: ~
|
||||||
executable: true
|
executable: true
|
||||||
6s36rsNPDfRSvzwek7Ly3mQu9jUMwgqBhjePZMV6Acp4:
|
6s36rsNPDfRSvzwek7Ly3mQu9jUMwgqBhjePZMV6Acp4:
|
||||||
balance: 2
|
balance: 2
|
||||||
|
@ -754,10 +776,14 @@ mod tests {
|
||||||
file.write_all(yaml_string_pubkey.as_bytes()).unwrap();
|
file.write_all(yaml_string_pubkey.as_bytes()).unwrap();
|
||||||
|
|
||||||
let builder = Builder::new();
|
let builder = Builder::new();
|
||||||
append_primordial_accounts(path.to_str().unwrap(), AccountFileFormat::Pubkey, builder)
|
let builder =
|
||||||
.expect("builder");
|
append_primordial_accounts(path.to_str().unwrap(), AccountFileFormat::Pubkey, builder)
|
||||||
|
.expect("builder");
|
||||||
remove_file(path).unwrap();
|
remove_file(path).unwrap();
|
||||||
|
|
||||||
|
let genesis_block = builder.clone().build();
|
||||||
|
assert_eq!(genesis_block.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]\":
|
||||||
balance: 20
|
balance: 20
|
||||||
|
@ -781,8 +807,12 @@ mod tests {
|
||||||
file.write_all(yaml_string_keypair.as_bytes()).unwrap();
|
file.write_all(yaml_string_keypair.as_bytes()).unwrap();
|
||||||
|
|
||||||
let builder = Builder::new();
|
let builder = Builder::new();
|
||||||
append_primordial_accounts(path.to_str().unwrap(), AccountFileFormat::Keypair, builder)
|
let builder =
|
||||||
.expect("builder");
|
append_primordial_accounts(path.to_str().unwrap(), AccountFileFormat::Keypair, builder)
|
||||||
|
.expect("builder");
|
||||||
remove_file(path).unwrap();
|
remove_file(path).unwrap();
|
||||||
|
|
||||||
|
let genesis_block = builder.clone().build();
|
||||||
|
assert_eq!(genesis_block.accounts.len(), 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue