📜 [專欄新文章] [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.
👏 歡迎轉載分享鼓掌
同時也有2部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,程式亂寫也可以動,要怎麼寫的好或易於閱讀,就得花上一番功夫去學習寫作技巧。 這支影片會和你分享一些基本的知識點,實戰技巧基本上當代程式語言開發都能使用 不過每個時代會有不同的想法跟觀點,不同的團隊也會有不一樣的慣例,希望這次的內容能夠給你一些不一樣的想法 喜歡影片的話!可以幫忙點個喜歡以及分享...
變數編程 在 COMPOTECHAsia電子與電腦 - 陸克文化 Facebook 的最佳解答
#物聯網IoT #汽車電子 #ISO26262 #電子設計自動化EDA #晶片變異OCV #人工智慧AI #機器學習MachineLearning #FPGA #視覺運算 #卷積神經網路CNN #雷達/光達 #點雲PointCloud #高效能運算HPC #系統單晶片SoC #系統級封裝SiP
【AI 不該閉門造車或犧牲血汗勞力換取!】
半導體製程微縮,讓晶片實體化工作更須謹慎以對。28 nm 之前只要留意間距空隙,基本上即大勢底定;但進入 28 nm 以下,金屬線的粗細、長短皆可能為製程憑添變數——在此之前,晶片繞線的規則相對單純;但越往先進製程發展,形態越多變且容易重疊。到了 10 nm 以下,若金屬線徑未隨著電晶體變小,晶片尺寸仍無法有效縮減;欲降低 CPU 功耗,也無法再透過新的光刻 (lithography) 材料和架構達成目的,須借助設計與系統級技術共同優化。
以常數作為額定值降低系數 (derating factor) 推估「晶片變異」(OCV) 的建模方式不再適用。當變異來源擴大,勢必得輔以統計與機率概念,才能直搗黃龍、加速實作工程。為弄清層層疊疊、錯綜複雜的脈絡關係,結合「機器學習」(Machine Learning) 的電子設計自動化 (EDA) 工具可從龐大的訓練組合中萃取設計資料精華,減少試誤徒勞及來回修正。此外,「異質晶片堆疊」的互連 (interconnect) 功耗、各層執行速度、立體封裝乃至時脈架構,皆與高效能混合訊號設計密不可分。
使用者能有多大耐心操作智能裝置?開發者又有多少時間能搶搭商機?物聯網 (IoT) 不是只有連上網路就好,重要的是如何收集有用的數據,並培育正向人工智慧 (AI) 作為助力。藉由將 AI 概念導入設計工具可加速「核心引擎」,盡速以數學推演收斂適用的 IP 集合,並經由模擬檢驗是否符合預期?還有助於將引擎中的 ASIC 模擬結果與 FPGA 編程環境無縫接軌,既可解決 FPGA 承載有限的問題,又能讓軟體工程師同步編譯,不須挨到晶片就緒才開始動作。
進行情境模擬時,也不須逐一打開描述文檔、餵入資料才能展示影像成果,可聰明地自動成像 (Render),更具「即視感」、方便即時修正設計。因此,EDA 須朝向快捷、智慧、全流程演進——平行運算提升處理速度、精煉經驗增強預知能力以及統一引擎貫穿設計流程,已是必然走向。可惜,就 EDA 廠商觀察,台灣廠商雖勤於模擬工作,卻相對忽略「驗證」環節,棋差一著的後果,換來的是時間、金錢上的滿盤皆輸……。
延伸閱讀:
《IoT 下一站哩程:萃取大數據 ==> 培育人工智慧》
http://compotechasia.com/a/shi__shang_/2017/0915/36703.html
(點擊內文標題即可閱讀全文)
#益華電腦Cadence #Tensilica #TÜV SÜD #日月光 #鴻海 #鴻佰科技
★★【智慧應用開發論壇】(FB 不公開社團:https://www.facebook.com/groups/smart.application/) 誠邀各界擁有工程專業或實作經驗的好手參與討論,採「實名制」入社。申請加入前請至 https://goo.gl/forms/829J9rWjR3lVJ67S2 填寫基本資料,以利規劃議題方向;未留資料者恕不受理。★★
變數編程 在 COMPOTECHAsia電子與電腦 - 陸克文化 Facebook 的最佳貼文
#機電整合 #汽車電子 #車用影像 #自動駕駛 #車聯網IoV #次世代駕駛資訊平台研發聯盟
【機電整合,酝釀下一波隱形冠軍】
N 倍速時代與全球連動使然,讓產業環境更顯瞬息萬變。除了產業本身的變遷,大型運動賽事、配套策略和總體經濟活動等因素,都可能成為關鍵變數。值得留意的是,系統設計隨著時間過去,結構上亦發生變化;例如,類比與數位的整合、動力供應由分散走向單一……,導致工程測試趨於複雜且冗長。以工業控制應用常見的「可編程邏輯控制器」(PLC) 為例,從開發到認證須耗時 3~5 年。有鑑於此,位於上游的半導體廠商,開始以「完整設計」為賣點。
藉由專業的建議設計方案,為開發者提供線路圖和測試報告、協助縮短設計週期,加速市場應變能力。如此,又衍生出另一個問題:是否有侷限設計彈性的疑慮?事實上,像工控這類產品,對訊號穩定性和可靠度的要求甚於一切。獲得完整測試數據、原理圖或區塊圖,有助說明電路的功能和性能材料清單 (BOM) 和設計文件;若再輔以模型、軟體、代碼示例、設計指南、評估模組,既確保元件功能與相容性無虞,又可在驅動系統和軟體上尋求差異化,兩者並不衝突。
體現在台灣本土產業,許多原本就是全球 Tier2、Tier3 汽車供應鏈的得力夥伴、在封閉的汽車零組件市場佔有一席之地的機械/機構廠,亦緊跟國際汽車大廠的電動化和智慧聯網腳步、大量配置電子元件。對於機電整合工程,又是一大學問;上述廠商或透過自行增聘電子專業人才、或尋求車測中心/工研院等第三方機構委外開發及技轉,「完整設計」能為這些憑藉實力深受信賴、行事低調的「隱形冠軍」相助一臂之力。
車用電子數量規模雖無法與消費類相比,但由於門檻高、產品生命週期長,且中、小型關鍵零組件廠商能量充沛,獲利能力不容小覷。此外,為符合世界一級車廠或原裝製造商要求,台灣的車用電子多主動向安規看齊,也是提升獲利的原因。
延伸閱讀:
《TI:機電整合潛力大 TI Designs 領軍擘劃藍圖》
http://compotechasia.com/a/____/2017/0117/34512.html
(點擊內文標題即可閱讀全文)
#德州儀器TI #TI Designs #數位3D儀表 #多屏顯示控制 #虛像抬頭顯示 #3D影像安全
〔本文將於發佈次日下午轉載至 LinkedIn、Twitter 和 Google+ 公司官方專頁,歡迎關注〕:
https://www.linkedin.com/company/compotechasia
https://twitter.com/lookCOMPOTECH
https://goo.gl/YU0rHY
變數編程 在 在地上滾的工程師 Nic Youtube 的最讚貼文
程式亂寫也可以動,要怎麼寫的好或易於閱讀,就得花上一番功夫去學習寫作技巧。
這支影片會和你分享一些基本的知識點,實戰技巧基本上當代程式語言開發都能使用
不過每個時代會有不同的想法跟觀點,不同的團隊也會有不一樣的慣例,希望這次的內容能夠給你一些不一樣的想法
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
章節:
00:00 提升品質的影響
01:29 有意義的命名比簡寫更好
03:01 限制傳入參數數量
05:03 簡化條件表達式
06:37 變數定義範圍限制
08:28 一次只做一件事
10:35 Early return
━━━━━━━━━━━━━━━━
🎬 觀看我的生活廢片頻道: https://bit.ly/2Ldfp1B
⭐ instagram (生活日常): https://www.instagram.com/niclin_tw/
⭐ Facebook (資訊分享): https://www.facebook.com/niclin.dev
⭐ Blog (技術筆記): https://blog.niclin.tw
⭐ Linkedin (個人履歷): https://www.linkedin.com/in/nic-lin
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
✉️ 合作邀約信箱: niclin0226@gmail.com
#前端 #後端 #工程師
變數編程 在 hashTECH 科技玩物 Youtube 的最佳解答
上次只學了「指令(Command)」與「函數(Function)」實在太皮毛,總不能每次都要我們親自教電腦走每一步吧?
這次進深一點,學習讓電腦自行「思考」的方法,讓它們自行按現況作出行動,就是「條件碼」以及「變數」。
教學全文:https://bit.ly/3eby86O
——————————————————————————————
好玩 gadgets 情報/開箱評測:https://hk01.app.link/hth9wwJmTQ
最新遊戲資訊/攻略:https://hk01.app.link/oOWSyaOmTQ
Facebook:01宅民黨 (https://www.facebook.com/01OtakuParty)