zoukankan      html  css  js  c++  java
  • 区块链最基本的技术原理

    多账本记一样的账

     大家看,这张图上有6个帐本,张三有30元,李四有50元,每一个帐本的帐都是一模一样的,这就是区块链的第一个概念:多个帐本记着同一个帐,而且每个帐本都是一样,可以相互校验。

    hash值的计算,校验数据的一致性

    哈希就是把一个字符串,映射成一个相对固定长度的摘要值 64位16进制。

    比如,hash( 张三给李四100元钱):b2f1dbcea1110674575d43b3f2c4d469b2e45764e9e93b084e9c6517eb6ba41a

    比如,hash( 张三给李四101元钱):9a31b1169e79ab8339573cf310d56bed646e755f585a9e91c7760c87b3e45dd0

     

    我们可以把区块链比喻成打牌,比如张三、李四、王五、赵六他们四个人在打牌。第0局每个人都发放100元,第0局,高度0区块他们的校验码hash值是hash0。第1局,高度1区块就是张三输给李四30元,大家可以看到张三的余额是100减30等于70,李四100加30等于130,所有这些交易及余额的变动就形成了hash1。

    第2局,高度2交易就是李四输给赵六30元,王五输给赵六20元,然后他们的余额也分别变动为100、80、150,他们的hash值就是hash2。同样到第3局,张三输给李四70元,这是一笔交易,他们的余额也变成0、150,这些交易和余额的变动就是hash3。

    前面这张表只有一个节点,现在我们可以看有两个节点的图:节点A和节点B。节点A的高度是小写的hash0,和节点B的hash0是一致的,节点A的hash1和节点B的hash1也是一致的。依此类推,两个hash2一致,两个hash3也一致,那么说明这两个节点的所有的交易和余额的数据都是一致的。如果有十个节点,那这十个节点也都是一致的。

    我们可以用一个time33来解释一下hash值是怎么计算的。计算123 的hash值的话,初始的hash值是0,那么第一个“1”的hash值就是33×0+1等于1,“12”的hash值就是1×33+2等于35,“123”的hash值就是35×33+3等于1158,所以在不同的节点,如果都是“123”这个字符串的话,算出来的hash值就都是1158,同样的数据他们的hash值就是一致的。

    张三给李四100元有一个hash值,张三给李四101元则是完全不同的hash值,所以两段数据中只要有微小的差别,他们的hash值就是完全不一致的,hash值可以校验两段数据是否一致。

    区块链的原理

    这里有高度0、高度1和高度2三个高度的区块。第一个高度0,它的交易数据和余额数据是小写的hash0,先生成一个大写的HASH0。大写的HASH0到高度1里面和小写的hash1的数据串联以后,再形成一个大写的HASH1,那么大写的HASH1则包含了高度1里面的交易数据以及前面所有区块数据的哈希值。

    第二个高度的区块又包含了大写的HASH1和小写的hash2的hash值,就形成了一个大写的HASH2,那么如果十个节点的服务器的HASH2都一致的话,这就说明他们的数据都是一样的。

    私钥签名,公钥验证

    私钥是什么呢?私钥其实就是一个随机数或一个坐标。比如2的6次方有64个数字,你若选其中的37作为你的坐标。如果把它想象成一块地的话,你把你的金子藏在37号地,要挖多少块地才能找到金子呢?如果我们的区块链比特币它私钥的数字是2的256次方,相当于宇宙的原子数,你随机找一个坐标把金子放上去,其他人几乎是不可能找到得。

    在这里私钥经过椭圆曲线加密和两次hash后,会生成公钥地址,就是区块链上记录你钱或资产的帐户。我们也可以把私钥比喻成信箱的钥匙或密码,张三给李四转帐30元就用张三的私钥进行签名。大家可以看到,你改这个签名的字符串或者是改收款人或金额都是没有办法做到的,因为这个签名必须是用张三的私钥签名,才能被记账节点验证通过。

    然后张三会把他对交易的签名发送给记帐节点去验证。如果十台服务器有七台验证通过以后,这个转帐就会成功,张三的余额就少了30,余额变为70,李四的余额就会增加30,变成130。

    持有比特币最多的地址上有18.9万个比特币,相当于15多亿的人民币。那在公网上有这么多黑客攻击都没有破解他的私钥去把这个地址上的币给盗走,所以我们看出来比特币的安全性还是经受了实践的考验的。

    梅克尔树的校验作用

    大家可以看一下这一个区块里面有四笔交易,两两hash以后,再两两hash就变成了根hash值。

    大家看这个图,把前面的TX0,TX1,TX2交易全部隐藏,只剩下TX3。这里我们把TX3的hash值加上TX2的hash值可以形成hash23,然后hash01+hash23可以算出根hash值,这说明我只要知道我自己的数据,我也能算出这个数据是不是有被篡改,有没有在这个区块里面。

    我用一个加法来代替hash来看交易是否在这个区块里面。5+6等于11,11+12等于23,23+25等于48,35+48等于83,那么我只要绿色的和红色的这些数据我就可以证明我的交易是否在83这个头hash下面,就可以证明我没有被篡改,存在这个区块链中。

    这个图就是私链或者联盟链的一些节点。尤其是联盟链,四个节点中只要有三个正常运行就能够维持,七个节点有五个能正常运行就能继续做区块链共识。

    我们给海平线“海票惠”部署的节点都是放在海航云内网里面,但是用户只要获取部分数据,就可以通过merkle树来验证数据是否被篡改,并且可以把部分需要分享的数据拿出来给第三方,去证明这些数据是谁和谁签的合同,然后这个数据有时间锉,这也是没有办法篡改的。然后我们会把私链跟hash值写到比特币上,这样就更加没有办法篡改了。

    或者我们把各个私链的头hash值串起来搞一条联盟链,将他们的头hash全部放在一条链上,这样也是一个很方便的方法。既能保护每一条私链的隐私,又能够保证他们的数据无法被篡改。

    智能合约的运行过程

    这是一个智能合约,就是一方面把股权或票据放到交易所,另一方面把数字货币也放到交易所。如果两个条件都能够匹配,那么就是一手交钱一手交货,自动执行。

    这是海票惠的票据撮合平台。首先第一步,融资方和贷款方都会在平台上注册,那么都会开一个银行托管帐户,有票的一方把票据在区块链上平台上挂出,购票的一方就把钱存入银行的托管帐户。

    比如一家企业把一张一百万的商业承兑汇票挂在区块链平台上,然后另外一家保理公司存入98万元的钱,他会收到98万元的代币,卖家设定一定利率挂牌卖出。买家用代币可以买区块链上的票据,撮合成交以后,相当于订立了合同,这买家的钱就从买家的帐户转到卖家的帐户中冻结起来,然后卖家会在ECDS把票转给买家,买家看ECDS 确认票收到以后就会让银行放款,买家就能收到钱。

    融资方录入票据

    融资方录入票据

    这个是票据登陆,录入,如果能够和央行ECDS直联,只要输入编号就可以把票据的信息写到区块链上。

    融资方获得数字票据

    融资方获得数字票据

    票据录入以后,就可以挂牌,以一定的利率挂牌。

    融资方筛选票据

    投资方筛选票据

    其他公司或保理公司觉得利率不错,又有资金,那么就可以在区块链上摘牌,这样就形成了一个合同关系,然后就开始交割。

    投资方等待票据回款

    投资方等待票据回款

    投资方查询操作记录

    投资方查询操作记录

    入金

    入金


    录入票据

    录入票据

    挂牌转让

    挂牌转让


    摘牌投资

    摘牌投资

    大家可以看前面几张图,入金、票据登记、挂牌、摘牌都写在区块链上,都是不可篡改的。

    为什么那么多核心企业都非常急切的要做票据服务平台呢?关键就是那些与核心企业关联的中小企业都有强烈的融资需求。供应链金融数据写在区块链上不可篡改,就会形成非常宝贵的信用资料,方便融资,也方便企业提高自己的信用,对于信用差的企业,他们就会被淘汰。

    明白了原理是第一步,后面要理解为什么区块链对整个经济和社会的颠覆意义是深远的,这个可能不是一两句话能够说明白的。在三年前我已经完全认识到区块链的技术就和互联网技术一样,能够有巨大的经济价值、社会价值,我们就义无反顾的投入到区块链的研发当中去,所以目前在这个行业内也能够保持一定的领先地位。

  • 相关阅读:
    蓝书3.6 割点与桥
    蓝书3.5 强连通分量
    蓝书3.4 差分约束系统
    蓝书3.3 SPFA算法的优化
    蓝书3.2 最短路
    蓝书3.1 最小生成树
    luogu 4630 [APIO2018] Duathlon 铁人两项
    Codeforces Round #124 (Div. 1) C. Paint Tree(极角排序)
    dutacm.club Water Problem(矩阵快速幂)
    dutacm.club 1094: 等差区间(RMQ区间最大、最小值,区间GCD)
  • 原文地址:https://www.cnblogs.com/Duxue/p/14757238.html
Copyright © 2011-2022 走看看