make runtime depend on bpf_loader (#4601)

* make runtime depend on bpf_loader

* remove vote redundancy, move bpf_loader to genesis, export program\! from bpf_loader crate

* move bpf_loader specification into genesis

* bpf tests to use genesis with bpf

* need to avoid depending on programs, except for macros
This commit is contained in:
Rob Walker
2019-06-11 10:27:22 -07:00
committed by GitHub
parent e4d8ea11ac
commit e56430c9fb
14 changed files with 69 additions and 48 deletions

View File

@ -2,8 +2,8 @@
mod bpf {
use solana_runtime::bank::Bank;
use solana_runtime::bank_client::BankClient;
use solana_runtime::genesis_utils::{create_genesis_block, GenesisBlockInfo};
use solana_runtime::loader_utils::load_program;
use solana_sdk::genesis_block::create_genesis_block;
use solana_sdk::native_loader;
use std::env;
use std::fs::File;
@ -41,7 +41,11 @@ mod bpf {
let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap();
let (genesis_block, mint_keypair) = create_genesis_block(50);
let GenesisBlockInfo {
genesis_block,
mint_keypair,
..
} = create_genesis_block(50);
let bank = Bank::new(&genesis_block);
let bank_client = BankClient::new(bank);
@ -72,7 +76,11 @@ mod bpf {
let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap();
let (genesis_block, mint_keypair) = create_genesis_block(50);
let GenesisBlockInfo {
genesis_block,
mint_keypair,
..
} = create_genesis_block(50);
let bank = Bank::new(&genesis_block);
let bank_client = BankClient::new(bank);
@ -119,7 +127,11 @@ mod bpf {
let mut elf = Vec::new();
file.read_to_end(&mut elf).unwrap();
let (genesis_block, mint_keypair) = create_genesis_block(50);
let GenesisBlockInfo {
genesis_block,
mint_keypair,
..
} = create_genesis_block(50);
let bank = Bank::new(&genesis_block);
let bank_client = BankClient::new(bank);

View File

@ -3,6 +3,16 @@ pub mod allocator_bump;
pub mod allocator_system;
pub mod bpf_verifier;
#[macro_export]
macro_rules! solana_bpf_loader {
() => {
(
"solana_bpf_loader".to_string(),
solana_sdk::bpf_loader::id(),
)
};
}
use alloc::Alloc;
use byteorder::{ByteOrder, LittleEndian, WriteBytesExt};
use libc::c_char;

View File

@ -1,23 +0,0 @@
use crate::solana_storage_program;
use solana_sdk::genesis_block::GenesisBlock;
use solana_sdk::pubkey::Pubkey;
use solana_storage_api::storage_contract;
pub trait GenesisBlockUtil {
fn add_storage_program(&mut self, validator_pubkey: &Pubkey, validator_storage_pubkey: &Pubkey);
}
impl GenesisBlockUtil for GenesisBlock {
fn add_storage_program(
&mut self,
validator_pubkey: &Pubkey,
validator_storage_pubkey: &Pubkey,
) {
self.accounts.push((
*validator_storage_pubkey,
storage_contract::create_validator_storage_account(*validator_pubkey, 1),
));
self.native_instruction_processors
.push(solana_storage_program!());
}
}

View File

@ -1,5 +1,3 @@
pub mod genesis_block_util;
#[macro_export]
macro_rules! solana_storage_program {
() => {