01 问题
1、什么是比特币?
2、什么是区块链?
3、区块链有什么用?
4、如何开发一个区块链应用?
5、小白,金融狗,程序猿和上帝眼中的区块链?
2 关键词
代币,白皮书,记账,转账,钱包,信任,监管,合约,加密,网络,分布式,重构,商业,世界观
03 全文概要
区块链不是什么新技术,而是将一系列成熟的技术组合起来。由于去中心化和不可篡改的特点,通过对社会信任体系的重构,能够提升社会生产效率。市面上介绍区块链的文章多如牛毛,本文力求不多一句废话,讲明白不同人眼中的区块链长成啥样的,有什么用,给我们带来什么思考。
04 阿土币发行大事件
本节通过阿土币发行流程,从观感上来感受一下最近热得发烫的区块链究竟是个什么东西,下面章节会从不同角色和角度一步一步分析区块链的来龙去脉。我们先不管什么去中心化什么账本什么区块链,直接上干货,怎么发行区块链应用?对的,你们熟知的撒币一夜暴富神话,将在这一节来介绍。
4.1创建区块链应用
我们首选的是基于第二代区块链应用的开发平台以太坊。首选我们需要的是下载一个以太坊钱包。
选择合适的版本下载以太坊钱包:
https://github.com/ethereum/mist/releases
打开钱包等待P2P网络验证
区块同步
新建智能合约
CONTRACT CODE
智能合约源代码,这也是以太坊区块链应用的核心部分,也是以太坊较比特币架构的创新之处,比如我的智能合约源码实现的是去中心化无法篡改的麻将自摸验证记录,这样打牌就无法出千了,一旦自摸胡牌了,牌面记录都是无法篡改的。
Initial Supply
发行代币总数量,我发行的是1024*1024=1048574枚。假如一枚代币等值是一比特币的话,我留10分之一想想都激动了。
Token Name
代币名称,我们暂且用花名阿土币
Token synbol
代币符号,比如比特币是BTC,我们就叫ATB
部署应用
4.2 白皮书
白皮书就是我们发行区块链项目的说明书,该项目核心功能是去中心化无法篡改的麻将自摸验证记录,这样打牌就无法出千了,一旦自摸胡牌了,牌面记录都是无法篡改的。我们是用去中心化的思想来颠覆传统棋牌行业的规则,真正做到公平。类似的声明可能需要专业棋牌人士能说得更加动听。
4.3 区块链应用ICO
IPO
证券界的IPO(Initial Public Offering),其实本质是一种公开发行,筹集资金的一种方式。
ICO
ICO(是Initial Coin Offering),首次币发行,源自股票市场的首次公开发行(IPO)概念,是区块链项目首次发行代币,募集比特币、解决以太坊等通用数字货币的行为。通俗点说就是众筹比特币以太币等硬通货的代币,然后哪比特币再去换钱。
看看下面的代币排行榜,哪天加把劲冲进了前十,就能实现你们要的财富自由了,看看排名第10的Dash一枚都要683美刀, 是不是很次激。
05 大妈眼中的区块链
好了,假设我们的阿土币真的冲进了前十(偷笑)。撒币阶段你已经获取了一百枚ATB(可能你买的时候一枚才一美刀),假设一枚等价法币500$的话,那就是5万美刀。算一下这波操作赚了多少,是不是瞬间觉得世界很美好。
说是这样说,假如是三四年前发行阿土币,那时候可是还没多少人看好的,大部分人还是在观望,那时候还是币圈的资深人士圈内玩玩而已。但是现在已经火到大妈都在谈区块链的时候了,我们就不得不说说大妈们眼中的区块链是什么。前两年股市大牛的时候,我们能看到大妈的身影,是不是很熟悉,大家都知道最后大多数大妈都是亏钱退场的。大妈所到的地方往往要注意泡沫的存在,而现阶段市面上多数的区块链应用,都是基于开源项目,有些甚至连源码都懒得改就拿出来圈钱,这才有大妈疯狂的涌入。
这已经不单单的投资/投机行为,而已经成了一种新的社会现象,这里我们就不多讲,我们的目标是用最快捷的方式讲清楚什么是区块链。
06 小白眼中的区块链
小白们要比大妈更为理性,起码我们要扔钱出去之前,得了解一下钱扔到哪去了,本节就是一些概念的普及和解释,不求非常严谨,但求能够增加对区块链的立体印象。
6.1比特币
既然有个“币”字那肯定是跟钱有关的,比如说人民币,美元,都是可以用来支付的东西,那其实就是钱嘛。比特币的第一笔支付发生在美国,是一个程序员花了2万个比特币买了一个披萨,说明那个时候就已经有人愿意接受比特币作为“钱”来交换商品。人民币/美元存在你的钱包里,存在银行的柜员机里,而且还存在你的支付宝里面。严格意义上讲,你支付宝里面的钱不只是个数字,而是跟实际纸币有一个映射关系,现实中存在的纸币才能体现在你的支付宝钱包的数字。那比特币是个什么东西?从支付宝里面的电子货币过度到比特币成为真正的数字货币。
纸币是银行印出来的,理论上只有他们开心可以随便印,爱印多少是多少(当然政府肯定是不会同意的)。而比特币作为一种数字货币,也会从开始的50个每年逐渐增加,大概增加到100年后就会增加到2100万个,然后就不再增加了,这样我们就不怕像银行那样无限制的增加纸币导致我们手头的钱不值钱了。
纸币是银行印的,也是通过银行流入到社会上去。而比特币则不需要发行机构去发行货币,它会自发的的流入到一部分有比特币账户的人的比特币钱包里面(细节在技术部分会详细说明)。就类似这世界黄金的总量也是恒定的,所以比特币也被称为数字黄金,具备抗通货膨胀的属性。至此,我们知道比特币是一种数字货币,从观感上看它类似支付宝钱包里面的数字一样(虽然背后的机制是完全不一样的)。
如果只是看起来跟支付宝钱包一样的比特币钱包,那其实也没什么特别,那究竟是什么魔法让它能有那么高的价格(最高的时候接近2万美刀一枚),答案就是区块链。
6.2区块链
首先,区块链起源于比特币,区块链的概念脱胎于比特币,然后又茁壮成长。从技术上看,区块链是众多技术的创新组合。虽然区块链并没有使用了什么革命性的新技术,但却实打实影响了金融,生活,文化的进化。首先我们当然要问问区块链有什么用?广义上讲,区块链就是一个个存放数据组成的链,最基础的功能当然是记录数据。然而并不是简单的记录数据name简单,区块链技术实现了去中心化组织,不可篡改/伪造记录,匿名三大核心功能:
去中心化
去中心化顾名思义就是没有中心的意思。我们知道区块链是一条存放数据得链条,环环相扣,去中心化就是没有谁能单独控制这条数据链,而是每一台能连到区块链网络的电脑上都保存了相同的数据链条。(至于如何保证每个电脑上的数据链条都一样,细节在技术部分会详解)
不可篡改
如果单单是去中心化,充其量只是多了很多副本,多个副本还会导致数据传送效率下降。另外的一个非常重要的特点就是不可篡改/伪造的技术。区块链每个数据块都采用密码学保证只要数据链上任意一块数据被篡改,那么之前的链条都不可用。这个特点解决了几千年以来的信任体系的构建,再也不需要第三方来介入。
匿名
匿名对标的是实名制,在互联网实名制成为基本设施的情况下,匿名性成了一大重要的优势,每一个区块上记录数据得账户只是一串能标明用户的唯一ID,但跟用户的信息确毫无关联。
6.3区块链应用
既然区块链技术已经在高速发展中,那么除了最火的比特币之外,肯定还有别的项目跟着进化。可惜目前市面上能实际提升社会生产效率的区块链应用还没成熟,即使没有在工业方面成熟应用,但是发展空间却是巨大的。区块链从根本上解决了人与人之间的信任问题,几千年来经济的发展本质上就是朝着优化社会信任体系的方向在发展,信任成本降低了,那么生活生产效率自然也提升了。由于区块链数据得不开篡改特征,可以创新的应用到各个领域,具体的应用场景非常丰富:
金融服务
转账,支付等货币功能
商品溯源
商品制造过程每个环节采集数据存储在区块链,无法伪造篡改
物联网
元器件数据采集
供应链
类似商品溯源
07 金融狗眼中的区块链
货币是人类文明发展过程中的一大发明,最重要的职能包括价值尺度、流通手段、贮藏手段。很难想象离开了货币,现代社会庞大而复杂的经济和金融体系还能否持续运转。历史上,货币的形态经历了多个阶段的演化,包括实物货币、金属货币、代用货币、信用货币、电子货币、数字货币等。货币自身的价值依托也从实物价值、发行方信用价值,到今天出现的对信息系统(包括算法、数学、密码学、软件等)的信任价值。
这一节我们从交易的故事来区块链的金融属性。
7.1交易的进化
物物交换
很久很久以前有一个荒岛住了一群原住民,他们生性勤劳,勤勤恳恳,这个荒岛也慢慢变成肥沃之乡。由于物产丰富,生活富足后家家户户多多少少都有些富余的农副产品。张大妈家喜欢吃羊肉就拿家里多余的苹果去换李大妈家的羊。大家经常这么换,也没有说谁家比较吃亏,但是如果张大妈吃腻了只想换半只羊就比较麻烦了。这时候物物交换的缺点就暴露出来了。
实物货币
后来大家觉得这样实在太麻烦了,后面村长就召集全体村民做了约定,一头羊对应10克黄金,一箱苹果对应1克黄金。这样一来大家以后出去换东西就带金子就可以了,也非常方便。但是由于岛屿的金子有限,而且出门老是带金子也不安全。
符号货币
后面村长退休后闲来无事,想为村民做点事。他跟全体村民协商了一下,谁家钱多的交易需求频繁的可以把金子押到村长家,然后村长开了张条子,注明跟金子等值的数目,加上村长特有的签名。由于村长德高望重而且书法高超,他的签名别人无法复制,所以大家都放心的拿着村长的开的条子去交换货物。
虚拟货币
后来由于村长开的条子长期磨损,也有些村民丢失了,导致村民兑换金子的时候有了纠纷。这个时候村长经过一番思考后,决定在每个村民兑换金子的时候,自己也得把每一笔兑换金子的条子记录在自己的账本上,这样万一有些条子丢失或者磨损,村民拿过来跟村长当面对质就可以。虽然记账增加了村长很多的工作量,但是方便了村民的生活,村长也觉得很值。
由于记账的同时还得保存管理好兑换金子的条子,定期销毁,新增条子,这让老村长非常劳累,这样下去身体肯定吃不消的。刚好村长左右邻居住了老王和老李,他们经常交换条子来换取评估和羊肉。村长看着账本上记录了每一位村民账上的金额数,灵机一动,如果每次他们交换的时候我把这次交换记录到账本上,同时更新老王老李的账户,那岂不是都不用条子了。
想到这里他非常兴奋,于是召集了村民告诉了他这个想法,村民被告知以后再也不需要带着条子出门,都觉得很方便,于是村长再也不需要维护条子了。谁家有需要交易就跟村长说一声,村长把交易记录记录到账本上,然后更新了对应账户的金额就可以了。
这就是金本位的虚拟货币,村民的财富就是村长账本上的金额数。
数字货币
这样的交易促进了岛屿的发展,大家也都习惯了这样的交易方式,为了表达对村长的感谢,大家每一次交易都会付一点点的手续费给村长。村长由于年事已高,体力无法应对那么多的交易量,所以请来了年轻的伙计小王来帮忙记账。哪知道小王耍滑头,偷偷把部分村民的账户余额减少了,伪造交易记录,转到自己表妹的账户,这样慢慢的部分村民也发现不对劲了,最后废了九牛二虎之力才查出来是小王搞的鬼,气的村长卧病不起。小王成了众矢之的,恼羞成怒,竟然把账本扔到灶台里烧起来。这下村里都炸开了,这可如何是好,大家对村长可是敬畏有加,根本没有把交易记录私底下再记录一遍。说时迟那时快,小王他爹老王眼疾手快冒着烧伤的危险把本子取出来,千钧一发直接把本子上的火灭了,好在只是烧了封面和前面几页。
还好影响不算太大,最近几页的交易记录,村民凭记忆也凑得七七八八。由于村长年事已高,而村里又没有如此德高望重之人,这些村民陷入了长长的困惑之中。
这个时候平时寡言少语的村长儿子站了出来,他目睹了整个过程,然后冷静的提出了三个问题。
以后账本不能只由村长一个人记录,不然哪天要是再被烧了一次,全村都乱了套
以后账本记录交易需要当事人的签名,不然很容易被伪造和篡改
以后账本记录交易的当事人不要签自己的名字,不然财富全都暴露了,财不外露嘛
经历了那次账本火烧事件后,村民们都知道事态的严重性,纷纷发问有什么解决的办法。平时喜欢钻研各种书籍的村长儿子不紧不慢的介绍起来:
以后账本都由全体村民共同记录
村长儿子给每个村民都发了一本空白的账本,以后每一次交易大家都要在村口就近的广播站喊一声,然后大家都不约而同的把这条交易记录到自己的账本里面。这样即使哪个村民不小心丢了账本,也可以借邻居的账本抄一遍就行了。
可是村子那么大,部分村民可能没听到,而且村民没办法时时刻刻拿着账本记录,那多麻烦啊。于是村长儿子告诉听到广播的村民有空的就把记录记到账本,然后碰邻居也帮忙说一声,这样大家口口相传,一阵子过去后大家基本也就把记录补上了。
这时候问题又来了,有时候广播站旁边的村民老李在睡觉没听到早上的交易记录,下午睡醒才听到新的记录,这样就漏掉了一些记录,这可是严重的漏洞。于是村长儿子想了个办法,规定账本每一页记录都有先后顺序,前面一页没记录完就不能记录后面一页,这样即使你少了几页也不会跳掉部分交易。
可是,怎么才知道账目每一页跟上一页对应上?于是村长儿子又设计了一个规则,每一页的备注信息都包含上一页的副标题,这样账本上每一页都依赖上一页,形成了一条账本页链条。大家记账的时候都左邻右里的询问一遍,看看谁家的账本记得最多页,然后大家把自己账本缺的记录一页一页抄着补上。
但是,账本上每一页的副标题究竟又谁来决定呢,广播交易记录的时候是没有提到副标题的,如果大家都各自定副标题,那账本肯定很乱,可能同一笔记录被记录成多个副标题。那么如何保证一页记录上只有唯一一个副标题呢?村长儿子巧妙的利用村里的灯谜文化,村里公布栏每天都有新的灯谜题,谁先猜到答案谁就有记录当天那一页账本的权利。由于村里的灯谜非常难,每次大家都要想半天才猜得到,这样猜到得人就把答案当成副标题。
这些基本解决了账本分布式记录的问题,可以大家凭什么那么积极抢着去记账呢?原因是得到记录权利的村民有手续费。这下通过一定的规则制度,让村民交易的记录都陆陆续续同步到各自手头上的账本。现在也不怕谁把账本扔火里烧了。
每条交易记录都必须有签名信息
上面介绍的记账方式大前提是记账的村民都是一等良民,不像小王一样耍滑头篡改或者伪造记录,可是光靠村民的自觉性肯定是不够的,还必须设计出一种规则制度来保障记录不被篡改。由于账本每一页都依赖上一页的副标题,村长儿子加入了一种校验规则,假如其中一页被改了副标题,那后面依赖的账本页就都失效了,可如何检查某一页账本是否被篡改了呢?需要做到两点,每条交易记录都必须由发起人签名确认才算是合法的,第二点是如果哪一页被篡改了,能显示出痕迹。于是村长儿子用了一种米浆泡过的纸张来记账,记账后等一段时间墨迹干了,如果后面有不良分子想改账本,被改的那页就会泛黄,从而保证账本是无法被篡改的。
这个时候虽然能保证账本的记录无法被篡改,但是假如有不良分子拿着精心伪造过的账本给其他村民做抄写副本呢,如果没有一种规则来判断谁的账本才是对的,那这样持续复制下去也是乱套了。这时候村长儿子又加了个限制规则,规定每新记录的一页,必须得到全村51%以上的人同意才算是合法的账目。这样就能保证记入账本的交易记录都是合法的。
签名信息为特殊印章
每个村民都有一个特殊的印章,印章上写的不是自己的名字,而是标明身份的号码,类似身份证号码。这样可以有效的防止隐私的泄露。
至此,我们描绘了交易的进化过程,从实物到数字的演化,到了数字货币阶段,交易都在一个去中心化的记账体系下进行。
7.2重构信用体系
交易最大的成本在于如何解决信用问题,比特币就是区块链的一个典型应用,它具备的这些特征可以很好的解决信任问题,构筑了新的信用体系,最低层的信任关系逻辑重构将会催生上层创新业务的发展。
08 程序狗眼中的区块链
上一节我们通过货币演进过程,整个过程不涉及丝毫现代计算机技术,完全是按照区块链的思想来模拟出来的场景,本节将从技术角度详细解析区块链背后的技术。如果上节描述荒岛村民的分布式记账规则真的是历史存在的,而且刚好你又会写代码,那么比特币可能就是你发明的了。
8.1基础概念
区块链技术并不是新兴的技术,而是由一系列成熟的已有技术组合而成的一套协议,包括散列算法,加密算法,P2P网络,共识算法等技术组合而成,所以我们有必要先了解一些涉及的基本概念。
区块链
区块链(英语:blockchain 或 block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网。中本聪在2008年,于《比特币白皮书》中提出“区块链”概念,并在2009年创立了比特币社会网络,开发出第一个区块,即“创世区块”。
哈希算法
安全散列算法(Secure Hash Algorithm,缩写为SHA),是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的长度固定的字符串(又称消息摘要)的算法
数字摘要
数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单向Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。
非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
P2P网络
对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。
共识算法
分为PBFT(拜占庭容错)、PAXOS、RAFT算法
8.2数据结构
记账微观过程
前文我们从宏观的金融角度分析了区块链思想在分布式记账的应用,本节我们从微观的技术角度来分析区块链实现的过程。我们假设一个宿舍四个人之间的转账场景。
手写签名
转账记录
手写签名
小明需要付30给小红 | 小明 |
小黄需要付50给小明 | 小黄 |
原始手工记账是写在账本上,然后签名,这样的缺点就是容易复制篡改,而且账本如果丢失就麻烦了
数字签名
数字签名能够确保对应性和可鉴别性
转账记录
数字签名
小明需要付30元给小红 | RSA(SK,SHA-256(小明需要付30元给小红)) |
小黄需要付50元给小明 | RSA(SK,SHA-256(小黄需要付50元给小明)) |
交易记录的文本先用哈希算法计算再用私钥进行非对称加密,这样确保如果交易记录被篡改,那么交易记录的消息摘要也变化了。用转账人的私钥加密后用公钥解密就能确保转账记录的可鉴别性
余额验证
复合记录
数字签名
小明支付30BTC给小红 -> 小红支付20BTC给小黄 | RSA(SK,SHA-256(小明支付30BTC给小红 -> 小红支付20BTC给小黄)) |
小红支付50BTC给小黄 -> 小黄支付20BTC给小明 | RSA(SK,SHA-256(小红支付50BTC给小黄 -> 小黄支付20BTC给小明)) |
每一次转账都有验证这笔数额的来源,是否有盈余,才足够转账
区块链数据结构
区块数据格式
版本号(version):版本号
哈希值(Hash):当前区块hash值
前驱区块哈希值(Previous Block):前驱区块hash值
后续区块哈希值(Next Block(s)):后续区块hash值
交易总数(Number Of Transactions):交易数量
时间戳(Timestamp):时间戳
随机数(Nonce):随机数,在比特币系统中,“挖矿”就是找这个随机数。
默克尔树根哈希值(Merkle Root):交易记录的默克尔根
区块体装的是记录列表
非法区块,该随机数下的哈希串前4位不为0(比特币实际需要的是前72,而且还在增加难度):
合法区块:
区块链的组成
区块链由一个一个的区块组成一条数据块链条,每一个区块都依赖上一个区块的哈希值
分布式区块链
多节点下的区块链分布
8.3同步过程
上文采用比特币的结构来说明区块链的基础数据结构,但是区块链的数据块增加机制是怎样的,如何保证每一个加入区块链末端的数据块都是合法的区块?
比特币采用的共识算法是拜占庭共识算法,也即是全网51%以上的客户端同意是合法的才可以加入区块链,从客户端同步数据来看,一般认为广播至少到达6个节点可认为同步到全网。每次同步都以最长的链条为基准,保证合法链条永远是最长的。
8.4技术架构
架构设计
(图片来源巴比特)
应用代码
区块链通用协议实现了在非安全环境下也无法伪造篡改的去中心化数据存储架构,脱胎于比特币而迅速发展起来。基于以太坊区块链平台的智能合约开发提供了一整套协议的打包,开发者只需有把精力放在具体的合约逻辑开发。
假设我们需要开发一个对赌的区块链应用,来解决赌约的信任问题,以前我们需要第三方公证,现在只需把对赌协议用代码实现就行,代码的执行依赖对赌内容的输入。比如说世界杯巴西是冠军老王请吃饭,不是的话则是老李请吃饭,如下伪代码:
String result = 对赌内容API.getResult();
if(result == "巴西")
print("老王请吃饭")
else
print("老李请吃饭")
就是这么简单的代码逻辑存储在区块链应用上,代码无法篡改,所以等世界杯结束后结果一目了然,谁也别想赖账。
基础架构
以最典型的区块链应用比特币来分析,代码分交易,合约,钱包,支付,运行模式,P2P网络,挖矿模块来实现比特币技术。
09 上帝眼中的区块链
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。从技术角度讲,区块链涉及到的领域比较杂,包括分布式、存储、密码学、心理学、经济学、博弈论、网络协议等。公有区块链所有交易记录都是公开可见的。搞大数据的人听了是不是开始激动起来了,确实,这里面能分析的东西还真不少,而且规模够大、影响力够大……实际上,已有文献证明,比特币区块链的交易记录最终是能追踪到用户的。
最后总结一下,区块链还处于高速发展之中,很多技术规范还未尽成熟,但前景肯定是开阔的,某种意义上讲,区块链已经成为了一种新的文化。
来源:编程原理(ID:codetenet)
延伸阅读
《Solidity编程:构建以太坊和区块链智能合约的初学者指南》
作者:作者:[印度]里特什 莫迪(Ritesh Modi)
长按二维码了解及购买
内容简介:
本书首先简要介绍区块链、以太坊及其中最重要的概念或组件。随后介绍如何安装所有必要的工具来编写、测试和调试以太坊上的Solidity合约。然后书中将探索Solidity源文件的布局及如何使用不同的数据类型,介绍构建智能合约时使用的运算符、控制结构和数据结构。最后通过Solidity介绍面向对象编程中的函数调用、返回类型、函数修改器。通过本书你将学会事件记录和异常处理,以及测试和调试智能合约。