王晓轩 分布式实验室
现在区块链技术很是热门,很多大公司都纷纷开辟了自己关于区块链的相关业务部门,比如数字金融,产品溯源等,那么什么是区块链技术呢?区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。在区块链技术的迭代过程中,大家公认比特币是区块链1.0版本的应用,以太坊是2.0版本,现在在链圈炒的最为火热的就是自称是区块链3.0版本的EOS。它以BFT+DPos的公式机制和石墨烯网络为基础,号称公网上线以后能够达到3000-4000左右的TPS(比特币为6-7笔,以太坊是30-40笔,但是笔者亲测EOS的3.0版本是1000tps左右,可能是受环境和主机性能所限吧)。越来越多的人开始关注区块链技术,越来越多的企业级应用开始搬上区块链,现在我就带领大家搭建一套最简单的BaaS系统(block chain as a service:区块链即服务)。
当人们一说到某某即服务的时候总是想到PaaS、SaaS或者IaaS,没错!这次搭建的BaaS也和前面几个类似采用PaaS的设计架构,即用容器的方式搭建BaaS平台。提到容器,就不得不想到现在最流行的Docker+Kubernetes的方式,Docker提供了单机条件下的容器运行环境,Kubernetes提供了一套高可用的容器编排管理系统。本次使用的就是在代码级对Kubernetes做了升级和改造的,由Red Hat公司推出的OpenShift,它使用Kuberenetes作为其内核,对它网络功能做了补充,增加了Web界面,又对原有的Ingress做了优化和升级,所以我们选择它作为本次BaaS的基础平台。
BaaS平台部署图如下图所示:
1、首先开始制作EOS镜像
1)下面是EOS代码获取方法:
git clone https://github.com/EOSIO/eos --recursive
然后进入代码目录执行:
2)在代码的EOS目录下会生成一个build目录,把EOS的二进制文件NodeOS、keosd、cleos等复制到要制作镜像的子目录下,下面是Dockerfile文件的内容,其中基础镜像选用了CentOS,这个系统的版本好要和刚才编译EOS的一致,否则可能会出现NodeOS无法运行的错误。
3)除了有必要的二进制文件外,我们还要为NodeOS启动配置必要的启动脚本和两个配置文件。
下面是启动脚本:
genesis.json文件内容:
2、EOS节点部署
1)当镜像推送到Registry后,我们就可以进行Yaml文件的编写并且配置了,下面是Yaml文件的内容:
2)有了Yaml文件,我们就可以把我们的Yaml文件推送到OpenShift中当成模版,然后通过模版进行EOS节点的实例化,这里面有一个问题需要注意,所有节点的公私钥不可能一样,需要通过模版的参数在实例化的时候传入容器里,然后启动NodeOS的时候,调用NodeOS启动脚本把传入的变量(每一个传入变量都会生成一个环境变量)替换到config.ini文件中,然后启动EOS的主进程NodeOS。当然,这里还有一个问题也需要注意,那就是4.1的EOS配置文件里需要配置两个参数,一个是自己自身的IP(p2p-server-address),和对端IP(p2p-peer-address)第一个地址可以用这个Pod的hostname代替,第二个可以通过指定之前节点的hostname来填充。
3)使用oc create -f eos.yaml 进行模版的部署,然后通过Web界面,选择刚才的模版,输入变量的内容,最后点击生成,如下图所示:
3、既然环境已经设置完成,现在我们来初始化整个EOS的环境。
1)首先通过cleos wallet create创建一个默认的钱包,如果-n可以指定钱包的名字,这个钱包默认的存储路径是/root/eosio-wallet/目录下,看下面的输出:
其中下面的是这个钱包的密码,需要记住,因为现在4.1版本的钱包900秒后就会自动上锁,需要这个密码来解锁。
2)创建一对公私钥,创建账户,并部署合约。
创建私钥公钥:
创建代币账户:
部署代币合约:
创建代币:
发布代币:
查询代币余额:
创建账号:
EOS转账 :
#cleos -u http://nodeos:80 push action eosio.token transfer '["eosio", "alex", "10000.0000 SYS", ""]' -p eosio
3)创建BP,所谓BP就是EOS上的出块节点(block producer),到6月2日 EOS主网上线,全网应该一共21个BP节点,每个节点都要经过EOS的投票选举产生,现在我们的环境里还没有一个被选举的BP节点,所以需要通过抵押EOS的方式进行投票,当投票超过150M个EOS的时候,得票最多的前21个节点就是BP节点了,当然我们的BaaS受部署规模限制,不一样定要到21个节点,所以我们选举4个BP节点,执行如下命令:
创建账户bp1作为出块节点:
导入刚才bp1的私钥:
注册bp1为bp节点:
eosio抵押EOS,投票给bp1:
用抵押的EOS投票给bp1:
到这一步一个最最基本的EOS BaaS就算部署完毕了。
此时你就可以在你的终端上看到类似如下输出: