0
雷鋒網(wǎng)AI金融評(píng)論按:加密貨幣市場(chǎng)的繁榮離不開蓬勃發(fā)展的交易所的支撐,Poloniex、Bittrex、Bitfinex、Yunbi、Okcoin、Kraken、Liqui等等,它們?yōu)閰^(qū)塊鏈?zhǔn)袌?chǎng)的資產(chǎn)代幣化發(fā)展提供了全球化全天候的充足流動(dòng)性。然而這些中心化交易所存在一些顯著的風(fēng)險(xiǎn)和問題。因此基于區(qū)塊鏈去中心的特性在區(qū)塊鏈網(wǎng)絡(luò)上來(lái)搭建去中心化交易所的嘗試,看起來(lái)就順理成章了。
然而去中心化交易所目前還屬于比較年輕的技術(shù),對(duì)很多人來(lái)說(shuō)都有些陌生。日前hackernoon知名博主Dominiek Ter Heide發(fā)布博文,簡(jiǎn)單探討了去中心化交易所的內(nèi)部運(yùn)作。雷鋒網(wǎng)為您做如下編譯:
世界上大多數(shù)的加密貨幣交易都是通過(guò)Coinbase / GDax,Binance,Bittrex等中心化交易所完成的。這些交易所管理著人們的資本(和私人密鑰)并幫助交易。在過(guò)去的幾年乃至幾周中,發(fā)生過(guò)一些高調(diào)的黑客事件,竊取了大量的資金。我認(rèn)為,在短期內(nèi)這個(gè)問題不太可能得到解決,且只會(huì)變得更糟。軟件和硬件越來(lái)越復(fù)雜,這將導(dǎo)致更嚴(yán)重的安全漏洞,例如英特爾CPU固件中最近發(fā)生的熔斷和幽靈漏洞。
去中心化交易所也被稱為DEX,是一種促使在分布式賬本上進(jìn)行加密貨幣交易的新技術(shù)。這些交易所將資金和交易的控制權(quán)交還給用戶,消除了單個(gè)故障點(diǎn)。其次,政府征稅或資金沒收幾乎不可能再發(fā)生。這對(duì)宏觀經(jīng)濟(jì)和地緣政治格局可以說(shuō)具有深遠(yuǎn)的長(zhǎng)期影響。
然而,DEX技術(shù)仍然年輕,仍然有相當(dāng)多不足之處,包括某些攻擊途經(jīng)。在這篇文章中,我們將研究去中心化交易所的內(nèi)部運(yùn)作。
有一個(gè)叫做0x(Zero X)的流行項(xiàng)目。該項(xiàng)目的目標(biāo)是為基于以太坊的去中心化交易所提供開放協(xié)議。該項(xiàng)目還出售$ ZRX代幣,目前交易市值 5.42億美元。(順便說(shuō)一句,我持有其中一些)。該代幣的目的是為智能合約和協(xié)議提供治理機(jī)制。
0x有一些很好的想法,開源代碼應(yīng)用現(xiàn)象和文件記錄。然而,我不確定0x要如何通過(guò)去中心化交易來(lái)盈利,以及如何維持5.42億美元的市值。
基本上來(lái)說(shuō),0x白皮書很好的描述了EtherDelta去中心化交易所。EtherDelta是首批具備吸引力的去中心化交易所之一。它主要基于以太坊運(yùn)行,其最近的智能合約價(jià)值約為1.4億美元。即使是最懂技術(shù)的用戶,也覺得它們的用戶界面很難使用,因此這個(gè)數(shù)額可以說(shuō)是相當(dāng)驚人的。
了解EtherDelta交易所如何工作,就能讓我們透徹的了解去中心化交易所的當(dāng)前狀態(tài),以及0x將如何運(yùn)行。0x的本質(zhì)是具有更好的代碼和附加功能的EtherDelta。
下面我們將分析合同中最重要的兩個(gè)方面:資金管理和交易邏輯。
EtherDelta智能合約
以太坊智能合約是能夠以分布式和不可變的方式在以太坊區(qū)塊鏈上執(zhí)行的代碼塊。EtherDelta和基于以太坊的交易所的核心邏輯就在于這些智能合約。與傳統(tǒng)的編程相比,實(shí)施這些智能合約就像是發(fā)射火箭。需要超級(jí)安全和強(qiáng)大,因?yàn)槿魏五e(cuò)誤都可能導(dǎo)致巨額的資金損失。
智能合同通常是用人類可讀的語(yǔ)言(稱為Solidity)編寫的,被編譯成以太坊虛擬計(jì)算機(jī)指令(Ethereum Virtual Machine instructions,簡(jiǎn)稱EVM指令)。這些EVM指令實(shí)際上是人類無(wú)法讀取的。有些項(xiàng)目選擇永遠(yuǎn)不共享智能合約的“Solidity”代碼,通過(guò)隱匿實(shí)現(xiàn)安全性。例如,Crypto Kitties(加密貓咪)遺傳多樣性智能合約就是“閉源”的。即便如此,從理論上講,我們通常都能夠把智能合約的原始結(jié)構(gòu)拼湊起來(lái),所以閉源智能合約總讓人感到厭倦。
EtherDelta合同的Solidity代碼可以在Etherscan這里免費(fèi)獲得:https://etherscan.io/address/0x8d12a197cb00d4747a1fe03395095ce2a5cc6819
資金管理
EtherDelta將資金控制權(quán)完全給了用戶。即便如此,要使用EtherDelta資金,需要將其轉(zhuǎn)移到智能合約中。資金基本上集中在智能合約中,但全部在分布式賬本上完成。我知道這令人困惑。歸根到底,在任何時(shí)候用戶都可以在沒有任何第三方介入的情況下提取或存入資金。
EtherDelta資金管理Solidity代碼
正如你在上面的摘要中所看到的,有兩種移動(dòng)資金的機(jī)制。一個(gè)是針對(duì)移動(dòng)ETH——也就是以太坊的本幣。另一個(gè)是移動(dòng)代幣ERC20。事實(shí)上,現(xiàn)在大多數(shù)ICO和可交易代幣實(shí)際上就是基于太坊區(qū)塊鏈的ERC20代幣。以太坊提供了處理這些標(biāo)準(zhǔn)代幣的特殊機(jī)制。
您可能會(huì)注意到,在上面的代碼中,只有一種方法被標(biāo)記為“應(yīng)付”。這是Solidity的一個(gè)安全機(jī)制,明確允許將ETH資金發(fā)給該調(diào)用。任何客戶要存儲(chǔ)代幣都需要執(zhí)行額外的步驟,來(lái)授權(quán)ERC20代幣的轉(zhuǎn)移。
EtherDelta的資金管理看起來(lái)非常穩(wěn)固。一些智能合同有管理員用戶吸取資金的機(jī)制。IDEX分散交易智能合約就是這種情況。人們對(duì)這樣的機(jī)制應(yīng)該是很不耐煩的。
交易邏輯
在EtherDelta中,新的市場(chǎng)訂單可以“鏈上”或“鏈下”存儲(chǔ)。鏈上存儲(chǔ)意味著它們被存儲(chǔ)在智能合約中,鏈下則意味著存儲(chǔ)在第三方如中央服務(wù)器中。在實(shí)踐中,由于成本和速度的影響,EtherDelta沒有鏈上存儲(chǔ)訂單。相反,它們使用以下機(jī)制。
人們可以為給定的ERC20代幣提交一個(gè)公開的買入或賣出定單——用交換術(shù)語(yǔ)來(lái)說(shuō),這個(gè)人就是Maker。另一個(gè)交易者可以瀏覽這些訂單,并選擇執(zhí)行它們——這個(gè)人被稱為Taker。
接下來(lái),使鏈下訂單開始運(yùn)轉(zhuǎn)的關(guān)鍵因素來(lái)自區(qū)塊鏈的核心——橢圓曲線數(shù)字簽名算法 ,也可以簡(jiǎn)稱為ECDSA。這是不對(duì)稱密碼的一個(gè)特殊變體,它允許公鑰和私鑰加密以及簽名驗(yàn)證——所有這些都以有利于計(jì)算的方式進(jìn)行。
在較高層面來(lái)說(shuō),這是它在EtherDelta中的工作原理:
Maker創(chuàng)建一個(gè)新的訂單:ERC20代幣,它的數(shù)額,它的ETH金額,以及是買入還是賣出訂單。
Maker創(chuàng)建該訂單的密碼散列(使用SHA3)
然后Maker使用以太坊私鑰為訂單散列簽名(使用ECDSA,還有特別是在比特幣中也使用的Secp256k1來(lái)實(shí)現(xiàn))
Maker在鏈下發(fā)送訂單以及簽名(在EtherDelta中,這一個(gè)步驟通過(guò)一組服務(wù)器用WebSockets傳遞JSON消息來(lái)完成)
當(dāng)Taker想要與該訂單進(jìn)行交易時(shí),簽名和訂單信息被發(fā)送到智能合約的交易功能。
智能合約驗(yàn)證簽名來(lái)源于Maker
智能合約確認(rèn)訂單沒有過(guò)期或已經(jīng)履行
資金轉(zhuǎn)移并收取費(fèi)用。
步驟5到7發(fā)生在合同代碼的以下關(guān)鍵位置:
代碼的第5行中,訂單的金額、價(jià)格、到期日期和被稱為nonce的一次隨機(jī)數(shù),一起生成一個(gè)散列。這個(gè)散列是一個(gè)32字節(jié)的序列,代表一個(gè)獨(dú)一無(wú)二的市場(chǎng)訂單。
第7行首先檢查鏈上訂單簿(是未使用過(guò)的訂單簿),如果沒有鏈上訂單,則對(duì)簽名進(jìn)行驗(yàn)證。
此簽名驗(yàn)證采用由Maker簽署的訂單——并驗(yàn)證是否源自Maker的帳戶地址。如果訂單參數(shù)有任何更改,該散列將需要不同的簽名。
一旦驗(yàn)證完成,tradeBalances功能將圍繞金錢并收費(fèi)。
必須指出的是,首先是從(活躍的)Taker處收錢,最后只記入Taker借方。我認(rèn)為這對(duì)合同的安全至關(guān)重要,因?yàn)橛锌赡軙?huì)發(fā)送(并驗(yàn)證)一個(gè)錯(cuò)誤的用戶地址。如果這是有意為之,會(huì)很容易讓Taker賠錢??梢姡Wo(hù)這樣的軟件安全是多么棘手和具有挑戰(zhàn)性。
我們現(xiàn)在已經(jīng)簡(jiǎn)單的回顧了基于以太坊的DEX的本質(zhì)。0x項(xiàng)目還有很多的內(nèi)容,比如鏈下訂單管理的開放標(biāo)準(zhǔn),經(jīng)過(guò)充分測(cè)試和記錄的智能合約,更多類型的交易機(jī)制等等。但是在DEX的核心,都使用了相同的基本流程和密碼原則。
但據(jù)目前以德的表現(xiàn)來(lái)說(shuō),在安全、可信方面,協(xié)議仍有許多待完善之處。
在以后的文章中,雷鋒網(wǎng)將繼續(xù)為您編譯一些關(guān)于DEX以及以太坊智能合約的內(nèi)容,敬請(qǐng)期待。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。