理解 Solana 中的 Slot、Block、Epoch、Entry、Shred 和 PoH
对于刚刚接触Solana的开发者来讲,会经常遇到 Slot Block Epochs Entry 和 Shred等一些概念术语,但很验证记住它们的意思和作用。
本篇将通过 Solana 的交易原理,让大家轻记信它们并了解它们之间的联系,并加深对Solana交易的理解。由于能力有限,文章中难免有误,大家可以在评论区留言,共同学习进步!
好了,下面让我们开始彻底搞明白这些术语及它们在Solana交易中的作用吧!
在开始之前我们先看一下在Soalna链中一笔交易是如何进行的。
交易流程
交易流程
- 用户客户端发起一笔交易,并使用钱包私钥进行签名
- 通过rpc协议将交易发送到用户指定的 Solana RPC 节点。这里RPC节点在区块链网络中存在多个,起到了负载均衡的作用
- RPC节点验证交易合法性,如进行一系列的检查 ,一般指签名验证/账户检查(账户是否存在,读取权限合法)/账户余额是否足够支付手续费等,最后进行交易模拟执行,就是我们经常说的模拟交易阶段(这一步可以手动配置
--skip-preflight
或kipPreflight: true
跳过)。如果这一步失败,则整个交易直接失败,并返回给客户端。否则将交易转换到 Leader 节点。 - Leader节点收到交易后,会放入自己的交易队列(Transaction Queue),按账户读写锁进行是否允许并发执行(solana交易快的原因之一就是并发执行),同时进行预检查(Pre-Check),防止账户余额不足支付交易手续费。同时还会做更多的工作,这些工作与PoH有关,设计到slot/blocks/Epochs/Entry 和 shred,这也正是本文的重点。
- 在区块链里一笔交易是否合法需要得到大多数节点(在solana里实际是质押量)的认可才行。因此这时 Leader 节点将交易状态设置为 processed。需要将这笔交易发送到一些验证节点(Validator)。如果每一次发送一笔交易的话,网络性能太差了,因此需要将多笔一起打包发送到验证节点,在Solana里一般是通过 Turbine(分层树状网络) 广播的方式将交易信息发送到 validator节点。
- 验证节点收到交易信息后,会重放执行交易,再次对交易进行验证,如果与leader节点验证的结果一致,则表示交易是合法的,就会对LEADER节点发送一个投票交易( Tower BFT )到 leader节点。这一阶段称为投票。同时这些验证节点还需要发送到下一层的邻近 validator 节点,这些节点组织成一个类似树状网络。
- 当Leader节点不断的收到多个验证节点的投票,并不断的计算stake数量,如果发现达到了 2/3 的,则表示交易得到了多数节点的认可,也就是表示交易是合法的,这时再将交易状态修改为 confirmed。
- 后续随着新交易的不断增加,交易越来越不可能被修改,最终再将交易状态修改为 finalized,表示交易不可回滚动。
以上就是一笔交易的大概流程,这里涉及交易的三种状态:
processed:Leader 本地执行并打包交易
confirmed:交易得到网络多数 validator 的认可(>2/3 stake 投票)