NO IMAGE

                                     以太坊開發入門,完整入門

翻譯自:https://medium.com/@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe


從入門到精通,乾貨篇。


必讀,如果你:


  • 是一個專業的程式設計師

  • 如果你想了解以太坊當前可以做到什麼程度,通過什麼,如何做到。


預備知識:


    1. 你需要知道區塊鏈的概念及實現一個無需信任的電子貨幣的運作原理。可以先看看長版(https://www.youtube.com/watch?v=bBC-nXj3Ng4),如果你覺得太長,可以看看短版(https://www.youtube.com/watch?v=l9jOJk30eQs)。但我還是建議,看那個長的視訊。

    2. 如果你是一名軟體工程師,擁有軟體開發的經驗。能知道從系統、架構角度學一個東西,其實能倍增學習效果。

    3. 如果有一週的空閒時間。好了,下面開始就不再是廢話了。

    4. 你需要了解merkle tree(https://en.wikipedia.org/wiki/Merkle_tree)的基本概念,看他是如何做到防止資訊篡改,以及資訊自校驗的(譯者注:可以看我曾經翻譯的以太坊官方的關於merkle
tree的文章,http://me.tryblockchain.org/Ethereum-MerklePatriciaTree.html )。


不用必須讀白皮書,只需要瞭解一些基本概念。但說實話,如果不讀,不會相信這些概念,從而不能真正明白這些概念,所以讀白皮書也許仍然是最快的方式。


我建議你完整的讀一下本文,從一個較高的層面瞭解一下,然後再挑感興趣的,一一鑽研,也許要花幾天時間哦。


你最後會發現,區塊鏈就是建立在樸實無華的基本技術之上,一點也不神奇。雖然最近各種ICO把它炒得非常熱。每個人都是站在巨人的肩膀上,如果你是程式設計師,你能對這些專案和技術,理解得更深。所以不要因為其它一些糟粕,而失去了一個提升自己的機會。



以太坊


以太坊,Ethereum(https://www.ethereum.org/)是一個分散式的計算機,有許多的節點,其中的每一個節點,都會執行位元組碼(其實就是智慧合約),然後把結果存在區塊鏈上。由於整個網路是分散式的,且應用就是一個個的狀態組成,儲存了狀態就有了服務;所以它就能永不停機,沒有一箇中心化的結點(沒有任何一個節點說了算,去中心化的),任何第三方不能干預。


顯然上面這一段話,直接解釋了以太坊是什麼。但你可能有非常多的問題。可以先讀一下以太坊的白皮書(https://github.com/ethereum/wiki/wiki/White-Paper)。或者看下這個視訊,25分鐘理解以太坊(https://www.youtube.com/watch?v=66SaEDzlmP4)。(譯者注:以太坊入門,確實沒有什麼好的辦法,就是看白皮書最好,最快)



智慧合約


智慧合約與平時的程式碼其實沒有什麼區別,只是執行於一個以太坊這樣的分散式平臺上而已。這個執行的平臺,賦予了這些程式碼不可變,確定性,分散式和可自校驗狀態等特點。程式碼執行過程中狀態的儲存,是不可變的。每一個人,都可以開一個自己的節點,重放整個區塊鏈,將會獲得同樣的結果(譯者注:能控制所有節點都達到一致狀態,就是所謂的共識)。


在以太坊中,每個合約都有一個唯一的地址來標識它自己(由建立者的雜湊地址和曾經傳送過的交易的數量推算出來)。客戶端可以與這個地址進行互動,可以傳送ether,呼叫函式,查詢當前的狀態等。


智慧合約,本質上來說就是程式碼,以及程式碼執行後儲存到區塊鏈上的狀態兩個元素組成。比如,你用來收發ETH的錢包,本質上就是一個智慧合約,只是外面套了一個介面。


概念非常強大,而我相信你已經看完了。而你在看相關的新聞,經常聽到這個非常有潛力,經常聽到資產/權利管理,分權自治組織(DAO),身份,社交網路等炫酷。但他本質就是這些。



Gas


智慧合約,就是一些程式碼,執行整個分散式網路中。由於網路中的每一個節點都是一個全節點。這樣的好處是容錯性強,壞處是效率低,消耗資源與時間(譯者注:原來只在一個節點執行一次就行,現在所有節點中每一個,都要執行一模一樣的運算)。因為執行計算要花錢,而要執行的運算量與程式碼直接相關。所以,每個在網路執行的底層操作都需要一定量的gas。gas只是一個名字,它代表的是執行所需要花費的成本(譯者注:由於以太坊是圖靈完備的,隨便一個死迴圈就將導致網路不可用,所以引入了gas的概念)。整個分散式網路引入了強制限制,來避免停機問題(https://en.wikipedia.org/wiki/Halting_problem)。因此如果你寫一個死迴圈,當gas耗盡後,網路就會拒絕執行接下來的操作,並且回滾你之前的所有操作。


gas的價格由市場決定,類似於比特幣的交易費機制。如果你的gas價格高,節點則將優先因為利益問題打包你的交易。


一般來說,在Ethereum中計算和儲存東西比在傳統環境中做的更為昂貴,但是,Ethereum為您的程式碼提供了上述我們討論過的那些好的屬性,這可能是一樣有價值的。


一般來說,在以太坊網上讀取狀態是免費的,只有寫入狀態是收費的。下面這個文章是gas概念的一些深度解析(https://hackernoon.com/ether-purchase-power-df40a38c5a2f)。



分散式APP(ĐApp
/ Dapp / dapp/ dApp)


一個分散式App是指,服務端執行於以太坊網路上一個或多個智慧合約。


一個分散式的App不用將所有狀態都儲存在區塊鏈上,或者在鏈上進行所有計算(譯者注:比如圖形渲染),這樣就太花gas了。所以一個分散式App把需要大家共同信任的狀態存在區塊鏈上就好了。許多的分散式應用使用後面提到的技術,如IPFS和Gelem,在鏈下進行分散式儲存和計算。雖然沒在以太坊上,但仍使用的是區塊鏈技術。


我不知道誰開始在D上使用這個小小的缺點,是看起來酷,但會影響搜尋。 你可以自由使用,但儘量方便別人的搜尋。


以太坊的github上,有一個dapp-bin的目錄(https://github.com/ethereum/dapp-bin),有一些文件和示例。使用前,你需要看看檔案最近的狀態,因為他們將很可能已經被淘汰。



DApp客戶端


大多數的分散式應用都通過一些使用者友好的前端提供服務,因為不是所有人都願意通過命令列,通過自己手動組裝雜湊串和操作指令碼進行交易。


一個DApp與傳統的開發中的,客戶端或前端是類似,區別僅在於它們與以太坊的區塊鏈進行互動(也可以同時與其它服務互動)。這些客戶端往往用JS編寫,因為當前還暫時沒有完成全部的向NodeJS的轉換。


另外,大多數的Dapp客戶端使用JS的原因,是因為它可以在瀏覽器中執行,因為大家都有瀏覽器,這樣每個人都可以執行了。由於有更多的go語言的開發工具,使用go語言來寫客戶端的也不少。在現在這個激烈的發展期,這意味著,除非你有自己的偏好,否則可能要從go和JS(也許還有,Rust)來選擇一種語言,來與以太坊區塊鏈,以及基於以太坊開發的協議進行互動了。


以太坊的一個核心開發者,寫了一篇關於使用Meteor工具來建立Dapp的文章(https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor),這意味著Meteor已經成為Dapp客戶端開發的新標準。這絕對是基於JS建立全棧應用時的一個首選方法。但需要注意的是Meteor只是提供了一個開發工具,與DApp客戶端並不等同,DApp客戶端也完全可以由其它方式開發。(譯者注:還有一些其它的開發工具,如Truffle,也是非常不錯的哦)。


因為圍繞Meteor和DApp開發的活躍,有非常多的包在Atmophere(Meteor的包管理工具),它提供了許多常見的操作,如帳戶管理,從區塊鏈中獲得最新的50個區塊等等。



DApp瀏覽器


一個DApp瀏覽器,正如它字面所表達的,用來讓DApp客戶端(常常使用JS與以太坊的智慧合約進行互動)的使用更加容易。


DApp瀏覽器的主要目的是:


    1. 提供到一個以太坊節點的連線(或者連線到一個本地節點或者遠端節點),和一個方便的切換不同節點(甚至是不同的網路)。

    2. 提供一個帳戶(或者一個錢包)來方便使用者與DApp互動。


Mist(https://github.com/ethereum/mist)是以太坊官方的DApp瀏覽器。一個漂亮的介面來與以太坊節點互動,與智慧合約發、收交易。


Status(https://status.im/)是一個手機上可以使用的DApp瀏覽器。


MetaMask(https://metamask.io/)是一個Google瀏覽器擴充套件,把Chrome變成了一個DApp瀏覽器。它的核心特性是注入以太坊提供的js客戶端庫web3,到每一個介面,來讓DApp連線到MetaMask提供的以太坊節點服務。不過這個Chrome擴充套件,可以允許你管理你的錢包,以及連線到不同的以太坊網路(譯者注:包括本地的開發網路)。


Parity(https://parity.io/parity.html)是一個以太坊客戶端(也是一個全節點的實現),整合到了Web瀏覽器,並使之成為一個DApp瀏覽器。



以太坊節點


與比特幣的節點類似。每個節點都儲存了整個區塊鏈的資料,並重放所有的交易以驗證結果的狀態。你可以通過geth(https://github.com/ethereum/go-ethereum/wiki/geth)來執行一個全節點(官方的節點,go語言),或者parity來執行一個輕節點,它是第三方的,Rust語言寫的。


你的節點需要知道從哪個區塊鏈下載資料,以及與哪些節點互動,後面會說明一些常見的網路。


你也許可以執行下所有這些節點客戶端。如果你不想自己執行一個這樣的節點,有第三方的閘道器服務,比如Infura(https://infura.io/)可以選擇。另外還有專門用於測試和開發的,本地版本的節點,後面會提到。


如果你正在開發一個DApp的客戶端,你並不總是需要主動提供連線到以太坊的節點。因為DApp的瀏覽器一般會提供對應的連線(譯者注:話說這樣,那使用這個,還得額外安裝一個DApp瀏覽器呀)。



以太坊代幣


現在你應該知道我們可以通過寫智慧合約,並將狀態存到區塊鏈上了?那如果,在狀態這塊,我們存的是一個Map型別,鍵是地址,值是整數。然後我們將這些整數值叫做餘額,誰的餘額呢?它就是我們要說的代幣(譯者注:代幣的資料結構就是這樣簡單,存的就是某個使用者,它當前的餘額)。


是的,所有你剛才聽到的代幣,只是一些資料,儲存在一個雜湊表裡,通過api或者所謂的協議,來進行增刪改查。這是一個簡單的基本合約(https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/BasicToken.sol)。


你可以看看ethereum的建立一個眾籌合約的官方教程(https://www.ethereum.org/crowdsale)。你將會發現它僅僅是一個合約(Crowdsale)與另一個合約(MyToken)互動,和前面的基本合約類似。並沒有什麼神奇的地方。


人們使用代幣來做各種各樣的事情,阻攔大家如何使用的只有想像力。代幣常常用來激勵使用者與某個協議進行互動,或者證明對某個資產的所有權,投票權等等。Coinbase的Fred有一個很好的關於代幣,為什麼存在,如何使用的文章(https://www.youtube.com/watch?v=rktHO5R8Y9c)。


Ethereum的創始人Vitalik最近有一個關於代幣發售模型,也是一篇不錯的文章(http://vitalik.ca/general/2017/06/09/sales.html)。



ERC20代幣與ERC23代幣


每個人都開始定義自己與代幣的互動協議,但這些很快顯得陳舊,所以一些人開始集結起來,建立了ERC20代幣介面標準(https://github.com/ethereum/eips/issues/20)。大概意思是說,我們定義這些介面,這樣大家可以相互統一呼叫,比如轉帳定義為transfer,第一個引數為要轉去的帳戶地址address
_to,第二個引數為要傳送的ether的uint _value數量。


有些人覺得ERC20協議過於複雜了,所以他們提議了ERC197(https://github.com/ethereum/EIPs/issues/179),稍微簡單一點。


由於在ERC20中存在的一個小問題,有人提議了一個新的ERC23(https://github.com/ethereum/EIPs/issues/223)。ERC23是向後相容ERC20的。如果你已經建立了一個代幣合約,可以嘗試來支援ERC23。


看起來ERC223和ERC23是相同的概念;ERC的值是223,但是當引用時,作者和所有的其它人誤寫成了ERC23非常多次,它現在也還是這樣引用的。如果一句話說清楚的話,ERC223是規範號,代幣說明時稱為ERC23代幣就好了。



協議代幣與App幣


協議代幣為用來激勵對某個協議的使用。比如,REP,Augur的聲譽代幣,用來鼓勵對Augur去中心化預測協議的使用。大多數的以太坊的ERC20/ERC23代幣都是協議代幣,比如Golem的GNT,ICONOMI,BAT等等。


App幣則是用來激勵對某個特定DApp或客戶端的使用,而不是因為其使用的協議提供的價值。其中一個例子是Status的SNT代幣,可以用來在應用內獲得價值(比如,進行訊息推送,投票權,獲得使用者名稱等等)。


這種正規化的轉變是,我們可以開始投資協議代幣而不是應用程式代幣,因為我們可以建立在它們之上(任何人都可以在協議之上構建一個dapp,或為實現該協議的Dapp構建一個Dapp客戶端)。


之前,這並不可能,因為加密代幣,以及接下來的協議創新的時代(http://continuations.com/post/148098927445/crypto-tokens-and-the-coming-age-of-protocol),為了實現貨幣化,你自己可以在協議之上建立一個應用,並實現贏利。因為你自己可以實現協議的貨幣化,大家可以在未來更好的協作。


你也許可以閱讀一下,關於0xProject的下面這篇文章,關於這兩者區別的詳細說明(https://blog.0xproject.com/the-difference-between-app-coins-and-protocol-tokens-7281a428348c)。



與智慧合約互動


你與智慧合約的互動(也稱做呼叫函式和讀取狀態)通過連線到某個以太坊節點,並執行操作碼。當前有各種各樣的以太坊客戶端,可以方便進行開發。Geth和parity都提供了控制檯或瀏覽器的方式來更好的與智慧合約互動。


如果你想要一個程式的庫用來與智慧合約互動的介面,也有這樣的客戶端實現。對於JS語言,可以使用web3.js。以於go語言,可以使用在go-ethereum(https://github.com/ethereum/go-ethereum)中的abigen的程式,提供了go包,用來與智慧合約互動。


如果只是用來測試和開發,可以使用ethereumjs-testrpc(https://github.com/ethereumjs/testrpc)來執行一個本地節點(譯者注:這個節點壓短區塊時間等,可以方便打整的開發與測試)。


當你部署了一個智慧合約,你實際進行的操作是向地址0x0傳送了一個交易,使用當前合約內容作為引數,一個以太坊交易詳解(https://medium.com/@codetractio/inside-an-ethereum-transaction-fa94ffca912f)。



Truffle和Embark


一旦你開始寫智慧合約,你會重複做大量的操作,比如編譯原始碼為位元組碼和abi,部署到網路,測試然後部署合約等等。你也許希望更關注於你想要實現的東西。


Truffle和Embark框架,標準化和自動化了這些瑣碎的工作。它們提供了一個好的開發,部署,以及更為重要的,測試智慧合約的體驗。


你可以檢視這個文章(http://truffleframework.com/docs/getting_started)來開啟使用Truffle的旅程。


這篇文章,提供了使用Truffle來部署以及與智慧合約互動的文章(https://blog.zeppelin.solutions/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05)。


Embark(https://github.com/iurimatias/embark-framework)提供了類似的,幫助開發者組織工程的稍有些不同的工具。


當你一開始接觸智慧合約這塊時,應該儘量不要使用框架。直到你明白了使用框架能帶來的價值時,才應該開始使用,正如你不應該通過rails new來學習HTML語言一樣。



ETHPM


分享是關心,所以ETHPM是一個去中心化的智慧合約包管理資源庫(https://www.ethpm.com/registry)。使用ETHPM,你可以關聯或連線到某個著名的合約或庫,減少程式碼重複,儘可能理想的為未來的開發提供好的基礎。


這裡的這個規範(https://github.com/ethereum/EIPs/issues/190),詳細的說明了相關的資訊以及背景。Truffle和Embark均可與之整合,並創造一個愉快的開發體驗。



網路


Mainnet-以太坊主網,通常是所有客戶端的預設網路。


Ropsten – 以太坊使用工作量證明的主測試網路。這個網路,因為低的計算量,容易遭到DDOS攻擊,分片,或者其它問題。垃圾郵件攻擊後被暫時放棄,最近才恢復使用。(https://github.com/ethereum/ropsten)


Kovan-parity客戶端組成的測試網路,使用授權證明來提升對垃圾郵件攻擊的抗擾度,並且持續4秒的阻塞時間。(https://github.com/kovan-testnet/proposal)


Rinkeby-geth客戶端組成的測試網路,使用集團共識,儘管計算量低,但是對惡意行為者更有彈性。(https://www.rinkeby.io/)


你可以自己搭建你自己的測試網路,也許使用kubernetes(https://github.com/MaximilianMeister/kuberneteth)或者docker-compose(https://capgemini.github.io/blockchain/ethereum-docker-compose/),但也許你將很快就可以不需要花什麼時間。



帳戶與錢包


一個以太坊帳戶就是一個私鑰和公鑰地址對。它們可以用來儲存ether,建立時不需要花費gas。


錢包則是用來管理ether的智慧合約(一些程式碼)。這裡是使用solidity寫的一個錢包,執行於Mist瀏覽器(https://github.com/ethereum/meteor-dapp-wallet/blob/develop/Wallet.sol)。他們可以有許多的特性,比如多使用者簽名,紙?等等。


這樣,我們就正確的定義了兩個名詞,前面看到其它人對這兩個術語的困惑,並把所有能存ether的都叫作Wallet。



EVM以及智慧合約建立的狀態


在每個全節點網路上執行的智慧合約程式碼在EVM內執行。這是您的標準虛擬機器,執行一些位元組碼,除了這個vm與網路,檔案系統,程序等隔離。沒有人想要編寫位元組碼,所以我們有一些更高階別的語言編譯為EVM位元組碼。


Solidity


Solidity(https://solidity.readthedocs.io/en/latest/)是第一批的描述智慧合約的語言。當前是最流行的語言,因此也有最多的例子,文件,和教程。你應該學習這個,除非你有要學習其它的理由。


你可以使用基於瀏覽器的Remix IDE(https://ethereum.github.io/browser-solidity/)來進行快速驗證。


下面是一個Solidity的合約:


pragma solidity ^0.4.11;

contract BasicToken {

mapping(address => uint256) balances;

function transfer(address _to, uint256 _value) returns () {

    balances[msg.sender] = balances[msg.sender] – _value;

    balances[_to] = balances[_to] + _value;

  }

function balanceOf(address _owner) constant returns (uint256 balance) {

    return balances[_owner];

  }

}


LLL


LLL,是一門Lisp風格的底層程式語言,就像語言名稱看到的這樣。雖然以太坊官方並沒有將它作為主要需要支援的語言,但它仍舊持續進行著更新,且與solidity在同一個資源庫(https://github.com/ethereum/solidity)。


這是一個使用LLL語言寫的一個ERC20代幣的合約(https://github.com/benjaminion/LLL_erc20/blob/1c659e890e2b30408555b9467a8dfd8988211b3b/erc20.lll)


LLL示例如下:


(seq

  (def ‘node-bytes  0x00)

  (def ‘owner    0x20) ; address

  (def ‘set-node-owner    0x5b0fc9c3) ; setOwner(bytes32,address)

  (def ‘get-owner (node)

      (sload (+ node owner)))



//只是用來示例,不能編譯通過


如果你正在學習,也許不是那麼的容易習慣LLL語言的寫法。



Serpent


Serpent(https://github.com/ethereum/serpent/tree/develop)是一個類Python的高階語言,最終也會被編譯為EVM位元組碼。它主要被Augur團隊使用。


但最近Zeppelin Solution團隊發現其編譯器有一個嚴重的bug(https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929),在這個問題被修復之前都不建議繼續使用。


如果你對Augur如何解決這些漏洞感興趣,你可以閱讀Zeppelin Solution的這篇文章(https://blog.zeppelin.solutions/augur-rep-token-critical-vulnerability-disclosure-3d8bdffd79d2)。


Serpent的合約看起來如下:


def register(key, value):

    # Key not yet claimed

    if not self.storage[key]:

        self.storage[key] = value

        return(1)

    else:

        return(0)  # Key already claimed



def ask(key):

    return(self.storage[key])


其它


在各種可用性和發展狀態中還有一堆其他的高階語言,而且無疑將會被開發出來。 為了廣泛採用,語言和編譯器必須經過徹底的審查和測試,這當然需要時間。



智慧合約反編譯/Disassembly


可以通過prosity(https://github.com/comaeio/porosity)來反編譯以太坊智慧合約的位元組碼,可以使用evmdis(https://github.com/Arachnid/evmdis)來Disassembly。



智慧合約的安全


一旦一個智慧合約部署到了以太坊的網路上,它將是永不可變的,且將永久存在。如果你寫了一個bug,你將不能下架這個有問題的版本,你只能在後續的版本中修復。


由於許多工程師開發的Ethereum和其他智慧合同平臺來自於Web開發,所以這個概念實在是太新,而且是瘋狂的。


ConsenSys有一個非常棒的資源叫智慧合約的最佳實踐(https://github.com/ConsenSys/smart-contract-best-practices),你應該深入的理解一下。


一個Parity的錢包被黑的解釋(https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7)。


在你部署你的智慧合約的時候,由於你管理的是真正的資金,你應該先開一個賞金計劃(https://blog.zeppelin.solutions/setting-up-a-bug-bounty-smart-contract-with-openzeppelin-a0e56434ad0e),並儘量保證它完整的測試過。



Whisper


Whisper(https://github.com/ethereum/go-ethereum/wiki/Whisper-Overview)是一個整合進以太坊的訊息系統。它允許DApp釋出小量的資訊來進行非實時的訊息通訊。


它使用shh協議。


儘管它已經有段時間沒有更新了,這是一個使用Whisper協議實現一個聊天客戶端的例子(https://github.com/ethereum/meteor-dapp-whisper-chat-client)。



去中心自動化組織(DAOs)


這是一個組織(就像,一群人),其中,使用程式碼來保證最終的強制執行,而不是使用傳統的法律檔案。這群人使用智慧合約來做常見組織做的所有的事情,比如在某件事上進行投票,比如決定是否對什麼進行投資等等。


副作用是決策,管理,以及對什麼進行投資的結果將會不可改變的儲存在區塊鏈上。


之前slock.it建立了標準的DAO框架來說明這個理念。在這裡(https://github.com/slockit/DAO/)有對DAO概念的總覽,以及如何使用框架來實現一個自己的DAO(譯者注:這個專案由於bug被黑客攻擊了)。



Aragon


Aragon(https://aragon.one/)也正在應對挑戰,設計一個根據智慧合約邏輯運作的公司,重點是建立一個可以接受投資,處理會計,支付僱員,分配股權,正如我們現在知道的完成每天的公司的業務。他們也實現了漂亮的DApp客戶端來讓他們的協議使用起來更為簡單。


檢視這裡Aragon核心合約(https://github.com/aragon/aragon-core/tree/master/contracts)來更多的理解它是如何做的。



IPFS&FileCoin


IPFS(https://ipfs.io/)(星際檔案系統)是一個協議,用來分發檔案。你可以認為它是一個基於bittorrent和git這樣概念的一個檔案系統,檔案可以定位,且是不可變的。IPFS以IPLD(http://ipld.io/)資料模型儲存資訊,它非常有趣,提供了一些特別的特性,你可以通過下面的說明了解一些。


這是一個新的協議,它有一個http的閘道器和檔案系統介面卡,這讓你可以通過http,掛載整個網際網路檔案系統到你本地的盤/ipfs。IPFS還提供了一個定址服務IPNS(星際名稱空間),它允許可變的狀態(需要注意的是在IPFS裡的所有東西都是不可變的)。你甚至可以使用DNS
TXT記錄來定位到你的IPNS客戶端,允許你生成使用者友好的連結來指向到對應的資料。


FileCoin(https://filecoin.io/)是Protocol
Lab為建立一個去中心化的基於IPFS的儲存市場的努力結果,也就是向整個網路提供儲存資源的激勵層。FileCoin的共識協議沒有使用浪費資源的工作量證明,而是使用了Proff of Replication和Proof
of SpaceTime來保證每片資料被複制某個特定的拷貝數量且儲存某個特定的時間。


你應該讀一下IPFS的白皮書(https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf),FileCoin的白皮書(https://filecoin.io/filecoin.pdf),以及IPLD的規範(https://github.com/ipld/specs/tree/master/ipld)。


由於當前FileCoin還沒有上線,你可以使用當前的IPFS儲存網路來執行html/css/js,並把作為一個類似orbit-db(https://github.com/orbitdb/orbit-db)的資料庫。



Swarm


Swarm是一個去中心化的儲存網路,整合於以太坊生態系統,作為第一陣營的專案,看看這裡關於IPFS與這個專案的比較和優劣(https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM)。但本質上,基本上是一樣的,除了它們有不同的哲學,並在底層使用稍微不同的協議。



專案



Augur


Augur(https://augur.net/)是一個去中心化的預測市場,讓大家對於某個現實世界的事件進行對賭。一方面,使用者在某個具體可以發生的事件上投注,一旦結果成真,它們贏得的代幣有真正的價值。為了實現這個,你需要實現一個去中心化的先知協議,來輸入現實世界中的資訊,它使用REP協議代幣來進行經濟激勵(http://blog.augur.net/guide-to-augurs-rep/)。


你可以看看Augur專案的合約程式碼(https://github.com/AugurProject/augur-core),以及瞭解下Augur
Master Plan(https://medium.com/@AugurProject/augur-master-plan-42dda65a3e3d)。



Gnosis


Gnosis(https://gnosis.pm/)與Augur有類似的理念,也是一個去中心化的預測市場。這是專案的白皮書(https://gnosis.pm/resources/default/pdf/gnosis_whitepaper.pdf),以及與Augur專案的對比(https://medium.com/@akhounov/hopefully-impartial-comparison-of-gnosis-and-augur-f743d11d6d37)。



Golem


Golem(https://golem.network/)是一個分散式的算力市場,以與IPFS一樣的方式構建了一整套的提供算力市場。


你可以看看FAQ(https://github.com/golemfactory/golem/wiki/FAQ)來更好的理解。



0xProject


0xProject建立了一個交換代幣的協議,以及一個DApp來實現這個協議。開發者可以建立一個基於它們自己的分散式應用建立交易所(技術上叫中繼層),而使用者也不用信任這些app就可完成交易,結算在區塊鏈上完成。0x協議旨在使用離線的第三方來廣播交易和管理訂單(可以建立/更新/刪除訂單,而不用直接向Ethereum傳送緩慢/昂貴的交易),但最終會使用Ethereum進行結算。


它們實現了場外交易(https://blog.0xproject.com/announcing-0x-otc-5db58dc9ba8),一個DApp使用這個協議來在使用者之間直接交換代幣。你可以在github上檢視他們的合約(https://github.com/0xProject/contracts)。


你還可以跳過這些酷炫的概念,直接閱讀FAQ(https://0xproject.com/faq)。



Swap


ConsenSys的Swap(https://swap.tech/)協議也是非常類似的,但更專注於p2p的直接交易(而不是基於訂單表),這裡有一個白皮書,可以看看(https://swap.tech/pdfs/SwapWhitepaper.pdf),這裡有一個關於Swap協議的介紹(https://media.consensys.net/introducing-swap-a-protocol-for-decentralized-peer-to-peer-trading-on-the-ethereum-blockchain-d4058f3179cf)。



Bancor


代幣的流動性是相對來說在加密幣的生態中是一個非常大的問題。在使用者間的交易需要滿足買方和賣方兩邊的想法。


Bancor(https://www.bancor.network/)是一個協議,可以讓你的代幣1)可以根據訂單自動給予價格2)可以通過持有其它的代幣作為抵押器來即時創造流動性。


檢視這裡的白皮書(https://www.bancor.network/static/bancor_protocol_whitepaper_en.pdf)



Makerdao & Dai


以太坊區塊鏈管理的代幣價值往往會有巨大的波動。這個特性在現實生活中則非常不好,比如你的目標是用來保值。


Maker DAO(https://makerdao.com/)是一個DAO來管理Dai穩定幣(https://github.com/makerdao/docs/blob/master/Dai.md)。Dai現在還不存在,但他們已經發布了一個alpha的版本叫Sai(https://blog.makerdao.com/2017/06/05/introducing-sai/)來展示這門技術。


這裡是DAI的白皮書(https://github.com/makerdao/docs/blob/master/Dai.md)。



Oraclize


如果我們要向智慧合約中輸入一些資訊,比如紐約今天的天氣,我也許需要實現一個去中心化的先知協議詢問一批人(花費高且慢),但如果寫一個服務以中心化的方式來提供資訊,又違背了去中心化應用的理念。


Oraclize(http://docs.oraclize.it/#background)嘗試用以下方式來解決問題1)從一個外部資料來源向你的智慧合約傳送資料。2)提供一個證明,資料來自某個資料來源,且沒有被修改過。由此如果你信任random.org,你可以使用Oraclize來提供一個隨機數生成合約。


他們的整合非常強大; 您可以獲取URL,解析JSON和XPATH,查詢Wolfram Alpha等。



BTCRelay


BTCRelay(http://btcrelay.org/)作為比特幣區塊鏈交易的先知機制,這意味著你可以在以太坊上編寫智慧合約來響應比特幣區塊鏈上的某個交易,進行觸發後續的操作。比如,你可以讓人通過BTC為你的服務付費,使用BTCRelay在以太坊上校驗付款成功後,繼而在以太坊上提供對應的服務。



Open Zeppelin & zeppelinOS


Zeppelin Solutions是一個科技公司,在這個領域內正完成一些偉大,而且專業的事。它們實在做了太多事,太難一一說清了。


他們管理了Open Zeppelin(https://openzeppelin.org/),一系列經過審查的,最佳的智慧合約實踐,你可以繼承並應用於你自己的DApp中。你可以檢視他們的github資源來學習更多(https://github.com/OpenZeppelin/zeppelin-solidity)。你應該讀一下里面的每一個合約。


他們堅持程式碼複用的理念,然後進一步建立了Zeppelin OS(https://blog.zeppelin.solutions/introducing-zeppelinos-the-operating-system-for-smart-contract-applications-82b042514aa8)。你可以忽略OS,它不是傳統意義上的作業系統的概念。zeppelinOS特性,工具和服務的集合,旨在提供穩固的開發人員體驗,同時最大限度地提高智慧合同安全性。


zeppelinOS中的其中一部分是“zeppelinOS Kernel”。其實他們不是傳統意義上的核心,而且是一組庫(https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736)。它們是通過庫模型實現的可升級的智慧合約(https://blog.zeppelin.solutions/proxy-libraries-in-solidity-79fbe4b970fd),可以在出現安全問題時獨立的進行更新。因為你在合約內包含的程式碼更少,部署也將花費更少的gas,而開發者也減少了程式碼的重複。


zeppelinOS還有一些其他整齊的規劃,比如排程程式(智慧合約的非同步執行,因為預設合同一般不會主動觸發某個行為),市場級的協議和鏈下開發者體驗工具。



ENS
– 以太坊的命名服務


ENS(https://ens.domains/)是一個去中心化的名稱註冊服務。並有一個描述性的專案名稱。



BAT
基礎注意力代幣 & Brave瀏覽器


BAT(https://basicattentiontoken.org/)嘗試去中心化廣告系統,通過監控大家的注意力,並在內容提供商,廣告商和使用者之間分發收益,切掉中間人。


Brave和BAT由JS創始人Brendan Eich建立,同時他也是Mozilla的聯合創始人。



uPort


uPort(https://www.uport.me/)在解決去中心化的身份識別問題。



district0x


district0x(https://district0x.io/)是一個更高層級的去中心化的市場和社群。核心是通過一系列的智慧合約來管理使用者釋出資訊,搜尋,過濾資訊,在社群內維護信譽,管理支付等等。它可以用來建議如Ethlance(https://ethlance.com/)和NameBazaar(https://namebazaar.io/)這樣的市場。


他們有非常棒的視覺設計。



Steem


Steem(https://steemit.com/)是區塊鏈上的reddit,它使用協議代幣(STEEM)來激勵這個社交社群的參與度。


在這裡檢視白皮書(https://steem.io/SteemWhitePaper.pdf)。


有一些關於Steemit塊鏈如何啟動以及支援組織如何運作的反應(https://medium.com/m/global-identity?redirectUrl=https://decentralize.today/the-ugly-truth-behind-steemit-1a525f5e156)。



參與者與領域內的玩家



ConsenSys


ConsenSys(有點像共識Consensus,但作為一個公司名稱;它很聰明,巧妙的把u改成了s,但我一般念為“con-SEn-SIS”,避免讀錯)是一個“風險投資和產品工作室”。他們是一個(其實非常大)傘形組織,它贊助了一大堆專案(https://consensys.net/ventures/spokes/)和核心元件(https://consensys.net/ventures/core-components/)的開發。值得一提的是,它們資助了Truffle,Infura,MetaMask,Gnosis和uPort。



Zeppelin Solutions


Zeppelin Solutions(https://zeppelin.solutions/)在上面我們有提到過,他也審查智慧合約程式碼,提供諮詢服務。他們的部落格質量相當高(https://blog.zeppelin.solutions/)。



Protocol Labs


Protocol Labs(https://protocol.ai/)是一群讓人印象深刻的人,致力於IPFS,FileCoin,lip2p以及IPLD等其它專案的開發。



區塊鏈資本概況


Etienne Brunet(https://medium.com/@etiennebr)有一篇關於代幣,ICO和VC的概況文章(https://medium.com/@etiennebr/my-token-ico-blockchain-capital-markets-landscape-617e6ff1eae1)。



社群


你可以加入以太坊的社群(https://medium.com/blockchannel/where-can-i-join-the-ethereum-community-3aa5c795b1e5)。



未來


未來展望(https://media.consensys.net/interplanetary-linked-computing-separating-merkle-computing-from-blockchain-computational-courts-1ade201ecf8a)。


出處:http://me.tryblockchain.org/getting-up-to-speed-on-ethereum.html


版權申明:內容來源網路,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝。