主页 > 以太坊钱包imtoken安装 > 比特币是如何产生和交易的

比特币是如何产生和交易的

以太坊钱包imtoken安装 2023-10-17 05:09:01

最近在研究区块链,从区块链的起源——比特币说起,小有收获,整理成文档分享给大家。 文章重点讲解比特币交易系统,适合对比特币系统或区块链技术有一定了解的人士阅读。 通过本文,您可以了解比特币底层技术区块链的运行原理。 因为大部分文章要么大谈区块链的去中心化、防篡改、溯源这些可以改变行业、改变世界的特性,却没有说明如何实现,要么只对某个环节进行深入分析,缺乏整体衔接介绍,因此本文试图给出一定深入的整体介绍,希望能帮助大家了解比特币系统的实现。

中本聪在比特币白皮书中表示,比特币交易系统是一种完全通过点对点技术实现的电子现金系统,可以使在线支付由一方直接发起并支付给另一方,无需任何金融中介。 机构(基于密码学而不是信用)也可以防止双重支出(去中心化)。 网络通过哈希对所有交易打上时间戳,将它们合并成一条不断延伸的基于哈希的工作量证明链作为交易记录,除非再次完成所有工作量证明,否则形成的交易记录不会被更改(防篡改) , 可追溯)。 实际上,它是一系列数据块,它们使用密码学方法相互关联。 每个数据块都包含比特币交易信息,用于验证其信息的有效性并生成下一个区块。 该系统的核心流程是比特币的生成和交易。 接下来,我们将解释比特币是如何产生的,比特币是如何交易的,去中心化系统如何解决共识问题,为什么数据不能被篡改,以及如何追溯(这些问题的答案会在文中加下划线,方便定位) . 文章主要分为三个部分,一是比特币的产生; 另一个是比特币的交易; 三是附录,包括常见问题和技术介绍,帮助大家理解文章。

一、比特币的诞生——挖矿

整个挖矿过程如下:

检索待确认交易的内存池,并选择包含在区块中的交易。 中本聪创建的创世块没有交易打包,所以挖的是一个空块。 由于每个区块都有容量限制,未来挖矿一般会根据手续费对待确认的交易集合进行排序,从高到低打包,从而使每次挖矿的收益最大化; (挖矿除比特币外,还有交易确认记录的交易手续费)

构建Coinbase,确定打包交易集,统计手续费等信息;

构造HashMerkleRoot,为所有交易构造Merkle数;

填写其他字段,获取完整的区块头; (234步看不懂没关系,看完全文很容易理解)

对区块头进行SHA256D运算(两次SHA256计算)(详见下文,建议先阅读附录1中的哈希运算,有助于理解);

如果验证结果遇到困难,将向全网广播。 如果全网验证通过,则所有节点一起记录,如果不满足参数的变化,则继续计算验证; (共识机制其实就是这个算法和它的验证过程,没有中心,每个人都认可;哪个节点生产比特币,完全取决于算力和运气;每个节点都有所有的交易记录信息)

上述过程中最重要的部分是哈希计算,过程如下:

通过Sha256D(version+hashPrevBlock+hashMerkleRoot+nTime+nBits+nonce)得到64位十六进制或256位二进制哈希值(这些字段见表2区块头结构);

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程_比特币交易流程图

表1:区块结构(区块头信息见表2,交易详情见表3、表4)

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图_比特币交易流程

表 2:区块头结构

比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图

2. 将生成的哈希值与目标哈希值进行比较。 如果当前nonce值计算出的hash值较小,则挖矿成功,否则挖矿失败,缺席者需要更改nonce值(一般加1)重试。 直到成功(暴力搜索);--以上其实就是工作量证明机制(Proof-of-Work),解决的是共识问题。

比特币交易流程图

1)目标哈希值target=2*(256-难度)

2)难度值由节点自动调整,规则为New difficulty=OldDifficulty*(Actual time of last 2016 Blocks/20160 minutes),即最新2016个区块花费的时间与20160分钟的比较,其中 20160 分钟是这些区块在 10 分钟的速率下花费的时间长度。

那么如何将计算出的64位十六进制或256位二进制哈希值与目标哈希值进行比较呢? 如果是二进制,直接查看得到的hash值的前N位是否全为0(如下图),如果是则挖矿成功。 (0越多,数值越小;数值越小,N越大,难度越大)可以类比为抛硬币,依次抛256枚硬币,编号从1到256,每次Hash运算为好比抛硬币,抛256枚硬币的结果,如果前N枚硬币全部正面朝上,则获得记账权,挖矿成功。 如果是十六进制,直接比较就可以了。 (二进制也可以直接比较)

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图_比特币交易流程

图1:挖矿示意图

因此,挖矿过程就是节点构造区块、初始化区块头字段、计算哈希值和验证区块的过程。 如果不合格,则将nonce递增,然后计算并验证,依此类推。 每次产生一个区块(全网)大约需要10分钟,最初每个区块产生50个比特币,每个比特币是1亿聪,之后大约每4年(21万个区块)减半(比特币的产生) . 总量约2100万枚,2140年开始开采,2045年开采99.9%。下图为比特币生成年表

比特币交易流程_比特币交易流程图_如果国内比特币交易网站销户了,那以后怎么交易

图 2:比特币产生年份表

查看上表,我们可以发现第一个区块产生于2009年,具体时间为2009年1月3日18:15:05 GMT,由中本聪创建。 有趣的是,中本聪在创世块上留下了时代周刊头版文章的标题“The Times 03/Jan/2009 Chancellor on brink of second bailout for Banks”,讽刺中心化金融体系,巧妙地证明了这个区块是生成的2009 年 1 月 3 日报纸头条出现后。下图是创世块信息的屏幕截图。 理解起来,它记录了区块高度、哈希值、前一个区块哈希值、时间难度等交易信息。 根据上一个区块的哈希值,下一个区块的哈希值可以追溯到上一个区块和下一个区块。

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图_比特币交易流程

图 3:创世区块信息

2. 比特币交易

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

交易必须以公钥、私钥和地址开头。 施工过程如下:

使用随机数生成器生成 256 位私钥;

私钥经过SECP256K1椭圆曲线算法处理生成公钥,不能反向推导出私钥;

通过SHA256哈希计算公钥得到一个32字节的哈希值(下面有流程图,可以参考理解),然后用哈希值进行RIPEMD-160计算得到一个20字节的哈希值,并放版本号——一个20字节的哈希值组成的21字节的数组进行SHA256D运算,将得到的哈希值的前4个字节作为校验和,放在最后21字节组的地址,和组成的25字节数组进行Base58编码得到地址。

比特币交易流程_比特币交易流程图_如果国内比特币交易网站销户了,那以后怎么交易

图 4:地址生成算法

通过以上过程,公私钥地址就可以进行交易了。 在交易过程中,交易需要通过私钥进行签名。 签名完成后,将发起交易。 就是上面的挖矿过程。 通过算法Sig=FuncSig(FuncHash(m),dA)=(R,S)进行签名,其中dA为签名私钥,m为交易信息,FuncHash为哈希函数,FuncSig为签名算法, Sig 为签名结果。 验证过程通过一系列函数算法进行验证,略显复杂,有兴趣自行了解。 数据签名算法的核心是证明数据的发送者是签名者发送的,以防止抵赖。 签名后的数据存储在解锁脚本中,如表4交易结构2所示。比特币系统中有两种交易,一种是挖矿收益,即一个区块的第一笔交易,称为coinbase交易; 二是普通交易,即非挖矿交易。

比特币交易流程_比特币交易流程图_如果国内比特币交易网站销户了,那以后怎么交易

表 3:Coinbase 交易结构

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

表 4:常见的交易结构

交易结构构建完成后,即可发起交易,交易信息会进入待确认交易池等待打包确认。 在比特币的交易信息中,有两个关键字段:input/output。 输入没有具体说明某人拥有多少比特币,而是指向比特币的来源,即之前确认交易中的UTXO(Traceable); output 定义了某人有多少个比特币,output 必须全部输出(最多两个),分为两部分,一个给外人,一个给自己,这实际上是一种找零机制。 正是这种设计创造了分布式账本,所有的区块和交易形成了一个相互连接的链。 更改机制的一个好处是可以保护隐私。 因为每一笔比特币交易都可以在全球公共账本上看到,如果一个比特币地址不小心被用户知道,不利于用户的隐私保护。 有了找零机制,地址A向地址B发起支付,找零地址不设置为A,而是设置为C(自己的另一个账户)。 那么地址 B 和 CA 是吗? 整个交易的真实性有可能变得难以揣测。

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程_比特币交易流程图

图 5:交易示例图

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

交易信息进入交易池待确认后,各节点将收到的交易信息写入区块。 当一个节点发现一个足够困难的工作量证明时,它会向全网广播,由其他节点对该节点进行验证。 只有当区块中的所有交易都有效且之前不存在时,才会认可区块的有效性(通过Merkle树-防篡改的对比验证,Merkle树可以查看附录2),验证是passed 则全网节点将跟随区块的末尾创建一个新的区块来扩展链条,并将接受区块的随机哈希值作为新区块之前的随机哈希值。 如果两个节点同时找到答案,其他节点将在自己最先收到的区块的基础上工作,直到产生下一个区块,其中一条链被确认为较长的那条链,然后是较短的支链节点将切换边并开始在更长的链上工作。

在这种共识机制中,新的交易不需要到达所有节点,只要交易信息能够到达足够多的节点(一半以上),那么这些交易就会被整合到一个区块中,其他没有收到的节点将以后发现如果漏了某个区块,重新下载更新就好了,这就是拜占庭容错。 --拜占庭问题可以看上一篇。 最终将整个交易信息打包到不同的区块中,区块直接关联哈希算法和时间戳,实现溯源。

比特币交易流程_比特币交易流程图_如果国内比特币交易网站销户了,那以后怎么交易

图 6:块链接图

综上所述:比特币电子现金系统将每笔交易关联哈希处理,通过Merkle树将交易关联到区块,通过区块头哈希关联到下一个区块,实现了整个Transaction-transaction,transaction-block,块块关联,执行过程可追溯; 通过哈希Merkle树进行信息比对验证、工作量证明机制(POW)、时间戳服务器实现防篡改和防双重支付; 通过工作量证明机制下的共识算法和激励,实现系统的去中心化; 当然这里涉及到各种密码学原理,比如非对称加密技术保证数据传输安全、默克尔树保证数据真实性和优化存储等。因此,其实其底层技术区块链的优势无外乎两点. 一种是共识机制创造的去中心化系统,可以比传统技术更好地解决某些问题; 二是密码技术创造的防篡改和溯源。 可以很好的解决各行业存在的信任问题; 至于具体可以应用到哪些场景,以及如何解决这些场景的痛点,我们下次再说!

三:附录

附录 1:哈希算法

哈希算法,又称哈希函数算法,在区块链中应用广泛。 看一个转换例子更直观,一个字符串xingfushifendouchulaide的hash运算结果(64位十六进制)。

文字:幸福生活

算法:sha256

结果:b717189a738923eca3789287390b9b9c8a7839bca783928000cbdabed892bc43

如果用MD5加密,运算结果为32位16进制,用Sha512加密,结果为128位16进制。 哈希算法实际上是一个映射关系组,可以将明文快速转化为哈希值,但短时间内逆向明文难度极大。 另外,当明文稍加改动,哈希值就会相差很大,不同的明文很难有相同的哈希值。 万一(概率很低)真的发生了明文x不等于y,f(x)=f(y),那么就会发生冲突。 一般采用链接法、开放寻址法、桶寻址法(可自行理解)来解决。

哈希函数一般有以下几种:

. 直接取余法:取余

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图_比特币交易流程

.乘法舍入法:四舍五入

.Square取中方法:平方后取中

.addition hash:将输入的元素相加得到结果

.Multiplication hash:乘以固定或变化的数字

.Bit operation hash:使用各种位操作来混合输入元素

.Mixed hash:通过混合各种哈希构造

简而言之,区块链中的哈希运算就是将一个字符串通过一定的映射(函数关系)转化为一个哈希值,并与目标对象进行比较。 在签名验证和默克尔树比较中需要相等。 挖矿竞争需要小于目标哈希率。

应用实例:比如数据完整性验证,最简单的方法就是对整个数据进行Hash运算,得到一个固定长度的Hash值,然后将得到的Hash值发布出去。 用户下载数据后,再次对数据进行Hash运算,并将运算结果与公布的Hash值进行比较,如果两个Hash值相等,则说明数据没有损坏。 之所以可以这样做,是因为输入数据稍有变化,就会导致Hash运算的结果无法识别,很难根据Hash值推断出原始输入数据的特征。 - 防篡改

附录二:Merkletree

Merkle树的叶子节点的值就是区块数据Hash,非叶子节点的值就是根据它下面的所有叶子节点的哈希值拼接得到的哈希值。 如果是单个哈希,则直接进行哈希希腊运算,得到另一个哈希值,逐层上推,会形成一个倒三角数,最上面只有一个根哈希,称为Merkle Root。

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

图 1:Merkle 树结构

比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图

图2:默克尔树在区块中的位置

比特币交易流程_比特币交易流程图_如果国内比特币交易网站销户了,那以后怎么交易

比较验证从根哈希值的比较开始。 如果相同,那么整个区块的信息就可以了,因为只要任何一个环节不同,根哈希值就会不同。 如果根哈希值不同,您可以追溯到较低层以找到不同的链接。 如下所示:

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

附录三:常见问题

1、什么是区块链?

通俗地说比特币交易流程图,就是去中心化的分布式账本。 在区块链系统中,只要有能力部署自己的服务器,就可以加入区块链网络,成为网络节点。 所有节点具有完全相同的权利和义务,可以进行读写操作。 只要满足该机制,所有其他节点将依次同步,以实现全网所有节点上数据的完全一致。

说白了就是利用区块链数据结构来验证和存储数据,利用分布式节点共识算法产生和更新数据,利用密码学保证数据传输和访问安全,利用自动化脚本代码组成的智能合约A用于编程和操作数据的新的分布式基础设施和计算范式。

2、如何防止重复支付? (工作证明/共识机制)

为了达到目的,我们只需要关注交易前发生的交易,不需要关注交易后是否会重复支付,因为比特币系统交易是公开存储在所有节点,并有一系列的交易时间序列。 只要交易前没有其他交易,交易就是安全的,除非发生 51% 攻击。 51%攻击是指攻击者在一笔交易确认后,在同一个区块发起另一笔交易B,然后用全网51%的算力(概率略大于1/2)进行挖矿。 打包交易B确认交易记录,继续挖矿,构建一条比之前的区块链更长的链,然后发布到全网。 全网都会认可最长链的记录,因为最长的链包含最大的工作量。 因此,只要不存在51%攻击,通过工作量证明机制和哈希算法构建的唯一公认的历史交易序列就可以避免双重支付问题。

比特币交易流程图_比特币交易流程_如果国内比特币交易网站销户了,那以后怎么交易

3、对称加密算法和非对称加密算法有什么区别?

对称加密算法只有一把密钥来保证加密数据的安全,这把密钥用于加密和解密。 如何保存和传输密钥是一个让人头疼的问题,一旦传输过程中密钥数据泄露,就没有安全可言了。 非对称加密算法无需直接传递密钥即可实现解密。 加密和解密使用不同的规则,只要两种规则之间存在一定的对应关系即可。 如下,非对称加密算法使用私钥加密,对方可以使用公钥解密。

如果国内比特币交易网站销户了,那以后怎么交易_比特币交易流程图_比特币交易流程

4、交易中的锁定脚本对解锁脚本有多重要?

在中心化的方式下,一旦确定了某个协议,就很难改变,需要广泛的讨论和共识。 而如果是脚本系统,则可以通过升级或者打补丁的方式解决,甚至可以发布新版本。

5、为什么出块时间是10分钟?

必须始终有一个值,为什么不能更短,例如 1 分钟。 如果时间太短,孤块的数量会增加,因为出块时间短意味着难度低。 比如1秒内抛出10个硬币,所有正面朝上的都算一个块。 如果减少到1秒,2个硬币都是正面。 如果把它看成一个区块,那么同时出块的节点数量会增加很多,但只有一个能被共同识别加入链,也就是无用的孤块太多了。 那么为什么不是1小时呢? 效率问题。