📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有6部Youtube影片,追蹤數超過361萬的網紅Dan Lok,也在其Youtube影片中提到,Knowing How To Answer The Question, “How Are You” Can Lead To More Success And Happiness! If You Want To Know More Of Dan’s Secrets To Success, Click ...
「greeting conversation」的推薦目錄:
- 關於greeting conversation 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於greeting conversation 在 Positiff English 職場英語教室 Facebook 的最讚貼文
- 關於greeting conversation 在 王彪民 PM Wang Facebook 的最讚貼文
- 關於greeting conversation 在 Dan Lok Youtube 的精選貼文
- 關於greeting conversation 在 日本語の森 Youtube 的最佳解答
- 關於greeting conversation 在 小雨Wayne Shih Youtube 的精選貼文
- 關於greeting conversation 在 How to show a greeting message when start conversation 的評價
- 關於greeting conversation 在 How to show a greeting message when start conversation 的評價
- 關於greeting conversation 在 Meeting and greeting people - conversation guide - Pinterest 的評價
- 關於greeting conversation 在 Welcome Screen - Messenger Platform - Facebook for ... 的評價
- 關於greeting conversation 在 How To Create a Facebook Messenger Greeting that Engages ... 的評價
greeting conversation 在 Positiff English 職場英語教室 Facebook 的最讚貼文
Nice to meet you
Nice meeting you
初次見面用邊句?
以上兩句都可以初次見面時候用作greeting
[It is] Nice to meet you. ------hello
[It was] Nice meeting you.-----goodbye
剛剛初次見面 簡單作自我介紹後
At the time you meet that person for the first time, you may say。
"Hi, I'm Tiff from the Sales Team. I work closely with Chris and Sandy. Nice to meet you Samuel."
初次見面 你準備離開 你便可以跟他說
As you're leaving the conversation, you may say。
"I have to go now. Nice meeting you Samuel. Bye."
.
.
🌈Let's speak up and shine
💎Boost your communication confidence
Follow @positiff.eng for workplace English tips
.
.
.
#slangs #線上課程 #輕鬆學英語 #每日英語 #線上導師 #線上學習 #職場英語 #港式英語 #學英文
#工作態度 #職場#職場英語 #英語 ##停課不停學 #香港打工仔 #workplaceEnglish #辦公室 #扮工一族 #成功語錄
#englishtips #dailyEnglish #dailyEnglishlesson #englishlearning #ielts #hkig #hkenglishteacher #englishcommunication #interviewskills
#辦公 #hkjobs #career
greeting conversation 在 王彪民 PM Wang Facebook 的最讚貼文
"When white people say “ni hao” to me in Australia, it’s typically not to start a conversation in Chinese. Usually they don’t know any other words.
Often, it’s an act of intimidation. It’s shouted out of a passing car, sometimes while giving the finger. Or it’s murmured with a lecherous glance. Men slide into your DMs with “ni hao” and a sleazy comment, or “ni hao” is the sleazy comment.
That’s the way we usually experience “ni hao” in Australia."
https://www.huffingtonpost.com.au/entry/whats-wrong-with-saying-ni-hao_au_5ee6bdd0c5b6003954d4dd70?fbclid=IwAR3Kk8kLZ28vktTYqLOpv98vA947BrS8heEjyx_nw75dGAV0IbQCjmDmrKU
greeting conversation 在 Dan Lok Youtube 的精選貼文
Knowing How To Answer The Question, “How Are You” Can Lead To More Success And Happiness! If You Want To Know More Of Dan’s Secrets To Success, Click Here To Discover Your Best High-Income Skill: http://howareyou.danlok.link
Did you know that the way you answer the question, “How are you” can determine whether you have a great life or a life of complaining, sadness, and failures? In this video, you’ll discover 15 creative ways to respond to the question, “how are you” in English.
? SUBSCRIBE TO DAN'S YOUTUBE CHANNEL NOW ?
https://www.youtube.com/danlok?sub_confirmation=1
Check out these Top Trending Playlists -
1.) Boss In The Bentley - https://www.youtube.com/playlist?list=PLEmTTOfet46OWsrbWGPnPW8mvDtjge_6-
2.) Sales Tips That Get People To Buy - https://www.youtube.com/watch?v=E6Csz_hvXzw&list=PLEmTTOfet46PvAsPpWByNgUWZ5dLJd_I4
3.) Dan Lok’s Best Secrets - https://www.youtube.com/watch?v=FZNmFJUuTRs&list=PLEmTTOfet46N3NIYsBQ9wku8UBNhtT9QQ
Dan Lok is a Chinese-Canadian business magnate and global educator known for being the founder and chairman of Closers.com - the world’s #1 virtual-closers network, Copywriters.com, and SalesCalls.com. Beyond his businesses, Mr. Lok has led several global movements to redefine modern education where he has taught individuals from 150+ countries to develop high income skills and financial confidence.
Beyond his success in business, he was also a two time TEDx opening speaker. An international best-selling author of 12+ books. A member of Young Presidents Organization (YPO) - a private group of global chief executives whose companies employ 22 million people and generate 9-trillion USD in annual revenues. He also hosts The Dan Lok Show - a series on elite business tycoons and world-leading entrepreneurs.
Today, Mr. Lok continues to be featured in thousands of media channels and publications every year and is widely seen as one of the top business leaders by millions around the world.
If you want the no b.s. way to master your financial destiny, then learn from Dan. Subscribe to his channel now.
★☆★ CONNECT WITH DAN ON SOCIAL MEDIA ★☆★
YouTube: http://youtube.danlok.link
Dan Lok Blog: http://blog.danlok.link
Facebook: http://facebook.danlok.link
Instagram: http://instagram.danlok.link
Linkedin: http://mylinkedin.danlok.link
Podcast: http://thedanlokshow.danlok.link
#DanLok #HowAreYou #English
Please understand that by watching Dan’s videos or enrolling in his programs does not mean you’ll get results close to what he’s been able to do (or do anything for that matter).
He’s been in business for over 20 years and his results are not typical.
Most people who watch his videos or enroll in his programs get the “how to” but never take action with the information. Dan is only sharing what has worked for him and his students.
Your results are dependent on many factors… including but not limited to your ability to work hard, commit yourself, and do whatever it takes.
Entering any business is going to involve a level of risk as well as massive commitment and action. If you're not willing to accept that, please DO NOT WATCH DAN’S VIDEOS OR SIGN UP FOR ONE OF HIS PROGRAMS.
This video is about How To Answer The Question, "How Are You?" Learn 15 Creative Ways To Respond To Greetings In English
https://youtu.be/ueavhuuSGL8
https://youtu.be/ueavhuuSGL8
greeting conversation 在 日本語の森 Youtube 的最佳解答
Japanese basic conversation#1 Greeting #nihongonomori #nihongozin #N5
日本語N5基礎会話
はじめまして
わたしはにほんじんです
にほんごのせんせいです
よろしくおねがいします
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
「日本語人」アプリ
全世界の日本語人集まってください!
日本語を勉強している人が繋がることができるアプリがあるのでご紹介しますね。友達ができたり、現地のガイドをお願いすることができます。名前は「日本語人」です。
1️ .日本語しか話せないないけれど、海外旅行をもっと楽しみたい!でも、現地を案内してくれる人を見つけることができない・・・。
2️ .今までたくさん学習した日本語で、お金を稼ぎたいです!
3️ .日本人、または日本語ができる友達を作りたいのに、どこにいるか分かりません。
"日本語人"というアプリは 皆さんが悩んでいるこれらの問題を解決します。
ダウンロードリンクは こちら↓↓
iPhone:
https://itunes.apple.com/vn/app/%E6%97%A5%E6%9C%AC%E8%AA%9E%E4%BA%BA/id1444720513
Android(Samsung Galaxy)
https://play.google.com/store/apps/details?id=com.jin.nihongozin
お問い合わせ(質問/動画出演/広告/提案/提携等々)
nihongonomori@gmail.com
日本語の森で日本語を教えたい方はこちらへ
simayuki1978@gmail.com
日本本社:
〒190-0011 東京都, 立川市高松町3-23-6ユニオン202号
📞0425101982
nihongonomori@gmail.com
ハノイ日本語の森「DUNGMORI」
〒100000
So 3 VNT tower 19 Nguyễn Trãi Thanh Xuân Hanoi
📞096 985 6116
dungmori@gmail.com
韓国日本語の森「yuhadayo」
yuhadayo@gmail.com
ベトナムオンラインNO1日本語ネット講義サイト
dungmori.com
韓国NO1 YouTube チャンネル 유하다요
https://www.youtube.com/channel/UC_waGdcNiCWTv1GG9OvE23A
facebook日本語の森コミュニティー
https://www.facebook.com/Nihongonomori
greeting conversation 在 小雨Wayne Shih Youtube 的精選貼文
I know the barista in Evening Cafe when a Sunday night several months ago.
She walked in my shop, finished the first coffee with silence.
We started to chat while the 2nd cup.
She told me she just open her own cafe just 400m away from my shop.
One day I visit her shop, I felt very comfortable with that coffee.
Not too much conversation on coffee science or gossip.
Just a simple greeting and chat, let me had that coffee with very relax mood.
That's what a coffee shop should be!
greeting conversation 在 How to show a greeting message when start conversation 的推薦與評價
... <看更多>
相關內容
greeting conversation 在 Meeting and greeting people - conversation guide - Pinterest 的推薦與評價
Meeting and greeting people - conversation guide - ESL worksheet by Ana B. Students are provived with speaking exponents: how to address people, how to greet, ... ... <看更多>
greeting conversation 在 How to show a greeting message when start conversation 的推薦與評價
... <看更多>
相關內容