一、目的

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

二、智能合约介绍

区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔交易的记录不可篡改地存储在区块链上。智能合约中定义可以在区块链上执行的动作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 build
cmake ..
make
  • --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 ascmake_minimum_required(VERSION 3.25)should be added at the top of the file.  The version specified may be lowerif you wish to support older CMake versions for this project.  For moreinformation run "cmake --help-policy CMP0000".

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

cmake_minimum_required(VERSION 3.25)

电脑访问DDC网络门户

ddc.bsnbase.com

-END-

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

  1. 星云链智能合约开发(六):智能合约开发与部署

    编写智能合约 Nebulas实现了NVM虚拟机来运行智能合约,NVM的实现使用了JavaScript V8引擎,所以当前的开发版,我们可以使用JavaScript.TypeScript来编写智能合约. ...

  2. Lucene.Net 2.3.1开发介绍 —— 三、索引(三)

    原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果 索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是F ...

  3. 以太坊智能合约开发-《精通以太坊智能合约开发》学习总结实践

    文章目录 一.初探以太访智能合约 1. remix小demo 2. 写智能合约用的编程语言 二.以太坊核心概念 1. 交易/事务( Transaction ) 2. 区块 3. 共识协议:工作量证明( ...

  4. solidity开发以太坊代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

  5. EOS智能合约开发(四)EOS智能合约部署及调试(附编程示例)

    EOS的智能合约里面有一个action(动作)和transaction(交易)的概念. 对于我们开发以太坊开发者来说,基本上只有transaction的概念.如果我只要执行一种操作,而且是只读操作,就 ...

  6. Beosin成都链安发布在线EOS-IDE免费版本 EOS智能合约在线编辑、编译、运行调试、部署一步到位...

    Beosin EOS-IDE产品链接: https://beosin.com/EOS-IDE/index.html#/ (推荐Chrome浏览器) 每一个区块链开发的程序员都需要一个界面友好,操作方便 ...

  7. 区块链安全100问 | 第七篇:智能合约审计流程及审计内容

    零时科技--专注于区块链安全领域 深圳零时科技有限公司(简称:零时科技),公司成立于2018年11月,是一家专注于区块链生态安全的实战创新型网络安全企业,团队扎根区块链安全与应用技术研究,以丰富的安全 ...

  8. 以太坊智能合约开发第七篇:智能合约与网页交互

    原文发表于:以太坊智能合约开发第七篇:智能合约与网页交互 上一篇中,我们通过truffle开发框架快速编译部署了合约.本篇,我们将来介绍网页如何与智能合约进行交互. 编写网页 首先我们需要编写一个网页 ...

  9. 三:将智能合约部署到ganache测试网

    三:将智能合约部署到ganache测试网 文章目录 三:将智能合约部署到ganache测试网 实验目的 实验原理 开始条件 实验过程 实验步骤 相关官方知识库 下一章内容: 实验目的 掌握将智能合约部 ...

最新文章

  1. 重构技巧分别能够解决哪些代码味道
  2. 无人机航拍记录生活真爽,包邮送一个!
  3. java script中==和===_Java Script与CSS的问题
  4. 从青年基金到面上项目
  5. boost::io::quoted用法的测试程序
  6. boost::hana::tag_of_t用法的测试程序
  7. 文件系统、mkdir、touch、nano、cp笔记
  8. mysql load data infile 导入数据 某一列 空_Sql数据挑战赛amp;网络销售案例分析
  9. 青海师大c语言研究生专业课,2016年青海师范大学计算机应用技术C语言程序设计考研复试题库...
  10. 精选| 2021年2月R新包推荐(第51期)
  11. 10-关于DOM的事件操作
  12. PDF背景怎么添加,如何修改PDF背景
  13. mysql出现服务器异常后,重启服务器后无法开启数据库处理方法
  14. EasyRecovery最新免费专业版数据恢复软件
  15. 【微信小程序项目】——十分钟开发网络API·天气查询小程序、天气查询,美观简约,简单易上手
  16. 连续,可积,存在原函数,变上限积分
  17. 简单的网站全屏背景图代码
  18. Android Studio —— java.lang.VerifyError: Verifier rejected class 问题解决
  19. 《今雨》孙溟㠭书画艺术
  20. HTML 语法教学之连结标签

热门文章

  1. 新一代深度学习框架研究
  2. 攻防对抗:如何巧妙复现360添加受信任文件
  3. Java课程实验报告 实验三 敏捷开发与XP实践
  4. CyberArticle(eLib电子图书馆)网文快捕
  5. 国内技术帝不输国外 CryEngine 3引擎下 混血编辑器 诠释究极画质
  6. Typora 常用快捷键使用汇总
  7. VC++对Access数据库的操作(查询、插入、更新、删除等)
  8. ActivePerl PPM提示超时问题
  9. 计蒜客 15499 阿里的新游戏 题解
  10. 当前物联网应用中,边缘计算还存在这些问题!