給Web開發人員的以太坊入坑指南
以太坊現在確實太火了,各種學習資料數不勝數,但由於以太坊正處於飛速發展階段,有些學習資料很快就過時了。
所以想找到有價值的資料無異於大海撈針。我費了很大功夫,才建立起對以太坊的整體認識,搞清楚它的工作機制。我相信很多躍躍欲試的開發人員正面臨著跟我一樣的問題,所以我把自己的認識整理出來,希望能對大家有所幫助。
對於 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 有什麼不同。希望你現在對以太坊是什麼,以及怎麼用它搭建去中心化應用程式有了一個清晰的總體認識。
相關文章
- 給 Web 開發人員的以太坊入坑指南Web
- 開發者的以太坊入門指南 | Jeth 以太坊系列線下活動
- 以太坊DApp開發指南APP
- Go Web開發入坑指南GoWeb
- [譯] 以太坊入門指南
- 開發者的以太坊入門指南 | Jeth 以太坊系列線下活動第三期
- 給初學者的以太坊路線圖指南
- 開發者的以太坊入門指南 | Jeth 以太坊系列線下活動第二期-杭州場
- 寫給前端的區塊鏈開發入門指南:零基礎開發基於以太坊智慧合約的 ICO DApp前端區塊鏈APP
- 面向Web開發人員的Linux實用入門WebLinux
- 以太坊開發計劃
- 以太坊Solidity程式語言開發框架————16、Truffle命令指南Solid框架
- EthBox以太坊開發套件,一鍵安裝部署以太坊開發環境套件開發環境
- 開發者的以太坊進階指南 | Jeth 以太坊系列線下活動第四期北京場
- 以太坊開發實戰學習-Web3.js(九)WebJS
- 以太坊開發實戰學習-Web3.js(十)WebJS
- 全棧開發以太坊應用的完整教程指南與原始碼 - Dabit全棧原始碼
- 以太坊和Metamask開發web應用時不再需要密碼Web密碼
- 3.5 以太坊開發環境搭建開發環境
- 如何使用Meteor開發以太坊DappAPP
- 理解以太坊DApp及開發工具APP
- 基於以太坊的Token開發步驟
- 開發以太坊遇到的幾個問題
- Web 開發人員備忘單Web
- python利用web3.py開發以太坊應用dapp的實戰教程PythonWebAPP
- 以太坊智慧合約開發第二篇:理解以太坊相關概念
- CTF萌新入坑指南(web篇)Web
- 以太坊DApp開發入門教程——區塊鏈投票系統APP區塊鏈
- Flutter入坑指南:開發環境搭建Flutter開發環境
- php工程師進行以太坊開發的教程PHP工程師
- 第五課 以太坊開發框架Truffle從入門到實戰框架
- 以太坊入門-Truffle框架搭建框架
- java使用spring boot和web3j開發以太坊區塊鏈dappJavaSpring BootWeb區塊鏈APP
- windows 以太坊開發框架Truffle環境搭建Windows框架
- 寫給開發者——從比特幣指令碼引擎到以太坊虛擬機器比特幣指令碼虛擬機
- 以太坊學習筆記————4、以太坊發展歷史回顧筆記
- 第一課 以太坊開發從入門到精通學習導航
- Java以太坊開發官網推薦類庫web3j的全站中文翻譯JavaWeb