diff --git a/drink/src/contract_api.rs b/drink/src/contract_api.rs index f65f065..2af2b29 100644 --- a/drink/src/contract_api.rs +++ b/drink/src/contract_api.rs @@ -2,7 +2,9 @@ use frame_support::{sp_runtime::AccountId32, weights::Weight}; use pallet_contracts::{CollectEvents, DebugInfo, Determinism}; -use pallet_contracts_primitives::{Code, ContractExecResult, ContractInstantiateResult}; +use pallet_contracts_primitives::{ + Code, CodeUploadResult, ContractExecResult, ContractInstantiateResult, +}; use crate::{runtime::Runtime, EventRecordOf, Sandbox}; @@ -18,6 +20,13 @@ pub trait ContractApi { gas_limit: Weight, ) -> ContractInstantiateResult>; + /// Interface for `bare_upload_code` contract call. + fn upload_contract( + &mut self, + contract_bytes: Vec, + origin: AccountId32, + ) -> CodeUploadResult<::Hash, u128>; + /// Interface for `bare_call` contract call. fn call_contract( &mut self, @@ -52,6 +61,21 @@ impl ContractApi for Sandbox { }) } + fn upload_contract( + &mut self, + contract_bytes: Vec, + origin: AccountId32, + ) -> CodeUploadResult<::Hash, u128> { + self.externalities.execute_with(|| { + pallet_contracts::Pallet::::bare_upload_code( + origin, + contract_bytes, + None, + Determinism::Enforced, + ) + }) + } + fn call_contract( &mut self, address: AccountId32,