[爆卦]讀書會心得範例是什麼?優點缺點精華區懶人包

雖然這篇讀書會心得範例鄉民發文沒有被收入到精華區:在讀書會心得範例這個話題中,我們另外找到其它相關的精選爆讚文章

在 讀書會心得範例產品中有13篇Facebook貼文,粉絲數超過3,460的網紅Taipei Ethereum Meetup,也在其Facebook貼文中提到, 📜 [專欄新文章] [zkp 讀書會] Cairo 語言介紹 ✍️ NIC Lin 📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium Cairo 是 STARK 證明系統的其中一個編程語言,...

讀書會心得範例 在 佳佳|女子生活實踐家 Instagram 的精選貼文

2021-04-04 16:45:08

[閱讀分享]:醫學院高材生才知道的驚人記憶術 基本上這是一個工具書,作者用科學去解釋大腦的運作並提供學習效率提升的方式。當初會知道這本書是來自一個國考榜首朋友的推薦,也試著用書中的方法閱讀,意外的有效。 1、人的大腦必須產生認知才有辦法長期的記憶。必須要對你的目標或者是要閱讀的內容「有感」,腦袋才...

  • 讀書會心得範例 在 Taipei Ethereum Meetup Facebook 的最讚貼文

    2021-06-29 02:57:14
    有 9 人按讚

    📜 [專欄新文章] [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.

    👏 歡迎轉載分享鼓掌

  • 讀書會心得範例 在 Taipei Ethereum Meetup Facebook 的最佳貼文

    2021-06-21 17:57:12
    有 1 人按讚

    📜 [專欄新文章] ZKP 與智能合約的開發入門

    ✍️ Johnson

    📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

    這篇文章將以程式碼範例,說明 Zero Knowledge Proofs 與智能合約的結合,能夠為以太坊的生態系帶來什麼創新的應用。

    本文為 Tornado Cash 研究系列的 Part 2,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:

    Part 1:Merkle Tree in JavaScript

    Part 3:Tornado Cash 實例解析

    Special thanks to C.C. Liang for review and enlightenment.

    近十年來最強大的密碼學科技可能就是零知識證明,或稱 zk-SNARKs (zero knowledge succinct arguments of knowledge)。

    zk-SNARKs 可以將某個能得出特定結果 (output) 的計算過程 (computation),產出一個證明,而儘管計算過程可能非常耗時,這個證明卻可以快速的被驗證。

    此外,零知識證明的額外特色是:你可以在不告訴對方輸入值 (input) 的情況下,證明你確實經過了某個計算過程並得到了結果。

    上述來自 Vitalik’s An approximate introduction to how zk-SNARKs are possible 文章的首段,該文說是給具有 “medium level” 數學程度的人解釋 zk-SNARKs 的運作原理。(可惜我還是看不懂 QQ)

    本文則是從零知識證明 (ZKP) 應用開發的角度,結合電路 (circuit) 與智能合約的程式碼來說明 ZKP 可以為既有的以太坊智能合約帶來什麼創新的突破。

    基本上可以謹記兩點 ZKP 帶來的效果:

    1. 擴容:鏈下計算的功能。
    2. 隱私:隱藏秘密的功能。

    WithoutZK.sol

    首先,讓我們先來看一段沒有任何 ZKP 的智能合約:

    這份合約的主軸在 process(),我們向它輸入一個秘密值 secret,經過一段計算過程後會與 answer 比對,如果驗證成功就會改寫變數 greeting 為 “answer to the ultimate question of life, the universe, and everything”。

    Computation

    而計算過程是一個簡單的函式:f(x) = x**2 + 6。

    我們可以輕易推出秘密就是 42。

    這個計算過程有很多可能的輸入值 (input) 與輸出值 (output):
    f(2) = 10
    f(3) = 15
    f(4) = 22


    但是能通過驗證的只有當輸出值和我們存放在合約的資料 answer 一樣時,才會驗證成功,並執行 process 的動作。

    可以看到有一個 calculate 函式,說明這份合約在鏈上進行的計算,以及 process 需要輸入參數 _secret,而我們知道合約上所有交易都是公開的,所以這個 _secret 可以輕易在 etherscan 上被看到。

    從這個簡單的合約中我們看到 ZKP 可以解決的兩個痛點:鏈下計算與隱藏秘密。

    Circuits

    接下來我們就改寫這份合約,加入 ZKP 的電路語言 circom,使用者就能用他的 secret 在鏈下進行計算後產生一個 proof,這 proof 就不會揭露有關 secret 的資訊,同時證明了當 secret 丟入 f(x) = x**2 + 6 的計算過程後會得出 1770 的結果 (output),把這個 proof 丟入 process 的參數中,經過 Verifier 的驗證即可執行 process 的內容。

    有關電路 circuits 的環境配置,可以參考 ZKP Hello World,這裡我們就先跳過去,直接來看 circom 的程式碼:

    template Square() { signal input in; signal output out; out <== in * in;}template Add() { signal input in; signal output out; out <== in + 6;}template Calculator() { signal private input secret; signal output out; component square = Square(); component add = Add(); square.in <== secret; add.in <== square.out; out <== add.out;}component main = Calculator();

    這段就是 f(x) = x**2 + 6 在 circom 上的寫法,可能需要時間去感受一下。

    ZK.sol

    circom 寫好後,可以產生一個 Verifier.sol 的合約,這個合約會有一個函式 verifyProof,於是我們把上方的合約改寫成使用 ZKP 的樣子:

    我們可以發現 ZK 合約少了 calculate 函式,顯然 f(x) = x**2 + 6 已經被我們寫到電路上了。

    snarkjs

    產生證明的程式碼以 javascript 寫成如下:

    let { proof, publicSignals } = await groth16.fullProve(input, wasmPath, zkeyPath);

    於是提交 proof 給合約,完成驗證,達到所謂鏈下計算的功能。

    最後讓我們完整看一段 javascript 的單元測試,使用 snarkjs 來產生證明,對合約的 process 進行測試:

    對合約來說, secret = 42 是完全不知情的,因此隱藏了秘密。

    publicSignals

    之前不太清楚 publicSignals 的用意,因此在這裡特別說明一下。

    基本上在產生證明的同時,也會隨帶產生這個 circom 所有的 public 值,也就是 publicSignals,如下:

    let { proof, publicSignals } = await groth16.fullProve(input, wasmPath, zkeyPath);

    在我們的例子中 publicSignals 只有一個,就是 1770。

    而 verifyProof 要輸入的參數除了 proof 之外,也要填入 public 值,簡單來說會是:

    const isValid = verifyProof(proof, publicSignals);

    問題來了,我們在設計應用邏輯時,當使用者要提交參數進行驗證的時候,publicSignals 會是由「使用者」填入嗎?或者是說,儘管是使用者填入,那它需不需要先經過檢查,才可以填入 verifyProof?

    關鍵在於我們的合約上存有一筆資料:answer = 1770

    回頭看合約上的 process 在進行 verifyProof 之前,必須要檢查 isAnswer(publicSignals[0]):

    想想要是沒有檢查 isAnswer,這份合約會發生什麼事情?

    我們的應用邏輯就會變得毫無意義,因為少了要驗證的答案,就只是完成計算 f(42) = 1770,那麼不論是 f(1) = 7 或 f(2) = 10,使用者都可以自己產生證明與結果,自己把 proof 和 publicSignals 填入 verifyProof 的參數中,都會通過驗證。

    至此可以看出,ZKP 只有把「計算過程」抽離到鏈下的電路,計算後的結果仍需要與鏈上既有的資料進行比對與確認後,才能算是有效的應用 ZKP。

    應用邏輯的開發

    本文主要談到的是 zk-SNARKs 上層應用邏輯的開發,關於 ZKP 的底層邏輯如上述使用的 groth16 或其他如 plonk 是本文打算忽略掉的部分。

    從上述的例子可以看到,即使我們努力用 circom 實作藏住 secret,但由於計算過程太過簡單,只有 f(x) = x**2+6,輕易就能從 answer 反推出我們的 secret 是 42,因此在應用邏輯的開發上,也必須注意 circom 的設計可能出了問題,導致私密訊息容易外洩,那儘管使用再強的 ZKP 底層邏輯,在應用邏輯上有漏洞,也沒辦法達到隱藏秘密的效果。

    此外,在看 circom 的程式碼時,可以關注最後一個 template 的 private 與 public 值分別是什麼。以本文的 Calculator 為例,private 值有 secret,public 值有 out。

    另外補充:

    如果有個 signal input 但它不是 private input,就會被歸類為 public。

    一個 circuit 至少會有一個 public,因為計算過程一定會有一個結果。

    最後,在開發的過程中我會用 javascript 先實作計算過程,也可以順便產出 input.json,然後再用 circom 語言把計算過程實現,產生 proof 和 public 後,再去對照所有 public 值和 private 值,確認是不是符合電路計算後所要的結果,也就是比較 javascript 算出來的和 circom 算出來的一不一樣,如果不一樣就能確定程式碼是有 bug 的。

    參考範例:https://github.com/chnejohnson/circom-playground

    總結

    本文的程式碼展現 ZKP 可以做到鏈下計算與隱藏秘密的功能,在真實專案中,可想而知電路的計算過程不會這麼單純。

    會出現在真實專案中的計算像是 hash function,複雜一點會加入 Merkle Tree,或是電子簽章 EdDSA,於是就能產生更完整的應用如 Layer 2 擴容方案之一的 ZK Rollup,或是做到匿名交易的 Tornado Cash。

    本文原始碼:https://github.com/chnejohnson/mini-zkp

    下篇文章就來分享 Tornado Cash 是如何利用 ZKP 達成匿名交易的!

    參考資料

    概念介紹

    Cryptography Playground

    zk-SNARKs-Explainer

    神奇的零知識證明!既能保守秘密,又讓別人信你!

    認識零知識證明 — COSCUP 2019 | Youtube

    應用零知識證明 — COSCUP 2020 | Youtube

    ZK Rollup

    動手實做零知識 — circom — Kimi

    ZK-Rollup 开发经验分享 Part I — Fluidex

    ZkRollup Tutorial

    ZK Rollup & Optimistic Rollup — Kimi Wu | Medium

    Circom

    circom/TUTORIAL.md at master · iden3/circom · GitHub

    ZKP Hello World

    其他

    深入瞭解 zk-SNARKs

    瞭解神秘的 ZK-STARKs

    zk-SNARKs和zk-STARKs解釋 | Binance Academy

    [ZKP 讀書會] MACI

    Semaphore

    Zero-knowledge Virtual Machines, the Polaris License, and Vendor Lock-in | by Koh Wei Jie

    Introduction & Evolution of ZK Ecosystem — YouTube

    The Limitations of Privacy — Barry Whitehat — YouTube

    Introduction to Zero Knowledge Proofs — Elena Nadolinski

    ZKP 與智能合約的開發入門 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

    👏 歡迎轉載分享鼓掌

  • 讀書會心得範例 在 小金魚的人生實驗室 Facebook 的最讚貼文

    2021-01-12 13:47:52
    有 132 人按讚

    #我如何做我的年度計畫 ​

    如果你想要做年度計畫,我會建議自己一點時間思考,然後徹底地執行。​

    五月天的阿信曾經說過,當時非常懷疑是否要繼續搞樂團,他騎著機車經過了自強隧道,然後他告訴自己:我就思考一個隧道的時間,思考完了,就做吧。​

    後來,有了我們看到的五月天。​

    針對一年要怎麼過,你的確是需要一點時間思考,但不用思考一整年XDDD 現在是1/12,如果你真的需要思考的話,現在是2021/1/12,那我們就思考到2021/1/31吧。​

    最遲,讓我們2/1就開始你的計畫。​
    一個月、一個季度、一年都可以。無論你的計畫多久,#你都需要從第一天開始。​

    是不是從1/1開始從來就無所謂,我去年開始做日更,第一天是:2020/6/8。​

    (我為什麼記憶力這麼好,喔因為我有寫blog啊,我直接搜尋XDDD)這根本就是一個隨機開始的日期,對於結果有差嗎?沒有。​

    #重點不是從哪一天開始,#重點是先開始。​



    如果你想要訂年度計畫,跟各位分享我的年度計畫制定方法:​

    ① 步驟一:​
    為你的2021年訂立一個最高的目標,我通常會說:2021,是_______的一年​

    這個想法是來自 #微亮計畫,我覺得主意非常好。​

    關鍵是,你今年最重要的事情是什麼。​
    我的是 #最滋潤的一年。​

    之前也有邀請大家讓 2021年是 #你開始了解自己的一年。​

    有夥伴跟我分享,2021年是 #行動的一年。​
    找到你的最高指導原則,#給自己的2021年一個方向。​


    ② 步驟二:​
    三件為了達成這個最高的目標要做的事情​

    一個太少,不制定數量,我們就會無限寫,彷彿自己是超人可以做100件事情那樣XDDD​
    (這感覺我懂,我以前也是這樣,大家真的不孤單)​

    所以不要多,就三件事情!​

    如果你現在超過三項,如同昨天直播有人分享的那樣:他開始刪除了,因為真的會做不完。​

    人如果沒有成就感就會覺得沒動力,因此,千萬不要制定絕對做不到的那種計畫,你會很沮喪的XDDD​

    ③ 步驟三:​
    每一個要做的事情各自列下1-3個執行項目​
    目標搭配執行項目。​

    好的執行項目包含了「#時間」與「#預計產出內容」。​

    什麼時間點要做什麼事情。​

    時間是什麼時候?​
    不要說每週,要說「每週三」,不要說每個月,要直接訂下一個日期,打開手機,就在手機上寫下這個日期。​

    產出物是什麼?​
    簡報?筆記?文章?一開始,最好是一個可以看得到的東西,可以的話,分享會讓你的成就感提升。​

    ④ 步驟四:​
    列出時間(尤其是 #重點的時間先列下來)​

    這件事情,看似很小,但你相信我,你把時間列下來,你的心就安了一半。​

    不信的話,你自己嘗試一下XDDD(這點是昨天直播完直接有人回饋單回饋的。)​


    以下為我的範例:​

    我的2021年為 #最滋潤的一年。​

    三個要做的事情有:​
    #幫助他人搭建舞台​
    #紮實書籍實作​
    #系統化文章書寫​

    1-3個action plan​
    【幫助他人搭建舞台】​
    ① #線下讀書會​
    ② #日更團分團的執行計畫​

    【紮實書籍實作】​
    ① #49週的線上讀書會​
    ② #雙週華爾街日報導讀​
    ③ #哈佛商業評論​

    【系統化書寫】​
    ① #職涯​
    ② #日更團創作者派對心得​
    ③ #書籍實作心得​

    【Tips】​
    #每天感恩日記(在我IG @goldfishblog)​
    #每月回顧(會有免費的月直播)​


    我接下來會分不同的文章公布:​

    ① #線下讀書會

    要去各個縣市喔(喔耶!我順便去小旅行)​
    歡迎全台灣的讀者我們一起來舉辦讀書會,把讀書會變好玩變大XDDD​


    ② #日更團分團的執行計畫

    預計成立五個分團,我會分享去年的運營方式,今年也會舉辦第二次的日更團創作者派對、以及日更團創作者高峰會,想想就覺得好興奮。​


    ③ #線上讀書會​

    這是一個為期49週的讀書會,我想要為自己好好的讀書,從感情、心靈、工作開始。​

    因此,彼此讀很多很多書,我想要就讀幾本就好了。​

    我們不急、不趕、好好實作幾本書,這幾本書都是都可以列上影響我人生前五名的書。​

    我不是第一次看,但是再看一次還是覺得受用無窮。​


    ④ #每個月免費的月回顧直播​

    我們約定好每天寫感恩日記,每月回顧自己的計畫。​

    每個月,我想我們就有一個開心可以來聊天,跟你們分享我這個月做了什麼事情,也歡迎你們跟我分享。

你可能也想看看

搜尋相關網站