3 个版本

0.3.2 2024 年 7 月 31 日
0.3.1 2024 年 5 月 14 日
0.3.0 2024 年 4 月 23 日

#13#waves

Download history 122/week @ 2024-04-22 124/week @ 2024-05-13 5/week @ 2024-05-20 2/week @ 2024-05-27 2/week @ 2024-06-10 3/week @ 2024-06-24 155/week @ 2024-07-29

每月 155 次下载
we-cdk 中使用

MIT 许可证

13KB
157

we-cdk

we-cdk crates.io cargo-we crates.io

用于在 Waves Enterprise 生态系统上开发 WASM 智能合约的工具包。

使用方法

编译智能合约的先决条件是安装 Rust 和 Cargo。这里是安装指南

为了与合约一起工作,需要安装 cargo-we。它是一个 CLI 工具,有助于设置和管理 WASM 智能合约。

cargo install cargo-we --force

使用 --force 确保您已更新到最新的 cargo-we 版本。

还可以从该项目文件夹安装 CLI 工具。

cargo install --path ./crates/cargo-we/ --force

为了初始化新项目,可以使用

cargo we new flipper

这将在你工作目录中创建一个名为 flipper 的文件夹。该文件夹包含一个支架 Cargo.toml 和一个 lib.rs,它们都包含使用 WASM 智能合约所需的所有构建块。

lib.rs 包含我们的 hello world 合约 —— Flipper,我们将在下一节中进行解释。

要构建合约,只需在 flipper 文件夹中执行此命令

cargo we build

因此,您将在合约的 target/we/flipper.wasm 文件夹中获得一个 target/we/flipper.wasm 文件和一个 flipper.json 文件。

创建和更新合约

使用 cargo-we 还可以直接向网络节点发送 CreateContractUpdateContract 交易。

为此,创建一个包含对节点访问描述和要发送的交易描述的文件。

要发送交易,您只需要执行以下命令

cargo we tx --send <path_json>

示例 JSON 文件

{
    "nodeUrl": "https://127.0.0.1:6862",
    "apiKey": "we",
    "transaction": {
        "type" : 103,
        "version" : 7,
        "sender" : "3NA9hBGoVPfJVybremiFgWN8REi9oiDydEF",
        "password": "",
        "contractName": "flipper",
        "params": [
            {
                "type": "boolean",
                "key": "init_value",
                "value": false
            }
        ],
        "isConfidential": false,
        "fee" : 100000000,
        "payments" : [ ],
        "feeAssetId" : null,
        "validationPolicy" : {
            "type": "any"
        },
        "groupOwners" : [ ],
        "groupParticipants" : [ ]
    }
}

你好,世界!——翻转器

Flipper 合约是一个简单的合约,只包含一个 bool 值。

它提供了翻转其值从 truefalse(反之亦然)的方法。

以下是可以看到使用 CDK 的代码。

#![no_std]
#![no_main]
use we_cdk::*;

// Declaring a function available for calling.
// `#[action]` keyword is used for this purpose.
// _constructor mandatory method that is called during CreateContract Transaction.
#[action]
fn _constructor(init_value: Boolean) {
    // Write the obtained value as an argument of the function into contract state.
    set_storage!(boolean :: "value" => init_value);
}

#[action]
fn flip() {
    // Read the value from the contract state.
    let value: Boolean = get_storage!(boolean :: "value");
    // Write the inverted value to the contract state.
    set_storage!(boolean :: "value" => !value);
}

依赖关系

~275–730KB
~17K SLoC