zoukankan      html  css  js  c++  java
  • DataWhale编程实践——区块链学习笔记

    本篇文章同样是DataWhale小组学习的笔记,但希望以更加轻松的方式记录个人对一些重点概念的浅薄理解。由于水平实在有限,不免产生谬误,欢迎读者多多批评指正。

    区块链基本概念


    区块

    区块链的基本组成单元,可以看成一种数据结构。区块中通常包含区块头与区块体,分别用于记录表明其合法性的特征及实际数据。

    节点

    节点可以理解为整个交易系统中为大家提供验证、记录、广播等服务的个体。通过成功求解某个数学问题,节点会获得为交易记账的权力,然后将打包好的区块广播给其他节点,而其他节点校验通过后,会将区块按顺序接入过去已达成共识的账本中,构成区块链,以实现分布式存储的功能。

    通信容错

    区块链中的通信容错问题又被称为拜占庭将军问题,也就是指当分布式系统中某些节点出现恶意或错误行为时,如何保证整个系统能继续正常运行。若系统所用的某个算法在一定范围内可满足上述要求,则称该范围内系统达到了拜占庭容错。

    概念类问题


    什么是区块链(Blockchain)?

    这个问题有多个回答的角度。狭义的区块链是指一种包含特定类型内容的链式数据结构。而我们常说的“区块链”一般指区块链技术,它是由一系列相关技术的集合。区块链技术的核心思想是建立去中心化的信任机制,人们期望它可以在互联网世界中构建可靠的价值表示和转移体系,并最终推动金融、文化、商业等领域的变革。

    区块链与比特币有什么关系?

    有关分布式和去中心化的思想与技术由来已久,但现在我们常说的“区块链”概念起源于比特币的发明。比特币是一种虚拟的数字货币,它的概念在2008年由一位匿名的技术极客“中本聪”提出,他后来也主导构建了我们现在熟知的比特币网络。后来人们在比特币系统所运用的一系列技术的基础上,逐渐总结和发展出了区块链技术的概念。如今比特币常被称为区块链1.0,随着越来越多的技术人员投入到区块链的设计和开发中,目前已有了2.0及3.0版本的区块链技术体系,而基于这些技术又诞生了众多类似于比特币这种形式的具体应用,如以太坊和EOS等等。

    区块链技术能解决什么问题?

    前面已经提到,区块链技术可提供一种去中心化的信任体系,在这个体系内,信息将以去中心化的方式存储,价值可以在无中介的前提下传递,传递的过程不可逆且无法篡改。

    下面用更通俗的语言做一些解释。一切商品都存在价值,而为了交易方便,人们利用货币作为无差别的一般等价物,它可以用来衡量及交换商品。但是货币发挥作用需要一个受到大众信任的中心机构提供担保,简单地说,就是要由政府来统一发行并保障其正常流通。可以想像,如果大家都可以生产货币,那人们对货币的信任就会崩塌,它也自然无法起到等价物的作用了。此外,对于现代社会中常用的虚拟货币系统,比如支付宝或微信支付,则完全可看作是国家发行的法定货币在互联网世界中的等效表示,而且相比于纸币,这些虚拟货币的交易本身也依赖于中心信用机构提供的记账和转账等中介服务(而纸币虽然由中央发行,但可以直接在买卖双方之间转递,无需第三方担保)。上述系统均可看作是中心化的货币体系,而所谓去中心化,就是指摆脱提供信用担保的中心发行商及交易中介,让货币(或其他有价值的物品)依据一定规则在用户社区中实现自主、独立的发行及交易。

    发展区块链技术的意义是什么?

    就目前的情况而言,区块链技术提供了一类去中心化、无国界、无主权的数字货币,可以满足用户对交易中的隐私安全和稳定性的要求。而更广泛的意义上讲,任何有价值的资产(包括实物或虚拟资产)都可以以通证(Token)的形式映射到链上,包括以太坊等体系可以为这些通证设计智能合约,以便实现可信赖的自动化交易。而在《区块链超入门》一书中,作者还提到区块链中的通证和智能合约等技术的重要意义更多地是面向机器而非人,互联网乃至物联网上的不同类设备及虚拟设备均可以利用这些合约进行安全高效的协作并完成价值传递,这也可能是未来人们对于区块链应用探索的主要方向之一。

    区块链1.0、2.0和3.0之间的主要区别是什么?

    区块链1.0是指第一代区块链技术,以比特币为代表性应用,或者说,其本身的发展就是以比特币的诞生为起点的。区块链1.0提供了实现分布式账本的核心思想及技术,它以“通证”(Token)的概念来表征数字世界中的价值,并为“通证”去中心化的发行和转移提供了完整的解决方案。

    区别于区块链1.0,区块链2.0的代表性应用是以太坊。以太坊的提出一定程度上是为了填补第一代区块链技术中存在的一些不足,比如比特币系统的设计缺少图灵完备性,因此它的脚本无法保证支持所有类型的计算,相比之下以太坊开发所采用的solidity语言则是图灵完备的。除此之外,以太坊系统还允许开发者通过编写“智能合约”(满足设定条件后会被系统自动执行的可信赖的合约),这就为用户提供了去中心化、安全可靠的数字资产转移工具,在此基础上人们可以开发有实际价值的去中心化应用,从而大大拓展了区块链技术的应用范围。

    区块链3.0是指当前区块链技术发展所处于的新阶段,业内对这一阶段的代表性应用体系及核心技术思想尚没有达成共识。包括EOS在内的一些新兴区块链应用正在定义这个时代的内涵,比如大幅提升区块链系统能承受的实时交易吞吐量,以及进一步完善基于区块链的应用开发平台及生态等等。人们期望通过这一阶段的发展,区块链技术将有机会被推广到各大行业中,真正地带来互联网世界的变革。

    技术类问题


    分布式账本如何实现?

    我们说,相比于常规的线上交易如支付宝转账,区块链可以实现无中介的点对点交易。但这自然带来一个问题,交易由谁来记账。试想,如果没有可靠的支付宝官方来记录每个用户的交易及余额,而是让每个人自觉地记录自己的账本,那人们就可以随意篡改自己所拥有的资产金额,或者不承认过去已经完成的交易。既然这样,区块链技术又是怎么解决这一问题的呢。

    对于区块链而言,它没有提供信用担保的中心服务器,而是采用了分布式账本的方式完成记账。这样一来既避免了用户资产和交易被提供服务的中心机构监视和控制,又保证了交易的可靠性。

    以目前大家最熟悉的比特币为例,整个比特币世界可以看做一个由众多节点组成的去中心化网络。每个节点就是一个参与比特币交易系统的服务器,其中保存有全部用户账本信息的服务器被称为全节点,仅保存与自己账户相关信息的服务器被称为轻节点。这里的全部用户账本信息并不是指每个用户的账户余额,而是一条独特的数据“链”(也就是狭义的“区块链”一词代表的数据结构),这条不断增长的链上记录了历史上所有的交易。这些已被证实合法的交易被记录在众多的全节点中,并可以用于验证今后的用户交易,因此任何个体或小群体都无法篡改自己的资产信息或伪造交易(除非控制半数以上算力的节点共同决定造假)。

    区块链如何记录交易信息?

    区块链,顾名思义就是一种链式的数据结构,这条链由众多的区块按构建的时间前后顺序所组成,而所谓区块就是用来记录交易信息的“集装箱”。对比特币而言,一个区块能够记录约2000个左右的交易,交易在一个区块内部以梅克尔树的形式记录,这样的结构保证了区块链的运行效率,同时也使得人们可以快速地对某组数据进行校验。而与通常的链式数据结构类似,区块与区块之间通过指针单向连接,这里的指针是指每个区块的头部所包含的前一个区块数据的哈希值(可以理解为数字签名或指纹,可通过对原信息进行一种不可逆的压缩映射得到),它不仅可以用来追溯更早的历史交易,而且使得任何对过去已被认可的信息进行篡改都将很容易被发现。

    如何保证交易信息被及时且正确地记录?

    任何新交易在被打包进区块链之前,都需要先被放置进一个候选的区块,当有其他节点后续基于这个候选区块构建新的区块时,就认为该候选区块得到了一次确认。理论上可以证明,当某个候选区块之后已连接了6个新区块,那么这个候选区块内出现交易双花(比如比特币被同一用户分别支付给两个人)的可能性几乎为0,此时候选区块的合法性得到彻底确认。

    这里自然存在一个问题,既然区块链网络中存在如此多的节点,那么一笔交易究竟应当由谁来写进区块中?而节点服务器本身又为何要承担这个任务?

    解决上述问题的方法稍显复杂,这是由于去中心化的账本记录过程会遇到中心化记账不会遇到的一些问题。具体而言,当一笔交易发生时,交易发起者需要将自己签署的交易单复制多份,分别发送给收款者及区块链网络中的每个工作节点。工作节点的任务就是定期整理他所收到的交易账单并打包构成候选区块。而决定哪个节点可以向公链提交自己整理的候选区块就取决于谁先完成对一个数学难题的计算(也就是我们通常所说的“挖矿”行为),用简单的话说,挖矿的本质就是通过求解数学问题来争夺记账权。在比特币系统中,节点需要通过修改候选区块头部的一个32位随机数,以使得包括这个随机数及交易账单在内的所有区块信息的哈希值小于一个“目标值”,这个过程只能通过反复修改随机数后执行哈希计算来寻找答案,而且其计算量非常大。最终率先完成计算的节点可以将自己打包的候选区块推送至全网。

    既然挖矿的过程需要付出这么多的时间和算力,那又是什么驱动着众多节点参与到记账工作中的呢?答案是挖矿和记账过程可以给他们自身带来收益。在打包候选区块时,负责打包的节点(可以称为矿工)还会在区块中添加一个“币基交易”,这个交易会创造出新的比特币并转账到矿工的钱包地址中。通过挖矿率先获得记账权的节点就可以将包含“币基交易”的候选区块向全网广播,在得到其他节点的确认后自己就获得了收益。因此,区块链实际上是通过合理构造的奖励机制来驱动整个分布式系统运转的。

    最后要说明一点,虽然我国目前正从政府层面上支持推动区块链技术的应用和发展。但在当前的国家规定中,包括比特币在内的虚拟货币都不是法定货币,交易平台不得提供与此类虚拟货币相关的交易和兑换服务,但个人在自担风险的前提下,可以将其作为一种虚拟商品持有。因此还是要提醒大家,应理性冷静看待区块链技术及其衍生品,投资需谨慎。

    参考资料:

    1. https://github.com/datawhalechina/team-learning-program/tree/master/Blockchain DataWhale组队学习资料《编程实践(区块链)》
    2. http://blog.codinglabs.org/articles/bitcoin-mechanism-make-easy.html 一个故事告诉你比特币的原理及运作机制
    3. 《区块链超入门》 方军著
    4. http://blog.codinglabs.org/articles/bitcoin-mechanism-make-easy.html 一个故事告诉你比特币的原理及运作机制
    5. https://blog.csdn.net/tiandiwuya/article/details/81289923 区块链架构1.0、2.0与3.0梳理
  • 相关阅读:
    搭建jenkins jmeter持续集成
    Jenkins windows环境搭建
    Appium环境搭建(二)
    Qt webkitwidgets模块和webenginewidgets模块
    Qt程序无法输入中文的问题
    在Qt中使用SQLite数据库
    Ubuntu下搜狗拼音输入法打不出汉字的解决方法
    drupal7创始人root忘记密码的解决办法
    javascript块级作用域
    javascript闭包
  • 原文地址:https://www.cnblogs.com/liugd-2020/p/14552406.html
Copyright © 2011-2022 走看看