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