iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Web 3

以 Python 進入以太坊虛擬機 (EVM) 的幻想境界系列 第 26

虛擬境界26:介紹 EVM Circuits

  • 分享至 

  • xImage
  •  

EVM Circuits 簡介

EVM Circuits 設計用於在不暴露完整計算細節的前提下驗證特定操作(例如智能合約功能調用)的正確性。

定義

  • slot: 指的是用多行來驗證單個操作(op)的一個區域或槽 (slot)。
  • q: 是一個選擇器,用於啟用一個槽,在一個槽的最後一行中它應該是1。
  • x_diff_inv: 由證明者(prover)證明為 (inv(fixed_x - x)),其中 (fixed_x) 是固定的並內嵌到電路中。它用於通過 (1 - (fixed_x - x) \times x_diff_inv) (是一個is_zero表達式)來開啟操作和特定的案例約束。

上下文(Context)的變量定義

  • gc: 全局計數器
  • addr: 保存操作碼的地址
  • pc: 程序計數器
  • op: 關於地址和程序計數器的操作
  • sp: 堆棧指針
  • v0..v31: 從低到高解壓縮操作值的字節的話(例如,0x42 將是 [0x42, 0, ..., 0])
  • inv: 如果存在的話,這個函數返回字段 fq 的逆,否則返回 0。
  • compress: 一個函數,使用隨機線性組合壓縮成單個 fq 的多個輸入。

布局

在 EVM 電路中,我們需要在單個固定的插槽(slot)中驗證所有可能的操作碼,包括它們的錯誤情況,因此我們需要證明者為我們提供一些輔助值來開啟自定義約束。在最簡單的情況下,這個電路可能需要三個區域:

  1. 操作值: 一個操作碼的輸入和輸出。例如,一個 ADD 會接收2個輸入並返回1個輸出。當輸入和輸出之間的關係需要字節對字節檢查時,需要解壓縮。
  2. 上下文: 目前 EVM 持有的上下文,可能包含 gc、addr、pc 等。
  3. 操作和案例切換: 用於告知電路開啟哪些操作碼和案例的自定義約束的輔助值。最簡單的方法是,我們可以要求證明者證明 {op,case}_diff_inv,以便電路生成一個切換操作的 is_zero 布爾表達式。

這個 "案例" 指的是在執行一個操作時的所有可能性,例如,一個 ADD 可能有1個成功的案例和2個錯誤案例 ErrOutOfGas 和 ErrStackUnderflow。

https://ithelp.ithome.com.tw/upload/images/20231011/20130926jKgvakRcVI.png


這個概念框架涵蓋了零知識證明和 EVM 電路設計中的一些核心要點。理解這些可以幫助開發者設計更安全和高效的區塊鏈應用,同時不犧牲用戶的隱私或系統的安全性。希望這些解釋可以讓大家了解。

參考資料


上一篇
虛擬境界25:Storage Circuits
下一篇
虛擬境界27:EVM Circuits 範例 - ADD
系列文
以 Python 進入以太坊虛擬機 (EVM) 的幻想境界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言