DUO Network以智慧合約為核心的分級通證系統

買賣虛擬貨幣
20 世紀最偉大的經濟學家之一,諾貝爾經濟學獎獲得者哈耶克在他 1976 年的著作《貨幣的非國家化》中提出“私人貨幣自由競爭”的概念。哈耶克認為政府對貨幣的壟斷沒有合理的緣由,相反地,他提出允許金融機構和私人發行貨幣,並透過自由競爭選出最好的貨幣。他認為貨幣價值的穩定性是貨幣認可度的決定性因素。近年來虛擬貨幣的火速發展讓哈耶克的觀點再次進入大眾視野。在去中心化和隱秘性的突破使虛擬貨幣在私人貨幣自由競爭中先拔頭籌。但大多數虛擬貨幣價格波動極大,除了吸引投機者外並無主流使用價值。基於國際經濟學的三元悖論,我們提出虛擬貨幣的三難選擇,經濟不可同時兼得以下三種目標。如果同時追求其中兩種,則需要放棄第三種。a) 可以嚴格控制的貨幣供給b) 區塊鏈生態經濟的快速發展c) 區塊鏈自身貨幣的價格穩定
絕大多數區塊鏈經濟都擁有嚴格的貨幣供應和飛速增長的使用者和交易量。然而這導致貨幣價值的極大波動,吸引了大量投機者炒作價格,導致這類虛擬貨幣不適合應用於主流支付方式或資產抵押品。以作為區塊鏈智慧合約先驅的以太坊為例,其網路上流通的以太幣(ETH)本身具有兩種相互矛盾的經濟屬性。一方面,使用者在享用智慧合約服務時需要使用以太幣支付合約執行燃料費以及付給礦工的挖礦激勵;另一方面,以太幣作為市值前三的數字資產,其對法幣的交易價格波動巨大且被投資人長期看漲。如果能夠把虛擬貨幣的流通屬性與資產屬性分離開,並提供給不同需求的使用者使用。這將會是對區塊鏈經濟的巨大貢獻與創新,也是很多穩定幣設計的初衷。現有的解決方案通常需要抵押外部資產(法幣或黃金),違背了去中心化系統的初衷。 我們將利用智慧合約,將以太幣的價值拆分為兩種代幣:一種是具價格穩定屬性的穩定幣,滿足支付及低風險使用者的需求;另一種是具有槓桿屬性的投資品,符合高風險使用者的需求。DUO 體系DUO 體系是由分級代幣、智慧合約和一系列支援元件組成的去中心化應用系統 。設計原型為在美國與中國股市執行多年的分級基金。該產品將指數基金分解成兩種 ETF 產品,一種具有穩定收益(類似債券),一種具有槓桿屬性(類似股票),為普通股票投資者提供了一種便捷地參與固定收益和槓桿收益的方式。我們研究發現,基於區塊鏈的數字資產也可以透過類似規則分離成低波動性穩定屬性和高波動性槓桿屬性的兩部分,而智慧合約可以以去中介的形式實現絕大部分操作。
1.分級代幣A 級代幣 也稱為穩定幣,其資產淨值初始為 1 美元,隨時間穩定上升,在下一次折算時獲取收益,資產淨值重置為 1 美元。淨值上升與重置交替進行,由此確保 A 級代幣持有者獲得穩定收益。A 級代幣還可以分解成 A’和 B’或 A0 和 A1,進一步降低波動性,對此我們在學術白皮書中有更多探討。B 級代幣 也稱為槓桿幣,B 級代幣持有者為 A 級持有者抵禦了母基金的風險,由此獲得更高的資產槓桿。2.資產託管智慧合約Beethoven 合約 作為 DUO 體系的核心,託管以太幣(ETH),並自動執行多個運作流程,包括分級代幣的拆分與合併、計算淨值、執行折算等。3.拆分與合併
使用者可以透過往 Beethoven 轉入以太幣來執行拆分操作。Beethoven 在收到以太幣時會自動創設等量的 A 級代幣和 B 級代幣,並將生成代幣存入相應地址。Beethoven 託管所有使用者打入的以太幣,任何使用者均可透過第三方應用如 Etherscan.io 查詢託管的資產,合約創設者不被賦予轉移資產的權利。代幣持有者可以透過執行合併操作兌換以太幣,具體步驟為:使用者傳送等量的 A 級和 B 級代幣到 Beethoven,Beethoven 將其兌換成等值以太幣並轉給使用者。

4.收益解釋

以太幣取得的全部收益在扣除支付給 A 級的固定收益後,剩下的全部由 B 級獲得。以下例子用來解釋分級代幣收益情況。

如一個以太幣價格是 1000 美元,那麼打入 1 個以太幣到智慧合約將獲得 500 個 A 級代幣以及 500 個 B 級代幣,假如規定 A 級代幣的年化收益是 12% ,即每個季度的收益是3% 。

情景一:三個月後,以太幣獲利 20%, 由 1000 美元漲到了 1200 美元。 A 級獲得 15 美元的收益 (回報率 3%),B 級獲得 185 美元的收益,B 級的回報率為 185/500 = 37%。

情景二:三個月後,以太幣虧損 10%, 由 1000 美元跌至 900 美元。 A 級獲得 15 美元的收益(回報率 3%),B 級承擔 115 美元虧損,B 級的回報率為 -115/500 = -23%。

情景三:三個月後,以太幣價格持平,仍為 1000 美元。A 級獲得 15 美元的收益 (回報率3%),B 級承擔 15 美元虧損,B 級的回報率為 -15/500 = -3%。

簡單來說,代幣分級的實質是 B 級持有者向 A 級持有者進行融資,並且以 B 的資產保證 A的本金和利息。因此無論是盈利或虧損,B 的波動都會大於以太幣。所以,B 屬於槓桿投資,風險和收益都相應放大。一旦以太幣價格上漲,B 的槓桿率隨之下降,反之亦然。


5.折算

使用者選擇 B 級代幣的主要原因是其槓桿屬性,所以 B 級代幣需要保持一定的槓桿率才有吸引力。相應的,使用者選擇 A 級代幣是看重 B 級對自身本金的保護作用,一旦 B 的淨值過低就無法確保 A 的穩定收益。為了維持 B 級槓桿率並同時確保 A 級穩定收益,我們設計了上折和下折的機制來分別應對槓桿過低和過高的情況。

當 ETH/USD 的價格上漲到一定程度,就會執行上折減少 B的淨值,增加 B 的槓桿率。B 級持有者的收益將以 ETH 的形式兌現。

當 ETH/USD 的價格下降到一定程度,就會執行下折減少 B 的槓桿,並增加 B 的淨值。在這種情況下,A 級和 B 級的總量將打折,A 級持有者將以 ETH 的形式兌現其穩定收益和部分本金。

6.去中心化槓桿交易/借貸

資產託管智慧合約可以讓我們將 DUO 體系的設計理念延展到其他場景:使用其他 ERC-20通證作為抵押或者使用任何交易對的價格來源。

比如透過修改資產託管智慧合約,我們能以 0x 通證(ZRX)作為抵押和使用 ZRX/BTC 作為價格來源。這樣 A 級代幣會錨定 BTC 價格,而 B 級代幣能獲得更高的 ZRX/BTC 槓桿。

再比如以 ETH 作為抵押並使用 ETH/EOS 作為價格來源的資產託管智慧合約可以提供錨定EOS 的 A 級代幣以及能獲得更高 ETH/EOS 槓桿的 B 級代幣(即看空槓桿 EOS/ETH)。

所有 DUO 體系下的智慧合約都基於以太坊,透過分散式預言機網路獲取交易對價格。


DUO 體系通證

從產品設計的角度看,DUO 體系需要一種通證體現體系的成長性。完善的社羣獎勵和擴張機制與體系的發展密切相關,因此催生了 DUO 體系的功能型通證。

DUO Network Token 是在以太坊釋出的 ERC-20 通證。作為 DUO 體系的功能型通證限量發行,DUO 通證主要用於支援 DUO 體系中智慧合約的操作。

相關法律法規可能會影響 DUO 通證模型的設計。我們旨在與 DUO 體系社群的溝通中儘可能做到公開透明,及時反饋任何最新情況。

1.轉化套利

由於分級代幣可以在公開市場中交易,可能出現市值與淨值偏離的情況,由此也產生了套利機會。當兩種分級代幣合起來的價格高於對應 ETH 的市值,交易員可將低價的 ETH 拆分成分級代幣並在公開市場高價賣出實現套利。相反的,如果兩種分級代幣價格之和低於對應ETH 的市值,交易員可透過低價買入分級代幣來合併並賣出高價的 ETH 實現套利。

為了參與套利,交易員需要實時關注市場價格並執行相應的套利操作。

2.通證激勵(挖礦)

市場上供求關係的變動會導致分級代幣價格的波動。DUO 體系鼓勵市場參與者進行合理的套利,因為套利行為有利於分級代幣價格的穩定。作為激勵,DUO 體系將向套利者定期發放 DUO 通證。通證激勵額度將和會員的拆分合並的數量以及持有 DUO 通證的數量相關。

3.轉化費

拆分和合並代幣的時候,Beethoven 會收取少量費用作為轉化費。使用者可以選擇以 ETH 或DUO 支付這部分費用。為了鼓勵使用者使用 DUO,在早期用 DUO 支付轉化費可以享受一定程度的優惠。作為轉化費回收的 DUO 將被銷燬,直到系統中只剩發行量 50%的通證。

轉化收取的 ETH 將主要被用作體系的運營開銷,包括價格獲取、燃料費等。餘下的 ETH 將會作為用於保持體系價格穩定、流動性以及市場宣傳的儲備。

Beethoven 的收入屬於 DUO 社羣,我們將會設立對應的非盈利法人實體管理這些收入。

4.通證分配

DUO 通證總量 = 100,000,000 DUO


使用者結構

套利者

此類使用者透過拆分合並套利獲利並獲取挖礦獎勵。這些套利者會需要實時監控分級代幣的市價並在合適時機進行拆分或合併。作為提供流動性和穩定價格的回報,部分套利人將獲得額外的 DUO 通證獎勵。

A 級持有者

A 級代幣持有者期望代幣資產價格穩定,且具有穩定的固定並獲得穩健收益。這些目標使用者包括虛擬貨幣基金,幣圈服務提供商,ICO 專案團隊,交易所以及低風險型投資者。當整個虛擬貨幣市場震盪的時候,A 級代幣是理想的避險資產。

由於 A 級代幣短中期價值穩定,很適合用於數字貨幣交易的中間代幣。與其他的穩定幣相比,買賣 A 級代幣並不收取額外的交易費用,其價格隨著時間也會穩定上漲。

B 級持有者

B 級持有者通常是追求高槓杆的投機者,他們對 ETH 的價格持有樂觀預期,並尋求借入更多的資金投資 ETH。

當 ETH 價格下降時,B 級淨值降低,其槓桿隨之上升。通常認為,當市場下行的時候,投資者會變得更加保守。而學術研究表明,普通投資者願意為高槓杆付出更高的溢價。因此對於 B 級代幣,當市場下行的時候,會因其槓桿升高而變得更具吸引力。


技術

1.設計與框架

1.1 系統與平臺

系統主要由在以太坊(ETH)區塊鏈上執行的智慧合約、在雲端執行的報價器,事件觸發器和網頁 APP 這三個主要模組構成。

我們在以太坊區塊鏈上部署了 DUO 體系通證合約、A 級通證通證合約、B 級通證通證合約和 Beethoven 合約 4 個智慧合約。前 3 個智慧合約是標準 ERC20 通證,而Beethoven 是實現 DUO 體系架構的主體智慧合約。使用者可以直接同這些合約進行互動,或者透過我們的網頁 APP 來進行操作。

我們在 AWS、Azure 及 GCP 上各獨立設定了一組報價器,每一組都在執行同樣的獲取和綜合價格的演算法,然後 Beethoven 從這三個報價器的價格中決定共識價格。使用者可以透過我們的應用或在區塊鏈上直接檢視所有發到 Beethoven 的資料。

Beethoven 傳送出的 StartPreReset 和 StartReset 兩個事件會啟動觸發器。當這兩個事件被髮送後,觸發器會傳送指令到區塊鏈來觸發對應的函式,執行狀態轉化。

1.2 狀態轉化

狀態

Inception:創世狀態。一旦從此轉化就不能再回到這個狀態。此狀態只能轉化到 Trading 狀態。

Trading:通常狀態。我們預期系統絕大部分時間都會處於這個狀態。可以使用所有的功能。此狀態只能轉化到 PreReset 狀態。

PreReset: 在折算 開始前 等待以太坊 網路同步交易的狀 態。絕大多數Beethoven 的功能將會在這個狀態被禁止使用,A 級和 B 級通證無法被交易。此狀態可以轉化到以下三種狀態。

UpwardReset:執行上折的狀態。此狀態只能轉化到 Trading 狀態。
DownwardReset:執行下折的狀態。此狀態只能轉化到 Trading 狀態。
PeriodicReset:執行定折的狀態。此狀態只能轉化到 Trading 狀態。

轉化

以下是狀態轉化的簡圖。合約處於 Trading 狀態時會從報價器接收 ETH/USD價格。當 A 級或 B 級通證的淨值(NAV)超過了預先設定的值時,合約會轉化到 PreReset 狀態。PreReset 觸發器會將合約轉化到 UpwardReset、DownwardReset 或 PeriodicReset 中的一個狀態。最後 Reset 觸發器會將合約從折算狀態轉化回 Trading 狀態。

1.3 報價器

獲取交易

透過 Bitfinex、Kraken、Coinbase/GDAX 以及 Gemini 的 API 中獲取ETH/USD 的交易資訊,將交易 ID、成交價、交易量以及時間戳存入資料庫。

價格聚合

綜合成交價格的演算法如下:

1) 每個交易所中:

a. 將 1 小時拆分為 12 個 5 分鐘的間隔
b. 將每小時最後 5 分鐘的交易量加權中位成交價作為此小時的定價
c. 如果最後 5 分鐘間隔沒有交易,則使用上一個發生交易的區間
d. 如果上個小時沒有交易,在聚合價格時忽略這個交易所

2) 全體:
a. 取上個小時所有有效交易所聚合價格的交易量加權平均數作為這個小時的總聚合價格。交易量權重排名第一的最多佔 35%價格權重、第二最多佔 30%、第三最多佔 25%、第四最多佔 20%、第五最多佔 15%

b. 如果所有交易所都沒有有效價格,則使用上一個小時的總聚合價格

提交價格

我們一共有 3 個報價器(分別在 AWS、Azure 和 GCP 3 個不同的平臺)將每小時的綜合價格提交至 Beethoven。這樣做的目的是將駭客攻擊報價器的風險最小化。即使三臺伺服器中的兩個被入侵,只要剩下一臺還在正常工作,駭客
就無法確保能成功操控價格。

報價器每隔 1 個小時會傳送價格到合約,合約每次收到價格後會進入 50 分鐘的冷卻期,在冷卻期傳送的價格會被合約忽略。如果智慧合約在冷卻期過後收到來自同一伺服器的多個價格提交,那麼除了第一次提交會被接受,其他的提交都會被忽略。如果第一個提交價格與上一個小時的智慧合約定價相差在 5%以內,Beethoven 會立即使用收到的價格作為最新定價;否則,Beethoven 會等待第二個價格。

如果第一個價格沒有被接受,合約會等待第二個價格。當第二個價格在第一個價格的冷卻期之後抵達 Beethoven 合約,如果第二個價格的傳送者與第一個相同,智慧合約就會立即接受第二個價格。如果第二個價格的伺服器與第一個不同,第一個價格則會被接受。當第二個價格在第一個價格的冷卻期之內到達 Beethoven 且第二個價格的伺服器與第一個不同,合約會首先比較兩個價格的到達時間。如果第二個價格的到達時間在預期範圍內,智慧合約會比較兩個價格的值。如果兩個價格的差距在接受範圍內,第一個價格會被接受,否則智慧合約會等待第三個價格。

在第一個價格到達後的冷卻期之內所有來自第一或第二臺伺服器的價格都會被拒絕。當第三個價格在第二個價格的冷卻期之後到達 Beethoven,智慧合約會檢查傳送伺服器是否跟之前傳送價格的伺服器相同。如果第三個收到價格的伺服器與之前伺服器不同,合約會接受第二個價格。如果伺服器與之前任意一個伺服器相同,則會接受第三個價格。

如果由第三個伺服器發出的第三個價格在第二個價格的冷卻期之內抵達,Beethoven會檢查與第一個價格抵達時間的差值。如果差值過大,接受第一個價格。如果差值在可接受範圍內,則取三個價格的中位數。

下圖是 Beethoven 選擇價格的邏輯:


1.4 折算

使用者會在三種折算中的任意一種發生後獲得 ETH。我們假設體系內的使用者會將收到的 ETH 重新轉化為 A 級和 B 級通證並且需要額外支付轉化費。因此在實際應用中,Beethoven 會在折算後直接將 ETH 以 A 級和 B 級通證的形式發給使用者,不收取任何費用。為了方便使用者,三種折算的轉化邏輯各有一些細微的差別:

上折:A 級通證持有者會收到 A 級通證作為補償,而 B 級通證持有者收到的 B 級通證會多於 A 級通證(非 1:1)。可以想象成 B 級通證持有者用收到的一部分 A 級通證換取了 A 級通證持有者收到的所有 B 級通證。系統中的 A 級通證和 B 級通證總量比例還是 1:1(目前設定中,上折後 B 級通證持有者收到的 A 級通證數量嚴格一定大於 A 級通證持有者能收到的時候到的 B 級通證數量)。因此 A 級通證持有者可以在上折後依然只持有 A 級通證,並不需要做額外轉化。

下折和定折:折後 A 級和 B 級通證持有者都以 1:1 的比例收到 A 級通證和 B 級通證,類似無需轉化費用的標準拆分。

1.5 地址和餘額閾值

理論上所有持有 A 級或 B 級通證的賬戶都應該執行折算。因此每次拆分和轉賬發生中,使用者地址都會被記錄到一個陣列中。折算發生時,Beethoven 會迴圈這個陣列並調整每個地址 A 級和 B 級通證的餘額。目前以太坊一個交易的燃料限制是 800 萬,且Beethoven 調整每個地址需要花費 20,000 單位的燃料,因此我們一個交易中大約能處理 400 個地址。

諸多譬如合併操作或者轉賬到其他地址的行為都會導致許多使用者的 A 級或 B 級通證的餘額可以忽略不計。出於對於時間和費用效率的考慮,我們對 A 級和 B 級通證設定了餘額下限 0.01,原因如下:

1) 0.01 個 A 級或 B 級通證都大約等於 0.01 USD,低於任何 ERC-20 功能需要花費的燃料費用(當 ETH 價值 500 USD 時,燃料價格等於 2 GWei,那麼一筆交易將至少花費 20,000 燃料,約等於 0.02 USD)。因此,我們可以認為這種地址已經不再被使用;

2) 如果有人建立了大量持有小於 0.01 個 B 級通證的地址來避免折算,由於創造這些地址的燃料費會大於地址本身持有 B 級通證的價值,因此這種行為過於昂貴;

3) 即使在 2)提到的情況實際發生,使用者的大量地址躲避了下折,那麼將 B 級通證從這些地址轉出的燃料費依然會高於 B 級通證的價值。

儘管設定下限會導致 A 級和 B 級通證總量的計算出現瑕疵,但是 Beethoven 能夠在不影響通證經濟的前提下更合理有效地執行折算。在每次合併或轉賬中,Beethoven 都會檢查地址 A 級和 B 級通證的餘額是否低於閾值。如果低於閾值,該地址就會從陣列中去除。

1.6 體系管理

合約管理體系內共有六個管理角色:報價者 1(pf1)、報價者 2(pf2)、報價者 3(pf3)、轉化費收集賬號(fc)、運營賬號(opt)以及地址池管理者(pm)。pf可以把價格資訊傳送到 Beethoven,任何時候每個報價者都對應一個雲端伺服器的地址。fc 負責收集拆分合並的轉化費用。opt 負責更新 Beethoven 的特定引數。為了保障合約的安全性,管理系統結構設計可以確保任何單獨的地址都無法透過更改 Beethoven而獲益。


Beethoven 內的以太坊地址都能被分配到不同的管理角色,每個地址同一時間只能擔任一個管理角色。地址池在任何時刻都最少有 2 個地址。一旦被賦予管理角色,這個地址就會被標記並移出地址池,無法再次被加入地址池中。Beethoven 初期會生成 6 個候選地址和 1 個地址池管理者。pm 可以將 2 個新候選地址加入地址池中。在加入前,從地址池中隨機選擇的一個地址會被設為新的 pm,同時此地址將被從地址池中剔除。Pm 不能加入使用過的地址,且加入的 2 個新地址不能相同。pm 每次還可以從池中移出地址,同樣,每次移除前 pm 都會被隨機替換。地址池的所有地址都有資格成為委託人。委託人可以在地址池中隨機選擇(除委託人地址外的)地址委託角色。因此就算一個委託人的私鑰洩漏,駭客也無法透過委託自己的地址獲益。只有當兩個賬戶的私鑰都被同一個人掌握,才有可能用一個地址隨機委託到另一個地址,然而由於池中地址的數量大,隨機委託到另一個地址的概率非常低。而且只要地址池足夠大,這個概率會進一步降低。在委託新角色後,委託和受委託的地址都會從地址池中被去除。由於存在駭客同時掌握兩個賬戶的私鑰並控制一個管理角色的可能性,為了降低這個風險,系統內建了一個 1 天的冷卻期,即在上次操作後需要等待 1 天才能執行下一個管理操作。同時,每個管理操作都會傳送一個事件到區塊鏈上。收到攻擊時,我們的團隊能夠立即檢測到入侵行為,並再駭客掌控任何角色前有 1 天的事件關閉其賬戶。


1.7 安全性分析

智慧合約

SafeMath: 檢查合約中除迭代外的所有數值計算的溢位和下溢情況。檢查運算次序確保臨時結果在 256 位正整數之內。
函式限制: Beethoven 的所有重要函式都只能由特定的呼叫者在特定的的狀態下被呼叫以避免不必要的函式呼叫。
事件: 每次系統引數或狀態改變都會傳送一個相關事件,區塊鏈上所有人都可以藉此監控對 Beethoven 的更改。

報價器

綜合: 報價器的即時性和相關性優先於平穩性和抗操縱性。與金融市場上的期貨交割價格不同,報價器並不是必定觸發折算事件。槓桿的存在放大了期貨市場的資金,引導參與者操縱市場來影響期貨合約的交割。與期貨不同,分級貨幣的價值永遠不會高於 ETH 市場,因此使用者沒有操縱 ETH 市場來影響折算價格的動機。

冗餘: 我們使用三種不同的雲端伺服器。
共識: 透過嚴格演算法從三個報價者計算共識定價。

管理系統隨機數生成

系統中每次管理操作後都會隨機選擇新的管理地址。以太坊虛擬機器(EVM)不提供隨機數生成的函式,因此最淺顯的生成隨機數的方法就是用block.timestamp,但這樣生成的隨機數可以被礦工修改。更加安全的方法是使用上一個區塊的雜湊值,因為它無法被現在的礦工更改。這樣做的問題是上一個區塊雜湊是公開的,雖然區塊間隔只有 15 秒,但還是可以透過上一個區塊的雜湊值預判下一個隨機選擇的管理地址。更加巧妙的辦法是使用使用者地址名單的長度和使用者地址。地址名單的長度一直在變化且使用者地址不能被人為更改。

我們將以太坊的區塊雜湊值和產品的使用者地址名單結合生成隨機數。實現邏輯如下:

1) 取得上一個區塊的區塊雜湊值,轉化成數字 a
2) 如果使用者名稱單的長度 n 小於等於 255,a 為生成的隨機數
3) 如果 n 大於 255,計算 b = a % n,轉化第 b 個使用者的地址 addr(b)成一個數字,即生成的隨機數


2.智慧合約

2.1 DUO 體系通證合約

18 位小數的標準 ERC-20 通證。

函式

balanceOf: 返回指定地址的通證餘額。
allowance: 返回指定地址的通證授權額度。
transfer: 將通證轉移到指定地址。傳送 Transfer 事件。
transferFrom: 將授權通證轉移到指定地址。傳送 Transfer 事件。
approve: 授予指定地址轉移通證的許可權。傳送 Approval 事件。
totalSupply: 返回通證總量。

事件

Transfer: 轉移完成後傳送。
Approval: 通證額度獲得授權後傳送。

2.2 A 級通證合約

18位小數的ERC-20封裝通證。3.1.1列出的ERC-20功能會被導至Beethoven來實現 A 級通證的實際操作。3.1.2 中列出的事件也適用於 A 級通證。

2.3 B 級通證合約

18位小數的ERC-20封裝通證。3.1.1列出的ERC-20功能會被導至Beethoven來實現 B 級通證的實際操作。3.1.2 中列出的事件也適用於 B 級通證。

2.4 Beethoven(監管)合約

實現 DUO 體系的主要合約。

僅可由報價者呼叫的函式

startContract: 賦予合約初始價格並將狀態轉化為 Trading 狀態。只有在Inception 狀態時才可呼叫。傳送 StartTrading 事件和 AcceptPrice 事件。commitPrice: 從外部報價者接收價格並找到共識價格。只有在 Trading 狀態才可呼叫。如果收到價格但沒有接受,傳送 CommitPrice 事件。如果價格被接受,傳送 AcceptPrice 事件。如果新接受的價格 會觸發折算, 傳送StartPreReset 事件。

任何使用者可呼叫函式

create: 傳送 ETH 到 Beethoven,生成 A 級和 B 級通證,傳送 Create 和TotalSupply 事件。只有在 Trading 狀態時才可呼叫。使用者可以選擇以 ETH或 DUO 支付轉化費。

redeem: 傳送 A 級和 B 級通證到 Beethoven,傳送 ETH 到呼叫者的地址,傳送 Redeem 和 TotalSupply 事件。只有在 Trading 狀態時才可呼叫。使用者可以選擇以 ETH 或 DUO 支付轉化費。

calculateNav: 基於當前系統引數提供的價格計算 A 級和 B 級通證的淨值。

startPreReset:準備折算。如果等待時間到達預設數值,將系統過渡到三種折算狀態中的一種併傳送 StartReset 和 TotalSupply 事件;否則傳送一個新的StartPreReset 事件並繼續等待。只有在 PreReset 狀態才可呼叫。

startReset: 為有足夠Gas支付當前計算的使用者地址執行折算。如果Gas不足,傳送 StartReset 事件並在下一個交易繼續進行折算。如果所有使用者都已執行折算,傳送 StartTrading 事件。只有在 UpwardReset、DownwardReset 或PeriodicReset 狀態才可呼叫。

getSystemAddresses: 返回 A 級和 B 級通證的合約地址和以下 6 個管理角色的當前地址:運營賬號、轉化費收集者、報價者 1、報價者 2、報價者 3 以及地址池管理者。
getSystemStates: 返回系統狀態或引數列表的當前值。
getSystemPrices: 返回上一次折算的價格和上一個接受的價格的值、時間戳和地址。

A 級和 B 級通證函式

balanceOf: 返回指定地址的 A 級或 B 級通證餘額。
allowance: 返回指定地址的 A 級或 B 級通證授權額度。
transfer: 將A級或B級通證傳送到指定地址。只有在Trading狀態才可呼叫。傳送 Transfer 事件。
transferFrom: 將授權的 A 級或 B 級通證傳送到指定地址。只有在 Trading 狀態才可呼叫。傳送 Transfer 事件。
approve: 授予指定地址傳送 A 級或 B 級通證的許可權。傳送 Approval 事件。totalSupply: 返回 A 級或 B 級通證的總量。

管理員函式

collectFee: 從 Beethoven 提取 ETH 轉化費併傳送 CollectFee 事件。只能由轉化費收集賬號在 Trading 狀態呼叫。用來支付轉化費的 DUO 通證不能被提取,這些 DUO 通證可以理解為已被銷燬,無法再從 Beethoven 中轉出。

setValue: 根據預設設定系統引數併傳送 SetValue 事件。請參考智慧合約瞭解預設表單。只能在更新期間內被運營賬號呼叫。
addAddress: 向池中加入 2 個新的地址並委託 1 個新的地址成為地址池管理者。傳送 AddAddress 事件。只能在更新期間由地址池管理者呼叫。
removeAddress: 從池中去除 1 個地址並委託 1 個新的地址成為地址池管理者。傳送 RemoveAddress 事件。只能在更新期間由地址池管理者呼叫。
updateAddress: 委託池中 1 個新的地址為指定角色並去除呼叫地址。傳送UpdateAddress 事件。只能在更新期間由地址池中的地址呼叫。

狀態事件

StartTrading: 在狀態轉化到 Trading 狀態後傳送。
StartPreReset: 在狀態轉化到 PreReset 狀態後以及在轉化為折算前的等待期間傳送。
StartReset: 在 狀 態 轉 化 到 UpwardReset 、 DownwardReset 或
PeriodicReset 狀態後以及轉化到 Trading 前的折算發生期間傳送。
CommitPrice: 在價格抵達合約後傳送。
AcceptPrice: 在抵達合約的價格被接受後傳送。
Create: 在拆分行為發生後傳送。
Redeem: 在合併事件發生後傳送。
TotalSupply: 在 A 級和 B 級通證的總量變化後傳送。

管理員事件

AddAddress: 在地址加入地址池後傳送。
UpdateAddress: 在池中地址被委任角色後傳送。
RemoveAddress: 在地址從地址池移出後傳送。
SetValue: 在系統引數更新後傳送。
CollectFee: 在作為轉化費的 ETH 被取出後傳送。

通證事件

Transfer: 在 A 級或 B 級通證轉賬後傳送。
Approval: 在 A 級或 B 級通證授權額度被批准後傳送。

燃料消耗


關於更多DUO資訊:

更多區塊鏈專案:http://www.qukuaiwang.com.cn/news/xiangmu
風險提示:區塊鏈投資具有極大的風險,專案披露可能不完整或有欺騙。請在嘗試投資前確定自己承受以上風險的能力。區塊網只做專案介紹,專案真假和價值並未做任何稽覈!

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;