【云计算的1024种玩法】1小时使用阿里云区块链服务创建一个区块链小游戏

  1. 云栖社区>
  2. 博客>
  3. 正文

【云计算的1024种玩法】1小时使用阿里云区块链服务创建一个区块链小游戏

妙正灰 2018-10-28 16:09:11 浏览1883

前言

前言和介绍部分的阅读不算在一小时里哟~~~

区块链绝对是17 18年的热词,也是国家各种文件所重点支持的新型技术,几乎大家都会提区块链,企业也都很愿意基于区块链来解决的信任场景,但是苦于构建底层架构的复杂以及相关成本没有办法实施。而区块链服务就是为此而生的。

介绍

目前阿里云的区块链服务即 BlockChain as a Service,简称 BaaS,是一款 PaaS 层的产品,提供了基于阿里云构建的区块链平台服务,用户可以更专注于区块链服务的开发而不用将大量精力浪费在底层服务的部署上,我们不需要指导底层用了什么配置,什么机制,只要专注开发应用即可,因为区块链往往应用在一些金融、供应链等核心领域,如果没有一个安全稳定的运行环境,这将是一场灾难。

区块链也叫做分布式账本数据库,所以我们将 BaaS 理解为一款云数据库。相类似的阿里云提供的云数据库 MySQL 版提供了较社区版自建更好的服务、体验、稳定性和可靠性,但是用户的程序还是得自行开发以以来于云数据库 MySQL 版。同理区块链服务也仅仅是提供了一个分布式账本数据库,解决了信赖问题,但是针对其所映射的理念的实现则依旧需要进行开发。

目前阿里云的区块链服务主要是提供针对企业场景的联盟链,有两大底层平台 Hyperledger Fabric(超级账本) 和 蚂蚁区块链。

HyperledgerFabric是Linux基金会旗下的开源项目,起初是由 IBM 和 Digital Asset并赠送给 Hyperledger 项目的,在开源领域拥有非常高的声望,同时获得支持也更多,有非常多基于 Hyperledger Fabric 的区块链开源项目可以借鉴。蚂蚁区块链则是阿里集团主要是蚂蚁金服输出的联盟链项目,暂未开源,阿里作为区块链专利最多的企业,蚂蚁区块链的实力可见一斑,TPS可以高到250000,秒杀其他竞品,但是由于开放性不强等原因,其支持并不广泛,没有可以借鉴的开源项目。

教程

这里我们以开源生态比较完善的 Hyperledger Fabric 来写教程。这是创建环境的流程图,我们按这个流程走:

image

创建组织

个区块链网络是一个联盟,一个联盟由多个组织组成。组织是参与区块链网络的企业、政府机构、团体等实体。

创建组织其实很简单,输入名称和域名,然后就是选择地域和规格了。

image

创建联盟

一个区块链网络是一个联盟,一个联盟由多个组织组成。

一、这里创建策略是这样的:

  • Any(任一组织同意):在该联盟中创建一个新的通道时,不需要该新通道内其他组织成员的同意。
  • All(所有组织同意):在该联盟中创建一个新的通道时,需要该新通道内所有组织成员的同意。

不过暂时只有一个 Any 可选。

二、组织,组织的话可以和联盟不在同一个的地域。 暂时不知道他们之间通信的流量会怎么收费。

三、共识机制,默认就是 Kafka,区块链Hyperledger Fabric基于Kafka提供CFT(Crash Fault Tolerence)类型的共识机制。

四、不同的规格意味着底层的服务器规格不同。

image
image

组织加入联盟

进入联盟中就能 邀请组织加入 了。

image

然后就有一个邀请链接,复制地址通过邮件或者其他途径邀请即可,是可以邀请其他阿里云用户的。理论上创建联盟收费,创建组织不收费。

image

打开链接后,会识别你名下的组织然后是否加入所对应的联盟。

image

然后再进入到联盟中,可以看到 待批准 处就有刚才申请加入的组织了,当然是批准。

image

创建通道

在联盟中点击 通道添加通道,然后输入名称和组织即可。

通道 主要用于实现区块链网络中业务的隔离。一个联盟中可以有多个通道,每个通道可代表一项业务,并且对应一套账本。通道内的成员为业务参与方(即联盟内的组织),一个组织可以加入多个通道。

image

然后进行审批

image

自然是同意

image

创建码链

进入到对应用户处,进行码链的创建,上传码链

image

码链需要通过开发工具打包对应的码链然后上传,码链开发指南可以参考 Chaincode for Developers,我们可以试着学习后面的 DEMO 部署章节,获取已经开发好的码链。

接着选择对应的部署通道

然后是背书策略,背书策略举例:OR ('Org1MSP.member','Org2MSP.member')表示此通道中的两个组织任何一方背书即可;AND (‘Org1MSP.member’,’Org2MSP.member’)表示需要此通道中的两个组织背书。

image

上传链码成功后,链码 标签页的列表中会出现该链码。其中 链码 列显示的链码名称以及 版本 列显示的链码版本号都是您在本地打包链码时指定的。

image

可以看到上传后,通道状态是 “未实例化” ,自然是点击 安装

image

然后再点击 实例化

image

然后会弹出一个背书策略,一般来说系统自动显示刚才上传链码时填写的背书策略。当然我们也可以保留该策略,也可以修改为新的策略。

image

然后就成功的部署完码链了。

1539915569697

有细心的朋友可能发现我的码链名称从 work1 变成了work2 因为之前拿 Work1 做测试,没有截图,然后要再做的时候,就必须新建一个码链了,因为码链不能被删除。

创建用户

这里的用户就有点类似于数据库里的用户了, 进入组织的 用户 菜单,然后 新增用户。 很简单数据账号密码即可。

image

部署好用户后就可以下载 SDK 用户开发部署了。

image

部署 DEMO

Demo 我们拿 marbles 作为演示,因为这是一个 GUI 演示环境,比较直观。 为了再简化 DEMO 部署难度,这里拿阿里云提供编译好码链的版本。

我们需要准备一个支持 Node.JS 的环境,不一定要服务器,本地都可以。截至发文,marbles 仅支持 V6 和 V8,还不支持 V10。

准备

我们下载源码包并解压

wget https://baas-sdk.oss-cn-hangzhou.aliyuncs.com/node-sdk-demo-1.0.0.tar.gz
tar xzf node-sdk-demo-1.0.0.tar.gz

部署SDK

这里下载了 5.0.0,会解压出一个 node-sdk-demo 目录,我们将 创建用户 后下的 SDK 压缩包中的 connection-profile-standard.json 文件上传到对应的 /path/to/node-sdk-demo/config

image

然后依旧是修改这个文件,先格式化一下,用相关代码编辑器的插件或者用 https://jsonlint.com/ 都可以:

在最后几行的 "certificateAuthorities": {} 代码块下添加:

 "registrar": [
        {
            "enrollId": "账号",
            "enrollSecret": "密码"
        }
  ],

最终效果:

image

部署码链

/node-sdk-demo/chaincode 下的 marbles_v4.cc 根据之前的部署码链教程上传即可。

Node 安装

回到 node-sdk-demo 目录,我们开始安装。

一、安装 gulp 。

npm install --global gulp

二、安装 marbles 的依赖包

npm install

国内的话嫌速度慢可以安装 CNPM

如果结束后出现:

 run `npm audit fix` to fix them, or `npm audit` for details

建议不要修复,修复了会启动不了,先忽略吧。

启动

最后运行

gulp marbles_baas

最后输出:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
info: Detected that we have NOT launched successfully yet
debug: Open your browser to http://localhost:3001 and login as "admin" to initiate startup
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

就可以打开

http://localhost:3001 (本地)

http://你的公网ip:3001 (服务器上)

配置

然后我们可以看到夏目的引导页,选择 Guided

image

然后在第三步:

image

  • channel: 填写上传 marbles_v4 的通道名,如 work1,主要是区分业务用的,和我们之前创建的通道一致就行
  • chaincode_id: 填写 marbles
  • chaincode_version: 填写 v4

然后我们创建角色:

image

然后我们就可以愉快的玩耍了:

image

可以看到每个弹珠的区块链信息。

我们可以在区块链服务的后台监控看到相关信息:

image

是不是玩耍区块链也还是满简单的?