写点什么

中移链合约常用开发介绍(三)工程化开发智能合约

作者:BSN研习社
  • 2023-04-21
    北京
  • 本文字数:1805 字

    阅读完需:约 6 分钟

中移链合约常用开发介绍(三)工程化开发智能合约

一、目的


本文档基于中移链合约常用开发,介绍了工程化开发智能合约的方法。本文档将从自动生成项目展开,适合刚接触合约开发的开发人员入门工程化开发。


二、智能合约介绍


区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔交易的记录不可篡改地存储在区块链上。智能合约中定义可以在区块链上执行的动作 action 和交易 transaction 的代码。可以在区块链上执行,并将合约执行状态作为该区块链实例不可变历史的一部分。


因此,开发人员可以依赖该区块链作为可信计算环境,其中智能合约的输入、执行和结果都是独立的,不受外部影响。


三、术语解释


CMake


CMake 是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的 makefile 或者 project 文件,能测试编译器所支持的 C++特性,组态档取名为 CMakeLists.txt。熟悉某个集成开发环境(IDE)的开发者可以通过 CMake 用标准的方式建构软件。


工程化开发


工程化是提高程序开发效率与质量的必由之路。工程化的开发项目主要体现在让项目文件以规范清晰的架构排布。


四、环境准备


(一)完全配置的本地开发环境


创建智能合约项目并编译部署需要完全配置的本地开发环境,确保系统可以运行 eosio 系列工具指令,如 eosio-cpp。


可使用的环境有:


Linux Distributions


Amazon Linux 2


CentOS Linux 8.x


CentOS Linux 7.x


Ubuntu 20.04


Ubuntu 18.04


macOS


macOS 10.14 (Mojave)


macOS 10.15 (Catalina)


具体搭建过程可参考 [中移链(基于 EOS)测试环境搭建]


(二)CMake 及相关依赖


如果环境中未安装 CMake、Make 等工具包,可以使用命令行语句进行安装:


Mac OS


下载 cmake 提供的安装包并安装,打开 cmake 点击菜单栏的 Tools->How to Install For Command Line Use,可以在界面中找到安装该命令行工具所需的语句,例如:

sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
复制代码

Ubuntu

在终端中使用以下语句下载并安装 cmake:

sudo apt install -y gcc g++ make cmake
复制代码

CentOS

sudo yum install -y gcc gcc-c++ make cmake
复制代码

五、开始创建工程

(一)自动创建


1、使用 eosio-init 指令初始化项目


要用 CMake 编译 EOSIO 智能合约,你需要一个 CMake 文件。要使用新的 eosio-init 工具生成目录结构存根,.hpp、.cpp 文件和 CMake 配置文件。


执行以下步骤自动创建一个架构分明的项目文件:

cd ~/biosboot/genesiseosio-init --path=. --project=test_contract
复制代码

--path=项目文件夹创建的位置,.表示就在当前路径下创建


--project=项目名,本例中命名为 test_contract


2、检查项目文件


指令运行成功后可以在指定路径下得到 test_contract 文件夹,其中存放着项目预设的文件夹和文件:


文件夹


build


include


ricardian


src


文件


CMakeLists.txt


README.txt


(二)初始化文件简介


自动生成的初始化项目中存在一些默认生成的样例文件,主要内容为一个 hi 动作的实现,会在调用时打印出打招呼的账户名。


.hpp 文件中的内容如下:

#include <eosio/eosio.hpp>using namespace eosio;
CONTRACT test_contract : public contract { public: using contract::contract; ACTION hi( name nm ); using hi_action = action_wrapper<"hi"_n, &test_contract::hi>;};
复制代码


.cpp 文件中的内容如下:

#include <test_contract.hpp>ACTION test_contract::hi( name nm ) { /* fill in action body */ print_f("Name : %\n",nm); }
复制代码

不难看出该初始化项目中的两个 C++程序文件仅作为样例展示该智能合约工程中的文件存放位置和编写格式。开发人员可以根据自己的需要按照此框架编写自己的智能合约文件。


(三)项目编译


运行以下指令编译项目:

cd buildcmake ..make
复制代码

得到编译成功的结果后,会在 build 文件夹中生成用于部署合约的.wasm 和.abi 文件。


六、常见问题


由于版本问题 cmake 命令失败


使用 cmake 编译项目时失败,返回提示为:

CMake Error in CMakeLists.txt:  No cmake_minimum_required command is present.  A line of code such as     cmake_minimum_required(VERSION 3.25)      should be added at the top of the file.  The version specified may be lower   if you wish to support older CMake versions for this project.  For more   information run "cmake --help-policy CMP0000".
复制代码


需要再 test_contract/CMakelist.txt 文件中添加如下语句,指明 cmake 版本:


cmake_minimum_required(VERSION 3.25)


电脑访问 DDC 网络门户

ddc.bsnbase.com


-END-

用户头像

BSN研习社

关注

还未添加个人签名 2021-11-05 加入

还未添加个人简介

评论

发布
暂无评论
中移链合约常用开发介绍(三)工程化开发智能合约_BSN研习社_InfoQ写作社区