3 个版本 (重大变更)
0.54.0 | 2024 年 8 月 13 日 |
---|---|
0.53.0 | 2024 年 5 月 14 日 |
0.52.0 | 2024 年 4 月 26 日 |
#818 in 神奇豆子
每月 308 次下载
150KB
2.5K SLoC
ibc-client-tendermint-cw
包
此包展示了如何重用 ibc-rs
轻客户端作为 CosmWasm 合约,利用 ibc-client-cw
包。
ibc-client-cw
包暴露了重用 ibc-rs
轻客户端所需的类型和特质。值得注意的是,它提供了一个 ClientType
特质,它需要两个关联类型:ClientState
和 ConsensusState
。这些类型接受任何实现 ibc-core
包中的 ClientStateExecution
和 ConsensusState
特质的类型。
例如,要重用现有的 ibc-client-tendermint
use ibc_client_cw::api::ClientType;
use ibc_client_tendermint::client_state::ClientState;
use ibc_client_tendermint::consensus_state::ConsensusState;
#[derive(Clone, Debug)]
pub struct TendermintClient;
impl<'a> ClientType<'a> for TendermintClient {
type ClientState = ClientState;
type ConsensusState = ConsensusState;
}
一旦实现了 ClientType
特质,就可以使用 ibc-client-cw
包来完成 CosmWasm 合约的入口点。
use cosmwasm_std::{entry_point, Binary, Deps, DepsMut, Env, MessageInfo, Response};
use ibc_client_cw::context::Context;
use ibc_client_cw::types::{ContractError, InstantiateMsg, QueryMsg, SudoMsg};
pub type TendermintContext<'a> = Context<'a, TendermintClient>;
#[entry_point]
pub fn instantiate(
deps: DepsMut<'_>,
env: Env,
_info: MessageInfo,
msg: InstantiateMsg,
) -> Result<Response, ContractError> {
let mut ctx = TendermintContext::new_mut(deps, env)?;
let data = ctx.instantiate(msg)?;
Ok(Response::default().set_data(data))
}
#[entry_point]
pub fn sudo(deps: DepsMut<'_>, env: Env, msg: SudoMsg) -> Result<Response, ContractError> {
let mut ctx = TendermintContext::new_mut(deps, env)?;
let data = ctx.sudo(msg)?;
Ok(Response::default().set_data(data))
}
#[entry_point]
pub fn query(deps: Deps<'_>, env: Env, msg: QueryMsg) -> Result<Binary, ContractError> {
let ctx = TendermintContext::new_ref(deps, env)?;
ctx.query(msg)
}
上述代码片段编译成了一个完整的CosmWasm合约,实现了Tendermint IBC轻客户端。
依赖项
约22MB
约448K SLoC