天天看點

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

本文解釋了比特币交易的内容,目的和結果。下面的解釋适用于新手和中級比特币使用者。

作為加密貨币使用者,你需要熟悉交易雛形——為了你對這種不斷發展的創新有信心,以及作為了解新興多簽名交易和合約的基礎,這兩者都将在本系列的後期進行探讨。這不是純技術文章,解釋将集中在你需要了解的标準比特币交易——我們通常做的支出交易——并且我們将掩蓋你可以安全忽略的内容。

本文底部的資訊圖提供了從錢包到區塊鍊的整個比特币交易流程的全面說明。

注意:即使是核心開發人員也承認,用于描述交易及其元件的某些語言可能導緻人們誤解了實際發生的事情。在下面的解釋中避免了這些誤解。是以,在嘗試盡可能簡單的描述的同時,借助一些圖表,讓我們直接開始。

術語和縮寫的定義

  • 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的設計。

建議你浏覽我們彙智網的各種程式設計語言的區塊鍊教程和區塊鍊技術部落格,深入了解區塊鍊,比特币,加密貨币,以太坊,和智能合約。

  • java比特币開發教程,本課程面向初學者,内容即涵蓋比特币的核心概念,例如區塊鍊存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中內建比特币支援功能,例如建立位址、管理錢包、構造裸交易等,是Java工程師不可多得的比特币開發學習課程。
  • php比特币開發教程,本課程面向初學者,内容即涵蓋比特币的核心概念,例如區塊鍊存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中內建比特币支援功能,例如建立位址、管理錢包、構造裸交易等,是Php工程師不可多得的比特币開發學習課程。
  • php以太坊,主要是介紹使用php進行智能合約開發互動,進行賬号建立、交易、轉賬、代币開發以及過濾器和交易等内容。
  • java以太坊開發教程,主要是針對java和android程式員進行區塊鍊以太坊開發的web3j詳解。
  • 以太坊入門教程,主要介紹智能合約與dapp應用開發,适合入門。
  • 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鍊、ipfs實作去中心化電商DApp實戰,适合進階。
  • python以太坊,主要是針對python工程師使用web3.py進行區塊鍊以太坊開發的詳解。
  • C#以太坊,主要講解如何使用C#開發基于.Net的以太坊應用,包括賬戶管理、狀态與交易、智能合約開發與互動、過濾器和交易等。
  • EOS入門教程,本課程幫助你快速入門EOS區塊鍊去中心化應用的開發,内容涵蓋EOS工具鍊、賬戶與錢包、發行代币、智能合約開發與部署、使用代碼與智能合約互動等核心知識點,最後綜合運用各知識點完成一個便簽DApp的開發。

彙智網原創翻譯,轉載請标明出處。這裡是原文

繼續閱讀