Mina的支付流程

1. 引言

前序博客有:

  • Mina概览

Mina采用gossip协议来确保消息即时可靠传输到网络中的所有成员。
支付为一种交易类型,将某账号(Bob)的资金转至另一账号(Alice),以及发送者愿为该笔支付流转所关联的交易手续费。

2. Mina支付流程

整个Mina支付流程为:

  • 1)Bob点击’send’,创建支付:Mina网络中的任何成员都可创建并分享支付交易。该支付交易由sender的私钥签名,以此可从密码学角度验证发送者账号。然后将签名后的支付交易发送到网络中的节点进行处理。当节点收到该支付交易时,会将其放入本地的transaction pool中,在该交易池中以内存方式存储了该节点从网络中收到的所有交易。
  • 2)Bob的支付交易被放入todo list中,开始产块:Mina网络为给定的 time slot选择产块节点。当前活跃的产块者会根据手续费选择飞行中的支付交易,并将其放入一个被称为过渡块的待处理列表中。产块者打包区块而赚得mina。产块者生成一个SNARK,定义与前一个区块相比的过渡区块的结构(但尚未验证这些新支付交易)。产块者将这些新信息传送给Snark workers来处理。
  • 3)Bob的支付交易被snark-signed,进行交易snark证明:网络中的Snark worker节点开始为过渡块中的每一步进行snark计算。每笔支付交易对应一个独立的proof,然后将相邻支付交易的proof进行合并。最终,会对所有支付交易进行验证。Snark workers生成这些proof的过程中可赚得现金,由产块者从其区块奖励中支付。这些proof传输到整个网络。
  • 4)Alice和Bob的账号显示转账后的结果,完成支付交易验证:一旦对整个区块完成证明,产块者将对过渡块发出确认消息。然后网络中的成员节点更新其本地的账号balance来反应支付交易的变化。
  • 5)Alice相信转账已结束,支付信心层面:在随后的每一个区块中,收款方都有更高的信心,相信支付已经完成,并且网络对该区块有共识。然而,与大多数区块链一样,在一定数量的区块(也称为交易最终性)之后支付交易才是固化的。
    比特币交易确认为6个区块(约60分钟),基于的假设为攻击者不太可能聚集超过10%的hashrate。

Mina的slot duration为3分钟,并假设质押的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填充的slot数,当前设置为75%。
一笔交易等待确认的推荐时间为15个区块,可提供99.9%的信心该交易不会被撤销。

3. 失败场景

3.1 交易不被网络接受

节点之间共享的交易不被接受的原因有2种:

  • 该交易根本无效。这意味着发送者的帐户不存在,没有足够的资金,签名与帐户不匹配,或者交易中的nonce没有增加。
  • 网络中可能有敌对节点串通拒绝向网络中的特定发送方提供服务。然而,这种行为是非常不利的,一个诚实的节点就足以防止这个问题。

3.2 交易不被包含在某区块中

若交易有效,且网络诚实,则该交易将最终包含在某区块中。但是,存在一种情况该交易将从交易池中去除:

  • 若交易池达到了其容量上限,或max_txpool_size,则会将池子中手续费最低的交易剔除,从而将该交易从内存层去除。若发生了该情况,发送者需以更高的手续费(根据当时的市场动态)重新发送一笔交易。

参考资料

[1] The Lifecycle of a Payment
[2] The Lifecycle of a Payment - Technical Guide

你可能感兴趣的:(区块链,区块链)