乾貨 | 幾行程式碼就能擼一個文件註冊Dapp,一文學會以太坊Dapp開發

買賣虛擬貨幣

偉大的事情都很簡單,而且大多數都可以被凝結成幾個詞:自由,正義,榮譽,責任,仁慈,希望。——溫斯頓·丘吉爾

在本文中,我將用程式碼示例來描述我所知道的最簡單的區塊鏈應用程式。這對於那些以區塊鏈為起點的人來說是十分有用的,也可以為經驗更為豐富的架構師們提供一個設計模型。

讓我們想象一下下面這個用例:你收到了一份經了好幾手的文件,而且想要確保它的真實性。這份檔案可能是你要購買的汽車的服務手冊,也可能是證明要購買的房屋的房產證明,它可能是任何東西。

對文件進行數字簽名以確保其不被篡改並不是什麼新鮮事了,可以獲取文件內容並生成一個加密簽名,該簽名會與文件本身一起被髮送出去。

文件接受者可以再次生成簽名,並驗證其與提供的簽名是否匹配。若匹配一致,則證明文件沒有被更改過。這就是MD5 checksums(MD5 校驗:https://en.wikipedia.org/wiki/MD5)可以提供的功能,使用起來非常方便。但它的缺點是需要透過接收簽名來驗證文件的真實性。如果有人在中間同時修改了檔案和簽名,那便無從查證了。

由於從個人那裡獲取資料並不十分可信,因此有時會有第三方介入,提供有償的記錄儲存服務。這種獲利動機是促使記錄保管者保持誠實的根本原因。

第三方的介入確實是一個可行的方案,但遠不是最完美的方案。記錄保管者會將自己放在權力頂端的位置,並且在沒有競爭壓力的情況下榨取高額酬金。更糟糕的是,如果經濟激勵機制發生變化,那麼記錄保管者可能會變腐敗。又由誰來看守這些守門人呢?

區塊鏈能為你做什麼?

區塊鏈資料儲存是去中心化的、穩定的、不可變的。

“去中心化的”意味著資料儲存在不同人員的硬體上共同執行。“穩定的”意味著即使一些參與者離開或者終止合作,資料儲存也仍將繼續執行。“不可變的”意味著一旦資料被儲存在區塊鏈中,它將無法被更改。

區塊鏈以一種優雅的方式解決了文件登錄檔問題。一旦我們在區塊鏈登錄檔中籤了名,我們就不必擔心文件和簽名會被篡改。要想做到這一點,大多數參與者必須就這一變化達成一致意見,那這就不能算是什麼秘密了。

與此同時,沒有任何人有權以提供此服務的方式收取酬金,參與者們可以自己提供這項服務。

在這種情況下,文件可以是任何資料集。同樣的模型也適用於驗證任何商業交易、IoT(物聯網)資料集或使用者身份等資料的真實性。

還是那句話:區塊鏈以一種優雅的方式解決了文件登錄檔問題。一旦我們記錄了簽名,它就無法被篡改了。

如果我是在2016年寫這篇文章的話,我可以執行大約一百行程式碼,然後給出一份二十多頁的白皮書,併為一個專案籌集數百萬美元(https://vinchain.io/)。這一模型的應用是無窮無盡的,也的確有很多人抓住了這個機會。

如今,瞭解如何構建區塊來設計更為複雜的解決方案是十分有用的。所有的區塊鏈解決方案都依賴於儲存使用者生成的資料,並且要保證這些資料在不依賴於任何人的情況下仍是可信的。

執行

這次我沒有從頭開始編寫合約程式碼。因為我一般不會做重複的工作,而區塊鏈登錄檔已經被建立過十幾次了。谷歌一鍵搜尋就能找到 GitHub repo(https://github.com/nakov/Ethereum-Web3-Document-Registry-Demo),我將用它來展示該模型是如何運作的。即使它使用的是老版的solidity,它仍然可以很好的工作,而且你可以自己測試一下(感謝Svetlin!)。

這個合約非常簡單,只有一個相關的合約變數和兩個函式。

文件對映表把為文件計算的hash雜湊與新增它的區塊連結起來。一個新增方法(add method)需要一個hash雜湊,並且將其儲存在對映表中。一個驗證方法(verifiy method)返還一個hash雜湊的時間戳。

前端允許上傳帶有合約的文件,新增簽名並利用sha256演算法計算文件內容的雜湊值。

前端依然讓上傳帶有合約的文件,此時需要驗證一下之前是否上傳過該文件,如果之前上傳過,則會返回上傳的大概時間。

這就是實現去中心化文件登錄檔的全部內容,該登錄檔做了兩件事情:

  • 簽署文件;

  • 驗證文件自上次記錄簽名後是否發生過改變;

這種方法之所以有效,是因為兩個不同的文件具有相同簽名的概率幾乎為零。如果能得到時間戳,那麼就可以確定提供的文件是在哪個時間被匯入到登錄檔中的。

當然,合約程式碼是可以被更新和改進的,但這17行核心程式碼仍然是正確的。

總結

文件登錄檔是具有商業價值的區塊鏈應用程式中最容易實現的一個應用程式。在2016年,本文中的幾行程式碼就足以助力一個百萬美元的專案。如今,它們仍然能在更復雜的解決方案中反覆使用。

文件登錄檔有效地利用了區塊鏈的去中心化性和不變性這兩個屬性,從而不需要依賴其他人來證明資料的真實性。這個想法非常簡單,但卻是具有革命意義的。

你是否想嘗試一下?或有什麼想法,可以在留言區告訴我們哦~

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;