一个比特币交易流程是如何完成的 原

本文解释了比特币交易的内容,目的和结果。下面的解释适用于新手和中级比特币用户。

作为加密货币用户,你需要熟悉交易雏形——为了你对这种不断发展的创新有信心,以及作为理解新兴多签名交易和合约的基础,这两者都将在本系列的后期进行探讨。这不是纯技术文章,解释将集中在你需要了解的标准比特币交易——我们通常做的支出交易——并且我们将掩盖你可以安全忽略的内容。

本文底部的信息图提供了从钱包到区块链的整个比特币交易流程的全面说明。

注意:即使是核心开发人员也承认,用于描述交易及其组件的某些语言可能导致人们误解了实际发生的事情。在下面的解释中避免了这些误解。因此,在尝试尽可能简单的描述的同时,借助一些图表,让我们直接开始。

术语和缩写的定义

  • Bitcoin:具有大写B的比特币指的是协议——代码,节点,网络及其对等交互。
  • bitcoin:用小写字母b表示货币——我们通过比特币网络发送和接收的加密货币。
  • tx:在文本中使用的任何地方——是比特币交易‘Bitcoin transaction的缩写。
  • txid:是transaction id的缩写——这是人和协议引用交易的哈希。
  • Script:是比特币协议的脚本系统的名称,用于处理和验证交易——脚本是一个聪明的,基于堆栈的指令引擎,它使得从简单支付到复杂的oracle监督合约的所有交易成为可能。
  • UTXO:Unspent Transaction Output的缩写,也称为“输出”。
  • satoshi:1 BTC = 100,000,000 satoshi

什么是比特币交易?为什么?

1.定义

比特币交易是一个经过签名的数据,它被广播到网络上,如果有效,最终会进入区块链的一个区块。

2.目的

比特币交易的目的是将一定数量的比特币的所有权转移到比特币地址。

3.结果

当你发送比特币时,你的钱包客户端会创建一个单一的数据结构,即比特币交易,然后广播到网络。网络上的比特币节点将中继和重新广播交易,如果交易有效,节点将把它包含在他们正在挖掘的块中。通常,在10-20分钟内,交易将与区块链中的一个区块中的其他交易一起被包括在内。此时接收者能够看到他们钱包中的交易金额。

4.例子

以下是今年早些时候区块链中包含的示例交易:

此标准交易的主要组成部分采用颜色编码:

  • 交易ID(以黄色突出显示)
  • 描述符和元数据(蓝色花括号在右边详细说明)
  • 输入(粉色区域)
  • 输出(绿色区域)

比特币交易输入和输出

首先,关于交易的四个公理:

  • 我们发送的任何比特币金额总是发送到一个地址。
  • 我们收到的任何比特币金额都被锁定在接收地址——这通常与我们的钱包相关联。
  • 每当我们花费比特币时,我们花费的金额将始终来自之前收到的并且目前存在于我们钱包中的资金。
  • 地址接收比特币,但他们不发送比特币——比特币是从钱包发送的。

进入我们钱包的金额并不像实体钱包中的硬币那样混乱。收到的金额不会混合,但保持独立且与钱包收到的确切金额不同。这是一个例子:

示例:

你创建一个全新的钱包,并及时收到三个0.01,0.2和3BTC的金额,如下所示:你将3BTC发送到与钱包相关联的地址,并由Alice向另一个地址付款。

钱包报告的余额为3.21BTC,但如果你真的看钱包里面,你会看到——不是321,000,000 satoshi(321 mil satoshi),但是三个不同的数量仍然由他们的原始交易组合在一起:0.01,0.2和3BTC。

收到的比特币金额不会混合,但保持分开,作为发送到钱包的确切金额。上例中的三个金额称为其原始交易的输出。

比特币钱包始终保持输出分离和独特。

输出output是(通过标准交易)发送到比特币地址的金额,以及解锁输出金额的一组规则。在比特币用语中,输出称为“未使用的交易输出”或UTXO

可以使用与接收地址相关联的私钥解锁标准交易输出。地址及其相关的公钥/私钥对将在本系列的后面部分介绍。目前,我们只关注总数。

示例:

让我们考虑一个例子,在你向Bob发送0.15BTC的情况下跟踪钱。

正如我们所看到的,你的钱包没有选择15mil miloshi(0.15 BTC)来自一个无差别的321 mil satoshi组成钱包余额。相反,钱包从钱包中包含的三个现有输出outputs中选择一个支出候选者。因此,它选择(由于各种原因,现在不重要)0.2BTC输出。钱包将解锁0.2 BTC输出并使用全部0.2BTC作为新的0.15 BTC交易的输入input。0.2BTC输出在此过程中花费spent

你的钱包创建的花费交易将向Bob的地址发送0.15BTC——它将作为输出存放在他的钱包中——等待最终花费。

0.05BTC差额(0.2 BTC输入减去0.15 BTC输出)称为改变change,交易将通过新创建的地址将其发送回你的钱包。0.05 BTC改变的金额将作为新输出存放在你的钱包中——等待最终花费。所以,现在你钱包里会显示以下内容:

“等待花费”的三个输出中的每一个被锁定到其接收地址,直到选择它们中的一个或多个作为新花费交易的输入为止。

在后台,当选择UTXO作为新交易的输入时,不同的钱包客户端应用不同的逻辑规则。一个理智的钱包策略是尽可能先使用旧的UTXO,但实现方式不同。我们现在并不关注选择UTXO的方式,因为我们的目标一直是强调我们的钱包收到的金额是分开的和不同的。

比特币交易如何完成的总结

各种收到的金额不会像在实体钱包中那样混合。相反,在我们花费比特币时,收到的金额(UTXO)被单独使用(或组合使用)。在创建支出交易时,我们的钱包选择UTXO(具有足够的价值以满足我们想要发送的金额)并且通常创建两个新输出:一个用于接收器,一个用于我们收到的更改到钱包。更改成为我们钱包中的全新UTXO,我们发送的金额成为锁定到收件人地址的UTXO——可能与钱包相关联,也可能不与钱包相关联,例如冷存储。用作支出交易的输入的原始UTXO将“花费”并永久销毁。

这是钱包软件如何处理输出(UTXO)的介绍。一旦选择了UTXO用于支出,它就需要与接收它的地址相关联的私钥。此私钥兑换UTXO并允许它成为新支出交易中的输入。以前的交易输出被重新用作新交易的输入的机制是比特币协议功能的核心——完全符合Satoshi的设计。

建议你浏览我们汇智网的各种编程语言的区块链教程和区块链技术博客,深入了解区块链,比特币,加密货币,以太坊,和智能合约。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏深入浅出区块链技术

以太坊是什么 - 以太坊开发入门指南

1294
来自专栏极客编程

不同的区块链技术,涉及那些编程语言?

区块链技术入门,涉及那些编程语言?在本文中,将介绍比特币、超级账本Fabric和以太坊这三种区块链中,分别使用什么开发语言来进行智能合约编程,并提供你进一步学习...

1151
来自专栏区块链入门

【易错概念】以太坊的账户、交易、Gas和Gas Limit的概念

所有以太坊区块链上的行动都是由各账户发送的交易激活。每次一个合约账户收到一个交易,交易自带的参数都会成为代码的输入值运行。合约代码会被以太坊虚拟机(EVM)在每...

703
来自专栏区块链

打造一个最小区块链

虽然有人认为区块链本身仍有很多问题需要解决,但毫无疑问,这种新颖的技术是计算机界的奇迹。 但是,究竟什么是区块链?

3834
来自专栏区块链大本营

10分钟,前端工程师也能玩转区块链Web3.js开发

2614
来自专栏区块链技术指北

ERC20 协议 Token 钱包浅谈

这是「区块链技术指北」的第 3 篇文章。 以太坊,Ethereum 是一个分布式的计算机,有许多的节点,其中的每一个节点,都会执行字节码(其实就是智能合约),然...

5489
来自专栏智能合约

以太坊智能合约开发第二篇:理解以太坊相关概念

2386
来自专栏区块链大本营

大年初二已憋不住想写代码的心!来来来教你仅用15分钟在以太坊编写一个区块链Web应用

3127
来自专栏极客编程

iOS和Android比特币开发3个最受欢迎的应用SDK(示例)

如今的比特币不仅是加密货币还是数字支付系统。实际上,由于其独特的功能,比特币已成为投资,储蓄甚至赚取更多钱的真正工具。在本文中,我们想谈谈3个最受欢迎的比特币应...

1883
来自专栏丑胖侠

以太坊实战-再谈nonce使用陷阱

在《以太坊实战之如何正确处理nonce》一文中我们介绍了nonce的基本概念和使用方法。也提到了它能够覆盖之前交易的特异功能。但是那只是nonce的冰山一角。今...

55310

扫码关注云+社区