[爆卦]程式碼比對是什麼?優點缺點精華區懶人包

雖然這篇程式碼比對鄉民發文沒有被收入到精華區:在程式碼比對這個話題中,我們另外找到其它相關的精選爆讚文章

在 程式碼比對產品中有19篇Facebook貼文,粉絲數超過3,460的網紅Taipei Ethereum Meetup,也在其Facebook貼文中提到, 📜 [專欄新文章] ZKP 與智能合約的開發入門 ✍️ Johnson 📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium 這篇文章將以程式碼範例,說明 Zero Knowledge Proo...

 同時也有140部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,現在學習知識的渠道越來越多,無論對於零基礎或是有經驗的工程師,想要持續成長應該看書還是看影片來的更有效率呢? 主要會和你分享我過去從新手到資深的過程中,如何持續保持進步及學習的經驗 也許這個經驗可以幫助到你,也歡迎留言和我分享你的看法 相信彼此分享不同的學習見解,能讓對於想要更精進自己程式開發...

  • 程式碼比對 在 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.

    👏 歡迎轉載分享鼓掌

  • 程式碼比對 在 台灣物聯網實驗室 IOT Labs Facebook 的最佳貼文

    2021-05-29 18:56:14
    有 1 人按讚

    從數據洞見到成效優化 加速工廠智慧轉型

    物聯網平台AutoML賦能 消弭轉型過程技能落差

    2021-05-29洪羿漣

    製造業數位轉型的最終目標,在於落實人工智慧應用,也就是無人工廠。

    洛克威爾(Rockwell)自動化智慧製造應用發展經理王展帆認為,整個歷程需要逐步前行,首先是要讓資料變得可視化,進而運行分析趨勢,預先得知即將發生的事件,開立「處方簽」,讓人工智慧自主控管。

    洛克威爾依循國際自動化協會發布的ISA-95標準定義設計網路架構,可落實對攻擊威脅的識別、保護、檢測、回應以及事後恢復,不僅藉由黑白名單管控,亦可針對工業通訊協定,檢測廠區設備傳輸內容是否潛藏攻擊程式。同時可比對設定參數一致性,防範惡意人士試圖竄改參數導致產線停擺。

    王展帆說明,透過工業物聯網平台可有效賦能工廠數位化轉型,把老師傅的經驗轉換部署到此平台,達到傳承的目的,藉以弭平技能落差。基於平台事先定義廠區環境需要用到的資料處理內容,只要現場人員受過操作訓練,不用撰寫程式碼,即可藉此創建應用。

    洛克威爾自動化智慧製造應用發展經理王展帆指出,透過工業物聯網平台可有效賦能工廠數位化轉型,把老師傅的經驗轉換部署到此平台,達到傳承的目的。

    此外,工業物聯網平台已具備賦能工廠實現AI融入生產,基於內建的AutoML模型,讓不是資料科學家的操作者也立即可用;若企業內部已有資料科學家,亦可藉由平台整理的資料自行訓練演算模型。例如軟體儀表,可計算工廠重要環節的數值,為感知器建立預知保養,透過其他數值預測下一個數值的變化。

    資料來源:https://www.2cm.com.tw/2cm/zh-tw/market/B07828E24C4F4CDF9E32A812425B5C9A

  • 程式碼比對 在 iThome Facebook 的最佳解答

    2021-05-06 09:05:15
    有 94 人按讚

    去年底,美國政府機構遭遇史上最大的SolarWinds供應鏈攻擊事件,舉報者也是受害者之一的安全廠商FireEye,5日也在臺灣資安大會上現身說法 ,實際就這起攻擊背後對抗秘辛揭露更多訊息。

    為了向SolarWinds公司證明其系統已被駭客入侵感染,他們還動用數名逆向工程師,將當時這家公司可能有問題的軟體更新包下載後,逐一比對五萬多行程式碼,最後終於找到駭客暗中插入的外掛程式。SolarWinds工程師這才相信自己系統遭感染,之後,FireEye才對外公開, 讓整起事件曝了光。
    https://www.ithome.com.tw/news/144212

  • 程式碼比對 在 在地上滾的工程師 Nic Youtube 的最佳解答

    2021-05-10 21:00:00

    現在學習知識的渠道越來越多,無論對於零基礎或是有經驗的工程師,想要持續成長應該看書還是看影片來的更有效率呢?

    主要會和你分享我過去從新手到資深的過程中,如何持續保持進步及學習的經驗

    也許這個經驗可以幫助到你,也歡迎留言和我分享你的看法

    相信彼此分享不同的學習見解,能讓對於想要更精進自己程式開發功力的人有很大的幫助

    ===章節===
    00:00 哪一個有效律?
    00:36 寫程式如同寫作
    05:14 書是最便宜的資源
    10:14 折扣碼操作示範

    ===蝦皮購書折扣碼===
    折扣碼:FLAGNIC36
    時間:2021-03-29 ~ 2021-06-29

    折扣碼:FLAGNIC79
    時間:2021-06-30 ~ 2021-09-30

    折扣碼: FLAGNIC11
    時間:2021-10-01~ 2021-12-31

    ===前陣子在看的推薦書單===
    (零基礎)
    - 白話演算法!培養程式設計的邏輯思考
    - Python 刷提鍛鍊班

    (中高階)
    - 設計模式之禪(第2版)
    - 無瑕的程式碼-整潔的軟體設計與架構篇
    - 單元測試的藝術
    - 演算法之美:隱藏在資料結構背後的原理(C++版)
    - Kent Beck的實作模式

    (Ruby)
    - Writing Efficient Ruby Code

    (成長思考)
    - 圖解.實戰 麥肯錫式的思考框架:讓大腦置入邏輯,就能讓90%的困難都有解!
    - 師父:那些我在課堂外學會的本事
    - 高勝算決策:如何在面對決定時,降低失誤,每次出手成功率都比對手高?
    - 窮查理的普通常識
    - 懶人圖解簡報術:把複雜知識變成一看就秒懂的圖解懶人包
    - 寫作,是最好的自我投資

    喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘

    ━━━━━━━━━━━━━━━━
    🎬 觀看我的生活廢片頻道: 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

    #寫程式 #前端 #後端

  • 程式碼比對 在 吳老師教學部落格 Youtube 的最佳解答

    2018-08-07 16:42:05

    EXCEL VBA與資料庫(進階101)第3單元範例尋找與判斷負0到9&範例_尋找與判斷負0到9的值程式&工作表比較&範例國際指數與期貨工作表比較程式說明&日期比對結果複製到差異表VBA程式&瀏覽器自動化報表&次數統計與VBA排序&各股文件類別查詢統計VBA說明)

    上課內容:
    01_重點回顧多工作表與資料庫與範例尋找與判斷負0到9
    02_範例_尋找與判斷負0到9的值程式說明
    03_範例尋找與判斷細節說明與範例工作表比較
    04_範例國際指數與期貨工作表比較程式說明
    05_日期比對結果複製到差異表VBA程式
    06_工作表比對細節與瀏覽器自動化報表
    07_瀏覽器使用次數統計與VBA排序
    08_問題各股文件類別查詢統計VBA說明

    完整影音
    http://goo.gl/aQTMFS

    教學論壇:
    https://groups.google.com/forum/#!forum/scu_excel_vba2_101

    與前幾期的課程雖然用的是相同的範例,但最大的不同在:
    1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。
    2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。

    內容主要分成:
    單元01_資料拆解相關(VBA基礎)
    單元02_表單設計
    單元03_輸入自動化與表單與資料庫
    單元04_工作表合併
    單元05_資料查詢(篩選與分割工作表)
    單元06_批次查詢
    單元07_從雲端硬碟下載資料
    單元08_下載網路資料
    單元09_工作表相關
    單元10_活頁簿與檔案處理(工作表分割與合併活頁簿)
    單元11_表格與圖表處理(自動繪製圖表)
    單元12_圖案處理(快速匯入圖片到EXCEL)

    有講義與範例和完成的畫面公式與程式碼,
    只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,
    優點:
    1.可非線性學習:可按照自己最不熟的部分多次學習。
    2.可反覆學習:有疑問可以多次聽講,保證學的會。
    3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。

    上課參考用書:
    看!就是比你早下班-50個ExcelVBA高手問題解決法
    作者:楊玉文 出版社:松崗
    Excel VBA一點都不難:一鍵搞定所有報表
    作者:?Excel Home
    出版社:博碩

    課程理念:
    1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。

    更多EXCEL VBA連結:
    01_EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
    02_EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524

    吳老師 2018/7/23

    EXCEL,VBA,函數東吳進修推廣部,EXCEL,VBA,函數,程式設計,線上教學,excel,vba,教學,excel,vba指令教學,vba範例教學excel,,excel,vba教學視頻,excel函數教學,excel函數說明,excel函數應用

  • 程式碼比對 在 吳老師教學部落格 Youtube 的最佳解答

    2018-08-06 23:52:41

    EXCEL VBA與資料庫(進階101)第3單元範例尋找與判斷負0到9&範例_尋找與判斷負0到9的值程式&工作表比較&範例國際指數與期貨工作表比較程式說明&日期比對結果複製到差異表VBA程式&瀏覽器自動化報表&次數統計與VBA排序&各股文件類別查詢統計VBA說明)

    上課內容:
    01_重點回顧多工作表與資料庫與範例尋找與判斷負0到9
    02_範例_尋找與判斷負0到9的值程式說明
    03_範例尋找與判斷細節說明與範例工作表比較
    04_範例國際指數與期貨工作表比較程式說明
    05_日期比對結果複製到差異表VBA程式
    06_工作表比對細節與瀏覽器自動化報表
    07_瀏覽器使用次數統計與VBA排序
    08_問題各股文件類別查詢統計VBA說明

    完整影音
    http://goo.gl/aQTMFS

    教學論壇:
    https://groups.google.com/forum/#!forum/scu_excel_vba2_101

    與前幾期的課程雖然用的是相同的範例,但最大的不同在:
    1.除了解說建函數公式,並將之轉成自訂函數,把複雜的公式變簡單。
    2.如何將複雜的公式變成簡單的按鈕,按下按鈕就自動完成工作。

    內容主要分成:
    單元01_資料拆解相關(VBA基礎)
    單元02_表單設計
    單元03_輸入自動化與表單與資料庫
    單元04_工作表合併
    單元05_資料查詢(篩選與分割工作表)
    單元06_批次查詢
    單元07_從雲端硬碟下載資料
    單元08_下載網路資料
    單元09_工作表相關
    單元10_活頁簿與檔案處理(工作表分割與合併活頁簿)
    單元11_表格與圖表處理(自動繪製圖表)
    單元12_圖案處理(快速匯入圖片到EXCEL)

    有講義與範例和完成的畫面公式與程式碼,
    只要按照每周的順序學習,學會EXCEL VBA自動化絕非難事,
    優點:
    1.可非線性學習:可按照自己最不熟的部分多次學習。
    2.可反覆學習:有疑問可以多次聽講,保證學的會。
    3.可攜帶學習:只要有瀏覽器就可以播放SWF檔,MAC電腦也沒問題。

    上課參考用書:
    看!就是比你早下班-50個ExcelVBA高手問題解決法
    作者:楊玉文 出版社:松崗
    Excel VBA一點都不難:一鍵搞定所有報表
    作者:?Excel Home
    出版社:博碩

    課程理念:
    1.以循序漸進的方式, 透過詳細的說明和實用的Excel VBA範例, 逐步了解整個 VBA 的架構與輪廓,進而學習 VBA 變數、函式及邏輯的觀念, 即使沒有任何程式設計基礎, 也能自己親手撰寫 VBA 程序來提昇工作效率, 晉身職場 Excel 高手! 2.進而解說EXCEL與資料庫的結合,將EXCEL當成資料庫來使用,結合函數、VBA等更深入的功能,讓資料處理和分析的應用更上層樓。 3.將結合GOOGLE雲端試算表,教您如何將EXCEL函數雲端化與網路化。

    更多EXCEL VBA連結:
    01_EXCEL函數與VBA http://terry28853669.pixnet.net/blog/category/list/1384521
    02_EXCEL VBA自動化教學 http://terry28853669.pixnet.net/blog/category/list/1384524

    吳老師 2018/7/23

    EXCEL,VBA,函數東吳進修推廣部,EXCEL,VBA,函數,程式設計,線上教學,excel,vba,教學,excel,vba指令教學,vba範例教學excel,,excel,vba教學視頻,excel函數教學,excel函數說明,excel函數應用