比特幣之交易篇

什麼是比特幣(BTC)?

按照中本聰的比特幣白皮書,比特幣是一種完全通過點對點技術實現的電子現金系統,它使得在線支付能夠直接由一方發起並支付給另外一方,中間不需要通過任何的金融機構。

通俗的來講,比特幣並不是真正的幣,而是一種虛擬的加密數字貨幣,是電腦裡一串虛擬的數字,這種數字貨幣不由某個國家發行,而由比特幣軟件通過一定的機制發行,這種貨幣可以點對點交易,不需要權威機構的認可,而由整個比特幣運行的節點鑑證(即共識),人人可查可驗證交易是否合法。

在詳解比特幣之前,先了解幾個名詞:。

私鑰(SK):256位的隨機數,個人秘鑰,不可洩露,一定要保管好。

公鑰(PK):512位,由私鑰經過特定的函數生成,可以公佈。

公鑰哈希值:公鑰(PK)經過哈希運算後的值,257位。

哈希函數:密碼學中的一種數學函數,比特幣採用的是SHA-256函數。

比特幣如何實現去中心化和分佈式共識呢?首先,比特幣的發行不由中央權威機構決定,而是由算法決定,即礦工挖礦成功的獎勵。其次,比特幣的交易記錄人人可查,且不可篡改。又如何保障呢?比特幣採用了密碼學的哈希函數,哈希函數有三大特點,即碰撞阻力(collision-resistance),隱秘性(hiding)和謎題友好(puzzle-friendliness)。碰撞阻力保證了交易記錄不可篡改,隱秘性保證了交易信息的安全,謎題友好保證了挖礦的難度和可行性。

比特幣交易及區塊鏈。

比特幣所有的交易都包含在區塊鏈中,都有據可查,沒有憑空產生的幣,所有的幣都可追溯其根源。2009年1月中本聰挖到了比特幣的第一個區塊,即創世區塊。比特幣最小單位為聰,1聰=0.000 000 01 BTC.

比特幣之交易篇

比特幣交易及區塊鏈圖解

比特幣的區塊大小為1M,其中包括(1)上一個區塊的哈希值,用於追溯前一個區塊;(2)本區塊的梅克爾數哈希值,包含本區塊的所有交易和幣基交易(給礦工的獎勵);(3)隨機數(32位),用於計算本區塊的哈希值;(4)本區塊的哈希值,需要滿足一定的難度要求;(5)版本號,目前區塊所用的版本,以前計算哈希值只是更改隨機數,最新研究可以更改版本號計算本區塊哈希值,目前還在研究階段;(6)時間戳,記錄本區塊產生的時間。

比特幣的交易以梅克爾樹的形式存在區塊鏈中,並且交易經過哈希運算,保證交易的安全和不可篡改。具體到某個交易,在比特幣的底層,是以腳本運行的。如A to B的比特幣交易腳本如下,這筆交易存在於某區塊:

ScriptSig: //輸入

sig(A's SK, Mes)

A's PK

ScriptPubkey://輸出

OP_DUP

OP_HASH160

455yrfa…(hash(B's PK))

OP_EQUALVERIFY

OP_CHECKSIG

B to C的交易腳本如下,這筆交易存在於另一個區塊中:

ScriptSig: //輸入

sig(B's SK, Mes)

B's PK

ScriptPubkey://輸出

OP_DUP

OP_HASH160

454sdf34…(hash(C's PK))

OP_EQUALVERIFY

OP_CHECKSIG

現解析B to C的交易過程:B把自己公鑰地址(B's PK)裡的比特幣要轉給C,而B's PK裡的比特幣是由之前A轉給B的,B轉給C的過程,實際是用B to C的輸入去驗證A to B的輸出,如果驗證通過,則B公鑰地址裡的比特幣現在屬於C的公鑰地址,即屬於C所有。具體堆棧執行過程如下

比特幣之交易篇

比特幣交易堆棧執行過程

(1) 首先把B對C交易信息的簽名入棧,這個簽名由B的私鑰和這筆交易信息經過哈希運算而生成。

(2) 再把B的公鑰入棧

(3) 複製B的公鑰

(4) 對頂端B的公鑰進行二次哈希運算,第一次用SHA-256函數,第二次用橢圓曲線函數RIPEMD160

(5) 檢驗上一步B公鑰的二次哈希運算結果是否與A to B的輸出中B公鑰的哈希值一致。

(6) 如果一致移除這倆值,進行下一步

(7) 用橢圓曲線函數驗證堆棧頂端倆項返回值是否為真,如果為真交易成功,如果驗證為否,則交易失敗。具體如何驗證,採用的函數,是怎麼實現驗證的?可以圖中鏈接文獻。

注意B公鑰地址裡的比特幣所有節點都可以看到,但是隻有用B的私鑰才可以用掉這些比特幣,

比特幣區塊大小為1M,每個交易大小約250字節,所以每個塊最多容納4000個交易。

平均大約每10分鐘產生一個區塊,所以比特幣網絡每秒只能處理7比交易。

在比特幣交易中,沒有找零這麼一說,如A有10比特幣,需要支付給B的地址8比特幣,不像傳統的法幣,給B錢10,B找給A錢2,而是A向B的公鑰地址支付8比特幣,然後再向自己的另一個公鑰地址支付2比特幣。

全節點和輕量節點。

全節點即完全有效的節點,這些節點需要存儲完整的共識區塊鏈,需要永久在線,全節點擔任著廣播交易和驗證交易的使命。全節點必須維護未被消費掉的比特幣的完整列表(即UTXO, Unspended Transaction Outputs)(上邊例子裡B to C的交易過程就是驗證A to B的輸出,當交易完成後,A to B的輸出就不在UTXO裡了,B to C的輸出加入UTXO),這個列表最好放在內存而非硬盤中,這樣在收到一個交易信息時,節點才能快速查看、運行腳本、驗證簽名是否有效。比特幣現有區塊鏈需要200多G的存儲空間。

輕量節點即簡單付款驗證客戶端(SPV, Simple Payment Verification)。在比特幣系統中大部分節點是輕量節點,這些節點不存儲整個比特幣區塊鏈,之存儲他們所關心的、需要進行核驗的部分交易。輕量節點只驗證那些和他們相關的交易,所以他們必須依賴全節點去驗證網絡上的其他所有交易。輕量節點只需要幾十M的存儲空間。


分享到:


相關文章: