跳转至

How to build a smart contract|编写与编译合约

本文的节点、CLI 与 RPC 目标版本为 FullOn Core v0.9.2。合约、CDT 和钱包各有独立版本;其已注明的核验范围不因 Core 升级自动改变。详见版本基线与升级说明。

准备工具

从官方 CDT 仓库与 releases选择与目标网络兼容的工具链。安装方式依平台和版本而异;本文核验本机 cdt-cpp --version 输出为 0.9.0,不代表推荐所有网络使用该版本。

最小 C++ 合约

创建 hello.cpp:

#include <eosio/eosio.hpp>

class [[eosio::contract("hello")]] hello : public eosio::contract {
public:
    using eosio::contract::contract;

    [[eosio::action]]
    void hi(eosio::name user) {
        eosio::require_auth(user);
        eosio::print("Hello, ", user);
    }
};

require_auth(user) 要求调用者满足该账户授权。此示例只打印文本,不持久化数据,也不转移资产。

编译

cdt-cpp --version
mkdir -p build
cdt-cpp -abigen -contract hello -o build/hello.wasm hello.cpp

检查生成 build/hello.wasm 和 build/hello.abi,ABI 中应存在 hi 动作和 user 参数。保持编译器版本、源码提交和构建命令可追溯。

测试要点

在隔离链或测试网验证有效授权成功、缺少授权失败、ABI 参数正确。较复杂合约还应验证表迁移、整数边界、资源用量、重复调用和外部通知。仅编译通过不等于安全或可上线。

下一步:部署合约、调用动作。

来源:CDT、其 examples/hello 与本地工具链编译核验。