1pub mod cache;
7pub mod config;
8pub mod env;
9pub mod error;
10pub mod evm_api;
11pub mod evm_api_impl;
12#[allow(unused_mut)]
13pub mod host;
14pub mod ink;
15pub mod meter;
16pub mod middleware;
17pub mod native;
18pub mod pages;
19pub mod pricing;
20pub mod run;
21
22pub use cache::InitCache;
23pub use config::{CompileConfig, StylusConfig};
24pub use evm_api::EvmApi;
25pub use evm_api_impl::StylusEvmApi;
26pub use ink::{Gas, Ink};
27pub use meter::{MachineMeter, MeteredMachine, STYLUS_ENTRY_POINT};
28pub use native::NativeInstance;
29pub use run::RunProgram;
30
31pub const STYLUS_DISCRIMINANT: [u8; 3] = [0xEF, 0xF0, 0x00];
37
38pub fn is_stylus_program(bytecode: &[u8]) -> bool {
42 bytecode.len() >= 4 && bytecode[..3] == STYLUS_DISCRIMINANT
43}
44
45pub fn strip_stylus_prefix(bytecode: &[u8]) -> Result<(&[u8], u8), &'static str> {
50 if bytecode.len() < 4 {
51 return Err("bytecode too short for Stylus prefix");
52 }
53 if bytecode[..3] != STYLUS_DISCRIMINANT {
54 return Err("bytecode does not have Stylus discriminant");
55 }
56 let version = bytecode[3];
57 Ok((&bytecode[4..], version))
58}