• 简体版 | 繁體版
  • 联系我们
  • 加入我们
  • 关于我们
  •  
  • 首页
  • 快讯
  • 价值号
  • 视频
  • 专题
  • 深度
  • 入驻价值号
  • 碳链APP
    微信公众号

    扫码下载App

  • 登录
  • 微信公众号

    微信公众号

导航
  • 首页
  • 快讯
  • 区块链+
  • 价值号
  • 视频
  • 专题
  • DeFi优选
碳链价值APP
专注服务于金融科技和区块链
立即打开

开发人员如何处理Solana中被丢弃的交易?

Captain HiroCaptain Hiro  •  2022-01-18
本文主要概述了关于Solana如何处理交易,以及关于开发人员如何处理丢失交易的技术。

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

这篇文章最初发表于The Solana Cookbook。

简介

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

交易的历程

客户如何提交交易

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

  1. 通过RPC服务器和sendTransaction JSON-RPC方法进行代理
  2. 通过TPU客户端直接传送给领导者

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

RPC节点如何广播交易

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

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

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

  • 获取阶段
  • 签名验证(SigVerify)阶段
  • 银行业务(Banking)阶段
  • 历史服务证明(Proof of History Service)
  • 广播阶段

图片来源:Jito Labs图片来源:Jito Labs图片来源:Jito Labs

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

  • tpu处理常规交易,如代币转移、NFT铸造和程序指令。
  • tpu_vote只关注投票交易
  • 如果当前领导者无法处理所有交易,tpu_forwards将未处理的数据包转发给下一个领导者。

关于TPU的更多信息,请参考Jito Labs的这篇文章‌。

交易如何被丢弃

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

在处理一项交易之前

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

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

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

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

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

处理被丢弃的交易

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

深入了解sendTransaction

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

请求参数

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

(可选) configuration object: object(对象)

  • skipPreflight:bolean(布尔值)——如果为真,则跳过预检交易检查(默认为假)。
  • (可选) preflightCommitment: string(字符串)—— 对bank slot进行Preflight模拟时使用的承诺级别(默认为:“完成”)。
  • (可选) encoding: string (字符串)——用于交易数据的编码。要么是 "base58"(慢速),要么是 "base64"。(默认:"base58")。
  • (可选) maxRetries: usize——RPC节点重试向领导发送交易的最大次数。如果不提供这个参数,RPC节点将重试交易,直到交易最终完成,或者直到区块哈希过期。

响应

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

自定义重播逻辑

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

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

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

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

跳过Preflight的代价

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

验证所有签名是否有效

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

针对preflightCommitment指定的bank slot模拟交易

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

何时重新对交易进行签名

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

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

鸣谢

非常感谢Trent Nelson, Jacob Creech, White Tiger, Le Yafo, Buffalu, 和Jito Labs的审查和反馈。

展开全文
打开碳链价值APP  查看更多精彩资讯
声明:本文内容为作者独立观点,不代表碳链价值立场,且不构成任何投资理财建议。
0 1
Solana

扫一扫,分享到微信

相关推荐

潜在的「以太坊杀手」Solana链上有哪些NFT市场? 深度

潜在的「以太坊杀手」Solana链上有哪些NFT市场?

老雅痞 2022-05-10 深度
NFTSolana
简析过去一两年内出现的各种不同的Solana NFT市场有哪些优劣及特点。
浅析不同NFT数据存储方法的优缺点以及未来展望 深度

浅析不同NFT数据存储方法的优缺点以及未来展望

Captain Hiro 2022-04-25 深度
NFTPolygonSolanaArweave
目前 NFT 媒体存储的状态比大多数收藏家意识到的风险要大得多。
iZUMi Research 万字报告:DeFi 流动性的现状及未来展望 深度

iZUMi Research 万字报告:DeFi 流动性的现状及未来展望

Foresight News 2022-04-16 深度
DeFi以太坊UniswapConvexCurveNFTSushiSwapTokemakCompoundBNB ChainAvalanchePolygonAMMSolana
为解决如何提升链上流动性的资本效率以及如何更好的引导和管理流动性这两个问题,各式各样的创新性 DeFi 项目应运而生。

碳链快讯更多 ›

2022-05-20

DeFi 流动性管理协议 iZUMi Finance 完成 3000 万美元融资

2022-05-20

G7:加密资产应与传统金融资产遵循相同标准

2022-05-20

OpenSea交易额突破300亿美元

2022-05-20

数字支付公司Xendit完成3亿美元D轮融资,Coatue等领投

2022-05-20

比尔·盖茨:没有投资任何加密资产

2022-05-20

贵州茅台数字藏品活动已暂停

2022-05-20

前美国驻华大使:全球合作对于促进Web3.0的发展非常重要

2022-05-20

Gopax运营商Streami完成约2368万美元B轮融资

2022-05-20

塞浦路斯已起草加密资产监管法案

2022-05-20

世界经济论坛:数字货币将重塑全球贸易格局

2022-05-20

英国监管机构将结合近期稳定币市场的不稳定性与财政部联合制定加密新规

2022-05-20

Tether CTO:Terra项目并非Rug Pull,而是设计糟糕的「纸牌城堡」

2022-05-20

索尼音乐成立RCA唱片大中华区分部,将探索NFT和元宇宙等领域

2022-05-20

乌兰察布市集宁区法院发布区块链存证应用指引

2022-05-20

Web3平台Ecosapiens完成150万美元融资,BoostVC领投

2022-05-20

V神:将长期提升以太坊区块容量至16 MB,将支持Rollup达到8万TPS/秒

2022-05-20

V神:以太坊2.0最早可能于8月进行合并

2022-05-20

韩国将于5月24日召集交易所就LUNA事件召开紧急会议

2022-05-20

质押平台Kiln完成500万美元融资,SV Angel等参投

2022-05-20

Avalanche:LFG没有披露使用AVAX代币的计划

2022-05-20

美联储监管副主席提名人Michael Barr:加密货币有潜力也有风险,需要进行监管

2022-05-20

G7财长公报草案:鉴于最近加密市场的动荡,G7敦促FSB推进全面监管

2022-05-19

SingularityNET和SingularityDAO获LDA Capital 2500万美元投资承诺

2022-05-19

SWIFT确认正在与Capgemini合作进行CBDC相关跨境支付测试

2022-05-19

证券型代币风投工作室Security Token Group完成300万美元A轮融资,Blue Bay Ventures领投

2022-05-19

Tether一季度审计报告:商业票据投资大幅减少,美国国债投资增加

2022-05-19

加拿大风投Round13推出1亿美元加密专项基金,目前已募资7000万美元

2022-05-19

Ripple将投资1亿美元用于碳减排技术以及相关工具开发

2022-05-19

欧易OKX将于明日上线合约冷静期功能

2022-05-19

美国SEC专员Hester Peirce:担心美国会限制加密货币市场的创新

2022-05-19

Terra验证者Allnodes抨击Do Kwon提出的分叉提案投票管理是「独裁模式」

2022-05-19

俞敏洪:黄怒波和我天天把区块链、元宇宙放在嘴边,其实我们根本不懂

2022-05-19

由于监管不确定性,比特币矿企开始远离纽约州

2022-05-19

韩国金融证券犯罪联合调查组对Terra及其团队核心成员启动调查

2022-05-19

Revolut CEO:公司计划推出的原生代币将奖励客户忠诚度,肯定不是稳定币

2022-05-19

韩国风投Hashed在Terra危机中或损失超35亿美元

2022-05-19

链游工作室Azra Games完成1500万美元种子轮融资,a16z领投

2022-05-19

Babel Finance和FQX以加密“eNote”进军债券市场

2022-05-19

FTX US将为部分美国用户开放股票交易服务

2022-05-19

Zhu Su:一些迹象显示比特币正在重新进入积累期

2022-05-19

嘉楠一季度财报显示营收13.6亿元人民币,利润4.416亿元人民币

2022-05-19

美国商务部将发布17个加密问题,征求意见以帮助开发加密框架

2022-05-19

报告:一季度全球区块链行业融资超90亿美元,创历史新高

2022-05-19

Coinbase Ventures在2022年Q1完成超70次投资

2022-05-19

Argo Blockchain在UST完全崩盘前以每枚0.93美元的均价将其出售

2022-05-19

加密钱包服务提供商Coins.ph完成3000万美元C轮融资,Ribbit Capital领投

2022-05-19

Web3基础设施提供商NodeReal完成1600万美元A轮融资,Sky9 Capital领投

2022-05-19

俄罗斯金融市场官员:预计今年将出现俄罗斯首个数字金融资产

2022-05-19

Mee6:员工帐户遭入侵导致被用来发布虚假信息,目前已解决

2022-05-19

数据:4月中旬迄今风投对Web3游戏和元宇宙行业的投资额近30亿美元

推荐文章

  • 万字解读Telegram发家史:Pavel Durov如何变成「Facebook反抗者」

    2022-01-17

  • 朱嘉明:风口上的元宇宙

    2022-01-16

  • 央视财经:元宇宙时代虚拟人市场规模将达2700亿元

    2022-01-16

  • 2021年Dapp行业报告:NFT、元宇宙以及DeFi

    2022-01-16

  • 元宇宙的建设需要哪些硬件?

    2022-01-13

价值号更多 ›

吉时通信
吉时通信
文章: 122
  • 元宇宙的六个预期差
  • Web3.0时代:开放、隐私和共建
  • 专访唯一艺术CEO:合规下的NFT发展探索
链集市ChainMarket
链集市ChainMarket
文章: 148
  • 区块链产业周刊:12部门开展安全技术应用试点示范工作,BSN推出基础设施以支持NFT
  • 如何使用区块链和NFT进行身份验证、品牌推广和建立合作?
  • 区块链产业周刊:北京推动形成区块链产业集群,长沙经开区发布区块链产业发展五年规划
加密谷Live
加密谷Live
文章: 585
  • 公链Fantom:从数据视角解读Fantom为何会暴涨?
  • Layer 2时代:照亮Play to Earn游戏的前路
  • 解析 DeFi 领域的助力器:去中心化身份 DID
换一批

热门标签

新基建 比特币 以太坊 矿业 DeFi 共识对话 区块链+ 研报 美联储 央行数字货币 无限QE 加密衍生品 AI 云计算 大数据 5G 政策 交易所 稳定币 电子支付 Libra 算力产业 联盟链 公链 区块链 加密货币 Nervos Cosmos EOS STO

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

App内打开

邮件订阅

及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。

Moshou

碳链价值是集资讯、行情、数据于一身的区块链信息服务平台,我们追求及时、全面、专业、精确的资讯与数据,致力于为区块链创新者和数字货币投资者提供优质的服务。

关于我们 加入我们 联系我们 隐私条款
微信公众号

扫一扫关注微信公众号

Copyright © 2018-2020 碳链价值 京ICP备18046423号
下载碳链App

下载碳链App

微信公众号

微信公众号

微信公众号

微信公众号

打赏文章作者

支付宝打赏二维码 支付宝扫一扫打赏
微信打赏二维码 微信扫一扫打赏

# 热门搜索 #

CBDC 比特币 DeFi 以太坊 区块链