以太坊開發(fā)入門

目標(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ì)惡意行為者更有彈性毛秘。

鏈接: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 智能合約編程語言

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)工具。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市二拐,隨后出現(xiàn)的幾起案子服鹅,更是在濱河造成了極大的恐慌,老刑警劉巖百新,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件企软,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡饭望,警方通過查閱死者的電腦和手機(jī)仗哨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铅辞,“玉大人厌漂,你說我怎么就攤上這事≌迳海” “怎么了苇倡?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長囤踩。 經(jīng)常有香客問我旨椒,道長,這世上最難降的妖魔是什么堵漱? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任综慎,我火速辦了婚禮,結(jié)果婚禮上勤庐,老公的妹妹穿的比我還像新娘示惊。我一直安慰自己,他們只是感情好愉镰,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布米罚。 她就那樣靜靜地躺著,像睡著了一般岛杀。 火紅的嫁衣襯著肌膚如雪阔拳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天类嗤,我揣著相機(jī)與錄音,去河邊找鬼辨宠。 笑死遗锣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗤形。 我是一名探鬼主播精偿,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了笔咽?” 一聲冷哼從身側(cè)響起搔预,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叶组,沒想到半個(gè)月后拯田,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甩十,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年船庇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侣监。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸭轮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出橄霉,到底是詐尸還是另有隱情窃爷,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布姓蜂,位于F島的核電站吞鸭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏覆糟。R本人自食惡果不足惜刻剥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望滩字。 院中可真熱鬧造虏,春花似錦、人聲如沸麦箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挟裂。三九已至享钞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诀蓉,已是汗流浹背栗竖。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渠啤,地道東北人狐肢。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像沥曹,于是被迫代替她去往敵國和親份名。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碟联,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容