Solana 更新日志
本文档详细记录了Solana项目从2.3.0到1.17.0版本的更新日志,涵盖Validator、Platform Tools SDK、CLI和RPC等多个组件的 Breaking Changes、Changes 和 Deprecations。重点关注了性能改进、API变更、配置更新以及对开发者和运营者的升级指导,并强调了从Borsh v0.9升级到v1的重要性。
更新日志
此项目的全部显著更改都将记录在此文件中。
请在进行更改时遵循文件底部的指南 格式基于 Keep a Changelog。 本项目遵循 语义化版本控制 并遵循 向后兼容性策略
2.3.0
验证器
破坏性更改
TimedTracedEvent的 ABI 发生了变化,因为PacketBatch变成了一个枚举,它携带不同的数据包批处理类型。 (#5646)
更改
- 从快照恢复时,Geyser 的账户通知不再重复数据删除。
- 添加
--no-snapshots以禁用生成快照。 --block-production-method central-scheduler-greedy现在是默认设置。- 默认的完整快照间隔现在是 50,000 个插槽。
- 要从本地状态启动,需要正常退出(通过
agave-validtor exit)。 有关从本地状态启动的更多信息,请参阅--use-snapshot-archives-at-startup的帮助。
弃用
- 使用
--snapshot-interval-slots 0禁用生成快照现已弃用。 - 使用
blockstore-processor作为--block-verification-method现已弃用。
平台工具 SDK
更改
cargo-build-sbf和cargo-test-sbf现在接受--arch参数的v0、v1、v2和v3。 这些参数指定要构建的 SBPF 版本。- SBFPv1 和 SBPFv2 也可用于 Anza 的 C 编译器工具链。
- SBPFv3 将仅适用于 Rust 工具链。 从 SBPFv3 开始,将不再支持 C 工具链。
cargo-build-sbf现在支持--optimize-size参数,该参数可以减小程序大小,从而可能以增加 CU 使用量为代价。
破坏性更改
- 尽管 solana rust 工具链仍然支持
sbf-solana-solana目标,但新的cargo-build-sbf版本目标默认设置为sbpf-solana-solana。 生成的程序将在target/deploy和target/sbpf-solana-solana/release上提供。 - 如果仍然需要
sbf-solana-solana目标文件夹,请使用cargo +solana build --triple sbf-solana-solana --release。 - 新的 SBPF 版本的 triple 目标也发生了变化。 Triples 版本
v1为sbpfv1-solana-solana,版本v2为sbpfv2-solana-solana,版本v3为sbpfv3-solana-solana。 生成的程序在target/deploy文件夹和target/<triple>/release文件夹中都可用。target/deploy中的二进制文件大小更小,因为我们从target/<triple>/release中提供的二进制文件中删除了不必要的部分。 cargo-build-sbf不再自动启用program功能到solana-sdk依赖项。 此功能允许solana-sdk在链上程序中使用。 用户必须显式启用program功能或改用solana-program。 这种新行为只会破坏使用solana-sdkv1.3 及更早版本的程序。
CLI
更改
withdraw-stake现在接受金额的AVAILABLE关键字,允许提取未质押的 lamports (#4483)solana-test-validator现在默认绑定到 localhost (127.0.0.1),而不是所有接口,以提高安全性。 提供--bind-address 0.0.0.0以绑定到所有接口以恢复以前的默认行为。
RPC
更改
simulateTransaction现在在其结果中包含loadedAccountsDataSize。loadedAccountsDataSize是模拟交易中所有账户加载的总字节数。
2.2.0
CLI
更改
- 添加全局
--skip-preflight选项,用于跳过通过 RPC 发送的所有交易的预检检查。 此标志以及--use-rpc可以提高使用公共 RPC 节点部署程序的成功率。 - 添加新命令
solana feature revoke用于吊销挂起的特性激活。 激活特性后,可以使用solana feature revoke <feature-keypair> <cluster>来取消分配并将账户重新分配给系统程序,从而撤消该操作。 这只能在特性生效之前完成。
验证器
破坏性更改
- 区块存储索引列格式更改
- Blockstore Index 列格式已更新。 v2.2 中写入的列格式与 v2.1 兼容,但与 v2.0 及更早版本不兼容。
- 快照格式更改
- 快照格式已修改为实现 SIMD-215。 由于只有相邻版本才能保证保持快照兼容性,这意味着使用 v2.2 创建的快照与 v2.1 兼容,与 v2.0 及更早版本不兼容。
更改
- 为
--block-production-method添加central-scheduler-greedy的新变体。 这是一个简化的调度程序,比更严格的central-scheduler变体具有更好的性能。 - 取消隐藏
--accounts-db-access-storages-method用于 agave-validator 和 agave-ledger-tool 并将默认值更改为file - 从 banking-trace 中删除 tracer 统计信息。 首次在 v2.2 上重新启动时,应清除
banking-trace目录。 如果未清除,则不会中断,但该文件将是新/旧格式的混合。 (#4043) - 添加
--snapshot-zstd-compression-level以设置使用 zstd 存档快照时的压缩级别。
弃用
- 弃用
--tower-storage和所有--etcd-*参数
SDK
更改
cargo-build-sbf: 添加--skip-tools-install标志以避免下载平台工具,以及--no-rustup-override标志以在调用cargo时不使用 rustup。 这对于像 Nix 这样的不可变环境很有用。
2.1.0
- 破坏性更改:
- SDK:
cargo-build-bpf和cargo-test-bpf已经弃用了两年,现在已经完全删除了。 请改用cargo-build-sbf和cargo-test-sbf。- 依赖项:
curve25519-dalek升级到新的主要版本 4 (#1693)。这会在混合使用 v2.0 和 v2.1 Solana crates 时导致中断,因此请务必使用一个或另一个。请仅使用与 v2.1 兼容的 crates。
- Stake:
- 删除了未发布的
redelegate指令处理器和 CLI 命令 (#2213)
- 删除了未发布的
- Banks-client:
- 放宽函数以使用
&self而不是&mut self(#2591)
- 放宽函数以使用
agave-validator:- 删除
--rocksdb-shred-compaction的已弃用值fifo(#3451)
- 删除
- SDK:
- 更改
- SDK:
- 删除了
respan宏。 这被标记为“仅供内部使用”,并且不再在内部使用。 - 添加
entrypoint_no_alloc!,这是一个性能更高的程序入口点,可以避免分配,从而为每个唯一账户节省 20-30 个 CU cargo-build-sbf:workspace 或 package-level Cargo.toml 可以指定tools-version,以便在构建链上程序时覆盖默认的平台工具版本。 例如:
- 删除了
- SDK:
[package.metadata.solana]
tools-version = "1.43"
或者
[workspace.metadata.solana]
tools-version = "1.43"
所选工具版本的优先级顺序为:--tools-version 参数、package 版本、workspace 版本,最后是默认版本。
package-metadata:在 Cargo.toml 中指定程序的 ID,以便下游用户和工具使用solana-package-metadata轻松使用 (#1806)。 例如:
[package.metadata.solana]
program-id = "MyProgram1111111111111111111111111111111111"
可以在程序 crate 中使用:
solana_package_metadata::declare_id_with_package_metadata!("solana.program-id");
这等效于编写:
solana_pubkey::declare_id!("MyProgram1111111111111111111111111111111111");
agave-validator:更新 PoH 速度检查以与 Bank 的当前哈希率进行比较 (#2447)solana-test-validator:添加--clone-feature-set标志以模仿目标集群的特性 (#2480)solana-genesis:--cluster-type参数现在克隆目标集群的特性集 (#2587)unified-scheduler作为--block-verification-method的默认选项 (#2653)- 警告:
thread-local-multi-iterator选项--block-production-method已弃用 (#3113)
2.0.0
- 破坏性更改
- SDK:
- 删除了对 Borsh v0.9 的支持,请使用 v1 或 v0.10 (#1440)
Copy不再在Rent和EpochSchedule上派生,请切换到使用clone()(solana-labs#32767)solana-sdk:已删除已弃用的符号solana-program:已删除已弃用的符号
- RPC:已删除过时和已弃用的 v1 终结点。 这些终结点是: confirmTransaction, getSignatureStatus, getSignatureConfirmation, getTotalSupply, getConfirmedSignaturesForAddress, getConfirmedBlock, getConfirmedBlocks, getConfirmedBlocksWithLimit, getConfirmedTransaction, getConfirmedSignaturesForAddress2, getRecentBlockhash, getFees, getFeeCalculatorForBlockhash, getFeeRateGovernor, getSnapshotSlot getStakeActivation
- 从
RpcClient和RpcClient::nonblocking中删除已弃用的方法 solana-client:已删除已弃用的重新导出; 请直接导入solana-connection-cache、solana-quic-client或solana-udp-client- 从
agave-validator中删除已弃用的参数:--enable-rpc-obsolete_v1_7(#1886)--accounts-db-caching-enabled(#2063)--accounts-db-index-hashing(#2063)--no-accounts-db-index-hashing(#2063)--incremental-snapshots(#2148)--halt-on-known-validators-accounts-hash-mismatch(#2157)
- SDK:
- 更改
central-scheduler作为--block-production-method的默认选项 (#34891)solana-rpc-client-api:RpcFilterError依赖于base64版本 0.22,因此用户可能需要升级到base64版本 0.22- 将
--health-check-slot-distance的默认值从 150 更改为 128 - CLI:可以在程序部署期间指定
--with-compute-unit-price、--max-sign-attempts和--use-rpc - 当
replaceRecentBlockhash配置参数为true时,RPC 的simulateTransaction现在会在响应中返回一个额外的replacementBlockhash字段 (#380) - SDK:
cargo test-sbf接受--tools-version,就像build-sbf一样 (#1359) - CLI:可以指定
--full-snapshot-archive-path(#1631) - transaction-status:SPL Token
amountToUiAmount指令将金额解析为字符串而不是数字 (#1737) - 按照 SIMD-0118 实现了分区 epoch 奖励。 特性门控:#426。 具体更改包括:
- EpochRewards 系统变量已扩展并使其持久化 (#428, #572)
- 现在允许在分配期间获得 Stake Program 积分 (#631)
- 更新了 Bank::epoch_rewards_status 中的类型 (#1277)
- 分区在从快照启动时重新计算 (#1159)
- 从快照中删除了
epoch_rewards_status(#1274)
- 为
--block-verification-method添加了unified-scheduler选项 (#1668) - 弃用
--rocksdb-shred-compaction的fifo选项 (#1882)fifo将在 v2.0 中保持支持,并计划在 v2.1 中完全删除
1.18.0
- 更改
- 添加了一个 github 检查来支持
changelog标签 --use-snapshot-archives-at-startup的默认值现在是when-newest(#33883)- 但是,
solana-ledger-tool的默认值仍然是always(#34228)
- 但是,
- 为
--block-production-method添加了central-scheduler选项 (#33890) - 更新到 Borsh v1
- 添加了 allow_commission_decrease_at_any_time 特性,该特性允许在 epoch 的后半段减少投票账户的佣金,即使在 commission_updates_only_allowed_in_first_half_of_epoch 特性本可以阻止它的情况下也是如此
- 更新了本地账本存储,以便 RPC 终结点
getSignaturesForAddress始终按区块包含顺序返回签名 - RPC 的
simulateTransaction现在将innerInstructions作为json/jsonParsed返回 (#34313)。 - Bigtable 上传现在包括每个插槽的条目摘要数据,存储在新的
entries表中 - 禁止为
--signerCLI 标志指定多个值,强制用户指定多个--signer出现,每个签名一个 - 新的程序部署默认为程序的精确大小,而不是两倍大小。 程序账户必须在使用
solana program extend扩展后才能升级,如果它们需要容纳更大的程序。 gossip_service::get_client()的接口已更改。gossip_service::get_multi_client()已被删除。- CLI:可以在程序部署期间指定
--with-compute-unit-price、--max-sign-attempts和--use-rpc
- 添加了一个 github 检查来支持
- 升级说明
solana-program和solana-sdk默认支持 Borsh v1,对 v0.10 和 v0.9 的向后兼容性有限。 请升级到 Borsh v1。- 运行自己的 bigtable 实例的运营商需要在升级其仓库节点之前创建
entries表
1.17.0
- 更改
- 添加了更新日志。
- 添加了
--use-snapshot-archives-at-startup以加快验证器重新启动
- 升级说明
添加至此更新日志
受众
- 此日志中的条目旨在由贡献者、共识验证器运营商、rpc 运营商和 dapp 开发人员轻松理解。
值得注意
- 如果更改满足以下条件,则值得注意:
- 添加特性门控,或者
- 实现 SIMD,或者
- 修改公共 API,或者
- 更改正常的验证器/rpc 运行配置,或者
- 更改命令行参数,或者
- 修复了受到公众关注的错误,或者
- 显着提高了性能,或者
- 由外部贡献者编写。
说明
- 在实现更改的同一拉取请求中更新此日志。 如果更改分布在多个拉取请求中,请在使特性代码完整的拉取请求中更新此日志。
- 将说明添加到合并到的每个分支的 Unreleased 部分。
- 将更改的描述添加到 Changes(更改) 部分。
- 如果更改可能需要以下操作,则添加 Upgrade Notes(升级说明):
- 验证器或 rpc 运营商更新其配置,或者
- dapp 或客户端开发人员进行更改。
- 链接到任何相关的特性门控问题或 SIMD。
- 如果在多个分支上添加条目,请尽可能使用相同的措辞。 这简化了日志版本之间进行差异比较的过程。
维护此更新日志
创建新的发布分支时:
- 提交到 master 更新更新日志:
- 更新 edge、beta 和 stable 链接
- 创建新部分:
vx.y+1.0 - Unreleased - 从 vx.y.0 部分移除
Unreleased注释。
- 创建从该提交开始的 vx.y 分支
- 将该提交标记为 vx.y.0
创建新的补丁发布时:
- 提交到发布分支更新更新日志:
- 从
vx.y.z部分移除Unreleased注释 - 在顶部为
vx.y.z+1 - Unreleased添加一个新部分
- 从
- 将该新提交标记为新的发布版本
- 原文链接: github.com/anza-xyz/agav...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~