1#![doc(
18 html_logo_url = "https://use.ink/img/crate-docs/logo.png",
19 html_favicon_url = "https://use.ink/crate-docs/favicon.png"
20)]
21
22mod backend;
23mod backend_calls;
24mod builders;
25mod client_utils;
26mod contract_build;
27mod contract_results;
28mod error;
29pub mod events;
30mod node_proc;
31#[cfg(feature = "sandbox")]
32mod sandbox_client;
33mod subxt_client;
34mod xts;
35
36pub use crate::contract_build::build_root_and_contract_dependencies;
37pub use backend::{
38 BuilderClient,
39 ChainBackend,
40 ContractsBackend,
41 E2EBackend,
42};
43pub use backend_calls::{
44 CallBuilder,
45 InstantiateBuilder,
46};
47pub use client_utils::ContractsRegistry;
48pub use contract_results::{
49 CallDryRunResult,
50 CallResult,
51 InstantiateDryRunResult,
52 InstantiationResult,
53 UploadResult,
54};
55pub use ink_e2e_macro::test;
56pub use node_proc::{
57 TestNodeProcess,
58 TestNodeProcessBuilder,
59};
60pub use pallet_revive::evm::CallTrace;
61#[cfg(feature = "sandbox")]
62pub use sandbox_client::{
63 preset,
64 Client as SandboxClient,
65};
66pub use sp_keyring::Sr25519Keyring;
67pub use subxt::{
68 self,
69 backend::rpc::RpcClient,
70};
71pub use subxt_client::{
72 CallBuilderFinal,
73 Client,
74 Error,
75};
76pub use subxt_signer::{
77 self,
78 sr25519::{
79 self,
80 dev::*,
81 Keypair,
82 },
83};
84pub use tokio;
85pub use tracing_subscriber;
86
87#[cfg(feature = "sandbox")]
88pub use ink_sandbox::DefaultSandbox;
89
90use ink::codegen::ContractCallBuilder;
91use ink_env::{
92 call::FromAddr,
93 ContractEnv,
94 Environment,
95};
96use ink_primitives::{
97 Address,
98 DepositLimit,
99 H256,
100};
101pub use sp_weights::Weight;
102use std::{
103 cell::RefCell,
104 sync::Once,
105};
106use xts::ReviveApi;
107
108use ink_primitives::types::AccountIdMapper;
109pub use subxt::PolkadotConfig;
110
111pub static INIT: Once = Once::new();
113
114thread_local! {
117 pub static LOG_PREFIX: RefCell<String> = RefCell::new(String::from("no prefix set"));
122}
123
124pub fn log_prefix() -> String {
126 LOG_PREFIX.with(|log_prefix| log_prefix.borrow().clone())
127}
128
129pub fn log_info(msg: &str) {
131 tracing::info!("[{}] {}", log_prefix(), msg);
132}
133
134pub fn log_error(msg: &str) {
136 tracing::error!("[{}] {}", log_prefix(), msg);
137}
138
139pub fn account_id(account: Sr25519Keyring) -> ink_primitives::AccountId {
141 ink_primitives::AccountId::try_from(account.to_account_id().as_ref())
142 .expect("account keyring has a valid account id")
143}
144
145pub fn address<E: Environment>(account: Sr25519Keyring) -> Address {
152 AccountIdMapper::to_address(account.to_account_id().as_ref())
153}
154
155pub fn create_call_builder<Contract>(
157 acc_id: Address,
158) -> <Contract as ContractCallBuilder>::Type
159where
160 <Contract as ContractEnv>::Env: Environment,
161 Contract: ContractCallBuilder,
162 Contract: ContractEnv,
163 Contract::Type: FromAddr,
164{
165 <<Contract as ContractCallBuilder>::Type as FromAddr>::from_addr(acc_id)
166}
167
168fn balance_to_deposit_limit<E: Environment>(
169 b: <E as Environment>::Balance,
170) -> DepositLimit<<E as Environment>::Balance> {
171 DepositLimit::Balance(b)
172}
173
174fn deposit_limit_to_balance<E: Environment>(
175 l: DepositLimit<<E as Environment>::Balance>,
176) -> <E as Environment>::Balance {
177 match l {
178 DepositLimit::Balance(l) => l,
179 DepositLimit::Unchecked => panic!("`Unchecked` is not supported"),
181 }
182}