比特幣也需要帳戶!這個開發者花了一年的時間來設計新系統
Wendy/張詠晴編譯
2019-12-04 14:49

 

比特幣沒有傳統意義上的「帳戶」。相反,每次支付時,資金都被發送到一個唯一的「交易輸出」。在這樣的輸出中,比特幣地址可能會被重複使用,在這種情況下,地址的作用有點像比特幣帳戶。

 

然而,以這種方式重複使用地址,會導致不同的幣和交易對應到同一個用戶變得很簡單,這對隱私來說是很糟糕的。因此,在每次支付後,比特幣用戶都會被建議生成一個新地址。

 

雖然這是為了保護隱私,但西班牙開發者José Femenías Cañuelo認為,這對用戶來說並不友好。

 

Cañuelo說:「在某種程度上,我們已經習慣了比特幣支付的方式,但確實是太粗暴了,就像使用沒有域名的互聯網,只依賴於IP地址——而且更糟,因為密碼地址更長,更難辨認,而且不斷變化。」

 

為了解決這個問題,在過去的一年裡,這位開發者想出了如何在比特幣上安裝一個帳戶系統。Cañuelo在白皮書中詳細闡述了這個想法,並且提出了他的layer 2協議:Easypaysy。

 

雖然保留了比特幣最有價值的屬性——如隱私和自主(不需要依賴託管)——但Cañuelo相信,他的提議將顯著改善比特幣的用戶體驗:它將讓支付變得不可否認,且頻率更高。

 

Easypaysy比特幣帳戶

 

Easypaysy作為這個方案的主要特性,不需要依賴任何外部資源。無論是建立帳戶還是使用帳戶,都是在比特幣區塊鏈上進行的。

 

該提案描述的比特幣帳戶,是透過特定交易創建的。這類交易有一個輸入(交易的「發送」部分),其中包括兩個多簽(multisig)地址。這意味著將顯示兩個公鑰,並對交易進行簽名。交易還有一個輸出(「接收」部分),即OP_RETURN輸出。在這種情況下,輸出實際上沒有收到任何資金;只包含了一點點數據。

 

輸入中使用的兩個公鑰,屬於創建交易的帳戶所有者,這兩個密鑰都有各自的功能。第一個公鑰稱為「身份密鑰」,它本質上是帳戶所有者的數位身份。任何想要私下與他通訊的人,都必須使用這個公鑰加密消息。第二個公鑰稱為「價值密鑰」,用於接收支付。

 

採用兩個不同的公鑰,是因為價值密鑰比身份密鑰更有價值:後者用於消息,前者用於資金。

 

Cañuelo解釋說:「身份密鑰必須是在線上的,這就容易出現漏洞,就像線上錢包比線下錢包更容易暴露一樣。將價值密鑰保存在冷儲存中可能是明智的,而身份密鑰可以更活躍,用於通信。」

 

輸出中的OP_RETURN文本也有它的作用。它是一個小的JSON文件(一種機器可讀的數據格式),名為「Rendezvous descriptor」。這份文件包含了帳戶訊息。具體來說,它詳細說明了帳戶所有者願意接受的支付類型和方式。(事實上,Cañuelo的提案支持各種支付方式;下文會詳細介紹。)

 

這兩個公鑰和Rendezvous descriptor是帳戶需要包含的所有訊息。在設計這個特殊的用來創建帳戶的交易時,需要添加一筆費用(因此,多簽地址必須已經被最低限度地提供了資金),然後將其廣播到比特幣網路中,並將其包含在一個區塊中。

 

Easypaysy比特幣帳戶ID

 

到了這一步,人們需要查找帳戶。

 

這就是Cañuelo的提案巧妙的地方。一旦交易包含在一個區塊中,該帳戶將根據其在區塊鏈中的位置自動分配一個帳戶ID。具體來說,帳戶ID包含交易所在的確切區塊,以及交易在該區塊中的位置——即一個區塊鏈標識符和一個校驗和的結合。

 

讓我們用一個隨機的例子,一步一步地研究這個問題。假設我們在使用比特幣。那麼,區塊鏈標識符就是「btc」。假設這個交易包含在第543847區塊中。(這是一個真正的比特幣區塊,產出時間是2018年10月——但這並不重要;我們現在只是在舉例子。)

 

假設這個交易是該區塊中的第636筆交易。最後,校驗和是一種用於額外安全的加密技巧。

 

Cañuelo說:「它包含了三個哈希:帳戶區塊的哈希、該區塊的Merkle根和帳戶交易本身的哈希。因此,如果有人試圖向你發送錯誤的帳戶數據,你可以很容易地檢測到。」

 

在這個例子中,校驗和是577。

 

因此,比特幣區塊543847中包含的第636筆交易將生成帳戶ID:btc@543847.636/577。更具體地說,這將是「規範ID」,因為區塊、交易和校驗和都以數字表示。

 

考慮到實用性,這個規範ID——btc@543847.636/577也可以表示為一個「助記符ID」。利用BIP39的比特幣錢包種子格式,這個帳戶ID的數字可以被轉換成幾個詞(或者單詞的組合)。這應該更容易記。

 

這個示例中的帳戶ID中的數字可以分成三個數據塊。

543847 = cancel-mind

636 = exhibit

577 = motion

因此,這個案例中的助記符ID為:btc@cancel-mind.exhibit/motion。

 

最後,Easypaysy白皮書還提出了「域名ID」,這將取決於域名系統(DNS)。簡而言之,這樣的ID將包括一個實際的域名、一個區塊鏈標識符和一個校驗和,並透過DNS系統將其連接到一個帳戶ID。這裡給出一個域名ID的例子:btc@bitcoinmagazine.com/561。

 

這類ID將依賴於外部資源(即DNS),並且需要花費金錢和一些維護工作。Cañuelo預計可能只會有一些商業團體對它們感興趣。

 

本文為巴比特資訊授權刊登,原文標題為「比特幣需要帳戶嗎?這個開發者認為需要,還花了1年的時間來設計系統