请选择 进入手机版 | 继续访问电脑版
查看: 105|回复: 0

[技术基础] 图解BTC 的交易流程

[复制链接]

22

主题

37

帖子

219

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
219
发表于 2019-2-1 18:42:27 | 显示全部楼层 |阅读模式

带大家看一张老图,相当经典,能很直观地准确地理解比特币交易流程,话不多说,看图。

20180807_1000.jpg
比特币网络从2009年1月开始至今,在没有专人维护的情况下已经平稳运行7年多,期间没有出现一次宕机。图中以Bob接收来自Alice的比特币的场景,详细描述了比特币区块链的工作方式,一并解释了涉及到的钱包和地址(Wallets and Addresses)、私钥和公钥(Private Key and Public Key)、加密哈希(Cryptographic Hashes)、随机数(Nonces)等概念。


钱包和地址


1、Bob和Alice的电脑上都有比特币钱包。


2、钱包是一种文件,可以让用户访问多个比特币地址。


3、一个地址是一串由字母和数字组成的字符串。


4、每一个地址都有自己的比特币余额。


新建一个地址


5、Bob创建一个新的比特币地址,用于接收Alice的付款。


私钥和公钥


6、当Bob创建一个新地址时,他真正在做的是生成一个密钥对,由一个私钥和一个公钥组成。如果你使用私钥(只有你知道)对一个消息进行签名,它可以被对应的公钥(所有人都知道)所验证。Bob的新地址代表一个唯一的公钥,对应的私钥则保存在他的钱包里。公钥允许所有人来验证被私钥签名的消息的有效性。


7、可以将地址看做银行账号,但工作方式稍有不同。比特币用户可以任意创建多个地址,并且被鼓励为每一个新的交易单独创建新地址,以增强隐私性。只要没有人知道哪些地址是Alice的,她的匿名就受到保护。


提交一个支付


8、Alice告诉她的比特币客户端,她要向Bob的收款地址转账。


9、Alice的钱包里有她的每一个比特币地址的私钥。比特币客户端用Alice此次使用的付款地址的私钥,对她的这一交易申请进行签名。


10、此时,网络上的任何人都可以使用公钥来验证,这个交易申请实际来自一个合法的账户所有者。


验证交易


11、Gary、Garth和Glenn都是比特币矿工。


12、他们的电脑将过去约10分钟内的交易打包成一个新的交易区块。


13、矿工的电脑被设置用于计算加密哈希(Cryptographic Hash)函数。


14、加密哈希函数将一个数据集转换成特定长度的包含字母和数字的字符串,称为哈希值。源数据的细微改变会彻底改变哈希值的结果。并且基本不可能预测初始的数据集将会产生的特定哈希值。


15、为相同的数据创建不同的哈希值,比特币使用随机数来实现。随机数是在进行哈希计算之前,在数据中添加的随机数字。改变这个随机数会产生极不相同的哈希值。


16、每一个新的哈希值包含关于此前所有比特币交易的信息。


17、矿工的电脑基于前一个区块的哈希值、新交易区块和随机数,来计算新的哈希值。


18、创建哈希在计算上微不足道,但比特币系统要求新的哈希值拥有特定格式——必须以特定数量的0作为开始。


19、矿工无法预测哪个随机数会产生以要求的数量的0作为开始的哈希值,所以他们被迫用不同的随机数创建很多哈希,直到获得有效的那一个。


20、每一个区块都包含一个名为coinbase的初始交易,这是给胜出矿工的50比特币的支付——在这个例子中是矿工Gary。Gray的钱包里生成了一个新地址,里面的余额是新挖到的比特币数量。


交易验证


21、随着时间流逝,Alice向Bob的转账被埋在了其它更近期的交易下面。任何人要想修改历史交易的细节,就必须重做一遍Gary的工作,然后再重做所有下一级矿工的工作,因为所有的改变都需要一个完全不同的胜出随机数。这样的操作几乎不可能成功。


注:只有在比特币发行的阶段1,每一个区块的coinbase支付给胜出矿工的新币是50个。从2009年1月3日创世区块诞生开始,新比特币的发行大约每4年减半,2012年11月28日,阶段2开始,每一个区块包含的新币减为25个,这是历史上第一次减半;预计今年7月11日,挖矿奖励会再次减半;直到第33次减半时,每一个区块从产生0.0021个新币直接减为0个,比特币的总量固定在将近2100万个。


从上面可以看出,所谓比特币交易就是从一个比特币钱包向另一个中转账,每笔交易都有数字签名来保证安全。一个交易一旦发生那么就是对所有人都公开的,每个交易的历史可以最终追溯到相应的比特币最初被挖出来的那个点。持有比特币等着升值确实是个好主意,不过要是谁都不用这种货币进行交易,那比特币就没啥实际意义了,再看几个小帖士。


世上本无币,只有交易记录


比特币并不存在于任何地方,即使是硬盘上。有人如果持有比特币,那么他们其实是拥有特定比特币的地址,但是其实所谓的币并不是直接就存在于这个地址中的,地址就相当于你的银行账户。但是世界上没有一个可以摸得着的实物,或者是一个数据文件,可以被叫做“比特币”的。


有的只是各个地址之间的转账记录,余额时增时减。所有的交易都存放在一个非常大的账本文件中,这个文件叫做“区块链”。如果想知道一个比特币地址中的余额,那么这个不是直接存放在比特币地址中的,我们需要到区块链中去计算出来。


为啥交易会有十分钟的等待时间


因为交易需要经过矿工的验证确认之后才能写到区块链之中,所以你必须要等待一下,等待他们挖矿成功。


比特币协议里面设置了挖矿完成的大概时间是10分钟。所以商家可能会等到你的交易所在的区块被确认之后才会给你发货。但是也有商家不会让你去等,基于对你的一个信任,相信你不会在交易没有得到确认之前有去拿同一笔钱花在别的地方。不过一般这只适用于小额交易。


输入和输出中的数额不相等怎么办?


因为比特币只是以交易记录的形式存在,所以很多时候你的一个地址上面其实是对应很多个交易的。可能 Jane 发送给了 Alice 40个比特币,Lucy 给了40个,Eve 给了20个,这些都是不同时间的不同的交易,他们并没有被合成到 Alice 的一个钱包里形成一个有100个币的文件,而是仍然作为独立的各个交易记录存在。


当 Alice 想要给 Bob 转币的时候,她的钱包就会找到几个交易,让它们的数额加起来正好是 Alice 想要转的数目。 当然,很可能在 Alice 想要给 Bob 转币的时候,她没有办法找到几个交易加起来正好是转账数额。也许她想要转 30 个币,但是钱包中根本没有一个交易或是多个交易的和正好是这个数目。


同时,她没有办法把一个交易切割成小的数额。就是这样,你没有办法切割一个大的交易成为多个小数额,每次都必须花掉整个交易。但是不用担心,系统会给她把多发送出去的币作为找零还给你。


Alice 这时就可以把 Jane 给她发送过来的两个币发送给 Bob,这样 Jane 就是“输入”,Bob 就是“输出”,“数额”是30个币,这时 Alice 真正想要转账的数目。这样,Alice 的钱包就会自动给她的这次交易创建两个输出:把30个币给 Bob,剩下的30放到一个新的地址中,这个是找回的零钱。


交易过程收费吗?


交易手续费是综合多种因素得出的。有些钱包可以让你手动设置手续费。交易中那部分没有被对方收到,同时也没有找零回来的就是手续费。这笔钱最终会被得到记账权的那个幸运的矿工所得到。目前,很多矿工都不收手续费。但是随着每次挖矿成功系统奖励给矿工的币不断减少,未来肯定会有更多的矿工会收取手续费的。一直以来有一件很让人恼火的事情就是计算矿工费的过程非常复杂难懂。不过后来大家对协议做了相应的修改,现在的软件能够自动处理矿工费的问题了。


能开收据吗?


比特币系统设计时并没有考虑收据问题。不过0.9版本的比特币中稍微修改一下付款的方式,让整个过程更方便。支付服务商,例如 Bitpay,也提供一些基本交易过程提供不了的功能,例如提供收据或者交易确认页面等。


能发送小额的比特币吗?


比特币理论上是可以无限切割的。目前最小的比特币单位叫做“中本聪”,相当于0.00000001个比特币。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表