#![doc(
html_logo_url = "https://use.ink/img/crate-docs/logo.png",
html_favicon_url = "https://use.ink/crate-docs/favicon.png"
)]
#![cfg_attr(not(feature = "std"), no_std)]
#![deny(
missing_docs,
bad_style,
bare_trait_objects,
improper_ctypes,
non_shorthand_field_patterns,
no_mangle_generic_items,
overflowing_literals,
path_statements,
patterns_in_fns_without_body,
unconditional_recursion,
unused_allocation,
unused_comparisons,
unused_parens,
while_true,
trivial_casts,
trivial_numeric_casts,
unused_extern_crates
)]
#[const_env::from_env("INK_STATIC_BUFFER_SIZE")]
pub const BUFFER_SIZE: usize = 16384;
#[cfg(all(not(feature = "std"), target_arch = "wasm32"))]
#[allow(unused_extern_crates)]
extern crate rlibc;
#[cfg(not(any(feature = "std", feature = "no-panic-handler")))]
#[allow(unused_variables)]
#[panic_handler]
fn panic(info: &core::panic::PanicInfo) -> ! {
debug_print!("{}\n", info);
cfg_if::cfg_if! {
if #[cfg(target_arch = "wasm32")] {
core::arch::wasm32::unreachable();
} else if #[cfg(target_arch = "riscv32")] {
unsafe {
core::arch::asm!("unimp");
core::hint::unreachable_unchecked();
}
} else {
core::compile_error!("ink! only supports wasm32 and riscv32");
}
}
}
#[cfg(not(any(feature = "std", feature = "no-allocator")))]
extern crate ink_allocator;
mod api;
mod arithmetic;
mod backend;
pub mod call;
pub mod chain_extension;
mod contract;
mod engine;
mod error;
#[doc(hidden)]
pub mod event;
pub mod hash;
mod types;
#[cfg(test)]
mod tests;
#[cfg(any(feature = "std", test, doc))]
#[doc(inline)]
pub use self::engine::off_chain::test_api as test;
#[doc(inline)]
pub use pallet_contracts_uapi::{
CallFlags,
ReturnErrorCode,
ReturnFlags,
};
use self::backend::{
EnvBackend,
TypedEnvBackend,
};
pub use self::{
api::*,
contract::{
ContractEnv,
ContractReference,
},
error::{
Error,
Result,
},
event::Event,
types::{
AccountIdGuard,
DefaultEnvironment,
Environment,
FromLittleEndian,
Gas,
NoChainExtension,
},
};
use ink_primitives::Clear;
cfg_if::cfg_if! {
if #[cfg(any(feature = "ink-debug", feature = "std"))] {
#[doc(hidden)]
pub use ink_prelude::format;
#[macro_export]
macro_rules! debug_print {
($($arg:tt)*) => ($crate::debug_message(&$crate::format!($($arg)*)));
}
#[macro_export]
macro_rules! debug_println {
() => ($crate::debug_print!("\n"));
($($arg:tt)*) => (
$crate::debug_print!("{}\n", $crate::format!($($arg)*));
)
}
} else {
#[macro_export]
macro_rules! debug_print {
($($arg:tt)*) => ();
}
#[macro_export]
macro_rules! debug_println {
() => ();
($($arg:tt)*) => ();
}
}
}