Z-DAG:
使用Nakamoto共识安全参数进行实时加密支付的交互式定向非循环图协议
JagdeepSidhu,Msc.?,EliotScott?,AlexanderGabriel?
?Syscoin核心开发人员,BlockchainFoundry有限公司
Email:,
?英国林肯大学,林肯自治系统中心,
邮箱:
摘要--Z-DAG代表零确认定向非循环图。该技术可以使商家和消费者应用程序间的交互协议内,实现高统计概率实时结算的销售点。
1.简介
Z-DAG是一种即时结算协议,在确认Syscoin服务交易时被用作工作量证明的补充系统。本质上,Z-DAG只是一个有向非循环图,其中验证节点对在其内存池接收的交易排序进行验证。整个网络中的验证节点使用Z-DAG来确保交易顺序有绝对的共识,并且没有余额溢出。
1.0.1Z-DAG
Z-DAG是一种跨Syscoin资产运行的即时结算协议。资产所有权通过私钥来证明,该私钥匹配与资产相关联的每个唯一地址。Z-DAG以决定性的方式管理交易的余额和状态。当在短时间内通过多个节点创建多个交易而使资产错误转移时,它可以有效防止双重支出。
1.0.2.DAG结算
之所以允许Z-DAG交易即时结算,是因为通过执行交互式协议,每个节点接收到实时交易,此过程中,在发送方和接收方之间极有可能出现最小时延,这就使得矿工很大可能在实时交易时看到交易顺序,与此相比,在一个区块之内则具有更大可能性进行微小交易结算。即便在没有区块确认的情况下,交易的参与者也可以就结算达成一致,因为网络能够预测下一个区块中的交易是怎样的,以及它们如何排序。在创建区块期间,矿工的任务是从他们的内存池中构建一个有序的交易列表,它们按时间排序。请注意,一贯传统中,矿工从内存池中选择付费最高的交易,此处该规则保持不变,在根据最高费用选择交易集后会产生额外排序。基于时间的排序具有可忽略不计的处理要求,因此对矿工并无害处,并可在创建区块时自动完成。
如果矿工未能做到这一点,他们的区块将被置于不被对等方验证的风险,因为如果处理乱序,余额可能会溢出。每个对等方都进行严格的验证,以确保在处理区块时,不会出现任何的负余额,就像比特币处理UTXO时,严格按照标准检查余额一样。成功的矿工将这些列表写入新的区块,然后通过验证网络中的节点继续被接受或拒绝。验证节点使用这些区块中所包含的交易列表来验证没有余额溢出,他们可以交叉检查以确定网络是否处于确定状态。如果网络不处于确定性状态,就意味着节点验证和矿工存在结果冲突,则冲突的交易和区块将被拒绝。如果验证节点断定它们处于绝对共识状态,则区块中的交易将被确认并正常添加到状态数据库。在交易开始时,对于由同一资产持有者进行的后续转移,适用非强制性的10秒延迟。此延迟旨在创建最小时延,从而简化交易的排序。如果用户发送两个交易,第二个交易在第一个交易产生后10秒,那么网络上的足够节点应该能够确定哪个交易是原始传输。如果在此延迟内进行了转移,则冲突状态设定,并且接收节点会把违反交互协议的交易拒之门外;见图2。实时状态和PoW块之间的任何差异将在确认区块时得到解决,因为PoW总是回滚到先前的状态并重放矿工所看到的正确的交易顺序。通过使用这种概率方法,Z-DAG交易能够实时进行结算,并且在最小时延内,双重支出风险可以忽略不计。内存池验证和交易信息的网络延迟将通过并行操作得到高度优化,并且将允许概率场景,其中矿工在最小时延阶段之后可以更高概率以与大多数网络相同的顺序看到交易。
图1.1:这表示交易的实时排序,作为DAG中顶点的线性排序o=中,u位于v前面。余额实时持续,并设法检测双重支出。在区块1001,订单由矿工保存并由PoW结算。
区块链开发工具公司Confio停止所有公共产品工作,长达四个月未获捐赠:2月2日消息,区块链开发工具公司Confio发文称,现已停止所有公共产品工作。
Confio一直为Cosmos生态的区块链、项目和开发者提供免费支持,但已经无法负担CosmWasm补贴。自2022年10月以来的四个月时间里,Confio没有收到任何用于公共产品工作的捐赠资金。
Confio表示,此后不会再发布CosmWasm、wasmd等其他库的新代码、不再支持完成Cosmos SKD 0.47工作、不再披露安全问题等。[2023/2/2 11:42:42]
1.0.3.PoW分区容差+DAG即时结算
除了可以促进快速交易,Z-DAG还允许在区块上结算交易,并且,使用PoW作为Syscoins首要共识方法所获得的任何安全性不会有任何闪失。PoW是DAG运行的后备和分区容差,每个区块都构建一个新的DAG。如果接收者愿意的话他们可能期望简单地等待一分钟/区块进行区块确认,或者等待6分钟/块以进行彻底确认。通常,对于基于代币的去中心化网络来加速交易,必须进行某种类型的功能组合。采用这种方法的系统通常选择牺牲去中心化和/或奖励机制;例如使用Ripple和Nano采用的共识协议。Syscoin的解决方案保留了支持网络的去中心化、安全性和奖励矿工机制。
1.1技术概述
Syscoin即刻交易结算的方法与比特币的创始人SatoshiNakamoto最初提出的想法有异曲同工之妙。Satoshi在他/她对“比特币零时自动贩卖机”问题的回应中称,通过在交易之间创建延迟,率先通过网络传播的一个传输比另一个更具有指数优势。由此,交易很容易按序排列,从而使Z-DAG能够被确定地构建;这是一种其他系统在结构上无法复制的方法,除非它们是可以按照确定性排序编码到其共识模型中的、具有内置规则的去中心化系统。这是Z-DAG的精髓。有关其他工作的更多详细信息以及没有中心化如何导致解决问题失败,详见“相关工作”章节。
图1.2:A节点向网络广播它正在向B节点发送一定数量的资产。一旦B节点收到交易通知,余额会立即在其钱包中体现。在挖到一个区块时,交易通过网络确认。在区块确认时,资产的状态回复到前一个区块的状态,而有序的区块则继续进程以达到新的余额。需注意,验证区块进程与实时余额的结果相同时,余额保持不变。
1.2.互动游戏
协议共识由资产转移的接收者通过调用“资产分配发送者状态”功能来强制执行,该功能确保发送者使用资产进行的任何交易都遵守最小时延,并且还标记了一个主要的错误状态以检测双重支出。如果发送者没有遵守协议规则,接收者可能决定不遵守销售点,或等待或拒绝他们的交易结束。这些规则不是由网络共识强制执行的,因此可以在网络带宽和计算资源更便宜和更有效时进行优化。当进行有效转移时,接收该已广播交易的矿工将其包含在未确认、等待在区块中挖出的交易队列中。虽然交易的接收方能够在收到交易通知后立即获取其资金,但直至挖出一个区块,该交易才算真正完成;在挖出区块之前,该笔交易会被当作毫无疑问会存留而进行结算。一旦挖出一个区块,交易就会得到确认,资金在PoW置信之下最终完成;详见图1.3。事实上,这只是两个置信模型的故事,Z-DAG置信模型位于统计概率内,即PoW排序将与某些确定性匹配,并且PoW确认允许确定性:一旦在X区块上确认,则在统计概率上他们不太可能回滚。此外,由于置信模型不会持续超过区块,因此在一个时域内,此类模型的费用市场也进行了优化,以避免由于区块已满而导致费用呈指数上升的情况。因为在Z-DAG置信度模型中,你真正关心的只是未检测到双重支出,关心的是你的交易最终会结算别人为Z-DAG交易支付的费用,并且可能比标准交易少很多,因为别人并未争相在下一个区块中进行结算。同样值得一提的是,Z-DAG的主要用例是用于销售点,在这种销售点中,发生概率结算并且允许买方在无需等待买卖双方都确信交易准确完整的情况下进行区块结算,买家可以无需理睬具有某种类型的履行服务的销售。
声音 | 京东集团副总裁:税务机关可利用区块链等技术提升专票防伪功能:据经济网报道,在中国内地第一张电子发票于京东面世6周年之际,《经济》杂志、经济网记者专访了知名财税专家、被誉为“国内电子发票第一人”的京东集团副总裁蔡磊。蔡磊表示,从税务机关层面来说,可以现有的电子发票系统为基础,增加电子专用发票的功能,并利用最新的区块链等技术提升专票防伪功能。[2019/7/13]
1.3多线程和并行签名验证
为了加速跨网络的新广播交易,Syscoin使用独特的方法来验证签名、中继交易。节点的任务是在验证其签名之前先中继任何转入的交易;详见图1.4。一旦节点中继了新交易,它就会将该交易添加到包含其他未经检查的交易的线程池队列中。线程池基于有界MPMC无锁队列,基于DmitryVyukov的工作,每个入列/出列操作1个CAS。通过将交易中继优先于签名验证,预期接收者将以指数方式更快地收到资金汇入的消息,从而更迅速获取新的余额。多线程还大大减少了签名验证所需的时间;有关内存池并发验证过程,请参阅附录A中的算法1。
1.3.1并发验证追索政策
作为预防恶意传播无效交易的不良参与者的措施,在遇到错误签名时,Syscoin节点被指示实施简单协议。当节点检测到交易已被错误签名时,它会设置一个标识,以便将后续请求进入内存池的交易返回单线程模式。然后,节点继续在单线程模式下,对余下的未检查交易队列进行60秒解析,并摒弃在此时遇到的任何错误签名的交易。此外,当节点处于单线程模式时,它会反转其惯常操作顺序,并在中继未检查的交易之前解析交易队列。通过使用这个简单的协议,能够更快地传播有效交易,而无效交易则会被快速捕获并丢弃;在验证剩余的内存池的情况下,关于60秒的追索策略详见附录A的算法1。
图1.3:在左侧的序列图中,两个节点尝试从同一地址交易资金。由于两个交易的总和都在发送地址的余额之内,因此允许在两个区块上确认交易。在右侧的序列图中,两个节点尝试从同一地址交易资金,但其中一个被拒绝。在第一个交易被确认并且在发送地址的余额减少之后,第二个交易变为非法并被标记为双重支出,随后被中继到网络的其余地方。
图1.4:传统的区块链网络要求每个节点在中继之前首先检查传入交易的签名;这种区块技术会阻碍广播速度。而如上所示的Z-DAG进程会在检查签名之前立即中继交易,从而显著加快网络上的移动速度。
2.网络传输和处理
现在我们已经描述了我们如何解决问题,接下来展示在Syscoin的主节点网络环境中检测和处理双重支出的概率。直觉判断,由于我们将验证与中继分离,我们使用统计模型得出结论:10秒验证窗口足以让传统商品硬件支撑与峰值吞吐量下运行的VISA/Masternode网络的相匹配的速度。
2.1传输路径
主节点k之间的共同对等体的预期数量取决于网络中的主节点m的总数以及每个主节点具有的对等体p的数量。随后,预期的共同对等体数量是:
当主节点i是一个共同对等体时,Xi为1,反之则为0。由于主节点们从一组主节点集合中随机选择他们的对等体,因此归纳为
如果我们假设主节点的总数为1000,两个主节点之间的共同对等体的预期数量是0.625。那么发生这种情况的概率是多少?
对于一对主节点正好具有n个共同对等体的概率,见下列公式:
对于每个具有25个对等体的1000个主节点,概率如下:
安全起见,假设我们的25个对等体中只有22个是独一无二的。然后在两个跳数之后我们可以达到484个主节点,在3个跳数之后我们可以达到所有主节点。对于更高的主节点总量,这些几率可以提高。通过网络的惯常路径有5个步骤,3个在主节点的网格内,2个在其边界处。
2.2传输延迟
我们收集了一个300字节ICMP传输的、主节点到主节点、客户端到主节点的数据集。该数据集包含2086个样本,每个样本是两个主机之间10次传输的平均传输时间。为了模拟单个跳数的传输延迟,我们将伽马分布拟合到该样本集。
动态 | Gartner报告:2025年 20%的顶级食品零售商将应用区块链技术:Gartner在最新报告中预计,到2025年,全球20%的顶级食品零售商将把区块链用于食品安全及溯源之中,进而使得其生产、质量及新鲜度可见。Gartner高级研究主管Joanne Joliet表示:“区块链可以帮助零售商向客户传递信心,建立并保持信任和忠诚。随着食品零售商被要求达到更高的透明度和可追溯性标准,他们将引领区块链的发展,但我们预计它(区块链技术)将扩展到所有零售领域。”[2019/5/1]
图2.1.将伽马分布与我们的样本集进行匹配
提供给我们伽马分布k和θ的两个定义参数
k=1:471680θ=0:077714
为了估算端到端的传输时间,我们必须总结5个以上的伽玛分布。这给我们带来一组新的定义参数
k=7:358398θ=0:077714
现在我们可以计算传输在给定时间内到达的概率,反之亦可以计算,我们需要等待多长时间才能以所需的概率获得传输。
图2.2.随着时间推移5个跳数后tx到达的概率
2.3网络处理能力
由于交易的接收方在接受销售点交易之前等待10秒,并且通过网络可能的双重支出交易占用了多达2.3秒,因此她有7.7秒的备用时间。此时间可用于验证其他签名。换言之,如果一个商家有累计的7.7s时间可以验证签名,她仍然可以及时发现双重支出交易。
我们对新的并行签名验证机制进行了测试,以创建一个样本集,用来为签名验证时间作模型。我们使用libsecp256k1对进入内存池的交易输入进行ECDSA签名验证。libsecp256k1使用有效的可计算自同态来将被乘数P分成2半,以便为我们提供30%的速度提升。比特币已禁用这一功能,但实际是为了在未来的版本中启用它。我们还启用了所有硬件优化。我们坚持使用传统硬件,以获得目前主节点正在运行的云提供商上的现有计算硬件的典型平均吞吐量。这些数字代表了今天用低成本硬件应该可能实现的目标,而不是随着网络周围的速度和基础设施的有机增长而变得更有利的具有前瞻性的数字。
使用这个模型,我们可以找出商家在10秒等待时间所剩下的7.7s中可以验证的签名数量。在10秒窗口中验证的293.3千个签名意味着网络通过4核接收器节点,每秒最大理论吞吐量为29.33千个交易。假设发送方和接收方元组之间存在虚拟交易,则每个资产交易最多可容纳250个接收方,这意味着每秒大约有73.3万个交易的最大吞吐量。如果商家运行更快的机器,这些数字会更显著增加。
图2.3.在7.7s中验证签名的可能性
3.相关工作
Syscoin的共识方法基本上以Satoshi的工作量证明算法为中心。Z-DAG协议是共识第二层,其目的是允许交易在确认之前得到解决;Z-DAG不能单独确保共识。Syscoins通过同时使用DAG和PoW解决快速交易问题的方法既高效又独特。许多其他去中心化服务完全使用基于DAG的网络结构,甚至更多地继续使用PoW或PoS。像IOTA和NANO这样的项目已经创建了自己的基于DAG的协议,这些协议在很大程度上牺牲了PoW的经过验证的安全性,但反之又获得了快速处理交易的能力。许多老的服务,即比特币和类似的衍生出的项目,为了安确保安全继续使用PoW,但是他们的用户经常被交易时间缓慢并且具有限制而影响。
3.1.相关工作类比
如前所述,IOTA和NANO是两种基于DAG的典型服务,它们创建了自己独特的方法来确保其网络节点之间的去中心化共识。可以说,NANO的方法受到Satoshi的工作证明的启发,因为它用于确保网络的共识。然而,NANO的共识基本上是通过使用他们称为“区块晶体”的DAG结构来实现的。与Syscoin不同,Nano网络上的节点保留了各自的区块链。交易按其时间戳排序,用于形成有向非循环图。在交易期间,发送方和接收方都产生它们自己的区块,这些区块反映它们各自参与交易,然后广播到网络。发送方和接收方都使用PoW验证自己的交易,这免除了在网络上指定矿工。为防止犯规,NANO采用PoS和投票系统,以确保交易符合网络要求的标准。
IOTA用于确保其网络共识的方法几乎完全覆盖了传统模型。IOTA依赖于网络共享的主DAG,它们称之为“Tangle”。在Tangle中,交易作为顶点存在并形成长链。当一个交易试图加入需要通过网络确认的Tangle时,则在它之前的另外两个必须先被批准。因此,通过参与IOTA交易,用户可以帮助加速网络。因此,与NANO类似,每个节点都可以视作自己的矿工。然而,由于IOTAs系统至今并未完全去中心化,因此争议不断,备受诟病。针对所谓的“34%攻击”,IOTA在当前的成熟度上依然处于结构性脆弱状态。“34%攻击”与威胁PoW系统的“51%攻击”非常相似,但它明显具有更大的隐患。当交易加入DAG时,tangle会随着时间的推移逐渐增加,但它可以抵御这种攻击增加。在tangle到达某个成熟点之前,作为临时补救措施,IOTA设立了一个集中协调器节点来防止34%攻击。
完全依赖PoW共识的去中心化服务从经过严格测试和验证的安全性中获益颇丰,但由于交易时间缓慢而处于瓶颈状态。对于待确认交易,必须将它们包括在通常远距离挖出的区块中;在比特币中,每10分钟一次。这种强制性的时间限制使得许多现实的加密货币应用程序无法进行交换。通常,区块内交易的顺序由矿工任意决定。唯一的例外是,交易必须在它们所依赖的任何交易之后出现。这种随机性使得区块无法被可靠预测;同时也是Syscoin在验证区块之前对交易进行拓扑排序的原因。交易的实时视图可以反映区块内的排序,这需要协议支持,而这些正是比特币和其他PoW实践所缺乏的。因此,依赖于这种PoW链进行零确认结算的技术,与在核心层具有协议支持的技术相比,基本上不具有相同的安全属性。
比特币-XT通过转播双重支出交易并让商家实时检测双重支出,实现了零确认结算方案,但容易受到所谓的的延迟攻击,而在Syscoin中,通过让商家查询,随机抽选主节点,来响应资产分配发件人状态,则可以有效地避免。
未获取PoW支持的实践受到分区容错问题的影响。本质上,DAG实践基于性能而非一致性进行权衡。随着时间的推移,PoW链可能具有更大的一致性,并且最终不会出现像IOTA一样需要协调DAG结构的问题。在Syscoin中,实践PoW+DAG意味着使用PoW作为每个DAG的参照,因此不需要采取协调措施让DAG保持如何形成或验证的一致性。
Syscoin的Z-DAG协议对接收方验证交易的方式没有任何限制,只有资产分配发送方状态是参考实施,以确保满足相邻发送方交易之间的最小延迟,并确保未检测到发送方双重支出。用户可以自由地实践最小时延,甚至可取决于网速增加的情况,将可接受的实时交易之间的延迟从10秒调整到更短的时间,以便更快地传播交易。一言以蔽之,可以动态调整延迟进行优化,从而更好地跟上平均传播速率。例如,相比于内存池以验证机制为瓶颈的速率填充时,当内存池相对较空,交易在网络上传播应该更快。我们将此作为未来的一个小作业。
3.2.使用比特币的中心化服务
解决以前称为“快速交易”问题的另一种方法是应用程序级环绕解决方案。BitPay等实体为基于加密货币构建的企业提供区块链计费服务;例如BitPay建立在比特币之上。BitPay模式使用票据和加密到法定货币的转换技术。BitPay为客户开具比特币支付票据,在收到之后,转换回法定货币以重返交易。此外,BitPay还赋予企业和客户选择他们愿意承担的交易风险承受等级的能力。该风险承担系统根据自交易启动以来,在比特币网络上挖出的区块数量来调整其风险等级。如果在确认付款之前,交易要求挖出更少数量的区块,则欺诈风险更大,反之,如果需要更多数量的区块,风险也同样巨大。
4.未来工作
可以通过各种技术改进此项工作,以增加在最小延迟时间内验证的统计概率。一种方法是检查绑定验证器的随机数量以进行验证。
4.1.SPVZ-DAG
Z-DAG的简单支付验证方法可以通过询问随机仲裁的接收方来确定有关Z-DAG交易的详细信息。通过随机仲裁,您可以将从接收器上的主机节点无效检测双重支出的概率下放到一组节点以及所选随机仲裁的游戏技巧的可能性。从立即发送协议的随机仲裁选择中可以看出,在没有合理怀疑的情况下使用这种验证机制进行销售点应用是安全的,特别是当随机性并非由一种更易于利用的决定性的种子,而是由接收者播种。
这种类型的验证对于未运行完整节点的销售点终端尤其有用,但可以将端点引用到绑定验证器完整节点的随机化仲裁,以针对每个交易对它们进行验证。
5.结论
通过对比Syscoin与相关工作可以看出,Z-DAG协议是针对上述“快速交易”问题的精妙有效的解决方案。它使用户能够在没有任何第三方参与的情况下,立即结算Syscoin服务的转移,而且欺诈风险可以忽略不计。Z-DAG交易不需要卖家或客户采取任何其他步骤就可以直接在Syscoin网络上快速交易。使用Z-DAG,可以通过比特币证明的绝对安全性快速结算客户交易。
致谢
我们感谢SatoshiNakamoto,感谢Bitcoin核心开发人员一直以来在软件工程上的卓越成就,使人们可以在其成果之上开发创新产品。
参考资料
ArthurBrittoDavidSchwartzNoahYoungs.TheRippleProtocolConsensusAlgorithm.URL:https://ripple.com/files/rippleconsensuswhitepaper.pdf.
EvanDuffield.Dashpay.URL:https://github.com/dashpay/dash/wiki/Whitepaper.
ArthurGervais.TamperingwiththeDeliveryofBlocksandTransactionsinBitcoin.URL:https://scalingbitcoin.org/papers/bitcoin-block-transaction-delivery.pdf.
ColinLeMahieu.Nano:AFeelessDistributedCryptocurrencyNetwork.URL:https://nano.org/en/whitepaper.
SatoshiNakamoto.Bitcoin:Apeer-to-PeerElectronicCash.URL:https://bitcoin.org/bitcoin.pdf.
SatoshiNakamoto.Bitcoinsnackmachine(fasttransactionproblem).URL:https://bitcointalk.org/index.php?topic=423.20.
SergueiPopov.TheTangle.URL:https://assets.ctfassets.net/r1dr6vzfxhev/2t4uxvsIqk0EUau6g2sw0g/45eae33637ca92f85dd9f4a3a218e1ec/iota143.pdf.
JagdeepSidhu.Syscoin3.0:APeer-to-PeerElectronicCashSystemBuiltForBusinessApplications.URL:https://syscoin.org/Syscoin3.0WhitepaperCondensed.pdf.
DmitryVyukov.BoundedMPMCqueue.URL:http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue.
PieterWuille.OptimizedClibraryforECoperationsoncurvesecp256k1.URL:https://github.com/bitcoin-core/secp256k1.
6.附录A:Z-DAG协议伪代码
算法1:内存池并行验证和Z-DAG实时共识
结果:一旦跨网络参与者收到消息,资产分配余额将实时传输
1CallassetallocationsendRPC;调用资产分配发送RPC
2SignandsendTXtonetwork;签署并发送TX到网络
3foreachtransactionreceivedfrompeerdo对于从对等体do收到的每笔交易
4Accepttomemorypool;接受到内存池
5ifnow()-nLastMultithreadMempoolFailure<60secondsthen
如果now-n最后多线程Mempool失败<60秒则
6setbMultiThreaded=false;设置b多线程=false
7else其他
8PreliminaryinputcheckssameasBitcoin;初步输入检查与比特币相同
9ifbMultiThreaded==falsethen如果b多线程=false则
10forallinputsdo对于所有输入
11Dosignatureverification;签名验证
12ifIfsignatureverificationfailsthen如果签名验证失败则
13returnfalse;返回false
14else其他
15Addtransactiontomemorypool;将交易添加到内存池
16Relaytransactiontonetworkpeers;中继交易到网络对等体
17else其他
18Addtransactiontomemorypool;将交易添加到内存池
19Relaytransactiontonetworkpeers;中继交易到网络对等体
20Addtransactiontothreadpoolqueueforsignatureverification;将交易添加到线程池队列以进行签名验证
21Threadpoolconcurrentlychecksforsignaturevalidity;线程池同时检查签名有效性
22ifsignatureverificationfailsthen如果签名验证失败则
23setnLastMultithreadMempoolFailure=now();设置n最后多线程内存池失败=now()
24return;返回
25else其他
26ZeroconfirmationSyscoinconsensusupdates;更新零确认Syscoin共识
27ifupdatefailsthen如果更新失败则
28setnLastMultithreadMempoolFailure=now();设置n最后多线程内存池失败=now()
29return;返回
30else其他
算法2:资产分配发件人状态RPC
结果:根据Z-DAG交互协议规则检查收到的交易是否确实有效
1setstatus=OK;设置状态=OK;
2ifsenderwasfoundinassetAllocationConflicts(double-spenddetectionbuffer)then如果在资产分配冲突中找到发送方则
3setstatus=MAJORCONFLICT;设置状态=MAJORCONFLICT;
4else其他
5Orderallin-transitassetallocationsfromsenderinorderbyascendingtime;按递增时间顺序对发件人的所有在途资产分配进行排序;
6setmapBalances=senderbalancefromlastPoWblock(lastknowngoodstate);设置mapBalances=上一个PoW块的发送方余额;
7forallin-transitassetallocationsdo对于所有在途资产配置
8settxRef=in-transitassetallocationfetchedfrommempool;设置txRef=从内存池获取的在途资产分配;
9iftxRefisinvalidthen如果txRef无效则
10continue;继续
11else其他
12iftimereceivedof2adjacenttransactions<=minimumlatency(10seconds)then如果接收到2个相邻交易的时间<=最小延迟则
13setstatus=MINORCONFLICT;设置状态=MAJORCONFLICT
14else其他
15forallallocationssentinthistransactiondo对于次交易中发送的所有分配
16setsenderBalance=senderBalancesendingamount;设置发送方余额=发送方余额-发送金额;
17setmapBalances=mapBalances-sendingamount;设置map余额=map余额-发送金额;
18ifsenderBalance<=0then如果发送方余额<=0则
19setstatus=MINORCONFLICT;设置状态=MAJORCONFLICT
20else其他
21returnstatus;返回状态
算法3:区块构造
Result:ABlockisconstructedoutoftransactionsrelatedtoSyscoinand/orSyscoinassets结果:区块是由与Syscoin和/或Syscoin资产相关的交易构成的
1Craftblockfromtransactionsqueuedinthememorypool,orderedbyhighestfeefirst;在内存池中排队的交易的区块,按最高费用第一排序;
2Orderallin-transitassetallocationsfromsenderinorderbyascendingtime;按递增时间顺序对发送方的所有在途资产分配进行排序;
3TestvalidityofSyscoinassettransactionsinblock;以区块为单位,测试Syscoin资产交易的有效性;
4ifIfblockisinvalidbecausetransactionscausebalanceoverflowsthen
If如果由于交易导致余额溢出,区块无效,则
5removeinvalidtransactionsfromblockandcallBlockConstructionagain;从区块中删除无效交易并再次调用区块构建;
6else其他
7TestvalidityofstandardSyscoinblocktransactions;测试标准Syscoin区块交易的有效性;
8SolveblockPoWandrelayblocktothenetwork;解决区块PoW并中继区块到网络;
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。