轉(zhuǎn)自藍(lán)狐筆記 0x:基于以太坊區(qū)塊鏈的去中心化交易所協(xié)議肄方,只用于自己學(xué)習(xí)
1. 什么是0x
0X是基于以太坊區(qū)塊鏈的去中心化交易所開源協(xié)議愁拭。這個(gè)協(xié)議是通過以太坊的智能合約來創(chuàng)建的纸镊,它的厲害之處就是可以讓任何人都能開設(shè)和運(yùn)行去中心化交易所悉尾。
就是說世澜,如果你想組織一個(gè)團(tuán)隊(duì)運(yùn)營一個(gè)去中心化的交易所,就可以用0x協(xié)議來進(jìn)行雀久,極大地降低了運(yùn)營數(shù)字資產(chǎn)和代幣交易所的難度宿稀。
現(xiàn)在每天的數(shù)字資產(chǎn)交易達(dá)到了幾十億美元,其中交易所的傭金收入達(dá)到數(shù)百萬美元赖捌,而且隨著未來成千上萬的數(shù)字資產(chǎn)上線祝沸,尤其是基于以太坊的代幣誕生,去中心化交易所的需求越來越強(qiáng)越庇。
另外罩锐,未來的世界很大概率會(huì)走向代幣化。它會(huì)成為未來公司或者其他組織的經(jīng)濟(jì)模式卤唉,現(xiàn)在看涩惑,只是區(qū)塊鏈公司早期融資用代幣,但未來桑驱,所有資產(chǎn)都可以代幣化竭恬,包括所有公司的股票、汽車熬的、房子等各種資產(chǎn)都可上鏈痊硕。代幣化將讓資產(chǎn)膨脹成千上萬倍,并且有極強(qiáng)的交易需求悦析。
0x最終來說寿桨,想要做一個(gè)賦能的驅(qū)動(dòng)者,給大家更好地的方法來創(chuàng)建去中心化交易所强戴,可以讓ERC20代幣間可以不通過任何第三方就可完成交易,比如說Augur 代幣和Omisgeo代幣之間不通過任何第三方完成直接兌換挡鞍。
2.0x跟各種交易所相比骑歹,有什么獨(dú)特之處?
1)首先跟中心化交易所相比墨微,更安全
中心化交易所很容易理解道媚,目前基本上所有參與過數(shù)字貨幣交易的人都使用過,比如火幣翘县、okcoin最域、云幣、幣安等锈麸。當(dāng)你購買各種數(shù)字貨幣時(shí)镀脂,你需要用法幣購買比特幣或以太坊等各種數(shù)字貨幣。中心化的交易所從用戶使用習(xí)慣上看忘伞,更符合用戶習(xí)慣薄翅,簡單易用沙兰,交易速度快。這是它獨(dú)特優(yōu)勢翘魄,另外鼎天,對(duì)于很多普通用戶來說,中心化交易所的托管式服務(wù)也更省心暑竟。
但是斋射,中心化交易所也有致命缺點(diǎn):一是容易被黑客攻擊,代幣被盜鹊纭罗岖;二是運(yùn)營者卷款逃跑。最后纱兑,還可能因?yàn)檎咴颍槐O(jiān)管關(guān)閉潜慎。Mt.Gox,Bitfinex等中心化交易所都經(jīng)歷過安全問題,讓用戶丟失了大筆資金铐炫,還有的交易所,比如poloniex倒信,coinbase等都遭受過DDOS攻擊。
這樣的結(jié)果導(dǎo)致了一些去中心化交易所的產(chǎn)生鳖悠,比如etherdelta等,這些交易所不用把資金存儲(chǔ)到運(yùn)營方進(jìn)行交易乘综,不用擔(dān)心黑客、運(yùn)營者卷款跑路卡辰、被關(guān)閉等問題胞皱。但九妈,去中心化交易所同樣也有問題:交易速度慢、交易規(guī)模小萌朱、費(fèi)用高(連取消訂單都會(huì)產(chǎn)生費(fèi)用)等宴树,體驗(yàn)比中心化交易所要差。
從目前局面看嚷兔,中心化交易所占據(jù)絕對(duì)優(yōu)勢森渐,去中心化交易所還處于早期做入,在相當(dāng)長時(shí)間內(nèi),兩者都有自己的空間同衣,不過長期看竟块,去中心化交易所在解決了速度慢等問題后,可能會(huì)逐步扭轉(zhuǎn)局面耐齐,并逐步取得優(yōu)勢浪秘。
2)其次跟去中心化交易所比,交易體驗(yàn)更好
目前的去中心化交易所普遍存在速度慢埠况、交易量小耸携、費(fèi)用高等問題。去中心化交易所的每筆訂單辕翰,不管是買入夺衍、賣出還是掛單、取消訂單等操作都進(jìn)入?yún)^(qū)塊鏈喜命,交易依賴區(qū)塊時(shí)間沟沙,不僅如此,每個(gè)操作都會(huì)產(chǎn)生網(wǎng)絡(luò)交易費(fèi)用壁榕。這是目前去中心化交易所的短板矛紫,這就是為什么出現(xiàn)了比特幣失竊的門頭溝事件之后,交易者還是首選中心化交易所的重要原因牌里。如果你使用過etherdelta進(jìn)行交易颊咬,你就知道關(guān)鍵時(shí)候等待是多么痛苦的一件事情。
0x協(xié)議其中的一個(gè)目標(biāo)就是要解決這些去中心化交易的問題牡辽,它把交易訂單移出區(qū)塊鏈喳篇,在結(jié)算時(shí)才移入鏈內(nèi),從而提升交易效率态辛,降低交易費(fèi)用杭隙。同時(shí),0x并不收取任何使用協(xié)議的費(fèi)用因妙,由各去中心化交易所的創(chuàng)建者來決定自己的收費(fèi)方式。
0x通過創(chuàng)建基于以太坊的標(biāo)準(zhǔn)協(xié)議票髓,讓所有人都可以交易ERC-20代幣和運(yùn)營去中心化交易所攀涵。基于0x協(xié)議的運(yùn)營者相當(dāng)于0x的中繼方洽沟,它們托管訂單,可以向代幣交易者收取服務(wù)費(fèi)裆操。
除了為中繼方提供標(biāo)準(zhǔn)協(xié)議服務(wù)之外,0x還有直接面向消費(fèi)者的產(chǎn)品昆烁,比如基于0x的OTC,可以讓交易雙方直接進(jìn)行以太坊ERC20代幣交易白粉,并且無須中繼者的交易所存在鸭巴。(另:0x的OTC在以太坊測試網(wǎng)絡(luò)上已經(jīng)開始運(yùn)行拦盹,用戶可以創(chuàng)建和廣播訂單,只須向?qū)Ψ桨l(fā)送鏈接即可恬口,并且可以通過任何方式發(fā)送鏈接楷兽,比如郵件华临、微博等社交媒體)
3.0x的解決方案
0x是基礎(chǔ)的創(chuàng)建區(qū)塊,可以作為Dapps的共享基礎(chǔ)設(shè)施揭厚,長遠(yuǎn)看筛圆,它是開源的技術(shù)標(biāo)準(zhǔn)椿浓,比封閉架構(gòu)更有優(yōu)勢。
在0x的白皮書上提到提岔,自動(dòng)做市商的智能合約是鏈上訂單簿的替代性方案碱蒙。它采用價(jià)格調(diào)整的模式。它的好處是容易對(duì)外部智能合約進(jìn)行整合哀墓。價(jià)格調(diào)整模式讓它們對(duì)市場流動(dòng)性非常敏感篮绰,自動(dòng)做市商對(duì)供給曲線施加了人為約束褒搔。如果價(jià)格調(diào)整模型太敏感星瘾,小額交易也會(huì)產(chǎn)生大的現(xiàn)價(jià)波動(dòng)。如果價(jià)格調(diào)整模型不敏感磕瓷,自動(dòng)做市商資金將很快被套利者消耗念逞。
另外,狀態(tài)通道被看作是以太坊區(qū)塊鏈擴(kuò)張的一種方式硕盹,還可減少不同應(yīng)用的費(fèi)用瘩例。狀態(tài)通道中的參與者來回傳遞加密簽名信息甸各,可累積中間狀態(tài)的變化趣倾,與此同時(shí)無須把它們發(fā)布到規(guī)范鏈,許多中間狀態(tài)改變可以鏈下累計(jì)善绎,直到鏈上完成結(jié)算涂邀。狀態(tài)參與者必須實(shí)時(shí)在線箱锐,以挑戰(zhàn)不誠實(shí)的參與方驹止,因此對(duì)于DDOS攻擊很脆弱。
為了解決這個(gè)問題衣洁,0x提出的解決方案是:鏈下訂單中繼抖仅,鏈上最終結(jié)算。它結(jié)合了狀態(tài)通道效率和鏈上訂單簿的快速結(jié)算环凿。加密簽名的訂單在鏈下廣播智听,這些訂單送進(jìn)鏈上智能合約以去信任化方式執(zhí)行渡紫。這樣,對(duì)于做市商(maker發(fā)起方)來說莉测,交易摩擦成本低捣卤。
1)鏈下訂單中繼和鏈上結(jié)算的基本步驟
Maker 批準(zhǔn)后欣喧,去中心化交易所的智能合約獲取賬戶要交易代幣(假設(shè)為A)的余額
Maker 創(chuàng)建一個(gè)訂單唆阿,要用代幣A交換目標(biāo)代幣(假設(shè)為B),確定具體的匯率闲询、截止時(shí)間等扭弧,并用私鑰加密簽名訂單
Maker可在任何媒體廣播訂單(twitter记舆、郵件、博客御蒲、論壇等)
Taker 獲取訂單并決定接受訂單
Taker 同意后厚满,去中心化交易所的智能合約獲取代幣B的余額
Taker 提交Maker簽名的訂單到去中心化交易所合約
去中心化交易所合約認(rèn)證Maker的簽名,確認(rèn)訂單沒有過期遵馆,確認(rèn)訂單沒有被交易丰榴,之后按確定匯率進(jìn)行代幣交換多艇。
每個(gè)訂單是一個(gè)數(shù)據(jù)包,包括訂單參數(shù)和加密簽名复隆。訂單參數(shù)通過Keccak SHA3功能鏈接并散列為32字節(jié)挽拂。maker用私鑰簽名訂單哈希以產(chǎn)生ECDSA簽名
訂單數(shù)據(jù)包數(shù)百字節(jié)大小骨饿,可以通過郵件、社交網(wǎng)絡(luò)绒北、即時(shí)通訊等任何媒介發(fā)送闷游。訂單只接收特定的taker的地址贴汪,竊聽者或外部第三方都無法接收。
2)訂單的廣播
買賣雙方要交易业簿,需要有一個(gè)流動(dòng)性的市場梅尤,可以進(jìn)行訂單發(fā)布,以形成訂單簿克饶。對(duì)于大多數(shù)項(xiàng)目團(tuán)隊(duì)來說矾湃,創(chuàng)建和運(yùn)營交易所需要耗費(fèi)巨大資金邀跃。而0x協(xié)議可以讓項(xiàng)目團(tuán)隊(duì)以較小成本維持交易所蛙紫,并自定義交易費(fèi)用。托管和維護(hù)訂單簿的主體都是一個(gè)中繼者坑傅。普通的中心化交易所創(chuàng)建和運(yùn)營基礎(chǔ)設(shè)施,需要管理交易和處理用戶資金蒜茴。而中繼者只需通過托管和傳播訂單簿來推動(dòng)市場交易粉私。這個(gè)過程中近零,中繼者并不代表交易者執(zhí)行交易久信,Taker必須自己執(zhí)行交易。
廣播訂單的信息格式也相對(duì)靈活入客。一是廣播訂單并不要求taker地址潮售,允許訂單被任何人接收;二是訂單的費(fèi)用值等參數(shù)都可以設(shè)置鞍泉。中繼者托管和維持一個(gè)鏈下的訂單簿咖驮,當(dāng)交易清算后,交易費(fèi)從maker或taker(也可能兩者都需要)轉(zhuǎn)到中繼者托修。其中:
中繼者創(chuàng)建費(fèi)用計(jì)劃和設(shè)置用于收取交易費(fèi)用的地址
maker創(chuàng)建訂單,設(shè)置fee A(代幣)和fee B(代幣)的值砚嘴,這些值滿足relayer的費(fèi)用計(jì)劃际长,設(shè)置fee接收人的地址兴泥,并用私鑰簽署訂單
maker把簽名訂單轉(zhuǎn)移到relayer
relayer接到訂單,檢查訂單有效性及要求費(fèi)用如绸。如果訂單無效旭贬,或不滿足relayer要求,訂單會(huì)被拒絕蜕提。如果滿足條件谎势,relayer把它發(fā)布到訂單簿
taker接收到訂單簿脏榆,其中包括maker的訂單簿
taker接受maker的訂單台谍,并提交到交易所的智能合約
這里面,雖然maker設(shè)置交易費(fèi)用坞生,但最終來說relayer控制進(jìn)入訂單簿的訂單是己,因此任柜,這里有一個(gè)平衡沛厨,maker想要把訂單發(fā)布到訂單簿逆皮,就需要滿足relayer参袱。Relayer也可以設(shè)置費(fèi)用計(jì)劃抹蚀,可以是固定費(fèi)用、按比例收取、按交易量收取或分層收取等模型竹观。但臭增,一單relayer接收了訂單,進(jìn)入了訂單簿誊抛,就不能改變拗窃。
傳統(tǒng)的交易服務(wù)是由交易所設(shè)定機(jī)制來進(jìn)行買賣雙方的匹配随夸,交易雙方必須相信交易所能提供最好的價(jià)格。而在0x驼修,所有的交易都是去中心化的诈铛,也就是說relayer不能像傳統(tǒng)的交易所那樣代表maker和taker進(jìn)行交易,relayer智能推薦耳峦,最終由taker決定簽名和發(fā)送交易到區(qū)塊鏈上妇萄。
3)智能合約
交易所協(xié)議是在以太坊智能合約上執(zhí)行,開放且免費(fèi)使用冠句,不會(huì)向用戶收取除gas費(fèi)用之外的任何費(fèi)用(執(zhí)行智能合約的必須費(fèi)用)懦底。它用solidity語言編寫,包括兩個(gè)相對(duì)簡單的功能:成交和取消丐重。整個(gè)合約大概100行代碼,大概需要花費(fèi)90k gas來成交訂單扮惦。
4)簽名確認(rèn)
交易所智能合約能夠認(rèn)證發(fā)起人使用ecrecover函數(shù)的簽名崖蜜,它將哈希和簽名哈希作為參數(shù)客峭,并返回產(chǎn)生簽名的公鑰舔琅。如果ecrecover返回的公鑰等于發(fā)起人的地址,該簽名是真實(shí)的备蚓。
Addresspublickey=ecrecover(hash,signature(hash));
If(publickey!=maker)throw;
5)成交和部分成交
交易所智能合約存儲(chǔ)之前每個(gè)成交的記錄星著,防止單個(gè)訂單多次成交。這個(gè)參考記錄存儲(chǔ)進(jìn)一個(gè)映射同欠,數(shù)據(jù)結(jié)構(gòu)可以映射一個(gè)32字節(jié)數(shù)據(jù)到256位未簽名整數(shù)铺遂。傳遞與一個(gè)訂單相連的參數(shù)到keccak SHA3函數(shù)可以產(chǎn)生唯一的32字節(jié)哈希茎刚,它可以用于唯一確認(rèn)的訂單(哈希沖突的可能性膛锭,發(fā)現(xiàn)兩個(gè)不同訂單擁有一個(gè)哈希蚊荣,現(xiàn)實(shí)上不可能)互例,每次一個(gè)訂單成交媳叨,影射存儲(chǔ)訂單哈希并積累成交值糊秆。
當(dāng)調(diào)用交易所智能合約成交功能時(shí)议双,一個(gè)taker通過制定附加參數(shù)實(shí)現(xiàn)部分成交平痰。只要部分成交的總額沒超過總訂單額度,多方部分成交就可能在單個(gè)訂單上執(zhí)行。當(dāng)試圖成交訂單時(shí)逾礁,Takers必須提供額外的參數(shù)嘹履。
6)截止時(shí)間
一個(gè)訂單的截止時(shí)間由maker指定,截止時(shí)間是一個(gè)未簽名的整數(shù)值砾嫉,它代表從unix紀(jì)元絕對(duì)秒數(shù)焕刮。簽名后值就不能改變配并。以太坊虛擬機(jī)的時(shí)間是由區(qū)塊時(shí)間戳來給定的溉旋,當(dāng)一個(gè)新的區(qū)塊被挖出來之后观腊,時(shí)間就出來了。因此苫耸,一個(gè)訂單的截止時(shí)間狀態(tài)并不依賴于一個(gè)taker廣播它們的成交意圖鲸阔,它依賴于一個(gè)礦工在EVM上執(zhí)行交易后的時(shí)間狀態(tài)迄委。
7)取消交易
一個(gè)沒有成交或到期的訂單可以由相關(guān)的maker通過交易所智能合約的取消功能進(jìn)行取消褐筛。取消功能映射一個(gè)訂單的哈希渔扎,對(duì)應(yīng)著訂單的最大值(valueA)晃痴,防止后續(xù)交易倘核。取消訂單花費(fèi)gas紧唱。該方法可能有一個(gè)尷尬情況:一個(gè)maker試圖取消交易隶校,與此同時(shí)漏益,一個(gè)taker試圖接收該訂單∩罡欤考慮到交易挖礦的序列有不確定性绰疤,會(huì)導(dǎo)致意料之外的結(jié)果。如果以太坊區(qū)塊鏈有大量的積壓訂單待處理舞终,不確定性就會(huì)增加轻庆。
8)ZRX代幣
跟其他代幣一樣,0x的ZRX代幣也是為了驅(qū)動(dòng)形成代理網(wǎng)絡(luò)敛劝,它想通過協(xié)議成為開源標(biāo)準(zhǔn)榨了,協(xié)調(diào)所有參與方,通過激勵(lì)促使大規(guī)模采用代幣攘蔽,在一個(gè)沒有中心治理下實(shí)現(xiàn)自運(yùn)行的網(wǎng)絡(luò)龙屉。
0x的代幣主要用于支付relayer的交易服務(wù)費(fèi),另外就是0x協(xié)議升級(jí)時(shí)的去中心化治理用转捕。根據(jù)ZRX代幣的擁有量,在協(xié)議升級(jí)等方面擁有相應(yīng)的影響力沉删。
9)去中心化的治理
一旦一個(gè)以太坊智能合約部署到區(qū)塊鏈,它的內(nèi)部邏輯不能改變殴穴。因此震桶,升級(jí)協(xié)議必須部署一個(gè)完全新的智能合約尊残,要么對(duì)網(wǎng)絡(luò)分叉拐邪,要么升級(jí)用戶和處理流程婶芭,直到選擇最新版本惰赋。交易場景下,協(xié)議升級(jí)可以讓所有公開訂單無效,并要求每個(gè)市場參與者批準(zhǔn)新的智能合約來獲取它們的交易余額」喏ǎ或者,協(xié)議分叉成為兩個(gè)版本運(yùn)營鸵钝。盡管智能合約可以持續(xù)地集成升級(jí)到協(xié)議中必逆,同時(shí)不會(huì)中斷更高級(jí)的進(jìn)程粟矿,這樣的升級(jí)機(jī)制可能給終端用戶帶來極大的安全隱患。(最壞情況是,攻擊者可以獲得用戶資金的訪問權(quán)限。)
協(xié)議代幣可用于驅(qū)動(dòng)去中心化的升級(jí)機(jī)制,允許把升級(jí)持續(xù)地集成到協(xié)議中队询,與此同時(shí)也能保護(hù)協(xié)議用戶和持有人范嘱。
一開始,一個(gè)簡單的多方簽名合約將用于去中心化的治理,最后會(huì)有一個(gè)復(fù)雜的DAO產(chǎn)生厦章。0x協(xié)議和它原生代幣將不會(huì)對(duì)用戶強(qiáng)加非必要的費(fèi)用群发,或者從relayer那里抽取費(fèi)用栏尚。
股份持有人提出和選出協(xié)議改善計(jì)劃古劲,通過DAO用完全新的智能合約執(zhí)行闷堡。DAO批準(zhǔn)新的智能合約以獲取用戶的代幣弯菊,獲取的方式是增加它們到代理協(xié)議的白名單才漆,并且最終不上不推薦的協(xié)議版本。
10)代幣注冊(cè)
訂單由十六進(jìn)制字節(jié)碼組成,機(jī)器可讀船响,不適合普通用戶閱讀菱蔬。代幣注冊(cè)合約將用于存儲(chǔ)ERC20代幣的列表,每個(gè)代幣都有相關(guān)的元數(shù)據(jù):名稱家制、符號(hào)、合約地址讨阻、表示代幣的最小單元所需的小數(shù)(需要確定匯率)棘催。注冊(cè)將用于官方的鏈上參考,可以被是參與者使用症脂,在執(zhí)行交易前用來獨(dú)立確認(rèn)代幣地址和交易匯率。代幣注冊(cè)將用作可信的信息資源,監(jiān)管是必須的荡灾,包括從注冊(cè)處增加、修改或移除代幣鸵隧。0x股份持有人將提供監(jiān)管。
未來協(xié)議的訂單格式可修改,便于用戶閱讀恩够。代幣在代幣注冊(cè)處顯示為3個(gè)字母而不是代幣合約地址。以太坊域名服務(wù)(ENS)可用于確認(rèn)maker旬痹、taker、relayer峰鄙,這些都是要變成用戶可讀的名稱,比如“theDunkle.eth”,而不是賬戶或合約地址熊锭。
4.結(jié)語
總的來說,0x是基于以太坊區(qū)塊鏈的p2p的ERC20代幣交易所協(xié)議锌妻。它有標(biāo)準(zhǔn)的開源協(xié)議、通用的創(chuàng)建區(qū)塊贮预,在分布式應(yīng)用中實(shí)現(xiàn)交易功能的互操作性仿吞∧愫纾基于0x協(xié)議的去中心化應(yīng)用可以進(jìn)入公開的流動(dòng)池董饰,或創(chuàng)建自己的流動(dòng)池诈嘿,并在收取一定的手續(xù)費(fèi)螃宙。根據(jù)白皮書所坯,主要特點(diǎn)如下:
鏈下訂單中繼+鏈上結(jié)算=市場maker(發(fā)起者)低摩擦成本+快速結(jié)算
開放可獲取的智能合約谆扎,讓任何Dapp都能使用
中繼者可以創(chuàng)建它們自己的流動(dòng)池,并根據(jù)交易量收取交易費(fèi)
標(biāo)準(zhǔn)化+解耦=共享協(xié)議層
提供dapps間的互操作性
創(chuàng)造流動(dòng)性的網(wǎng)絡(luò)效應(yīng)芹助,這讓大家受益
降低進(jìn)入門檻堂湖,降低市場參與者的成本
消除冗余,提高用戶體驗(yàn)和智能合約安全
去中心化的升級(jí)機(jī)制状土,允許升級(jí)改善可以持續(xù)而安全地集成到協(xié)議中无蜂,并且不會(huì)打擾dapps或用戶。
總之蒙谓,0x協(xié)議試圖把信息傳輸從應(yīng)用層轉(zhuǎn)入?yún)f(xié)議層斥季,從而實(shí)現(xiàn)dApp間的互操作性。但0x也有其弱點(diǎn)累驮,比如taker必須在線匹配明確訂單酣倾,撮合實(shí)時(shí)性較差,另外OTC方式暫時(shí)無法顯示復(fù)雜訂單撮合谤专。
上圖是目前的運(yùn)營現(xiàn)狀躁锡,2017年10月22號(hào)一天的交易量已經(jīng)有了2萬多美金,相對(duì)于很多還在計(jì)劃中的項(xiàng)目來說置侍,0x已經(jīng)有了自己的開始稚铣。