blockchain的

构建区块链网络有几种方法。它们可以是公共的、私人的、许可的或由联合体建造的。

公共区块链网络
公共区块链是任何人都可以加入和参与的,比如比特币。缺点可能包括所需的大量计算能力、很少或没有交易隐私以及安全性差。这些都是区块链企业用例的重要考虑因素。

私有区块链网络
私有区块链网络类似于公共区块链网络,是一个分散的点对点网络。然而,一个组织管理网络,控制谁可以参与,执行共识协议和维护共享账本。根据用例的不同,这可以显著提高参与者之间的信任和信心。私有区块链可以在公司防火墙后面运行,甚至可以托管在本地。

许可区块链网络
建立私有区块链的企业通常会建立一个许可的区块链网络。需要注意的是,公共区块链网络也可以是许可的。这就限制了谁可以参与网络和某些交易。参与者需要获得邀请或许可才能加入。

财团区块链
多个组织可以分担维护区块链的责任。这些预先选定的组织确定谁可以提交事务或访问数据。当所有参与者都需要获得许可并对区块链承担共同责任时,财团区块链是业务的理想选择。

image_thumb-7

blockchain是如何工作的?

当每个事务发生时,它被记录为一个数据块

dāngměishìshēngshíbèiwéishùkuài

Those transactions show the movement of an asset that can be tangible (a product) or intangible (intellectual). The data block can record the information of your choice: who, what, when, where, how much and even the condition — such as the temperature of a food shipment.

这些交易显示了有形(产品)或无形(智力)资产的流动。数据块可以记录你选择的信息:谁,什么,什么时候,在哪里,多少,甚至条件-如食品运输的温度。

每个块都连接到它之前和之后的块

měikuàidōuliánjiēdàozhīqiánzhīhòudekuài

These blocks form a chain of data as an asset moves from place to place or ownership changes hands. The blocks confirm the exact time and sequence of transactions, and the blocks link securely together to prevent any block from being altered or a block being inserted between two existing blocks.

当资产从一个地方移动到另一个地方或所有权易手时,这些块形成一个数据链。这些块确认事务的确切时间和顺序,并且这些块安全地连接在一起,以防止任何块被更改或在两个现有块之间插入一个块。

交易被阻塞在一个不可逆的链中:区块链

jiāobèizàideliànzhōngkuàiliàn

Each additional block strengthens the verification of the previous block and hence the entire blockchain. This renders the blockchain tamper-evident, delivering the key strength of immutability. This removes the possibility of tampering by a malicious actor — and builds a ledger of transactions you and other network members can trust.

每一个额外的区块都会加强对上一个区块的验证,从而加强对整个区块链的验证。这使得区块链篡改明显,提供了不变性的关键力量。这消除了恶意参与者篡改的可能性,并为您和其他网络成员可以信任的交易建立了一个分类账。

image_thumb-6

什么是blockchain

区块链定义:区块链是一个共享的、不可变的账本,有助于记录交易和跟踪业务网络中的资产。资产可以是有形的(房屋、汽车、现金、土地)或无形的(知识产权、专利、版权、品牌)。几乎任何有价值的东西都可以在区块链网络上追踪和交易,从而降低风险并降低所有相关方的成本。

kuàiliàndìngkuàiliànshìgòngxiǎngdebiàndezhàngběnyǒuzhùjiāogēnzōngwǎngluòzhōngdechǎnchǎnshìyǒuxíngdefángchēxiànjīnhuòxíngdezhīshichǎnquánzhuānbǎnquánpǐnpáirènyǒujiàzhídedōngxi西 dōuzàikuàiliànwǎngluòshàngzhuīzōngjiāocóngérjiàngfēngxiǎnbìngjiàngsuǒyǒuxiāngguānfāngdechéngběn

Why blockchain is important: Business runs on information. The faster it’s received and the more accurate it is, the better. Blockchain is ideal for delivering that information because it provides immediate, shared and completely transparent information stored on an immutable ledger that can be accessed only by permissioned network members. A blockchain network can track orders, payments, accounts, production and much more. And because members share a single view of the truth, you can see all details of a transaction end-to-end, giving you greater confidence, as well as new efficiencies and opportunities.

为什么区块链很重要:业务是靠信息运行的。接收得越快,越准确越好。区块链是传递这些信息的理想选择,因为它提供了存储在不可变账本上的即时、共享和完全透明的信息,只有经过许可的网络成员才能访问这些信息。区块链网络可以跟踪订单、支付、账户、生产等。而且,由于成员对事实的看法是一致的,因此您可以端到端地查看事务的所有细节,从而增强您的信心,并获得新的效率和机会。image_thumb-5

blockchain底层技术之记账权竞争及奖励制度

1.概述

为防止可预期的记账节点被控制或攻击,导致错误记账行为,区块链技术采用竞争记账权的做法:

任何一个节点均可以参与记账,因而记账节点无法预期,也就不容易被控

竞争的过程就是看谁最先计算出满足条件的HASH值

每次计算必须以最后1个有效的区块为起点,必须消耗大量的计算机CPU,增加伪造记账数据的成本

计算的结果必须得到大部分节点的认可(共识算法),才会成为新的区块。实际算法中,如果该区块位于最长的区块链上,则为正式被认可的区块,也即大部分节点认可计算结果,并愿意在该结果下继续计算

这个过程被称为挖矿,或工作量证明(POW)。参与挖矿的节点称为矿工,协同挖矿的矿工联合体称为矿池

a ) 以前1区块为起点,计算满足条件的HASH值;

b ) 将计算的结果广播给其他节点;

c ) 其他节点验证计算结果无误时,认可该结果,并以该结果为起点重新进行计算;

d ) 单位时间内达到共识认可要求时,该区块成为正式认可的区块。

这个过程被称系统为鼓励挖矿的积极性,给予竞争成功的记账节点奖励

a ) 给予每个区块挖矿者直接的“现金”奖励。例如,比特币网络给予25个比特币,以太坊给予5个以太币;

b ) 以太坊:纳入该区块的交易的手续费,由发起节点和记账节点分成(发起75%,记账25%)。

2. 参考

比特币使用的SHA256算法,会有2^256种输出,如果我们进行2^256+1次输入,那么必然会产生一次碰撞;甚至从概率的角度看,进行2^130次输入就会有99%的可能发生一次碰撞。不过我们可以计算一下,假设一台计算机以每秒10000次的速度进行哈希运算,要经过10^27年才能完成2^128次哈希!这时要考虑一种情况:如果同时有两个矿工各自得到一个正确答案,并各自生成了一个区块广播出去会发生什么呢?这时候在区块链上同一个位置就有了两个区块,所谓的“分叉”就出现了。分叉是绝对不允许的,所以当矿工发现区块链分叉之后,会选择最长的一条继续计算,短的那条区块链会被丢弃。这里的长短,不是简单意义上的长短,而是工作量证明合计值最大的那个链。

image_thumb-4

blockchain底层技术之数据库

1.典型特征

去中心化的、分布式的、区块化存储的数据库

区块(Header + Body)

随机数

时间戳

包含父区块创建之后、本区块创建之前的全部交易;

满足某个条件的区块HASH;

a) SHA256(SHA256(version + prev_hash + merkle_root + nTIme + nbits + x )) 《 TARGET

b) Target值由动态的难度系数确定,Target越小,难度越高;

2. 参考

默克尔树是一种二叉树,由一组叶节点、一组中间节点和一个根节点构成。最下面的大量的叶节点包含基础数据,每个中间节点是它的两个子节点的哈希,根节点也是由它的两个子节点的哈希,代表了默克尔树的顶部。默克尔树的目的是允许区块的数据可以零散地传送:节点可以从一个源下载区块头,从另外的源下载与其有关的树的其它部分,而依然能够确认所有的数据都是正确的。

默克尔树协议对比特币的长期持续性可以说是至关重要的。在2014年4月,比特币网络中的一个全节点-存储和处理所有区块的全部数据的节点-需要占用15GB的内存空间,而且还以每个月超过1GB的速度增长。简化支付确认(SPV)协议允许另一种节点存在,这样的节点被成为“轻节点”,它下载区块头,使用区块头确认工作量证明,然后只下载与其交易相关的默克尔树“分支”。这使得轻节点只要下载整个区块链的一小部分,就可以安全地确定任何一笔比特币交易的状态和账户的当前余额。

image_thumb-3

blockchain底层技术

如何去中心化地共享数据?

ElGamal算法,是一种较为常见的加密算法,它是基于1984年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。也就是说,在适当的群G中,指数函数是单向函数。

椭圆曲线密码体制是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。解椭圆曲线上的离散对数问题的最好算法是Pollard rho方法,其时间复杂度为,是完全指数阶的。其中n为等式(2)中m的二进制表示的位数。当n=234, 约为2117,需要1.6×1023 MIPS 年的时间。而我们熟知的RSA所利用的是大整数分解的困难问题,目前对于一般情况下的因数分解的最好算法的时间复杂度是子指数阶的,当n=2048时,需要2x1020MIPS年的时间。也就是说当RSA的密钥使用2048位时,ECC的密钥使用234位所获得的安全强度还高出许多。它们之间的密钥长度却相差达9倍,当ECC的密钥更大时它们之间差距将更大。更ECC密钥短的优点是非常明显的,随加密强度的提高,密钥长度变化不大。

DH Diffie-Hellman算法(D-H算法),密钥一致协议,是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成”一致”的、可以共享的密钥。换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。

image_thumb-2

blockchain会给未来的人们带来什么

以后的人们会深深地与blockchain绑定在一起,身体上植入blockchain的公钥私钥,开车加油、医生看病、买水买电,都会直接用身体内绑定blockchain的芯片进行身份确认,并完成财富转移。

 

等到有一天,人类走向星辰大海,浩瀚宇宙,用于交易的必然得是基于数字通信并且无法证伪的工具,blockchain必然是为那时的人们事先准备好的。image_thumb-1

简单读懂区块链(blockchain technology)的含义与未来发展

区块链是在2017年下半年的热议话题,众多大佬以及下海创业者都将其视为珍宝,颇有成功的捷径,未来的大趋势,不跟上区块链的步伐就被淘汰的气势。

我知道区块链大概是在2018年初,当时对其了解一下,也是似懂非懂,总之感觉非常厉害就是对了,毕竟众多大佬争相热捧,总归不会是很差。

一般人初步了解应该会和我当初一样,“区块链”的特性“不可更改”,安全、解决信誉危机、实时记录等等印象,其实这都是对的,不过以前不懂“区块链”忽然了解到总会很迷糊,所以对“区块链”的印象都是片面的印象,不够立体。

也有一些人第一反应是区块链就是比特币!我的天,这是绝对错误的!

如今已经到了2019年,一年多的时间里网上有很多大神的分析讲解,也有摸着石头过河的企业在官方网站进行解释说明,这些解释我感觉并不好,看起来非常高端,然而看得懂的不看也懂,看不懂的还是看不懂,在我看来区块链虽然是大佬玩的东西,但最终还是需要全民参与进来才可以,所以我决定采用去专业化的方式解释一下区块链到底是什么,哪怕是对计算机不感兴趣的人也可以从各种角度去理解区块链的神奇之处。

  因本文可能会有少数专业术语,每次都展开说会十分麻烦,所以其中较为专业的词汇会用橙色字表示,在公众号回复橙色文字,即可获得i斯的解答~

  如发送:橙色

  答:橙色:又称桔黄或桔色,是暖色系中最温暖的色。自然界中,橙柚、玉米、鲜花果实、霞光、灯彩、太阳,都有丰富的橙色。

阿斯课堂开课了~

阿斯课堂将分为两部分:

第一步——扫盲部分,让不是很懂或不懂的人大概明白比特币与区块链是什么。

扫盲又分为两种方式。

第一种,叙述方式。将区块链的点点滴滴相关的故事铺开来讲,听起来可能会更加形象易懂。

第二种,公式方式。用公式的将区块链金字塔式层层分解,比起第一种有更强的逻辑性。

第二部分——比特币可以做什么?我看了网络上很多人对区块链的探讨,但却没有一个与我所想是一样的,虽然不知道是不是因为其不可行,但也愿拿出来分享一下。

想知道区块链是什么就要先知道比特币是什么。

932617-a915bf07f68304fc251b77bb7697d297

比特币我想多数人应该还是有所耳闻的。

为什么讲区块链之前需要知道什么是比特币呢?因为区块链是比特币的安全机制,也可以说区块链是比特币的信用保障。

再讲比特币前,我们还应该先对现实中的货币做出一些简单的了解,我想简述一个故事、一个国度神奇的石头货币

第一个故事原文大概是说中国人与犹太人放贷的区别,在其中我摘取我需要的一小部分,内容大概是犹太人放贷给一个国王,结果呢国王没钱还给犹太人,犹太人心知找国王要钱肯定是没戏了,于是与国王说:行啦,我看你也没钱还我,不如这样,我们开一家银行发行一种债券,而这种债券必须有国家作为担保,大家都可以用这种债券当做正常货币进行流通,于是就有了最初的纸质货币。在这之前的货币大家都知道,都是用金银铜等有实际价值的金属打造而成,这种债券在国家的担保下大家自然也就相信别看这只是薄薄的一张纸,但是他的价值与那腰间的金钱是一样的,而随着这种债券的普及,大家手中或多或少的都拥有了这种纸币,那自然就不愿意承认这只是一张普通的纸,在大家都有着共同的利益驱使下,简单而又轻便的纸币自然而然就成为了新种货币。

下面要讲的是一个神奇的国度雅浦岛(Yap Island),这个国度有一种神奇的货币——石头币,本地人将这种石币叫做斐,本来用石头当做货币也没有什么稀奇的,稀奇的是这货币的使用规则真的是很有个性,下面是规则:

1、斐的价值体现神奇。这石头越大质地越好值钱,最值钱的石壁比人还高。

932617-ddf2f5a0e56080a30b32a5e4bbb2964d

2、斐的交易方式神奇。如果说小石币还能勉强搬过去进行交易,大石币进行搬运就太大动干戈了,所以他们的石头所有权只需要说一声这石币从此是你的了,哪怕这石币还是放在对方的房子里,那么就永远放在对方的房子里就好,但是大家都知道这钱就是你的,不但不需要把石币搬运到你的家中,甚至连记号都不用做就可以安心的进行交易。

3、只要是质地好的大石头都可以作为货币,所以有很多土著人为了一夜暴富愿意冒着生命危险远航寻找巨石,而且有一种神奇的现象就是如果他们找到的石头在雅浦岛的附近不幸石沉大海,大家也愿意承认这些人拥有这块石币,至于交易方法只需参考第二条就可以了。

4、石钱可以在这座岛上换取任何东西,据说雅浦岛最大的一块石头可以换取20个媳妇,而富人的表现就是把石头放在门口排成一排。

932617-9ce767b95e767ae428d67a66b5f523c1

聪明的朋友们看完这两个故事大概已经知道我要说什么了,没错!比特币就是这两种货币在互联网中的体现,第一个故事用一条公式来表达就是:价值=信任 劳力 认知

信任,大家都信任这种货币有价值,且会一直有价值。

劳力,土著人愿意冒极大的风险下海搬运以他们的航海技术很难运回的石币。

认知,一元钱=一根烤肠=一支笔。认为值钱,但是能有一个确切价值也很重要,不然没人会去尝试。

举个大家都知道的例子——互联网泡沫的产生。

932617-805fc9ba62ba68b0d57827e91174d94d

互联网不比实体经济,大多都只是一个感念,至于值不值钱,那就要看大家对它的认可了,有人道两个互联网巨头坐在一起,泡沫也能吹得比金价。

比如有一天腾讯忽然宣布和阿里巴巴成为战略合作伙伴,采取双轨制,虽然腾讯还是那个腾讯,阿里巴巴还是那个阿里巴巴,但是一想阿里巴巴的电商 支付平台 腾讯的超高流量数据与推广,无论如何这绝对不是1 1=2的概念,至于等于多少您看着办。

那么回到正题!我会一一解答下边的三个问题。

1、比特币是什么?

2、比特币的运行模式是什么?

3、区块链与比特币的关系。

首先如你所想,比特币英语是bitcoin,直接翻译就是bit钱币,也就是字节钱币,显而易见这是一种数字货币。

  为什么会有人研发比特币,是因为猎奇?还是因为觉得数字货币是未来的大势所趋?还是因为交易方便?

  显然上边几个问题都是玩笑话,首先比特币的挖矿及其耗费人力物力,仅仅为了猎奇肯定不会发展到如今。说道交易方便肯定有人想到支付宝,方便的移动支付短时间来看是大势所趋,然而比特币交易起来最短也要几分钟时间,流程也十分繁琐,当然是不可能,所以!

  真正的答案是在2008年的经济危机中,美国因为拥有记账权,无下限的大量印发美元引起了无数人的不满,难道真的就没有一款稳定且安全的货币么?就在这时比特币创始人中本聪与2008年11月1日发表了比特币白皮书,并于2009年1月3日首次挖出比特币。

  比特币的区块链机制保证了绝对的安全,因为算法关系,比特币只可以有2100万个,也保证了比特币的稳定性,最根本的是比特币采取去中心化记账,所有持有比特币的人都是比特币的记账人兼发行人,这也就造就了除非能同时篡改51%旷工的账本,否则没有任何人能够改变比特币的的原始轨迹。

比特币最初是没有价值的,他只是一组一组的数据,仅此而已。看到如今比特币的价值,大家一定不会相信最初一名程序员LaszloHanyecz用了10000个比特币买了仅仅两个披萨,并且在网上得意的炫耀。2017年12月17日,比特币被炒到历史最高价格19850美元,也就是说当初的10000比特币最高价格高达1.98亿美元,折合人民币有13亿元,这画面真是堪称惨烈啊!同时在这一瞬间,在大家的认知中比特币也有了自己的价值。

不过也不能怪当初那个程序员,毕竟谁会想到当初的一个虚拟货币如今会如此值钱呢?

不知道大家是否知道比特水龙头,算是比特币的引流网站,只要访问网站就可以获得5个比特币,在当时也就值5美分,所以上边的程序员类似交易在当初也只是小巫见大巫了。

在此之后,德国是第一个承认用比特币支付的国家,微软、戴尔等国际大企业也纷纷开始接受比特币支付,随着比特币的影响越来越大,世界上开始出现数字货币的忠实支持者,他们认为数字货币终将成为人类最终的货币。

有需求就有供给,在比特币出现后又出现了数十种数字货币,其中最为出名的就是以太坊,如今大有超越比特币的趋势。如果说数字货币真的是人类最终货币,那么比特币与以太坊大概就是游戏中的金币,其他的货币大概只能作为银币或铜币了。期间也有通过ico等融资方式的欺诈行为,所以网络上一直流传着比特币骗人等传言,实际上比特币是为其他不负责任的虚拟货币背了一个大锅。

比特币是怎样产生的呢?比特币是对大家辛苦计算的奖励机制,算的是什么?算SHA256。

因为运算SHA256的过程与淘金类似,所以运算的软件又或是硬件叫做矿机,了解电脑的都知道,运算当然是用显卡运算了,随着时间的推移挖矿的难度会越来越高,如今用电脑挖矿已经非常难以获得,同时对电脑的损害与耗电量都是极大的,所以期待着用自己电脑挖矿的小白们基本可以死心了。

用来挖矿的机器都是专门挖矿的机器,如果说挖矿机与普通计算机有什么不同那就要说显卡数量了,我了解的矿机同时安装4到8个显卡,而处理器最低也要达到I5才可以。最初,挖矿的过程就像是抢答游戏,谁先算出结果,那么比特币就给谁,如今一台矿机已经难以挖出比特币,所以就需要多台矿机同时挖矿,运用矿机十分费电,如果付出与回报不成正比,那也没人挖了不是,所以这厂房,这挖矿机、这电都可称之为劳力。


一定有人好奇,这挖比特币到底多费电?就算在费电对比上文所说,一枚比特币价值23万人民币,应该不算什么了吧?其实现在一枚比特币值2万人民币左右,一枚比特币单电费就要高达1万人民币以上,

QKL底层技术

前言

区块链作为一种架构设计的实现,与基础语言或平台等差别较大。区块链是加密货币背后的技术,是当下与VR虚拟现实等比肩的热门技术之一,本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现。

无论你擅长什么编程语言,都能够参考这种设计去实现一款区块链产品。与此同时,梳理与之相关的知识图谱和体系,帮助大家系统的去学习研究。

基本概念

区块链的概念最近很火,它来自于比特币等加密货币的实现,但是目前,这项技术已经逐步运用在各个领域。什么是区块链技术?为了感性认识这个问题,我们可以使用谷歌地球的例子做类比,ajax不是什么新技术,但组合在一起就成就了产品谷歌地球,与之类似,区块链也不是什么新技术,但与加密解密技术、P2P网络等组合在一起,就诞生了比特币。技术人员,特别是Web开发工程师,学习了解ajax技术最早是被谷歌地球酷炫的效果所吸引。而现在,历史再一次重演,很多人被比特币的疯狂发展所吸引,进而开始研究其背后的技术——区块链。

区块链原本是比特币等加密货币存储数据的一种独特方式,是一种自引用的数据结构,用来存储大量交易信息,每条记录从后向前有序链接起来,具备公开透明、无法篡改、方便追溯的特点。实际上,这种特性也直接体现了整个比特币的特点,因此使用区块链来概括加密货币背后的技术实现是非常直观和恰当的。区块链是一项技术,加密货币是其开发实现的一类产品(含有代币,也有不含代币的区块链产品),不能等同或混淆。与加密货币相比,区块链这个名字抛开了代币的概念,更加形象化、技术化、去政治化,更适合作为一门技术去研究、去推广。

所以,目前当大家单独说到区块链的时候,就是指的区块链技术,是实现了数据公开、透明、可追溯的产品的架构设计方法,算作广义的区块链。而当在具体产品中谈到区块链的时候,可以指类似比特币的数据存储方式,或许是数据库设计,或许是文件形式的设计,这算作狭义的区块链。广义的区块链技术,必须包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用等4个方面,其他的可能涉及到分布式存储、机器学习、VR、物联网、大数据等。狭义的区块链仅仅涉及到数据存储技术,数据库或文件操作等。本文的区块链,指的是广义的区块链。

架构图

从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。如图:

 

 

协议层

所谓的协议层,就是指代最底层的技术。这个层次通常是一个完整的区块链产品,类似于我们电脑的操作系统,它维护着网络节点,仅提供Api供调用。通常官方会提供简单的客户端(通称为钱包),这个客户端钱包功能也很简单,只能建立地址、验证签名、转账支付、查看余额等。这个层次是一切的基础,构建了网络环境、搭建了交易通道、制定了节点奖励规则,至于你要交易什么,想干什么,它一概不过问,也过问不了。典型的例子,自然是比特币,还有各种二代币,比如莱特币等,本书介绍的亿书币也是。这个层次,是现阶段开发者聚集的地方,这说明加密货币仍在起步当中。

从用到的技术来说,协议层主要包括网络编程、分布式算法、加密签名、数据存储技术等4个方面,其中网络编程能力是大家选择编程语言的主要考虑因素,因为分布式算法基本上属于业务逻辑上的实现,什么语言都可以做到,加密签名技术是直接简单的使用(请看书中相关的加密解密文章,不建议自由发挥,没有过多的编码逻辑),数据库技术也主要在使用层面,只有点对点网络的实现和并发处理才是开发的难点,所以对于那些网络编程能力强,对并发处理简单的语言,人们就特别偏爱。也因此,Nodejs开发区块链应用,逐渐变得更加流行,Go语言也在逐渐兴起。

上面的架构设计图里,我把这个层面进一步分成了存储层和网络层。数据存储可以相对独立,选择自由度大一些,可以单独来讨论。选择的原则无非是性能和易用性。我们知道,系统的整体性能,主要取决于网络或数据存储的I/O性能,网络I/O优化空间不大,但是本地数据存储的I/O是可以优化的。比如,比特币选择的是谷歌的LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。目前,困扰业界的一个重大问题是,加密货币交易处理量远不如现在中心化的支付系统(银行等),除了I/O,需要全方位的突破。

分布式算法、加密签名等都要在实现点对点网络的过程中加以使用,所以自然是网络层的事情,也是编码的重点和难点,《Nodejs开发加密货币》全书分享的基本上就是这部分的内容。当然,也有把点对点网络的实现单独分开的,把节点查找、数据传输和验证等逻辑独立出来,而把共识算法、加密签名、数据存储等操作放在一起组成核心层。无论怎么组合,这两个部分都是最核心、最底层的部分,都是协议层的内容。

扩展层

这个层面类似于电脑的驱动程序,是为了让区块链产品更加实用。目前有两类,一是各类交易市场,是法币兑换加密货币的重要渠道,实现简单,来钱快,成本低,但风险也大。二是针对某个方向的扩展实现,比如基于亿书侧链,可为第三方出版机构、论坛网站等内容生产商提供定制服务等。特别值得一提的就是大家听得最多的“智能合约”的概念,这是典型的扩展层面的应用开发。所谓“智能合约”就是“可编程合约”,或者叫做“合约智能化”,其中的“智能”是执行上的智能,也就是说达到某个条件,合约自动执行,比如自动转移证券、自动付款等,目前还没有比较成型的产品,但不可否认,这将是区块链技术重要的发展方向。

扩展层使用的技术就没有什么限制了,可以包括很多,上面提到的分布式存储、机器学习、VR、物联网、大数据等等,都可以使用。编程语言的选择上,可以更加自由,因为可以与协议层完全分离,编程语言也可以与协议层使用的开发语言不相同。在开发上,除了在交易时与协议层进行交互之外,其他时候尽量不要与协议层的开发混在一起。这个层面与应用层更加接近,也可以理解为B/S架构的产品中的服务端(Server)。这样不仅在架构设计上更加科学,让区块链数据更小,网络更独立,同时也可以保证扩展层开发不受约束。

从这个层面来看,区块链可以架构开发任何类型的产品,不仅仅是用在金融行业。在未来,随着底层协议的更加完善,任何需要第三方支付的产品都可以方便的使用区块链技术;任何需要确权、征信和追溯的信息,都可以借助区块链来实现。我个人觉得,这个目标应该很快就能实现。

应用层

这个层面类似于电脑中的各种软件程序,是普通人可以真正直接使用的产品,也可以理解为B/S架构的产品中的浏览器端(Browser)。这个层面的应用,目前几乎是空白。市场亟待出现这样的应用,引爆市场,形成真正的扩张之势,让区块链技术快速走进寻常百姓,服务于大众。大家使用的各类轻钱包(客户端),应该算作应用层最简单、最典型的应用。很快,亿书将基于亿书网络推出文档协作工具,这个就是典型的应用层的产品。

限于当前区块链技术的发展,亿书只能从协议层出发,把目标指向应用层,同时为第三方开发者提供扩展层的强大支持。这样做既可以避免贪多,又可以避免无法落地,是真正理性的开发路线。因为纯粹的开发协议层或扩展层,无法真正理解和验证应用层,会脱离实际,让第三方开发者很难使用。如果仅仅考虑应用层,市面上又找不到真正牢固、易用的协议层或扩展层的产品。所以,我们只好全面发力,采取完全开源开放的态度,通过社区的力量,共同去做一件有意义的事情,也算为中国区块链技术发展做点技术积累和微薄贡献。

编程实现

很多小伙伴,习惯结合自己的技术背景,来理解上面的架构设计。这里,结合具体的编程语言,简单介绍几款产品,仅供参考。

(1)C/C++

这两个语言是无法逾越的,任何开发遇到瓶颈,基本上都会找到它们,自然应该排在第一位要介绍的。同时,区块链技术的鼻祖,比特币(协议层)就是用C++语言开发的,而且目前为止,没有比比特币更加成功的区块链产品。所以,无论你使用什么语言开发,在正式进入这个行业的过程中,都应该先研究研究比特币。比特币官方客户端钱包用的Qt,第三方钱包有Python语言开发的,特别是第三方整理的开发库(Api包)很多是Nodejs设计的。比特币的架构,与上面的架构设计基本相同,另外,因为共识算法采用的是工作量证明机制(PoW:Proof of work),还有一些特殊的挖矿的过程。其他竞争币都是直接来自比特币的分支,所以编程语言相同,具体的技术选型和技术实现上可能有所改进,比如:莱特币,使用了其他的加密算法。

官方网站:https://bitcoin.org/

源码库:https://github.com/bitcoin

2)Nodejs/Javascript

Nodejs平台强大的网络编程能力,以及js脚本语言的简单快捷,在区块链领域自然少不了它的身影。亿书便是这样一个区块链产品,亿书币是它的协议层,使用了著名的express开发框架,基于http协议开发而成。同时,它采用了授权股权证明机制(DPoS),算法上的改进,让它在处理交易时更加轻量,处理能力大大提升。它提供了强大的协作机制,为数字出版、版权保护提供了便利;扩展了侧链功能,可以基于它开发任何去中心化的应用,从而为专业作者、博客爱好者和开发者提供很多方便。《Nodejs开发加密货币》这本书完整分享了它的源码,从区块链基础概念到代码实现,从基本原理到开发设计思路,都做了比较详细的探索,目前为止,从协议层面深入代码讲解区块链技术实现的书籍极少,这算作一本。

官方网站:http://ebookchain.org/

源码库:https://github.com/Ebookcoin
(3)Python

如果是Python语言爱好者,我建议研究研究以太坊(Ethereum)的Python实现。尽管因为The Dao事件闹得沸沸扬扬,但从技术实现的角度来说,仍然值得参考学习。以太坊官方定位为一种开发管理分布式应用的平台,主攻方向就是“智能合约”,并为其定制了一种编程语言Solidity。以太坊的核心是以太坊虚拟机(EVM),允许用户按照自己的意愿创建操作。以太坊给出了Go、Java、Python等多语言的实现。其中以python为基础的实现主要包括三个部分:Pyethapp是客户端部分;pyethereum是核心库,实现了区块链、以太坊模拟机和挖矿等功能;pydevp2p是点对点网络库,实现了节点发现、合约代码传输、加密签名等功能,这三者组合在一起就是完整的区块链实现,后面两个核心库共同组成了协议层。另外,go-ethereum是go语言的完整实现;Ethereum(J) 是纯Java实现,它作为可以嵌入任何Java/Scala项目的库提供。客户端方面,还有Rust、Ruby、Javascript等语言的实现。

官方网站:https://ethereum.org/

源码库:https://github.com/ethereum/pyethapp
(4)Go

在多核时代,Go语言备受喜爱,它可以让你用同步方式轻松实现高并发,特别是在分布式系统、网络编程等领域,应用非常广。所以,在区块链开发领域,也有很多使用Go语言的项目。其中,由linux基金会主导的超级账本(HyperLeger),版本库的名字叫Fabric,就是其中一个。该项目试图为新一代的事务应用创建一种开放的分布式账本标准,支持许可式区块链(这种方式可能无法再现比特币那种强大的网络效应)。Fabric的开发环境建立在VirtualBox虚拟机上,部署环境可以自建网络,也可以直接部署在BlueMix上,部署方式可docker化,支持用Go和JavaScript开发智能合约。它采用PBFT分布式算法,网络编程方面用gRPC来做P2P通讯,使用 Protocol Buffer来序列化要传递的数据结构。在架构设计上,Fabric可能与比特币等区块链产品有所不同,但是上述基本组成部分还是不可或缺的。

官方网站:https://www.hyperledger.org/

源码库:https://github.com/hyperledger

其他编程语言,比如:C#等,也有具体实例,这里就不再列举。总之,针对不同的编程语言,在具体的编码或架构设计上可能有所差别,甚至很大,但是协议层所使用的技术并没有太大的变化。其中,网络编程是重点和难点,多数没有现成的框架可用,都是使用编程语言自身提供的库来设计开发,所以比较底层,非常考验开发者的编码功底。

知识图谱

循着上面的分析,我们已经可以了解区块链是什么,并知道怎么实现了,顺便梳理一下其中的编程技术知识,自然也就清晰多了。

根据个人的理解,我把与区块链相关的知识分为下面5个方面:

(1)基础知识

区块链是新技术,与之相关的是其背后大量的新概念、新理论。这些知识,虽然不直接体现在编码里,但却是理解区块链,掌握区块链技术的基本知识。所以,理当成为区块链技术不可或缺的一部分。这部分从基本概念入手,到工作原理的描述,就能够把区块链基础知识全部覆盖。

(2)技术实现

区块链是一项技术,但从上面的分析可以看出,它应该是一种架构应用,架构的实现理当是我们知识库的核心。正如大家看到的,任何一款区块链产品,协议层必须包括点对点网络、加密签名、数据存储、分布式算法等4个部分,应用层也必然要提供钱包、客户端浏览器等基础应用。所以,把这部分独立出来,也是合情合理。

在扩展层的部分,区块链技术可以对接各种应用,比如:金融、物联网、网络安全、版权保护、电子商务等等,现有的很多技术都可以用在这里。只不过,如何与区块链结合,如何实现跨行业使用,自然是这部分内容研究的课题。所以,这里所罗列或涉及到的技术,理应归为技术实现的一个重要部分。

(3)开发环境

区块链是多项技术的组合,有其自身的复杂性,个别应用对开发环境依赖较大,开发工具与环境搭建,是让开发者快速上手的重要内容。

(4)项目实践

据说,短短数年,全球区块链产品已经有几千个,其中不乏创新应用。有些优秀的开源产品和项目实践,是最好的学习研究资料。

(5)开发文档

这个自然不用说了,每一种产品也都会有自己的开发文档。另一个,就是有心的开发者整理汇总的一些资源,可以帮助我们节省很多查询的时间。

我在考虑这个知识体系的过程中,主要思考的是,读者循着这些标签去查阅文章,能否快速掌握区块链技术,并最终上手开发实现一个区块链产品。另外,也刻意规避了与具体编程语言,以及特定领域相关的词汇,唯一可以区分的就是这些节点之下对应的文章标签。所以,这些分类就显得非常中性。也考虑过使用比特币、竞争币、智能合约、数字资产、智能资产等具体领域的实现作为分类方法,但又怕限制了读者的思维,同时随着区块链的发展,这个图谱将不停的修改下去。这里,呼吁一下,希望读到这篇文章的小伙伴提供您的宝贵意见,让我们把这个关于区块链的知识分类图谱做得更加科学合理,使用更加方便。

总结

这篇文章,我们把区块链技术基础架构描述了一下,需要再次强调的是,这仅仅是一种实现方式,绝非所有的区块链产品都是如此,我们也期待更多创新出现,也相信一定会出现。编程实现罗列了几种编程语言与其实现的典型产品,因为协议层技术较为底层,并没有太多现成的框架需要介绍或讨论,同时,具体的技术细节,也绝非几行字能够罗列清楚,所幸,这些产品都是开源产品,大家可以结合自己的技术背景,进一步查看对应的产品源码,很快就能了解其中的奥妙。

本文转载自:  http://www.8btc.com/ebook-blockchain

此次转载,仅供学习记录使用,如有侵权,告知即删;