一、目的

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

二、智能合约介绍

区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔交易的记录不可篡改地存储在区块链上。智能合约中定义可以在区块链上执行的动作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/genesis
eosio-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 build
cmake ..
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-