Эх сурвалжийг харах

cosmwasm: Add is_vaa_redeemed query to token bridge

Csongor Kiss 3 жил өмнө
parent
commit
d10072a33e

+ 9 - 0
cosmwasm/contracts/token-bridge/src/contract.rs

@@ -77,6 +77,7 @@ use crate::{
         ExecuteMsg,
         ExternalIdResponse,
         InstantiateMsg,
+        IsVaaRedeemedResponse,
         MigrateMsg,
         QueryMsg,
         TransferInfoResponse,
@@ -1456,6 +1457,7 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
         }
         QueryMsg::TransferInfo { vaa } => to_binary(&query_transfer_info(deps, env, &vaa)?),
         QueryMsg::ExternalId { external_id } => to_binary(&query_external_id(deps, external_id)?),
+        QueryMsg::IsVaaRedeemed { vaa } => to_binary(&query_is_vaa_redeemed(deps, env, &vaa)?),
     }
 }
 
@@ -1526,6 +1528,13 @@ fn query_transfer_info(deps: Deps, env: Env, vaa: &Binary) -> StdResult<Transfer
     }
 }
 
+fn query_is_vaa_redeemed(deps: Deps, _env: Env, vaa: &Binary) -> StdResult<IsVaaRedeemedResponse> {
+    let vaa = ParsedVAA::deserialize(vaa)?;
+    Ok(IsVaaRedeemedResponse {
+        is_redeemed: vaa_archive_check(deps.storage, vaa.hash.as_slice()),
+    })
+}
+
 fn is_governance_emitter(cfg: &ConfigInfo, emitter_chain: u16, emitter_address: &[u8]) -> bool {
     cfg.gov_chain == emitter_chain && cfg.gov_address == emitter_address
 }

+ 7 - 0
cosmwasm/contracts/token-bridge/src/msg.rs

@@ -87,6 +87,7 @@ pub enum QueryMsg {
     WrappedRegistry { chain: u16, address: Binary },
     TransferInfo { vaa: Binary },
     ExternalId { external_id: Binary },
+    IsVaaRedeemed { vaa: Binary },
 }
 
 #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
@@ -112,3 +113,9 @@ pub struct TransferInfoResponse {
 pub struct ExternalIdResponse {
     pub token_id: TokenId,
 }
+
+#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
+#[serde(rename_all = "snake_case")]
+pub struct IsVaaRedeemedResponse {
+    pub is_redeemed: bool,
+}