以太坊开发入门
目標(biāo)讀者:
- 專(zhuān)業(yè)的程序員;?
- 想深入了解以太坊/區(qū)塊鏈及其生態(tài)的讀者;
預(yù)備知識(shí):
- 了解區(qū)塊鏈的概念以及比特幣的運(yùn)行機(jī)制。
- 有基本的編程知識(shí)將是極大的加分項(xiàng),了解系統(tǒng)/架構(gòu)/數(shù)學(xué)等知識(shí)。
1 以太坊
以太坊和比特幣一樣,底層框架都是區(qū)塊鏈協(xié)議,區(qū)塊鏈本質(zhì)上是一個(gè)應(yīng)用了密碼學(xué)技術(shù)的分布式數(shù)據(jù)庫(kù)系統(tǒng)。在看了前面提及的阿里云整理的科普文章之后,為了能進(jìn)一步了解以太坊,建議看一下以太坊白皮書(shū)
2 智能合約
智能合約是一段運(yùn)行在以太坊區(qū)塊鏈系統(tǒng)之上的一段代碼,合約根據(jù)事先制訂的規(guī)則來(lái)自動(dòng)轉(zhuǎn)移數(shù)字資產(chǎn)。例如,一個(gè)人可能有一個(gè)存儲(chǔ)合約,形式為“A可以每天最多提現(xiàn)X個(gè)幣,B每天最多Y個(gè),A和B一起可以隨意提取,A可以停掉B的提現(xiàn)權(quán)?”。
3 以太坊賬戶(hù)
以太坊中有兩種賬戶(hù):外部賬戶(hù)(EOA)和合約賬戶(hù)
外部賬戶(hù)具有以下特性:
1.有一個(gè)以太幣余額;?2.可以發(fā)送交易(以太幣轉(zhuǎn)賬或者激活合約代碼);?
3.通過(guò)私鑰控制;?
4.沒(méi)有相關(guān)聯(lián)的代碼。
合約賬戶(hù)擁有以下特性:
1.有一個(gè)以太幣余額;?2.有相關(guān)聯(lián)的代碼;?
3.代碼執(zhí)行是通過(guò)交易或者其他合約發(fā)送的call來(lái)激活;
? 4.當(dāng)被執(zhí)行時(shí) -- 運(yùn)行在隨機(jī)復(fù)雜度 (圖靈完備性)-- 只能操作其擁有的特定儲(chǔ)存,例如可以擁有其永久state -- 可以call其他合約.
所有以太坊區(qū)塊鏈上的行動(dòng)都是由各賬戶(hù)發(fā)送的交易激活。每次一個(gè)合約賬戶(hù)收到一個(gè)交易,交易自帶的參數(shù)都會(huì)成為代碼的輸入值運(yùn)行。合約代碼會(huì)被以太坊虛擬機(jī)(EVM)在每一個(gè)參與網(wǎng)絡(luò)的節(jié)點(diǎn)上運(yùn)行,以作為它們新區(qū)塊的驗(yàn)證。
4 什么是Gas
以太坊智能合約由區(qū)塊鏈網(wǎng)絡(luò)中的每個(gè)完整節(jié)點(diǎn)重復(fù)執(zhí)行,使得合約執(zhí)行的消耗變得昂貴,所以這也促使大家將能在鏈下進(jìn)行的運(yùn)算都不放到區(qū)塊鏈上進(jìn)行。對(duì)于每個(gè)被執(zhí)行的命令都會(huì)有一個(gè)特定的消耗,用單位gas計(jì)數(shù)。每個(gè)合約可以利用的命令都會(huì)有一個(gè)相應(yīng)的gas值。gas值的存在避免智能合約進(jìn)入死循環(huán),你不能編寫(xiě)永不結(jié)束的程序,因?yàn)槟阌帽M了gas,計(jì)算將被節(jié)點(diǎn)拒絕。
在以太坊中,每筆交易都被要求包括一個(gè)gas limit和一個(gè)交易愿為單位gas支付的費(fèi)用。礦工可以有選擇的打包這些交易并收取這些費(fèi)用。在現(xiàn)實(shí)中,由于礦工會(huì)優(yōu)先選擇打包費(fèi)用高的交易,所以用戶(hù)所選擇支付的交易費(fèi)用多少會(huì)影響到該交易被打包所需等待的時(shí)長(zhǎng)。
如果該交易由于計(jì)算,包括原始消息和一些觸發(fā)的其他消息,需要使用的gas數(shù)量小于或等于所設(shè)置的gas limit,那么這個(gè)交易會(huì)被處理。
如果gas總消耗超過(guò)gas limit,那么所有的操作都會(huì)被復(fù)原,但交易是成立的并且交易費(fèi)任會(huì)被礦工收取。區(qū)塊鏈會(huì)顯示這筆交易完成嘗試,但因?yàn)闆](méi)有提供足夠的gas導(dǎo)致所有的合約命令都被復(fù)原(out-of-gas)。
所有交易里沒(méi)有被使用的超量gas都會(huì)以以太幣的形式打回給交易發(fā)起者。因?yàn)間as消耗一般只是一個(gè)大致估算,所以許多用戶(hù)會(huì)超額支付gas來(lái)保證他們的交易會(huì)被接受。
5 去中心化應(yīng)用DApp
DApp是一種“服務(wù)端”運(yùn)行在區(qū)塊鏈網(wǎng)絡(luò)上的應(yīng)用,類(lèi)似于app運(yùn)行在Android/iOS等設(shè)備上,DApp運(yùn)行在以太坊網(wǎng)絡(luò)上。以太坊在GitHub下有一個(gè)代碼倉(cāng)庫(kù)dapp-bin(https://github.com/ethereum/dapp-bin),里面有一些文檔和示例。使用前,你需要看看文件最近的狀態(tài),因?yàn)樗麄儗⒑芸赡芤呀?jīng)被淘汰。
6 DApp客戶(hù)端
目前有四個(gè)可運(yùn)行的,分別由C+ +,Go,Python和Java實(shí)現(xiàn)的幾乎全兼容以太坊協(xié)議的客戶(hù)端。C + +和Go實(shí)現(xiàn)的客戶(hù)端目前完全兼容。
1. go-ethereum
go-ethereum客戶(hù)端通常被稱(chēng)為geth,是目前用戶(hù)最多,使用最廣泛的客戶(hù)端。通過(guò)Geth客戶(hù)端與以太坊網(wǎng)絡(luò)進(jìn)行連接和交互可以實(shí)現(xiàn)賬戶(hù)管理、合約部署、挖礦等眾多有趣且實(shí)用的功能(https://ethereum.github.io/go-ethereum)。
2. pyethapp
Pyethapp是以python為基礎(chǔ)的客戶(hù)端,實(shí)現(xiàn)以太坊加密經(jīng)濟(jì)狀態(tài)機(jī)。python實(shí)現(xiàn)旨在提供一個(gè)更容易刪節(jié)和擴(kuò)展的代碼庫(kù)。
Pyethapp利用兩個(gè)以太坊核心組成部分來(lái)實(shí)現(xiàn)客戶(hù)端:
- pyethereum ——核心庫(kù),以區(qū)塊鏈、以太坊模擬機(jī)和挖礦為特征;
- pydevp2p ——點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)庫(kù),以節(jié)點(diǎn)發(fā)現(xiàn)和運(yùn)輸多碼復(fù)用和加密連接為特征。
維基百科:?https://github.com/ethereum/pyethapp/wiki/Getting-Started
? Gitter聊天:?https://gitter.im/ethereum/pyethapp
3. Parity
Parity 聲稱(chēng)是世界上最快速最輕便的客戶(hù)端。它用Rust語(yǔ)言寫(xiě)成,可靠性、性能和代碼清晰度都有所增強(qiáng)。Parity由Ethcore開(kāi)發(fā)。Ethcore由以太坊基金會(huì)的幾個(gè)會(huì)員創(chuàng)建。
網(wǎng)站:?https://ethcore.io/parity.html?Github:?https://github.com/ethcore/parity?
Gitter聊天:?https://gitter.im/ethcore/parity
7 DApp瀏覽器
一個(gè)DApp瀏覽器,正如它字面所表達(dá)的,用來(lái)讓DApp客戶(hù)端(常常使用JS與以太坊的智能合約進(jìn)行交互)的使用更加容易。
DApp瀏覽器的主要目的是:
提供到一個(gè)以太坊節(jié)點(diǎn)的連接(或者連接到一個(gè)本地節(jié)點(diǎn)或者遠(yuǎn)程節(jié)點(diǎn)),和一個(gè)方便的切換不同節(jié)點(diǎn)(甚至是不同的網(wǎng)絡(luò))。?
提供一個(gè)帳戶(hù)(或者一個(gè)錢(qián)包)來(lái)方便用戶(hù)與DApp交互。
1. Mist
Mist https://github.com/ethereum/mist DApp瀏覽器。一個(gè)漂亮的界面來(lái)與以太坊節(jié)點(diǎn)交互,與智能合約發(fā)、收交易。是以太坊官方的.
2. Status
Status https://status.im/ DApp瀏覽器。是一個(gè)手機(jī)上可以使用的
3. MetaMask
MetaMask https://metamask.io/ Google瀏覽器擴(kuò)展,把Chrome變成了一個(gè)DApp瀏覽器。它的核心特性是注入以太坊提供的js客戶(hù)端庫(kù)web3,到每一個(gè)界面,來(lái)讓DApp連接到MetaMask提供的以太坊節(jié)點(diǎn)服務(wù)。不過(guò)這個(gè)Chrome擴(kuò)展,可以允許你管理你的錢(qián)包,以及連接到不同的以太坊網(wǎng)絡(luò)(包括本地的開(kāi)發(fā)網(wǎng)絡(luò))
4. Parity
Parity是一個(gè)以太坊客戶(hù)端(也是一個(gè)全節(jié)點(diǎn)的實(shí)現(xiàn)),集成到了Web瀏覽器,并使之成為一個(gè)DApp瀏覽器。
8 以太坊代幣
現(xiàn)在你應(yīng)該知道我們可以通過(guò)寫(xiě)智能合約,并將狀態(tài)存到區(qū)塊鏈上了?那如果,在狀態(tài)這塊,我們存的是一個(gè)Map類(lèi)型,鍵是地址,值是整數(shù)。然后我們將這些整數(shù)值叫做余額,誰(shuí)的余額呢?它就是我們要說(shuō)的代幣(代幣的數(shù)據(jù)結(jié)構(gòu)就是這樣簡(jiǎn)單,存的就是某個(gè)用戶(hù)當(dāng)前的余額)。
是的,所有你剛才聽(tīng)到的代幣,只是一些數(shù)據(jù),存儲(chǔ)在一個(gè)哈希表里,通過(guò)api或者所謂的協(xié)議,來(lái)進(jìn)行增刪改查。
這是一個(gè)簡(jiǎn)單的基本合約(https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/BasicToken.sol)。
你可以看看ethereum的創(chuàng)建一個(gè)眾籌合約的官方教程https://www.ethereum.org/crowdsaleCrowdsale與另一個(gè)合約MyToken交互,和前面的基本合約類(lèi)似,并沒(méi)有什么神奇的地方。你將會(huì)發(fā)現(xiàn)它僅僅是一個(gè)合約。
人們使用代幣來(lái)做各種各樣的事情,阻攔大家如何使用的只有想像力。代幣常常用來(lái)激勵(lì)用戶(hù)與某個(gè)協(xié)議進(jìn)行交互,或者證明對(duì)某個(gè)資產(chǎn)的所有權(quán),投票權(quán)等等。
以太坊的創(chuàng)始人Vitalik最近有一個(gè)關(guān)于代幣發(fā)售模型,也是一篇不錯(cuò)的文章https://vitalik.ca/general/2017/06/09/sales.html。
9 與智能合約進(jìn)行交互
你與智能合約的交互(也稱(chēng)做調(diào)用函數(shù)和讀取狀態(tài))通過(guò)連接到某個(gè)以太坊節(jié)點(diǎn),并執(zhí)行操作碼。當(dāng)前有各種各樣的以太坊客戶(hù)端,可以方便進(jìn)行開(kāi)發(fā)。Geth和parity都提供了控制臺(tái)或?yàn)g覽器的方式來(lái)更好的與智能合約交互。
如果你想要一個(gè)程序的庫(kù)用來(lái)與智能合約交互的接口,也有這樣的客戶(hù)端實(shí)現(xiàn)。對(duì)于JS語(yǔ)言,可以使用web3.js。以于go語(yǔ)言,可以使用在go-ethereum中的abigen的程序,提供了go包,用來(lái)與智能合約交互。
如果只是用來(lái)測(cè)試和開(kāi)發(fā),可以使用Ganache來(lái)運(yùn)行一個(gè)本地節(jié)點(diǎn)(這個(gè)節(jié)點(diǎn)壓短區(qū)塊時(shí)間等,可以方便打整的開(kāi)發(fā)與測(cè)試)。
當(dāng)你部署了一個(gè)智能合約,你實(shí)際進(jìn)行的操作是向地址0x0發(fā)送了一個(gè)交易,使用當(dāng)前合約內(nèi)容作為參數(shù),一個(gè)以太坊交易詳解https://medium.com/@codetractio/inside-an-ethereum-transaction-fa94ffca912f。
10 Truffle和Embark
一旦你開(kāi)始寫(xiě)智能合約,你會(huì)重復(fù)做大量的操作,比如編譯源碼為字節(jié)碼和abi,部署到網(wǎng)絡(luò),測(cè)試然后部署合約等等。你也許希望更關(guān)注于你想要實(shí)現(xiàn)的東西。
Truffle和Embark框架,標(biāo)準(zhǔn)化和自動(dòng)化了這些瑣碎的工作。它們提供了一個(gè)好的開(kāi)發(fā),部署,以及更為重要的,測(cè)試智能合約的體驗(yàn)。
你可以通過(guò)官方文檔來(lái)開(kāi)啟使用Truffle的旅程。
也可以參考:以太坊開(kāi)發(fā)DApp入門(mén)實(shí)戰(zhàn)教程,適合區(qū)塊鏈新手。
如果是老手可以參考,以太坊實(shí)戰(zhàn)電商教程。
Embark(https://github.com/embark-framework/embark)提供了類(lèi)似的,幫助開(kāi)發(fā)者組織工程的稍有些不同的工具。
當(dāng)你一開(kāi)始接觸智能合約這塊時(shí),應(yīng)該盡量不要使用框架。直到你明白了使用框架能帶來(lái)的價(jià)值時(shí),才應(yīng)該開(kāi)始使用,正如你不應(yīng)該通過(guò)rails new來(lái)學(xué)習(xí)HTML語(yǔ)言一樣。
11 ETHPM
分享是關(guān)心,所以ETHPM是一個(gè)去中心化的智能合約包管理資源庫(kù)https://www.ethpm.com/registry
ETHPM,你可以關(guān)聯(lián)或連接到某個(gè)著名的合約或庫(kù),減少代碼重復(fù),盡可能理想的為未來(lái)的開(kāi)發(fā)提供好的基礎(chǔ)。使用這里的這個(gè)規(guī)范https://github.com/ethereum/EIPs/issues/190 Truffle和Embark均可與之集成,并創(chuàng)造一個(gè)愉快的開(kāi)發(fā)體驗(yàn)。詳細(xì)的說(shuō)明了相關(guān)的信息以及背景。
12 以太坊網(wǎng)絡(luò)
Mainnet-以太坊主網(wǎng),通常是所有客戶(hù)端的默認(rèn)網(wǎng)絡(luò)。
Ropsten?- 以太坊使用工作量證明的主測(cè)試網(wǎng)絡(luò)。這個(gè)網(wǎng)絡(luò),因?yàn)榈偷挠?jì)算量,容易遭到DDOS攻擊,分片,或者其它問(wèn)題。垃圾郵件攻擊后被暫時(shí)放棄,最近才恢復(fù)使用。
鏈接:https://github.com/ethereum/ropsten
Kovan?-parity客戶(hù)端組成的測(cè)試網(wǎng)絡(luò),使用授權(quán)證明來(lái)提升對(duì)垃圾郵件攻擊的抗擾度,并且持續(xù)4秒的阻塞時(shí)間。
鏈接:https://github.com/kovan-testnet/proposal
Rinkeby-geth客戶(hù)端組成的測(cè)試網(wǎng)絡(luò),使用集團(tuán)共識(shí),盡管計(jì)算量低,但是對(duì)惡意行為者更有彈性。
鏈接:https://www.rinkeby.io/
你可以自己搭建你自己的測(cè)試網(wǎng)絡(luò),也許使用kubernetes
https://github.com/MaximilianMeister/kuberneteth
或者
docker-compose
https://capgemini.github.io/blockchain/ethereum-docker-compose
但也許你將很快就可以不需要花什么時(shí)間。
13 智能合約編程語(yǔ)言
Solidity
Solidity是第一批的描述智能合約的語(yǔ)言。當(dāng)前是最流行的語(yǔ)言,因此也有最多的例子,文檔,和教程。你應(yīng)該學(xué)習(xí)這個(gè),除非你有要學(xué)習(xí)其它的理由。
你可以使用基于瀏覽器的Remix IDE來(lái)進(jìn)行快速驗(yàn)證。
下面是一個(gè)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是一門(mén)Lisp風(fēng)格的底層編程語(yǔ)言,就像語(yǔ)言名稱(chēng)看到的這樣。雖然以太坊官方并沒(méi)有將它作為主要需要支持的語(yǔ)言,但它仍舊持續(xù)進(jìn)行著更新,且與solidity在同一個(gè)資源庫(kù)。
這是一個(gè)使用LLL語(yǔ)言寫(xiě)的一個(gè)ERC20代幣的合約。
鏈接:https://github.com/benjaminion/LLL_erc20/blob/1c659e890e2b30408555b9467a8dfd8988211b3b/erc20.lll
如果你正在學(xué)習(xí),也許不是那么的容易習(xí)慣LLL語(yǔ)言的寫(xiě)法。
Serpent
Serpent是一個(gè)類(lèi)Python的高級(jí)語(yǔ)言,最終也會(huì)被編譯為EVM字節(jié)碼。它主要被Augur團(tuán)隊(duì)使用。
但最近Zeppelin Solution團(tuán)隊(duì)發(fā)現(xiàn)其編譯器有一個(gè)嚴(yán)重的bug。
鏈接:https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929。
在這個(gè)問(wèn)題被修復(fù)之前都不建議繼續(xù)使用。
如果你對(duì)Augur如何解決這些漏洞感興趣,你可以閱讀Zeppelin Solution的這篇文章。
鏈接:https://blog.zeppelin.solutions/augur-rep-token-critical-vulnerability-disclosure-3d8bdffd79d2
Serpent的合約看起來(lái)如下:
1\. `def register(key, value):`2\. `# Key not yet claimed`3\. `if not self.storage[key]:`4\. `self.storage[key] = value`5\. `return(1)` 6\. `else:`7\. `return(0) # Key already claimed`9\. `def ask(key):`10\. `return(self.storage[key])`14 智能合約的安全
一旦一個(gè)智能合約部署到了以太坊的網(wǎng)絡(luò)上,它將是永不可變的,且將永久存在。如果你寫(xiě)了一個(gè)bug,你將不能下架這個(gè)有問(wèn)題的版本,你只能在后續(xù)的版本中修復(fù)。
由于許多工程師開(kāi)發(fā)的Ethereum和其他智能合同平臺(tái)來(lái)自于Web開(kāi)發(fā),所以這個(gè)概念實(shí)在是太新,而且是瘋狂的。
ConsenSys有一個(gè)非常棒的資源叫智能合約的最佳實(shí)踐,你應(yīng)該深入的理解一下。
鏈接:https://github.com/ConsenSys/smart-contract-best-practices
一個(gè)Parity的錢(qián)包被黑的解釋
https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7
在你部署你的智能合約的時(shí)候,由于你管理的是真正的資金,你應(yīng)該先開(kāi)一個(gè)賞金計(jì)劃https://blog.zeppelin.solutions/setting-up-a-bug-bounty-smart-contract-with-openzeppelin-a0e56434ad0e,并盡量保證它完整的測(cè)試過(guò)。
15 Whisper
Whisper是一個(gè)集成進(jìn)以太坊的消息系統(tǒng)。它允許DApp發(fā)布小量的信息來(lái)進(jìn)行非實(shí)時(shí)的消息通信。
https://github.com/ethereum/go-ethereum/wiki/Whisper-Overview
它使用shh協(xié)議。盡管它已經(jīng)有段時(shí)間沒(méi)有更新了,這是一個(gè)使用Whisper協(xié)議實(shí)現(xiàn)一個(gè)聊天客戶(hù)端的例子。
鏈接:https://github.com/ethereum/meteor-dapp-whisper-chat-client。
16 去中心自動(dòng)化組織
這是一個(gè)組織(就像,一群人),其中,使用代碼來(lái)保證最終的強(qiáng)制執(zhí)行,而不是使用傳統(tǒng)的法律文件。這群人使用智能合約來(lái)做常見(jiàn)組織做的所有的事情,比如在某件事上進(jìn)行投票,比如決定是否對(duì)什么進(jìn)行投資等等。
副作用是決策,管理,以及對(duì)什么進(jìn)行投資的結(jié)果將會(huì)不可改變的存儲(chǔ)在區(qū)塊鏈上。
之前slock.it創(chuàng)建了標(biāo)準(zhǔn)的DAO框架來(lái)說(shuō)明這個(gè)理念。這里https://github.com/slockit/DAO/DAO 有概念的總覽,以及如何使用框架來(lái)實(shí)現(xiàn)一個(gè)自己的DAO(這個(gè)項(xiàng)目由于bug被黑客攻擊了)
17 Aragon
Aragon https://aragon.one/ 也正在應(yīng)對(duì)挑戰(zhàn),設(shè)計(jì)一個(gè)根據(jù)智能合約邏輯運(yùn)作的公司,重點(diǎn)是創(chuàng)建一個(gè)可以接受投資,處理會(huì)計(jì),支付雇員,分配股權(quán),正如我們現(xiàn)在知道的完成每天的公司的業(yè)務(wù)。他們也實(shí)現(xiàn)了漂亮的DApp客戶(hù)端來(lái)讓他們的協(xié)議使用起來(lái)更為簡(jiǎn)單。
查看這里Aragon核心合約https://github.com/aragon/aragon-core/tree/master/contracts來(lái)更多的理解它是如何做的。
18 存儲(chǔ)
IPFS&FileCoin
IPFS(星際文件系統(tǒng))是一個(gè)協(xié)議,用來(lái)分發(fā)文件。你可以認(rèn)為它是一個(gè)基于bittorrent和git這樣概念的一個(gè)文件系統(tǒng),文件可以定位,且是不可變的。IPFS以IPLD數(shù)據(jù)模型存儲(chǔ)信息,它非常有趣,提供了一些特別的特性,你可以通過(guò)下面的說(shuō)明了解一些。
可以參考用區(qū)塊鏈、IPFS、Node.js和MongoDB來(lái)構(gòu)建的電商平臺(tái)的以太坊教程:
這是一個(gè)新的協(xié)議,它有一個(gè)http的網(wǎng)關(guān)和文件系統(tǒng)適配器,這讓你可以通過(guò)http,掛載整個(gè)互聯(lián)網(wǎng)文件系統(tǒng)到你本地的盤(pán)/ipfs。IPFS還提供了一個(gè)尋址服務(wù)IPNS(星際命名空間),它允許可變的狀態(tài)(需要注意的是在IPFS里的所有東西都是不可變的)。你甚至可以使用DNS TXT記錄來(lái)定位到你的IPNS客戶(hù)端,允許你生成用戶(hù)友好的鏈接來(lái)指向到對(duì)應(yīng)的數(shù)據(jù)。
FileCoin是Protocol Lab為創(chuàng)建一個(gè)去中心化的基于IPFS的存儲(chǔ)市場(chǎng)的努力結(jié)果,也就是向整個(gè)網(wǎng)絡(luò)提供存儲(chǔ)資源的激勵(lì)層。FileCoin的共識(shí)協(xié)議沒(méi)有使用浪費(fèi)資源的工作量證明,而是使用了Proff of Replication和Proof of SpaceTime來(lái)保證每片數(shù)據(jù)被復(fù)制某個(gè)特定的拷貝數(shù)量且存儲(chǔ)某個(gè)特定的時(shí)間。
你應(yīng)該讀一下IPFS的白皮書(shū),FileCoin的白皮書(shū),以及IPLD的規(guī)范。
相關(guān)鏈接?
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
由于當(dāng)前FileCoin還沒(méi)有上線(xiàn),你可以使用當(dāng)前的IPFS存儲(chǔ)網(wǎng)絡(luò)來(lái)運(yùn)行html/css/js,并把它作為一個(gè)類(lèi)似orbit-db的數(shù)據(jù)庫(kù)。
Swarm
Swarm是一個(gè)去中心化的存儲(chǔ)網(wǎng)絡(luò),集成于以太坊生態(tài)系統(tǒng),作為第一陣營(yíng)的項(xiàng)目,看看這里關(guān)于IPFS與這個(gè)項(xiàng)目的比較和優(yōu)劣。但本質(zhì)上,基本上是一樣的,除了它們有不同的哲學(xué),并在底層使用稍微不同的協(xié)議。?
鏈接:https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM
19 項(xiàng)目
Augur
Augur是一個(gè)去中心化的預(yù)測(cè)市場(chǎng),讓大家對(duì)于某個(gè)現(xiàn)實(shí)世界的事件進(jìn)行對(duì)賭。一方面,用戶(hù)在某個(gè)具體可以發(fā)生的事件上投注,一旦結(jié)果成真,它們贏得的代幣有真正的價(jià)值。為了實(shí)現(xiàn)這個(gè),你需要實(shí)現(xiàn)一個(gè)去中心化的先知協(xié)議,來(lái)輸入現(xiàn)實(shí)世界中的信息,它使用REP協(xié)議代幣來(lái)進(jìn)行經(jīng)濟(jì)激勵(lì)。
Augur白皮書(shū):http://www.augur.link/augur.pdf;??
第一時(shí)間獲得Augur的最新進(jìn)展,可以關(guān)注其Medium賬號(hào):
https://medium.com/@AugurProject;?
你還可以看看Augur項(xiàng)目的合約代碼:https://github.com/AugurProject/augur-core;?
以及了解下Augur Master Plan:https://medium.com/@AugurProject/augur-master-plan-42dda65a3e3d
Gnosis
Gnosis與Augur有類(lèi)似的理念,也是一個(gè)去中心化的預(yù)測(cè)市場(chǎng)。
這是項(xiàng)目的白皮書(shū):https://gnosis.pm/resources/default/pdf/gnosis-whitepaper-DEC2017.pdf?以及與Augur項(xiàng)目的對(duì)比:https://medium.com/@akhounov/hopefully-impartial-comparison-of-gnosis-and-augur-f743d11d6d37。
0xProject
0xProject創(chuàng)建了一個(gè)交換代幣的協(xié)議,以及一個(gè)DApp來(lái)實(shí)現(xiàn)這個(gè)協(xié)議。開(kāi)發(fā)者可以創(chuàng)建一個(gè)基于它們自己的分布式應(yīng)用創(chuàng)建交易所(技術(shù)上叫中繼層),而用戶(hù)也不用信任這些app就可完成交易,結(jié)算在區(qū)塊鏈上完成。0x協(xié)議旨在使用離線(xiàn)的第三方來(lái)廣播交易和管理訂單(可以創(chuàng)建/更新/刪除訂單,而不用直接向Ethereum發(fā)送緩慢/昂貴的交易),但最終會(huì)使用Ethereum進(jìn)行結(jié)算。
它們實(shí)現(xiàn)了場(chǎng)外交易,一個(gè)DApp使用這個(gè)協(xié)議來(lái)在用戶(hù)之間直接交換代幣。你可以在github上查看他們的合約。?
鏈接:https://github.com/0xProject/0x-monorepo/tree/development/packages/contracts
Swap
ConsenSys的Swap協(xié)議也是非常類(lèi)似的,但更專(zhuān)注于p2p的直接交易(而不是基于訂單表),這里有一個(gè)白皮書(shū)https://swap.tech/pdfs/SwapWh...,可以看看,這里有一個(gè)關(guān)于協(xié)議的介紹https://blog.airswap.io/
Bancor
代幣的流動(dòng)性是相對(duì)來(lái)說(shuō)在加密幣的生態(tài)中是一個(gè)非常大的問(wèn)題。在用戶(hù)間的交易需要滿(mǎn)足買(mǎi)方和賣(mài)方兩邊的想法。
Bancor是一個(gè)協(xié)議,可以讓你的代幣:
1.可以根據(jù)訂單自動(dòng)給予價(jià)格;
2.可以通過(guò)持有其它的代幣作為抵押器來(lái)即時(shí)創(chuàng)造流動(dòng)性。
Open Zeppelin & zeppelinOS
Zeppelin Solutions是一個(gè)科技公司,在這個(gè)領(lǐng)域內(nèi)正完成一些偉大,而且專(zhuān)業(yè)的事。它們實(shí)在做了太多事,太難一一說(shuō)清了。
他們管理了Open Zeppelin,一系列經(jīng)過(guò)審查的,最佳的智能合約實(shí)踐,你可以繼承并應(yīng)用于你自己的DApp中。你可以查看他們的github資源來(lái)學(xué)習(xí)更多。你應(yīng)該讀一下里面的每一個(gè)合約。
他們堅(jiān)持代碼復(fù)用的理念,然后進(jìn)一步創(chuàng)建了Zeppelin OS。你可以忽略O(shè)S,它不是傳統(tǒng)意義上的操作系統(tǒng)的概念。zeppelinOS特性,工具和服務(wù)的集合,旨在提供穩(wěn)固的開(kāi)發(fā)人員體驗(yàn),同時(shí)最大限度地提高智能合同安全性。
zeppelinOS中的其中一部分是“zeppelinOS Kernel”。其實(shí)他們不是傳統(tǒng)意義上的核心,而且是一組庫(kù)。它們是通過(guò)庫(kù)模型實(shí)現(xiàn)的可升級(jí)的智能合約,可以在出現(xiàn)安全問(wèn)題時(shí)獨(dú)立的進(jìn)行更新。因?yàn)槟阍诤霞s內(nèi)包含的代碼更少,部署也將花費(fèi)更少的gas,而開(kāi)發(fā)者也減少了代碼的重復(fù)。
zeppelinOS還有一些其他整齊的規(guī)劃,比如調(diào)度程序(智能合約的異步執(zhí)行,因?yàn)槟J(rèn)合同一般不會(huì)主動(dòng)觸發(fā)某個(gè)行為),市場(chǎng)級(jí)的協(xié)議和鏈下開(kāi)發(fā)者體驗(yàn)工具。
總結(jié)
- 上一篇: 小程序作用域与模块化
- 下一篇: Clustered Data ONTAP