本文档是 Solana 项目的变更日志,记录了从 2.3.0 版本(Unreleased)到 1.17.0 版本的显著变化,包括验证器、平台工具SDK、CLI的更新、废弃功能以及SDK的Breaking changes等。详细说明了每个版本的新增功能、配置变更和升级注意事项,旨在帮助贡献者、验证器运营者、RPC 运营者和 DApp 开发者了解 Solana 的演进。
此项目所有值得注意的更改都将记录在此文件中。
进行更改时,请遵循本文档底部的指南 格式基于 Keep a Changelog。 此项目遵循 语义化版本 并遵循 向后兼容性策略
发布渠道有各自的更新日志副本:
<a name="edge-channel"></a>
--no-snapshots
以禁用生成快照。--block-production-method central-scheduler-greedy
现在是默认值。--snapshot-interval-slots 0
禁用生成快照现在已被弃用。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
的 triple 将为 sbpfv1-solana-solana
,版本 v2
的 triple 将为 sbpfv2-solana-solana
,版本 v3
的 triple 将为 sbpfv3-solana-solana
。生成的程序在 target/deploy
文件夹和 target/<triple>/release
文件夹上都可用。target/deploy
中的二进制文件大小更小,因为我们从 target/<triple>/release
中提供的二进制文件中剥离了不必要的部分。cargo-build-sbf
不再自动为 solana-sdk
依赖项启用 program
功能。此功能允许 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
以绑定到所有接口以恢复之前的默认行为。--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
,并将默认值更改为 file
banking-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 crate 时出现中断,因此请务必全部使用一个或另一个。请仅使用与 v2.1 兼容的 crate。redelegate
指令处理器和 CLI 命令 (#2213)&self
而不是 &mut self
(#2591)agave-validator
:--rocksdb-shred-compaction
的已弃用值 fifo
(#3451)respan
宏。这被标记为“仅供内部使用”,并且不再在内部使用。entrypoint_no_alloc!
,这是一个性能更高的程序入口点,可以避免分配,从而为每个唯一帐户节省 20-30 个 CUcargo-build-sbf
:工作区或包级别的 Cargo.toml 可以指定 tools-version
,以便在构建链上程序时覆盖默认平台工具版本。例如:
[package.metadata.solana]
tools-version = "1.43"
或
[workspace.metadata.solana]
tools-version = "1.43"
所选工具版本的优先级顺序为:--tools-version
参数、包版本、工作区版本,最后是默认版本。
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)--block-production-method
的 thread-local-multi-iterator
选项已弃用 (#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-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)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-rpc
simulateTransaction
现在在响应中返回一个额外的 replacementBlockhash
字段
当 replaceRecentBlockhash
配置参数为 true
时 (#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-rpc
solana-program
和 solana-sdk
默认支持 Borsh v1,并支持
有限的 v0.10 和 v0.9 向后兼容性。请升级到 Borsh v1。entries
表--use-snapshot-archives-at-startup
以加快验证器重新启动vx.y+1.0 - Unreleased
Unreleased
注释。vx.y.z
部分中删除 Unreleased
注释vx.y.z+1 - Unreleased
- 原文链接: github.com/anza-xyz/agav...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!