📜 [專欄新文章] [ZKP 讀書會] Zkopru
✍️ NIC Lin
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Photo by Barth Bailey on Unsplash
Zkopru
Zkopru 這個名稱是由 zk-transaction + Optimistic Roll-Up 的字首組成,這個layer 2 的協議包含了使用零知識證明來保護交易的隱私( zk-transaction)、再搭配 Optimistic Rollup 來管理 layer 2 。
接下來會講到 Zk Rollup 和 Optimistic Rollup,如果讀者還不熟悉,可以先閱讀這篇ˊ指介紹。
它和 Zk Rollup 有什麼不同?
Zk Rollup 連同 layer 2 的鏈的 state transition 都是由零知識證明來處理,但缺點是目前零知識證明技術的成本較高,包含在鏈下產生證明和在鏈上驗證證明(鏈下產生證明耗費時間,鏈上驗證證明則耗費 gas)。
註:接下來提到的(零知識證明、circuit)的鏈下成本都是指時間多寡,而鏈上成本則都是指 gas 多寡)
另外目前的 Rollup 協議都是使用 merkle tree 來儲存當前的鏈的狀態(例如使用者的餘額、nonce 或是 UTXO) — 如果使用者要證明他有 $20,則他必須要提供 merkle proof ,而這個 merkle proof 的大小及 hash 次數也會因為選擇的 merkle tree 的高度而有不同。
而這個因素再搭配上 hash 的成本在 EVM 和 circuit 會有不同,導致協議如果使用在 EVM 成本較便宜的 hash function,則 circuit 的 hash 成本會較高;反之亦然。
目前還沒有安全的 hash function 是在 EVM 或 circuit 裡都是便宜的,所以協議設計者必須做出妥協。可想而知,Zk Rollup 便是使用在 circuit 便宜但是在 EVM 貴的 hash function,這導致當使用者要離開 layer 2 回到 layer 1 時(這個步驟在這裡稱作 withdraw),他成本會很高(因為要在 EVM 裡驗證他持有資產的擁有權,這可以是一個 merkle proof 或 zk proof)。
和 Optimistic Rollup 有什麼不同?
而這個成本相對的也反映了採用 Optimistic Rollup 的好處 — 只有在特殊情況下(例如協議裡的 Operator 作惡)才需要付出較高的成本,其他時間大家則享受極低成本的使用費。
但使用 Optimistic 的方式也有附帶的缺點: challenge period 。輕節點使用者需要等待 challenge period 來確保交易不會被推翻、withdraw 過程需要等待 challenge period(以下稱 withdraw period) 過了才能將錢提回到 layer 1。
所以使用哪種 Rollup 就要看協議設計者如何依照他們的使用需求去權衡。
那為什麼不使用 Optimistic Rollup 就好?
因為需要零知識證明來保護交易隱私!
前提
zkopru 使用和 Bitcoin 相同的 UTXO model
transfer 的付款方、收款方和金額都是被保護住、看不到的,但 zkopru 和其他隱私幣一樣,不需要付款方和收款方合作即可由付款方單獨完成 transfer。
但也和隱私幣一樣,收款方必須去監看鏈上每一筆交易並嘗試解密來得知是否有人 transfer 給自己
基本使用流程
Deposit
使用者將 ether 、ERC20 或 ERC721 代幣轉入 zkopru 位於 layer 1 的合約,觸發 event。協議的 Operator 會監看合約並搜集 deposit event,然後將這些 deposit 一起放入下一個(zkopru 的)區塊裡。
Transfer
如同 Bitcoin 的 UTXO,zkopru 裡使用者必須要證明其對某 UTXO 有擁有權才能花費該 UTXO。要被花費的 UTXO 會被放到 transaction 格式裡的 inputs 欄位, outputs 欄位的 UTXO 則是填入收款方的公鑰和收款金額(outputs 的 UTXO 就會是新產生的 UTXO)。
因為要保護交易的隱私,新的 UTXO 的資訊是不會洩露出去的,第三方只會看到該 UTXO 的 hash 值。那收款方要怎麼知道一個 UTXO 是不是他的呢?
sender 會利用自己的私鑰、收款方的公鑰及一個隨機值,透過密鑰交換協議來產生一個臨時的共享密鑰。 付款方用此共享密鑰加密收款方所需的資訊(包含 transfer 的代幣種類和金額),而收款方會監看每一筆交易並試著用自己的私鑰組出一個共享密鑰然後去解密,如果解密完的資料不是亂碼而是合理的,則可確認收到錢。
Withdraw使用者產生 withdraw 類別的交易,等待協議 Operator 收進區塊裡,然後再等待 withdraw period 過去,即可送出 merkle proof 來將錢提領回 layer 1。
註:提領回 layer 1 之後的收款方和金額都是公開透明的,隱私不再受保護。
零知識證明
zkopru 裡一共有三種類型的 merkle tree 來儲存所需的狀態,分別是 UTXO tree、Nullifier tree 以及 Withdrawal tree。
UTXO tree 紀錄所有產生過的 UTXO,包含新的和已經花掉的。
Nullifier tree 紀錄被花掉的 UTXO 的 nullifier 值。一個 UTXO 的 nullifer 由該 UTXO 的相關資訊算出,而且只能得出唯一一個 nullifier。這個 nullifier 能夠證明該 UTXO 已被花掉,但同時又不會洩露是哪個 UTXO 被花掉。聽起來很饒口,但這就是零知識證明的能力。
Withdrawal tree 紀錄 withdraw 類別的交易的資訊,使用者要提領回 layer 1 就需要這棵 merkle tree 的 merkle proof。也是就說,前面說的 Operator 會把 withdraw 交易放到這棵 merkle tree 裡,然後等待 withdrawal period 過後,再由使用者提供 merkle proof 來領走。
這裏以 transfer 為例來說明其中一部分的 circuit 在做什麼事
當使用者要產生一筆 transfer,他首先要證明 inputs 裡的 UTXO 都是合法的,這包含了證明:
他擁有這個 UTXO — 藉由提供簽章來證明
這個 UTXO 是真的存在的 — 藉由證明該 UTXO 的 hash 值存在 UTXO tree 裡
這個 UTXO 沒有被花過 — 藉由證明該 UTXO 的 nullifier 值不存在 Nullifier tree 裡
接者是 outputs,新產生的 UTXO 的 hash 值會被放進 UTXO tree 裡。
最後是比對 inputs 金額加總等於 outputs 金額加總再加上交易手續費。
而這些都在 circuit 裡完成,第三方沒辦法得知實際的 inputs、outputs 或 nullifiers 等等,第三方只能知道新的 UTXO 的 hash 值以及運算過程是正確的 — 也就是這些 tree 都被正確的更新了。
其他特色
Mass migration
原本每個使用者要把資產換到另外一個 layer 2 協議,他必須申請 withdraw 、等待 withdraw period ,然後把資產 deposit 到另外一個 layer 2 協議。
zkopru 支援使用者成批的搬移資產到另外一個 layer 2 協議 — 共享經濟。
Instant withdrawal
如果其他需要等待 withdraw period 的應用來說,withdraw period 是一個 UX 痛點。zkopru 的 instant withdrawal 提供急著 withdraw 的一方和不急著 withdraw 的一方一個管道能互惠。
急的一方提供一點手續費,對自己的 withdraw 交易做簽名並廣播出去。不急的一方在聽到這個簽名後,可以將這個簽名送到 zkopru 合約並附上 withdraw 金額(扣掉自己該收的手續費)。
這筆錢會直接轉給急的一方,然後急的一方的 withdraw 擁有權便會轉移到不急的一方手上,不急的一方再慢慢等到 withdraw period 過了再提領。
估計效能
目前在初版的效能估計中,一筆 transfer 平均耗費 8800 gas;而 TPS 則是 105。zkopru 還在積極更新迭代中,所以這個效能會在提升。
Reference:
https://ethresear.ch/t/zkopru-zk-optimistic-rollup-for-private-transactions/7717
https://docs.zkopru.network
https://www.chainnews.com/zh-hant/articles/443085023250.htm
[ZKP 讀書會] Zkopru was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有1部Youtube影片,追蹤數超過68萬的網紅蔡佩軒 Ariel Tsai,也在其Youtube影片中提到,Ariel首張個人實體專輯【ARIEL】發行上架了!趕快去購買收藏:https://ArielTsai.lnk.to/ARIEL ----------------------------------------------------- Ariel 新歌《星宿》情人節全面數位上架啦!趕快去KKB...
operator是指 在 Dr. Ray 的急症室迎送生涯 Facebook 的最佳解答
話說,部門這幾天來了近30位新護士。
-----
1.
護師:「在R 房,我們有三位護士負責不同崗位。急症室救人主要是用ABCD原則,一人負責 Airway and Breathing,一人負責 Circulation,一人負責Drug and Documentation。 」
小護們點點頭。
護師:「負責Airway and Breathing 的就是幫醫生準備插喉乜乜乜啦,那Circulation Nurse是負責甚麼呢? 」
一小護搶答:「我知!」
護師:「是?」
小護:「是做跑腿的工作,把不同的儀器從各個地方拿來,傳遞給處理病人的同事!」
護師:「吓⋯⋯」
我說:「小妹,你說的是手術室內的Circulation Nurse(流動護士)吧……」
急症中的Circulation 是指病人的血液循環啊!
-----
2.
護師:「看!來了個醉鬼啦!他們有時候會激動鬧事,這時候你們要召保安啦!」
小護們點點頭。
護師:「那保安幾多號電話?」
小護們把手中的小筆記掀來掀去。
護師:「你找得來,人家已經一拳打在你臉上啦。記著,是9055,在你暈過去之前也要叫人打這個電話。」
小護們繼續點點頭。
護師:「那接線生Operator幾多號電話?」
小護們繼續把手中的小筆記掀來掀去。
小弟見狀,不禁搖頭嘆息。
護師:「哎呀,是0字呀!」
難道這個年代的小妹去唱卡拉OK時,不曾按0字致電服務台點餐?
-----
每年這個時候,總會有新人加入,而我們在不久之前,也經歷過這些混沌呆滯的日子。
無論醫生也好護士也好,希望菜鳥們(笑)能夠快高長大,累積經驗,為病人提供優秀的服務!
operator是指 在 蔡佩軒 Ariel Tsai Youtube 的最佳解答
Ariel首張個人實體專輯【ARIEL】發行上架了!趕快去購買收藏:https://ArielTsai.lnk.to/ARIEL
-----------------------------------------------------
Ariel 新歌《星宿》情人節全面數位上架啦!趕快去KKBOX下載收藏喔👉🏻(http://bit.ly/2RYuL7n)
#年度必聽暖心情歌 #星宿
【星宿】懶人包下載連結:https://JSJ.lnk.to/Starrynight
⭐數位平台 & 鈴聲下載⭐
【星宿】全球數位音樂線上聽🎵🎵
🎧 KKBOX:http://bit.ly/2RYuL7n
🎧 MyMusic:https://bit.ly/2SMCXMF
🎧 iTunes:https://apple.co/2Im7QmS
🎧 Apple Music:https://apple.co/2SNroVr
🎧 Spotify:https://spoti.fi/2SuRKMB
🎧 JOOX:https://bit.ly/2WZXQmC
🎧 MOOV:https://bit.ly/2GqNZBc
🎧 网易云音樂:https://bit.ly/2tmY9dM
🎧 咪咕音樂:https://bit.ly/2DElnAF
🎧 微博音樂:https://bit.ly/2E7VXwJ
🎧 喜馬拉雅fm:https://bit.ly/2BBuult
🎧 荔枝fm:https://bit.ly/2Eaa70s
🎧 蜻蜓fm:https://bit.ly/2Sv9x6v
🎧 听伴fm:https://bit.ly/2TPJbsu
🎧 抖音:http://v.douyin.com/Yy3yK3
🎧 TikTok:http://vt.tiktok.com/JR6fqv
【星宿】手機鈴聲下載🔔🔔
🎧 中華Hami鈴聲館:https://bit.ly/2Sy3spN
🎧 台哥大流行音樂鈴聲館:https://bit.ly/2GHB90W
🎧 遠傳鈴聲館:https://bit.ly/2SwJRpV
🎧 Apple手機鈴聲:https://apple.co/2Bw1207
【星宿】來電答鈴下載🔔🔔
🎧 中華來電答鈴:https://bit.ly/2SA5YvC
🎧 台哥大來電答鈴:https://bit.ly/2tjFHmf
🎧 遠傳來電答鈴:https://bit.ly/2RXOqV6
🎧 亞太電信 (代碼: 323326):https://bit.ly/2HC2Nxe
-----------------------------------------------------
『黑暗中望向你,你是指引我的星宿』
愛情是兩個人彼此指引前行,像星星一樣。
有的時候走累了,跌倒了,抬起頭來,星星仍發著光。
提醒我們雖然眼前疲倦、有時跌倒疼痛,但仍有很多美好的事物,
鼓勵我們繼續往前走。
『心繫著你,卻得到了自由。不怕往前因你在身後』
願我們也都能成為那位指引自己愛的人的星宿。
-----------------------------------------------------
🔔 訂閱Ariel的頻道: http://bit.ly/ariel_youtube
📸 追蹤 Instagram: http://bit.ly/ariel_tsai_IG
🔍 加入後援會官方LINE: http://bit.ly/2HaBQjg (@dnd4361o)
-----------------------------------------------------
音樂創作才女 Ariel 蔡佩軒 繼去年年底發表個人創作單曲《禮物》和《每一次想你》,在各大數位平台創下佳績,KKBOX馬來西亞新歌週榜數週 #1,台灣連續4週進入新歌週榜前 #10、最高拿到 #5,成為傳唱度極高的兩首歌之後,這次接續發表的原創曲【星宿】又要讓大家看到一個不同的Ariel!
Ariel 療癒的歌聲,總是能讓人在經過一天的疲憊之後得到完全的放鬆,是一種正能量的釋放。你認識 Ariel 了嗎? 從現在開始來聽聽她溫暖又療癒的歌聲吧!
-----------------------------------------------------
▶︎Ariel官網: http://arieltsai.tv
▶︎Facebook: http://bit.ly/ariel_tsai_FB
▶︎YouTube副頻道: http://bit.ly/2VdVX3A
▶︎小魚家族: http://bit.ly/2j4GMKk
▶︎TikTok: http://vt.tiktok.com/JBNFxy
▶︎抖音: http://bit.ly/2Jb0hPL
▶︎微博: http://bit.ly/2mRyCab
-----------------------------------------------------
【MV】
監製 Executive Producer:張瑞哲
製片 Producer:郭竣鵬
導演 Director:董芊妤
執行製片 Line Producer:陳帝羽、張逸文、張家瑜
攝影師 Camera Operator:劉力瑋
攝影大助 First Assistant Camera Operator:范仁豪
攝影二助 Second Assistant Camera Operator:郭竣鵬
燈光師 Gaffer:曾權
燈光助理 Lighting Technician:王之謙、張舒寧、梁云澤
美術組 Set Designers:張逸文、陳帝羽
妝髮梳化 Makeup Artist :賴薏如
前期器材協力 Camera Company:妄想機影音製作有限公司
後期製作 Post-Production:台灣葡萄子傳媒科技股份有限公司
剪接師 Editor:劉力瑋、董芊妤
字體設計 Font Designer:董芊妤
調光師 Colorist:梁云澤
合成特效:劉力瑋、董芊妤、張家維
特別感謝 Sponsor: Roland Digital Piano 數位鋼琴
【音樂】
製作 Producer:蔡佩軒 Ariel Tsai
編曲 Arranger:廖佑祥 Sean Liao
鍵盤 Keyboard:溫和蒝 Wilson Wen
配唱製作人 Vocal Producer:宋星凱 Sean M. Sinclair
配唱錄音師 Vocal Recording Engineer:宋星凱 Sean M. Sinclair
錄音室 Recording Studio:北極光錄音室 Northern Light Music Studios
混音師 Mixing Engineer:宋星凱 Sean M. Sinclair
混音室 Mixing Studio:北極光錄音室 Northern Light Music Studios
母帶後製處理工程師 Mastering Engineer:Derek Snyder @ Polygon Audio
【製作發行】
可瑞思國際娛樂股份有限公司
曲:蔡佩軒
詞:裊兒
我望著乘載無數願望的夜空
當初是哪顆流星牽住你與我
你的溫柔
撫平了傷口
我再一次感覺到擁有
喜歡你陪我等待著花開花落
你的撒嬌帶給我小小的悸動
夜晚過後
我不再寂寞
月光下找到你陪著我
黑暗中望向你 你是指引我的星宿
你的眼望著我 像照亮夜晚的螢火
當夜太深 (腳步太重)
路遙遠 (不見盡頭)
你的光芒支持我繼續往前走
謝謝你在身旁 安靜而堅定的守候
人生裡的波浪 我們一起勇敢度過
心繫著你 (十指緊扣)
卻得到了自由
不怕往前因你在身後
我望著頭頂寫滿故事的夜空
記載下我們的是哪一段傳說
當我失落
堅定告訴我
你眼中的我依然閃爍
黑暗中望向你 你是指引我的星宿
你的眼望著我 像照亮夜晚的螢火
當夜太深 (腳步太重)
路遙遠 (不見盡頭)
你的光芒支持我繼續往前走
謝謝你在身旁 安靜而堅定的守候
人生裡的波浪 我們一起勇敢度過
心繫著你 (十指緊扣)
卻得到了自由
不怕往前因你在身後