前段時間在做聯盟鏈,接觸了跟隱私相關的一些技術。由于在大多數情況下,鏈上的業(yè)務數據都屬于交易各方的商業(yè)機密,不可能讓用戶無限制的訪問。但是區(qū)塊鏈去中心化的特性,又決定著,不可能弄出一個授信的中心機構來保存這些機密數據。
因此我十分關注公鏈界匿名幣區(qū)塊鏈技術的發(fā)展。我關注過門羅幣(Monero),達世幣(DASH)以及大零幣(Zcash)等熱門的匿名區(qū)塊鏈技術。環(huán)簽和混幣器等技術的應用局限性太大,而Zcash使用的零知識證明適合大多數場景,但它一直都很慢,適用性也不高。并且,他們都沒有實現對圖靈完備智能合約的支持。基于純粹的UTXO,這種技術對智能合約的實現并不友好。
前幾天公司聚餐時,有同事提到,最近出現了一個名為超零協(xié)議(SERO)的公鏈,是個支持圖靈完備智能合約的匿名幣,采用零知識證明實現,據說目前已經完成了開發(fā)。這引起了我的興趣,因此打算研究一下,看能否借鑒一二。
官網和白皮書

說實話,SERO 團隊的營銷和SEO做得并不算好,我在百度搜索 sero 的時候,首頁全部是日系各位老師的種子鏈接。直到我搜索了sero cash 才有關于這個公鏈的一些信息。
從官網提供的信息看,SERO 開發(fā)團隊應該在中國國內,基本都是華人。從linkdin上的履歷看,這些成員在技術領域,有豐富的研發(fā)和工程實踐經驗。如果真像官宣的那樣,SERO是全球第一個支持圖靈完備智能合約的匿名鏈,而且在零知識證明的生成上比Zcash快20倍,那么作為一個中國人,這還是很讓人興奮的。
在官網分別能找到白皮書和github開源項目的鏈接。根據官宣的信息,SERO 項目已經開發(fā)完成并且已經開源。因此我下載了白皮書并且將github里面的源碼克隆,做了一番簡要的分析。
-----------------------------------------------------------------------------------------------------------------------
超前的源碼

我發(fā)現一個非常有意思的事情,這個事情顛覆了我對區(qū)塊鏈項目的理解。
通常的區(qū)塊鏈項目 的白皮書要超前其源代碼很多個開發(fā)周期。最極端的情況下,一些空氣幣,他們的白皮書寫得天花亂墜,但是也許還沒等到主鏈開發(fā)出來,項目方就跑路了。
而對于SERO項目,它的源代碼要超出白皮書幾個周期。也就是說,我發(fā)現官網上 V1.0.6 版白皮書只映射了 SERO 一個月前(Alpha 0.1版)源碼的內容。而當前(Beta 0.3.0 版)版所發(fā)布的功能,比如“交易生成速度優(yōu)化”、“發(fā)行匿名票據”和“測試邀請許可證”等功能,并沒有在白皮書里面體現。
也許SERO團隊每次都是在開發(fā)完成后再更新白皮書的。
-------------------------------------------------------------------------------------------------------------------------
匿名幣的基本理論

根據SERO白皮書的描述,匿名幣有三種最基本的特性【不可追蹤性、不可關聯性、抗分析能力】這很好理解,你轉一筆錢給其他人,非交易雙方,即使用大數據分析法,也不應該能追蹤到這筆錢的來源、去處、金額、以及該筆交易相同賬號的其他的交易行為。
除此之外,SERO白皮書還提出【可選的審計方案 】比如,你可以將你的配偶設為可選的審計方,那么除了你和你配偶以外,其余的人都無法從數據中分析出跟你相關的信息。而除你以外,即使你的配偶,也無法動用你的錢。
SERO的白皮書中,還將匿名資產和智能合約都分為線上和線下兩類,從上面的描述來看,Beta版增加的匿名票據,應該在 線上匿名資產 這個范疇。這塊信息量較大,有興趣的人可以自行閱讀白皮書。

另外,SERO的官宣信息中提到,他們有一個Super-ZK的C++庫,比Zcash使用zk-snarks的方式高效20倍,并給出了跟Zcash對比的視頻。我在github中找了很久沒找到這個庫。后來發(fā)現,好像是一個名為 go-czero-import 的庫,這個庫引用了一個名為czero的C++庫。其中有生成交易證明的接口。
-------------------------------------------------------------------------------------------------------------------------
SERO的功能
為了嘗試和調試SERO的功能,我克隆了SERO所有的源碼。我發(fā)現SERO 項目還有一個嚴重的問題,作為一個有著完整產品的項目,居然沒有一個對整個產品集的統(tǒng)一介紹,導致我必須要自己去摸索各個功能,這樣實在是有些浪費時間。
SERO的主節(jié)點程序 gero 是用Go語言版的以太坊 geth 改的,雖然看起來改動有點大,但主干并沒有變化。還好我對geth很熟悉,只在引入C++動態(tài)庫的時候磕磕碰碰了一下。最后根據github上的readme,在 MACOS 系統(tǒng)和 CENTOS7 系統(tǒng)上分別成功編譯并運行了。
SERO整個產品體系包括下面幾個系統(tǒng)與功能:
go-sero 全節(jié)點服務程序
代碼位置:http://github.com/sero-cash/go-sero
通過編譯后獲得程序gero
后臺服務功能

gero啟動時,根據配置,節(jié)點會自動選擇同步AlphaNet或是BetaNet網絡的數據,充當網絡中的一個全數據節(jié)點,并執(zhí)行客戶端發(fā)出的指令。客戶端錢包 或者 交互式控制臺 通過rpc或者ipc連接全節(jié)點。
交互式控制臺

當對gero增加console參數的時候,gero會變成一個 交互式控制臺 。不得不說,gero中指令的操作方式,跟以太坊幾乎是一致的,這對于像我這樣熟悉以太坊指令的人,操作起來沒有什么門檻。
賬戶管理和匿名資產
在賬戶管理方面,gero提供的資產查詢結果分了兩種類型,Tkn和Tkt,我沒找到對應文檔,但根據網上宣傳信息看,應該分別代表Token和Ticket,就是所說的通證與票據。票據可以認為是非同質通證,唯一且不可分割。根據白皮書和宣傳資料,這兩種資產都是匿名資產。也就是說,你交易的時候,SERO會隱藏這兩種資產的信息。
匿名交易
因為我沒有AlphaNet或是BetaNet的測試許可證,無法通過挖礦來確認交易,因此我用Dev模式測試了一下匿名交易,在我的機器上,確實能看到交易生成時間是7s。從交易數據看,交易證明采用Commitment模式,可以確定是匿名交易。至于AssetCM和OutCM各代表什么,暫時弄不明白意思是什么,只有等到通讀代碼或最新白皮書時再仔細研究了。
賬本創(chuàng)建(挖礦)
這個指令與以太坊一致,從區(qū)塊的結構來看,礦工每次接受獎勵的coinbase地址,都在變化,這個地址應該可以對應到白皮書中描述的暫存地址(PKr),也就是說,這塊究竟是誰挖出來的,除礦工自己外,不會有人知道。
智能合約
智能合約的安裝步驟也與以太坊一致,社區(qū)的宣傳信息中提到,SERO與以太坊智能合約的指令集是兼容的。我將部署代碼從以太坊的Remix編輯器拷貝過來,將代碼中的eth改為sero后進行測試,結果安裝和運行都沒有問題。智能合約可以發(fā)行匿名的Token和Ticket。這樣的話,應該可以實現匿名版本的ERC20與ERC721智能合約了。
資產獨立性
這個特性是我自己發(fā)現的,V1.0.6版白皮書中并沒有說清楚。對于匿名Token和Ticket資產,它們與發(fā)行自己的智能合約是相互獨立的。
這意味著資產與規(guī)則相互獨立。智能合約發(fā)行的匿名資產,與SERO幣地位等同,而不是記錄在智能合約的map中。這樣的方式使得SERO智能合約的適應性超越了以太坊,打破了智能合約之間的界限,很多復雜功能實現起來更加簡單。比如可以在SERO上編寫去中心化交易所的智能合約。
智能合約編輯器
產品地址:https://remix.web.sero.cash

SERO Remix編輯器中自帶有如何發(fā)行匿名Token和匿名Ticket的例子。
區(qū)塊瀏覽器
產品地址:https://explorer.web.sero.cash

SERO產品集中包含一個簡潔的區(qū)塊瀏覽器。區(qū)塊瀏覽器包含區(qū)塊、交易兩類視圖。在區(qū)塊鏈瀏覽器中,SERO幣和用SERO智能合約發(fā)行的匿名代幣,因為其匿名屬性,交易各方的交易地址為暫存地址PKr,交易金額則會用0代替實際的交易金額。
不過對于SERO的區(qū)塊瀏覽器,我覺得未來可以在智能合約數據展示上下一些功夫。畢竟對于一個區(qū)塊鏈應用,即使在大多數交易加密的情況下,有部分公示數據在智能合約中被展示非常有必要。
錢包客戶端

根據社區(qū)宣傳的說法,錢包客戶端會在24號之前開源出來,錢包將包括賬戶管理、交易管理和智能合約管理三個功能,由于目前并沒有看到實物,上面的圖是從宣傳頁拷貝過來的。
開發(fā)和測試環(huán)境
根據github上的信息,SERO分為四個環(huán)境:
Dev環(huán)境 用于個人測試,需要手工鏈接才能形成網絡,采用參數--dev啟動即可,我就是在這個環(huán)境中完成的SERO試用。
AlphaNet 是SERO團隊內部測試網絡,采用--alpha參數啟動,可以加入到這個網絡中,但是基本上沒有這個必要。
BetaNet 是社區(qū)公測網絡,采用POW共識,據說在主網上線時,BetaNet中挖出的SERO幣會一比一映射到MainNet中。不過在這個網絡中挖礦需要向 申請測試許可證。我發(fā)出了測試申請,希望能夠盡快通過審核,(像我們這樣的窮人只能通過挖礦來賺SERO幣了)
MainNet 是主網絡,將在明年上線,根據白皮書上所說,到時將會換成SE-Random共識,看白皮書中對這個算法的描述,大體上跟Algorand差不多。至于能不能達到理想的 3000 TPS,只能看 SERO 那時的實現方式了。不過對于匿名幣來說,TPS是不是足夠高并不是我最關心的,我比較關心能否滿足大多數應用場景。
-------------------------------------------------------------------------------------------------------------------------
有趣的名稱
在研究SERO的過程中,我發(fā)現SERO團隊十分的有趣。

首先他們在白皮書中使用西方國家家喻戶曉的《龍槍編年史》來記錄較大的版本變化,類似于以太坊的大都會、拜占庭等名字,他們叫秋暮之巨龍、 冬夜之巨龍、夏焰之巨龍、春曉之巨龍。沒有聽過的朋友不要緊,一定玩過一款經典游戲《龍與地下城》吧?他們是一個公司出品的。

如果你以為這就完了?那就太小看SERO團隊工程師了的惡趣味了。在看《sero vs zcash》視頻的時候,演示者打過一串文本 “1 SERO=1^9 ta” ,但是并沒有講解是什么意思。我思考了很久,突然頓悟了,SERO 跟賽羅發(fā)音很像,也可以寫成超級-賽羅。雖然賽羅可以是很多的東西,但豐富的動畫片觀影經驗告訴我,它非常有可能是賽羅奧特曼,因為奧特曼的起源來自等離子火花塔。這樣的話SERO幣的最小單位是塔(TA)就能說得通了。當然,這純粹是我的猜想,官方并沒有這么說過。
Btw我會持續(xù)關注SERO項目的動態(tài),畢竟遇到一個自己喜歡的項目,比遇到喜歡的人還難呀!
-------------------------------------------------------------------------------------------------------------------------
參考:
【SERO白皮書下載】http://sero-media.s3-website-ap-southeast-1.amazonaws.com/Sero_CHS_V1.06.pdf
[源代碼] https://github.com/sero-cash/go-sero
[SERO區(qū)塊瀏覽器] https://explorer.web.sero.cash/blocks.html
[SERO智能合約編輯器] https://remix.web.sero.cash/