Mina技术白皮书
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mina技术白皮书相关的知识,希望对你有一定的参考价值。
1. 引言
Mina系列博客有:
- Mina概览
- Mina的支付流程
- Mina的zkApp
- Mina中的Pasta(Pallas和Vesta)曲线
- Mina中的Schnorr signature
- Mina中的Pickles SNARK
- Mina中的Kimchi SNARK
- Mina Kimchi SNARK 代码解析
- Mina Berkeley QANet测试网zkApp初体验
- Mina中的Poseidon hash
- Mina中的多项式承诺方案
- Recursive SNARKs总览
传统区块链验证
t
t
t笔交易所需时间为
Ω
(
t
)
\\Omega(t)
Ω(t),Mina致力于实现:从gennesis到当前的所有历史交易的验证时间为constant
O
(
1
)
O(1)
O(1)(约200ms),即与交易数无关,实现所谓的succinct blockchain。
具体实现方法为,在每个区块内包含state validity 的succinct proof。当前区块commit的system state,可看成是由genesis state,经一系列有效的交易所达成的,若当前区块有效,则这一系列交易可看成是相应的witness。
不过,若是为每个区块都从genesis开始创建所有历史交易的有效性证明,这样的proof计算将是昂贵的,为此,可借助incrementally computable SNARKs来确保为每个区块计算proof的开销,与自前一区块开始增加的交易数呈正比(即与当前区块所增加的交易数呈正比)。
Mina采用account模式,而不是UTXO模式,因此Mina链的当前状态为a list of all account balances。
在Mina的每个区块中,包含了:
- a commitment to this state (in a Merkle tree),而不是对所有state的commitment。为此,全节点无需存储整个state,但可根据当前最新区块头中的state commitment来高效验证account balances。
但是,Mina中的Prover(类似于Bitcoin中的miner),确实需要存储所有state,因为这些state作为witness,用于证明新区块的有效性。
Mina采用名为Ouroboros Samasika的proof-of-stake (PoS)共识机制。
当前,Mina的state proof size仅为864字节,验证时间约为200ms。任意支持这种级别计算的设备(如手机),都可在无需可信设备的情况下验证Mina系统的当前状态。
除incrementally computable SNARKs之外,Mina中采用了多种优化措施,其中最有效的优化措施有:
- 1)parallel scan state:从高层来看,这将提高交易吞吐量,使其超过顺序计算证明的限制。核心思想是对所有仍需要纳入证明的块排队,并将它们的证明分发给parallel Provers。引入最新交易的特殊队列:以将交易确认延迟降低到最小证明时间所施加的限制之下。
- 2)引入了一种特殊的激励结构,以最大限度地提高Prover在网络中的参与度。
2. succinct blockchains
2.0 相关定义
PPT:probabilistic polynomial time
λ
\\lambda
λ:表示安全参数。
SNARKs定义为:
Signature of Knowledge (SoK):为数字签名的通用表达,将公钥替换为NP language中的an instance,正式的定义参见Groth和Maller 2017年论文Snarky Signatures: Minimal Signatures of Knowledge from Simulation-Extractable SNARKs。SoK的概念与simulation-extractable non-interactive zero-knowledge argument的概念相关。在Mina中,依赖使用SNARKs构建的SoKs,从而可利用SoK的succinctness。(Mina采用的是Bowe和Gabizon 2018年论文《Making groth’s zk-snark simulation extractable in the random oracle model》中的simulation-extractable SNARK方案。)
定义2.1:
- state:为a string s t ∈ 0 , 1 λ st\\in\\0,1\\^\\lambda st∈0,1λ
- block proof:为a value (或a set of values) π i B \\pi_i^B πiB,包含了用于验证该区块是否有效的信息。
- block:每个区块关联一个称为block producer的唯一一方。block B i = s n i , s t i , π i B , d i , b-pk i , b-sig i B_i=\\sn_i, st_i,\\pi_i^B, d_i,\\textb-pk_i,\\text b-sig_i\\ Bi=sni,sti,πiB,di,b-pki, b-sigi,其中 s n i ∈ N sn_i\\in\\mathbbN sni∈N为serial number, s t i st_i sti为当前state, π i B \\pi_i^B πiB为当前block proof, d i ∈ 0 , 1 ∗ d_i\\in\\0,1\\^* di∈0,1∗为当前block data, b-pk i \\textb-pk_i b-pki为当前block producer的公钥, b-sig i \\textb-sig_i b-sigi为当前公钥 b-pk i \\textb-pk_i b-pki对 s n i , s t i , π i B , d i \\sn_i, st_i,\\pi_i^B, d_i\\ sni,sti,πiB,di的签名。
Mina链由一系列区块 C = B 1 , ⋯ , B n C=\\B_1,\\cdots,B_n\\ C=B1,⋯,Bn组成,其中序列号为严格单调递增的。第一个区块 B 1 B_1 B1称为genesis block。 len ( C ) = n \\textlen(C)=n len(C)=n为当前区块高度。
定义2.2:
succinct blockchain protocol
Π
\\Pi
Π由5个PPT算法组成
(
VerifyConsensus, UpdateConsensus, VerifyBlock, UpdateChainSummary, VerifyChainSummary
)
(\\textVerifyConsensus, UpdateConsensus, VerifyBlock, UpdateChainSummary, VerifyChainSummary)
(VerifyConsensus, UpdateConsensus, VerifyBlock, UpdateChainSummary, VerifyChainSummary):
- VerifyConsensus(consensusState, consensusProof) → ⊤ / ⊥ \\textVerifyConsensus(consensusState, consensusProof)\\rightarrow \\top/\\perp VerifyConsensus(consensusState, consensusProof)→⊤/⊥:该算法的输入为 consensusState 和 consensusProof \\textconsensusState 和 consensusProof consensusState 和 consensusProof,验证某个正确性与否分别输出 ⊤ 或 ⊥ \\top或\\perp ⊤或⊥。
- UpdateConsensus(consensusState, consensusProof) → nextConsensusState \\textUpdateConsensus(consensusState, consensusProof)\\rightarrow \\textnextConsensusState UpdateConsensus(consensusState, consensusProof)→nextConsensusState:该算法的输入也为 consensusState 和 consensusProof \\textconsensusState 和 consensusProof consensusState 和 consensusProof,输出为an updated consensus state。
- VerifyChainSummary ( S i ) → ⊤ / ⊥ \\textVerifyChainSummary(S_i)\\rightarrow \\top/\\perp VerifyChainSummary(Si)→⊤/⊥:该算法验证某blockchain summary S i S_i Si是否有效。
- VerifyBlock ( S i − 1 , B i ) → ⊤ / ⊥ \\textVerifyBlock(S_i-1, B_i)\\rightarrow \\top/\\perp VerifyBlock(Si−1,Bi)→⊤/⊥:该算法验证某区块 B i B_i Bi是否对应某blockchain summary S i − 1 S_i-1 Si−1有效。作为验证的一部分,它会检查 VerifyConsensus(consensusState i − 1 , consensusProof i ) → ⊤ \\textVerifyConsensus(consensusState_i-1, \\textconsensusProof_i)\\rightarrow \\top VerifyConsensus(consensusStatei−1,consensusProofi)→⊤,其中 S i − 1 S_i-1 Si−1包含了 consensusState i − 1 \\textconsensusState_i-1 consensusStatei−1, π i B \\pi_i^B πiB包含了 consensusProof i \\textconsensusProof_i consensusProofi, B i = ( ⋅ , ⋅ , π i B , ⋅ , ⋅ , ⋅ ) B_i=(\\cdot,\\cdot,\\pi_i^B,\\cdot,\\cdot,\\cdot) Bi=(⋅,⋅,πiB,⋅,⋅,⋅)。
- UpdateChainSummary ( S i − 1 , B i ) → S i \\textUpdateChainSummary(S_i-1, B_i)\\rightarrow S_i UpdateChainSummary(Si−1,Bi)→Si:该算法输入为blockchain summary S i − 1 S_i-1 Si−1和新区块 B i B_i Bi,输出为an updated blockchain summary S i S_i Si。
以上succinct blockchain protocol Π \\Pi Π具有succinctness属性:
以上是关于Mina技术白皮书的主要内容,如果未能解决你的问题,请参考以下文章
一个视频理解王铁匠的P2P+Blockchain+AI(附白皮书)
Chainlink——白皮书简析(whitepaper v2)