比特幣交易
比特幣的交易和現在大部分的交易形式都不一樣,現在大部分的交易形式都需要一個第三方的權威機構(支付寶、微信支付、軟銀、銀行)來為要達成交易的雙方背書,我們去淘寶上買東西,你不可能直接把錢打給商家以免貨財兩空,你的錢會先打給支付寶等你確認收貨后第三方支付寶才會把錢打給商家。
你看傳統的互聯網是信息互聯網,我們只能在上面發送文字、圖片、視頻,若是沒有第三方作為背書我現在都不能給你發一個紅包;而隨著區塊鏈技術的出現信息互聯網正在向價值互聯網發展,相信在不久的將來我們的資產都將向價值互聯網轉移。
與傳統銀行和支付系統不同,比特幣系統是以去中心化信任為基礎的,它不歸任何第三方管制,在這里你就是自己的上帝。
交易是點到點,真正做到了沒有中間商做差價;那么比特幣系統究竟是如何進行交易的呢?
比特幣系統的組成
為了了解比特幣的交易過程我們就需要比特幣系統的組成。
如圖:我們可以看到比特幣系統由用戶(用戶通過密鑰控制錢包)、交易(每一筆交易都會被廣播到整個比特幣網絡)和礦工(通過解決一個SHA256的數學難題來獲得發布區塊的權利)組成。
比特幣網絡:比特幣網絡是由參與的比特幣客戶端聯接幾個其他比特幣客戶端組成的P2P網絡。比特幣網絡的目的是將交易和區塊傳播給所有參與者。(說白了就是我們的手機錢包,這一步只要你的錢包聯網了就會自動去完成)
基本概念理解
對于一個交易而言有交易輸入和交易輸出,輸入和輸出之間就會有個橋梁-礦工;礦工自然就要收取費用才會幫你干活;接受者收到比特幣后就又會開始消費。
交易:交易就是將錢從輸入轉賬至輸出;交易也包含了每一筆被轉移的比特幣(輸入)的所有權證明(所以說根本上并不是轉移比特幣,轉移的是這筆比特幣的所有權,即你能夠證明這些比特幣是你的),它以所有者的數字簽名形式存在,并可以被任何人獨立驗證。
交易輸入:被交易消耗的UTXO被稱為交易輸入(暫時將UTXO直接理解成“余額”就行);輸入是指錢幣的來源,通常是之前一筆交易的輸出。
交易輸出:由交易創建的UTXO被稱為交易輸出;交易的輸出則是通過關聯一個密鑰的方式將錢賦予一個新的所有者。
礦工費:交易輸入與輸出之間產生的差值就是被礦工收取的比特幣費用(這也是比特幣系統運行的最重要的一個激勵機制,未來隨著比特幣的開采完結礦工費將會是唯一驅動礦工工作的因素)
消費:轉移一筆以前交易的比特幣給比特幣地址所標識的新持有者。(張三轉賬給李四,而張三的錢是王五轉賬給他的,那王五轉給張三的錢相對于現在張三和李四的交易就為“以前交易的比特幣”,李四就是“比特幣所標識的新持有者”)
還有在比特幣的世界中常見的交易形式有:一般交易(一個輸入兩個輸出)、集合型交易(多個輸入一個輸出)、分散型交易(一個輸入多個輸出)。
故事背景
2017年的一天張三無意間在網上得知比特幣,并深深被其吸引,經過一周的研究之后決定親身嘗試一下,于是通過網絡找到比特幣持有者王五,就花了一些錢從王五那里買了0.3BTC;這天張三工作下班后去了理發店,理發店主李四也是個科技愛好者,店里提供比特幣支付。
理發后張三需要支付李四0.1BTC,店主李四用手一指柜臺的二維碼說:有微信、支付寶、比特幣支付,您可以任意選擇;張三來了精神因為他還沒試過用比特幣支付過任何費用;于是張三就打開存有比特幣的錢包應用掃了碼,掃碼后會出現李四的錢包地址并向其輸入金額0.1BTC,然后發送,要不了幾秒鐘李四就能夠看到這筆交易,并完成交易(小額交易可以默認已被區塊確認)。這其中的神奇交易方式都是由錢包客戶端自己獨立工作完成,而我們的任務就是探索這個交易的過程到底是如何構建,傳播到接收的。
錢包的內在交易流程
張三掃碼后直接輸入金額0.1BTC隨后的流程全權交于錢包來完成。
1.1錢包要獲取正確的輸入
張三的錢包在張三的手指點擊“確認”后,開始立即行動了,首先錢包會在自己以往的交易記錄中搜索,看看有沒有“未消費的交易輸出”(看看自己還有沒有余額);
【大多數錢包應用維護著一個含有用錢包自己密鑰鎖定的“未消費交易輸出”小型數據庫。因此張三的錢包會包含他用現金從王五那里購買的比特幣的交易輸出副本】
經過錢包的搜索就找到了張三從王五那里購買的0.3BTC,于是就將這0.3BTC作為了交易輸入。
1.2創建交易輸出
錢包已經構建好了輸入,那么接下來錢包要做的就是構建交易的輸出,那么構建交易的輸出到底是構建什么呢?
其實就是:張三的錢包會用李四的公開地址(官方說法:張三要用李四的簽名來包裝一個輸出,這個簽名就是李四的私鑰,還記得前面說的嗎?交易的輸出則是通過關聯一個密鑰的方式將錢賦予一個新的所有者)將這0.1BTC給鎖定起來,誰擁有這個公開地址的私鑰誰就擁有了這0.1BTC;
那還剩下0.2比特幣呢,這0.2BTC將會作為另一個輸出(找零,這0.2BTC會用張三的錢包地址鎖定起來)給張三。這其實就是交易類型中的--一般交易。
最后張三發現自己的錢包并沒有0.BTC,那是因為有一小部分的BTC作為交易費被礦工收取了。
1.3交易傳播
張三的錢包一切準備就緒,輸入和輸出都搞定了就等著廣播到比特幣網絡告知全網:張三向李四發送了0.1BTC.
那究竟交易是如何傳播的呢?
張三的錢包應用可以發送這筆交易給其它任意一個已聯接到互聯網的比特幣客戶端,任何比特幣網絡節點(其它客戶端)收到一個之前沒見過的有效交易時會立刻將它轉發給聯接到自身的其它節點。因此,這個交易迅速地從P2P網絡中傳播開來,幾秒內就能到達大多數節點直至整個比特幣網絡。
經由網絡節點告知李四的錢包說:有人給你轉了一筆錢;于是李四收到消息嘗試著打開這筆錢,因為這筆錢是使用李四的密鑰關聯的所以只有李四能夠打開這筆錢,也就是說李四擁有了這筆比特幣。
P2P網絡:網絡節點和網絡節點之間的互聯
1.4比特幣挖礦
雖然這筆錢被廣播到全網了所有人都知道你張三給李四轉賬了0.1BTC,但是如果沒有人承認那你這筆交易就會被作廢。
那么如何才能讓這筆交易變得有效呢?這要經過一個挖礦的過程,礦工將這筆交易和其他交易(自上一區塊后所產生的交易)放到自己構建的區塊中為其工作量證明,直到有礦工將包含這筆交易的區塊發布到區塊鏈中,這筆交易才會被確認有效。
這個工作量證明算法指的用SHA256加密算法不斷地對區塊頭和一個隨機數字進行哈希計算,直到出現一個和預設值相匹配的解。第一個找到這個解的礦工會贏得這局競賽并會將此區塊發布到區塊鏈中。
挖礦就是創建區塊并將區塊發布到區塊鏈上,挖礦能夠獲得獲得比特幣網絡的獎勵求得一個區塊的解后系統就會向你留在挖礦軟件中的比特幣地址發送獎勵,以及區塊中的所有交易費也都是這個求得解的礦工的;未來隨著比特幣被挖得差不多時,交易費將是驅動礦工工作的巨大動力,到那時交易費將是一筆巨大的收入;還有就是挖礦能夠給區塊創建信任。
接下來就來看看這個過程:
新交易不斷地從用戶錢包和應用流入比特幣網絡。當比特幣網絡上的礦工節點看到這些交易時,會先將它們放到各自節點維護的一個臨時的未經驗證的交易池中。當礦工構建一個新區塊時,會將這些交易從這個交易池中拿出來放到這個新區塊中,然后通過嘗試解決一個非常困難的問題(也叫工作量證明)以證明這個新區塊的合法性。
最后一個叫王二麻的礦工求得了這個區塊的正解【求得解是誰的算力越大誰求得解的概率就越大】,于是王二麻子就能夠將這個區塊發布到區塊鏈上了,其他礦工就會來驗證這個區塊,驗明正身后所有的網絡節點(客戶端)都會將包含這筆交易的區塊更新到已有的大賬簿上(區塊鏈)。
這個區塊發布到區塊鏈上之后,所有的礦工就會投入到下一個區塊的求解上,隨著礦工的逐漸增多算力的逐漸增強,為了保證10min左右一個區塊的速度,所以網絡會調整難度以保證以現有的網絡算力求得當前區塊的解的時間為10min。
隨著新區塊的生成越來越多,基于張三那筆交易區塊的計算量就會越大,相當與可信度又得到了一層保障。按慣例來說,一個區塊獲得六次以上“證明”時就被認為是不可撤銷的了,因為要撤銷和重建六個區塊需要巨量的計算。
好了比特幣的交易過程就是這樣了,是不是很神奇。