Mina 文档 - 协议架构(上)

  • MinaFans
  • 更新于 2021-12-20 23:32
  • 阅读 2134

Mina 开发者中文文档

6.1 Mina协议架构

Mina协议是如何工作的?

看看这个简短的视频详细解释了Mina协议是如何工作的:

https://youtu.be/eWVGATxEB6M

时间点

● 1:50 -什么是Mina?

● 2:40 -当前密码学货币的前景

● 3:53 -一个全节点的历程

● 6:09 -根本问题-验证机制

● 7:28 -寻找一个解决方案

● 8:45 - zk-SNARks:不可伪造的证书

● 15:31 -递归组成的SNARKs

● 18:50 -结果:去中心化和可扩展性

● 20:45-结论

● 21:20-问答

6.2 支付周期

在Mina中,付款要经过几个步骤才能被认为是经过验证和完整的。本文档旨在通过简单的概述来了解单个支付的情况,从而帮助用户了解Mina支付的工作原理。它不是一个全面的技术概述,而是为用户提供了一个简化的演练。对于希望了解代码库的开发人员来说,想要获得更详细的技术概述,可以查看支付的技术周期

! !请注意Mina使用了一种(Gossip Protocol),以保证消息能够及时可靠地传输给网络中的所有其他成员。

支付

支付是一种事务类型,请求将价值从一个帐户转移到另一个帐户,以及发送方愿意支付的手续费。

让我们来看看这样一个场景:发送者Bob想要将某个mina发送给接收者Alice。

步骤1:创建支付- Bob点击“发送”

网络中的任何成员都可以创建支付并与Mina网络共享。付款由私钥签名,以便可以验证发送者的帐户。然后它被发送到网络上的对等节点进行处理。当对等节点收到该支付时,该支付将存在于其本地transaction pool中,该交易池是对等节点在网络上接收的所有交易的内存存储。

步骤2:生成一个区块 - Bob的支付然后将之放入一个待办事项列表中

在给定的slot中,在网络上选择一个区块生产者节点。当前活跃的生产者根据支付费用从本地transaction pool选取未处理的交易,并将其放入待处理的列表中,称为转换区块。区块生产者通过构建这些区块获得mina。生产者生成一个SNARK,与之前的区块相比,来定义转换区块的结构(但还没有验证这些新支付)。生产者将这个新信息传递给snark工作者进行处理。

步骤3:Snark交易证明-Bob的支付得到snark签名

网络上的Snark工作节点开始对新转换区块的每一步执行Snark计算。这些是每笔付款的单独证明,也是合并相邻付款的证明。最终所有的支付都会被验证。Snark工作人员可以通过生成这些证明来赚取代币,而区块生产者则用他们的区块奖励来支付这些证明费用。这些证明通过网络传输出去。

第4步:支付验证——Alice和Bob的帐户显示转账的结果

一旦整个区块被证明,区块生产者将发送一个过渡区块的确认。然后,网络上的成员节点将更改在其本地帐户余额,来反映这些更改。

步骤5:支付信任水平——Alice确信转移已经完成

对于每个后续区块,接收者对付款实际上已经完成,网络对该区块有共识的信心更高。然而,就像在大多数区块链中一样,支付是在经过一定数量的区块后才被确认的,也被称为事务终局性。

在比特币网络中,假设攻击者积累的哈希率不太可能超过10%,那么6个区块(60分钟)后该事务被确认。

以3分钟为slot间隔,假设诚实的质押为90%,下表显示了以区块为单位的终局性、生成相应区块数的平均时间以及确认付款的信心。

Finality (in blocks) Average time for finality Finality confidence (%)
8 33 mins 98.6709
15 60 mins 99.9231
23 1hr 32mins 99.9965
30 2hrs 99.9998
38 2hrs 32mins 100

平均时间是根据共识常数计算的,共识常数决定每个epoch填充的slots。目前设置为75%。

一个事务被确认的建议等待时间是15个区块,这为交易不会被逆转提供了的99.9%的可信度。

失败场景

网络不接受事物

与对等节点共享的事务可能不被接受有以下几个原因:

● 该交易在根本上是无效的。这意味着发件人的帐户不存在,它没有足够的资金,签名与帐户不匹配,或者交易中的一次性随机数没有增加。

● 网络中可能存在恶意节点,它们串通起来拒绝向网络中特定的发送者提供服务。然而,这种行为成功概率非常低,一个诚实节点就足以防止这个问题。

交易不包含在区块中

如果一个事务是有效的,网络是诚实的,那么在所有的可能性中,一个事务会被打包进入区块。然而,有一种情况下,一个事务可能从被事务池丢弃:

● 如果事务池达到其容量max_txpool_size,则它将根据池中最低的费用驱逐事务,导致交易从内存池中被丢弃。如果发生这种情况,发送人将根据当时的市场动态需要重新用更高的费用发送 。

https://docs.minaprotocol.com/en/architecture/lifecycle-payment-technical

6.3 区块生产者

Mina中的区块生产者的作用是达成共识,并为区块链提供安全保障。区块生产者负责创建新的区块,其中包括网络上最近的事务广播和一个区块链证明,以及当前状态是有效的证明链。

在Mina中,任何人都可以成为区块生产者。不限制数量的参与者可以一与所押资金成比例的概率产生区块。资金没有被锁定,也不会被罚没。

作为质押基金和生成所需区块链证明的回报,生成并包含在合法链中的区块以coinbase和交易费用的形式获得奖励,减少了购买所需交易snark工作所支付的任何费用。

为了成功地生成一个区块,区块生产者必须拥有区块链的当前状态。此外,它们必须有足够的可用计算来在slot时间内产生区块链SNARK,并连接到对等节点,以由网络共识参数定义的可接受延迟生成的区块进行广播。

选择区块生产者

在一个slot内产生区块的机会由可验证随机函数(VRF)决定。这个功能可以看作是抽签。每个区块生产者为每个slot独立运行这个VRF,如果他们得到的产量大于与生产者权益成比例的阈值,他们就有机会在指定的slot生产一个区块。

这个过程是秘密的,因为只有私钥持有者才能确定VRF输出,因此只有他们知道何时生成区块。这有助于安全性的提高,因为对手不可能在某个slot内瞄准已知的区块生产者,例如,通过拒绝服务或有针对性的攻击。因此,这也意味着可以为同一个slot选择多个生产者。如果多个生产者为同一个slot产生一个有效的区块,这将产生一个短的分叉,共识规则将选择最长的链。

权益分配是根据current epoch-2最后一个区块时账本上的质押数据确定的,因此最近获得的委托或委托给他人的权益会有延迟。例如,如果当前epoch是10,则从第8 epoch的最后一个区块的账本中确定质押分布。

注意

通过查找并检查VRF的结果,并在日志中查看Checking VRF evaluations。

生成一个区块

当一个块生产者被选中为在一个slot内生产一个区块时,他们执行以下操作:

● 从它们的转换边界(区块的本地存储)中选择当前最好的tip,并在其上构建新块。

● 从交易和snark池中选择交易和任何需要的snark工作。区块生产者必须购买的snark工作数量至少与他们添加到区块中的交易数量相等。除了用户交易,他们还添加coinbase交易作为生成区块和支付snark员工的费用转移的奖励。

● 生成区块链的下一个提议状态。这包括创建账本的差异,其中包括帐户账本和扫描状态(尚未证明的交易队列)。此差异应用于现有的分段账本以产生新的状态。

● 创建一个区块链证明来证明新状态是有效的。这个SNARK还会验证先前的协议状态证明。

● 创建一个delta转换链证明,如果在网络共识参数定义的可接受的网络延迟内接收该区块,则证明该区块是有效的。

● 在本地应用这个新生成的状态,并将其添加到现有的转换边界。

● 广播区块(称为外部转换)给它的对等节点。

权益委托

一个帐户可以通过被另一个帐户委托代币来增加被选择生成区块的可能性。当从被委托帐户中进行质押时,合并的资金被用于评估VRF阈值,以此增加了在一个slot内被选中生成区块的可能性。

已委托的资金是不可花费的,并且可以在任何时候通过将权益解除委托,重新委托回原始账户。

暴击的coinbase

为了进一步激励委托,如果赢得slot的帐户是一个没有任何锁定代币的账户,则区块生产者将获得双倍的coinbase奖励。

暴击的coinbase适用于所有账户,无论是委托还是质押。额外的奖励是由赢得这个slot的帐号决定的。例如,如果一个非锁定帐户委托给一个锁定帐户,如果非锁定帐户赢得了slot,那么coinbase将被暴击。如果锁定帐户赢了,那么coinbase就不会被暴击。

https://docs.minaprotocol.com/en/architecture/consensus

6.4 区块里有什么

区块是扩展网络状态的一组事务和共识信息。Mina中的区块包含了网络当前状态完全有效的证明。

Mina中的区块有:

协议状态

协议状态证明

分段账本的差异

Delta过渡链证明

● 当前协议版本

● 提议的协议版本

当节点从对等节点接收到区块时,首先对其进行验证,而后应用到现有状态,并将其添加到节点的转换边界。如果根据共识规则,区块链的长度增加,则更新节点的最佳tip,并向上移动转换边界的root,只保留转换边界的k区块。

注意

在Mina中,区块是“转换”的同义词。当从对等节点接收到这个转换(区块)时,它被引用为外部转换,而本地生成并应用的转换被引用为内部转换。

协议状态

协议状态由之前的协议状态哈希和包含以下内容的体组成:

初始状态哈希

区块链状态

共识状态

共识常量

每个区块包含前一个区块的协议状态哈希,这样区块可以链接在一起形成一个不可更改的链。

协议状态哈希是由前一个状态和体的哈希确定的,并作为每个区块的唯一标识符。

初始状态哈希

genesis state hash是初始协议状态的哈希值。

区块链状态

区块链状态包括:

● 分段账本哈希

● snark账本哈希

● Snark的下一个可用代币

● 创始账本哈希

● 时间戳

共识状态

共识状态包括:

● 区块链长度

● epoch数

● 最小窗口密度

● 子窗口密度

● 上一个VRF输出

● 总货币量

● 当前全局slot

● 自创始以来的全局slot

● 质押epoch数据

● 下一个epoch数据

● 在同一个检查点窗口中有祖先

● 区块的赢家

● 区块创造者

● Coinbase接收机

暴击coinbase

共识的常量

常量定义共识参数:

● k

● delta

● slots_per_sub_window

● slots_per_window

● sub_windows_per_window

● slots_per_epoch

● epoch duration

● checkpoint_window_slots_per_year

● checkpoint_window_size_in_slots

● block_window_duration_ms

● acceptable network delay

● slot_duration_ms

● epoch_duration

● delta_duration

● genesis_state_timestamp

协议状态证明

协议状态证明是一个区块链证明,用来证明区块生产者生成的新的协议状态是有效的。由于使用了递归SNARKs,该协议状态证明证明了整个链的历史是有效的。

分阶段的账本差异

当一个区块生产者赢得一个slot来生产区块,他们选择事务以及从事务和snark池中选取所需的snark工作。他们创建区块链的下一个状态的提议,其中包括创建分段账本的差异。差异包括:

● 区块中包含的交易

● 一个由SNARK工作者为先前的交易生成的SNARK证明的列表

● 待处理的coinbase

分段分类帐可以被视为一个待处理的帐户数据库,其中有尚未申请到的交易(支付、coinbase和证明费支付)。分段分类帐由帐户状态(分类帐)和用于无恶意证明的交易的交易队列(扫描状态)组成。

Delta过渡链证明

当网络周围产生新的广播或gossip区块时,有一种网络延迟是被允许的,以此来允许不利的网络条件的发生。delta过渡链证明了该区块是在分配的slot时间内产生的。

示例块

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
该文章收录于 Mina 开发者文档
44 订阅 26 篇文章

0 条评论

请先 登录 后评论
MinaFans
MinaFans
minafans.tech