想知道更多關於區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】 鏈客,有問必答!
每一個人都開始定義本身與代幣的交互協議,但這些很快顯得陳舊,因此一些人開始集結起來,建立了ERC20代幣接口標準。大概意思是說,咱們定義這些接口,這樣你們能夠相互統一調用,好比轉賬定義爲transfer,第一個參數爲要轉去的賬戶地址address _to,第二個參數爲要發送的ether的uint _value數量。
有些人以爲ERC20協議過於複雜了,因此他們提議了ERC197,稍微簡單一點。
因爲在ERC20中存在的一個小問題,有人提議了一個新的ERC23。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客戶端)。
以前,這並不可能,由於加密代幣,以及接下來的協議創新的時代,爲了實現貨幣化,你本身能夠在協議之上建立一個應用,並實現贏利。由於你本身能夠實現協議的貨幣化,你們能夠在將來更好的協做。
你也許能夠閱讀一下,關於0xProject的下面這篇文章,關於這二者區別的詳細說明。
與智能合約交互
你與智能合約的交互(也稱作調用函數和讀取狀態)經過鏈接到某個以太坊節點,並執行操做碼。當前有各類各樣的以太坊客戶端,能夠方便進行開發。Geth和parity都提供了控制檯或瀏覽器的方式來更好的與智能合約交互。
若是你想要一個程序的庫用來與智能合約交互的接口,也有這樣的客戶端實現。對於JS語言,可使用web3.js。以於go語言,可使用在go-ethereum中的abigen的程序,提供了go包,用來與智能合約交互。
若是隻是用來測試和開發,可使用ethereumjs-testrpc來運行一個本地節點(譯者注:這個節點壓短區塊時間等,能夠方便打整的開發與測試)。
當你部署了一個智能合約,你實際進行的操做是向地址0x0發送了一個交易,使用當前合約內容做爲參數,一個以太坊交易詳解。
Truffle和Embark
一旦你開始寫智能合約,你會重複作大量的操做,好比編譯源碼爲字節碼和abi,部署到網絡,測試而後部署合約等等。你也許但願更關注於你想要實現的東西。
Truffle和Embark框架,標準化和自動化了這些瑣碎的工做。它們提供了一個好的開發,部署,以及更爲重要的,測試智能合約的體驗。
你能夠查看這個文章來開啓使用Truffle的旅程。
這篇文章,提供了使用Truffle來部署以及與智能合約交互的方法。
Embark提供了相似的,幫助開發者組織工程的稍有些不一樣的工具。
當你一開始接觸智能合約這塊時,應該儘可能不要使用框架。直到你明白了使用框架能帶來的價值時,才應該開始使用,正如你不該該經過rails new來學習HTML語言同樣。
ETHPM
分享是關心,因此ETHPM是一個去中心化的智能合約包管理資源庫。使用ETHPM,你能夠關聯或鏈接到某個著名的合約或庫,減小代碼重複,儘量理想的爲將來的開發提供好的基礎。
這裏的這個規範,詳細的說明了相關的信息以及背景。Truffle和Embark都可與之集成,並創造一個愉快的開發體驗。
網絡css
Mainnet-以太坊主網,一般是全部客戶端的默認網絡。html
Ropsten - 以太坊使用工做量證實的主測試網絡。這個網絡,由於低的計算量,容易遭到DDOS攻擊,分片,或者其它問題。垃圾郵件攻擊後被暫時放棄,最近才恢復使用。node
Kovan-parity客戶端組成的測試網絡,使用受權證實來提高對垃圾郵件攻擊的抗擾度,而且持續4秒的阻塞時間。git
Rinkeby-geth客戶端組成的測試網絡,使用集團共識,儘管計算量低,可是對惡意行爲者更有彈性。github
你能夠本身搭建你本身的測試網絡,也許使用kubernetes或者docker-compose,但也許你將很快就能夠不須要花什麼時間。
賬戶與錢包
一個以太坊賬戶就是一個私鑰和公鑰地址對。它們能夠用來存儲ether,建立時不須要花費gas。
錢包則是用來管理ether的智能合約(一些代碼)。這裏是使用solidity寫的一個錢包,運行於Mist瀏覽器。他們能夠有許多的特性,好比多用戶簽名,紙?等等。
這樣,咱們就正確的定義了兩個名詞,前面看到其它人對這兩個術語的困惑,並把全部能存ether的都叫做Wallet。
EVM以及智能合約建立的狀態
在每一個全節點網絡上運行的智能合約代碼在EVM內執行。這是您的標準虛擬機,執行一些字節碼,除了這個vm與網絡,文件系統,進程等隔離。沒有人想要編寫字節碼,因此咱們有一些更高級別的語言編譯爲EVM字節碼。
Solidity
Solidity是第一批的描述智能合約的語言。當前是最流行的語言,所以也有最多的例子,文檔,和教程。你應該學習這個,除非你有要學習其它的理由。
你可使用基於瀏覽器的Remix IDE來進行快速驗證。
下面是一個Solidity的合約:
pragma solidity ^0.4.11;
contract BasicToken {
mapping(address => uint256) balances;function transfer(address _to, uint256 _value) returns () {web
balances[msg.sender] = balances[msg.sender] - _value; balances[_to] = balances[_to] + _value;
}function balanceOf(address _owner) constant returns (uint256 balance) {docker
return balances[_owner];
}
}
LLL
LLL,是一門Lisp風格的底層編程語言,就像語言名稱看到的這樣。雖然以太坊官方並無將它做爲主要須要支持的語言,但它仍舊持續進行着更新,且與solidity在同一個資源庫。
這是一個使用LLL語言寫的一個ERC20代幣的合約
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是一個類Python的高級語言,最終也會被編譯爲EVM字節碼。它主要被Augur團隊使用。
但最近Zeppelin Solution團隊發現其編譯器有一個嚴重的bug,在這個問題被修復以前都不建議繼續使用。
若是你對Augur如何解決這些漏洞感興趣,你能夠閱讀Zeppelin Solution的這篇文章。
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來反編譯以太坊智能合約的字節碼,可使用evmdis來Disassembly。
智能合約的安全
一旦一個智能合約部署到了以太坊的網絡上,它將是永不可變的,且將永久存在。若是你寫了一個bug,你將不能下架這個有問題的版本,你只能在後續的版本中修復。
因爲許多工程師開發的Ethereum和其餘智能合同平臺來自於Web開發,因此這個概念實在是太新,並且是瘋狂的。
ConsenSys有一個很是棒的資源叫智能合約的最佳實踐,你應該深刻的理解一下。
一個Parity的錢包被黑的解釋。
在你部署你的智能合約的時候,因爲你管理的是真正的資金,你應該先開一個賞金計劃,並儘可能保證它完整的測試過。
Whisper
Whisper是一個集成進以太坊的消息系統。它容許DApp發佈小量的信息來進行非實時的消息通訊。
它使用shh協議。
儘管它已經有段時間沒有更新了,這是一個使用Whisper協議實現一個聊天客戶端的例子。
去中心自動化組織(DAOs)
這是一個組織(就像,一羣人),其中,使用代碼來保證最終的強制執行,而不是使用傳統的法律文件。這羣人使用智能合約來作常見組織作的全部的事情,好比在某件事上進行投票,好比決定是否對什麼進行投資等等。
反作用是決策,管理,以及對什麼進行投資的結果將會不可改變的存儲在區塊鏈上。
以前slock.it建立了標準的DAO框架來講明這個理念。在這裏有對DAO概念的總覽,以及如何使用框架來實現一個本身的DAO(譯者注:這個項目因爲bug被黑客攻擊了)。
Aragon
Aragon也正在應對挑戰,設計一個根據智能合約邏輯運做的公司,重點是建立一個能夠接受投資,處理會計,支付僱員,分配股權,正如咱們如今知道的完成天天的公司的業務。他們也實現了漂亮的DApp客戶端來讓他們的協議使用起來更爲簡單。
查看這裏Aragon核心合約來更多的理解它是如何作的。
IPFS&FileCoin
IPFS(星際文件系統)是一個協議,用來分發文件。你能夠認爲它是一個基於bittorrent和git這樣概念的一個文件系統,文件能夠定位,且是不可變的。IPFS以IPLD數據模型存儲信息,它很是有趣,提供了一些特別的特性,你能夠經過下面的說明了解一些。
這是一個新的協議,它有一個http的網關和文件系統適配器,這讓你能夠經過http,掛載整個互聯網文件系統到你本地的盤/ipfs。IPFS還提供了一個尋址服務IPNS(星際命名空間),它容許可變的狀態(須要注意的是在IPFS裏的全部東西都是不可變的)。你甚至可使用DNS TXT記錄來定位到你的IPNS客戶端,容許你生成用戶友好的連接來指向到對應的數據。
FileCoin是Protocol Lab爲建立一個去中心化的基於IPFS的存儲市場的努力結果,也就是向整個網絡提供存儲資源的激勵層。FileCoin的共識協議沒有使用浪費資源的工做量證實,而是使用了Proff of Replication和Proof of SpaceTime來保證每片數據被複制某個特定的拷貝數量且存儲某個特定的時間。
你應該讀一下IPFS的白皮書,FileCoin的白皮書,以及IPLD的規範。
因爲當前FileCoin尚未上線,你可使用當前的IPFS存儲網絡來運行html/css/js,並把做爲一個相似orbit-db的數據庫。
Swarm
Swarm是一個去中心化的存儲網絡,集成於以太坊生態系統,做爲第一陣營的項目,看看這裏關於IPFS與這個項目的比較和優劣。但本質上,基本上是同樣的,除了它們有不一樣的哲學,並在底層使用稍微不一樣的協議。
項目
Augur
Augur是一個去中心化的預測市場,讓你們對於某個現實世界的事件進行對賭。一方面,用戶在某個具體能夠發生的事件上投注,一旦結果成真,它們贏得的代幣有真正的價值。爲了實現這個,你須要實現一個去中心化的先知協議,來輸入現實世界中的信息,它使用REP協議代幣來進行經濟激勵。
你能夠看看Augur項目的合約代碼,以及瞭解下Augur Master Plan。
Gnosis
Gnosis與Augur有相似的理念,也是一個去中心化的預測市場。這是項目的白皮書,以及與Augur項目的對比。
Golem
Golem是一個分佈式的算力市場,以與IPFS同樣的方式構建了一整套的提供算力市場。
你能夠看看FAQ來更好的理解。
0xProject
0xProject建立了一個交換代幣的協議,以及一個DApp來實現這個協議。開發者能夠建立一個基於它們本身的分佈式應用建立交易所(技術上叫中繼層),而用戶也不用信任這些app就可完成交易,結算在區塊鏈上完成。0x協議旨在使用離線的第三方來廣播交易和管理訂單(能夠建立/更新/刪除訂單,而不用直接向Ethereum發送緩慢/昂貴的交易),但最終會使用Ethereum進行結算。
它們實現了場外交易,一個DApp使用這個協議來在用戶之間直接交換代幣。你能夠在github上查看他們的合約。
你還能夠跳過這些酷炫的概念,直接閱讀FAQ。
Swap
ConsenSys的Swap協議也是很是相似的,但更專一於p2p的直接交易(而不是基於訂單表),這裏有一個白皮書,能夠看看,這裏有一個關於Swap協議的介紹。
Bancor
代幣的流動性是相對來講在加密幣的生態中是一個很是大的問題。在用戶間的交易須要知足買方和賣方兩邊的想法。
Bancor是一個協議,可讓你的代幣1)能夠根據訂單自動給予價格2)能夠經過持有其它的代幣做爲抵押器來即時創造流動性。
查看這裏的白皮書。
Makerdao & Dai
以太坊區塊鏈管理的代幣價值每每會有巨大的波動。這個特性在現實生活中則很是很差,好比你的目標是用來保值。
Maker DAO是一個DAO來管理Dai穩定幣。Dai如今還不存在,但他們已經發布了一個alpha的版本叫Sai來展現這門技術。
這裏是DAI的白皮書。
Oraclize
若是咱們要向智能合約中輸入一些信息,好比紐約今天的天氣,我也許須要實現一個去中心化的先知協議詢問一批人(花費高且慢),但若是寫一個服務以中心化的方式來提供信息,又違背了去中心化應用的理念。
Oraclize嘗試用如下方式來解決問題1)從一個外部數據源向你的智能合約發送數據。2)提供一個證實,數據來自某個數據源,且沒有被修改過。由此若是你信任random.org,你可使用Oraclize來提供一個隨機數生成合約。
他們的集成很是強大; 您能夠獲取URL,解析JSON和XPATH,查詢Wolfram Alpha等。
BTCRelay
BTCRelay做爲比特幣區塊鏈交易的先知機制,這意味着你能夠在以太坊上編寫智能合約來響應比特幣區塊鏈上的某個交易,進行觸發後續的操做。好比,你可讓人經過BTC爲你的服務付費,使用BTCRelay在以太坊上校驗付款成功後,繼而在以太坊上提供對應的服務。
Open Zeppelin & zeppelinOS
Zeppelin Solutions是一個科技公司,在這個領域內正完成一些偉大,並且專業的事。它們實在作了太多事,太難一一說清了。
他們管理了Open Zeppelin,一系列通過審查的,最佳的智能合約實踐,你能夠繼承並應用於你本身的DApp中。你能夠查看他們的github資源來學習更多。你應該讀一下里面的每個合約。
他們堅持代碼複用的理念,而後進一步建立了Zeppelin OS。你能夠忽略OS,它不是傳統意義上的操做系統的概念。zeppelinOS特性,工具和服務的集合,旨在提供穩固的開發人員體驗,同時最大限度地提升智能合同安全性。
zeppelinOS中的其中一部分是「zeppelinOS Kernel」。其實他們不是傳統意義上的核心,並且是一組庫。它們是經過庫模型實現的可升級的智能合約,能夠在出現安全問題時獨立的進行更新。由於你在合約內包含的代碼更少,部署也將花費更少的gas,而開發者也減小了代碼的重複。
zeppelinOS還有一些其餘整齊的規劃,好比調度程序(智能合約的異步執行,由於默認合同通常不會主動觸發某個行爲),市場級的協議和鏈下開發者體驗工具。
ENS - 以太坊的命名服務
ENS是一個去中心化的名稱註冊服務。並有一個描述性的項目名稱。
BAT
基礎注意力代幣 & Brave瀏覽器
BAT嘗試去中心化廣告系統,經過監控你們的注意力,並在內容提供商,廣告商和用戶之間分發收益,切掉中間人。
Brave和BAT由JS創始人Brendan Eich建立,同時他也是Mozilla的聯合創始人。
uPort
uPort在解決去中心化的身份識別問題。
district0x
district0x是一個更高層級的去中心化的市場和社區。核心是經過一系列的智能合約來管理用戶發佈信息,搜索,過濾信息,在社區內維護信譽,管理支付等等。它能夠用來建議如Ethlance和NameBazaar這樣的市場。
他們有很是棒的視覺設計。
Steem
Steem是區塊鏈上的reddit,它使用協議代幣(STEEM)來激勵這個社交社區的參與度。
在這裏查看白皮書。
有一些關於Steemit塊鏈如何啓動以及支持組織如何運做的反應。
參與者與領域內的玩家
ConsenSys
ConsenSys(有點像共識Consensus,但做爲一個公司名稱;它很聰明,巧妙的把u改爲了s,但我通常念爲「con-SEn-SIS」,避免讀錯)是一個「風險投資和產品工做室」。他們是一個(其實很是大)傘形組織,它贊助了一大堆項目和核心組件的開發。值得一提的是,它們資助了Truffle,Infura,MetaMask,Gnosis和uPort。
Zeppelin Solutions
Zeppelin Solutions在上面咱們有提到過,他也審查智能合約代碼,提供諮詢服務。他們的博客質量至關高。
Protocol Labs
Protocol Labs是一羣讓人印象深入的人,致力於IPFS,FileCoin,lip2p以及IPLD等其它項目的開發。瀏覽器