目標(biāo)讀者:
專業(yè)的程序員撼唾;
想深入了解以太坊/區(qū)塊鏈及其生態(tài)的讀者;
如果你已經(jīng)有一定的以太坊技術(shù)基礎(chǔ),只想研究一些落地項(xiàng)目赔硫,可以直接跳到后面的項(xiàng)目模塊。
預(yù)備知識(shí):
了解區(qū)塊鏈的概念以及比特幣的運(yùn)行機(jī)制盐肃。
有基本的編程知識(shí)將是極大的加分項(xiàng)爪膊,了解系統(tǒng)/架構(gòu)/數(shù)學(xué)等知識(shí)权悟。
不知你是否和我一樣,一開始被各種數(shù)學(xué)問題所迷惑推盛,如拜占庭問題峦阁,雙花問題等。我的建議是一開始先拋開這些問題耘成,對(duì)區(qū)塊鏈的原理有一個(gè)基本的全局的了解榔昔,然后再回過頭來思考這些問題。 事實(shí)上瘪菌,如果我們只想基于以太坊開發(fā)智能合約應(yīng)用撒会,也不必完全理解區(qū)塊鏈的架構(gòu)。
1 以太坊
以太坊和比特幣一樣师妙,底層框架都是區(qū)塊鏈協(xié)議诵肛,區(qū)塊鏈本質(zhì)上是一個(gè)應(yīng)用了密碼學(xué)技術(shù)的分布式數(shù)據(jù)庫系統(tǒng)。在看了前面提及的阿里云整理的科普文章之后默穴,為了能進(jìn)一步了解以太坊怔檩,建議看一下以太坊白皮書
2 智能合約
智能合約是一段運(yùn)行在以太坊區(qū)塊鏈系統(tǒng)之上的一段代碼,合約根據(jù)事先制訂的規(guī)則來自動(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 以太坊賬戶
以太坊中有兩種賬戶:外部賬戶(EOA)和合約賬戶
外部賬戶具有以下特性:
1.有一個(gè)以太幣余額膊爪;
2.可以發(fā)送交易(以太幣轉(zhuǎn)賬或者激活合約代碼);
3.通過私鑰控制嚎莉;
4.沒有相關(guān)聯(lián)的代碼米酬。
合約賬戶擁有以下特性:
1.有一個(gè)以太幣余額;
2.有相關(guān)聯(lián)的代碼趋箩;
3.代碼執(zhí)行是通過交易或者其他合約發(fā)送的call來激活赃额;
4.當(dāng)被執(zhí)行時(shí) -- 運(yùn)行在隨機(jī)復(fù)雜度 (圖靈完備性)-- 只能操作其擁有的特定儲(chǔ)存,例如可以擁有其永久state -- 可以call其他合約.
所有以太坊區(qū)塊鏈上的行動(dòng)都是由各賬戶發(fā)送的交易激活叫确。每次一個(gè)合約賬戶收到一個(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)女气,你不能編寫永不結(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)用高的交易软吐,所以用戶所選擇支付的交易費(fèi)用多少會(huì)影響到該交易被打包所需等待的時(shí)長瘩将。
如果該交易由于計(jì)算,包括原始消息和一些觸發(fā)的其他消息凹耙,需要使用的gas數(shù)量小于或等于所設(shè)置的gas limit姿现,那么這個(gè)交易會(huì)被處理。
如果gas總消耗超過gas limit肖抱,那么所有的操作都會(huì)被復(fù)原备典,但交易是成立的并且交易費(fèi)任會(huì)被礦工收取。區(qū)塊鏈會(huì)顯示這筆交易完成嘗試意述,但因?yàn)闆]有提供足夠的gas導(dǎo)致所有的合約命令都被復(fù)原(out-of-gas)提佣。
所有交易里沒有被使用的超量gas都會(huì)以以太幣的形式打回給交易發(fā)起者。因?yàn)間as消耗一般只是一個(gè)大致估算荤崇,所以許多用戶會(huì)超額支付gas來保證他們的交易會(huì)被接受拌屏。
5 去中心化應(yīng)用DApp
DApp是一種“服務(wù)端”運(yùn)行在區(qū)塊鏈網(wǎng)絡(luò)上的應(yīng)用,類似于app運(yùn)行在Android/iOS等設(shè)備上术荤,DApp運(yùn)行在以太坊網(wǎng)絡(luò)上倚喂。以太坊在GitHub下有一個(gè)代碼倉庫dapp-bin(https://github.com/ethereum/dapp-bin),里面有一些文檔和示例瓣戚。使用前端圈,你需要看看文件最近的狀態(tài),因?yàn)樗麄儗⒑芸赡芤呀?jīng)被淘汰子库。
6 DApp客戶端
目前有四個(gè)可運(yùn)行的舱权,分別由C+ +,Go仑嗅,Python和Java實(shí)現(xiàn)的幾乎全兼容以太坊協(xié)議的客戶端宴倍。C + +和Go實(shí)現(xiàn)的客戶端目前完全兼容张症。
1. go-ethereum
go-ethereum客戶端通常被稱為geth,是目前用戶最多啊楚,使用最廣泛的客戶端。通過Geth客戶端與以太坊網(wǎng)絡(luò)進(jìn)行連接和交互可以實(shí)現(xiàn)賬戶管理浑彰、合約部署恭理、挖礦等眾多有趣且實(shí)用的功能(https://ethereum.github.io/go-ethereum)。
2. pyethapp
Pyethapp是以python為基礎(chǔ)的客戶端郭变,實(shí)現(xiàn)以太坊加密經(jīng)濟(jì)狀態(tài)機(jī)颜价。python實(shí)現(xiàn)旨在提供一個(gè)更容易刪節(jié)和擴(kuò)展的代碼庫。
Pyethapp利用兩個(gè)以太坊核心組成部分來實(shí)現(xiàn)客戶端:
pyethereum ——核心庫诉濒,以區(qū)塊鏈周伦、以太坊模擬機(jī)和挖礦為特征;
pydevp2p ——點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)庫未荒,以節(jié)點(diǎn)發(fā)現(xiàn)和運(yùn)輸多碼復(fù)用和加密連接為特征专挪。
Github: https://github.com/ethereum/pyethapp
維基百科: https://github.com/ethereum/pyethapp/wiki/Getting-Started
Gitter聊天: https://gitter.im/ethereum/pyethapp
3. Parity
Parity 聲稱是世界上最快速最輕便的客戶端。它用Rust語言寫成片排,可靠性寨腔、性能和代碼清晰度都有所增強(qiáng)。Parity由Ethcore開發(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á)的冶共,用來讓DApp客戶端(常常使用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è)帳戶(或者一個(gè)錢包)來方便用戶與DApp交互家卖。
1. Mist
Mist https://github.com/ethereum/mist DApp瀏覽器。一個(gè)漂亮的界面來與以太坊節(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客戶端庫web3窜司,到每一個(gè)界面沛善,來讓DApp連接到MetaMask提供的以太坊節(jié)點(diǎn)服務(wù)。不過這個(gè)Chrome擴(kuò)展塞祈,可以允許你管理你的錢包金刁,以及連接到不同的以太坊網(wǎng)絡(luò)(包括本地的開發(fā)網(wǎng)絡(luò))
4. Parity
Parity是一個(gè)以太坊客戶端(也是一個(gè)全節(jié)點(diǎn)的實(shí)現(xiàn)),集成到了Web瀏覽器,并使之成為一個(gè)DApp瀏覽器尤蛮。
8 以太坊代幣
現(xiàn)在你應(yīng)該知道我們可以通過寫智能合約媳友,并將狀態(tài)存到區(qū)塊鏈上了?那如果产捞,在狀態(tài)這塊醇锚,我們存的是一個(gè)Map類型,鍵是地址坯临,值是整數(shù)焊唬。然后我們將這些整數(shù)值叫做余額,誰的余額呢看靠?它就是我們要說的代幣(代幣的數(shù)據(jù)結(jié)構(gòu)就是這樣簡單赶促,存的就是某個(gè)用戶當(dāng)前的余額)。
是的挟炬,所有你剛才聽到的代幣鸥滨,只是一些數(shù)據(jù),存儲(chǔ)在一個(gè)哈希表里谤祖,通過api或者所謂的協(xié)議爵赵,來進(jìn)行增刪改查。
這是一個(gè)簡單的基本合約(https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/BasicToken.sol)泊脐。
你可以看看ethereum的創(chuàng)建一個(gè)眾籌合約的官方教程https://www.ethereum.org/crowdsaleCrowdsale與另一個(gè)合約MyToken交互空幻,和前面的基本合約類似,并沒有什么神奇的地方容客。你將會(huì)發(fā)現(xiàn)它僅僅是一個(gè)合約秕铛。
人們使用代幣來做各種各樣的事情,阻攔大家如何使用的只有想像力缩挑。代幣常常用來激勵(lì)用戶與某個(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)行交互
你與智能合約的交互(也稱做調(diào)用函數(shù)和讀取狀態(tài))通過連接到某個(gè)以太坊節(jié)點(diǎn)芥丧,并執(zhí)行操作碼紧阔。當(dāng)前有各種各樣的以太坊客戶端,可以方便進(jìn)行開發(fā)续担。Geth和parity都提供了控制臺(tái)或?yàn)g覽器的方式來更好的與智能合約交互擅耽。
如果你想要一個(gè)程序的庫用來與智能合約交互的接口,也有這樣的客戶端實(shí)現(xiàn)物遇。對(duì)于JS語言乖仇,可以使用web3.js憾儒。以于go語言,可以使用在go-ethereum中的abigen的程序乃沙,提供了go包起趾,用來與智能合約交互。
如果只是用來測(cè)試和開發(fā)警儒,可以使用Ganache來運(yùn)行一個(gè)本地節(jié)點(diǎn)(這個(gè)節(jié)點(diǎn)壓短區(qū)塊時(shí)間等训裆,可以方便打整的開發(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
一旦你開始寫智能合約,你會(huì)重復(fù)做大量的操作诸老,比如編譯源碼為字節(jié)碼和abi隆夯,部署到網(wǎng)絡(luò),測(cè)試然后部署合約等等别伏。你也許希望更關(guān)注于你想要實(shí)現(xiàn)的東西蹄衷。
Truffle和Embark框架,標(biāo)準(zhǔn)化和自動(dòng)化了這些瑣碎的工作厘肮。它們提供了一個(gè)好的開發(fā)愧口,部署,以及更為重要的类茂,測(cè)試智能合約的體驗(yàn)耍属。
你可以通過官方文檔來開啟使用Truffle的旅程。
也可以參考:以太坊開發(fā)DApp入門實(shí)戰(zhàn)教程巩检,適合區(qū)塊鏈新手厚骗。
如果是老手可以參考,以太坊實(shí)戰(zhàn)電商教程兢哭。
Embark(https://github.com/embark-framework/embark)提供了類似的领舰,幫助開發(fā)者組織工程的稍有些不同的工具。
當(dāng)你一開始接觸智能合約這塊時(shí)迟螺,應(yīng)該盡量不要使用框架冲秽。直到你明白了使用框架能帶來的價(jià)值時(shí),才應(yīng)該開始使用矩父,正如你不應(yīng)該通過rails new來學(xué)習(xí)HTML語言一樣劳跃。
11 ETHPM
分享是關(guān)心,所以ETHPM是一個(gè)去中心化的智能合約包管理資源庫https://www.ethpm.com/registry
ETHPM浙垫,你可以關(guān)聯(lián)或連接到某個(gè)著名的合約或庫刨仑,減少代碼重復(fù)郑诺,盡可能理想的為未來的開發(fā)提供好的基礎(chǔ)。使用這里的這個(gè)規(guī)范https://github.com/ethereum/EIPs/issues/190 Truffle和Embark均可與之集成杉武,并創(chuàng)造一個(gè)愉快的開發(fā)體驗(yàn)辙诞。詳細(xì)的說明了相關(guān)的信息以及背景。
12 以太坊網(wǎng)絡(luò)
Mainnet-以太坊主網(wǎng)轻抱,通常是所有客戶端的默認(rèn)網(wǎng)絡(luò)飞涂。
Ropsten - 以太坊使用工作量證明的主測(cè)試網(wǎng)絡(luò)。這個(gè)網(wǎng)絡(luò)祈搜,因?yàn)榈偷挠?jì)算量较店,容易遭到DDOS攻擊,分片容燕,或者其它問題梁呈。垃圾郵件攻擊后被暫時(shí)放棄,最近才恢復(fù)使用蘸秘。
鏈接:https://github.com/ethereum/ropsten
Kovan -parity客戶端組成的測(cè)試網(wǎng)絡(luò)官卡,使用授權(quán)證明來提升對(duì)垃圾郵件攻擊的抗擾度,并且持續(xù)4秒的阻塞時(shí)間醋虏。
鏈接:https://github.com/kovan-testnet/proposal
Rinkeby-geth客戶端組成的測(cè)試網(wǎng)絡(luò)寻咒,使用集團(tuán)共識(shí),盡管計(jì)算量低颈嚼,但是對(duì)惡意行為者更有彈性毛秘。
你可以自己搭建你自己的測(cè)試網(wǎng)絡(luò),也許使用kubernetes
https://github.com/MaximilianMeister/kuberneteth
或者
docker-compose
https://capgemini.github.io/blockchain/ethereum-docker-compose
但也許你將很快就可以不需要花什么時(shí)間阻课。
13 智能合約編程語言
Solidity
Solidity是第一批的描述智能合約的語言叫挟。當(dāng)前是最流行的語言,因此也有最多的例子柑肴,文檔霞揉,和教程。你應(yīng)該學(xué)習(xí)這個(gè)晰骑,除非你有要學(xué)習(xí)其它的理由适秩。
你可以使用基于瀏覽器的Remix IDE來進(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是一門Lisp風(fēng)格的底層編程語言硕舆,就像語言名稱看到的這樣秽荞。雖然以太坊官方并沒有將它作為主要需要支持的語言,但它仍舊持續(xù)進(jìn)行著更新抚官,且與solidity在同一個(gè)資源庫德崭。
這是一個(gè)使用LLL語言寫的一個(gè)ERC20代幣的合約哮洽。
鏈接:https://github.com/benjaminion/LLL_erc20/blob/1c659e890e2b30408555b9467a8dfd8988211b3b/erc20.lll
如果你正在學(xué)習(xí)鸠匀,也許不是那么的容易習(xí)慣LLL語言的寫法。
Serpent
Serpent是一個(gè)類Python的高級(jí)語言洒试,最終也會(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è)問題被修復(fù)之前都不建議繼續(xù)使用痪宰。
如果你對(duì)Augur如何解決這些漏洞感興趣叼架,你可以閱讀Zeppelin Solution的這篇文章。
鏈接:https://blog.zeppelin.solutions/augur-rep-token-critical-vulnerability-disclosure-3d8bdffd79d2
Serpent的合約看起來如下:
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ò)上衣撬,它將是永不可變的乖订,且將永久存在。如果你寫了一個(gè)bug具练,你將不能下架這個(gè)有問題的版本乍构,你只能在后續(xù)的版本中修復(fù)。
由于許多工程師開發(fā)的Ethereum和其他智能合同平臺(tái)來自于Web開發(fā)靠粪,所以這個(gè)概念實(shí)在是太新蜡吧,而且是瘋狂的毫蚓。
ConsenSys有一個(gè)非常棒的資源叫智能合約的最佳實(shí)踐占键,你應(yīng)該深入的理解一下。
鏈接:https://github.com/ConsenSys/smart-contract-best-practices
一個(gè)Parity的錢包被黑的解釋
https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7
在你部署你的智能合約的時(shí)候元潘,由于你管理的是真正的資金畔乙,你應(yīng)該先開一個(gè)賞金計(jì)劃https://blog.zeppelin.solutions/setting-up-a-bug-bounty-smart-contract-with-openzeppelin-a0e56434ad0e,并盡量保證它完整的測(cè)試過翩概。
15 Whisper
Whisper是一個(gè)集成進(jìn)以太坊的消息系統(tǒng)牲距。它允許DApp發(fā)布小量的信息來進(jìn)行非實(shí)時(shí)的消息通信。
https://github.com/ethereum/go-ethereum/wiki/Whisper-Overview
它使用shh協(xié)議钥庇。盡管它已經(jīng)有段時(shí)間沒有更新了牍鞠,這是一個(gè)使用Whisper協(xié)議實(shí)現(xiàn)一個(gè)聊天客戶端的例子。
鏈接:https://github.com/ethereum/meteor-dapp-whisper-chat-client评姨。
16 去中心自動(dòng)化組織
這是一個(gè)組織(就像难述,一群人),其中吐句,使用代碼來保證最終的強(qiáng)制執(zhí)行胁后,而不是使用傳統(tǒng)的法律文件。這群人使用智能合約來做常見組織做的所有的事情嗦枢,比如在某件事上進(jìn)行投票攀芯,比如決定是否對(duì)什么進(jìn)行投資等等。
副作用是決策文虏,管理侣诺,以及對(duì)什么進(jìn)行投資的結(jié)果將會(huì)不可改變的存儲(chǔ)在區(qū)塊鏈上殖演。
之前slock.it創(chuàng)建了標(biāo)準(zhǔn)的DAO框架來說明這個(gè)理念。這里https://github.com/slockit/DAO/DAO 有概念的總覽年鸳,以及如何使用框架來實(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客戶端來讓他們的協(xié)議使用起來更為簡單。
查看這里Aragon核心合約https://github.com/aragon/aragon-core/tree/master/contracts來更多的理解它是如何做的畦幢。
18 存儲(chǔ)
IPFS&FileCoin
IPFS(星際文件系統(tǒng))是一個(gè)協(xié)議坎吻,用來分發(fā)文件。你可以認(rèn)為它是一個(gè)基于bittorrent和git這樣概念的一個(gè)文件系統(tǒng)宇葱,文件可以定位瘦真,且是不可變的。IPFS以IPLD數(shù)據(jù)模型存儲(chǔ)信息黍瞧,它非常有趣诸尽,提供了一些特別的特性,你可以通過下面的說明了解一些印颤。
可以參考用區(qū)塊鏈您机、IPFS、Node.js和MongoDB來構(gòu)建的電商平臺(tái)的以太坊教程:
這是一個(gè)新的協(xié)議年局,它有一個(gè)http的網(wǎng)關(guān)和文件系統(tǒng)適配器际看,這讓你可以通過http,掛載整個(gè)互聯(lián)網(wǎng)文件系統(tǒng)到你本地的盤/ipfs矢否。IPFS還提供了一個(gè)尋址服務(wù)IPNS(星際命名空間)仲闽,它允許可變的狀態(tài)(需要注意的是在IPFS里的所有東西都是不可變的)。你甚至可以使用DNS TXT記錄來定位到你的IPNS客戶端僵朗,允許你生成用戶友好的鏈接來指向到對(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é)議沒有使用浪費(fèi)資源的工作量證明畏鼓,而是使用了Proff of Replication和Proof of SpaceTime來保證每片數(shù)據(jù)被復(fù)制某個(gè)特定的拷貝數(shù)量且存儲(chǔ)某個(gè)特定的時(shí)間。
你應(yīng)該讀一下IPFS的白皮書壶谒,F(xiàn)ileCoin的白皮書云矫,以及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還沒有上線汗菜,你可以使用當(dāng)前的IPFS存儲(chǔ)網(wǎng)絡(luò)來運(yùn)行html/css/js让禀,并把它作為一個(gè)類似orbit-db的數(shù)據(jù)庫挑社。
Swarm
Swarm是一個(gè)去中心化的存儲(chǔ)網(wǎng)絡(luò),集成于以太坊生態(tài)系統(tǒ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ì)賭。一方面捌木,用戶在某個(gè)具體可以發(fā)生的事件上投注油坝,一旦結(jié)果成真,它們贏得的代幣有真正的價(jià)值刨裆。為了實(shí)現(xiàn)這個(gè)澈圈,你需要實(shí)現(xiàn)一個(gè)去中心化的先知協(xié)議,來輸入現(xiàn)實(shí)世界中的信息帆啃,它使用REP協(xié)議代幣來進(jìn)行經(jīng)濟(jì)激勵(lì)瞬女。
Augur白皮書: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有類似的理念慈俯,也是一個(gè)去中心化的預(yù)測(cè)市場(chǎng)。
這是項(xiàng)目的白皮書: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來實(shí)現(xiàn)這個(gè)協(xié)議。開發(fā)者可以創(chuàng)建一個(gè)基于它們自己的分布式應(yīng)用創(chuàng)建交易所(技術(shù)上叫中繼層)略号,而用戶也不用信任這些app就可完成交易刑峡,結(jié)算在區(qū)塊鏈上完成。0x協(xié)議旨在使用離線的第三方來廣播交易和管理訂單(可以創(chuàng)建/更新/刪除訂單玄柠,而不用直接向Ethereum發(fā)送緩慢/昂貴的交易)突梦,但最終會(huì)使用Ethereum進(jìn)行結(jié)算。
它們實(shí)現(xiàn)了場(chǎng)外交易羽利,一個(gè)DApp使用這個(gè)協(xié)議來在用戶之間直接交換代幣宫患。你可以在github上查看他們的合約。
鏈接:https://github.com/0xProject/0x-monorepo/tree/development/packages/contracts
Swap
ConsenSys的Swap協(xié)議也是非常類似的这弧,但更專注于p2p的直接交易(而不是基于訂單表)娃闲,這里有一個(gè)白皮書https://swap.tech/pdfs/SwapWhitepaper.pdfSwap虚汛,可以看看,這里有一個(gè)關(guān)于協(xié)議的介紹https://blog.airswap.io/
Bancor
代幣的流動(dòng)性是相對(duì)來說在加密幣的生態(tài)中是一個(gè)非常大的問題皇帮。在用戶間的交易需要滿足買方和賣方兩邊的想法卷哩。
Bancor是一個(gè)協(xié)議,可以讓你的代幣:
1.可以根據(jù)訂單自動(dòng)給予價(jià)格属拾;
2.可以通過持有其它的代幣作為抵押器來即時(shí)創(chuàng)造流動(dòng)性将谊。
Open Zeppelin & zeppelinOS
Zeppelin Solutions是一個(gè)科技公司,在這個(gè)領(lǐng)域內(nèi)正完成一些偉大渐白,而且專業(yè)的事瓢娜。它們實(shí)在做了太多事,太難一一說清了礼预。
他們管理了Open Zeppelin眠砾,一系列經(jīng)過審查的,最佳的智能合約實(shí)踐托酸,你可以繼承并應(yīng)用于你自己的DApp中褒颈。你可以查看他們的github資源來學(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)固的開發(fā)人員體驗(yàn)揩慕,同時(shí)最大限度地提高智能合同安全性。
zeppelinOS中的其中一部分是“zeppelinOS Kernel”扮休。其實(shí)他們不是傳統(tǒng)意義上的核心迎卤,而且是一組庫。它們是通過庫模型實(shí)現(xiàn)的可升級(jí)的智能合約玷坠,可以在出現(xiàn)安全問題時(shí)獨(dú)立的進(jìn)行更新蜗搔。因?yàn)槟阍诤霞s內(nèi)包含的代碼更少,部署也將花費(fèi)更少的gas八堡,而開發(fā)者也減少了代碼的重復(fù)樟凄。
zeppelinOS還有一些其他整齊的規(guī)劃,比如調(diào)度程序(智能合約的異步執(zhí)行兄渺,因?yàn)槟J(rèn)合同一般不會(huì)主動(dòng)觸發(fā)某個(gè)行為)缝龄,市場(chǎng)級(jí)的協(xié)議和鏈下開發(fā)者體驗(yàn)工具。