以太坊現在各種學習資料數不勝數,但由于以太坊正處于飛速發展階段,有些學習資料很快就過時了。所以想找到有價值的資料無異于大海撈針。我費了很大功夫,才建立起對以太坊的整體認識,搞清楚它的工作機制。我相信很多躍躍欲試的開發人員正面臨著跟我一樣的問題,所以我把自己的認識整理出來,希望能對大家有所幫助。
對于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有什么不同。希望你現在對以太坊是什么,以及怎么用它搭建去中心化應用程序有了一個清晰的總體認識。
原文鏈接:https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c
活動推薦
12 月 7 日北京 ArchSummit 全球架構師峰會上,來自阿里、京東、360 的講師齊聚一堂,共同分享“分布式 BaaS”、“區塊鏈安全”和“智能合約”等區塊鏈技術相關經驗與實踐。詳情點擊 https://bj2018.archsummit.com/schedule