📜 [專欄新文章] [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.
👏 歡迎轉載分享鼓掌
同時也有287部Youtube影片,追蹤數超過4萬的網紅吳老師教學部落格,也在其Youtube影片中提到,東吳EXCEL VBA與資料庫雲端設計114第6次 上課內容: 01_重點回顧與格式化日期VBA程式說明 02_格式化日期VBA程式說明 03_宣告變數與用Range還原格式 04_VBA插入與刪除空白列 05_年曆VBA串接每個月第一天與其他天與格式化日期 06_黑名單篩選用COUNTIF與定義...
「宣告變數」的推薦目錄:
- 關於宣告變數 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於宣告變數 在 會計人的Excel小教室 Facebook 的精選貼文
- 關於宣告變數 在 重點就在括號裡 Facebook 的精選貼文
- 關於宣告變數 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於宣告變數 在 吳老師教學部落格 Youtube 的最佳貼文
- 關於宣告變數 在 吳老師教學部落格 Youtube 的最讚貼文
- 關於宣告變數 在 [問題] 變數宣告需要提到迴圈外嗎? - 看板java 的評價
- 關於宣告變數 在 淺談var 與let 的差異以及有無宣告變數的差異 的評價
- 關於宣告變數 在 什麼?JavaScript 的變數不用宣告就可以使用? #25 - GitHub 的評價
宣告變數 在 會計人的Excel小教室 Facebook 的精選貼文
Exce VBA較複雜程式都需要變數,本文以網路爬蟲取得央行銀行存款利率為例,介紹如何以Dim宣告變數,有哪些資料型態,再以InputBox函數輸入網址取得網頁資料。
歡迎追踪贊贊小屋VBA程式設計臉書專頁:
https://www.facebook.com/zanzanvba
宣告變數 在 重點就在括號裡 Facebook 的精選貼文
說真的,在學校的經歷,對你而言其實不是最重要的。哪怕你是會唸書的高材生,或是不會唸書、學校認為的「笨蛋」,因為真正重要的,其實還是你接下來會遇見的所有事情,一切的一切,會影響變成接下來的你。
說起來,有些人說我文筆很好,問我是不是哪來的寫手或是什麼文字工作者,我總會說「嗯會開這個粉絲團只是興趣」,但我沒跟那些人說,我才不是什麼語文的科班生(我連文組在教什麼都不知道),在我人生裡正式的國文訓練,其實在國中三年的康軒版跟南一版的國文課本就已經結束了,我從來就沒有受過什麼文字訓練,商科學校的五專國文課全部都是浪費時間,我沒有考過高中學測,在我開始在網路上寫日劇心得之前,我從來沒有認真寫過別人給我定下的命題作文。
對我來說,那時候真正的國文課教室,是窩在商科學校裡平時沒人去的圖書館角落,是坐在誠品信義店的日本文學區的邊邊,是蹲在三民書局二樓的日式推理書櫃前。
你真的想寫些什麼東西,有沒有受過訓練,其實都不是重點,你想不想要說出你想說的東西,這才是重點。
有時候我會想,如果那時我在一面聽著蟬叫聲,一邊坐在板橋大觀路上的學校裡振筆疾書寫著轉學考考卷時,真的不是差了四分就能正取,而是真的讓我拿到了那所學校的電影系門票,那我現在到底還會不會開始在臉書上開了這個粉絲團,在這裡寫著一些日劇的心得?
然後有時看到,當年我有去考的那些學校電影系的學生們來到這裡,對我寫的一些文字有些感觸,你們知道嗎?我只是一個當年敗給你們的魯蛇,你們拿到了門票,你們現在在學校裡做的事情,讀的課本,是我那時想做的事情,但我失敗了,我想你們可能也很難理解吧。
我要說的是,我知道學歷這種東西,你拿到了對你之後的人生會很方便,但是,那其實不是最重要的,最重要的是你在那些時間裡,做了什麼事情,遇見什麼人,一切的一切,都會影響你變成什麼樣的人。
我用我自己的經歷來說,學校教給你的正規東西,正經學問,在未來都派不上用場,最重要的是你要怎麼運用。
我在資管系裡學到那學的很差的程式語言跟資料庫能力,我通通都拿來運用在這個粉絲團,在這裡開始寫進日劇心得時,要像寫程式時要先宣告變數,想好這齣戲的細節,然後把它編排進去,然後把所有寫過的東西,都整理在臉書上提供的相簿功能,宮藤官九郎有宮藤官九郎資料庫,坂元裕二有坂元裕二資料庫,一個一個排好,把它系統化。
這一切說起來很難想像,但我真的就是這麼做出來的。
我的過去沒有很會寫文字的學歷,那很會運用數理邏輯的學歷,對現在的我而言,全都派不上用場,但這些就是你的累積,你用你自己的經歷,變成你的想法,你的能力,那才是你。
活著就是一種累積,人生真的沒有什麼事物是會被浪費掉的。
宣告變數 在 吳老師教學部落格 Youtube 的最讚貼文
東吳EXCEL VBA與資料庫雲端設計114第6次
上課內容:
01_重點回顧與格式化日期VBA程式說明
02_格式化日期VBA程式說明
03_宣告變數與用Range還原格式
04_VBA插入與刪除空白列
05_年曆VBA串接每個月第一天與其他天與格式化日期
06_黑名單篩選用COUNTIF與定義名稱與篩選
07_黑名單篩選用VBA篩選與複製
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/?hl=zh-TW#!forum/excel-vba-114
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
課程簡介
五大類函數與自訂函數
一、文字和資料函數
二、邏輯函數
三、日期和時間函數
四、數學和三角函數
五、檢視和參照函數
其他綜合範例
上課用書:
Excel VBA一點都不難:一鍵搞定所有報表
作者: Excel Home
出版社:博碩
出版日期:2013/06/26
定價:380元
超圖解 Excel VBA 基礎講座
作者: 亮亨/譯 出版社:旗標
出版日期:2006/05/15 定價:420元
日本Amazon網站同類書籍銷售No.1
吳老師 110/4/12
函數,東吳進修推廣部,自強基金會,程式設計,線上教學excel vba教學電子書,excel vba範例,vba語法,vba教學網站,vba教學講義,vba範例教學,excel vba教學視頻
宣告變數 在 吳老師教學部落格 Youtube 的最佳貼文
東吳EXCEL VBA與資料庫雲端設計114第6次
上課內容:
01_重點回顧與格式化日期VBA程式說明
02_格式化日期VBA程式說明
03_宣告變數與用Range還原格式
04_VBA插入與刪除空白列
05_年曆VBA串接每個月第一天與其他天與格式化日期
06_黑名單篩選用COUNTIF與定義名稱與篩選
07_黑名單篩選用VBA篩選與複製
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/?hl=zh-TW#!forum/excel-vba-114
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
課程簡介
五大類函數與自訂函數
一、文字和資料函數
二、邏輯函數
三、日期和時間函數
四、數學和三角函數
五、檢視和參照函數
其他綜合範例
上課用書:
Excel VBA一點都不難:一鍵搞定所有報表
作者: Excel Home
出版社:博碩
出版日期:2013/06/26
定價:380元
超圖解 Excel VBA 基礎講座
作者: 亮亨/譯 出版社:旗標
出版日期:2006/05/15 定價:420元
日本Amazon網站同類書籍銷售No.1
吳老師 110/4/12
函數,東吳進修推廣部,自強基金會,程式設計,線上教學excel vba教學電子書,excel vba範例,vba語法,vba教學網站,vba教學講義,vba範例教學,excel vba教學視頻
宣告變數 在 吳老師教學部落格 Youtube 的最讚貼文
東吳EXCEL VBA與資料庫雲端設計114第6次
上課內容:
01_重點回顧與格式化日期VBA程式說明
02_格式化日期VBA程式說明
03_宣告變數與用Range還原格式
04_VBA插入與刪除空白列
05_年曆VBA串接每個月第一天與其他天與格式化日期
06_黑名單篩選用COUNTIF與定義名稱與篩選
07_黑名單篩選用VBA篩選與複製
完整教學
http://goo.gl/aQTMFS
吳老師教學論壇
http://www.tqc.idv.tw/
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/?hl=zh-TW#!forum/excel-vba-114
懶人包:
EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524
課程簡介
五大類函數與自訂函數
一、文字和資料函數
二、邏輯函數
三、日期和時間函數
四、數學和三角函數
五、檢視和參照函數
其他綜合範例
上課用書:
Excel VBA一點都不難:一鍵搞定所有報表
作者: Excel Home
出版社:博碩
出版日期:2013/06/26
定價:380元
超圖解 Excel VBA 基礎講座
作者: 亮亨/譯 出版社:旗標
出版日期:2006/05/15 定價:420元
日本Amazon網站同類書籍銷售No.1
吳老師 110/4/12
函數,東吳進修推廣部,自強基金會,程式設計,線上教學excel vba教學電子書,excel vba範例,vba語法,vba教學網站,vba教學講義,vba範例教學,excel vba教學視頻
宣告變數 在 淺談var 與let 的差異以及有無宣告變數的差異 的推薦與評價
透過上面我們可以了解到一件事情,如果沒有使用 var 宣告的變數「會被當作物件屬性新增」的方式新增,因此就會強烈建議你變數一定要使用 var 宣告,否則 ... ... <看更多>
宣告變數 在 什麼?JavaScript 的變數不用宣告就可以使用? #25 - GitHub 的推薦與評價
為什麼要理解JavaScript 的宣告變數方式? 緣起在看完《當我們在學程式時,要學的到底是什麼?》 嚇得屁滾尿流之後,最近都在寫PHP 的我趕快拾 ... ... <看更多>
宣告變數 在 [問題] 變數宣告需要提到迴圈外嗎? - 看板java 的推薦與評價
各位先進安好
之前寫迴圈,都會將變數宣告提到外面來,如:
ClassA aaa;
for(int i=0; i<10; i++){
aaa = new ClassA();
--------
--------
}
但今天同事告知說不用這樣做
因為裡面的「new ClassA()」其實也是每次迴圈都在宣告
請問最好的做法是什麼呢?
這方面效能的知識有什麼關鍵字或書可以推薦嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.168.71
※ 文章網址: https://www.ptt.cc/bbs/java/M.1462859838.A.9E7.html
... <看更多>