火星链 火星链
Ctrl+D收藏火星链

TRANS:开发人员应如何处理Solana区块链中被丢弃的交易?

作者:

时间:1900/1/1 0:00:00

本文主要概述了关于Solana如何处理交易的技术,以及关于开发人员如何处理丢失交易。

这篇文章最初发表于TheSolanaCookbook。

简介

在某些情况下,一个看似有效的交易在被纳入区块之前可能会被丢弃。这种情况最常发生在网络拥堵时期,当RPC节点未能将交易重新广播给领导者的时候。对于终端用户来说,他们的交易似乎完全消失了。虽然RPC节点配备了通用的重播算法,但应用程序开发人员也能够开发自己的自定义重播逻辑。

交易的历程

客户如何提交交易

在Solana区块链中,不存在mempool的概念。所有的交易,无论它们是以编程方式还是由终端用户发起的,都被有效地路由到领导者,以便被处理成一个区块。将交易发送给领导者有两种主要方式:

通过RPC服务器和sendTransactionJSON-RPC方法进行代理通过TPU客户端直接传送给领导者绝大多数的终端用户会通过RPC服务器提交交易。当客户端提交交易时,接收的RPC节点将反过来尝试将交易广播给当前和下一个领导者。在交易被领导者处理之前,除了客户和转发的RPC节点知道这笔交易以外,没有任何关于交易的记录。在TPU客户端发送交易的情况下,重播和领导者的转发完全由客户端软件处理。

Alchemy推出免费服务以吸引更多区块链开发人员加入平台:加密后端公司Alchemy正在扩大其免费服务,试图吸引更多的程序员进入区块链开发领域。这家帮助加密公司从区块链读取和写入数据的基础设施初创公司表示,此举旨在让崭露头角的开发人员更容易站稳脚跟,无论他们是在构建去中心化金融(DeFi)门户还是非同质化代币(NFT)的门户市场。Alchemy增长主管PaulAlmasi表示,项目应该能够“以更高的速度展开”,更容易获得开发者服务。(coindesk)[2021/8/21 22:27:41]

RPC节点如何广播交易

在RPC节点通过sendTransaction收到交易后,它将把交易转换成UDP数据包,然后转发给相关的领导者。UDP允许验证器彼此之间快速通信,但不提供任何关于交易交付的保证。

由于Solana的领导者时间表在每个纪元之前就已被知道,RPC节点将直接向当前和下一个领导者广播其交易。这与其他协议相反,后者在整个网络中随机和广泛地传播交易。在默认情况下,RPC节点将尝试每两秒钟将交易转发给领导者,直到交易最终完成或交易的区块链过期。如果未完成的重播队列大小超过10000个交易,新提交的交易将被丢弃。RPC操作员可以调整一些命令行参数,从而改变这种重试逻辑的默认行为。

美国参议院投票通过基础设施法案修正案,或将对矿工和开发人员等征税:8月9日消息,美国参议院以68票对29票的压倒性优势投票通过了Warner-Sinema-Portman基础设施法案修正案。该修正案因对矿工和开发人员等非托管行为者强加税务报告要求而受到加密社区的广泛批评。在投票后,依据程序将有30小时的辩论时间,这意味着该修正案仍有被驳回的可能。据悉,目前另一修正案Wyden-Lummis-Toomey修正案仍在做出积极努力,以求改变Warner-Sinema-Portman对加密行业的严苛要求。[2021/8/10 1:44:43]

当一个RPC节点广播一个交易时,它将试图把交易转发给领导者的交易处理单元。TPU在五个不同的阶段处理交易。

获取阶段签名验证阶段银行业务阶段历史服务证明广播阶段

图片来源:JitoLabs在这五个阶段中,“获取”阶段负责接收交易。在获取阶段,验证器将根据三个端口对汇入的交易进行分类。

tpu处理常规交易,如代币转移、NFT铸造和程序指令。tpu_vote只关注投票交易如果当前领导者无法处理所有交易,tpu_forwards将未处理的数据包转发给下一个领导者。关于TPU的更多信息,请参考JitoLabs的这篇文章?。

ConsenSys开发人员:将于2021年前几周细化ETH2.0三重路线图交付计划:1月11日,ConsenSys开发人员Ben Edgington发文《超越信标链:Eth2的下一步是什么?》。Ben Edgington在文中回顾了以太坊信标链发展进程,并重新回顾了以太坊2021年的三重路线图:Eth1和Eth2之间的“合并”、分片和轻客户端相关的具体内容(V神已于2020年11月中旬公布)。与此同时,Ben Edgington在文中称,假设信标链继续顺利运行,以太坊2.0在2021年前几周的任务是将这三个工作流细化为具体的交付计划。[2021/1/12 15:57:00]

交易如何被丢弃

在交易的整个过程中,有几种情况下,交易可能被无意中从网络中删除。

在处理一项交易之前

如果网络丢弃了一个交易,它很可能在交易被领导者处理之前就被丢弃了。UDP数据包丢失是可能发生这种情况的最简单原因。在网络负荷很高的时候,验证器也有可能被需要处理的交易数量所淹没。虽然验证器有能力通过tpu_forwards转发多余的交易,但可以转发的数据量是有限制的。此外,每个转发被限制在单独两个验证器之间进行。也就是说,在tpu_forwards端口上收到的交易不会被转发到其他验证器上。

还有两种不太为人所知的原因,即交易在被处理之前可能被丢弃。第一种情况涉及通过RPC池提交的交易。在一些非常罕见的情况下,RPC池的一部分可以充分领先于池的其他部分。当池内的节点被要求一起工作时,这可能会导致问题。在这个例子中,交易的最近区块哈希是由池的高级部分查询的。当交易被提交到池子的滞后部分时,节点将无法识别领先的区块哈希,从而放弃交易。如果开发者在sendTransaction上启用预检检查,就可以在交易提交时检测到这一点。

ETH 2.0开发人员:信标链Beacon Chain版本1.0.0的候选版本0已发布:ETH 2.0开发人员Ben Edgington表示,信标链Beacon Chain的1.0.0版本候选版本0已发布,其中包含了许多改进和配置调整。还对Boneh-Lynn-Shacham(BLS)签名方案进行了升级,增强了对拒绝服务攻击的抵抗能力。Beacon Chain的“创世”或将在6-8周后推出,这仍然是一个估计,并没有正式的发布日期。(Cryptopotato)[2020/10/19]

暂时性的网络分叉也会导致交易被丢弃。如果一个验证器在银行阶段内重放区块的速度很慢,它可能最终会创建一个少数分叉。当客户建立一笔交易时,该交易有可能引用一个只存在于少数分叉上的最近区块哈希。在交易被提交后,交易集群可以在交易被处理前从其少数分叉中切换出来。在这种情况下,交易会因为找不到区块哈希而被丢弃。

孙宇晨曾向Fomo3D开发人员支付50万美元以创建波场版本游戏:根据外媒Decrypt看到的合同,波场(Tron)首席执行官孙宇晨曾向流行的以太坊游戏Fomo3D的开发人员支付了50万美元,以在波场区块链上构建该游戏的新版本。该交易已于2018年10月在孙宇晨与JUST团队的两个核心开发人员之一Mantso之间达成协议。一名前JUST开发人员已确认该合同是真实的。签订合同后,开发人员花了一年时间开发该游戏。在2019年12月,JUST团队宣布将在波场上推出新游戏,该版本的游戏于12月22日上线。但是从那以后,核心开发人员就从Team JUST社区中消失了,游戏也因此失败了。[2020/6/12]

在交易被处理后,在交易被最终确定前被丢弃

如果一个交易引用了少数分叉的最近区块哈希,该交易仍有可能被处理。然而,在这种情况下,它将由少数分叉的领导者处理。当这个领导者试图与网络的其他成员分享其处理的交易时,它将无法与大多数不承认少数分叉的验证器达成共识。这时,交易将在最终完成之前被丢弃。

处理被丢弃的交易

虽然RPC节点会尝试重新广播交易,但他们采用的算法是通用的,往往不适合特定应用的需要。为了应对网络拥堵时期,应用开发者应该定制自己的重播逻辑。

深入了解sendTransaction

当涉及到提交交易时,开发人员可用的主要工具是sendTransactionRPC方法。sendTransaction只负责将交易从客户端转发到RPC节点。如果节点收到交易,sendTransaction将返回交易ID,可以用来跟踪交易。一个成功的响应并不表明该交易是否会被集群处理或最终完成。

请求参数

transaction:string——完全签名的交易,作为编码的字符串

configurationobject:object

skipPreflight:bolean——如果为真,则跳过预检交易检查。preflightCommitment:string——对bankslot进行Preflight模拟时使用的承诺级别。encoding:string——用于交易数据的编码。要么是"base58",要么是"base64"。。maxRetries:usize——RPC节点重试向领导发送交易的最大次数。如果不提供这个参数,RPC节点将重试交易,直到交易最终完成,或者直到区块哈希过期。响应

transactionid:string-——嵌入在交易中的第一个交易签名,以base-58编码的字符串。这个交易ID可以与getSignatureStatuses一起使用,轮询状态的更新。

自定义重播逻辑

为了开发自己的重播逻辑,开发者应该利用sendTransaction的maxRetries参数。如果开发者提供相关参数,maxRetries将覆盖RPC节点的默认重播逻辑,允许开发者在合理范围内手动控制重播过程。

手动重试交易的一个常见模式是来自getLatestBlockhash临时存储的lastValidBlockHeight。应用程序一旦存储起来,就可以轮询交易集群的区块高度,并在适当的时间间隔内手动重试交易。在网络拥堵的时候,将maxRetries设置为0并通过自定义算法手动重播是很有利的。虽然一些应用程序可能采用指数退避算法,但其他应用程序,如Mango,选择以恒定的时间间隔连续重新提交交易,直到发生某种超时。

当通过getLatestBlockhash进行轮询时,应用程序应指定其预期的承诺水平。通过将其承诺设置为确认或最终确定,应用程序可以避免从少数分叉中轮询区块链。

如果一个应用程序可以访问负载均衡器后面的RPC节点,它也可以选择在特定的节点中划分其工作负载。服务于数据密集型请求的RPC节点,如getProgramAccounts,可能很容易落后,也不适合转发交易。对于处理时间敏感的交易的应用程序,谨慎的做法是有专门的节点只处理sendTransaction。

跳过Preflight的代价

默认情况下,sendTransaction将在提交交易前进行三次预检。具体来说,sendTransaction将:

验证所有签名是否有效

检查引用的区块链是否在最后150个区块之内

针对preflightCommitment指定的bankslot模拟交易

如果这三个预检中的任何一个失败,sendTransaction将在提交交易之前引发一个错误。预检查往往是失去一个交易和允许客户端优雅地处理一个错误之间的区别。为了确保这些常见的错误被考虑在内,建议开发者不要将skipPreflight设置为false。

何时重新对交易进行签名

尽管所有的尝试都是为了重新广播,但有时客户可能需要重新签署一个交易。在重新签署任何交易之前,确保初始交易的区块哈希已经过期是非常重要的。如果最初的区块链仍然有效,那么两笔交易就有可能被网络接受。对于终端用户来说,这就好像他们无意中发送了两次相同的交易。

在Solana中,一旦一个被丢弃的交易所引用的区块哈希比从getRecentBlockhash收到的lastValidBlock的时间长,该交易就可以被安全丢弃。开发者可以通过isBlockhashValid方便地检查给定的区块链的情况。一旦一个区块链失效,客户可以用新查询的区块链重新签名。

鸣谢

非常感谢TrentNelson,JacobCreech,WhiteTiger,LeYafo,Buffalu,和JitoLabs的审查和反馈。

标签:RPCIONTRANSRANRPC价格SubscriptionsTransdata ChainTYRANT

欧易交易所app官网下载热门资讯
COIN:富达报告:2022年加密监管和产品准入将齐头并进

据Blockworks1月11日消息,富达数字投资研究主管ChrisKuiper和研究分析师JackNeureuter在一份报告中表示,随着加密原生公司继续创新和发展该行业.

1900/1/1 0:00:00
DEI:长铗2022年新作《元宇宙:通往无限游戏之路》签名版开启发售

1月4日,知名畅销书作家、中国科幻小说最高奖“银河奖”获得者长铗2022年新作《元宇宙:通往无限游戏之路》正式发售!李稻葵、朱嘉明、肖风等专家学者倾情作序推荐.

1900/1/1 0:00:00
COIN:Coinbase:Web3堆栈的简单指南

来源:Coinbase博客原标题:《AsimpleguidetotheWeb3stack》编译:胡韬 行业已经对web3提出了很多定义,但在Coinbase.

1900/1/1 0:00:00
数字艺术:万字长文探究NFT艺术对数字艺术及其市场的影响

原标题:《NFT艺术对数字艺术的影响》摘要随着区块链技术以及区块链上非同质化通证NFT的发展,越来越多的NFT艺术品的出现,NFT逐渐引起艺术圈的关注.

1900/1/1 0:00:00
无聊猿:无聊猿创作者,27岁华裔女孩的NFT之旅

对于塞内卡来说,她自己也没想过这套作品竟然推动了一场技术革命。 原文链接:https://www.rollingstone.com/culture/culture-features/seneca.

1900/1/1 0:00:00
ROND:第一个将“国家区块链创新应用等试点”写进省政府工作报告,广东已经为区块链落地铺好了快车道

来源:财联社|区块链日报记者徐赐豪原标题:《广东推动国家区块链创新应用试点的底气在哪里?》近日,广东省政府工作报告指出,加快建设广州人工智能与数字经济试验区.

1900/1/1 0:00:00