EOS智能合约开发(一)EOS环境搭建和启动节点

之前我有写过几篇EOS文档,现在整理一下。我们先从EOS入门的环境搭建、编译运行一个智能合约开始。

准备
开始之前 ,我们需要做一些准备工作。
EOS的智能合约采用C++ 编写,因为C++ 的高效性,没有C++ 编程基础的同学可以先学习《Efficient&Elegant:Java程序员入门Cpp》。EOS中用户开发的应用程序或代码都是通过WebAssembly(WASM)来与主链进行交互的,它的编译工具是clang.llvm。关于EOS相关的基础准备请先过目《区块链3.0:拥抱EOS》,这里面介绍了包括EOS概念,安装部署以及工具等基础内容,其中包括了上面提到的《开启一个私有链》。这里还有一些准备知识需要过目:

  • 智能合约之间的交互通过action和共享数据文件
    • 这个共享数据文件在我本机的位置是.local/share/eosio/nodeos/data/shared_mem,随着节点挖矿运行的时间越来越久,这个目录下的数据文件也越来越大。
    • 一个合约可以异步只读访问另一个合约的共享数据文件。
    • 针对其他读取权限,通过资源限制算法可以有效避免异步通信结果失真的问题。
  • 合约之间的两种交互模式:

    • 内联,意思就是直接采用内部函数体发起,调用其他函数的方式。这可以保证交易无阻碍执行,不必通知外部失败或者成功结果,同时内联也可保证交易始终处于同一作用域以及权限。
    • 延迟,通过生产者的判定来决定延后按时执行,可能会发生timeout的问题,但是这种方式可以跨多个作用域工作,并且可以携带着发送给它的合约权限。
  • action和transaction:

    • action是一个动作,账户和合约交互是通过action,可以单独发送一个action。
    • Transaction是一组动作。所有action都必须成功,该Transaction才会成功
    • 接收到交易哈希表示节点成功接受了这个交易,也意味着其他生产者也有很大可能接收它。
    • 交易验证需要通过查看已打包区块中含有的交易历史来确定。

下载EOS环境搭建和启动节点

这一步比较简单。只要是EOS网站下载就好了。
EOS环境的搭建和节点启动分为以下两步:
第一步:用Git克隆,下载EOS的源代码
使用命令:

git clone https://github.com/EOSIO/eos --recursive

下载源代码,速度会根据网络情况而定。下载编译对计算机内存要求最少要有8GB。
编译EOS。
你可以运行下面脚本,直接编译EOS

cd eos
./eosio_build.sh

安装可执行文件
为了便于合同开发,可以使用make install目标将内容安装在/ usr / local文件夹中。 此步骤从build文件夹运行。 安装需要足够的许可。
执行如下命令

cd build
sudo make install

下载编译之后,里面有三个应用程序,这三个应用程序也都是命令行的,这三个应用程序之间有什么关系呢?我们现在使用的前端,怎么使用EOS呢?
1、Cleos(cli+eos =Cleos)它是一个命令行程序。在前端使用EOS是通过Cleos输入命令,给EOS下达指令。
2、Nodes(Node + eos=Nodes)其实它就是挖矿客户端。在启动Nodes之后,它自然就会产生区块。
3、Keosd(key + eos = Keosd)它是在后端启动。它的目的主要是管理钱包,可以创建私钥。
为什么会有Nodeos和Keosd?
Keosd是轻钱包的客户端,你可以不启动nodes挖矿,就可以管理钱包。
第二步:节点启动

cd build/programs/nodeos
./nodeos -e -p eosio --max-transaction-time=1000 --plugin eosio::wallet_api_plugin --plugineosio::chain_api_plugin --plugin eosio::account_history_api_plugin --plugin eosio::producer_plugin --plugin eosio::net_plugin
#-e 启动为生产者
#-p eosid 启动生产者名称

或者在/.local/share/eosio/nodeos/config文件夹下的config.ini文件中配置
配置这个选项为true,启动为生产者节点
#Enable block production, even if the chain is stale. (eosio::producer_plugin)
enable-stale-production = true

配置这个选项,配置生产者名称
# ID of producer controlled by this node (e.g. inita; may specify multiple times) (eosio::producer_plugin)
producer-name = eosio

配置为启动模式下加载下面的插件
# Plugin(s) to enable, may be specified multiple times
plugin = eosio::wallet_api_plugin
plugin = eosio::chain_api_plugin
plugin = eosio::history_api_plugin
plugin = eosio::http_plugin
plugin = eosio::producer_plugin
plugin = eosio::net_plugin
如果这样配置插件,可以使用如下命令启动node节点

cd build/programs/nodeos
./nodeos 

整个EOS是插件式结构,需要有一个主程序,其它像钱包管理、区块链等都是一个插件。
输入上边命令后启动了一个节点,同时启动了一些插件,会打印一些基本信息,以及挖矿的信息。

2018年7月10日写于深圳

猜你喜欢

转载自blog.csdn.net/jambeau/article/details/80967982