「力场 lichang.io」公链挖矿第一社区!
现在我们知道了创造区块到底是咋回事了,就该来说一下比特币的最主要最关键的一个功能了,那就是交易、流通,其实比特币的交易过程就是一个不停的制造区块的过程,每一个区块就像是一个账本,把每一笔交易都记录在这个无法更改和删除的账本上,就完成了一笔交易。
传统货币交易方式
如果您没有了解过比特币的交易流程,一般会想当然的以为就像传统的支付系统一样,想花多少钱就往出转多少钱就好了,在自己只付出这笔钱的那一刻,更新一下所有人账户的余额就完成了这笔交易/转账。假设员外的账户中有12.5个比特币,转给死柯侠10个,那么员外账户中当然是还剩下2.5个比特币了。
这么做有几个缺点,其他人如果想要确认一笔交易是否真实,就必须跟踪每一个账户的余额。假设员外要转给死柯侠20个比特币,那么死柯侠就会想,员外的账户中到底有没有20个比特币,他为了搞清楚这个问题,就必须回过头去看所有和员外有关的交易,然后把这些交易数据做一个计算,才可以知道员外的账户中到底有多少比特币。另一个缺点就是,假设某人想要解决前面提到的这个问题,专门在每一个账户中额外添加一个数据字段,用来时刻更新用户每次交易后的账户余额,但是这种做法就额外增加了比特币网络的工作量。众所周知比特币网络带宽也算是寸土寸金,很容易拥堵的。所以基于这些问题,中本聪大师采用了另一种方法来解决这些问题。
比特币交易方式
解决方式就是给每一笔交易设置一个输入值和输出值,输入值可以看做是被消耗掉的币,输出值是在本次交易中创造出来的币。当生成一个区块的时候,矿工可以获得这个区块中奖励的 12.5 个比特币,也可以把这看成是一个铸币的过程。在这个铸币的过程里,是不会消耗比特币的,所以只有输出没有输入。
如图,我们先看第一笔交易,因为这是一个铸币的交易,所以只有输入没有输出,也无需任何人签名,员外就可以拿到这12.5个比特币。
接下来员外想把一些币转给死柯侠,员外就创造了一条新的交易,这就是图中的交易2。在交易中,员外必须明确指出要转出的币的来源,即引用交易1中的输出0,表示为1[0],在这笔交易中员外获得了12.5个比特币。然后在转账的时候,员外还必须要指定收款人的地址,也就是输出地址。在交易2中,可以看到有两笔输出,一笔是转给死柯侠的10个比特币,另一笔则是转给了员外自己。当然这整个交易是由员外授权签名的,这样大家就自然而然的认可了这笔交易。
关键点
- 地址转换。在这个交易中,为什么员外要把币转给自己呢?事实上比特币在一个交易中输出的币,要么在另一个交易中被完全消费掉,要么就一个都不被消费,不存在只消费部分的情况。员外只需付给死柯侠10个币,但员外在上一交易中实际获得了12.5个币,为了把这些币全部消费掉,员外就必须再转给自己2.5个币,这2.5个币可以转到另外一个地址,但前提是该地址为员外所有,这就叫地址转换。
- 有效验证。 当一个新的交易被加入总账,它的有效性是否容易被验证?在这个例子里,想要核查一下员外引用的交易输出,确认他确实有12.5个币没有被花费掉。因为使用了哈希指针,所以核查很快。为了确认这12.5个币没有被花掉,只需从员外所引用的交易开始,一直核查到账本上最新记录的交易为止即可,而不需要从账本建立之初的交易开始核查。而且,这种方法也不需要增加额外的数据结构。
- 资金合并。 比特币交易可能有许多输入与输出,资金分隔与合并也很容易。假如死柯侠在两笔不同的交易中分别收到10个币和2个币,现在他想把这两笔钱合并起来花掉,这很容易,他只需发起一个交易,交易里有两个输入和一个输出,输出的地址是他自己的地址,这样,死柯侠就把两个交易合二为一了。
- 共同支付。 同样地,共同支付也很容易做到。如果饭饭和死柯侠想要共同支付给蛋蛋,他们可以发起一个交易,交易里也有两个输入和一个输出,唯一不同在于,两个输入所引用的“上一笔交易”的输出地址不同,因此,这笔交易需要两个签名:饭饭的和死柯侠的。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。