简述区块链(1)- 也许只有这一篇

1、唠叨两句算法

最近一直在考虑一个事情,就是怎么给不太了解技术的人讲清楚区块链。我先试着写下来,而后在逐步打磨吧,目标就是让哪些说看区块链看的云里雾里的同窗能对区块链有一些认知。数据库

 

2、定义安全

简单的给区块链下个定义:基于加密算法的,去中心化的分布式帐本技术。这里有三个关键词:加密算法、去中心化、分布式帐本,下面我就尝试从三个关键词为线索,介绍一下区块链的概念。并发

 

3、分布式帐本分布式

比特币是一个点对点的电子现金系统,既然是现金系统,那么就得记帐呗,这大概就是这个帐本的由来,就是流水帐嘛,张三给了李四一百块钱,王五给了张三五十块钱,blabla。这种东西,就是一条一条的数据,记录在文件里,数据库里等等。区块链的帐本存储,固然就是区块和链了。分布式帐本,就是在说不只存一份数据,每一个全节点都存一份数据,只要不是所有节点挂掉,总有节点可提供数据的。性能

1. 区块:块由区块头和区块体组成,区块头包含一些前一个区块的Hash啊,当前区块中全部交易的默克尔树根啊,时间戳啊,随机数啊,等等。区块体里就是一笔笔的交易。区块链

简单说下默克尔树,好比当前区块有4比交易A,B,C,D,AB取hash,CD取hash,两个Hash结果再取hash,就造成了默克尔树,树根能够理解为一个checksum,任何一个交易改一点,整棵默克尔树就都变化了,能够保证没有篡改,这个树还能够支持轻钱包SPV验证。加密

2. 交易:每一笔交易主要包含了一个或多个Input和Output,Input记录的是引用到的前一笔未花费交易的索引,Output记录的是将资产转移到那个地址。这里讲脚本的时候,还要讲。blog

3. 链:刚才讲了区块头包含了前一个区块的Hash,这东西就是为了把区块链接起来,成为一个链,链上的交易顺序不能认为严格的先后关系,可是基本能够认为是有一个追溯的结构。做为程序猿,你会想须要遍历链,怎么整,拿到创世块,它没有前一个区块Hash,取到它的默克尔树根做为key去存储里面找下一个区块,如此往复。索引

 

4、去中心化

我想把这部分经过和通常NoSql数据库的一些方式作对比,NoSql数据库为了达到读的并发性能和数据的安全,一般都会保存多个副本,ReplicaSet的概念。同时对于写的数据,总要先找个主节点写,写完了再同步给副本集,选主的时候,数据一致的时候,都须要几个节点达成共识,一般会有Paxos,Raft这样的算法来保证。把这部分放大到公网上,就基本能够映射到区块链上了,区块链的各个全节点都保持一个完整帐本,全网的ReplicaSet;得到记帐权要记帐写块了,谁来写,区块链上经过PoW,PoS,DPos等等共识算法来达成共识,又和Paxos,Raft对应上了。

说到共识了,咱们想一下记帐权这个事,就是挖矿,首先是个经济问题,我干吗要挖啊,你得给我奖励,比特币系统中得到了记帐权生成了区块,就能得到比特币的奖励,比特币价格高,固然能够激励记帐这个事了,那么问题来了,这个经济问题变成了一个博弈问题了,这么赚钱,凭啥你挖啊。这时候就得有个算法来规定好游戏玩法,比特币怎么个玩法PoW,就是来个数学谜题,谁算出来谁记帐。这个数学谜题能够简单这么理解,就是你生成的块,加上一个随机数位能够调节,而后基于一种Hash算法,你生成出来的结果必须小于某某数,这个某某数就是难度,能够动态调节的,如今比特币的这个难度很高,因此你也就别跟矿主彪啦。那为何叫PoW了,就是工做量证实,由于这个Hash之间没有关联型,我上次随机数计算的结果和我此次随机数计算的结果之间没有半分钱关联,这也就是为啥算力规模愈来愈大了,能够并行计算,算力越大,几率越大。你要非较真说,其实理论上,你可能不多计算就恰好碰到了正确结果,没错,这事就能够类比高考了,你说有没有神蒙,蒙得高分,有,可是大致上这个考分大概其能证实你努力过吧。

 

5、加密算法

非对称加密大伙都明白,很少讲了,利用非对称加密的签名验签能够实现区块链最关键的特色,确权。只有我用个人私钥签名过的数据,你用个人公钥才能验证经过,其余谁想仿造都不行,因此这钱就只能是我来花了。说到确权,这事可大了,区块链为啥火,就是由于确权,数字资产能确权了,这意味着什么?意味着互联网变成了价值互联网了,价值能够传递了。

那这签名验签的用哪儿了,也没见哪儿使啊,别急,刚才咱介绍交易的时候不是留了一个箭头么,这交易上记的不只仅是转移到对方的地址,而是一个脚本。若是就一地址搁那,都说是本身的,那不乱套了,这钱谁能用,得确权,这就须要脚本系统了。

首先说说比特币的地址啊,地址咋生成,下图讲的特清楚,我从网上拷的。你说好好一图,我随便用,不能卖钱,为啥,不就是由于无法确权嘛。

而后咱们简单说说这个比特币的脚本系统,它是基于栈的脚本系统。这里我暂时不展开,仅已最经常使用的比特币锁定脚本P2PKH脚本做为例子讲讲。

锁定脚本

DUP HASH160 [Public Key Hash] EqualVerify CheckSig

花钱的时候你得经过锁定脚本的验证,这个就是一个确权的过程,你要想验证经过你得提供解锁脚本

[Sig] [Public Key]

简单说下验证过程吧,下面这堆脚本基于栈执行

[Sig] [Public Key] DUP HASH160 [Public Key Hash] EqualVerify CheckSig

1. [Sig]入栈

2. [Public Key]入栈

3. DUP复制栈顶[Public Key]再入栈

4. 拿出栈顶[Public Key]执行HASH160(这个正是Public Key Hash的算法),入栈

5. 锁定脚本里的常量[Public Key Hash]入栈

6. 取出栈顶里脚本里的[Public Key Hash]和计算出来的比较,相等就继续

7. 这下栈里从底到顶分别是[Sig][Public Key],CheckSig拿出栈里这俩验签,经过钱就是你的,请用。

 

比特币的脚本指令不少,你能够本身写脚本出来,就是有点麻烦,写汇编似的,可是这东西也是个好东西,直接就引出了后面的智能合约来了,

 

6、小结

今天主要从加密算法,去中心化和分布式帐本三个方面简单介绍了一下区块链,感受没达到个人预期让没接触过的忽然开窍的感受,后面打磨打磨吧的再。本文里主要以比特币做为实例进行介绍的,我以为比特币最牛逼的地方就是确权和智能合约,打开了无限遐想。公链上开发,不少选择,我其实不太喜欢比特币,开发起来太麻烦,并且就如今这个币值,搞些大宗交易,跨境大额转帐啥的还成,其余的,呵呵吧,可是币王仍是币王,这里面的原理仍是值得细细琢磨的。

相关文章
相关标签/搜索