本文档详细记录了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。 本项目遵循 语义化版本控制 并遵循 向后兼容性策略
TimedTracedEvent 的 ABI 发生了变化,因为 PacketBatch 变成了一个枚举,它携带不同的数据包批处理类型。 (#5646)--no-snapshots 以禁用生成快照。--block-production-method central-scheduler-greedy 现在是默认设置。agave-validtor exit)。 有关从本地状态启动的更多信息,请参阅 --use-snapshot-archives-at-startup 的帮助。--snapshot-interval-slots 0 禁用生成快照现已弃用。blockstore-processor 作为 --block-verification-method 现已弃用。cargo-build-sbf 和 cargo-test-sbf 现在接受 --arch 参数的 v0、v1、v2 和 v3。 这些参数指定要构建的 SBPF 版本。cargo-build-sbf 现在支持 --optimize-size 参数,该参数可以减小程序大小,从而可能以增加 CU 使用量为代价。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。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-sdk v1.3 及更早版本的程序。withdraw-stake 现在接受金额的 AVAILABLE 关键字,允许提取未质押的 lamports (#4483)solana-test-validator 现在默认绑定到 localhost (127.0.0.1),而不是所有接口,以提高安全性。 提供 --bind-address 0.0.0.0 以绑定到所有接口以恢复以前的默认行为。simulateTransaction 现在在其结果中包含 loadedAccountsDataSize。 loadedAccountsDataSize 是模拟交易中所有账户加载的总字节数。--skip-preflight 选项,用于跳过通过 RPC 发送的所有交易的预检检查。 此标志以及 --use-rpc 可以提高使用公共 RPC 节点部署程序的成功率。solana feature revoke 用于吊销挂起的特性激活。 激活特性后,可以使用 solana feature revoke <feature-keypair> <cluster> 来取消分配并将账户重新分配给系统程序,从而撤消该操作。 这只能在特性生效之前完成。--block-production-method 添加 central-scheduler-greedy 的新变体。 这是一个简化的调度程序,比更严格的 central-scheduler 变体具有更好的性能。--accounts-db-access-storages-method 用于 agave-validator 和 agave-ledger-tool 并将默认值更改为 filebanking-trace 目录。 如果未清除,则不会中断,但该文件将是新/旧格式的混合。 (#4043)--snapshot-zstd-compression-level 以设置使用 zstd 存档快照时的压缩级别。--tower-storage 和所有 --etcd-* 参数cargo-build-sbf: 添加 --skip-tools-install 标志以避免下载平台工具,以及 --no-rustup-override 标志以在调用 cargo 时不使用 rustup。 这对于像 Nix 这样的不可变环境很有用。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。redelegate 指令处理器和 CLI 命令 (#2213)&self 而不是 &mut self (#2591)agave-validator:--rocksdb-shred-compaction 的已弃用值 fifo (#3451)respan 宏。 这被标记为“仅供内部使用”,并且不再在内部使用。entrypoint_no_alloc!,这是一个性能更高的程序入口点,可以避免分配,从而为每个唯一账户节省 20-30 个 CUcargo-build-sbf:workspace 或 package-level Cargo.toml 可以指定 tools-version,以便在构建链上程序时覆盖默认的平台工具版本。 例如:
[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)Copy 不再在 Rent 和 EpochSchedule 上派生,请切换到使用 clone() (solana-labs#32767)solana-sdk:已删除已弃用的符号solana-program:已删除已弃用的符号RpcClient 和 RpcClient::nonblocking 中删除已弃用的方法solana-client:已删除已弃用的重新导出; 请直接导入 solana-connection-cache、solana-quic-client 或 solana-udp-clientagave-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)central-scheduler 作为 --block-production-method 的默认选项 (#34891)solana-rpc-client-api:RpcFilterError 依赖于 base64 版本 0.22,因此用户可能需要升级到 base64 版本 0.22--health-check-slot-distance 的默认值从 150 更改为 128--with-compute-unit-price、--max-sign-attempts 和 --use-rpcreplaceRecentBlockhash 配置参数为 true 时,RPC 的 simulateTransaction 现在会在响应中返回一个额外的 replacementBlockhash 字段 (#380)cargo test-sbf 接受 --tools-version,就像 build-sbf 一样 (#1359)--full-snapshot-archive-path (#1631)amountToUiAmount 指令将金额解析为字符串而不是数字 (#1737)epoch_rewards_status (#1274)--block-verification-method 添加了 unified-scheduler 选项 (#1668)--rocksdb-shred-compaction 的 fifo 选项 (#1882)fifo 将在 v2.0 中保持支持,并计划在 v2.1 中完全删除changelog 标签--use-snapshot-archives-at-startup 的默认值现在是 when-newest (#33883)solana-ledger-tool 的默认值仍然是 always (#34228)--block-production-method 添加了 central-scheduler 选项 (#33890)getSignaturesForAddress 始终按区块包含顺序返回签名simulateTransaction 现在将 innerInstructions 作为 json/jsonParsed 返回 (#34313)。entries 表中--signer CLI 标志指定多个值,强制用户指定多个 --signer 出现,每个签名一个solana program extend 扩展后才能升级,如果它们需要容纳更大的程序。gossip_service::get_client() 的接口已更改。 gossip_service::get_multi_client() 已被删除。--with-compute-unit-price、--max-sign-attempts 和 --use-rpcsolana-program 和 solana-sdk 默认支持 Borsh v1,对 v0.10 和 v0.9 的向后兼容性有限。 请升级到 Borsh v1。entries 表--use-snapshot-archives-at-startup 以加快验证器重新启动vx.y+1.0 - UnreleasedUnreleased 注释。vx.y.z 部分移除 Unreleased 注释vx.y.z+1 - Unreleased 添加一个新部分
- 原文链接: github.com/anza-xyz/agav...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!