比特币交易
比特币交易的生命周期
一笔比特币交易的生命周期起始于它被创建的那一刻,也就是诞生(origination)。 随后,比特币交易会被一个或者多个签名加密,这些签名标志着对该交易指向的比特币资金的使用许可。接下来,比特币交易被广播到比特币网络中。在比特币网络中,每一个节点(比特币交易参与者)验证、并将交易在网络中进行广播,直到这笔交易被网络中大多数节点接收。最终,比特币交易被一个挖矿节点验证,并被添加到区块链上一个记录着许多比特币交易的区块中。
一笔比特币交易一旦被记录到区块链上并被足够多的后续区块确认,便成为比特币总账簿的一部分,并被所有比特币交易参与者认可为有效交易。于是,被这笔交易分配到一个新所有者名下的比特币资金可以在新的交易中被使用——这使得所有权链得以延伸且再次开启一个新的比特币交易生命周期。
常见的比特币交易形式
在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。
1、一个输入两个输出
一个地址有了输入,转账给另一个地址,并可能被找零,就是两个输出。
2、多个输入一个输出
将许多输入汇集到一起,一次性输出。
3、一个输入多个输出
化整为零,比如发工资。
交易的过程
比特币交易过程1、交易的构建
每个人的轻量级钱包维系着自己的UTXO数据库,如果需要查询的交易不在自己的数据库中,就可以通过网络从不同的服务者提供的各种API或完整索引节点的JSON PRC API中拿到这一交易信息。
比特币是匿名交易,交易的输入值和输出值与账号或者身份信息无关。你应该将它们理解成一种被特定秘密信息锁定的一定数量的比特币。只有拥有者或知晓这个秘密信息的人可以解锁。一笔比特币交易包含一些字段,如下表所示。
2、创建交易输出
交易输出实际上是一个脚本,对于发送者是加锁这个脚本(或者叫设置脚本障碍),对于接收者是解锁这个脚本(或者叫解锁脚本障碍)。其中包括收方公钥和输出金额。只有能够匹配这个脚本中的公钥的账户才能解锁接收这笔金额。
简单地说,交易输入是指向UTXO的指针。它们指向特定的UTXO,并被交易哈希和在区块链中记录UTXO的序列号作为参考。若想支付UTXO,一个交易的输入也需要包含一个解锁脚本,用来满足UTXO的支付条件。解锁脚本通常是一个签名,用来证明对于在锁定脚本中的比特币地址拥有所有权。
UTXO(Unspent Transaction Outputs未花费的交易输出)
这里的三个关键词:
Unspent就是说准备交易的这笔钱是闲钱才可以,如果已经花出去了,或者说转给别人了,就一定不是Unspent,而是spent了,处于spent状态的钱肯定不能再进行交易。
Transaction:这里说的是交易,这是比特币世界中花钱的唯一方式
Outputs:输出。收入来源于付款方的输出,换句话说一定有支出才能有收入。输出可以追溯到挖矿所得。
以下为个人理解,请方家指正。
举个例子,alice使用美元购买的0.1个比特币,这样就产生了一个0.1个比特币大小的UTXO。alice拿0.1个比特币去bob的咖啡馆喝咖啡,花掉0.01个比特币,网络背后的行为发生了3个输出:alice把整个UTXO拿出来,给bob转账0.015个比特币;支付交易费0.0005个比特币,给自己转账0.0995个比特币。
这里对于alice来说,先前的输入是0.1btc作为1个UTXO,叫做交易输入UTXO,这笔交易消耗掉了这个UTXO,又创建了两个UTXO,1个是0.001个(给bob),还有1个是给自己的找零0.0995,这两个叫做交易输出UTXO。
被交易消耗的UTXO被称为交易输入,由交易创建的UTXO被称为交易输出。通过这种方式,一定量的比特币价值在不同所有者之间转移,并在交易链中消耗和创建UTXO。一笔比特币交易通过使用所有者的签名来解锁UTXO,并通过使用新的所有者的比特币地址来锁定并创建UTXO。摘自《精通比特币》
如果还看不明白,下面这张图让你一目了然:
作为状态转换系统的比特币3、交易如何进入总账
a、交易如何进入网络
发起交易的比特币客户端会将交易信息传送到比特比网络。由于使用的是非对称加密算法,这笔交易完全可以进入非加密的不安全网络进行传播,这也是比特币网络和传统金融网络(网络要解决信任问题)的最大区别。
b、交易如何被接纳
进入网络后,这笔交易会被全网所有节点迅速扩散,几秒钟会被全网知晓,到达接收方客户端,接收方匹配公钥私钥,交易完成。这时候,交易双方可以发起自己的另外一次交易了。但是对于比特币网络来讲,这笔交易还远没有结束。
4、矿工出场了
矿工挖矿实际上是验证这笔交易被打包进入区块的计算过程。挖矿的作用发行比特币,创造信任(能力越大,就能获得越多的信任)。
a.新交易进入网络,被全节点发现,就会先把这些新交易存放在一个池中,标记为未经验证池。具体是交易链中包括父交易子交易,不同的交易到达网络的顺序必定有差异,这时这个池就是把这些交易暂存起来,等待交易链完整。
b.矿工节点有时间了(前提条件是父交易到了,才可以处理子交易),交易链经过验证后,就从这个交易池中拿出来放到这个新区块中,进行递归验证。
c.处理之前要先进行排序。排序依据是交易费用的高低,出价高的先处理,出价低的后处理,甚至有些交易一直没有人愿意去处理。但是原则上讲交易费基于交易的尺寸,用千字节来计算,而不是比特币的价值。
d.排好序后,主要的挖款工作就开始了,实际上就是把这些交易放入一个区块中,尝试解决一个非常困难的问题(也叫工作量证明)以证明这个新区块的合法性,具体说是把这些交易和这个新区块的数字指纹放在一起开始构建下一个新区块,并开始给它计算工作量证明。
e.那么如何证明计算成功呢?找到了使得新区块有效的解法,计算很费算力,但是验证是否成功比较简单。结果被大家认可,这个新产生的区块就会进入区块链。
f.矿工的工作得到认可后,就回去的自己应得的报酬。
这样一个循环周期就结束了,矿工就会迅速投入下一个新区块的计算。
4.后续事宜
确认之后,轻客户端就可以blockchain.info,输入自己的账户地址查询自己的交易确认信息。
参考内容:
《精通比特币》。