This report evaluates the impact of
SIMD-0321
on existing Solana mainnet-beta programs by attempting to identify existing
uninitialized reads of register r2.
Profiling results were generated using Blueshift’s
program-sync tool.
This report evaluates the impact of
SIMD-0321
on existing Solana mainnet-beta programs by attempting to identify existing
uninitialized reads of register r2.
Profiling results were generated using Blueshift’s
program-sync tool.
After discussions on RFC-0423, it's clear that most contributors prefer to introduce the new BPF Loader account layout under a new program ID. Therefore, we plan to proceed with a BPF Loader V4.
I'd like to consider a new direction on the design for Loader V4. SIMD-0167 is well-specified and addresses several developer pain points. However, I believe it oversteps in some areas and falls short in others.
| use { | |
| bytemuck::{Pod, Zeroable}, | |
| pinocchio::{ | |
| account_info::AccountInfo, program_entrypoint, | |
| pubkey::Pubkey, ProgramResult, program_error::ProgramError, | |
| }, | |
| }; | |
| #[derive(Clone, Copy, Pod, Zeroable)] | |
| #[repr(C)] |
| use solana_program::{account_info::AccountInfo, entrypoint::ProgramResult, msg, pubkey::Pubkey}; | |
| solana_program::entrypoint!(process); | |
| fn process(_program_id: &Pubkey, accounts: &[AccountInfo], _input: &[u8]) -> ProgramResult { | |
| let account = accounts.first().unwrap(); | |
| msg!("KEY: {}", account.key); | |
| msg!("IS_SIGNER: {}", account.is_signer); | |
| msg!("IS_WRITABLE: {}", account.is_writable); | |
| Ok(()) |
| //! Program cache index v2 implementation. | |
| //! | |
| //! Consider a fork graph. | |
| //! | |
| //! ``` | |
| //! | |
| //! 0 <- root | |
| //! / \ | |
| //! 10 5 | |
| //! | | |
| runtime::bank::new_from_fields() | |
| | | |
| |-- runtime::serde_snapshot::reconstruct_bank_from_fields() | |
| | | |
| |-- runtime::serde_snapshot::bank_from_streams() | |
| | | |
| |-- runtime::snapshot_bank_utils::rebuild_bank_from_unarchived_snapshots() | |
| | | | |
| | |-- runtime::snapshot_bank_utils::bank_from_snapshot_archives() | |
| | | |
| /// Scenario #1: | |
| mod not_fut{ | |
| /// A lib function designed to take a closure that returns a `String` | |
| fn lib_function<F>(get_account_data_fn: F) -> String | |
| where | |
| F: Fn(u8) -> String, | |
| { | |
| let account_data = get_account_data_fn(42); | |
| println!("Account data: {}", account_data); | |
| account_data |