恬默・晓明7星评价
2020-10-30 11:19:52
比特币交易是一个经过签名的数据,它被广播到网络上,如果有效,最终会进入区块链的一个区块。比特币交易的目的是将一定数量的比特币的所有权转移到比特币地址,现如今,区块链已经成为全民关注的领域,不少企业也早已深入其中研究该技术的落地情况。谈到区块链,必然先想到比特币。从技术角度来看,比特币的系统包括三层:底层技术——区块链;中层链接——协议;上层——货币。
货币指的就是比特币;协议就是基于区块链的资金转账系统;底层技术就是区块链,即去中心化、分布式记录的公开透明的交易记录总账,其交易数据全网节点共享。矿工负责记录,全网监督。
当比特币用户向其他人转账的时候,从创建一笔交易,到这笔交易最终被确认有效,实际上经历了以下的步骤:
既然是交易就得有发起者和接收者,通常来说交易都是由发起者创建的,比特币也不例外,发起者通过自己的钱包软件创建一笔包含一定数量比特币的交易,并用自己的私钥进行加密签名,签名是为了标识这笔比特币的所有权,其他人只要通过发起者的地址就可以轻松校验真实性了。
交易创建完成后,就需要被广播到比特币网络中,让更多的人知道这笔交易,比特币的网络是一个点对点的去中心化网络,也就是没有一个中心节点统一处理所有的交易。在比特币网络中,每一个节点都会验证交易的合法性,并将交易在网络中进行广播,直到这笔交易被网络中大多数节点接收。
最终,比特币交易被一个挖矿节点验证,并被添加到区块链上一个记录着许多比特币交易的区块中。关于挖矿其实就是将很多笔交易统一打包统一验证,存入总账簿中,同时挖矿的人会得到一定的奖励。因为有奖励,所以矿工会有很强的动力维护交易的顺利完成。
一笔比特币交易一旦被记录到区块链上并被足够多的后续区块确认,便成为比特币总账簿的一部分,并被所有比特币交易参与者认可为有效交易。于是,这笔比特币就隶属于新的所有者了,可以拿来放心使用了。
比特币交易如何完成的总结
各种收到的金额不会像在实体钱包中那样混合。相反,在我们花费比特币时,收到的金额(UTXO)被单独使用(或组合使用)。在创建支出交易时,我们的钱包选择UTXO(具有足够的价值以满足我们想要发送的金额)并且通常创建两个新输出:一个用于接收器,一个用于我们收到的更改到钱包。更改成为我们钱包中的全新UTXO,我们发送的金额成为锁定到收件人地址的UTXO——可能与钱包相关联,也可能不与钱包相关联,例如冷存储。用作支出交易的输入的原始UTXO将“花费”并永久销毁。
易铖科技范9星评价
2020-08-04 17:17:54
比特币全网的运行都是为了同一个目的:比特币交易,比特币交易是比特币系统中最重要的部分。比特币交易的本质是数据结构,这些数据结构中含有比特币交易参与者价值转移的相关信息。
比特币交易比特币系统中任何部分都是为确保比特币交易可以被生成、能在比特币网络中传播、验证,并最终添加入全球比特币交易总账簿(比特币区块链)。
交易类型
交易有三种常见类型:产出交易(Generation),合成地址交易( Hash),通用地址交易(Pubkey Hash)。
Generation TX:每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
Hash TX:多重签名交易,地址以3开头,三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
Pubkey Hash TX:该类是最常见的交易类型,由N个输入、M个输出构成。
交易流程
比特币交易创建后,会被一个或者多个签名加密,即获得这笔比特币资金的使用许可。接下来交易被广播到比特币网络中。在比特币网络中,每一个节点验证、并将交易在网络中进行广播,直到这笔交易被网络中大多数节点接收。交易被某个挖矿节点验证后被添加到区块链上。
实际交易
⽐特币交易建⽴和签名时不⽤连接⽐特币⽹络。只有在执⾏交易时才需要将交易发送到⽹络。用户在交易比特币时,只需要设置交易的目的地址和金额,其他的由钱包程序完成。比特币还可以使用延时发送交易的功能。
交易结构
一笔比特币交易是一个含有Tx_in(交易输入)和Tx_out(交易输出)的数据结构,每笔交易TX包含有若干个Tx_in和若干个Tx_out。除创世区块(genesis block)中的交易外,每笔交易必有来源:一种是挖矿奖励(币基),在每个区块的第一笔交易中;另一种是先前交易中未被使用的某个交易输出,即UTXO。支出方用私钥签名证明自己的所有权,而比特币系统则要验证其是否未被花费及其所有权。
交易结构
大小字段数据类型描述4字节version版本 uint32_t数据结构版本号,明确这笔交易参照的规则1-9字节tx_in count输入数量var_int输入地址的数量41+字节tx_out count输入tx_in[]一个或多个交易输入地址,每个输入>=41字节1-9字节tx_out count输出数量var_int输出地址的数量9+字节tx_out输出tx_out[]一个或多个交易输出地址,每个输入>=9字节4字节lock_time锁定时间uint32_t一个UNIX时间戳或区块号lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。
值含义0立即生效< 500000000含义为Block高度,处于该Block之前为锁定(不生效)>= 500000000含义为Unix时间戳,处于该时刻之前为锁定(不生效)若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。