文章介绍了Agave对Solana验证器的更新,允许验证器在不修改客户端的情况下自定义区块打包逻辑。这种模块化架构提高了透明度和安全性,简化了开发运维,并提供了诸如“失败则放弃”和“全有或全无”等默认的区块构建原语。
如今,超过 90% 的网络运行着非默认的调度器实现,如 Jito 或 Paladin,以增加其奖励。很快,我们将向 agave 添加一套新功能,使验证者无需修改 stock agave 客户端即可自定义区块打包逻辑。
这些更改将为交易接收和区块打包创建一个新的模块化架构。这种逻辑将与核心验证器二进制文件分离,从而更容易进行调度器自定义,而不会有扰乱核心验证器操作(如重放和投票)的风险。我们还将提供通用区块构建原语的默认实现,如“回滚时丢弃”和“全有或全无”捆绑包。
随着 Solana 上的 MEV 日益成熟,自定义调度器实现变得越来越普遍。虽然自定义调度器可能会增加收入,但它们目前的实现方式存在许多缺点。如果你想今天修改调度器,你需要运行一个完全不同的验证器版本。通常,这些调度器是私有的,并且它们的工作方式不太清楚,这可能会导致交易难以落地。
迁移到模块化调度架构具有许多优点:
透明度:修改后的调度器越来越普遍,这使得理解正在进行哪些游戏变得困难。
安全性:Solana 验证器代码库很复杂。对核心二进制文件的修改可能会影响协议的活跃性。
开发运维:由于修改调度器需要运行不同版本的验证器二进制文件,因此快速修补网络可能很困难,因为每次更改都需要调度器团队重新构建。
添加了 CLI 选项来:
通过 QUIC 或其他方法将验证器连接到外部区块构建服务
(可选)指定一个地址/端口,供验证器在 gossip 上发布为 TPU
通过 admin rpc 管理与外部区块构建服务的连接
区块构建组件在 leader window 期间将用于区块构建的交易流式传输到验证器
leader 使用给定的交易按冲突 FIFO 顺序打包区块
如果验证器与外部区块构建服务断开连接,则验证器将回退到正常的区块生产路径,并且联系信息会通过 gossip 更新
验证器通过 TCP 连接到区块构建服务。
区块构建服务会定期向验证器发送心跳消息。
在 leader window 期间,区块构建服务应将带有元数据的交易批次发送到验证器,以便打包到区块中。
元数据将指定对交易的特殊处理,例如回滚时丢弃、全有或全无等。
从区块构建服务到验证器的消息结构可能类似于以下代码:
#[derive(Serialize, Deserialize)]
#[repr(C)]
pub struct TransactionBatch {
id: u32,
flags: BatchFlags,
transactions: Vec<Vec<u8>>,
}
bitflags! {
#[derive(Serialize, Deserialize)]
pub struct BatchFlags: u8 {
const ALL_OR_NOTHING = 0b0000_0001;
const DROP_ON_REVERT = 0b0000_0010;
}
}
验证器必须与区块构建服务通信,以指示 leader slot 的开始和结束、发送的交易批次的结果以及区块限制的更新。这些消息可能采用类似于以下代码的形式:
#[derive(Serialize, Deserialize)]
#[repr(C, u8)]
pub enum ValidatorMessage {
BeginLeaderSlot(Slot),
SlotUpdate({
percentage_through_slot: u64,
block_cost_units_used: u64,
}), // slot 的百分比
EndLeaderWindow,
TransactionResults(Vec<TransactionResult>),
InvalidBatch,
}
#[derive(Serialize, Deserialize)]
#[repr(C)]
pub struct TransactionUpdate {
batch_id: u32,
index: u32,
// None 表示未包含交易
committed_cus: Option<NonZeroU64>,
write_accounts: Vec<Pubkey>,
}
如果两个交易相互冲突,验证器将尝试按接收顺序打包
如果由于区块限制而无法将所有接收到的交易打包到一个区块中,则将尝试按接收顺序包含交易,直到达到限制
如果接收到的批次带有 DROP_ON_REVERT 标志,则只有在交易结果成功时才会包含交易。
如果接收到的批次带有 ALL_OR_NOTHING 标志,则只有当批次中的所有交易都包含在内时才会包含交易。
- 原文链接: anza.xyz/blog/scheduler-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!