一個比特幣交易的完整流程。

本文解釋了比特幣交易的內容,目的和結果。下面的解釋適用於新手和中級比特幣用戶。

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

本文底部的信息圖提供了從錢包到區塊鏈的整個比特幣交易流程的全面說明。

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

術語和縮寫的定義

  • 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的開發。

匯智網原創翻譯,轉載請標明出處。這裏是原文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章