美文网首页
对区块链的粗浅理解和认识

对区块链的粗浅理解和认识

作者: 小胖子善轩 | 来源:发表于2018-02-25 14:58 被阅读0次

    从比特币的疯涨的浪潮,再到人们意识到比特币的泡沫。现在人们开始回归到比特币背后技术支持,而这具有革命性意义的技术被称为区块链技术。我为了更准确地去理解区块链,决定先研究中本聪的论文(https://bitcoin.org/bitcoin.pdf)开始入手,然后运行一个节点来实践比特币,最后才大量阅读文献来理解区块链。下面以比特币开始,慢慢阐述我对区块链的理解。

    一、区块链总览

    个人觉得,要从浅层理解为什么不可篡改,为什么需要浪费大量资源来做proof-of-Work这种“奇怪”的机制,以及如何解决double-pay问题等等核心的问题,要首先弄清楚区块链技术的业务架构图,从协议层开始分析,再到应用层分析。下面先从最底层开始说起。

    1. 交易(Transactions)

    交易是区块链的最小单元,也是电子现金系统最重要的一点。比特币的所以设计都是为了确保交易可以稳定地被创建,存储,验证。所以先讨论电子现金的实现和如何实现交易的。

    http://www.weidai.com/bmoney.txt 上有提到(比特币的白皮书关于电子现金的引用)

    "The transfer of money. If Alice (owner of pseudonym K_A) wishes to
    transfer X units of money to Bob (owner of pseudonym K_B), she broadcasts
    the message "I give X units of money to K_B" signed by K_A. Upon the
    broadcast of this message, everyone debits K_A's account by X units and
    credits K_B's account by X units, unless this would create a negative
    balance in K_A's account in which case the message is ignored."

    image

    如上图所示,档Owner1跟Owner2交易的时候。

    1. 先用Owner1的公钥来验证这个钱是否是属于Owner1的
    2. 使用Owner1的私钥,对前一次交易的hash值和Owner2公钥进行数字签名
    3. 一条包含交易双方加密货币地址、数量、时间戳和有效签名等信息(其中
      时间戳由timestampserver提供),然后会广播到全网络。
    4. 生成交易的节点和其他节点都要验证这个交易正确性
    5. 成功交易,写入区块链

    显然,这个实现难点是在于验证交易。还得深趴一下如何验证交易。

    1.2. 交易验证

    根据中本聪的论文,验证交易很简单,可以不用遍历全节点就可以查询交易记录是否存在Merkle树中,如果存在,那么就相当于区块接受了交易,交易验证成功。然而论文并没有讨论交易检验的细节,这让十分困惑。(原文如下)

    It is possible to verify payments without running a full network node. A user only needs to keep
    a copy of the block headers of the longest proof-of-work chain, which he can get by querying
    network nodes until he's convinced he has the longest chain, and obtain the Merkle branch
    linking the transaction to the block it's timestamped in. He can't check the transaction for
    himself, but by linking it to a place in the chain, he can see that a network node has accepted it,
    and blocks added after it further confirm the network has accepted it.

    后来为了弄清楚底层实现,拜读了mastering bitcoin(https://unglueit-files.s3.amazonaws.com/ebf/05db7df4f31840f0a873d6ea14dcc28d.pdf)P128页

    1.2.1. P2PKH(公开哈希)

    P2PKH是矿工用来检验交易是否正确的算法。实现时为了保证稳定性,采用了图灵无状态的设计语言。

    https://0dayzh.gitbooks.io/bitcoin_developer_guide/content/p2pkh_script_validation.html

    假设Alice转100Bit给Bob,广播全网络的时候需要携带三个关键信息,Bob提供的公钥,Alice提供的公钥Hash,Bob提供的签名

    1. 先对Bob的公钥进行Hash运算
    2. 判断Bob公钥的Hash跟Alice提供的Hash是否相同
    3. 检测Bob 提供的签名是不是授权了Bob提供的现在认证的公钥
    4. 如果2和3都成功,那么就是检验成功

    2. 区块链

    正如总览所说,先讨论完交易之后,就讨论区块以及区块链。交易信息是通过Merkle树来进行整合到区块里面的,每一个区块互相以链状结构连接结构就是区块链,如下图所示。以问题来带入来说明区块链的技术会比较好,以区块链主要要解决的问题来带入。

    [图片上传失败...(image-a78d30-1519541860650)]

    2.1. 双重支付问题(double-pay)

    The problem of course is the payee can't verify that one of the owners did not double-spend
    the coin. A common solution is to introduce a trusted central authority, or mint, that checks every
    transaction for double spending. After each transaction, the coin must be returned to the mint to
    issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent.
    The problem with this solution is that the fate of the entire money system depends on the
    company running the mint, with every transaction having to go through them, just like a bank

    为了解决这个问题,中本聪提出一个(Timestamp Server),它用于对以区块形式存在的一组数据实施随机散列而加上时间戳,并且对其随机散列进行广播。而我们需要构建一组分散化的时间服务器,我们还需要引入工作量来防止作弊现象。(https://0dayzh.gitbooks.io/bitcoin_developer_guide/proof_of_work.html

    因为信任最长链,所以假如攻击者要修改记录,那么就需要把这个最长链全部修改。但是每一个区块的Hash值计算都要需要很大的算力的,并且最长链越长,攻击者的代价就越高,难度就越高。

    2.2. 工作量证明问题

    上面也提及到,区块挖掘用算力来做代价可以让攻击者花费昂贵的代价。但是这个算力的工作量控制也是一个问题。比特币是这样让矿工做这样的事情:"算出一个不超过某个特定值的区块头的哈希值。比如,如果这个哈希值最大为 2^256-1,你可以证明你算出一个小于 2^255 的哈希值做了至多两次组合"。这个明显是一个NP-Hard问题。而且,比特币设定了一个线性的概率,目标阈值越小,你需要尝试计算的哈希值次数越多(平均来说)。

    217.pic.jpg

    为了控制币区出块速度,比特币使用了一个会不断增加的Nonce常数。公式如下。因为阈值越小,难度越大。所以出块的难度会越来越大。

    
    目标阈值 = 目标阈值 / Nonce常数 
    
    

    2.3. 无知识交易验证问题

    在上面讨论交易的时候就已经说过,用户需要查找区块记录来判断是否交易成功;但是为了不要用户获取区块内容,但是又可以支持快速判断用户是否用户对应的Hash值。比特币使用了Merkle树,Merkle支持零知识证明。构造一个默克尔树,公布 N0,N1,N4,Root,D0 拥有者可以很容易检测 D0 存在,但不知道其它内容。

    2.4. 一致性问题,共识机制(解决拜占庭问题)

    在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。

    工作量证明是矿工在处理交易数据(对数据也是进行哈希)的同时不断的进行哈希计算,求得一位前23位为0的哈希值,这个值成为nonce黄金数。当全网有一位矿工哈希出nonce时,他就会把自己打包的区块公布出去,其他节点收到区块验证区块后就会一致性认为这个区块接到了区块链上,就继续进行下一个区块的打包和哈希计算。在这个过程中,中本聪大神是通过算力的比拼牺牲了一部分最终一致性(因为会有分叉的产生)并且需要等待多个确认,但是这种简单暴力的方法却保证了整个区块链系统的合法性,而且把区块链系统的健壮性提升到极致,就算全网只剩下一个节点运行,这个区块链系统还是会继续运行下去。最后POW也充分提高了区块链系统的安全性,依靠51%攻击理论去破坏区块链系统是只有政府或者疯子才会采取的方法。

    二、区块链前景

    This is the distributed trust network that the Internet always needed and never had. ---来自《区块链革命》

    比特币实现的实质就是一个分布式可信网络,在区块链出现之前,从没发生过两个或者多个参与方之间直接进行可信的交易。总的来说,区块链技术具有的特点是分布式的,加密的,公开的一个分布式账本。

    这段时间一直在思考,也有接触一些区块链的产品。毫无疑问,这是一个革命性的技术。比特币热潮后的冷静让我们更加关注技术本身意义。个人认为,区块链技术可以创造第二代互联网。我们可以在区块链上创建软件、服务、商业模式、市场、机构甚至是政 府事务方面的原则。基于区块链的应用产品有以下的优点:

    1. 网络化诚信
    2. 分布式权力
    3. 把价值作为激励
    4. 安全性
    5. 隐私
    6. 权利保护
    7. 包容性/惠普

    不过现在显然还在萌芽阶段,国家和社会都还不知道怎么用好区块链,或者说从中心化到去中心化这个阶段不仅仅是技术可以决定的,期间困难重重。但是尽管如此,我依然很看好这个技术。


    这段时间,我也关注了以下几个比较区块链产品。

    以太坊

    白皮书:http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6

    官网:https://www.ethereum.org/

    技术特点:

    开发了Solidity合同语言

    教程:https://www.ethereum.org/token

    与传统的编程语言不同,Solidity异常简单。我们可以很简单地编写自己的智能合同,基于以太坊。这是我最看好的技术特定。

    常见应用:

    1. ICO众筹

    https://www.ethereum.org/crowdsale

    没有第三方平台,多了信任,少了跑路。不过感觉很多还是在圈钱。最近了解了一下,中大的陈伟立博士刚刚被采纳的CCFA论文《Detecting Ponzi Schemes on Ethereum: Towards Healthier Blockchain Technology》。里面就是说用机器学习的方法来识别庞氏骗局。我与陈博士联系了一下,也交流了想法。我们都很看好以太坊的智能合约。但是现在很多都还没成熟,圈钱套路的很多。

    2.创建一个民主自治组织

    对这个不太了解,引用官方的一句话:

    "On the Blockchain, no one knows you're a fridge"

    这是一个绝对平等的组织,没有任何阶级歧视,机器人和人类一视同仁。个人觉得理念不错的,感觉会在社区先发展起来。而区块链的最大助力就是社区的力量了。也是看好。

    3. 构建去中心应用

    在金融,保险这些行业可能会率先进入去中心化,降低信托成本的革命。不过感觉还是很多阻碍,个人保持观望吧。主要还是看国家和高管的态度。


    1. NAS(星云币)

    星云是一个去中心化的搜索引擎。说实话,我暂时没看懂。技术介绍(https://nebulas.io/cn/technology.html)。 站在技术的层面,可以看出NAS是一个很牛逼,很牛逼的东西。其中自进化能力,我甚是不解。据说可以避免硬分叉(以太坊就是从以太币硬分叉出来的)。

    不过据我了解,NAS的Merkle树很先进,并且NAS解决拜占庭问题是另外一种方法不是像比特币那样基于算力的。

    如果没有记错的化,应该是使用dBFT:小蚁区块链(delegated BFT,授权拜占庭容错机制)

    优点:

    1. 专业化的记账人
    2. 可以容忍任何类型的错误
    3. 记账由多人协同完成,每一个区块都有最终性,不会分叉
    4. 算法的可靠性有 严格的数学证明

    应用落地我不太了解,不过我挺看好这个技术。


    2.SMT

    比较关注的是SMT,概念很赞!但是官网和白皮书都丑得难以接受,怪不得很难发展。不懂包装。(http://smartmesh.io/

    SmartMesh:基于区块链的物联网底层协议,连接全球手机的P2P网络。其实物联网是很需要区块链去帮助进一次革命的。SmartMesh是物联网的底层协议,它可以让网络设备在无网情况下实现相互连接,同时,它内置区块链轻节点,可以实现无网的通信、无网支付、无网游戏等。(注意是无网!!无网!!!)

    其实在偏远地区,接近20亿人吧(好像有人统计过),网络条件都很差,无法进行网络支付。如果这个技术落地了,将会直接推动整个地球的生产力。


    至于其他,就没有多大的关注了。很看好以太坊。其实关注的地方还远远不止这么点,但是限于篇幅问题,就到此为止吧。总的来说,区块链技术确实具有跟AI,VR等未来的技术一起讨论的价值,相对来说需要研究人员有很高的开发能力和学习能力,前景很看好。

    相关文章

      网友评论

          本文标题:对区块链的粗浅理解和认识

          本文链接:https://www.haomeiwen.com/subject/ypzlxftx.html