JOYSO 合約建構規劃

Hsieh Yung-chen
JOYSO
Published in
5 min readMar 15, 2018

去中心化應用的佈建與傳統服務不同,一旦上鏈及無法更改。只可透過部署新合約作為更新的方式。又根據所提供的服務不同,更新的成本也不同。以JOYSO 而言,屬於使用者高度依賴此合約,甚至需要將資產 (ether) 交由合約管理。在合約升級上並無快速有效率的辦法。若將資產及邏輯交由不同合約管控,則每次交易要跨合約溝通,則需花費額外的交易成本。

為確保合約上鏈後的更新最小化,JOYSO 會盡量確保上鏈的合約都如預期執行。我們使用以下的工具做合約的安全性以及正確性的分析:

  1. Functional test (truffle, solidity-coverage)
  2. Performance analysis (truffle, Ganache, remix)
  3. 合約安全性分析 (mythril, SmartCheck, remix, Oyente, solgraph)
  4. 合約安全性驗證 (human audit, 洽談中)

並在正式公佈前,會有以下幾個版本:

  1. Developer 版本 (on ropsten test net)
  2. Staging 版本 (on ropsten test net)
  3. Close beta 版本 (on mainchain)
  4. Production 版本 (on mainchain)

先從各種版本說起,會需要這麼多不同版本。是因為其運作以及手續費需要支出 Ether,若直接在主鏈上成本太高,而且如果因為有問題而把我的Ether卡住了,那就太不好了。所以在上到主鏈前會先選擇在測試鏈上上開發版本做結果的驗證,以及會有 staging 版本做 demo。在測試鏈的選擇上,Ethereum 有三個測試鏈,分別為 Ropsten, Kovan, 以及 Rinkby. 三個測試鏈與主鏈行為並不會完全相同,以下稍微整理各個測試鏈的性質:

  1. Ropsten: 為最早的測試鏈,以 pow 作為區塊產生的演算法。早前因爲被 DoS 攻擊而爛掉了,但在去年底又悄悄的復活了。網路上有不少水龍頭的支援,這裡附上 metamask 提供的水龍頭
  2. Kovan: 為 Parity 提供的 PoA 測試鏈。因為是 PoA,所以出塊的時間快且穩定。取得 Keth 的方式,如果你有使用 parity 在 mainchain 上通過 SMS 的驗證,可以用該驗證過地址的簽章每次領取 5 Keth。或是在 gitter 上直接跟他們要。
  3. Rinkby: 由 Geth 提供的 PoA 測試鏈。鏈的特性跟 Kovan 差不多。但因為支援的團隊不同,所提供的服務(explore, api, … 等行為)有些許的落差。水龍頭在這裡

JOYSO 選則 Ropsten 原因如下,Ropsten 同主鏈一樣為 PoW 性質,當有重要更新時會現在 Ropsten上做實現。而大部分重要更新都會影響到區塊鏈以外的服務行為,JOYSO 為混合式去中心化交易所,不管是鏈上或鏈下的行為對我們影響都很大,選擇 Ropsten 可以預先做好準備。除此之外,作為混合式去中心化交易所,我們要自己保證交易能夠正確地confirm ,而不是透過 PoA 的穩定性來聲稱有這樣的功能。

幾個版本特型如下:

  1. Developer (Ropsten): 我們在每次合約更新的時候就會重新上一個 developer 版本,作為內部測試改進,以及成品的參考。
  2. Prototype (Ropsten): 這是相對於 Developer 穩定的版本,會提供給潛在合作對象做測試使用。錄製 Demo 影片。
JOYSO Demo 影片

3. Pilot run (Mainnet): 在正式營運前我們會在 mainchain 上執行試營運,網站會公開給白名單的使用者。

4. Production (Mainnet): 正式上線。

我們會對 JOYSO 合約做以下分析:

  1. Functional test: 包括每個函式的單元測試,整合行為測試,以及邊際值測試。這些可以透過 Truffle 提供的測試達成,而 Solidity-coverage 整合 Truffle 可以驗證測試的覆蓋率。
  2. Performance analysis: 與其他致力於提高 TPS 的專案不同,交易所上發生的每筆都應如實透過智能合約做審核。以以太現況來說,每 20 秒允許 8,000,000 gas 的區塊產生。再不改變以太協議的前提下,增加 JOYSO throughput 的方式有二,一為減少鏈上交易,移除不必要交易,尋求場外交易的可能。二為減少每筆交易所需要的 gas 量。
  3. Security analysis: 在撰寫合約的時候有特別注意資金出入,外部合約呼叫的限制等等。透過 Mythril, SmartCheck, 或是已內建在 Remix 裡的 Oynate 可以針對過去社群裡已知的錯誤 (Reentrancy, Compiler version optimization process, … ) 做風險評估。而 solgraph 可以分析合約,畫出各個函式的相依關西,檢查有沒有迴圈造成被攻擊的可能。
  4. Security analysis: Human audit. 透過具公信力的第三方做 code review。這步完成之後所有合約內容會開源,面向公眾做 bug bounty program。

聯絡方式

如果對 JOYSO 有興趣或有問題可以加入 Telegram ,或是寄信到 support@joyso.io

--

--

Hsieh Yung-chen
JOYSO
Editor for

CTO @ JOYSO project. A PhD student of National Taiwan University. And a dencentralize app developer/researcher.