《精通比特幣》master_bitcoin-第二章-《比特幣原理》
Abstract:在本章中, 我們將從一個較高層面檢視比特幣, 通過追蹤一筆比特幣系統中的單獨交易(以Alice買咖啡為例),來看看它在比特幣分散式共識機制中變得“被信任”和“被接受”的情形, 以及最終成功地被儲存到區塊鏈。
1. 比特幣交易
簡單來說,通過交易告知全網:
<1>比特幣的持有者已授權把比特幣轉賬給其他人。
<2>新持有者能夠再次授權, 轉移給該比特幣所有權鏈中的其他人
交易是將錢從交易輸入移至輸出。
輸入是指錢幣的來源, 通常是之前一筆交易的輸出。
交易的輸出則是通過關聯一個金鑰的方式將錢賦予一個新的所有者。
這樣,就給資金強加了一個要求: 有簽名才能在以後的交易中贖回資金。 一筆交易的輸出可以被當做另一筆新交易的輸入, 這樣隨著錢從一個地址被移動到另一個地址的同時形成了一條所有權鏈。
Alice和她的朋友會面時, 用現金換取了比特幣。
由此產生的這筆交易使得Alice的錢包擁有了0.10比特幣。
現在Alice將第一次使用比特幣在加利福尼亞州帕羅奧圖的Bob咖啡店買一杯0.0150比特幣的咖啡。
2.常見的交易形式(3種)
a.簡單支付 :買咖啡
b. 零錢兌換大額鈔票
c. 僱主給多個僱員發工資
3. 交易的構建
• 通過錢包應用 指定目標地址和金額,其餘的細節錢包應用會在後臺自動完成
• 通過錢包應用 進行比特幣交易建立和簽名時不用連線比特幣網路。
• 只有在執行交易時才需要將交易傳送到網路。
構建一筆交易的要點:
1.獲取正確的輸入
2.建立交易輸出
3.將交易放到總賬簿中
3.1獲取正確的輸入
• 構建一筆交易,首先需要通過錢包應用找到一些足夠支付的輸入。
• 大多數錢包應用維護著一個含有用錢包金鑰鎖定的“未消費交易輸出”小型資料庫。 即錢包客戶端需含有使用者未消費交易輸出
• 可以從比特幣網路中拿到某未消費交易輸出
例如
https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
響應資料顯示了在Alice的地址 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK 上面有一個未消費輸出(還未被兌換) 。根據這個資訊, 就可以通過錢包應用建立新的交易將錢轉賬到新地址。
3.2建立交易輸出
交易的輸出會被建立成為一個包含這筆數額的指令碼的形式, 只能被引入這個指令碼的一個解答後才能兌換。
簡單點說就是,Alice的交易輸出會包含一個指令碼,這個指令碼要求 “簽名和Bob的公開地址匹配上,才可進行支付”。
因為只有Bob的錢包的私鑰可以匹配這個地址,所以只有Bob的錢包可以提供這個簽名以兌換這筆輸出。
因此Alice需用Bob的簽名來包裝一個輸出。
就像透明的存錢罐一樣,誰都可以看見。但是需要有金鑰才可以取出來
可以從比特幣區塊瀏覽器獲得剛才買咖啡的交易記錄,如下圖所示:
3.3.將交易放到總賬簿中
交易被傳送到比特幣網路中之後成為分散式賬簿(區塊鏈)的一部分
其中:比特幣網路是由參與的比特幣客戶端聯接幾個其他比特幣客戶端組成的P2P網路。
比特幣網路的目的是將交易和區塊傳播給所有參與者。
任何比特幣網路節點(其它客戶端) 收到一個之前沒見過的有效交易時會立刻將它轉發給聯接到自身的其它節點。
4.比特幣挖礦
交易在比特幣網路上傳播後,只有被一個稱為挖礦的過程驗證且加到一個區塊中之後, 這個交易才會成為這個共享賬簿(區塊鏈) 的一部分,此時才可被確認為有效交易。
• 挖礦在比特幣系統中起著兩個作用:
<1> 挖礦在構建區塊時會創造新的比特幣
<2> 挖礦建立信任。挖礦保證了交易的確認基於足夠的計算量。區塊越多,花費的計算量越大,意味著更多的信任。
描述挖礦的一個好方法是將之類比為一個巨大的多人數獨謎題遊戲。 一旦有人發現正解之後, 這個數獨遊戲會自動調整困難度以使遊戲每次需要大約10分鐘解決。
<1>比特幣中的 “謎題” 是基於雜湊加密演算法的,它解起來困難而驗證很容易, 並且它的困難度可以調整。
<2>用SHA256加密演算法不斷地對區塊頭和一個隨機數字進行雜湊計算, 直到出現一個和預設值相匹配的解。
<3>第一個找到這個解的礦工會贏得這局競賽並會將此區塊釋出到區塊鏈中。
5.區塊中的挖礦交易記錄
網路中產生的一筆交易直到成為整個比特幣大賬簿——區塊鏈的一部分時才會被確認有效。
當比特幣網路上的節點看到這些交易時, 會先將它們放到各自節點維護的一個臨時的未經驗證的交易池中。
當礦工構建一個新區塊時,會將這些交易從這個交易池中拿出來放到這個新區塊中, 然後通過嘗試解決一個非常困難的問題(也叫工作量證明) 以證明這個新區塊的合法性。
TIPS:
• 每個礦工會在他的區塊中包含一個特殊的交易, 將新生成的比特幣(當前每區塊為12.5比特幣) 作為報酬支付到他自己的比特幣地址。
• 如果他找到了使得新區塊有效的解法, 他就會得到這筆報酬,
• 因為這個新區塊被加入到了總區塊鏈中, 他新增的這筆報酬交易也會變成可消費的。
隨著時間變長, 這個區塊鏈的高度也隨之增長, 每個區塊和整個鏈的計算複雜度也隨之增加。
當區塊一個個堆上來時, 這個交易變得指數級地越來越難被推翻, 因此它在網路中得到更多信任。
按慣例來說, 一個區塊獲得六次以上“證明”時就被認為是不可撤銷的了, 因為要撤銷和重建六個區塊需要巨量的計算。
6.消費這筆交易
• 可將相關交易的結果資訊作為輸入,進行新的交易
這樣就實現了對此交易的消費。
• 通過進行不斷的交易,形成一條區塊交易鏈