From 41b5899856580b3f98e93a711255687007a4547a Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Sat, 2 Mar 2019 21:03:36 -0700 Subject: [PATCH] Move programs/Cargo.toml into bpf/ --- Cargo.lock | 22 +++++++-------- Cargo.toml | 2 +- programs/{ => bpf}/Cargo.toml | 12 ++++---- programs/{ => bpf}/tests/programs.rs | 0 runtime/src/loader_utils.rs | 42 ++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 18 deletions(-) rename programs/{ => bpf}/Cargo.toml (59%) rename programs/{ => bpf}/tests/programs.rs (100%) create mode 100644 runtime/src/loader_utils.rs diff --git a/Cargo.lock b/Cargo.lock index aded9d103..f4b2279a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2027,6 +2027,17 @@ dependencies = [ "solana-sdk 0.12.0", ] +[[package]] +name = "solana-bpf-programs" +version = "0.12.0" +dependencies = [ + "solana 0.12.0", + "solana-bpfloader 0.12.0", + "solana-logger 0.12.0", + "solana-native-loader 0.12.0", + "solana-sdk 0.12.0", +] + [[package]] name = "solana-bpfloader" version = "0.12.0" @@ -2216,17 +2227,6 @@ dependencies = [ "solana-sdk 0.12.0", ] -[[package]] -name = "solana-programs" -version = "0.12.0" -dependencies = [ - "solana 0.12.0", - "solana-bpfloader 0.12.0", - "solana-logger 0.12.0", - "solana-native-loader 0.12.0", - "solana-sdk 0.12.0", -] - [[package]] name = "solana-replicator" version = "0.12.0" diff --git a/Cargo.toml b/Cargo.toml index 458424d06..7d36111cd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -70,7 +70,7 @@ members = [ "ledger-tool", "logger", "metrics", - "programs", + "programs/bpf", "programs/bpf_loader", "programs/budget", "programs/budget_api", diff --git a/programs/Cargo.toml b/programs/bpf/Cargo.toml similarity index 59% rename from programs/Cargo.toml rename to programs/bpf/Cargo.toml index de67375ad..0dc42c545 100644 --- a/programs/Cargo.toml +++ b/programs/bpf/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "solana-programs" +name = "solana-bpf-programs" description = "Blockchain, Rebuilt for Scale" version = "0.12.0" documentation = "https://docs.rs/solana" @@ -18,8 +18,8 @@ cuda = ["solana/cuda"] erasure = ["solana/erasure"] [dependencies] -solana = { path = "../core", version = "0.12.0" } -solana-bpfloader = { path = "bpf_loader", version = "0.12.0" } -solana-logger = { path = "../logger", version = "0.12.0" } -solana-native-loader = { path = "native_loader", version = "0.12.0" } -solana-sdk = { path = "../sdk", version = "0.12.0" } +solana = { path = "../../core", version = "0.12.0" } +solana-bpfloader = { path = "../bpf_loader", version = "0.12.0" } +solana-logger = { path = "../../logger", version = "0.12.0" } +solana-native-loader = { path = "../native_loader", version = "0.12.0" } +solana-sdk = { path = "../../sdk", version = "0.12.0" } diff --git a/programs/tests/programs.rs b/programs/bpf/tests/programs.rs similarity index 100% rename from programs/tests/programs.rs rename to programs/bpf/tests/programs.rs diff --git a/runtime/src/loader_utils.rs b/runtime/src/loader_utils.rs new file mode 100644 index 000000000..71c21cbc9 --- /dev/null +++ b/runtime/src/loader_utils.rs @@ -0,0 +1,42 @@ +use crate::bank::Bank; +use solana_sdk::loader_transaction::LoaderTransaction; +use solana_sdk::pubkey::Pubkey; +use solana_sdk::signature::{Keypair, KeypairUtil}; +use solana_sdk::system_transaction::SystemTransaction; + +pub fn load_program(bank: &Bank, from: &Keypair, loader_id: Pubkey, program: Vec) -> Pubkey { + let program_account = Keypair::new(); + + let tx = SystemTransaction::new_program_account( + from, + program_account.pubkey(), + bank.last_blockhash(), + 1, + program.len() as u64, + loader_id, + 0, + ); + bank.process_transaction(&tx).unwrap(); + assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(()))); + + let chunk_size = 256; // Size of chunk just needs to fit into tx + let mut offset = 0; + for chunk in program.chunks(chunk_size) { + let tx = LoaderTransaction::new_write( + &program_account, + loader_id, + offset, + chunk.to_vec(), + bank.last_blockhash(), + 0, + ); + bank.process_transaction(&tx).unwrap(); + offset += chunk_size as u32; + } + + let tx = LoaderTransaction::new_finalize(&program_account, loader_id, bank.last_blockhash(), 0); + bank.process_transaction(&tx).unwrap(); + assert_eq!(bank.get_signature_status(&tx.signatures[0]), Some(Ok(()))); + + program_account.pubkey() +}