ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

北大肖臻《区块链技术与应用》学习笔记

2021-07-30 10:33:10  阅读:227  来源: 互联网

标签:nonce 区块 比特 spending double 笔记 肖臻 交易


四、BTC-实现

视频地址:https://www.bilibili.com/video/BV1Vt411X7JF?p=4

  • Transaction-based ledger(比特币是基于交易的账本模式)

    • Account-based ledger(以太坊是基于账户的账本模式)
  • UTXO Unspent Transaction Output(还未交易的输出)

    比特币系统的全节点要维护一个叫UTXO(unspent transaction output)(还没有被花出去的交易的输出)的数据结构。区块链上有很多交易,有些交易的输出可能已经被花掉,有些还没有被花掉。所有没有被花掉的输出的集合就叫做UTXO

UTXO的作用

为了检测double spending。即检测新发布的交易是否合法。因此全节点要在内存中维护UTXO这样一个数据结构,以便快速检测double spending

  • total inputs=total outputs
    每个交易可以有多个输入,也可以有多个输出,所有输入金额之和要等于输出金额之和。因此一个交易可能来自多个地址,可能有多个签名

  • total inputs>total outputs的情况

    比特币系统设计了第二个激励机制:交易费(transaction fee)。矿工将信息放入区块中

  • 挖矿时只改随机数不够,还可以更改根哈希值。

  • 比特币的发行总量及计算公式

    Geometric serices

    21wx50x(1+1/2+1/4+....)=21wx50x1/(1-1/2)=2100w

  • 比特币系统设计的平均出块时间是10分钟,就是整个系统平均10分钟会产生一个新的区块,因比特币数量的上限以及人为的提高寻找区块链的难度,导致新区块的产生仅仅依靠nonce(随机数)很难维持出块奖时间的稳定,因此加入了coinbase的随机, 只有铸币交易没有输入,它有一个coinbase,可以写入任何的内容。因此通过改变这其中的内容来改变最后的哈希值。所以真正挖矿的时候只有两层循环,外层循环调整coinbase域的extra nonce。算出block header里的根哈希值之后,内层循环再调整header里的nonce。

    • 每次求解nonce 是Bernoulli trial :a random experiment with binary outcome

  • 比特币系统中验证交易的合法性,就是把input scripts和output script配对后执行来完成的。注意:不是把图中的input scripts和output scripts配对,因为这两个脚本是一个交易中的脚本。不是把同一个交易里的输入脚本和输出脚本配对,而是把这里的输入脚本和前面提供币来源的交易的输出脚本配对。如果输入输出脚本拼接在一起,能顺利执行不出现错误,那么该交易就是合法的。

  • 挖矿过程每次尝试一个nonce可以看作是一个Bernoulli trial(伯努利实验)。每一个随机的伯努利实验就构成了一个伯努利过程。它的一个性质是:无记忆性

  • 指数分布也是无记忆性的。因为概率分布曲线的特点是:随便从一个地方截断,剩下一部分曲线跟原来是一样的。比如:已经等十分钟了,还没有人找到合法的区块,仍然参考概率密度函数分布 ,平均仍然要等十分钟。Prisson process(泊松过程)将来还要挖多长时间,跟过去已经挖了多长时间是没有关系的。这个过程也叫:progress free

两个问题(Bitcoin is secured by mining)

  • 他能不能偷币,能不能把别人账上的钱转给自己

    假如他把M→A的交易写在了一个区块里面,现在他获得了记账权,他又发布另一个交易,把这个钱转回给自己,即M→M'。同样,这很明显是double spending,只要是诚实的节点都不会接受这个区块。

  • 能不能把已经花了的币再花一遍(即double spending)

    假如他把M→A的交易写在了一个区块里面,现在他获得了记账权,他又发布另一个交易,把这个钱转回给自己,即M→M'。同样,这很明显是double spending,只要是诚实的节点都不会接受这个区块。

    • 注意:区块插在哪个位置,在刚挖矿时就是要决定的,因为设置的block header里要填上前一个block header的哈希。所以他想插到那个区块的话,一开始就要认定,而不是等获得记账权以后再认定。irrevocable ledger(不可撤销的记账)
  • 比特币协议当中,缺省(系统默认)的是要等六个confirmation。有了六个confirmation,才认定M→A的交易是不可篡改的。区块链是不可篡改的账本,那是不是意味着凡是写入区块链中的内容就永远改不了呢?经上述分析可以看出,这种分析只是一种概率上的保证。刚刚写入区块链的内容,还是比较容易被改动的。经过一段等待时间之后,或者后面几个区块被确认之后,被篡改的概率就大幅度下降(指数级别的下降)。

selfish mining

M→M'的交易所在的区块所在的链条虽然短,但是先偷偷的生成比上面更多的区块,然后等上面的链条公布后再公布,就能够胜过上面的几个区块了

  • 目的一:selfish mining是分岔工具的一种手段。但这样成功的概率并不大,因为有恶意的节点本来算力占比就不高,还要生成更多的区块,就非常困难

    目的二:假如A挖了两个区块都没有发布,而在B挖到一个区块公布后立马公布,这样B挖的区块就作废了。好处是减少竞争,因为A在挖第二个区块时,别人还在挖第一个区块(前提是A算力足够强)。

    坏处是假如A挖出一个区块,A以为他能赶在别人面前再挖一个区块,结果这时有人挖出了第一个区块,那这样的话A就要在别人发布之后立马发布,去争取区块奖励

标签:nonce,区块,比特,spending,double,笔记,肖臻,交易
来源: https://www.cnblogs.com/addc/p/15078407.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有