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

以太坊現在各種學習資料數不勝數,但由於以太坊正處於飛速發展階段,有些學習資料很快就過時了。所以想找到有價值的資料無異於大海撈針。我費了很大功夫,才建立起對以太坊的整體認識,搞清楚它的工作機制。我相信很多躍躍欲試的開發人員正面臨着跟我一樣的問題,所以我把自己的認識整理出來,希望能對大家有所幫助。

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

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

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

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

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

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

image

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

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

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

  • 數據庫:以太坊網絡中每出現幾筆交易,就會打包成一個區塊,並且每個新的區塊都會連到區塊鏈的最後一個區塊上。所有的交易數據都放在這些連在一起的區塊裏,這就是區塊鏈。如果eBay用區塊鏈做數據庫,那麼買賣雙方之間發生的所有交易,不管是銷售、退款,還是糾紛,都被記錄在區塊鏈上,並且所有人都能看到。爲了確保網絡中所有節點都有相同的數據副本,同時也爲了確保寫到這個數據庫中的數據都是有效的,以太坊用了一種被稱爲工作證明的算法。

  • 代碼:剛纔只是介紹了區塊鏈作爲數據庫存儲數據的一面。但購買、銷售、取消訂單、退款等諸如此類的業務邏輯要放在哪裏呢?在以太坊上,我們用一種被稱爲Solidity的語言編寫程序代碼(被稱爲合約)。然後再用Solidity編譯器將這些合約編譯成以太坊字節碼,部署到區塊鏈上。雖然目前能夠編寫合約的不止Solidity一種語言,但其他語言相對來說要小衆得多。
    所以我們基本上可以說,區塊鏈存儲你的數據,存儲你的代碼,還在EVM(以太坊虛擬機)上運行這些代碼。

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

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

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

原文鏈接:https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章