本章是關于我們如何在實踐中存儲和使用比特幣。
4.1本地簡單存儲
我們從最簡單的存儲比特幣的方式開始,就是將它們放在本地設備上。概括來說,要花費比特幣你需要知道一些公共信息和一些秘密信息。公共信息是區塊鏈上發生的事情——硬幣的身份,價值等等。秘密信息是比特幣所有者的秘鑰,想必,這是你的。你不必過于擔心如何存儲公共信息,因為當你需要的時候你總是可以得到它。但是秘密簽名密鑰是你最好要記錄下來的。因此,在實踐中,存儲你的比特幣是關于存儲和管理密鑰。
在找出如何存儲和管理密鑰時,需要牢記三個目標。第一個是可用性:當你想要實際花費你的硬幣可以使用。第二個是安全性:確保沒有人可以花你的硬幣。如果有人有權力花費你的硬幣,他們可以把你的硬幣發給自己,然后就再也沒有硬幣了。第三個目標是方便,即密鑰管理應該比較容易做到。你可以想象,同時實現三者可能是一個挑戰。
最簡單的密鑰管理方法是將它們存儲在你自己本地設備上的文件上:你的計算機,你的手機或你攜帶,擁有或控制的其他類型的小工具。這對于方便來說是很好的:有一個智能手機應用程序,可以在幾個按鈕的推動下消費硬幣,很難被擊敗。但是這對于可用性和安全性來說并不好-如果你丟失設備,如果設備崩潰,并且你必須去擦拭光盤,或者你的文件被損壞,你的鑰匙將丟失,你的硬幣也將丟失。同樣對于安全性:如果有人竊取或中斷你的設備,或者它被惡意軟件感染,他們可以復制你的密鑰,然后他們可以將所有的硬幣發送給自己。
換句話說,將私人密鑰存儲在本地設備,特別是移動設備上,很像是在你的錢包或腰包中攜帶錢。有一些零用錢是有用的,但你不想隨身攜帶你的生活儲蓄,因為你可能會失去它,或者有人可能會偷走它。那么你通常所做的就是在你的錢包里存儲一些信息/一點點錢,并把大部分錢留在別的地方。
錢包
如果您在本地存儲您的比特幣,您通常會使用錢包軟件,這是一種可以跟蹤所有硬幣的軟件,管理鑰匙的所有細節,并通過良好的用戶界面使事情變得方便。如果您想要將4.25美元的比特幣發送到你們當地的咖啡店,那么錢包軟件會給你提供一些簡單的方法。錢包軟件特別有用,因為你通常希望使用一大堆不同的地址,并帶有不同的密鑰。你可能會記得,創建一個新的公鑰/私鑰對是很容易的,你可以利用它來改善你的匿名性或隱私性。錢包軟件為你提供一個簡單的界面,告訴你錢包中有多少錢。當你想使用比特幣時,它會處理使用哪一個密鑰的細節以及如何生成新的地址等等。
編碼鑰匙
基座58和QR碼(二維碼)。要花費或接受比特幣,你還需要一種與另一方交換地址的方法——即要發送比特幣的地址。地址編碼有兩種主要方式,可以將它們從接收者傳送到花費者:作為文本字符串或二維碼。
要將地址編碼為文本字符串,我們將該鍵的位進行轉換,并將其從二進制數轉換為基座58。然后我們使用一組58個字符將每個數字編碼為一個字符;這被稱為base58符號。為什么是58?因為這是我們將大寫字母,小寫字母以及數字作為字符包含在內的數字,但是忽略了可能令人困惑或看起來像另一個字符的數字。例如,大寫字母“O”和零都被取出,因為它們看起來太像了。這樣就可以在必要的情況下,我們現在討論的QR碼等方法可以避免通信地址的手動方法。通過電話讀取編碼的地址,或者從打印紙讀取并輸入密碼。理想情況下,通過我們現在討論的QR碼等方法可以避免通信地址的手動方法。
圖4 .1:代表實際比特幣地址的QR碼。 隨便送我們一些比特幣。
用于編碼比特幣地址的第二種方法是作為QR碼,一種簡單的二維條形碼。QR碼的優點是您可以使用智能手機掃描它,錢包軟件可以自動將條形碼轉換為代表相應比特幣地址的一系列位。這在商店中很有用,例如:退房系統可能會顯示QR碼,你可以通過用手機掃描代碼并將硬幣發送到該地址來支付費用。它也可用于手機到手機的傳輸。
虛榮地址。一些個人或商家喜歡有一個從一些有意義的文字開始的地址。例如,賭博網站Satoshi Bones用戶將錢發送到位置2-6中包含字符串“骨頭”的地址,例如1bonesEeTcABPjLzAb1VkFgySY6Zqu3sX(所有常規地址以字符1開頭,表示支付到pubkey-hash)。
我們說地址是哈希函數的輸出,它產生隨機數據,所以字符串“骨頭”是如何進入的?如果Satoshi骨頭簡單地構成這些地址,則缺乏反轉哈希函數的能力,他們將不會知道相對應的私鑰,因此實際上不會控制這些地址。相反,他們反復生成私鑰,直到他們幸運,找到一個哈希到這種模式的密鑰。這樣的地址稱為虛榮地址,并且有工具來生成它們。
側邊欄
加快虛榮地址的生成。在比特幣中,如果我們調用私鑰x,則公鑰是g的x次方。取冪表示橢圓曲線組中所謂的標量乘法。地址則是,公鑰的哈希值。我們不會再這里了解細節,但是乘冪是地址生成中緩慢的步驟。
產生虛榮地址的天真的方式是選擇一個偽隨機數x,計算,如果該地址不起作用則重復。一個快速的方法是如果第一個x失敗,則嘗試x+1,并繼續增加,而不是每次挑選一個新的x。這是因為=x,我們已經計算g了,所以我們只需要對每個地址進行乘法運算,而不是求冪,這要快得多。事實上,它將虛榮地址的生成加密了兩個數量級以上。
這需要多少工作? 由于每個角色有58種可能性,如果您想要找到以特定k-字符串開頭的地址,則平均需要生成58的k次方個地址,直到你幸運。所以找到一個以“骨頭”開頭的地址將需要產生超過6億個地址! 這可以在現在的普通筆記本電腦上完成。但是每個額外的角色都會變得越來越難。找到一個15個字符的前綴將需要不可行的計算量,并且(不需要在底層哈希函數中找到中斷)是不可能的。
4.2冷熱庫
正如我們剛剛看到的那樣,將Bitcoin存儲在電腦上就像在你的錢包或腰包里攜帶錢。這被稱為“熱存儲”。 這很方便,但也有一些風險。 另一方面,“冷庫”是脫機的。它被鎖在某處。它沒有連接到互聯網,它是檔案。所以它確保了安全性,更安全,當然不是那么地方便。這類似于你你身上攜帶一些零錢,但把你的生活儲蓄放在更安全的地方。
想要有獨立的冷熱存儲,顯然你需要為每個密鑰分開單獨的密鑰——否則,如果熱存儲被破壞,冷藏庫中的硬幣將是易受攻擊的。你會想要在熱端和冷端之間來回移動硬幣,所以每邊都需要知道對方的地址或公鑰。
冷庫不在線,因此熱存儲和冷藏將無法通過任何網絡彼此連接。但好消息是,冷庫不必在線接收硬幣——由于熱存儲器知道冷藏地址,所以可以隨時將硬幣發送到冷庫。在任何時候,如果你的熱錢包中錢的金額變得很多時,你可以將其中的一大塊轉移到冷庫中,而不會通過連接到網絡將你的冷藏置于風險之中。下一次冷藏連接時,它將能夠從區塊鏈接收到關于這些轉移的信息,然后冷庫將能夠用這些硬幣來做所需要的。
但是在管理冷藏地址時有一點問題。一方面,如前所述,為了隱私和其他原因,我們希望能夠在具有不同密鑰的單獨地址上接收每個硬幣。所以每當我們將硬幣從熱端轉移到冷的一面時,我們想為此而使用一個新鮮的冷地址。但是由于冷端不在線,我們必須有一些方法在熱的一端來找出這些地址。
生硬的解決方案是為冷方一次生成一大堆地址,并將它們發送給熱端,以便逐一使用它們。缺點是我們必須定期重新連接冷端,以便傳輸更多的地址。
分層錢包
一個更有效的解決方案是使用分層錢包。它允許冷端使用基本上無限數量的地址,熱端可以了解這些地址,但雙方只進行簡短的一次性通信。但這需要一點點加密的詭計。
回顧以前,以前在第1章討論了關鍵代碼和數字簽名時,我們研究了一個名為generateKeys的函數,它生成一個公鑰(作為一個地址)和一個秘鑰。在分層錢包中,關鍵代碼的工作方式不同。我們不是生成單個地址,而是生成所謂的地址生成信息,我們不是生成私鑰,而是生成所謂的私鑰生成信息。給定的地址生成的信息,我們可以生成一個序列的地址:我們應用一個地址生成函數將輸入的地址生成信息和任何整數i作為輸入生成序列中的第i個地址,同樣的,我們可以使用私鑰生成信息生成一系列的私鑰。
加密的魔法使這有用的是,對于每個i,第i地址和與第i密鑰“匹配”——也就是說,第i密鑰控制的,并可用于消費,比特幣來自這里另一個重要的加密屬性是安全性:地址生成信息不會泄露任何有關私鑰的信息。第i地址就好像這一對是由老式的方式生成一樣。所以就好像我們有一系列常規的密鑰對。
這里另一個重要的加密屬性是安全性:地址生成信息不會泄露任何有關私鑰的信息。這意味著向任何人發送地址生成信息是安全的,所以任何人都可以啟用生成第i個密鑰。
現在,并非所有存在的數字簽名方案都可以被修改,以支持層次密鑰生成。有的可以有的不行,但好消息是,通過使用比特幣,ECDSA數字簽名,支持分層密鑰的生成,允許這個技巧。也就是說,冷端產生任意多個密鑰,熱端產生相應的地址。
圖4.2:分層錢包的模式。
冷端創建并保存私鑰生成信息和地址生成信息。它將后者一次性轉移到熱門。每當它想要向冷端發送硬幣時,熱端依次產生一個新的地址。當冷端重新連接時,它會順序生成地址,并檢查區塊鏈以傳送到這些地址,直到達到沒有接收到任何硬幣的地址。如果要將某些硬幣發回熱邊或以其他方式使用,也可以依次生成私鑰。
這是它的工作原理。回想一下,ECDSA私鑰通常是隨機數x,相應的公鑰是。對于分層密鑰生成,我們需要另外兩個隨機值k和y
這具有我們想要的所有屬性:每一方都可以生成其密鑰序列,并且與相應的密鑰匹配,因為(因為對應于私有密鑰x的公鑰是)它還有一個我們沒有談到的財產:當你發出公鑰時,這些鑰匙將不能相互鏈接,也就是說,不可能推斷他們來自同一個錢包。具有冷端的稻草人解決方案產生大批地址確實具有這種性質,但是當考慮到鑰匙實際上不是獨立生成時,我們必須對它保留注意。這個屬性對隱私和匿名很重要,這將是第6章的主題。
在這里我們有兩個層次的安全性,熱端處于較低的級別。如果熱端受到威脅,我們剛剛討論的無連結性屬性將會丟失,但私鑰(和比特幣)仍然是安全的。一般來說,這個方案支持任意多的安全級別——因此“分級”——盡管我們還沒有看到細節。例如,當公司內部有多個級別的授權時,這一點是有用的。
現在我們來討論一下冷信息的不同方式——是否可以存儲一個或多個密鑰或密鑰生成信息。第一種方法是把它放在某種設備里,然后把它放在保險箱里。它可能是一臺筆記本電腦,一部移動電話或平板電腦,或一個拇指驅動器。重要的是把設備關上并鎖上,這樣如果有人想偷它,他們就得破門而入。
腦錢包。
我們可以使用的另一種方法是所謂的腦錢包。這是一種只需使用一個秘密口令來控制訪問比特幣的方式。這避免了硬盤驅動器、紙張或其他任何長期存儲機制的需要。在你的身體安全性差的情況下,或許當你在國際旅行時,這個屬性可能特別有用。
大腦錢包背后的關鍵在于有一個可預測的算法將密碼轉化為一個公鑰和私鑰。例如,你可以使用合適的哈希函數對密碼進行哈希以導出私鑰,并給出了私鑰,公鑰可以以一個標準的方式導出。此外,與之前我們看到的分層錢包技術相結合,我們可以從密碼短語中生成一整套序列的地址和私鑰,從而實現完整的錢包。
然而,如果攻擊者可以猜到密碼短語,他也可以獲取腦錢包中的所有私鑰。與計算機安全一樣,我們必須假設對手知道您用于生成密鑰的過程,且只有你的密碼提供安全性。所以對手可以嘗試各種口令,并使用它們生成地址;如果他在任何這些地址發現區塊鏈上的任何未使用的交易,他可以立即將其轉移給自己。對手可能永遠不知道(或關心)那些硬幣屬于誰,攻擊不需要闖入任何機器。猜腦錢包密碼短語并非針對特定的用戶,而且不留痕跡。
側邊欄
產生令人難忘的密碼短語。提供大約80位熵的一個密碼短語生成程序是從10000個最常用的英語單詞中選擇6個單詞的隨機序列(大約為80).許多人發現這些比隨機字符串更容易記住。這是一對密碼短語生成的方式。
此外,與猜測您的電子郵件密碼(可以通過電子郵件服務器限定)的任務不同,攻擊者可以使用大腦錢包下載具有未兌換硬幣的地址列表,嘗試盡可能多的潛在密碼,因為他們有計算能力檢查。請注意,攻擊者不需要知道哪些地址對應于大腦錢包。這被稱為離線猜測或密碼破解。提出易于記憶的密碼短語,而且不會容易以這種方式猜測是更具挑戰性的。生成密碼短語的一種安全方法是具有一個自動的過程,用于挑選隨機的80位數字,并將該數字轉換成密碼短語,使得不同的數字導致不同的密碼。
在實踐中,使用故意緩慢的功能從密碼短語中導出私鑰也是明智的,以確保攻擊者嘗試所有可能性需要盡可能長的時間。這被稱為關鍵拉伸。為了創建一個故意緩慢的密碼推導函數,我們可以采用像SHA-256這樣的快速加密散列函數,并計算它的次迭代,將攻擊者的工作負載乘以。當然,如果我們把它弄得太慢的話,它會開始讓用戶感到討厭,因為他們的設備只要想從大腦錢包里拿出硬幣,就必須重新計算這個功能。
如果一個大腦錢包密碼無法訪問——說已經被遺忘了,沒有被寫下來,不能被猜到——那么硬幣就永遠丟失了。
紙錢包
第三個選項是所謂的紙錢包。我們可以將關鍵材料打印成紙,然后將該紙放入安全或可靠的位置。顯然,這種方法的安全性與我們正在使用的紙的物理安全性一樣好或壞。典型的紙質錢包通過兩種方式對公鑰和私鑰進行編碼:作為二維條形碼,并以基礎58符號表示。 就像一個大腦的錢包一樣,存儲少量的關鍵材料足以重新創建一個錢包。
圖4.3:一個帶有公鑰的比特幣紙錢包編碼為二維條碼和基本58標記。請注意,私人密鑰在一個防篡改密封之后。
防篡改裝置
我們可以存儲離線信息的第四種方法是將其放在某種防篡改設備中。要么我們把鑰匙放進設備,要么設備生成鑰匙;無論如何,設備的設計使其無法輸出或泄露密鑰。這個設備代替了用密碼來表示符號語句,當我們按下按鈕或給它某種密碼時,它就這樣做了。一個優點是,如果設備丟失或被盜,我們將知道,密碼唯一可能被盜的是如果設備被盜。這不同于在筆記本電腦上存儲你的鑰匙。
一般來說,人們可能會使用這四種方法的組合來保護他們的鑰匙。對于熱存儲,特別是用于儲存大量比特幣的熱存儲,人們愿意努力工作,提出新的安全方案以保護它們,我們在下一節將談談一些更先進的方案。
4.3拆分和共享密鑰
到目前為止,我們已經研究了存儲和管理控制比特幣密鑰的不同方法,但我們總是把密鑰放在一個地方——無論是鎖定在安全中,還是在軟件中,或者在紙上。這讓我們失去了一個點。如果單個存儲空間出現問題,那么我們就會遇到麻煩。我們可以創建和存儲關鍵材料的備份,但這會降低密鑰丟失或損壞(可用性)的風險,從而增加了盜用(安全性)的風險。這種權衡似乎是根本的。我們是否可以獲取一個數據,并存儲在可用性和安全性同時增加的方式嗎?值得注意的是,答案是肯定的,這又是一個使用加密技術的技巧,稱為秘密共享。
這里的想法:我們要將我們的密鑰劃分成N個片段。我們想要這樣做,如果我們被給予任何K的這些片段,那么我們將能夠重建原始的秘密,但是如果我們被給予少于K個片段,那么我們將無法了解原始秘密的任何內容。
鑒于這個嚴格的要求,簡單地將秘密“切割”成碎片不會起作用,因為即使是單片還提供了一些關于秘密的信息。我們需要一些更聰明的東西。而且,由于我們沒有削減秘密,所以我們會將各個組件稱為“份額”而不是片段。
假設我們有N = 2和K = 2。這意味著我們根據秘密生成2個份額,我們需要這兩個份額才能重建這個秘密。我們叫我們的秘密S,這只是一個大(128位)的數字。我們可以生成一個128位隨機數R,使兩個共享為R和S⊕R。(⊕代表按位XOR)。本質上,我們用一次性“加密”S,并將密鑰(R)和密文(S⊕R)存儲在不同的地方。密鑰和密文本身都不會告訴我們關于秘密的任何內容。但是鑒于這兩個份額,我們只是將它們組合在一起來重建這個秘密。
只要n和k是相同的,這個技巧就可以工作了——我們只需要為第一批N-1股份生成N-1個不同的隨機數,最后的份額將是所有其他n-1個份額共享的秘密XOR。但是如果N大于K,那么這不再起作用了,我們需要一些代數。
圖4.4:2-out-of-N秘密共享的幾何圖示。S表示秘密,編碼為(大的)整數。綠線具有隨機選擇的斜率。橙色點(具體來說,它們的Y坐標S + R,S + 2R,...)對應于份額。任何兩個橙色點都足以重建紅色點,因此也就是秘密。所有算術都以大質數模數完成。
看看圖4.4。 我們在這里做的是首先在Y軸上生成點(0,S),然后在該點上繪制一條隨機斜率的線。接下來,我們在這條線上生成一堆點,想要多少生成多少。事實證明,這是S的秘密共享,N是我們生成的點數,K =2。
為什么這樣工作?首先,如果你給出了兩個生成點,你可以通過它們畫一條線,看看它在哪里與Y軸相遇。那會給你S.另一方面,如果你只給了一個點,它不會告訴你S,因為線的斜率是隨機的。每條通過你的點的線都是同樣可能的,他們都將與Y軸在不同的點相交。
還有一個微妙之處:為了使數學運算出來,我們必須用一個大素數P來完成所有算術運算。它不需要是秘密或任何東西,只要是真的很大。秘密S必須在0和P-1之間,包括0和P-1。所以當我們說我們在線上生成點時,我們的意思是我們生成一個隨機值R,也在0和P-1之間,我們生成的點是
x = 1,y =(S + R)mod P
x = 2,y =(S + 2R)mod P
x = 3,y =(S + 3R)mod P
等等。秘密對應于x = 0,y =(S + 0 * R)mod P,即x = 0,y = S。
我們看到的是一種使用K = 2和任何值N進行秘密共享的方式。這已經相當不錯了——如果N = 4,你可以將你的密鑰分成4個分組,并將它們放在4個不同的設備上,以便如果有人竊取了這些設備中的任何一個,那么他們也不會知道你密鑰的任何信息。另一方面,即使這兩個設備在火災中被破壞,你也可以使用其他兩個設備來重建密鑰。所以作為承諾,我們增加了可用性和安全性。
但是我們可以做得更好:只要K不超過N,我們就可以與任何N和K進行秘密共享。為了看如何構建的,我們回去看圖。我們使用一條線而不是其他形狀的原因是,代數上說,一條線是1的多項式。這意味著要重建一條線,我們需要兩點,不要少于兩個。 如果我們想要K = 3,我們將使用一個拋物線,它是一個二次多項式,或者是二階多項式。需要三點來構造一個二次函數。我們可以使用下表了解發生了什么。
表4.1:秘密分享背后的數學。通過K-1級隨機多項式曲線上的一系列點來表示秘密,只有至少K個點(“份額”)可用時才能重建秘密。
有一個叫做拉格朗日插值的公式,它允許你從曲線上的任何K點重構一個K-1度的多項式。這是一個用直尺通過兩個點繪制直線的幾何直觀的代數版本(概括)。作為所有這一切的結果,我們有一種方法來存儲任何秘密作為N股,使我們是安全的,即使對手了解到他們的K-1,同時我們可以承受高達n-k的損失它們。
沒有一個是特定為比特幣設計的,順便說一句。你現在可以秘密分享您的密碼,并將其分享給你的朋友或將其放在不同的設備上。但是沒有人真的用密碼這樣的秘密去做到這一點。方便是一個原因;另一個原因是有其他安全機制可用于重要的在線帳戶,例如使用SMS雙重因素安全性的驗證。但是使用Bitcoin,如果你在本地存儲你的密鑰,那么你沒有其他安全選項。沒有辦法根據收到的短信來控制比特幣地址。 在線錢包的情況是不同的,下一節我們來看看。但是沒有太不同——它只是將問題轉移到不同的地方。畢竟,在線錢包提供商將需要一些方法來避免在存儲密鑰時出現單點故障。
閾值加密。但是,秘密共享還是有一個問題:如果我們有一個鑰匙,我們以這種方式分裂,然后我們想回去使用鑰匙來簽署一些東西,我們仍然需要把這些份額放在一起,并重新計算初始秘密,以便能夠簽署密鑰。我們將所有份額合并在一起的點仍然是一個單一的脆弱點,對手可能會竊取鑰匙。
密碼學也可以解決這個問題:如果共享存儲在不同的設備中,有一種以分散方式生成比特幣簽名的方法,而不用在任何單個設備上重建私有密鑰。這被稱為“閾值簽名”。最佳用例是具有雙重因素安全性的錢包,對應于N = 2和K = 2的情況。假設你已經配置了你的錢包,以在桌面和手機之間分割其密鑰資料。然后,你可以在桌面上啟動付款,這將創建一個部分簽名并將其發送到你的手機。然后你的手機將通過付款明細(收件人,金額等)提醒您,并要求你確認。如果詳細信息檢查后,你將確認,你的手機將使用其私鑰的共享完成簽名,并將交易廣播到區塊鏈。如果桌面上有惡意軟件竊取你的比特幣,那么可能會發起一筆將資金發送給黑客的地址的交易,但是你會在手機上收到你未授權交易的警報,然后你就知道有什么事發生了。閾值簽名背后的數學細節非常復雜,我們不會在這里討論。
多簽名
有一個完全不同的選擇,以避免單點故障:多簽名,我們之前在第3章中看到過。Bitcoin腳本直接允許你規定對地址的控制在不同的密鑰之間進行分割,而不是使用單個密鑰并將其拆分。這些密鑰可以存儲在不同的位置,并且簽名單獨生成。當然,完成的簽名交易將在某些設備上構建,但是即使對手控制這個設備,他所能做的一切就是防止它被廣播到網絡。他不能在沒有其他設備參與的情況下產生一些其他交易的有效多簽名。
例如,假設這本書的作者安德魯,Arvind,埃德,約瑟夫和史蒂文都是一家公司的聯合創始人——也許我們從銷售這本免費書中收到豐富的特許權使用費——并且公司會有很多比特幣。我們可能會使用多重保護來保護我們大量的比特幣。我們中的每一個都會產生一個密鑰對,我們將使用3/5的多重信號來保護我們的冷庫,這意味著我們中的三個必須簽署才能創建有效的交易。
因此,我們知道,如果我們五個人分別保管鑰匙,并保證鑰匙安全,我們就相對安全了。對手將不得不妥協五個密鑰中的三個。如果我們中有一個甚至兩個人流氓,那么他們不能竊取公司的硬幣,因為至少需要三個鑰匙去做。同時,如果我們中的一個人丟了鑰匙或者被公共汽車輾過,我們的大腦錢包丟失了,其他人仍然可以把硬幣拿回來,然后把它們轉移到一個新的地址,重新保管鑰匙。換句話說,多重SIG可以幫助你以相對安全的方式管理大量的冷儲硬幣,并且在發生任何劇烈的事情之前需要多人操作。
側邊欄
閾值簽名時采用單個密鑰的密碼技術,將其分開共享,分別存儲,并且在不重建密鑰的情況下簽署交易。多簽名是比特幣腳本的一個特性,通過它你可以指定地址的控制在多個獨立鑰匙之間分割。雖然它們之間有一些差異,但它們通過避免單點故障來增加安全性。
在我們上面的陳述中,我們通過解釋如何幫助實現雙因素(或多因素)安全性,以及通過解釋如何幫助一組個人共同控制共同持有的資金來促進閾值簽名。但任何一種技術都適用于任何一種情況。
4.4在線錢包和交易所
到目前為止,我們已經討論了如何存儲和管理你的比特幣本身。現在我們將討論如何使用其他人的服務來幫助你。你可以做的第一件事是使用在線錢包。
在線錢包
一個在線錢包就像你可能自己管理的本地錢包,除了信息存儲在云中,你可以使用計算機上的Web界面或使用智能手機上的應用程序來訪問它。一些在2015年初受歡迎的在線錢包服務是Coinbase和blockchain.info。
從安全性的角度來看,關鍵的是站點提供了在瀏覽器或應用程序上運行的代碼,并且還存儲你的密鑰。至少它將具有訪問你的密鑰的能力。理想情況下,這個網站將按照你所知道的密碼對這些密鑰進行加密,但是你當然必須相信他們這樣做。你必須相信他們的代碼不泄漏你的密鑰或密碼。
一個在線錢包有一定的權衡來做自己的事情。一個很大的優點是它很方便。你無需在計算機上安裝任何東西,就能夠在瀏覽器中使用在線錢包。
在你的手機上,你可能只需安裝一次應用程序,不需要下載程序鏈。它可以在多個設備上工作——你可以在桌面和手機上安裝一個單一的錢包,只需真正的錢包就能在云端工作。
另一方面,存在安全隱患。如果網站或經營該網站的人員變得惡意,或者以某種方式受到影響,你的比特幣就會遇到麻煩。該網站提供的代碼,其骯臟的手指在你的比特幣上,如果在服務提供商有妥協或惡意的事情可能會更糟糕。
理想情況下,網站或服務由安全專業人員管理,他們在維護安全方面受過較好的培訓,或者比你更勤奮。所以你可能希望他們做得更好,你的硬幣實際上比你自己儲存的錢更安全。但是最后,你必須相信他們,你必須依靠他們不被妥協。
比特幣交易。要了解比特幣交易所,首先談談銀行和銀行業務如何在傳統經濟中運作。你給銀行一些錢——一個存款——銀行承諾稍后還錢。當然,最重要的是,銀行實際上并不是拿你的錢,把它放在后面的房間里。所有的銀行都承諾,如果你出錢,他們會給回來。銀行通常會把錢放在別的地方,也就是投資。銀行可能會在儲備金中保留一些錢,以確保他們能夠在典型的一天或甚至是不尋常的一天支付他們將面臨的提款需求。許多銀行通常使用一種稱為“儲備”的東西,在這些儲備中保留所有活期存款的一小部分,以防萬一。
現在,比特幣交換業務至少從用戶界面的角度來看,以類似于銀行的方式運作。他們接受了比特幣的存款,就像一家銀行一樣,承諾稍后再按要求給他們。你還可以通過從你的銀行帳戶轉賬,將法定貨幣——傳統貨幣(如美元和歐元)轉入交易所。交易所承諾將按要求償還任一種或兩種貨幣。交易所可以讓你做各種類似銀行業的事情。你可以賺取和收到比特幣付款。也就是說,你可以指示交易所向某一方支付一些比特幣,或者你可以要求其他人代你將資金存入特定交易所——放入你的賬戶中。他們還讓你交換比特幣為法定貨幣,反之亦然。通常,他們通過尋找一些想用美元購買比特幣的客戶和一些想把比特幣作為美元出售的客戶來實現這一點。換句話說,他們試圖找到愿意在交易中采取相反立場的顧客。如果雙方都能接受的價格,他們將完成交易。
假設我在一些交易所的賬戶持有5000美元和三個比特幣,我使用交易所,我下令購買2個比特幣,每個580美元,交易所找到一個愿意接受交易的人, 交易發生。現在我的帳戶中有五個比特幣,而不是三個,有3840美元,而不是5000。
這里要注意的一個重要事情是,當這筆交易發生在涉及我和另一個客戶的同一交易中時,比特幣區塊鏈中沒有實際發生任何交易。交易所不需要去區塊鏈,以便將比特幣或美元從一個賬戶轉移到另一個賬戶。在這筆交易中發生的一切是,交易所現在對我的承諾不同于以前的承諾。他們以前說,“我們會給你5000美元和3 BTC”,現在他們說“我們會給你3840美元和5 BTC”。這只是他們承諾的變化——沒有通過美元經濟或通過塊鏈發生實際的貨幣流動。當然,他們對另一個人的承諾也是以相反的方式改變的。
使用交流有利有弊。最大的優點之一是交易所有助于將比特幣經濟和比特幣與貨幣經濟聯系起來,以便輕松地傳遞價值。 如果我的帳戶中有美元和比特幣,我可以很容易地在他們之間來回交易,這真的很有幫助。
壞處就是風險。你面臨著和銀行一樣的風險,風險分為三類。
三種風險
第一個風險是銀行的風險。當一群人一次出現并想要他們的錢時,會發生什么事情。由于銀行只有部分儲備,可能無法應對同時提款。 危險是一種恐慌的行為,一旦謠言開始繞開,一個銀行或交易所可能會遇到麻煩,他們可能會越來越接近不履行提款,然后人們踩踏,試圖在人群之前提取錢,你會經歷一場雪崩。
第二個風險是,銀行的所有者可能會運行一個龐氏騙局。這是一個方案,有人讓人們給他們錢,以換取未來的利潤,但實際上是把錢用于支付給以前購買的人的利潤。 這樣的計劃注定要最終失敗,失去了很多人的很多錢。 在最近的記憶中,伯尼·麥道夫(Bernie Madoff)最為著名。
第三個風險是黑客的風險,甚至是交易所的一個雇員,也會設法滲透交易所的安全。由于交易所存儲了控制大量比特幣的關鍵信息,所以他們需要對軟件安全及其程序非常謹慎——如何管理他們的冷、熱存儲以及所有這些。如果出現問題,你的錢可能會從交易所被盜。
所有這些事情都發生過。我們看到了由于銀行擠兌而倒閉的交易所。我們看到交易所的失敗是因為交易所的運營商是騙子,我們也看到了由于破產而倒閉的交易所。事實上,統計數據并不鼓舞人心。2013的一項研究發現,40家比特幣交易所中有18家因某些交易失敗或部分無力支付交易所承諾支付的資金而關閉。
最著名的例子是Mt. Gox。Gox一度是最大的比特幣交易所,它最終發現自己無力償債,無力償還所欠的款項。Gox是一家日本公司,最終宣告破產,留下許多人懷疑他們的錢去了哪里。現在,在日本和美國法院,Gox的破產是混亂的,要過一段時間我們才能確切知道錢到哪里去了。我們知道的一件事是,有很多它,而Gox不再擁有它了。所以,這是一個關于使用交易所的警示故事。
回過來考慮到銀行,我們看不到大多數發達國家銀行的失敗率為45%,部分是由于監管。各國政府以各種方式管制著傳統銀行。
銀行監管
政府首先要做的是經常強加最低儲備金要求。在美國,銀行需要以流動形式存在的活期存款的比例通常為3-10%,如果發生這種情況,他們可以處理大量的提款。二是政府往往規范銀行可以使用的投資類型和資金管理方式。目標是確保銀行的資產投資于相對較低風險的地方,因為這些資產是存款人在某種意義上的資產。
現在,為了換取這些形式的監管,政府通常會做一些事情來幫助銀行或幫助他們的存款人。一是政府出臺存款保險。也就是說,政府承諾存款人,如果遵守這些規定的銀行,政府將至少確保部分存款的安全。政府有時也會作為“最后貸款人”。如果一家銀行陷入困境,但基本上是有償還能力的,政府可能會介入并向銀行貸款以渡過危機,直到它能夠在必要時轉移資金以擺脫困境。
傳統銀行是這樣管制的,但比特幣交易所沒有。Bitcoin交易所或其他Bitcoin業務是否應該受到監管的問題是我們將在第七章中回顧的一個主題。
準備金證明。比特幣交換所或持有比特幣的其他人可以使用一種稱為“儲備證明”的加密伎倆,讓客戶對他們存入的錢感到放心。目標是讓交易所或商業持有比特幣的來證明它有部分儲備——他們可以控制大概25%甚至是100%的存款。
我們可以將準備金證明問題分解成兩部分。第一個是證明你持有多少儲備——這是比較容易的部分。該公司只需簡單地發布有效的付款自交易的索賠準備金數額。也就是說,如果他們聲稱擁有10萬個比特幣,那么他們創建一個交易,在這個交易中,他們向自己支付100,000個比特幣,并顯示該交易有效。然后,他們簽署一個挑戰字符串——由一些公正方生成的隨機字符串——與用于簽署自付交易的私鑰相同。這證明知道私鑰的人參與了儲備證明。
我們應該注意兩點警告。嚴格地說,這并不是說聲稱擁有儲備金的一方擁有一個證據,而只是說擁有這10萬個比特幣的人愿意在這個過程中進行合作。盡管如此,這看起來像是一個證明,有人控制或知道誰控制了一定數量的錢。此外,請注意,您可以隨時索賠:該組織可能擁有15萬個比特幣,但選擇僅支付10萬美元的自付款。 所以這種儲備證明并不能證明這是你的全部,但它證明你至少有這么多。
負債證明
第二件是證明你持有多少活期存款,這是很難的。如果你可以證明你的儲備金和你的定期存款,那么任何人都可以簡單地將這兩個數字分開,這就是你的部分儲備金。我們會提出一個計劃,允許你過度申報,但不能低報你的定期存款。因此,如果你能證明你的準備金至少是一個一定數額,你的負債在一定程度上是一個一定數量,合到一起,你就證明了你的部分準備金的下限。
如果你不關心用戶的隱私,你可以簡單地發布你的記錄——具體來說,擁有定期存款的每個客戶的用戶名和金額。現在任何人都可以計算你的總負債,如果你省略了任何客戶或謊稱其存款的價值,你就會冒著該客戶暴露你的風險。你可以補充假冒用戶,但你只能通過這種方式提高索賠總負債的價值。所以只要沒有客戶投訴,這就可以讓你證明你存款的下限。當然,這個伎倆是在尊重用戶隱私的同時做到這一點。
要做到這一點,我們將使用Merkle樹,我們在第1章中看到過。回想一下,merkle樹是用哈希指針構建的二進制樹,以便每個指針不僅說明我們可以獲得一條信息,而且該信息的加密哈希也是如此。交易所通過構建Merkle樹來執行證明,其中每個葉子對應于用戶,并發布其根哈希。類似于上述的天真協議,每個用戶都有責任確保它們被包含在樹中。此外,還有一種方式可以讓用戶集體檢查索賠的存款總額。 我們現在深入細節。
圖4.5:負債證明。
交易所發布包含葉子中所有用戶的Merkle樹的根,包括存款金額。任何用戶都可以請求一個包含在樹中的證明,并驗證存款金額是否正確傳播到樹的根目錄。
現在,我們要將這些哈希指針的每一個添加到另一個字段或屬性中。該屬性是一個數字,表示樹中該哈希指針下的子樹中所有存款比特幣的總金額。為了這樣做,每個哈希指針對應的值應該是它下面的兩個散列指針的值的總和。
交易所構造這個樹,加密地將根指針與根屬性值一起簽名,并發布它。根值當然是總負債,我們感興趣的數量。交易所聲稱所有用戶都在樹的樹葉中表示,其存款值正確表示,并且值正確地傳播到樹上,以使根值是所有用戶的存款金額的總和。
現在,每個客戶可以去組織,要求提供正確包含的證明。然后,交易所必須向客戶顯示該用戶的葉子到根的部分樹,如圖4.6所示。客戶然后會驗證:
1.根哈希指針和根植與交易所簽名和發布的相同。
2.哈希指針一直一直下降,也就是說,每個哈希值確實是它指向的節點的加密哈希。
3.葉包含正確的用戶帳戶信息(例如,用戶名/用戶ID和存款金額)。
4.每個值是它下面兩個值的總和。
5.這兩個值都不是負數。
圖4.6:包含在Merkle樹中的證明。葉節點的披露,以及從根到葉的路徑上的節點的兄弟姐妹。
好消息是,如果每個客戶都這樣做,那么這個樹的每一個分支都將被探索,有人將驗證每個哈希指針的相關值等于其兩個孩子的值之和。至關重要的是,交易所不能在不同客戶的樹的任何部分呈現不同的值。這是因為這樣做要么意味著找到哈希沖突的能力,要么向不同的客戶呈現不同的根值,我們認為這是不可能的。
讓我們回顧一下。首先,交易所他們通過進行X量的自我交易證明至少擁有X數量的儲備貨幣。然后他們證明他們的客戶最多有Y數量的存款。這表明它們的儲量分數至少為X / Y。這意味著,如果比特幣交易所想證明他們在所有存款(或100%)上持有25%的儲備,他們可以以任何人可以獨立核查的方式執行,而不需要中央監管機構。
你可能會注意到,這里提供的兩個證明(通過簽署挑戰字符串的儲備證明和通過Merkle樹的負債證明)顯示了大量私人信息。具體來說,它們揭示了交易所使用的所有地址,儲備金和負債的總價值,甚至有關個人客戶余額的一些信息。實際上交易所對此的發布猶豫不決,結果儲備的加密證明很少見。
最近提出的一項叫做“規定”的議定書提供了相同的償付能力證明,但并沒有透露總負債或儲備金或使用的地址。該協議使用更高級的加密,我們不會在此處覆蓋,但另一個示例顯示如何使用加密技術來確保隱私。
償付能力是比特幣交易所自愿證明監管的一個方面,但是第7章我們將看到,監管的其他方面更難保證。
4.5付款服務
到目前為止,我們已經談到了如何存儲和管理你的比特幣。現在讓我們考慮一個商人——無論是在線商家還是當地的零售商家——都可以通過實際的方式接受比特幣的付款。商家通常支持比特幣付款,因為他們的客戶希望能夠用比特幣付款。商人可能不想持有比特幣,希望在一天結束時只收取美元或任何當地法定貨幣。他們想要一個簡單的方式來做,而不用擔心太多技術,改變他們的網站或建立一些類型的銷售點技術。
商人也希望低風險。有各種可能的風險:使用新技術可能導致他們的網站下降,花費他們的錢。處理比特幣有安全隱患——有人可能會闖入他們的熱錢包,有些員工會偷他們的比特幣。最后還有匯率風險:美元與比特幣的兌換價值可能會不時地波動。商人可能想賣一個十二美元的比薩餅,想知道他們將得到十二美元或要么接近它,和他們通過出售比薩餅收到的比特幣價值不會大幅下降,然后才可以將這些比特幣交換為美元。
存在支付服務,以允許客戶和商家獲得他們想要的東西,彌合這些不同愿望之間的差距。
圖4.7:用于生成比特幣支付按鈕的示例支付服務接口。商家可以使用這個界面生成一個HTML代碼片段來嵌入他們的網站。
通過支付服務接收比特幣付款的過程可能對商家來說是這樣的:
1.商家到付款服務網站,并填寫一個表單,描述付款小部件的項目、價格和演示,等等。圖4.7顯示了Coinbase的一種形式的說明性示例。
2.支付服務生成商家可以放入其網站的HTML代碼。
3.當客戶點擊付款按鈕時,各種事情都會發生在后臺,最終商家得到一個確認說:“客戶ID [客戶ID ]為項目[項目id ]的金額[價值]進行了付款。
雖然此手動過程對于銷售一個或兩個商品的小型網站或希望接收捐贈的網站是有意義的,但是對于數千個商品復制粘貼HTML代碼當然是不可行的。因此,支付服務還提供用于向動態生成的網頁添加支付按鈕的編程接口。
圖4.8:涉及用戶、商戶和支付服務的付款過程。
現在讓我們更詳細地查看付款流程,看看當客戶使用比特幣進行購買時會發生什么。下面的步驟如圖4.8所示。
1.用戶選擇要在商家網站上購買的商品,當需要支付時,商家將提供一個網頁,該網頁將包含比特幣支付的按鈕,這是由付款服務提供的HTML代碼段。該頁面還將包含一個交易ID——這是對商家有意義的標識符,并允許他們在自己的會計系統中查找記錄,以及商家希望支付的金額。
2.如果用戶想用比特幣付款,他們將點擊該按鈕。這將觸發對付款服務的HTTPS請求,稱該按鈕被點擊,并傳遞商家的身份,商家的交易ID和金額。
3.現在支付服務知道這個客戶——無論他們是誰_想要支付一定數量的比特幣,所以支付服務將彈出某種方式,或者開始與用戶進行某種交互。這給用戶有關如何支付的信息,然后用戶將通過其首選的錢包啟動比特幣轉移到支付服務。
4.一旦用戶創建了付款,支付服務將把瀏覽器重定向到商家,傳遞來自支付服務的消息,目前這一切看起來還不錯。這可能意味著,例如,支付服務已經觀察到對等網絡的交易廣播,但是迄今為止交易尚未收到足夠的(或任何)確認。這完成了用戶關心的付款、商家的貨物裝運,等待來自支付服務的最終確認。
5.支付服務后來直接向包含交易ID和金額的商家發送確認。 通過這樣做,支付服務告訴商家,該服務在一天結束時欠商家錢。 商人然后將貨物運送給用戶。
最后一個步驟是支付服務實際上通過匯款給商人的銀行賬戶,以美元或一些法定貨幣向商家匯款。這種情況發生在固定結算期結束,也許一天一次,而不是每次購買一次。支付服務只收取一小部分費用,這就是他們的收入來源。其中一些細節可能會因支付服務而有所不同,但這是一般的方案。
總的來說,在這個過程結束時,客戶支付比特幣,商人獲得美元,減去一個很小的百分比,每個人都高興。回想一下,商家想要出售商品獲得一些特定數量的美元或者是當地的法定貨幣。支付服務處理所有其他事項——從客戶那里收取比特幣并在一天結束時進行存款。
至關重要的是,支付服務會接納所有的風險。它接納安全風險,因此需要有良好的安全程序來管理其比特幣。它接納匯率風險,因為它收到比特幣并支付美元。如果美元對比特幣的價格大幅波動,支付服務可能會虧損。 但是,如果在另一個方向波動,服務可能會賺錢,但這是一個風險。接納它是支付服務業務的一部分。
請注意,支付服務可能大規模運營,因此收到大量的比特幣并支付大量的美元。它將不斷需要交換它所獲得的比特幣得到更多的美元,以便它可以保持循環。因此,支付服務必須積極參與交易市場,將貨幣和比特幣經濟聯系在一起。所以支付服務不僅要擔心匯率是多少,而且還要處理如何大量兌換貨幣。
也就是說,如果可以解決這些問題,服務在每筆交易中收到的費用都將成為一個潛在的利潤豐厚的業務,因為它可以解決客戶愿意支付比特幣和商家想獲得美元并專注于銷售商品的愿望的不匹配。
4.6交易費用
交易費用的主題在前幾章中已經出現,后面將再次介紹。在這里,我們將討論如何在比特幣進行交易費用的實際細節。
每當交易被放入比特幣區塊鏈中時,該交易可能包括交易費用。從上一章回顧一下,交易費用剛剛被定義為進入交易的硬幣的總價值與出來的硬幣的總價值之間的差額。輸入總是至少與輸出一樣大,因為常規交易不能創建硬幣,但如果輸入大于輸出,則差額被視為交易費用,并且該費用會交給創建包含此交易區塊的礦工。
交易費用的經濟學是有趣和復雜的,但我們將限制自己在交易費用是如何實際在2015年初設置并運作的。這些細節不時改變,但是我們會給你一個當前狀態的快照。
為什么交易費用會存在?原因是有一些成本是為了轉移你的交易而必須承擔的。比特幣節點需要中繼你的交易,最終礦工需要將你的交易建立到一個區塊中,并且花費他們一點點去做這個。例如,如果一個礦工的區塊是因為包含你的交易而稍大一些,傳播到網絡其余部分將要花費更長的時間,如果另一個礦工在同一時間內發現另一個區塊,該區塊將被孤立。
所以,對等網絡和礦工都有一個成本,合并在你的交易中。交易費用的概念是為了補償礦工處理你的交易所需的費用。節點在當前系統中沒有收到貨幣補償,盡管運行節點當然不如作為一個礦工昂貴。一般來說,你可以隨意將交易費用設置為你想要的交易費用。你可以免費支付,或者如果你喜歡,可以將費用設置的相當高。一般來說,如果你支付較高的交易費用,你的交易自然會被更快,更可靠地轉發和記錄。
當前默認交易費用。大多數礦工預期的當前交易費用如下:首先,如果交易符合以上所有這三個條件,則不收取費用:
1.交易的大小小于1000字節,
2.所有輸出均為0.01BTC或更大
3.優先級足夠大
優先級定義為:(輸入年齡*輸入值的總和)/(交易大小)。換句話說,查看交易的所有輸入,并為每一個輸入計算該輸入的年齡及其在比特幣中的值,并將所有這些產品相加。請注意,交易輸出的時間越長,其使用壽命就越長,并且最終用于優先級越高。
如果你符合這三項要求,那么你的交易將被轉交,并將以無償的方式記錄在區塊鏈中。否則收取費用,該費用為每1000字節大約0.0001 BTC,截至2015年,這是每1000字節,美國的一分錢。交易的近似大小為每個輸入加148字節,每個輸出為34個字節,其他信息為十個字節。所以,一個擁有兩輸入兩輸出的交易有400字節。
目前的現狀是,大多數礦工執行上述收費結構,這意味著他們要么不提供服務,要么將服務于不提供必要交易費用的最后交易。但是還有其他礦工不執行這些規則,有人會記錄和操作一個交易,即使它支付較小的費用或根本沒有收費。
如果你做出不符合費用要求的交易,那么它很可能會進入區塊鏈,但是更快速,更可靠地獲得交易記錄的方法是支付標準費用,這就是為什么大多數錢包軟件和大多數支付服務包含支付中的標準費用結構,因此當你從事日常的比特幣業務時,你會看到一些錢在交易費用上掙扎。
4.7貨幣兌換市場
通過貨幣兌換,我們的意思是交易比特幣與法定貨幣如美元和歐元。我們之前已經提到過關于讓你這樣做的服務,但現在我們要將其視為一個市場——它的規模、范圍、運作方式以及市場的經濟性。
首先要了解的是,它以許多方式運作,如兩法定貨幣之間的市場,如美元和歐元。價格會因人們購買歐元的嚴重程度和人們在某一天購買美元的嚴重程度而來回波動。在比特幣世界里有諸如bitcoincharts.com這樣的網站,顯示了多種不同交易所的各種貨幣匯率。
如果您瀏覽該網站,會有很多交易發生,價格隨著交易而實時變動。這是一個流動的市場,有很多地方可以去買或賣比特幣。在2015年3月,Bitfinex是最大的比特幣-美元交易所,在24小時內交易70,000比特幣,約為2100萬美元。
另一個選擇是在現實生活中與人們交換比特幣。有一些網站可以幫助你做到這一點。例如,在localbitcoins.com上,你可以指定你的位置,并且希望使用現金購買比特幣。你會得到一些搜索結果的人,他們在這個地點愿意出售比特幣,在這種情況下,它會告訴你什么價格和他們提供多少個比特幣。然后,你可以聯系任何一家,并安排在咖啡店或公園或任何地方見面,交給他們美元和接收比特幣。對于小交易,在區塊鏈上等待一個或兩個確認可能就足夠了。
最后,在某些地方,有定期的聚會,人們會去交易比特幣,所以你可以在一個預定的日子和時間去某個公園或街角或咖啡廳,那里會有一群人想要買或賣比特幣,你可以和他們做生意。有人可能喜歡在線上獲得比特幣的原因之一是它是匿名的,在某種程度上,在公共場所的交易可以被認為是匿名的。另一方面,因為銀行監管,開設一個交易所的賬戶通常需要提供政府發行的ID。我們將在第7章中更詳細地討論這一點。
供需。像任何一個市場一樣,比特幣交易所市場與想要與賣家做相反事情的買家相匹配。這是一個相當大的市場——每天數百萬美元通過它。這不是紐約證券交易所或美元/歐元市場的規模,這個市場規模大得多,它是一個規模最夠大,有著共識價格概念的市場。一個想進入這個市場的人可以至少購買或出售一些適量的款項,并且總能找到一個交易對手。
這個市場的價格,這個共識價格,像流動市場中的任何東西一樣,價格都會由供需決定。我們指的是可能出售的比特幣的供應和有美元的人對比特幣的需求。通過這種市場機制,價格將達到與供需匹配的水平。我們再來詳細了解一下。
比特幣的供應量是多少?這是你可能在這些市場之一購買比特幣的數量,它相當于目前流通的比特幣的供應量。有一個固定數量的比特幣流通。截至2015年10月,它約為1390萬,而目前比特幣的規則表明,這個數字將緩慢上升,最終達到2100萬的限制。
你也可能包括比特幣活期存款。也就是說,如果有人把錢存入比特幣交易所的賬戶中,而交易所沒有保留完全儲備以滿足每一筆存款,那么交易所的存款將大于交易所持有的硬幣數量。
取決于你所問的市場問題,將活期存款納入供應中可能或可能不正確。基本上,你應該在市場分析中包括需求存款,當需求存放的錢可以在該市場上出售時。例如,如果你把美元兌換成比特幣的需求存款,交易所允許將比特幣活期存款兌換成美元,那么他們就可以計算。
值得注意的是,當經濟學家通常談論法定貨幣的供應時,他們通常不僅在貨幣供應中包括流通貨幣——即紙幣和金屬貨幣,而且還包括活期存款的總額,這是出于邏輯上的原因,人們實際上可以花費他們的活期存款來購買東西。所以盡管現在說比特幣的供應量目前固定在1390萬,最終是2100萬,但為了某些目的,我們必須包括那些活期存款,像金錢一樣的活期存款,所以供應量可能不會像比特幣倡導者聲稱的方式固定。我們需要看看我們正在談論的特定市場的情況,以了解什么是適當的貨幣供應量。但是假設我們已經基于我們正在分析的市場,就我們正在使用的供應達成一致。
現在我們來看看需求。比特幣真的有兩個主要的需求來源。比特幣的需求是調節法定貨幣交易的一種方式,并且有將比特幣作為投資的需求。比特幣的需求是調節法定貨幣交易的一種方式,并且有將比特幣作為投資的需求。
首先讓我們來看看中介的法定貨幣交易。想象一下,Alice想從Bob處購買一些東西,想要向Bob付錢,而Alice和Bob想轉移我們說的一定數量的美金,但是他們發現使用比特幣來做這個轉移是很方便的。讓我們假設Alice和Bob都不會長期持有比特幣。我們稍后會回到這個可能性。所以Alice會將美金換成比特幣然后進行轉移,一旦他們收到足夠多Bob滿意的確認,他將把比特幣換成美金。從比特幣需求的角度來看,這里的關鍵是,在交易進行的過程中,必須將比特幣作為中介來處理此交易。這就造成了對比特幣的需求。
第二個需求來源就是比特幣有時被要求作為投資。那就是說,如果有人想買比特幣并持有它,希望比特幣的價格在未來會上漲,并且他們到時候能夠賣掉。當人們購買并持有,那些比特幣就不會流通。當比特幣的價格低時,您可能會希望很多人想要購買比特幣作為投資,但如果價格上漲非常高,那么對于比特幣的投資需求就不會太高。
市場行為的簡單模型
現在,我們可以做一些簡單的經濟建模來了解這些市場行為。我們不會在這里做一個完整的模型,雖然這是一個有趣的練習。我們來看看中介交易需求,以及可能對比特幣價格產生的影響。
我們首先假設一些參數。T是每個參與市場的人通過比特幣中介進行的總交易價值。該值以美元/秒計。該值以美元/秒計。這是因為我們假設為了簡單起見,想要中介交易的人都考慮到某些交易的美元價值,或者其他一些我們將轉換成美元的法定貨幣。所以每秒需要調解一定數量的美元。D是為了中介交易比特幣需要流通的持續時間。這是從支付者購買比特幣到接收者能夠將它們賣回市場的時間,我們將以秒計算。S是可用于此次購買的比特幣的總供應量,所以這將是所有硬貨幣比特幣的存在——目前約1400萬,最終達到2100萬——減去人們作為長期投資的。換句話說,我們正在談論的是比特幣周圍的晃動,可用于中介交易。最后,P是比特幣的價格,以每比特幣為單位。
現在我們可以做一些計算。首先,我們將計算每秒可以使用多少個比特幣,以便每秒服務一次。總共有S個比特幣,因為他們D秒鐘在流通中被淘汰了,平均每秒這些比特幣的一個S/D分數將會新出現,因為它們將從流通之外的狀態出現,變成每秒鐘可用于中介交易。這就是供應方面。
在需求方面——中介交易所需的每秒Bitcoins數量——我們有T美元值得中介交易,為了中介交易一美元,我們需要1/P比特幣。所以,T/P是為了服務用戶想要服務的所有交易而需要的每秒比特幣的數量。
現在如果你看一下特定的時間,在第二次的時候有一個S/D的供應和T/P的需求。在這個市場上,像大多數市場一樣,價格會波動,以使供給符合需求。如果供應高于需求,那么比特幣就會出售,所以出售比特幣的人們愿意降低要價,以便出售它們。根據我們的需求T / P方程式,當價格下降時,需求增加,供需平衡。
另一方面,如果供給小于需求,那意味著有些人想要得到比特幣來調停一個交易,但由于周圍沒有足夠的比特幣而無法獲得比特幣。那么,為了獲得他們的比特幣,這些人將不得不多投標,因為有限的比特幣供應將會面臨很大的競爭。這推高了價格,再次提及我們的方案,這意味著需求將下降直到平衡。在均衡中,供應必須等于需求,所以我們有
這給了我們一個價格的公式:
這個方程告訴我們什么?我們可以稍微簡化一下:我們可以假設D,你需要持有比特幣來調停交易的時間長短不會改變。總供應量S也沒有變化,或者至少隨著時間的推移而變化緩慢。這意味著價格與以美元計的調解需求成正比。所以如果美元的調解需求加倍,那么比特幣的價格應該翻倍。事實上,我們可以根據對交易調解需求的一些估計來繪制價格,并看看它們是否匹配。 當經濟學家這樣做時,兩者往往會很好地相配。
請注意,總供應量S僅包括不作為投資持有的比特幣。 所以如果更多的人購買比特幣作為投資,S會下降,我們的公式告訴我們,P會上漲。這是有意義的——如果對投資方面有更多的需求,那么您需要支付調解交易的價格就會上漲。
現在這還不是一個完整的市場模式。要有一個完整的模式,我們需要考慮到投資者的活動。也就是說,投資者在相信未來價格會更高的時候會對比特幣有更多的需求,所以我們需要考慮投資者的期望。這些期望當然與未來的預期需求有關。我們可以建立一個更為復雜的模型,并將這一點納入其中,但是我們不會這樣做。
這里的底線是,比特幣和美元之間以及比特幣和其他法定貨幣之間存在市場。這個市場有足夠的流動性,您可以以可靠的方式以適量的數量購買或出售,雖然價格上漲和下跌。最后,有可能進行經濟建模,了解供應和需求在這個市場上的相互作用,并預測市場可能會做什么,只要你有一種方法來估計不可知的東西,比如說將來有多少人想使用比特幣來調解交易。這種經濟建模非常值得去做,而且包含了非常大的信息,當然有些人今天做的很詳細,但這個市場的詳細經濟模式超出了本文的范圍。