#interface #kujira #mocking #cosmwasm #utilities #testing #orca

kujira-rs-testing

Kujira cosmwasm 合同的接口和实用工具

14 个稳定版本

1.7.3 2024年7月20日
1.7.2 2024年7月11日
1.7.0 2024年6月5日
1.6.0 2024年3月26日
1.1.0 2023年5月17日

#2045神奇豆

Download history 132/week @ 2024-05-31 28/week @ 2024-06-07 4/week @ 2024-06-14 6/week @ 2024-06-28 49/week @ 2024-07-05 46/week @ 2024-07-12 135/week @ 2024-07-19 17/week @ 2024-07-26

每月下载量 246

Apache-2.0

42KB
868

kujira-rs 编写的模拟测试接口

添加到开发依赖项

[dev-dependencies]
kujira-rs-testing = { git = "https://github.com/team-kujira/kujira-rs-testing" }

mock.rs

这创建了一个对链核心的模拟接口,支持 Oracle 查询和 Denom 消息和查询。

n.b: 目前不支持代币铸造。目前的建议是在测试设置中通过预加载目标代币来模拟,然后检查正确的 mint 事件。

更新 Oracle 价格

    app.init_modules(|router, _api, _storage| {
        router
            .custom
            .set_oracle_price(Decimal::from_ratio(1325u128, 100u128));
    });

检查铸造事件

    let mint_event = res.events.iter().find(|e| e.ty == "mint").unwrap();
    assert_eq!(mint_event.attributes[0], attr("amount", "8122"));
    assert_eq!(mint_event.attributes[1], attr("denom", STABLE));
    assert_eq!(
        mint_event.attributes[2],
        attr("recipient", contract.clone())
    );

fin.rs

使用这些模拟合同接口添加到 mock::mock_app

    let fin_code = ContractWrapper::new(
        kujira_stable_testing::fin::execute,
        kujira_stable_testing::fin::instantiate,
        kujira_stable_testing::fin::query,
    );
    let fin_code_id = app.store_code(Box::new(fin_code));
    let fin_contract = app
        .instantiate_contract(
            fin_code_id,
            owner.clone(),
            &kujira::fin::InstantiateMsg {
                owner: Addr::unchecked("owner"),
                denoms: [
                    Denom::Native(COLLATERAL.to_string()),
                    Denom::Native(STABLE.to_string()),
                ],
                decimal_delta: None,
                price_precision: Precision::DecimalPlaces(3),
            },
            &vec![],
            "fin",
            Some(owner.to_string()),
        )
        .unwrap();

orca.rs

同样适用于 Orca.rs

    let orca_code = ContractWrapper::new(
        kujira_stable_testing::orca::execute,
        kujira_stable_testing::orca::instantiate,
        kujira_stable_testing::orca::query,
    );
    let orca_code_id = app.store_code(Box::new(orca_code));
    let orca_contract = app
        .instantiate_contract(
            orca_code_id,
            owner.clone(),
            &kujira::orca::InstantiateMsg {
                owner: Addr::unchecked("owner"),
                market: Addr::unchecked("market"),
                bid_denom: Denom::Native(STABLE.to_string()),
                collateral_denom: Denom::Cw20(Addr::unchecked(COLLATERAL)),
                bid_threshold: Uint128::from(1000000u128),
                max_slot: 20,
                premium_rate_per_slot: Decimal::from_ratio(1u128, 100u128),
                waiting_period: 600,
                liquidation_fee: Decimal::from_ratio(1u128, 100u128),
                withdrawal_fee: Decimal::from_ratio(1u128, 200u128),
                fee_address: fee_address(),
            },
            &vec![],
            "orca",
            Some(owner.to_string()),
        )
        .unwrap();

依赖项

~5.5–9MB
~184K SLoC