diff --git a/packages/std/src/imports.rs b/packages/std/src/imports.rs index 74c29c78b3..661393397e 100644 --- a/packages/std/src/imports.rs +++ b/packages/std/src/imports.rs @@ -82,6 +82,8 @@ extern "C" { fn ed25519_sign(messages_ptr: u32, private_key_ptr: u32) -> u64; + fn check_gas() -> u64; + fn gas_evaporate(evaporate: u32) -> u32; } @@ -410,6 +412,15 @@ impl Api for ExternalApi { } } + fn check_gas(&self) -> StdResult { + let result = unsafe { check_gas() }; + if result == 0 { + return Err(StdError::generic_err("check_gas error")); + } + + Ok(result) + } + fn gas_evaporate(&self, evaporate: u32) -> StdResult<()> { let result = unsafe { gas_evaporate(evaporate) }; if result != 0 { diff --git a/packages/std/src/testing/mock.rs b/packages/std/src/testing/mock.rs index da96f6c3fe..feca7fa89a 100644 --- a/packages/std/src/testing/mock.rs +++ b/packages/std/src/testing/mock.rs @@ -228,6 +228,10 @@ impl Api for MockApi { Ok(cosmwasm_crypto::ed25519_sign(message, private_key)?) } + fn check_gas(&self) -> StdResult { + Ok(0) + } + fn gas_evaporate(&self, _evaporate: u32) -> StdResult<()> { Ok(()) } diff --git a/packages/std/src/traits.rs b/packages/std/src/traits.rs index 9afbf05c7e..e97accfd17 100644 --- a/packages/std/src/traits.rs +++ b/packages/std/src/traits.rs @@ -213,10 +213,15 @@ pub trait Api { /// - private key: Raw ED25519 private key (32 bytes) fn ed25519_sign(&self, message: &[u8], private_key: &[u8]) -> Result, SigningError>; + /// Check Gas. + /// + /// This function will return the amount of gas currently used by the contract. + fn check_gas(&self) -> StdResult; + /// Gas evaporation. - /// + /// /// This function will burn a evaporate a precise and reproducible amount of sdk gas. - /// + /// /// - evaporate: Amount of SDK gas to evaporate. fn gas_evaporate(&self, evaporate: u32) -> StdResult<()>; }