04-BTC-实现

这篇具有很好参考价值的文章主要介绍了04-BTC-实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

比特币系统的实现

UTXO(unspent transaction output)

交易费(transaction fee)

挖矿(Mining)

比特币的总量

挖矿的难度调整


前言

学习肖臻老师的《区块链技术与应用》公开课笔记,供学习参考。


比特币系统的实现

区块链是去中心化的账本,而比特币使用的是基于交易的这种账本模式(transaction based ledger),所以在比特币的系统中并不会显示每个账户中有多少钱。

UTXO(unspent transaction output)

区块链上的交易中没有被花掉的输出的集合叫做UTXO,UTXO集合中的每个元素要给出产生输出交易的哈希值以及它在这个交易里是第几个输出。

假如A给B5个比特币,B花掉了。A也给了C3个比特币,C没有花掉,那么这5个比特币就不算在UTXO,而3个比特币算。只要C永远不把这3个比特币花掉,那么这个信息将会永久保存在UTXO中。

 UTXO集合可以检测double spending,即检测新发布的交易是否合法,所以比特币系统中的全节点都要维护UTXO这个数据结构。

区块链中的每个交易可以有多个输出和输入,所有输入金额之和要等于输出金额之和,即total inputs=total outputs,所以一个交易可能来自多个地址,有多个签名。

但是有些交易的total inputs略微要大于total outputs,这就要说到比特币系统的第二个奖励机制:

交易费(transaction fee)

因为打包交易的过程比较麻烦而且费时费力,所以要保持矿工挖矿的积极性,并且让矿工愿意去打包其他人的交易,出块奖励是不够的,于是比特币系统设计了第二个奖励机制:交易费。

发布区块的节点将某个交易打包在区块中,于是该交易给节点一些小费,这就叫做交易费。交易费一般很小,甚至一些简单的交易没有交易费。


除了比特币这种基于交易的模式,与之对应的还有基于账户的模式(account-based ledger),比如以太坊系统,在这种模式中,系统就会显示每个账户中有多少钱。但是比特币基于交易的模式的隐身保护性较好,缺点是比特币当中的转账交易要说明币的来源,而基于账户的模式就不用。

挖矿(Mining)

比特币的总量

比特币的发行是通过挖矿(mining)获得的出块奖励,最初的出块奖励是50个比特币,每隔21万区块奖励就会减半,到今天,2022年,矿工每成功记账一次,获得的奖励为6.25个比特币,而产生的比特币构成的一个几何序列如下:

04-BTC-实现

 由此我们可知,比特币最终的总量为2100万,预计在2140年比特币会被全部挖完。

挖矿的难度调整

那么21万个区块需要挖多长时间呢?因为比特币系统设计的平均出块时间为10分钟,所以经过计算(过程见下图),21万个区块大概要挖4年时间

04-BTC-实现

那么问题来了,

比特币系统如何保证这10分钟的平均出块时间呢?

除了通过调整随机数nonce,我们还可以调整Merkle Root(区块中交易构成的merkle tree的根哈希值)来调整挖矿的难度来控制时间

因为nonce是32位的无符号整数,所以只有2的32次方个可能的取值。按照比特币目前的挖矿情况来看,很可能把所有可能的取值都遍历一遍也找不到合适的。所以只改变随机数是不够的,还可以改根哈希值。虽然哈希值是环环相扣的,但是每产生一个新的区块就会产生新的比特币,也就会产生铸币交易

铸币交易没有输入,所以也就不会受到前面的区块的影响,它有一个coinbase,可以写入任何的内容。也可以把digital commitment里的commit的哈希值写入里面。也可以把第一节讲到的预测股市的内容写入里面,coinbase的内容是没有人会检查的,甚至可以写你的心情。

coinbase对应的是最后一个block header里的根哈希值对应的merkle tree,左下角的交易是coinbase(如下图),将coinbase的域改变之后,其上的哈希值就发生了变化,然后沿着merkle tree的结构往上传递,最后导致block header里的根哈希值发生变化。

04-BTC-实现

 所以真正挖矿的时候只有两层循环,外层循环调整coinbase域的extra nonce。算出block header里的根哈希值之后,内层循环再调整header里的nonce。

伯努利实验(Bernoulli trial)

挖矿过程就是不断的尝试nonce的过程,每一次的尝试可以看作是一个伯努利实验,每一个随机的伯努利实验构成了一个伯努利过程,这个过程是无记忆性的。也就是说不管你前面尝试了多少次,你每下一次的尝试的概率都是相同的。文章来源地址https://www.toymoban.com/news/detail-404531.html

到了这里,关于04-BTC-实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eth以太坊系币种表现不佳,这轮牛市还值得持有吗?投资比特币还是以太坊好呢?btc未来会涨到多少

    最近eth以及相关的l2表现的不是很好,许多人对arb,对op,甚至对eth都没有信心了,问我能不能换仓,我说说我的体会 区块链欧意平台:by3.top 区块链bi安平台:by4.top 2021年,eth就是舞台上最靓的仔,是场下所有人眼里最集中的焦点,喜欢上了那种受万千瞩目的样子了。所以这

    2024年04月12日
    浏览(44)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(58)
  • Ubuntu20.04根目录/home目录扩容(双系统,亲测有效)

    sudo apt update   sudo apt install gparted         安装完成后输入: sudo gparted         如图所示:         1. 找到你要扩容的根目录/home目录(会发现名称右边有个钥匙,表示现在无法对其进行操作)         2. 扩容要求1:只能将待扩容磁盘相邻的空间扩容给他 (如果不相邻

    2024年02月03日
    浏览(64)
  • ubuntu20.04 系统下 .7z 文件解压缩到指定的目录下

    环境: ubuntu 20.04 ubuntu 下有个 7z 的压缩文件需要解压,需要解压到指定的目录下,而不是压缩包当前目录下 ubuntu 下的 7z 解压软件: p7zip-full 安装命令: sudo apt install p7zip-full 7z x file.7z 默认会 把 file.7z 解压到压缩包的当前目录下 7z x file.7z -r -o /home/rtt/ 解压到指定目录下,但

    2024年02月13日
    浏览(42)
  • 【分布式系统】前言

    争取写一下阅读笔记,更新有关分布式系统的一切,先开个坑。 现在的心得如下: 不知道啥时候能破解哈~~ 内容包括部分6.824 + 读的论文 + DDIA: DDIA mapreduce GFS VMwareFT Raft zookeeper chain replication(CR)和 CRAQ time,clocks viewstamped replication paxos PBFT 分布式事务

    2024年02月14日
    浏览(254)
  • 区块链笔记4--BTC实现

    区块链是一个去中心化的账本,比特币采用了 基于交易的账本模式 。然而,系统中并无显示记录账户包含BTC数,实际上其需要通过交易记录进行推算。在比特币系统中,全节点需要维护一个名为 UTXO(UnspentTransaction Output尚未被花掉的交易输出) 数据结构。 如图:A转给B五个B

    2024年02月11日
    浏览(46)
  • 实验6-cp –r系统命令的实现--源路径(目录)中的所有文件和子目录,以及子目录中的所有内容,全部拷贝到目标路径(目录)中--操作系统实验

    掌握Linux目录操作方法,包括打开目录、关闭目录、读取目录文件 掌握Linux文件属性获取方法,包括三个获取Linux文件属性的函数、文件属性解析相关的宏 掌握POSIX与ANSI C文件I/O操作方法,包括打开文件、关闭文件、创建文件、读写文件、定位文件 利用POSIX API(文件操作也可

    2024年02月08日
    浏览(54)
  • Ubuntu入门04——目录与文件

    目录 1.显示当前工作目录 2.更改目录 3.创建工作目录 4.删除工作目录 5.移动文件或者文件夹 6.文件夹and文件查看命令 7. 回到根目录,回到上一级 8.删除工作目录 9.查看目录和文件 10.以树状图列出目录内容    11.文件查找   12.在数据库中查找文件或目录   直接创建文件夹:

    2024年02月10日
    浏览(38)
  • 如何在比特币系统内创造人工生命

    信息来源:coingeek.com 自2015年以来,关于 比特币 能否进行复杂计算以及比特币是否“图灵完备”的争论一直在持续。不幸的是,现在存在着一种流传甚广的谬论,有人说比特币并非图灵完备的,它不能像 以太坊 区块链那样进行复杂的计算。在本文中,我们将对比特币图灵完

    2024年02月05日
    浏览(39)
  • Ubuntu22.04安装各种常用软件-目录

    Ubuntu 22.04 基础环境搭建 Ubuntu 22.04 安装Fail2Ban Ubuntu 22.04 安装prometheus Ubuntu 22.04 Cron使用 Ubuntu 22.04 安装docker Ubuntu 22.04 安装MySql Ubuntu 22.04 安装docker

    2024年01月23日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包