Polygon Miden 介绍

Polygon Miden是基于STARK虚拟机的通用执行层,相比EVM兼容性,Miden更偏向于ZK友好性。

  • Miden 支持构建计算量大的或隐私保护的应用;
  • Miden基于Actor 模型,支持交易的并发执行;
  • 支持账户抽象,保证资产安全;
  • Polygon Miden 采用优化的STARK证明,支持客户端证明。

Polygon Miden 目前还在开发中,预计2024 Q1季度上公开测试网。

架构设计

Polygon Miden 架构主要为了实现高吞吐量,隐私和资产安全,采用Actor 模型实现并发和局部状态改变。

Account

Accounts主要用来持有资产,并定义资产转移的规则。Account 可以代表用户或自治的智能合约。Miden 支持图灵完备的智能合约。

主要有几个字段:

  • Account ID: account的唯一标识符,整个生命周期都不会改变;
  • Storage: 存储在account中的由用户定义的数据;
  • Nonce: 计数器,当每次account 状态改变时自增加;
  • Vault: 存在account中的assets;
  • Code: 函数的集合,定义了account外部的接口。

Miden 账户类型主要有以下四种:

Account存储模式有三种:

  • public state: 实现的状态存储在链上,和大多数公链一样;
  • private state: 只有账户的hash的存在链上, 实际隐私数据由用户自己保存;
  • Encrypted state: 未来将支持加密状态,通过加密后存在链上。

Notes

Notes是 acccounts 互相之间用来发送的消息。Note中存有资产,以及note如何被花费的脚本。

Note中主要包含几个字段:

  • Vault:存储在Note中的assets 集合;
  • Script: 由某些Account执行用来获取assets,调用account的函数接口;
  • Inputs: 脚本执行的输入;
  • Serial number: note的唯一标识符;

和Account类似,Note存储也有两种模式,可以将note的数据公开存储在链上,或只在链上note 上存储 hash值,实现隐私保护。对于隐私的note,只有知道note数据的才能消耗掉,需要有链下的通信,将note的数据由发送者给接收者。

Assets

Assets可以是同质化或非同质化代币,它们存储在用户的account中或note中。

Transactions

Transaction 描述单个账户notes的生成和消耗,每个交易的执行总是生成一个STARK 证明。

Miden支持并行和隐私的交易执行,每个交易只对单个账户的状态更改,实现异步性。

交易可以描述为一个状态转移函数:

除了输入和输出,交易必须包含可执行的程序, 主要执行以下功能:

  1. 为所有的输入创建统一的vault;
  2. 执行所有输入notes的脚本;
  3. 运行用户定义的脚本,若存在的话;
  4. 为所有的输出创建统一的vault;
  5. 保证输入和输出中Vault中的资产一致。

若在两个账户之间实现转账交易,需要两笔交易:

第一个交易调用account_a的函数,并创建一个新的note1, 更新account_a的状态;第二个交易消耗note1,调用账户acount_b的函数, 并更新account_b的内部状态。

需要注意的时,这两笔交易可以异步执行。

有两种类型的交易:

  • Local transaction: 由客户端执行交易并生成正确执行的证明,它的费用更低,支持隐私保护;
  • Network transaction: 由operator 执行交易并生成证明。

State 模型

Miden rollup的状态主要描述当前所有accounts 和 note的状态,主要有accounts, notes, nullifiers三个数据库。

Account数据库

Account数据库采用分层的SMT(tiered sparse merkle tree) 结构,可以将账户ID映射到账户Hash, 再到账户数据(公开账户)。

Note 数据库

Notes 记录在只增的累加器中,采用MMR (Merkle Mountain Range) 结构,每个叶子节点是一个区块头,包含区块中所有的notes的承诺。

Nullifier 数据库

Nullifier 存在分层SMT (tiered sparse merkle tree)中,映射note nullifier为0或1, 以表示Nullfier 是否被消耗掉。

Execution 模型

Polygon Miden是一个以太坊rollup, 它将交易聚合,生成区块的证明提交到太坊上。

每个交易生成一个证明,验证其执行的正确性。然后将交易证明聚合成 batches, 最后将多个batch证明聚合在一个区块中, 作为一笔发送到以太坊上。

Miden VM

Miden VM 是通过Rust 开发的零知识证明虚拟机,对于执行的任何程序,可以生成一个基于STARK的证明。

Miden VM具备多种功能:

  • Flow control: Miden VM 是图灵完备的虚拟机,支持流控制结构;
  • Procedures: Miden assemble 程序可以分解为多个子程序procedures, 实现模块化;
  • Execution contexts: Miden VM 程序执行能扩展到多个独立的上下文环境中。
  • Memory: Miden VM 支持读写随机访问内存;
  • U32 operations: Miden 支持32位无符号整数运算,包含数值,比较,以及按位运算;
  • Cryptographic operations: Miden 汇编提供内置的指令计算hash和验证Merkle 路径, 采用RPO(Rescue Prime Optimized) Hash 函数;
  • External libraries: Miden 支持提前定义的库;
  • Nondeterminism: 证明者可给Vm提供执行的hints
  • Customizable hosts: Miden VM可以使用用户定义的hosts, 用来向VM提供外部了的数据 。

Miden VM 主要四个组件组成:

  • Stack: 栈结构,每个元素是一个Goldlocks 域元素;
  • Memory: 线性的随机访问读写内存;
  • Chiplets: 用于支持专用计算的小芯片;
  • Host: 主要来用证明者和Miden 传递消息。

Miden VM 目标是支持高级语言,如Rust, Move, Sway等,但是相应编译器尚未开发出来。目前只能通过Miden 汇编语言编写程序。

向Miden VM提交外部输入有两种方式:

  • Public inputs: 通过对栈的初始化为VM提供公开输入;
  • Secret inputs: 隐私输入通过advice provider提供给VM。

程序执行完成后, 栈上剩作的元素即为公开的输出。

advice provider 提供三种非确定性输入:

  • Advice stack; 一维的域元素数组;
  • Advice map: map 映射结构;
  • Merkle store: Merkle树和Merkle store.

Miden VM assembly 简单示例, 作一个简单的加法运算:

# This is a basic program that pushes 1 and 2 onto the stack and adds them.
# The result is then pushed onto the stack.

begin
  push.1
  push.2
  add
end

结果为:

{
"stack_output" : [3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
"trace_len" : 64
}

参考

https://polygon.technology/polygon-miden

https://docs.polygon.technology/miden/

https://github.com/0xPolygonMiden

https://0xpolygonmiden.github.io/examples/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容