🔥課程特價中
由 25 個 Junit 範例學習單元測試和 Mocking
1️⃣ 你將瞭解用 JUnit 進行單元測試的基礎知識
2️⃣ 你將學習最流行的 Mocking 框架–Mockito
3️⃣ 你將學會使用 Mockito 編寫優秀的單元測試
4️⃣ 你將學習如何將 Mockito 與 Junit 和 PowerMock 結合起來使用
https://softnshare.com/mockito-tutorial-learn-mocking-25-junit-examples/
同時也有34部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,求職從履歷到面試,每一個環節勢必都有可以調整提升的空間,過去我從畢業時應徵「網站開發工程師」,大約投 10 份履歷只有 1 間拿到 offer。然而每次的挫敗都是一次修正自己的機會,透過不斷自我成長,以結果來說,和過去相比,現在面試中高階工程師職位,都有不錯的錄取率。 然而這段路程的角度也隨著職務...
單元測試範例 在 軟體開發學習資訊分享 Facebook 的最佳貼文
掌握 Node.js 的最強大的測試技術的藝術。元件測試。包括超級全面的最佳實踐列表和一個範例應用程式
對你有利的3件事
元件/整合測試是 E2E 和單元測試的混合體。它得到了很多人的青睞,根據測試鑽石模型,它被認為是現代後端的預設技術。它的主要思想是透過 API 測試整個元件(例如,微服務),包括資料庫在內的所有層,但沒有任何多餘的東西。這帶來了很高的信心和很好的開發者體驗。然而,要做到正確、快速、詳盡和價值最大化,需要一些學習和技能。這就是這個軟體庫的使命宣言。警告。你可能會愛上測試
✍ nodejs 相關線上課程 http://bit.ly/2wMSTEN
🔥 udemy coupon code 已經更新 http://bit.ly/2O0wbOm 最低價 NT330 起
https://softnshare.com/nodejs-integration-tests-best-practices/
單元測試範例 在 Taipei Ethereum Meetup Facebook 的最佳解答
📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
單元測試範例 在 在地上滾的工程師 Nic Youtube 的精選貼文
求職從履歷到面試,每一個環節勢必都有可以調整提升的空間,過去我從畢業時應徵「網站開發工程師」,大約投 10 份履歷只有 1 間拿到 offer。然而每次的挫敗都是一次修正自己的機會,透過不斷自我成長,以結果來說,和過去相比,現在面試中高階工程師職位,都有不錯的錄取率。
然而這段路程的角度也隨著職務成長有幸擔任面試官,這其中的心路歷程都詳細記載在我的技術部落格。不過,今天想用影片和大家分享,這過程中我如何透過每次改進,一點一點的提升勝率。
如果你參考了我的方法獲得不錯的結果,歡迎留言成為見證人,讓我們一起為成長慶祝 🥳
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
━━━━━━━━━━━━━━━━
▶ 履歷撰寫技巧文章
https://blog.niclin.tw/categories/%e5%b1%a5%e6%ad%b7%e6%92%b0%e5%af%ab?utm_source=youtube
▶ 求職精進群回顧
https://blog.niclin.tw/categories/%e6%95%99%e5%ad%b8%e5%bf%83%e5%be%97?utm_source=youtube
━━━━━━━━━━━━━━━━
▶ AAR 範例
1. 面試預期的情況
自我介紹已經準備的很熟,應該沒有問題,會嘗試主動多聊一些後端實作的經驗
2. 面試實際的情況
沒有預期會考白板題,有點緊張,結果過程中一股腦的想把題目做完,卻忘了問面試官更多的規格,導致最後好像有點聊不太下去
雖然有聊到後端實作,不過面試官提到的 Desing Pattern 卻不太熟悉,也對單元測試並不瞭解
3. 下次怎麼做可以更好
寫白板題的時候要冷靜,先做出基本解並且在過程中要和對方討論,多問一點問題
應該要看一下 Design pattern 相關的書籍和文章瞭解一下,並且試試看寫出簡單的單元測試
━━━━━━━━━━━━━━━━
▶ 觀看破 50,000 解鎖專區
🥺 waiting...
━━━━━━━━━━━━━━━━
章節:
00:00 從求職到徵才
01:47 履歷怎麼寫?
02:51 精簡勝於冗長
04:13 量化實際指標
06:27 基本履歷架構
06:59 如何面試?
08:29 面對挫折及解決問題
09:22 面試節奏
10:18 AfterActionReview
━━━━━━━━━━━━━━━━
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ 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
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
🌟 任何問題或合作邀約信箱: niclin0226@gmail.com
#面試 #履歷 #求職
單元測試範例 在 吳老師教學部落格 Youtube 的最讚貼文
Python入門設計製作班:單元02_基本語法與結構控制件
01_變數型態與命名規則
02_變數型態與命名規則練習
03_變數轉變型態與脫逸字元
04_程式撰寫基本特型與快速註解
05_邏輯判斷(年齡判斷範例)
06_邏輯判斷改為多重判斷
07_邏輯判斷改為多重判斷另一種寫法
08_計算BMI練習
09_計算BMI與邏輯判斷
10_計算BMI與去除換行
11_將格式化小數點改為用format
完整影音吳老師教學論壇
http://www.tqc.idv.tw/
實體課程:
http://gg.gg/scuext
課程簡介:入門
單元01_建置Python開發環境與程式測試
單元02_基本語法與結構控制件
單元03_迴圈資料結構與自訂函數
單元04_串列、字典與檔案與資料庫處理
單元05-1_開放資料處理CSV和JSON資料處理(停車與PM2.5)
單元05-2_開放資料處理練習題_新北市開放資料JSON
單元05-3_GOOGLE雲端當CSV來源與CSV處理
單元05-4_網頁資料擷取基礎與外匯
單元05-5_網頁資料擷取台彩與股市資料
單元05-6_擷取網頁上櫃股票行情
單元06_使用Pandas與處理_Excel_試算表
單元07_VBA與Phython連結MYSQL資料庫
單元08_視覺化報表使用圖表繪製Matplotlib
課程理念與課程介紹:
因應大數據分析、物聯網、工業4.0的需求,能更容易的學會網路爬蟲、機器學習、物聯網、影像辨識、自動圖像報表等需求,其中以EXCEL VBA與Python程式開發最為熱門,因此將VBA的自動化延伸到PYTHON設計,讓學員能夠比較兩個工具的長處,並能相互協同應用。
吳老師 108/12/21
Python,Python入門設計製作班,中小學教師,函數,程式設計,線上教學,PYTHON安裝環境
單元測試範例 在 吳老師教學部落格 Youtube 的最讚貼文
Python入門設計製作班:單元02_基本語法與結構控制件
01_變數型態與命名規則
02_變數型態與命名規則練習
03_變數轉變型態與脫逸字元
04_程式撰寫基本特型與快速註解
05_邏輯判斷(年齡判斷範例)
06_邏輯判斷改為多重判斷
07_邏輯判斷改為多重判斷另一種寫法
08_計算BMI練習
09_計算BMI與邏輯判斷
10_計算BMI與去除換行
11_將格式化小數點改為用format
完整影音吳老師教學論壇
http://www.tqc.idv.tw/
實體課程:
http://gg.gg/scuext
課程簡介:入門
單元01_建置Python開發環境與程式測試
單元02_基本語法與結構控制件
單元03_迴圈資料結構與自訂函數
單元04_串列、字典與檔案與資料庫處理
單元05-1_開放資料處理CSV和JSON資料處理(停車與PM2.5)
單元05-2_開放資料處理練習題_新北市開放資料JSON
單元05-3_GOOGLE雲端當CSV來源與CSV處理
單元05-4_網頁資料擷取基礎與外匯
單元05-5_網頁資料擷取台彩與股市資料
單元05-6_擷取網頁上櫃股票行情
單元06_使用Pandas與處理_Excel_試算表
單元07_VBA與Phython連結MYSQL資料庫
單元08_視覺化報表使用圖表繪製Matplotlib
課程理念與課程介紹:
因應大數據分析、物聯網、工業4.0的需求,能更容易的學會網路爬蟲、機器學習、物聯網、影像辨識、自動圖像報表等需求,其中以EXCEL VBA與Python程式開發最為熱門,因此將VBA的自動化延伸到PYTHON設計,讓學員能夠比較兩個工具的長處,並能相互協同應用。
吳老師 108/12/21
Python,Python入門設計製作班,中小學教師,函數,程式設計,線上教學,PYTHON安裝環境
單元測試範例 在 單元測試基本概念- Visual Studio (Windows) 的相關結果
在本文中,我們會使用稱為 MyBank 的虛構應用程式開發來作為範例。 您不需要實際程式碼來照著本主題中的說明進行。 測試方法是以C# 所撰寫並使用Microsoft ... ... <看更多>
單元測試範例 在 【單元測試的藝術】Chap 1: 單元測試基礎 - CoderBridge 的相關結果
只要產品程式碼不發生變化,單元測試的執行結果是穩定一致的。」 五、一個簡單的單元測試範例. 話不多說,來點code 比理論更真實。 P.S. 小妹過往 ... ... <看更多>
單元測試範例 在 [Day 3]動手寫Unit Test - iT 邦幫忙 的相關結果
本篇文章會以Visual Studio為開發工具,以MSTest為Testing framework。 介紹如何從目標物件的方法,建立對應的單元測試。 也會介紹如何從測試程式,來撰寫對應的目標物件 ... ... <看更多>