📜 [專欄新文章] [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.
👏 歡迎轉載分享鼓掌
同時也有51部Youtube影片,追蹤數超過7,970的網紅吳老師EXCEL VBA設計(大數據自動化)教學,也在其Youtube影片中提到,從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料 01_重點回顧與建立會員系統 02_會員資料讀取與切割與輸出 03_與寫入資料庫結合批次寫入資料 04_...
「python安裝套件查詢」的推薦目錄:
- 關於python安裝套件查詢 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的精選貼文
- 關於python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最佳貼文
- 關於python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的精選貼文
- 關於python安裝套件查詢 在 Re: [問題] 新手學習Python的開發環境 的評價
- 關於python安裝套件查詢 在 【python教學】windows 10 如何安裝套件pandas - YouTube 的評價
- 關於python安裝套件查詢 在 安裝Python與Package 的評價
python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的精選貼文
從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料
01_重點回顧與建立會員系統
02_會員資料讀取與切割與輸出
03_與寫入資料庫結合批次寫入資料
04_編號與關鍵字與日期資料查詢
05_改為與抓前十個會員與B和E欄
06_python套件抓取與下載requests模組
07_requests模組下載資料
08_下載資料與切割資料
完整教學
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python113
吳老師教學論壇
http://www.tqc.idv.tw/
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 110/1/13
EXCEL,VBA,Python,東吳推廣部,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的最佳貼文
從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料
01_重點回顧與建立會員系統
02_會員資料讀取與切割與輸出
03_與寫入資料庫結合批次寫入資料
04_編號與關鍵字與日期資料查詢
05_改為與抓前十個會員與B和E欄
06_python套件抓取與下載requests模組
07_requests模組下載資料
08_下載資料與切割資料
完整教學
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python113
吳老師教學論壇
http://www.tqc.idv.tw/
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 110/1/13
EXCEL,VBA,Python,東吳推廣部,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python安裝套件查詢 在 吳老師EXCEL VBA設計(大數據自動化)教學 Youtube 的精選貼文
從EXCEL VBA到Python開發第7次會員資料讀取與切割與輸出&寫入資料庫結合批次寫入資料&編號與關鍵字與日期資料查詢&python套件抓取與下載requests模組&下載資料與切割資料
01_重點回顧與建立會員系統
02_會員資料讀取與切割與輸出
03_與寫入資料庫結合批次寫入資料
04_編號與關鍵字與日期資料查詢
05_改為與抓前十個會員與B和E欄
06_python套件抓取與下載requests模組
07_requests模組下載資料
08_下載資料與切割資料
完整教學
http://goo.gl/aQTMFS
教學論壇(之後課程會放論壇上課學員請自行加入):
https://groups.google.com/forum/#!forum/scu_python113
吳老師教學論壇
http://www.tqc.idv.tw/
課程簡介:入門
建置Python開發環境
基本語法與結構控制
迴圈、資料結構及函式
VBA重要函數到Python
檔案處理
資料庫處理
課程簡介:進階
網頁資料擷取與分析、Python網頁測試自動化、YouTube影片下載器
處理 Excel 試算表、處理 PDF 與 Word 文件、處理 CSV 檔和 JSON 資料
實戰:PM2.5即時監測顯示器、Email 和文字簡訊、處理影像圖片、以 GUI 自動化來控制鍵盤和滑鼠
上課用書:
參考書目
Python初學特訓班(附250分鐘影音教學/範例程式)
作者: 鄧文淵/總監製, 文淵閣工作室/編著
出版社:碁峰 出版日期:2016/11/29
Python程式設計入門
作者:葉難
ISBN:9789864340057
出版社:博碩文化
出版日期:2015/04/02
吳老師 110/1/13
EXCEL,VBA,Python,東吳推廣部,自強工業基金會,EXCEL,VBA,函數,程式設計,線上教學,PYTHON安裝環境
python安裝套件查詢 在 【python教學】windows 10 如何安裝套件pandas - YouTube 的推薦與評價
【python教學】windows 10 如何安裝套件pandas若您要用python抓取網頁資料,可以先安裝套 ... ... <看更多>
python安裝套件查詢 在 安裝Python與Package 的推薦與評價
Step8. 透過 pip install 的方式安裝套件; 資料科學常用套件為: 1. scikit-learn 2. pandas ... <看更多>
python安裝套件查詢 在 Re: [問題] 新手學習Python的開發環境 的推薦與評價
另外再補充一些我自己的筆記, 提供參考:
1. Python IDLE 的套件管理程式是 pip.exe, 安裝 IDLE 後可以在命令提示字元輸入
pip --version, 如果出現找不到 pip, 安裝時要勾 PATH, 沒勾可以自己加.
2. 在 Python 裡是透過 import 來匯入套件, 內建的函式像是 print(), 不需要套件.
3. 套件其實就是函式庫, 透過 pip 安裝的套件是由 PiPy https://pypi.org/ 來的.
4. 安裝套件的方式是在命令列輸入 pip install <套件名稱>,
例如: pip install virtualenvwrapper
5. 但有時你會看到 conda install 的指令. conda 是另一個套件管理程式.
它安裝的來源不是同一個. 安裝後套件的目錄也不是同一個.
6. 有些套件在安裝 IDLE 後就裝好了, 只是沒有匯入. 像是 os 套件, sys 套件等.
7. 套件和模組有時是指同一個東西. 它們只差一個 __init__ 檔案外大致相同.
8. import sys 套件後有很多資訊可以參考, 例如:
分別輸入:
(a) sys.executable -> 可以看到目前 python 直譯器的目錄位置
(b) sys.path -> 可以看到套件匯入時的順序.
(c) sys.path.append('路徑名') -> 可以暫時新增要匯入的模組的檔案路徑
(d) sys.builtin_module_names -> 可以查看 Python 所有內建的模組名稱
9. import os 套件後也些資訊可以參考, 例如:
(a) os.getcwd() -> 可以知道目前的工作目錄, 如果讀/寫檔案會在這個目錄
10. 而 pip 也是可以 import pip, 也有些資訊可以參考, 例如:
(a) pip.__path__ -> 可以看到 pip 目前放在哪個目錄,
套件的目錄名稱通常為 /site-packages 通常在那個 pip 的上一層
11. 另外兩個常用指令 dir 和 help 可以找到很多基本資訊. 像是:
(a) help('modules') -> 可以查看本機所有可用的模組
(b) dir(__builtins__) -> 可以查看內建函數和物件
12. 同一台電腦裡有時候會有多個 python 的執行檔, 特別是用虛擬環境時.
13. Python 的虛擬環境其實只是一個資料夾, 它不是虛擬機器的意思.
14. 透過建立 Python 的虛擬環境, 電腦上會有多個 python 的直譯程式.
彼此是獨立互不關聯的.
15. 由於 python有v2和v3兩個版本, 同時每個套件又有n個不同的版本, 有些套件
和套件間的相依套件/模組會互相衝突.使用虛擬環境 (意思是建一個資料夾
放可執行 Python 的環境) 可以將不同版本的python和套件庫獨立出來.
16. 虛擬環境的產生也有很多不同的方式. 有用 PyCharm IDE 產生的, 用 conda
產生的, 用 pip venv, virtualenv 或用 virtualenvwrapper等很多種.
17. Python 程式是用縮排而非括號來區隔程式區塊, 縮排要用空白而非tab, 使用
tab 縮排會產生執行上的問題. 在使用編輯器時要記得把 tab 轉成空白.
18. 有些程式碼撰寫規範, 像是 PEP8 有空閒的話可以參考看看.我是沒看過.XD
19. Python 的 IDEL 可以在 config-extensions.def 檔案裡外掛一些功能.
像是 ClearWindows.py 可以在 IDLE 的功能表新增清理畫面的功能.
20. Python 的 IDLE 也有內建的除錯功能, 也可以匯入 import pdb 來除錯.
21. Python 的 List(列表), Tuple(元組) 類似其他語言的陣列(Array), 但
Python 在 3.3 開始還有另一個內建的 array(陣列) 型別 (import array)
以及 NumPy 套件的 np.array 型別, 剛開始學 Python 時很容易弄混.
22. Python 直譯器是由 C 寫成的, 而 CPython 是官方的實作. 也有其他的實作.
以上提供關鍵字, 在開始學習 Python 常碰到的問題.細節可以再在網上或書上查到.
※ 引述《jayzhuang (Jay)》之銘言:
: 各位大大您好~!
: 在下因為換新工作,新公司未來要我學習python相關的東西
: 但小弟是個新手,所以打算買本書來看看。
: 有看到網友與一些人推薦新手可以買看看這本書:
: https://reurl.cc/MvD0lL
: 或是另一本書:
: https://reurl.cc/yZXr32
: 不過我因為以前寫C#的,所以習慣都用Visual Studio(2015、2019)
: 在前公司也是都用VS,目前新公司也都是用VS開發。
: 我自己有實際在我的電腦用VS寫過一點點python的語法
: (單純的命令提示字元顯示那種,但還沒開始很深......)
: 想詢問看看這兩本書的內容,都可用VS環境學習嗎?
: 或是有人有推薦適合新手的python書,可用VS開發學習?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.137.104.155 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1591063968.A.E0D.html
※ 編輯: alvinlin (114.137.104.155 臺灣), 06/02/2020 12:32:39
... <看更多>