王晓轩 分布式实验室 


现在区块链技术很是热门,很多大公司都纷纷开辟了自己关于区块链的相关业务部门,比如数字金融,产品溯源等,那么什么是区块链技术呢?区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。在区块链技术的迭代过程中,大家公认比特币是区块链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就算部署完毕了。
此时你就可以在你的终端上看到类似如下输出:


©著作权归作者所有:来自51CTO博客作者mob604756fbb3bd的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 腾讯云TSF微服务平台及ServiceMesh技术实践
  2. ELasticSearch-ES集群原理与搭建
  3. Kubernetes节点之间的ping监控
  4. NSX-T与K8S集成方案与实践
  5. 面试官:你看过Redis数据结构底层实现吗?
  6. 驰骋工作流程引擎——流程设计器操作说明书
  7. 驰骋工作流引擎设计系列01 流程元素设计
  8. 驰骋工作流引擎设计系列08 接收人规则设计
  9. 关于修改工作流引擎退回规则的声明-ccflow.txt

随机推荐

  1. android studio每次启动都要在fetching A
  2. Android收集崩溃信息的原理
  3. Android中的HandlerThread和IntentServic
  4. Android(安卓)EditText软键盘弹出时防止
  5. AndroidO Camera 分析(一): (API 2)openCame
  6. mac添加android的adb等工具到环境变量
  7. android 中文 api (71) ―― BluetoothServ
  8. React native Android(安卓)命令 打包apk
  9. 51. (android开发)线性布局、相对布局、
  10. Android札记