Solana leader validator机制下递增字段的并发交易处理问题
Solana 计数递增场景的实际运行逻辑说明
你的初始认知确实存在疏漏,Solana 的节点分工和交易处理流程和你理解的不一样:
核心逻辑纠正
- 每轮选举出的 leader 才是负责打包、排序交易并率先执行出块的节点,其余 validator 的核心职责是验证区块合法性,而非独立处理交易生成自己的状态版本。
- 所有节点执行交易的顺序完全由 leader 给出的区块内交易排序决定,不存在多个 validator 各自独立改状态再由 leader 整合的逻辑。
counter 场景的实际运行规则
假设初始链上 counter 状态为 counter=50,同时有10个用户发起 counter 加1的交易:
- 所有交易都会先发送到当前轮次的 leader 节点,leader 会识别到这10笔交易都需要写入同一个 counter 账户(Solana 交易必须提前声明要读写的账户,可写账户会被明确标记),因此会对这10笔涉及同一可写账户的交易做线性排序。
- leader 严格按照自己排的顺序执行这10笔交易:第一笔执行后
counter=51,第二笔执行后counter=52……直到第10笔执行完得到counter=60,执行完成后 leader 会把交易列表、最终状态结果打包成区块广播给其他 validator。 - 其余 validator 收到区块后,严格照搬区块内的交易顺序重新执行一遍所有交易,把自己计算得到的最终 counter 值和状态根和 leader 给出的结果做比对,结果一致就对该区块投赞成票,不一致就直接拒绝该区块。
- 当区块获得足够多的 validator 投票确认后,最终的
counter=60的状态就会被全网确认,不会出现你担心的最终只有51的情况。
补充说明
Solana 只会对读写账户完全无交集的交易做并行执行,只要交易涉及同一个可写账户,就会强制按顺序串行执行,从根本上避免了并发写冲突的问题。
内容的提问来源于stack exchange,提问作者yangli-io
相关产品推荐
相关产品推荐

