parent
3488ea7d1c
commit
be003970b7
57
src/bank.rs
57
src/bank.rs
|
@ -1856,7 +1856,7 @@ mod tests {
|
||||||
let string = transport_receiver.poll();
|
let string = transport_receiver.poll();
|
||||||
assert!(string.is_ok());
|
assert!(string.is_ok());
|
||||||
if let Async::Ready(Some(response)) = string.unwrap() {
|
if let Async::Ready(Some(response)) = string.unwrap() {
|
||||||
let expected = format!(r#"{{"jsonrpc":"2.0","method":"accountNotification","params":{{"result":{{"executable":false,"loader_program_id":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"program_id":[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"tokens":1,"userdata":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"subscription":0}}}}"#);
|
let expected = format!(r#"{{"jsonrpc":"2.0","method":"accountNotification","params":{{"result":{{"executable":false,"loader_program_id":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"program_id":[129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"tokens":1,"userdata":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"subscription":0}}}}"#);
|
||||||
assert_eq!(expected, response);
|
assert_eq!(expected, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2033,4 +2033,59 @@ mod tests {
|
||||||
Err(BankError::AccountNotFound)
|
Err(BankError::AccountNotFound)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_program_ids() {
|
||||||
|
let system = Pubkey::new(&[
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0,
|
||||||
|
]);
|
||||||
|
let native = Pubkey::new(&[
|
||||||
|
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0,
|
||||||
|
]);
|
||||||
|
let bpf = Pubkey::new(&[
|
||||||
|
128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
let budget = Pubkey::new(&[
|
||||||
|
129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
let storage = Pubkey::new(&[
|
||||||
|
130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
let token = Pubkey::new(&[
|
||||||
|
131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
let vote = Pubkey::new(&[
|
||||||
|
132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert_eq!(SystemProgram::id(), system);
|
||||||
|
assert_eq!(native_loader::id(), native);
|
||||||
|
assert_eq!(bpf_loader::id(), bpf);
|
||||||
|
assert_eq!(BudgetState::id(), budget);
|
||||||
|
assert_eq!(StorageProgram::id(), storage);
|
||||||
|
assert_eq!(TokenProgram::id(), token);
|
||||||
|
assert_eq!(VoteProgram::id(), vote);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_program_id_uniqueness() {
|
||||||
|
let mut unique = HashSet::new();
|
||||||
|
let ids = vec![
|
||||||
|
SystemProgram::id(),
|
||||||
|
native_loader::id(),
|
||||||
|
bpf_loader::id(),
|
||||||
|
BudgetState::id(),
|
||||||
|
StorageProgram::id(),
|
||||||
|
TokenProgram::id(),
|
||||||
|
VoteProgram::id(),
|
||||||
|
];
|
||||||
|
assert!(ids.into_iter().all(move |id| unique.insert(id)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,11 @@ use native_loader;
|
||||||
use solana_sdk::account::Account;
|
use solana_sdk::account::Account;
|
||||||
use solana_sdk::pubkey::Pubkey;
|
use solana_sdk::pubkey::Pubkey;
|
||||||
|
|
||||||
pub const BPF_LOADER_PROGRAM_ID: [u8; 32] = [6u8; 32];
|
const BPF_LOADER_NAME: &str = "bpf_loader";
|
||||||
pub const BPF_LOADER_NAME: &str = "bpf_loader";
|
const BPF_LOADER_PROGRAM_ID: [u8; 32] = [
|
||||||
|
128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
|
||||||
pub fn id() -> Pubkey {
|
pub fn id() -> Pubkey {
|
||||||
Pubkey::new(&BPF_LOADER_PROGRAM_ID)
|
Pubkey::new(&BPF_LOADER_PROGRAM_ID)
|
||||||
|
|
|
@ -30,9 +30,11 @@ pub struct BudgetState {
|
||||||
pub pending_budget: Option<Budget>,
|
pub pending_budget: Option<Budget>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const BUDGET_PROGRAM_ID: [u8; 32] = [
|
const BUDGET_PROGRAM_ID: [u8; 32] = [
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
];
|
];
|
||||||
|
|
||||||
impl BudgetState {
|
impl BudgetState {
|
||||||
fn is_pending(&self) -> bool {
|
fn is_pending(&self) -> bool {
|
||||||
self.pending_budget != None
|
self.pending_budget != None
|
||||||
|
|
|
@ -40,7 +40,9 @@ fn create_path(name: &str) -> PathBuf {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const NATIVE_LOADER_PROGRAM_ID: [u8; 32] = [2u8; 32];
|
const NATIVE_LOADER_PROGRAM_ID: [u8; 32] = [
|
||||||
|
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
];
|
||||||
|
|
||||||
// All native programs export a symbol named process()
|
// All native programs export a symbol named process()
|
||||||
const ENTRYPOINT: &str = "process";
|
const ENTRYPOINT: &str = "process";
|
||||||
|
|
|
@ -17,7 +17,10 @@ pub enum StorageError {
|
||||||
InvalidUserData,
|
InvalidUserData,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const STORAGE_PROGRAM_ID: [u8; 32] = [1u8; 32];
|
const STORAGE_PROGRAM_ID: [u8; 32] = [
|
||||||
|
130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
|
];
|
||||||
|
|
||||||
impl StorageProgram {
|
impl StorageProgram {
|
||||||
pub fn check_id(program_id: &Pubkey) -> bool {
|
pub fn check_id(program_id: &Pubkey) -> bool {
|
||||||
|
|
|
@ -261,7 +261,7 @@ mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_sdk_serialize() {
|
fn test_sdk_serialize() {
|
||||||
let keypair = Keypair::new();
|
let keypair = Keypair::new();
|
||||||
use budget_program::BUDGET_PROGRAM_ID;
|
use budget_program::BudgetState;
|
||||||
|
|
||||||
// CreateAccount
|
// CreateAccount
|
||||||
let tx = Transaction::system_create(
|
let tx = Transaction::system_create(
|
||||||
|
@ -270,14 +270,14 @@ mod test {
|
||||||
Hash::default(),
|
Hash::default(),
|
||||||
111,
|
111,
|
||||||
222,
|
222,
|
||||||
Pubkey::new(&BUDGET_PROGRAM_ID),
|
BudgetState::id(),
|
||||||
0,
|
0,
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tx.userdata(0).to_vec(),
|
tx.userdata(0).to_vec(),
|
||||||
vec![
|
vec![
|
||||||
0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
@ -302,17 +302,12 @@ mod test {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Assign
|
// Assign
|
||||||
let tx = Transaction::system_assign(
|
let tx = Transaction::system_assign(&keypair, Hash::default(), BudgetState::id(), 0);
|
||||||
&keypair,
|
|
||||||
Hash::default(),
|
|
||||||
Pubkey::new(&BUDGET_PROGRAM_ID),
|
|
||||||
0,
|
|
||||||
);
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
tx.userdata(0).to_vec(),
|
tx.userdata(0).to_vec(),
|
||||||
vec![
|
vec![
|
||||||
1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
1, 0, 0, 0, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -105,8 +105,9 @@ impl Default for TokenProgram {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const TOKEN_PROGRAM_ID: [u8; 32] = [
|
const TOKEN_PROGRAM_ID: [u8; 32] = [
|
||||||
5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
];
|
];
|
||||||
|
|
||||||
impl TokenProgram {
|
impl TokenProgram {
|
||||||
|
|
|
@ -53,8 +53,9 @@ pub struct VoteProgram {
|
||||||
pub node_id: Pubkey,
|
pub node_id: Pubkey,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const VOTE_PROGRAM_ID: [u8; 32] = [
|
const VOTE_PROGRAM_ID: [u8; 32] = [
|
||||||
6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0,
|
||||||
];
|
];
|
||||||
|
|
||||||
impl VoteProgram {
|
impl VoteProgram {
|
||||||
|
|
Loading…
Reference in New Issue