給Web開發人員的以太坊入坑指南

FLy_鵬程萬里發表於2018-08-22

以太坊現在確實太火了,各種學習資料數不勝數,但由於以太坊正處於飛速發展階段,有些學習資料很快就過時了。

所以想找到有價值的資料無異於大海撈針。我費了很大功夫,才建立起對以太坊的整體認識,搞清楚它的工作機制。我相信很多躍躍欲試的開發人員正面臨著跟我一樣的問題,所以我把自己的認識整理出來,希望能對大家有所幫助。
 

對於 web 開發人員來說,webapp 的客戶端伺服器架構很清晰。

 

我們一般會把 web 程式部署在 AWS、Heroku 或某個雲平臺提供的雲主機上,所有客戶端都跟這個中心程式互動。這些客戶端可能是瀏覽器,也可能是使用 API 的其它程式,不管怎樣,總是客戶端發起請求給伺服器,伺服器再跟資料庫或快取互動,讀 / 寫 / 更新資料庫中的資料,然後給客戶端傳送一個響應。

大部分情況下,這個架構很好用。但有時候,如果資料庫是公開的,所有人都可以安全地訪問,不用把資料全權交給 webapp 的控制者,對你來說真的非常重要。

比如說你是 eBay 上的明星賣家,已經賺了上千個好評了。但不知為什麼 eBay 忽然把你的賬號給封了,這可能會讓你損失慘重,甚至給你的生意帶來毀滅性的打擊。如果能把顧客對你的評論和打分都挪到另外一個平臺上,比如到 eBay 的競爭對手那裡,你是不是馬上就會有種絕處逢生的感覺?

雖然 eBay 還充當著買賣雙方的擔保人,但每一筆生意他都是要抽取佣金的。如果不需要擔保人,買賣雙方不僅能降低交易成本,並且還能訪問到自己的所有資料,你是不是會覺得特別理想?去中心化應用就是要幫你實現這個理想,而以太坊會讓 Dapp(去中心化應用)的搭建變得非常輕鬆。

以太坊 Dapp 的架構如下所示:

 

如果仔細觀察,你會發現所有客戶端(瀏覽器)都是跟自己的程式例項通訊的,不再連到一箇中心伺服器上。這就是說每個想要跟 Dapp 互動的人都要在自己的電腦 / 手機上跑一份完整的區塊鏈,也就是說想用這個程式,你必須先把整條區塊鏈全都下載到本地。乍一看你可能會覺得這很搞笑,但這樣確實能解決對中心伺服器的依賴問題。

 

 

實際上也並不需要真的把整條區塊鏈都下載下來,有幾種兩全其美的辦法,既能得到去中心化的好處,又可以快捷地完成互動。

那麼區塊鏈究竟是什麼呢?

資料庫:以太坊網路中每出現幾筆交易,就會打包成一個區塊,並且每個新的區塊都會連到區塊鏈的最後一個區塊上。所有的交易資料都放在這些連在一起的區塊裡,這就是區塊鏈。

如果 eBay 用區塊鏈做資料庫,那麼買賣雙方之間發生的所有交易,不管是銷售、退款,還是糾紛,都被記錄在區塊鏈上,並且所有人都能看到。為了確保網路中所有節點都有相同的資料副本,同時也為了確保寫到這個資料庫中的資料都是有效的,以太坊用了一種被稱為工作證明的演算法。

程式碼:剛才只是介紹了區塊鏈作為資料庫儲存資料的一面。但購買、銷售、取消訂單、退款等諸如此類的業務邏輯要放在哪裡呢?在以太坊上,我們用一種被稱為 Solidity 的語言編寫程式程式碼(被稱為合約)。然後再用 Solidity 編譯器將這些合約編譯成以太坊位元組碼,部署到區塊鏈上。雖然目前能夠編寫合約的不止 Solidity 一種語言,但其他語言相對來說要小眾得多。

所以我們基本上可以說,區塊鏈儲存你的資料,儲存你的程式碼,還在 EVM(以太坊虛擬機器)上執行這些程式碼。

為了搭建在 web 上執行的 dapp,以太坊推出了一個 Javascript 庫,web3.js,它可以連線區塊鏈節點。所以我們只要把這個庫加到自己熟悉的框架中就可以了,比如 reactjs、angularjs 或 vuejs。

這個平臺的另一個重要特性是它的金融功能。如果我告訴你,只要用上 dapp,就會給你一個銀行賬戶,你會不會覺得很吃驚?實際上不是一個銀行賬戶,而是隨便你建立多少個賬戶都行。這些賬戶被稱為錢包,用來存放你的以太幣(以太坊體系內所用的貨幣)和交易。

本文沒有介紹區塊鏈的內部工作機制,因為我想一篇文章能完成一件事情就夠了,這裡的重點是讓你瞭解基於區塊鏈的 dapp 跟中心化的 webapp 有什麼不同。希望你現在對以太坊是什麼,以及怎麼用它搭建去中心化應用程式有了一個清晰的總體認識。

 

相關文章