Photo by Evie S. on Unsplash

前言

可升級合約簡單來說是透過 proxy contract(代理合約)來達成,藉由代理合約去呼叫欲執行的合約,若要升級,則把代理合約中的指向的地址換為新的合約地址即可。而執行的方式則是透過 delegateCall,但 delegateCall 不會更動目標合約的狀態。所以要怎麼處理變數,就是一門學問了。

舉例來說,contract B 有個變數 uint256 x,初始值為 0, 而 function setX(uint256),可以改變 x 的值。proxy contract A 使用 delegatecall 呼叫 contract B 的 setX(10),交易結束後,contract B中的 x 依然還是 0。

OpenZeppelin 提出了三種實作方式,可以做到可升級合約,細節可參考


Photo by Jesus Kiteque on Unsplash

預計這將是一系列介紹ZKP應用的文章,認識目前ZKP的應用,包含L1, L2和其他比較難分類的應用,當中也穿插著常用的ZKP演算法。而目前的規劃的主題有

  • MACI
  • ZKopuru
  • ZKSync
  • Trust Token
  • ZCash
  • Groth16
  • PLONK
  • ZKZK Rollup

首次的讀書會介紹了

本篇文章先介紹MACI,ZKopru會由 NIC Lin在撰文介紹。

MACI

MACI 是 Minimal Anti-Collusion Infrastructure的縮寫, Vitalik 在2019年5月於ethreaser.ch所提出,為了讓用應用程式在區塊鏈上可以有抵抗共謀的一個機制(主要是想達到正確地執行你的想法跟抗審查(censorship resistance))。而最實際的應用就是投票,若在區塊鏈上投票能做到他人無法查驗你的票,這樣行賄者就無法知道你是否有乖乖投票,如此一來就能減低行賄的誘因。

(關於共謀的概念可以參考 Williams Lai 翻譯 Vitalik的論共謀

基本流程大致為

  • 欲投票者需要註冊期間內,以公鑰(EdDSA)向合約注冊身份
  • 註冊期結束
  • 投票開始,投票者將自己的票加密送到合約
  • 投票結束,協調者(coordinator)從合約上抓下所有的票, 計算結果,並產生zk證明到合約,更新票數(注1)

MACI中最關鍵的機制在於,投票結束前,投票者都可以向合約發出更換公鑰的指令,然後再使用新的公私鑰去投票。當協調者計票時,會去合約上找註冊者的公鑰,若發現此身份有更換過公鑰,則舊公鑰所投的票就會被認定為無效票。程序大約為

  • Alice 註冊身份為 公鑰A
  • 行賄者利誘或威脅 Alice 投贊成票,而 Alice 也照行賄者的意思投給了贊成票
  • 在投票結束前,Alice 隨時可以向合約更改身份為公鑰B
  • 更改完公鑰後,Alice 可再用私鑰B簽章投反對票
  • 當協調者計票時,會發現用公鑰A已經被改為公鑰B,所以私鑰A所簽的贊成票,將記為無效票

再深入一點細節 . . .

  • 使用者註冊先產生一組EdDSA的私鑰對(注2),再是透過合約的 signUp() 註冊公鑰,而合約中有一 merkle tree 記載著帳號相關的資訊
  • 接著使用者產生一組臨時的 (ECDSA)私鑰對 prvE/pubE(每次投票就產生一組)
  • 利用這組臨時的私鑰 prvE 協調者的公鑰 pubC 產生加密的鑰匙 EncKey,使用密鑰 EncKey 加密投票指令(command)(注3)
  • 再將臨時的公鑰 pubE 與加密過的指令,透過合約的 publishMessage()上鏈
  • 協調者透過 ECDH 交換秘密的方式可以得到 EncKey,當投票結束時協調者再使用這把密鑰把訊息(注3)解密,接著更新票數。

而更換公鑰的指令也是透過 publishMessage()上鏈,因為上鏈的指令都是加密過的,也只有協調者能解密,因此行賄者無法得知受賄者是否有更換過身份。

在MACI中,所有訊息都是上鏈的,因此不怕協調者不打包特定資料。不過所有資料協調者都可以解密,行賄者可以直接與協調者串通,去得知受賄者們是否有乖乖投票,如何防範不在 MACI 原本的提案內,有興趣的人可以去 MACI Github 上了解實作細節。

注1:對!MACI系統中協調者必須是誠實的
注2:在 snarks 的應用中通常使用EdDSA做簽章,而非以太的ECDSA,因為EdDSA在 zk circuit 的實作上複雜度比較低。
注3:在 MACI 中投票, 更換公鑰等動作都稱作指令(command),而加密後的指令稱作訊息(message)

Reference:


Let’s Do It!

Photo by Clem Onojeghuo on Unsplash

It was a big growth of zkp applications in the past year. Zk rollup proposed at the end of 2018 and currently being developed by Matter Labs. Matter Labs just published ZK Sync two month ago(2019/12), which solves the the latency issue when generating proofs. In addition, iden3 and ConsenSys also have their own zk rollup projects. A proposal in the Ethereum Research Forum called Account-Based Anonymous Rollup is based on the idea of zk rollup and also achieve anonymity. Semaphore is a signal system based on zero-knowledge proof. The sender can broadcast an arbitrary string without…


讓我們動手實做吧!

Photo by Clem Onojeghuo on Unsplash

零知識證明在過去一年越來越廣為人知,去年(2019)也有越來越多的專案是基於零知識證明。前年底提出的 zk rollup,目前由 Matter Labs 在開發,Matter Labs更在上個月(2019/12)發表了 ZK Sync,解決了因為產生證明(proof)而延伸的延遲問題。此外 Iden3ConsenSys 也有 zk rollup 的專案。在以太坊研究論壇有基於 zk rollup 的一個提案,是可以達到 匿名性的 zk rollupSemaphore是一個基於零知識證明的一個訊號系統,發送者可以不揭露身份的狀況下廣播任何訊息(an arbitrary string)。 Semaphorejs 延續 Semaphore 的核心概念,並將整個概念更 …


“In this post, will try to minimize the mathematical formulas and make it as easy to understand as possible.”

People say STARKs is a new generation of SNARKs. Not only because it’s faster, the most important due to these 2 qualities:
1. Trusted setup is not required with STARKs, and
2. They are Quantum-resistant

However, STARKs are not perfect and come at a cost: the size of proof. The proof size of a STARK is about 40–50KB compared to SNARKs, which are only 288 bytes in size. Additionally, STARKs are relatively new — it’s only been around two years since…


Thanks for C.C. Liang’s for providing materials and ideas.

Overview

In current blockchain design, most of them have shard chains design which can increase transaction speed. However, higher transaction speed means larger data size, and the larger data size means fewer people can run the full nodes (because the hardware and maintenance costs are higher). For example, Ethereum 2.0 is designed with 1024 chains in the beginning (now is 64 shard chains). It’s impossible to download all shards, and it also loses the meaning of sharding. But what if a validator of shard A wants to get some data in shard…


上一篇關於 zkSNARK扯到太多數學式,導致很難入手,這次介紹 STARK 會盡量減少數學式,以原理的方式跟大家介紹。

STARK 被視為新一代的 SNARK,除了速度較快之外,最重要的是有以下好處1. 不需要可信任的設置(trusted setup),以及
2. 抗量子攻擊

但 STARK 也沒這麼完美,STARK 的證明量(proof size)約 40–50KB,太佔空間,相較於 SNARK 只有288 bytes,明顯大上幾個級距。此外,這篇論文發佈約兩年的時間,就密碼學的領域來說,還需要時間的驗證。

STARK 的 S 代表了擴展性(Scalable),而T代表了透明性(Transparency),擴展性很好理解,透明性指的是利用了公開透明的算法,可以不需要有可信任的設置來存放 …


ZK Rollup is not a new idea. It was proposed by Barry Whitehat about a year ago. At the same time, Vitalik has a relatively complete article in the EF Research forum. The implementation is being developed by Matter Labs and Iden3. After deep diving into zk-SNARKs, I haven’t had time to look at ZK Rollup until recently. In addition to the ZK Rollup, let’s take a look at the Optimistic Rollup that was firstly introduced by John Adler.

When ZK Rollup was proposed, it was defined as a layer 2 solution. At the beginning of this year, it was…


ZK Rollup不是一個新的提案,大約在一年前被Barry Whitehat所提出,同時間Vitalik在以太坊研究員的論壇有一篇比較完整的文章解釋,現在由Matter Labs在開發。研究完zk-SNARKs之後,一直沒空來看,直到最近才有機會來深入瞭解。除了ZK Rollup,也會簡單帶一下前陣子在Plasma Group所看到的 Optimistic Rollup最初的想法由John Adler所提出)。

ZK Rollup一開始提出來的時候,是被定義為layer 2的解決方案,年初的時候一度以Plasma Ignis這個名稱作為發表。應該是因為去年Plasma很紅,一直不斷有新的提案跟進展,加上這當時也被定義為layer 2的解決方案,這些種種原因,開發者就冠上了Plasma的 …


今天要來簡單介紹一下,門羅幣是怎麼達到匿名交易的。本篇文章會牽涉到橢圓曲線的原理,如果不懂,可以先參考「加密技术核心算法之安全快捷的ECC算法」。簡單來說就是要知道這樣的關係:

p = k*G ,
p
:公鑰
k:私鑰
G:曲線上的基準點

門羅隱匿交易包含了三個技術: Ring Signature(環簽章), Ring Confidential Transactions (RingCT, 環保密交易)Stealth Address(隱匿位址)。在 Digital Asset Research 的文章 中這張圖解釋了各個技術所使用的地方,本篇文章,就是要介紹這三個技術。

source: https://medium.com/digitalassetresearch/monero-becomes-bulletproof-f98c6408babf

在介紹之前,先了解門羅一些基本概念。在門羅中有兩把key(其實是4把,因為各有私鑰跟公鑰),一把是 view key另一把是

Kimi Wu

A blockchain developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store