区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠信息记录的技术方案。该方案主要让参与系统中的所有节点,使用密码学的计算方法产生数据区块,每一个区块中包含了过去一段时间内所有价值交易的信息,再把加密区块按照时间顺序链接成永久、不可逆向修改的记录。它提供了一种去中心化的、无需信任积累的信用建立范式。
互联网的发展使得全球之间的互动越来越紧密,伴随而来的就是巨大的信任鸿沟。传统的数据库对信息的记录大多不对外公开,而且为确保其数据的有效性,需要第三方机构提供信任保证。也就是说,传统数据库的维护和其中数据的真实性均由一个或少数几个中心式机构所承担和保障。而区块链技术的诞生,正是解决了在互联网纷繁复杂的全球体系中建立价值转移的共识机制问题。具有去中心化、无须中心信任、不可篡改和加密安全特点的区块链技术正在向着决策制定、金融、征信、信贷等方向,从理论探讨走向实践应用。
区块链技术不是新的技术手段的革新,而是对已有技术组合形成的逻辑上的创新。它基本思想可以这样理解:通过建立一个互联网上的公共账本,由网络中所有参与的节点共同在账本上记账与审核,每个节点计算机都维护一个同样的账本,所有记录的数据都是公开透明的,不需要一个中心服务器作为信任中介,在技术层面就能保证信息的真实性、不可篡改性。
越来越多的人相信,去中心化的数据区块链技术将改变普通大众的生活,并对包括金融、版权、物联网、物流等多个产业都将产生深远的影响。世界各大公司也开始将目光投到区块链的发展上。包括比特币、以太币等电子货币,和诸如微软Azure平台也推出了区块链的服务。科技巨头IBM公司则在GitHub上开源了多达4.4万行数据区块链技术源代码(OpenBlockChain),展示了其进军区块链的决心。而在IBM宣布参加由Linux基金会领头的开源区块链项目超级账本(Hyperledger)后,将这套代码托管给Linux基金会进行修改、再开发、管理。
IBM在Github上公布了其区块链的开源项目代码。提供了基础的区块链的开发,测试环境。提供了底层区块链的生成机制,封装了区块链的基本技术支撑。在区块链的应用层进行对应的程序编写,实现自定义的功能。OpenBlockChain提供了多种程序接口(CLI, REST API,SDKs等),用以测试代码运行结果。用户可以编写自己的程序,在区块链上构建自己的应用。提供开发,测试环境的搭建,简化区块的生成流程。开发者可以使用它们自己喜欢的编辑器/操作系统,并且为长期开发的团队提供可控制的环境。
OpenBlockChain在当前开发环境使用vagrant软件来运行一个ubuntu镜像,ubuntu系统中运行着包含该项目代码的Docker容器。通过主机->ubuntu->docker->SSH登录的方式来模拟区块链基础的生成过程。部署需要的软件、环境如下(下文演示的计算机操作系统为mac OS X 10.11.6,通过终端CLI的方式进行演示):
• Gitclient
• Go(1.6或以上),主机配置好GOPATH变量。
• Vagrant(1.7.4版本以上)-基于Ruby的工具,用于创建和部署虚拟化开发环境
• Virtualbox(5.0之上)
• BIOS开启了虚拟化,对于未开启虚拟化的电脑,可以在security中进行设置。
OpenBlockChain开发环境部署步骤:
1、安装好对应的环境软件,为host配置GOPATH;
2、在$GOPATH/src路径下创建github.com/openblockchain文件夹,通过git client复制openblcokchain obc-peer项目。可以在Github上关注IBM公布开源的obc-peer项目(https://github.com/openblockchain/obc-peer)。通过git clone https://github.com/<username>/obc-peer.git命令复制该项目;
3、在GOPATH之外的路径,建立workspace文件夹,在该文件夹中使用git clone https://github.com/openblockchain/obc-dev-env.git命令复制obc-dev-env项目;
4、命令行界面CLI中,导航进入workspace/obc-dev-env,使用vagrant up命令启动虚拟机。
5、在虚拟机启动安装过程中,会下载ubuntu镜像及其它相关文件,在这一步可能会很久,耐心等待即可;
6.虚拟机安装完毕后,通过vagrantssh命令登陆到ubuntu镜像系统中,默认将自动登录系统。
OpenBlockChain开发环境体验:
区块链代码可以在上述OpenBlockChain搭建的单机环境中测试,编译自己的区块链应用代码,而不用建立复杂的区块链网络。在实际的编译、调试代码的过程中,会在vagrant的开发环境中使用多个终端窗口:1个终端窗口模拟审核节点;1个终端窗口运行代码;另一个终端窗口运行CLI或者REST API的命令来执行具体交易。有需要的开发者可以开启额外的一个窗口,运行安全节点实现证书授权功能(本文没有开启安全节点)。下面将结合截图,来介绍IBM基于docker的区块链项目OpenBlockChain。
1. 审核节点
审核节点负责审核交易,生成区块的计算工作。在终端中,导航到上文workspace/obc-dev-env文件夹下,通过vagrant up命令启动虚拟机。然后通过vagrant ssh登录到主机上已经部署的ubuntu系统中。该系统已经集成了docker容器,包含了IBM OpenBlockChain项目。通过下面的步骤,启动审核节点
l 导航到obc-peer文件夹下
cd $GOPATH/src/github.com/openblockchain/obc-peer
l 编译项目
go build
l 查看相关命令(可选步骤)
./obc-peer (如图1)
图1 obc-peer的命令列表
l 启动审核节点
./obc-peer peer --peer-chaincodedev(启动后,如图2)
图2 审核节点启动后显示效果
2. 代码节点
代码节点负责部署使用者编写的代码,通过代码的运行进行具体的交易,显示代码运行的结果。OpenBlockChain项目提供了示例代码,下面以这个代码为演示对象。开启一个新的终端,通过同样的步骤,登录到系统上,然后执行下面的步骤:
l 导航到代码所在的文件夹
cd$GOPATH/src/github.com/openblockchain/obc-peer/openchain/example/chaincode/chaincode_example
l 编译代码 go build
l 注册代码(注册代码运行名称为mycc)
OPENCHAIN_CHAINCODE_ID_NAME=mycc OPENCHAIN_PEER_ADDRESS=0.0.0.0:30303./chaincode_example
代码注册后,运行效果如图3。代码节点的终端里将会反馈后续具体部署、交易的信息。
图3 代码节点初始启动
3. 执行节点
在执行节点通过以下一些步骤,实现初始化账户、执行交易、查询交易、查看区块信息等功能。代码运行的实时结果可以在代码节点终端内显示。
l 初始化两个账户
初始化a,b两个账户,a拥有100个价值单位,b拥有200个价值单位。在代码运行节点反馈如图4。
cd $GOPATH/src/github.com/openblockchain/obc-peer
./obc-peer chaincode deploy -n mycc -c'{"Function":"init", "Args":["a","100", "b", "200"]}'
图4初始化账户反馈
l 进行一笔交易
a账户转移10个单位的价值给b。在代码运行节点反馈如图5。
./obc-peer chaincode invoke -u jim -l golang -n mycc-c '{"Function": "invoke", "Args":["a", "b", "10"]}'
图5 进行一笔交易后反馈
l 查询某个账户的余额
查询b账户当前余额。在代码运行节点反馈如图6。
./obc-peer chaincode query -l golang -n mycc -c'{"Function": "query", "Args": ["b"]}'
图6 查询把账户余额反馈
l 查询特定区块信息
通过之前的几个步骤,生成了区块,可以查询区块(第7个区块)的信息。代码运行节点反馈如图7。
curl 10.0.2.15:5000/chain/blocks/7
图7 查询第7个区块的信息反馈
将反馈信息结构化以后,如下所示:
{
"transactions":[{
"type":3,
"chaincodeID":"EgRteWNj",
"payload":"Ch4IARIGEgRteWNjGhIKBmludm9rZRIBYRIBYhICMTA=",
"uuid":"e9ecda4e-2400-4d15-a585-b9ce98fe2e1a",
"timestamp":{"seconds":1468165453,"nanos":843543901}}],
"stateHash":"jm/mtE3BDMAr/E6P+vaf0a9RMMDi3tpHnXC97aA6IQdiGFyoARvB29fmkOC+lTSmO0lwuBOdmeHXhnHpeyOJ2Q==",
"previousBlockHash":"PbXgN4eWBO56FCP4HVuz4VOIa5onu4q9ryM0m3eroBne8pPbB7qT0HAdw2RLoCUZjIiyAUUVeDf7pfEhDKAiGA==",
"nonHashData":{
"localLedgerCommitTimestamp":{
"seconds":1468165454,
"nanos":901195665
}
}
}
以上就是基于docker的IBM OpenBlockChain区块链的应用示例。在测试环境下,通过审核节点生成了对交易信息记录的区块。与比特币区块链的区块主体信息不同,示例代码可以根据自身的需求,加入特定的字段,来完成特定的信息描述功能。
区块链技术基本原理的广泛应用让各行业对于此种技术应用的达到了新高度,全新的技术与全新的理念促进了各行业的新的发展,这种推动力对于社会的影响,经济活动的促进也是巨大的,很多崭新的行业现象将会陆续发生。
互联网刚刚进入大数据时代,但是从目前来看,大数据的相关技术已经形成体系。但是当进入到区块链数据库阶段,将进入到真正的强信任背书的大数据时代。这里面的所有数据都获得坚不可摧的质量,任何人都没有能力也没有必要去质疑。大数据时代,创新与价值挖掘都来自数据和信息。数据的流通必然能带来全新的产业、生产模式的创新。将区块链技术应用到数据的流通过程中,形成以区块链技术为把控的数据流通新方式,将改变现在数据流通过程中权限不明确,职责不匹配的问题。