EOS智能合约(DApp)开发教程

今天我们来介绍一下如何开发EOS DApp (智能合约)。开始之前,先介绍一下基本架构与元件。EOS由cleos, keosd, nodeos三个主要的元件所组成,架构图如下:

先介绍一下三个主要的Component:

Cleos给开发者提供CLI (Command Line Interface) 工具,所有区块链操作与钱包操作,都可以通过cleos完成。

Nodeos 负责与区块链沟通,并且提供REST API 让外部进行请求。

Keosd 为一项钱包管理工具,一样会提供HTTP API 进使用者进行请求,在我们使用cleos 的时候可以指定处理钱包的keosd 位置。通过keosd 管理钱包,将keosd 与nodeos 互相隔离,在安全性上会有很大的帮助。

安装与启动EOS

我们建议通过Docker直接安装EOS,安装好Docker之后,先通过docker pull拉下最新的版本,范例中拉1.4.3只是为了确保执行过程可以一致,如下:

docker pull eosio/eos-dev:v1.4.3

然后通过以下命令先启动Nodeos 服务,如下:

docker run \

--name nodeos -d -p 8888:8888 \

--network eosdev 火币网 估值\

-v /tmp/eosio/work:/work \

-v /tmp/eosio/data:/mnt/dev/data \

-v /tmp/eosio/config:/mnt/dev/config \

eosio/eos-dev:v1.4.3 \

/bin/bash -c \

"nodeos -e -p eosio \

--plugin eosio::producer_plugin \

--plugin eosio::history_plugin \

--plugin eosio::chain_api_plugin \

--plugin eosio::history_api_plugin \

--plugin eosio::http_plugin \

-d /mnt/dev/data \

--config-dir /mnt/dev/config \

--http-server-address=0.0.0.0:8888 \

--access-control-allow-origin=* \

--contracts-console \

--http-validate-host=false"

启动之后会将Nodeos API 绑定到8888 Port,我们可以直接通过curl 尝试请求API,如下:

接着我们要启动管理钱包的Keosd 服务,一样通过Docker 启动,令命如下:

启动后钱包服务API 会绑定在9876 Port,我们在Container 内请求API 测试看看,如下:

运气好的就可以看到以下画面,显示一个空的钱包:

通过Cleos 操作EOS 区块链

由于nodeoc 与keosd 是两个Container,为了操作方便,我们先建立好Command 环境。首先确认一下两个Container 的IP Address,如下:

上图docker network 显示keosd Container Address 为172.29.0.3.接着我们在Host 这里建立一个Command Alias,如下:

于Linux 建立alias 之后,我们就可以快速在Host 执行Docker Container 里头的cleos 命令,让cleos 用起来就像在Docker 内执行的感觉一样,这样方便多了。

建立EOS 钱包与账号

开始之前,我们先建立自己的钱包,令命如下:

执行之后画面会显示这个钱包的密码,未来需要用这个密码来管理钱包,记起来即可。建立钱包后,我们通过cleos wallet list 显示钱包,现在就可以看到一个名叫default 的钱包,如下:

接着我们将测试需要使用的钥匙汇入钱包中,命令如下:

汇入成功后输入cleos wallet keys 显示钱包中的私钥

通过eosio 账号建立一个sjtest 新账号,如下:

账号建立完成后,我们可以通过Call API 取得账号信息,如下:

此外,如果要产生一组Key 可以用以下命令:

第一个EOS HelloWorld 智能合约

我在测试的时候官方提供的文件有不少错误,整理了Google 上面的一些做法,确定可以按图施工撰写智能合约。范例透过C++ 写一个HelloWorld Smart Contract,首先先在Container 内建立目录:

接着产生C++ 程式码,执行结果如下:

完成后我们需要先将cpp 编译wasm 档案,编译命令与结果如下:

上述的warning 可以不用理会,接着继续编译abi 档案,如下:

wasm 与abi 档案都成功编译后,接着我们要发布智能合约到EOS 区块链上,如下:

讯息会告诉我们这个transaction 还没有发布至网络,但是一样可以执行,我们就来Run 看看,如下:

一个超简单的HelloWorld就完成了,如果你在EOS公链有账户的话,也可以用一样的方法发布命令。



返回列表页>>> 比特币