📜 [專欄新文章] [zkp 讀書會] Cairo 語言介紹
✍️ NIC Lin
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Cairo 是 STARK 證明系統的其中一個編程語言,讓開發者能透過 Cairo 來使用 STARK,撰寫效能更高的 Dapp
Photo by Simon Berger on Unsplash
Warning:本篇會保持在 high level 的介紹,實際深入的部分請見文內附上的文檔或是官方開發者文件
背景介紹
建構於密碼學的零知識證明能提供計算的隱私性,但同時在區塊鏈生態系也被用來提升 Scalability — 我可以用 10 秒的運算資源來驗證原本耗費 1000 秒運算資源的計算過程
如同更多人熟悉的 SNARK,STARK 也是一個零知識證明的證明系統,但當前的 STARK 著重的是在 Scalability ,而非大家比較習以為常零知識證明提供的隱私性特質
其實目前基於 SNARK 的 Rollup 項目,例如 zkSync、Loopring、Aztec、zkopru,除了 Aztec 外,其他都是利用 SNARK 來增加 Scalability — 這些 Rollup 上資料都還是公開、沒有隱私性的
StarkWare 是目前唯一基於 STARK 的開發團隊
STARK 要加上隱私保護不會太難,只是 StarkWare 還沒有把這項功能放在未來規劃中
Cairo 簡介
標榜為圖靈完備的零知識證明系統語言,Cairo 對原本熟悉 Solidity 的開發者來說還是會感到比較難上手和陌生的。再加上套件庫還不夠充足,目前支援的雜湊函式是 Pedersen,數位簽章演算法是 ECDSA(相對於 SNARK,EdDSA 的效能反而比較差所以沒有支援)。
但 Cairo 還在早期開發的階段,相信開發體驗會越來越好的。
另外需要注意的是作為一個證明系統,會有 Prover 和 Verifier 的角色。而 STARK 的 Verifier 是公開的,但 Prover 軟體預計會有 License 保護。Prover 一般情況下不得用於商業用途,除非將 proof 上傳至官方的 Verifier。
最後要提及的是,第一版的 Cairo 是設計來方便開發者將 Dapp 的運算遷移至鏈下。不同於 Rollup,這個鏈下只會有它自己一個 Dapp。這個 Dapp 的項目方自己維護自己 Dapp 的 state。( Rollup 則是 operator 維護所有 Dapp 的 state,Dapp 開發者不需自己操煩)
這可能有點難懂。如果你有在寫 Solidity,想像一下今天你在合約要用到合約裡宣告的 storage 變數時,你要自己提供 merkle proof 上來,證明這個storage 變數真的是這個值。這個就是開發者要自己維護 state 的意思。
而第二版的 Cairo 則是 StarkNet 裡使用的 Cairo(第一和第二版是不同編譯器),這版的 Cairo 就是作為 Dapp 在 Rollup 開發所使用 — 開發者可以在合約裡宣告變數,變數的值不需開發者維護,可以直接假設存在。
註1:StarkWare 不喜歡 Rollup 這個詞,他們覺得 Data Availability 的需求是一段光譜:不一定得要把 data 全都送上 L1,中間有其他方式可以做不同層級的 Data Availability。
註2:第一版和第二版實際上在官方版本裡是 0.0.1 及 0.0.2,在撰文當前最新版即是 0.0.2
官方網站:https://www.cairo-lang.org
開發者文件:https://www.cairo-lang.org/docs/
開發環境
Cairo 有提供像是 Remix 的瀏覽器 IDE:playground。裡面提供各種範例練習和挑戰,除了可以編譯,還可以直接生成並上傳 proof。
註:但有些功能還是沒辦法在 playground 裡使用,例如要給你的程式 custom input 時。這時候只能在本地端開發才能使用這個功能。
開發 Cairo 要先安裝python,我將開發者文件整理出來的資料統整在這個 hackmd 文檔裡:https://hackmd.io/w690dpAQTsKeKZv3oikzTQ
裡面包含簡介、設置本地開發環境以及 Cairo 基礎(因為篇幅原因,所以不將內容複製到這裡)
註:我把開發者文件裡的代碼整理到這裡:https://github.com/NIC619/cairo_practice/tree/master/practices
如果不想在研究開發者文件過程中,還要自己手動拼湊裡面例子的話,可以直接用整理好的代碼來執行。同時 repo 裡還有包含一些額外自己測試 Cairo 功能的範例。
深入 Cairo
在那份 hackmd 文檔裡的開頭,可以連結到第二部分 — 深入 Cairo 的部分。裡面也是從開發者文件裡擷取出來我覺得比較重要的部分。如果你要讀開發者文件的話,我建議從 Hello Cairo 開始,它會從例子切入,會比較好知道 Cairo 怎麼使用。接著如果要更深入了解,再去讀 How Cairo Works。
StarkNet Cairo
第二版的 Cairo 其實功能和第一版的 Cairo 是差不多的,所以不必擔心在開發者文件裡學到的 Cairo 在 StarkNet 版本會不能用或差很多。在讀完 Hello Cairo/How Cairo works 後,就可以接著看 Hello StarkNet。會很順利的切換到 StarkNet 版本的 Cairo。
註1:我整理的文檔裡是按照第一版 Cairo 所寫的
註2:如果你從開發者文件一路看下來,體驗過非 StarkNet 版的 Cairo,那你在體驗 StarkNet 版的 Cairo 時一定會發現這更像一般智能合約的使用方式 — 你可以用 view 函式查詢 storage 變數,可以用 external 函式去執行合約(非 StarkNet 版本不是這樣操作 Dapp 的,這邊因為篇幅原因沒有詳細介紹)。
非常建議嘗試兩種版本的 Cairo,你會知道 1. 操作一個單獨在 L2 的 Dapp 和2. 操作與其他 Dapp 共存在 Rollup 上的 Dapp 的不同。這對了解 L2 怎麼運行、需要哪些資料、為什麼需要這些資料非常有幫助。
0.0.2 版的 StarkNet Cairo 目前還缺少一些功能:
函式還沒辦法宣告陣列或 struct 型態的參數
合約和合約之間還沒辦法互動
L1 沒有辦法讀取到 L2 的資料,L2 也沒辦法讀取到 L1 的資料。如果要建立跨 L2 Bridge,這個功能非常重要。
補充及個人心得
STARK 的 proof size 相比於 SNARK 系列的 proof size 大很多,又其證明所包含的交易數量對 proof size 和驗證時間的影響不大,所以把很多筆交易一併做一個 proof 會是對 STARK 非常有利、節省成本的方式(SNARK、STARK 比較表)。但這同時也是一個缺點,如果你的 Dapp 或 Rollup 的 TPS 不高,那就只能等更久時間搜集多一點的交易,要不然就只能提高成本來維持驗證 proof 的頻率。
StarkWare和 zkSync 一樣都有 Rollup 宇宙的概念( Rollup 宇宙的用詞並不精確,因為在他們的宇宙中不會所有子鏈都是 Rollup,而是會有依照 Data Availability 程度不同所區分的子鏈,像是 Validium、zk Porter 的設計),個人覺得能夠有(針對 Data Availability 程度的)選擇是會比只有一個選擇(完全 Data Available) 還好的方式,但實際上的可行性就要等其團隊釋出更多的資訊。
在 Rollup 越趨成熟的情況下,能夠提供快速跨 Rollup 服務的流動性提供者的角色會越來越重要。zk Rollup(StarkNet、zkSync、etc…)比 Optimistic Rollup (Optimism、Arbitrum、etc…)有著短上許多的 finalize 時間,這對降低流動性提供者的風險有很大的幫助,但目前 zk Rollup 支援合約功能甚至 L1 <-> L2 互動的完成度都比 Optimistic Rollup 還低上許多。短期內快速跨 Rollup 的服務應該還是侷限在 Optimitic Rollup 之間。
abbrev
[zkp 讀書會] Cairo 語言介紹 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
dapp瀏覽器 在 AppWorks Facebook 的最讚貼文
#NFTsummer Hi 大家好,我是本月值班編輯 Alyssa。上週 (6/9) ,我同事,AppWorks 分析師 Jack,與區塊鏈新創 Blocto 共同創辦人、也是 AppWorks #19 校友的李玄進行了一場 Fireside Chat,內容非常充實,於是我從中摘錄了三個主題,編輯成文章,分享給大家:
1. 回顧區塊鏈在過去五年內的發展變化:效能變好、應用更廣
2. NFT 的機會:新時代的價值呈現方式
3. DeFi 的機會:把金融主導權回歸個人
///
#回顧區塊鏈在過去五年內的發展變化:效能變好、應用更廣
李玄:我大概是從 2015 年開始接觸區塊鏈,先做了些自己感興趣的專案,2017 年加入 COBINHOOD,所以也看著區塊鏈的發展和成長好多年了。現在跟幾年前的產業狀況蠻不一樣的,大概有幾點:
第一點是,當初區塊鏈技術比較在實驗階段,可以選擇的公鏈很少,主要就是比特幣網路、以太坊等等,其他 EOS、Tron 等等都還在測試階段。直到現在,每秒鐘還是只能處理 7 到 20 個交易左右,這種效能對於實際應用是完全不夠的。很多人想要把區塊鏈用在支付、金融上面,假設把區塊鏈也當作一種支付工具,那至少要達到 VISA 的水準吧?VISA 大概每秒鐘處理幾千筆交易,所以當時的區塊鏈每秒鐘處理 20 筆交易,是完全不夠用。
但現在高效能的公鏈已經蠻多了,像我的前公司也做了個蠻高效的公鏈,我們在 2018 年的時候,可以做到每秒鐘超過 1 萬筆交易,而現在也有比這個更高效能的,目前效能王者應該是 Solana ,每秒鐘可以處理數萬筆交易。當初的效能瓶頸,現在已經不太存在了,如果你要做面對市場的實際應用,目前的鏈支撐得了,另外很多公鏈上面,也有第二層的擴容技術已經開發出來,進一步提升能承受的交易量。
再來,整個區塊鏈市場在幾年前還很新,大多數人關注區塊鏈或虛擬貨幣,主要還是為了炒幣和投資。當時真的有用區塊鏈來做事情的人,全世界可能不到 1%,其中真的有用 DApp 的人,可能又不到 10%,大多數人用區塊鏈做的唯一事情,就是把某個幣從一家交易所轉換到另一家而已。
從 2017 開始,大家就開始嘗試,例如音樂分享、或者是保險等等。也就是一些既有服務,可能有某些中心化的限制,或是沒有效率的地方,希望透過結合區塊鏈,讓整個系統的價值、效率變高,我覺得這種機會是存在的。可是現階段和理想的發展狀況,還有點距離,因為這些應用,必須要有足夠的人參與,讓它有網絡效應之後,才會發展起來。現階段真正用過區塊鏈應用的人比例還很低,你要讓這些人直接跳過所有中間過程,直接去用一個純區塊鏈的產品比較困難,但我覺得這樣的服務,在未來是很有機會成功。
///
#NFT的機會:新時代的價值呈現方式
李玄:近期比較可行的機會,在 NFT 和 DeFi 都會都有一些。DeFi 跟 NFT 也都是在 2016~17 年就萌芽,由幾個初始項目、經過幾年的發展,才到現在這樣,比較廣為接受。
為什麼大家都在談 NFT 的商機?因為現在的年輕人,對虛擬跟實體價值的認知有改變,如果去衡量實體資產和虛擬資產的價值,甚至有些人會覺得虛擬資產的價值更高一點。例如遊戲裡面的一把槍或寶物,可能比起現實生活中的一雙鞋或一件衣服還更有價值,炫耀起來更容易。所以 NFT 在這個時代,可以說是佔了一個蠻重要的角色。
現在比較簡單直觀的是,大家都結合 IP 去發行 NFT,所以你如果有些合作夥伴、或是你自己擁有一些 IP,你或許可以做應用,也可能賺到錢。發行 NFT 這件事,目前已經很多人做了,可是我覺得,可以想像下一步會興起什麼?用戶拿到 NFT 後有什麼搭配的機會?例如我有了 NFT 商品之後,總是想要炫耀,所以就有 Metaverse 或 Showroom,或是像我們認識一些團隊,有人結合 VR、有人結合電子相框做虛實整合,電子相框會綁定用戶的錢包,隨機顯示錢包裡的 NFT。我覺得搭配現在 NFT 潮流,這可能是一些可以嘗試的方向。
///
#DeFi的機會:把金融主導權回歸個人
李玄:DeFi 的價值,是它試圖在區塊鏈上做一個去中心化的金融服務。它滿足了某些原本傳統金融服務,例如借貸、交易、期貨衍生品等功能,同時他應用在區塊鏈上,所以帶來幾個好處,一個是 permissionless,不需要任何人授權你使用這個服務;另一個好處是,這些去中心化金融服務,所有功能,包括合約、程式、API 接口,都是公開在區塊鏈上的。例如一個借貸平台,要跟另一個交易平台串接在一起,變成一個產品可以直接借錢來交易,這樣的功能很容易在區塊鏈上發生,可能一兩天就可以接好,有點像是積木,可以組合出很多延伸應用,所以這整個產業成長的蠻快、蠻爆炸性的。
像 DeFi 的話,因為現在有很多新的鏈在蓬勃發展,現階段一種最直接的做法,是去複製某個已經在別的鏈上運行、用戶很多的模式,再搬到另一個鏈上面;或者是做整合器,例如現在市面上有三家不同交易所,就可以做整合,把交易功能串接起來,幫忙比價,我覺得這些是比較直觀的應用,目前也很多人嘗試。
還有一些其它的機會,例如結合虛擬和實體金融市場的串接。例如說,可以串接一些原物料,例如大麥、小麥的報價,或者是金價,讓這些交易在區塊鏈上面有效率的運行,我覺得這裡還蠻多機會。
換句話說,就是跟著現在既有的潮流,去觀察一些還缺乏的東西,從中去延伸發展。比起前面提到那種跳過既有行為模式,直接去做去中心化的應用,我覺得這個路線會更容易、更快速一點。
///
如果看完文章,有興趣了解更多 Jack 與李玄對談內容,可以參考完整影片:https://bit.ly/3xokiqV
///
[與談嘉賓]
Blocto 開發的 DApp 手機瀏覽器以及錢包,是許多人進入 Blockchain 以及 Crypto 世界的入口,今年,Blocto 又進一步在專為 NFT 所設計的公鏈 Flow 上,開發出第一個去中心化交易所 BloctoSwap: https://blocto.portto.io
在創辦 Blocto 之前,李玄曾先後在 Yahoo、Agoda、17LIVE 擔任軟體工程師,並曾領導 Cobinhood / Dexon 的開發團隊完成 ICO,創辦 Blocto 後,則申請加入 AppWorks Accelerator #19,是 AppWorks 生態系中,非常優秀的 Blockchain 創業者。
///
[同場提醒]
AppWorks Accelerator #23 正開放申請中,歡迎所有 AI、Blockchain、NFT、佈局東南亞的創業者們加入這個社群,一起切磋成長:https://bit.ly/2TB3oqy
dapp瀏覽器 在 AppWorks Facebook 的最讚貼文
【創業者如何用區塊鏈、NFT 創造未來?feat. 李玄 (Blocto 共同創辦人暨執行長)】
區塊鏈與 NFT,為什麼將是未來 10 年重要的典範轉移?其中又將衍生出哪些創業機會?創業者該如何掌握這一波契機?歡迎觀看擁有豐富區塊鏈創業經驗的李玄 (Blocto 共同創辦人暨執行長) 現身說法。
Blocto 開發的 DApp 手機瀏覽器以及錢包,是許多人進入 Blockchain 以及 Crypto 世界的入口,今年,Blocto 又進一步在專為 NFT 所設計的公鏈 Flow 上,開發出第一個去中心化交易所 BloctoSwap。在創辦 Blocto 之前,李玄曾先後在 Yahoo、Agoda、17LIVE 擔任軟體工程師,並曾領導 Cobinhood / Dexon 的開發團隊完成 ICO,創辦 Blocto 後,則申請加入 AppWorks Accelerator #19,是 AppWorks 生態系中,非常優秀的 Blockchain 創業者。
AppWorks Accelerator #23 已開放申請,歡迎 Blockchain 與 NFT 領域的創業者加入:https://bit.ly/3irycEA
dapp瀏覽器 在 xilibi2003/Upchain-wallet: 以太坊钱包(支持DApp 浏览器) 的推薦與評價
以太坊钱包(支持DApp 浏览器)- A Powerful Ethereum Android Wallet & DApp Browser - GitHub - xilibi2003/Upchain-wallet: 以太坊钱包(支持DApp 浏览器)- A Powerful ... ... <看更多>
dapp瀏覽器 在 区块链浏览器是属于dApp吗- YouTube 的推薦與評價
区块链 浏览器 是属于 dApp 吗. 113 views · 6 months ago ...more. Frank的加密之旅. 3.01K. Subscribe. 3.01K subscribers. 3. Share. Save. Report ... ... <看更多>
dapp瀏覽器 在 Video - Facebook 的推薦與評價
新功能上線 眾所期待的「 DApp 瀏覽器 」上線!現在透過錢包可以隨心所欲想換幣、投資、買NFT都沒問題! -------------------- 這邊試用 iOS: ... ... <看更多>