Anchor 历史更新日志 - 了解 Anchor 框架的演变和升级过程
本文档记录了 Anchor 项目的所有显著更改,从最早版本到最新版本,详细列出了每个版本的新增功能、修复的错误以及重大更改,方便开发者了解 Anchor 框架的演变和升级过程。
更新日志
此项目的所有重要更改都将记录在此文件中。
格式基于 Keep a Changelog, 并且此项目遵循 Semantic Versioning。
注意: 语义化版本 0 的处理方式与 1 及以上版本不同。 次版本将在出现重大更改时递增,补丁版本将在新增功能时递增。
[Unreleased]
功能
- ts: 使
Provider在账户解析器中需要 publicKey 而不是 wallet (#3613)
修复
- cli, docker: 将
backpackapp/buildDocker 镜像替换为solanafoundation/anchor(#3619).
破坏性更改
[0.31.0] - 2025-03-08
功能
- client: 使
solana_account_decoder依赖在 anchor client 中公开 (#3455). - ts: 向
Provider.sendAndConfirm添加可选的options.blockhash(#3070). - ts: 向
Program.addEventListener添加可选的commitment参数 (#3052). - cli, idl: 在构建程序或 IDL 时,将
cargo参数传递给 IDL 生成 (#3059). - cli: 添加对
idl-build功能不正确用法的检查 (#3061). - lang: 从
prelude导出Discriminatortrait (#3075). - lang: 添加
Account实用工具类型,用于从字节获取账户 (#3091). - client: 添加在使用 anchor_client 时传入 mock rpc client 的选项 (#3053).
- lang: 动态获取 discriminator 长度 (#3101).
- lang: 在
declare_program!中添加非 8 字节 discriminator 支持 (#3103). - client: 使
ThreadSafeSignertrait 公开 (#3107). - lang: 更新
dispatch函数以支持动态 discriminators (#3104). - lang: 移除
try_entry函数中的 fallback 函数快捷方式 (#3109). - ts: 动态获取 discriminator 长度 (#3120).
- client: 支持非 8 字节 discriminators (#3125).
- spl: 添加
withdraw_withheld_tokens_from_accounts指令 (#3128). - ts: 向
Provider接口添加可选的wallet属性 (#3130). - cli: 如果缺少
anchor-spl/idl-build,则发出警告 (#3133). - client: 为
mock功能添加internal_rpc方法 (#3135). - lang: 添加
#[instruction]属性 proc-macro 以覆盖默认的指令 discriminators (#3137). - lang: 使用关联的 discriminator 常量,而不是在
#[account]中硬编码 (#3144). - lang: 向
#[account]属性添加discriminator参数 (#3149). - lang: 向
#[event]属性添加discriminator参数 (#3152). - idl: 检查不明确的 discriminators (#3157).
- idl: 禁止所有零账户 discriminators (#3159).
- cli: 支持非 8 字节 discriminators (#3165).
- idl: 禁止空 discriminators (#3166).
- cli: 向
test命令添加--no-idl选项 (#3175). - spl: 添加
burn_checked、mint_to_checked和approve_checked指令 (#3186). - cli: 当
solana_version>= 1.18.19时,迁移到agave-install(#3185). - idl: 添加
IdlBuilder(#3188). - cli: 使
clean命令也删除.anchor目录 (#3192). - lang: 弃用
#[interface]属性 (#3195). - ts: 在解析错误消息中包含未解析的账户 (#3207).
- lang: 添加
LazyAccount(#3194). - avm: 询问是否安装使用
use命令未安装的版本 (#3230). - cli: 如果 manifest 具有
solana-program依赖项,则发出警告 (#3250). - cli: 通过 clap_complete crate 添加 completions 命令以生成 shell completions (#3251).
- cli: 始终转换 IDL (#3265).
- cli: 检查使用
idl build命令时是否存在idl-build功能 (#3273). - cli: 使用
idl build命令时,如果只有一个程序,则构建 IDL (#3275). - cli: 为
idl build命令添加短别名 (#3283). - cli: 向
idl convert命令添加--program-id选项 (#3309). - lang: 生成
declare_program!中常量的文档 (#3311). - cli: 添加对获取 legacy IDL 的支持 (#3324).
- avm: 为
install和list命令添加短别名 (#3326). - avm: 添加 Windows 支持以重命名 anchor 二进制文件 (#3325).
- cli: 在
init命令中添加可选的package-manager标志,以在 Anchor.toml 中设置包管理器字段 (#3328). - cli: 为 Mollusk 添加测试模板 (#3352).
- idl: 禁止可能与
zero约束冲突的账户 discriminators (#3365). - cli: 默认包含推荐的 solana 参数,并向
deploy命令添加新的--max-retries选项 (#3354). - avm: 使安装默认下载二进制文件 (#3445).
- idl: 支持对没有任何参数的调用表达式进行 PDA 解析 (#3485).
- spl: 添加
anchor-debug功能 (#3511).
修复
- idl: 使安全注释检查在未设置程序路径 env 时静默失败 (#3045).
- idl: 避免在 IDL 生成期间来自 rust 测试的干扰 (#3058).
- lang: 修复
declare-program!中的alignrepr 支持 (#3056). - lang: 使堆栈帧在 ATA 创建时更细 (#3065).
- lang: 移除
getrandom依赖 (#3072). - lang: 使
InitSpace支持未命名和单元结构体 (#3084). - lang: 修复将
owner约束与Boxed 账户一起使用的问题 (#3087). - lang: 为未实现的 token 扩展添加健全性检查 (#3090).
- cli: 如果传递了
--no-idl选项,则跳过 IDL 检查 (#3093). - lang: 移除账户退出例程中不必要的 clone (#3139).
- cli: 修复由于
timecrate 问题,使用 Rust v1.80 的--locked参数进行安装的问题 (#3143). - lang: 修复由于未使用的已弃用程序 id 宏而导致的编译警告 (#3170).
- ts: 移除
crypto-hash依赖 (#3171). - ts: 改进不支持的
view方法的错误消息 (#3177). - idl: 修复测试中的 panic (#3197).
- lang: 移除
arrayref依赖 (#3201). - cli: 修复模板代码不应转义的问题 (#3210).
- idl: 修复将
address约束与非常量表达式一起使用的问题 (#3216). - idl: 修复将完整路径类型与
Program一起使用的问题 (#3228). - lang: 对
init约束使用闭包,以减少try_accounts的堆栈使用量 (#2939). - lang: 允许指令上方的
cfg属性 (#2339). - idl: 在失败时使用
ANCHOR_LOG记录输出,并改进构建错误消息 (#3284). - lang: 修复使用
declare_program!时的常量字节声明 (#3287). - lang: 修复将非指令组合账户与
declare_program!一起使用的问题 (#3290). - idl: 修复具有元组参数的指令未产生错误的问题 (#3294).
- ts: 更新
engines.node到>= 17(#3301). - cli: 使用 OS 不相关的路径 (#3307).
- avm: 安装低于 v0.31 的版本时,使用
rustc 1.79.0(#3315). - cli: 修复优先级费用计算导致 localnet 上的 panic 的问题 (#3318).
- cli: 修复由于过时的程序初始化而导致
shell命令失败的问题 (#3351). - idl: 修复在模块路径转换期间从文档注释中检测到误报的问题 (#3359).
- cli: 移除将 rent sysvar 账户传递给 IDL 指令的操作 (#3372).
- lang: 修复
cpi功能指令未考虑 discriminator 覆盖的问题 (#3376). - idl: 在构建期间忽略编译器警告 (#3396).
- cli: 避免在
verify期间进行额外的 IDL 生成 (#3398). - lang: 要求
zero账户是唯一的 (#3409). - lang: 针对
init账户删除重复的zero账户 (#3422). - cli: 修复自定义
provider.cluster的问题 (#3428). - cli: 忽略非 semver solana/agave 版本以避免 panic (#3432).
- ts: 修复使用
workspace加载名称中带有数字的程序的问题 (#3450). - lang: 移除在
declare_program!中获取 IDL 时可能发生的 panic (#3458). - cli: 修复更改用户提供的 lib 名称的问题 (#3467).
- idl: 修复缺失的
program::seed解析 (#3474). - lang: 修复在
declare_program!中向类型别名定义添加derive和repr的问题 (#3504). - idl: 修复将常量标识符用作泛型参数的问题 (#3522).
- client: 移除
std::process::exit的用法 (#3544). - idl: 修复将
Pubkey常量与seeds::program一起使用的问题 (#3559). - lang: 修复在使用
declare_program!时,没有账户的指令导致编译错误的问题 (#3567). - idl: 修复将账户或参数值用于
seeds::program的问题 (#3570). - lang: 修复在
declare_program!中使用data作为指令参数名称的问题 (#3574). - cli: 在
anchor.workspace模板中使用 camelCase 作为程序名称 (#3581).
破坏性更改
- syn: 移除
hash功能中的bpf目标支持 (#3078). - client: 使用
async功能向RequestBuilder添加tokio支持 (#3057). - lang: 移除
EventDatatrait (#3083). - client: 移除
async_rpc方法 (#3053). - lang: 使 discriminator 类型为 unsized (#3098).
- lang: 在使用
zero约束时,需要Discriminatortrait 实现 (#3118). - ts: 移除
DISCRIMINATOR_SIZE常量 (#3120). - lang:
#[account]属性参数不再将标识符解析为命名空间 (#3140). - spl: 将元数据接口指令字段从
token_program_id重命名为program_id(#3076). - lang, ts: 从 discriminator 错误消息中移除“8 字节”要求 (#3161).
- lang: 从
Discriminatortrait 中移除discriminator方法 (#3163). - docker: 将
node升级到 20.16.0 LTS (#3179). - ts: 将
Program构造函数的idl参数类型更改为any(#3181). - lang, spl: 移除
borsh 0.9支持 (#3199). - ts: 将
typescript升级到5.5.4并移除SimulateResponse的泛型参数 (#3221). - ts: 移除
StateCoder(#3224). - cli: 接受
warp_slot的整数 (#3235). - lang: 移除
EventIndex(#3244). - spl: 移除
dex功能 (#3257). - client, lang, spl: 将 Solana 升级到 v2,并将 SPL 升级到最新版本 (#3219).
- cli: 在 Docker 可验证构建中从 anza.xyz 域安装 Solana (#3271).
- spl: 将 SPL 依赖项升级到最新版本 (#3346).
- cli: 将模板的
typescript版本升级到 v5 (#3480). - ts: 移除
snake-case依赖 (#3507).
[0.30.1] - 2024-06-20
功能
- idl: 允许使用
RUSTUP_TOOLCHAIN环境变量覆盖 idl 构建工具链 (#2941). - avm: 支持使用
AVM_HOME环境变量自定义安装位置 (#2917). - avm: optimize
avm list当达到 GitHub API 速率限制时 (#2962) - idl, ts: 为关联 token 账户添加账户解析 (#2927).
- cli: 向
init命令添加--no-install选项 (#2945). - lang: 为
Error实现TryFromIntError以便能够传播整数转换错误 (#2950). - idl: 添加转换 legacy IDL 的能力 (#2986).
- ts: 将 Anchor 错误代码提取到它们自己的包中 (#2983).
- cli: 向
upgrade命令添加额外的 solana 参数 (#2998). - spl: 导出
spl-associated-token-accountcrate (#2999). - lang: 支持带有
declare_program!的 legacy IDL (#2997). - cli: 添加
idl convert命令 (#3009). - cli: 添加
idl type命令 (#3017). - lang: 添加
anchor_lang::pubkey宏,用于声明Pubkeyconst 值 (#3021). - cli: 在初始构建时同步程序 id (#3023).
- idl: 移除
anchor-syn依赖 (#3030). - lang: 向
declare_id!和declare_program!添加程序 ID 的const(#3019). - idl: 添加单独的 spec crate (#3036).
修复
- lang: 消除为 token 扩展代码生成构建堆栈空间的变量分配 (#2913).
- ts: 修复
AnchorProvider.send*()方法中不正确的maxSupportedTransactionVersion(#2922). - cli: 对使用
anchor init创建的新项目使用 npm 配置的默认许可证 (#2929). - cli: 向“无法读取密钥对文件”错误添加文件名 (#2932).
- idl: 修复为外部类型生成 idl 时项目
Cargo.lock的路径解析 (#2946). - idl: 修复外部类型解析上潜在的 panic (#2954).
- lang: 修复在带有
declare_program!的指令参数中使用定义的类型 (#2959). - lang: 修复将 const 泛型与
declare_program!一起使用的问题 (#2965). - lang: 修复将
Vec<u8>类型与declare_program!一起使用的问题 (#2966). - lang: 修复未找到
ProgramError::ArithmeticOverflow错误 (#2975). - lang: 修复将可选账户与
declare_program!一起使用的问题 (#2967). - lang: 修复使用
declare_program!的指令返回类型生成 (#2977). - cli: 修复 IDL 写入从重试中损坏的问题 (#2964).
- idl: 修复
unexpected_cfgs构建警告 (#2992). - lang: 使元组结构体字段在
declare_program!中公开 (#2994). - 从 crate manifest 中移除
rust-version(#3000). - cli: 修复可升级程序克隆 (#3010).
- ts: 修复使用将定义的类型作为泛型参数的 IDL 的问题 (#3016).
- idl: 修复生成带有不支持的表达式的问题 (#3033).
- idl: 修复将
address约束与字段表达式一起使用的问题 (#3034). - lang: 修复将
bytemuckunsafe账户序列化与declare_program!一起使用的问题 (#3037).
破坏性更改
[0.30.0] - 2024-04-15
有关如何更新的高级概述,请参阅 Anchor 0.30 发行说明。
功能
- cli: 允许强制
init和new(#2698). - cli: 在
deploy时添加可验证选项 (#2705). - cli: 添加对使用
anchor deploy将参数传递给底层solana program deploy命令的支持 (#2709). - lang: 添加
InstructionData::write_to实现 (#2733). - lang: 为指令鉴别器覆盖添加
#[interface(..)]属性 (#2728). - ts: 为指令鉴别器覆盖添加
.interface(..)方法 (#2728). - cli: 检查
anchor-lang和 CLI 版本的兼容性 (#2753). - ts: 添加缺失的 IDL PDA 种子类型 (#2752).
- cli:
idl close接受可选的--idl-address参数 (#2760). - cli: 添加对 Anchor.toml 的
workspace.members和workspace.exclude中简单通配符模式的支持。(#2785). - cli: 为
init命令添加--test-template选项 (#2805). - cli:
anchor test能够运行多个命令 (#2799). - cli: 检查
@coral-xyz/anchor包和 CLI 版本的兼容性 (#2813). - cli: 接受包名作为程序名 (#2816).
- cli: 添加仅构建和测试指定程序的功能 (#2823).
- idl: 添加新的 IDL 规范 (#2824).
- idl: 添加对
repr的支持 (#2824). - idl: 添加对表达式求值的支持 (#2824).
- idl: 添加对在生成 IDL 时使用外部类型的支持 (#2824).
- idl, ts: 添加单元和元组结构体支持 (#2824).
- idl, ts: 添加泛型支持 (#2824).
- ts: 添加
accountsPartial方法以保持旧的accounts方法行为 (#2824). - ts: 使
AnchorProvider构造函数的opts参数变为可选 (#2843). - cli: 向
build命令添加--no-idl标志 (#2847). - cli: 向 idl 命令添加优先级费用 (#2845).
- ts: 向 MethodBuilder
preInstructions方法添加prepend选项 (#2863). - lang: 添加
declare_program!宏 (#2857). - cli: 向 Anchor.toml 中的
solana-test-validator配置添加deactivate_feature标志 (#2872). - idl: 为常量添加
docs字段 (#2887). - idl: 存储其他集群的部署地址 (#2892).
- lang: 添加
Event实用程序类型以从字节获取事件 (#2897). - lang, spl: 添加对 token extensions 的支持 (#2789).
- lang: 从
Lamports特征操作返回溢出错误 (#2907).
修复
- syn: 向
Hash添加缺失的new_from_array方法 (#2682). - cli: 切换到 Cargo 特性解析器 (
resolver = "2") (#2676). - cli: 修复在
Anchor.toml中使用用户特定路径作为provider.wallet的问题 (#2696). - syn: 修复 IDL 常量种子解析 (#2699).
- cli: 如果工具链覆盖恢复失败,则显示错误 (#2700).
- cli: 修复基于提交的
anchor_version覆盖 (#2704). - spl: 修复启用
shmem特性时的编译问题 (#2722). - cli: Localhost 默认测试验证器地址从
localhost更改为127.0.0.1,NodeJS 17 IP 解析更改为 IPv6 (#2725). - lang: 在序列化带有判别式的数据时消除临时的 Vec 分配,并将默认容量设置为 256 字节 (#2691).
- lang: 允许 Accounts 结构中的自定义生命周期 (#2741).
- lang: 删除在设置返回数据时使用
try_to_vec的情况,以减少堆内存的使用 (#2744) - cli: 如果在使用工具链覆盖时未安装 Solana 工具,则显示安装进度 (#2757).
- ts: 修复格式化枚举 (#2763).
- cli: 修复在没有全局
ts-node安装的情况下migrate命令无法工作的问题 (#2767). - client, lang, spl, syn: 为 docs.rs 构建启用所有特性 (#2774).
- ts: 修复类型别名指令参数的字段布局构造 (#2821)
- idl: 修复 IDL (#2824).
- idl, ts: 使大小写保持一致 (#2824).
- ts: 修复由于大小写转换而导致在某些情况下无法在指令、帐户或事件名称中使用数字的问题 (#2824).
- cli: 修复过多的测试验证器请求 (#2828).
- client: 修复
parse_logs_response以防止在日志中存在超过 1 个外部指令时发生 panic (#2856). - avm, cli: 修复使用较新 Rust 版本安装 CLI 时
ahash导致的stdsimd特性编译错误 (#2867). - spl: 修复无法反序列化较新的 token 2022 扩展的问题 (#2876).
- spl: 删除
solana-program依赖项 (#2900). - spl: 使
TokenAccount和MintCopy(#2904). - ts: 添加缺少的错误 (#2906).
破坏性更改
- cli: 使
cargo build-sbf成为默认的构建命令 (#2694). - cli: 需要显式的
overflow-checks标志 (#2716). - ts: 删除
anchor-deprecated-state特性 (#2717). - lang: 删除
CLOSED_ACCOUNT_DISCRIMINATOR(#2726). - lang: 使可选帐户的 bumps 成为
Option<u8>而不是u8(#2730). - spl: 删除
shared-memory程序 (#2747). - ts: 删除
associated、account.associated和account.associatedAddress方法 (#2749). - cli:
idl upgrade命令关闭 IDL 缓冲区帐户 (#2760). - cli: 从
init命令中删除--jest选项 (#2805). - cli: 在程序
Cargo.toml中需要idl-build特性 (#2824). - cli: 将
seeds特性重命名为resolution并使其默认启用 (#2824). - cli: 删除
idl parse命令 (#2824). - idl: 更改 IDL 规范 (#2824).
- syn: 删除
idl-parse和seeds特性 (#2824). - ts: 更改
accounts方法以不再接受可解析的帐户 (#2824). - ts:
Program实例对所有内容使用 camelCase (#2824). - ts: 删除鉴别器函数 (#2824).
- ts: 删除
Program构造函数的programId参数 (#2864). - idl, syn: 将 IDL 类型从
anchor-syncrate 移动到新的 IDL crate (#2882). - idl: 向 IDL 枚举添加
#[non_exhaustive](#2890).
[0.29.0] - 2023-10-16
有关如何更新的高级概述,请参阅 Anchor 0.29 发布说明。
功能
- lang: 将所有帐户更改为引用
AccountInfo(#2656). - lang: 为所有帐户类型添加
get_lamports、add_lamports和sub_lamports方法 (#2552). - client: 添加一个辅助结构体
DynSigner,以简化Client<C> where <C: Clone + Deref<Target = impl Signer>>与 Solana clap CLI 工具的使用,该工具将Signer加载为Box<dyn Signer>(#2550). - lang: 允许 CPI 调用匹配一个接口,而无需固定程序 ID (#2559).
- cli, lang: 通过编译添加 IDL 生成。
anchor build仍然使用解析方法来生成 IDL,使用anchor idl build通过构建方法生成 IDL (#2011). - avm: 添加对
.anchorversion文件的支持,以方便在不同版本的anchor-cli之间切换 (#2553). - ts: 添加访问工作区程序的能力,而与使用的大小写无关,例如
anchor.workspace.myProgram、anchor.workspace.MyProgram... (#2579). - bench: 添加程序二进制大小的基准测试 (#2591).
- spl: 导出
mpl-token-metadatacrate (#2583). - spl: 为 pNFT 添加
TokenRecordAccount(#2597). - ts: 在帐户中添加对未命名(元组)枚举的支持 (#2601).
- cli: 添加具有多个文件的程序模板,用于指令、状态... (#2602).
- bench: 添加堆栈内存使用情况的基准测试 (#2617).
- lang:
Boxanchor_lang::error::Error的内部枚举以优化anchor_lang::Result(#2600). - ts: 为
Program.addEventListener方法添加强类型支持 (#2627). - syn: 添加
IdlBuild特性以实现对自定义类型的 IDL 支持 (#2629). - spl: 添加
idl-build特性。使用anchor-spl时,如果不启用此特性,IDL 构建方法将不起作用 (#2629). - lang: 添加对 IDL 中类型别名的支持 (#2637).
- cli: 在
Anchor.toml添加test.upgradeable、test.genesis.upgradeable设置以支持测试可升级程序 (#2642). - cli, client, lang, spl: 将 Solana 工具链和依赖项更新到
1.17.0,1.16仍然受支持 (#2645). - spl: 添加对备忘录程序的支持 (#2661).
- avm: 从提交添加
anchor-cli安装 (#2659). - cli: 在
Anchor.toml中添加toolchain属性以覆盖 Anchor 和 Solana 版本 (#2649).
修复
- ts: 包不再依赖
assert(#2535). - lang: 支持
InitSpace宏中的const(#2555). - cli: 支持工作区继承 (#2570).
- client: 使用 Solana
1.14编译 (#2572). - cli: 修复
anchor build --no-docs向 IDL 添加文档的问题 (#2575). - ts: 按需加载工作区程序,而不是一次加载所有程序 (#2579).
- lang: 修复
associated_token::token_program约束 (#2603). - cli: 修复在工作区外部 panic 的
anchor account命令 (#2620). - lang: IDL 命名枚举变体字段现在是 camelCase 而不是 snake_case,与其他 IDL 类型一致 (#2633).
- avm: 删除过多的 panic 并优雅地处理错误 (#2671).
破坏性更改
- lang: 切换到上下文中类型安全的 bumps (#2542).
- syn:
idl特性已替换为idl-build、idl-parse和idl-types特性 (#2011). - syn: IDL
parse方法现在返回Result<Idl>而不是Result<Option<Idl>>(#2582). - spl: 更新
mpl-token-metadata依赖项以使用客户端 SDK 而不是程序 crate (#2632). - ts: 删除
base64-js依赖项 (#2635). - syn:
IdlTypeDefinitionTy枚举有一个新的变体Alias(#2637). - cli, client, lang, spl: 不再支持 Solana
1.14,最低要求的 Solana 版本为1.16.0(#2645). - cli: 在可验证构建中使用的
Anchor.toml中的anchor_version和solana_version属性已移至toolchain内部。它们现在用于工作区中的所有命令,而不仅仅是可验证的构建 (#2649).
[0.28.0] - 2023-06-09
功能
- client: 添加
async特性标志以使用异步 anchor-client (#2488). - spl: 添加元数据包装器
approve_collection_authority、bubblegum_set_collection_size、burn_edition_nft、burn_nft、revoke_collection_authority、set_token_standard、utilize、unverify_sized_collection_item、unverify_collection(#2430) - spl: 将
token_program约束添加到Token、Mint和AssociatedToken帐户,以便覆盖所需的token_program字段并在同一指令中使用不同的 token 接口实现 (#2460) - cli: 添加对 Solidity 程序的支持。
anchor init和anchor new接受一个选项--solidity,该选项创建 solidity 代码而不是 rust 代码。anchor build和anchor test相应地工作 (#2421) - bench: 添加计算单元使用情况的基准测试 (#2466)
- cli:
idl set-buffer、idl set-authority和idl close接受一个选项--print-only。它以 base64 Borsh 兼容格式打印交易,但不发送到集群。这在多重签名下管理权限时很有用,例如,用户可以在 SPL Governance 中为“自定义指令”创建提案 (#2486). - lang: 添加
emit_cpi!和#[event_cpi]宏(位于event-cpi特性标志之后) 以将事件日志存储在交易元数据中 (#2438). - cli: 添加
keys sync命令以同步程序 id 声明 (#2505). - cli: 使用正确的程序 id 创建新程序 (#2509).
- cli, client, lang, spl: 将 Solana 工具链和依赖项更新到
1.16.0并指定最大版本<1.17.0(#2512). - cli:
anchor deploy命令的--program-name参数接受程序库名称 (#2519).
修复
- ts: 将
AccountClient类型缩小到其相应的帐户类型 (#2440) - lang: 修复无法在指令参数中使用标识符
program_id、accounts、ix_data、remaining_accounts的问题 (#2464) - cli: 修复使用自定义密钥对部署后 IDL 中不正确的
metadata.address生成 (#2485) - cli: 当付款人没有资金支付交易费用时,IDL 命令不再挂起 (#2492)
- cli: 修复
anchor new不更新Anchor.toml的问题 (#2516). - client, lang, spl: 允许更广泛的依赖项版本,以减少依赖项问题 (#2524).
破坏性更改
- lang: 旨在供内部使用的标识符(
program_id、accounts、ix_data、remaining_accounts)已使用__前缀重命名 (#2464) - spl: 删除已弃用的
metadata::create_metadata_account_v2包装器,因为它已从 token metadata 程序中删除 (#2480)
[0.27.0] - 2023-03-08
功能
- spl: 将
MasterEditionAccount帐户反序列化添加到 spl 元数据 (#2393). - lang: 添加
InitSpace派生宏以自动计算帐户初始化时的空间 (#2346). - cli: 向可验证构建添加
env选项 (#2325). - cli: 添加
idl close命令以关闭程序的 IDL 帐户 (#2329). - cli:
idl init现在支持非常大的 IDL 文件 (#2329). - spl: 添加
transfer_checked函数 (#2353). - spl: 添加
approve_checked函数 (#2401). - cli: 向 verify 命令添加
--skip-build选项 (#2387). - client: 添加对 rust 客户端的多线程支持:使用标志
--multithreaded(#2321). - client: 添加
async_rpc方法,该方法返回一个非阻塞的 solana rpc 客户端 (#2322). - avm, cli: 使用
reqwest的rustls-tls特性,以便用户不需要安装 OpenSSL (#2385). - ts: 添加
VersionedTransaction支持。Provider类和Wallet接口中的方法现在使用参数tx: Transaction | VersionedTransaction(#2427). - cli: 添加
--arch sbf选项以使用cargo build-sbf编译程序 (#2398). - land: 使用
Interface和InterfaceAccount类型支持具有相同接口的多个程序,与 token-2022 相关 (#2386).
修复
- ts: 使
AccountClient.fetchMultiple的返回类型与正在提取的帐户类型匹配 (#2390) - cli: 不要在 read_all_programs() 中重新生成 idl。(#2332).
- ts: 如果不存在
signers,provider.simulate将发送带有sigVerify: false的交易 (#2331). - cli: 失败的命令将返回正确的退出状态。(#2370).
- idl: 更新 IDL 程序以使用非弃用的帐户类型 (#2365).
- ts: 枚举字段未从 snake_case 转换为 camelCase (#2378).
- lang/cli: 更新到 solana-program 版本 1.14.16 和 rust 版本 1.60,似乎仍然与 1.15 CLI 不兼容 (#2420).
破坏性更改
- lang: 删除已弃用的帐户类型:
CpiAccount、Loader和ProgramAccount(#2375). - lang: 删除
state和interface属性 (#2285). - lang: 删除已被
#[account(constraint = {})]替换的已弃用文字约束 (#2379). - lang:
account(zero_copy)和zero_copy属性现在派生bytemuck::Pod和bytemuck::Zeroable特性,而不是使用unsafe impl(#2330). 这对类型施加了有用的限制,例如没有填充字节并且所有字段本身都是Pod。有关详细信息,请参阅 bytemuck::Pod。此更改需要将bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"]}添加到你的cargo.toml。传统应用程序仍然可以将#[account(zero_copy(unsafe))]和#[zero_copy(unsafe)]用于旧的行为。 - ts: 删除
createProgramAddressSync、findProgramAddressSync(现在在@solana/web3.js中可用) 并更新associatedAddress以使其同步 (#2357).
[0.26.0] - 2022-12-15
功能
- cli:为
anchor test添加--run,用于运行测试套件的子集 (#1828)。 - client:向 RequestBuilder 添加
transaction函数 (#1958)。 - spl:添加
create_metadata_accounts_v3和set_collection_size包装器 (#2119)。 - spl:添加
MetadataAccount账户反序列化。(#2014)。 - spl:添加
update_primary_sale_happened_via_token包装器 (#2173)。 - spl:添加
sign_metadata和remove_creator_verification包装器 (#2175)。 - spl:添加
initialize_account3和initialize_mint2(#2265)。 - spl:将
serum-dex更改为openbook-dex(#2308)。 - lang:为 IDL PDA seeds 生成,添加从 impl 代码块解析 consts (#2128)。
- lang:账户关闭重新分配给系统程序并重新分配 (#2169)。
- ts:为 SPL 程序添加编码器 (#2143)。
- ts:添加
has_one关系推断,因此不再需要提供通过 has_one 关系映射的账户 (#2160)。 - ts:添加在设置账户和检索 pubkeys 后设置参数的功能 (#2160)。
- ts:向 builder 模式添加
.prepare()(#2160)。 - spl:添加
freeze_delegated_account和thaw_delegated_account包装器 (#2164)。 - ts:向
AnchorProvider方法添加feePayer检查,以便在未设置 fee payer 时,anchor 将 provider 的钱包写入为 fee payer (#2186)。 - ts:添加嵌套 PDA 推断 (#2194)。
- ts:添加使用自定义解析器解析缺少的账户的功能 (#2194)。
- ts:将 anchor ts 使用的 Solana web3 库更新到 1.64.0 版本 (#2220)。
- lang:更新
AccountsClose,使其可以安全地手动调用 (#2209)。 - lang:更新 repo 版本 1.62 中使用的 rust (#2272)。
- cli:允许自定义集群配置 (#2271)。
- ts:添加可选标志 parseLogs,以便在解码失败时抛出错误 (#2043)。
- cli:添加
test.validator.geyser_plugin_config支持 (#2016)。 - cli:向 cli 添加
account子命令 (#1923) - cli:向 Validator 参数添加
ticks_per_slot选项 (#1875)。
修复
- lang:修复 IDL 中字节字面量的解析 (#2261)。
- lang:修复字节字符串字面量的 IDL
seed生成 (#2125)。 - ts:更新 seeds 推断,以允许 seeds 中存在嵌套的用户定义结构 (#2198)。
- event:修复具有相同名称的多个事件侦听器 (#2165)。
- lang:防止 payer 账户被初始化为程序账户 (#2284)。
- ts:修复空或未定义的钱包抛出错误的重大更改 (#2303)。
- ts:修复
.fetchNullable(),使其对仅持有余额的账户具有鲁棒性 (#2301)。 - lang:仅将公共枚举添加到 IDL (#2309)。
- lang:修复堆密集型错误映射 (#2313)。
重大更改
- ts:SPL 编码器已从主 Anchor 包中删除。(#2155)
- lang:从约束中删除
rent(#2265)。 - spl:从
associated_token::Create中删除rent(#2265)。 - lang:为表示指令的结构添加
Discriminator和Owner特性实现 (#1997)。 - ts:'@coral-xyz/borsh' 包现在是 yarn monorepo 的一部分 (#2290)。borsh 包需要在 anchor 包构建之前构建,但这应该在 packages/anchor 中运行
yarn build时自动发生,请参阅 #2299 和 #2306。 - lang:添加支持使用语法
Optional<Account<'info, T>>可选地传入账户。不应影响现有程序,但可能会对使用 anchor 生成的 IDL 的工具造成重大更改。 #2101。 - ts:从
@project-serum/anchor切换到@coral-xyz/anchor包 #2318。
[0.25.0] - 2022-07-05
功能
- lang:添加
realloc、realloc::payer和realloc::zero作为程序账户的新约束组 (#1986)。 - lang:为
anchor_lang::Error添加PartialEq和Eq(#1544)。 - cli:为
anchor publish添加--skip-build(#1786)。 - cli:为
anchor deploy添加--program-keypair(#1786)。 - cli:向 cli 模板添加编译优化 (#1807)。
- cli:
build现在将文档添加到 idl。可以使用--no-docs关闭此功能 (#1561)。 - cli:分别为
build和test添加b和t别名 (#1823)。 - spl:向
TokenAccount到Mint添加更多派生特性 (#1818)。 - spl:添加
sync_nativetoken 程序 CPI 包装函数 (#1833)。 - cli:允许使用
anchor run将参数传递给底层脚本 (#1914)。 - ts:为系统程序实现编码器 (#1920)。
- ts:添加
program.coder.types用于编码/解码用户定义的类型 (#1931)。 - client:向 RequestBuilder 添加
send_with_spinner_and_config函数 (#1926)。 - ts:使用
NodeWallet.local()时,缺少ANCHOR_WALLET变量的详细错误 (#1958)。 - ts:为 ix 账户输入上的严格类型添加
MethodsBuilder#accountsStrict(#2019)。 - 将 solana 依赖项更新到 1.10.29 (#2027)。
修复
- cli:修复
anchor keys list读取错误路径中的target文件夹 (#2063)。 - cli:将
overflow-checks移动到 workspaceCargo.toml中,使其不会被编译器忽略 (#1806)。 - lang:修复使用
init或zero时,反序列化失败时缺少账户名称信息的问题 (#1800)。 - ts:在 Provider 上公开钱包的 publickey (#1845)。
重大更改
- ts:将
BROWSER环境变量更改为ANCHOR_BROWSER(#1233)。 - ts:将事务签名添加到
EventCallback参数 (#1851)。 - ts:更改
EventParser#parseLogs实现,使其成为生成器而不是回调函数 (#2018)。 - lang:向
Accounts::try_accounts添加一个新的&mut reallocs: BTreeSet<Pubkey>参数 (#1986)。
[0.24.2] - 2022-04-13
修复
- lang:修复
returns在 IDL 中序列化为null而不是undefined的问题 (#1782)。
[0.24.1] - 2022-04-12
修复
- lang:修复如果
Test.toml包含一个尚不存在的相对路径,因为它是通过anchor build创建的,则anchor build失败的问题 (#1772)。 - cli:更新 js/ts 模板以使用新的
AnchorProvider类 (#1770)。
[0.24.0] - 2022-04-12
功能
- lang:添加对具有单独本地验证器的多个测试套件的支持 (#1681)。
- lang:将返回值添加到 CPI 客户端 (#1598)。
- ts:添加 view 函数 (#1695)。
- avm:新的
avm update命令,用于将 Anchor CLI 更新到最新版本 (#1670)。 - cli:更新 js/ts 模板以使用新的
program.methods语法 (#1732)。 - cli:使用
anchor init创建的工作区现在附带prettier格式化程序和包含的脚本 (#1741)。 - ts:向 methods builder 添加
pubkeys函数,以获取所有指令账户地址 (#1733)。 - ts:从
error.ts导出LangErrorCode和LangErrorMessage(#1756)。
修复
- avm:如果计算机中已安装该版本,
avm install将不再下载该版本 (#1670)。 - cli:修复在与
--skip-deploy选项一起使用且没有--skip-local-validator选项但已经有一个正在运行的验证器时,anchor test失败的问题 (#1675)。 - lang:如果在
(Account)Loader的函数中账户长度小于鉴别器,则返回正确的错误而不是 panic (#1678)。 - cli:在 cli 模板中将
@types/bn.js添加到devDependencies(#1712)。 - ts:事件侦听器不再在程序升级或任何其他意外日志上崩溃 (#1757)。
重大更改
- avm:
avm install在安装完成后切换到新安装的版本 (#1670)。 - spl:重新导出
spl_tokencrate (#1665)。 - lang, cli, spl:将 solana 工具链更新到 v1.9.13 (#1653 和 #1751)。
- lang:
Program类型现在仅在需要时反序列化programdata_address(#1723)。 - ts:将
Provider设为接口,并调整其签名并添加AnchorProvider实现类 (#1707)。 - spl:在
token::burn中将“to”更改为“from” (#1080)。
[0.23.0] - 2022-03-20
功能
- cli:添加
anchor clean命令,该命令与cargo clean相同,但保留target/deploy中的 keypair (#1470)。 - cli:运行
anchor init现在为工作区初始化一个新的 git 存储库。可以使用--no-git标志禁用此功能 (#1605)。 - cli:添加对
anchor idl fetch的支持,使其可以在 anchor 工作区外部工作 (#1509)。 - cli:[[test.validator.clone]] 还会克隆由 bpf 可升级加载器拥有的程序的程序数据账户 (#1481)。
- lang:添加新的
AccountSysvarMismatch错误代码和 sysvar 的测试用例 (#1535)。 - lang:将
std::io::Cursor替换为使用 Solana mem 系统调用的自定义Writeimpl (#1589)。 - lang:添加
require_neq、require_keys_neq、require_gt和require_gte比较宏 (#1622)。 - lang:在指令数据中处理大小为 const 的数组 (#1623。
- spl:添加对 revoke 指令的支持 (#1493)。
- ts:将 provider 参数添加到
Spl.token工厂方法 (#1597)。
修复
- ts:修复使用 builder 函数上的
methods命名空间丢失严格类型的问题 (#1539)。 - spl:更新
spl/governance以使用新错误 (#1582)。 - client:修复
Cluster的FromStr实现 (#1362)。 - lang:再次为
Pubkey实现Key,以便associated_token::*约束可以再次使用 pubkey 目标 (#1601)。 - lang:调整错误代码,以便
#[error_code]仅通过导入anchor_lang::error_code即可工作 (#1610)。 - ts:修复
spl-token编码器账户解析 (#1604)。 - cli:修复如果
yarn安装不起作用,则npm install回退 (#1643)。 - lang:修复由于缺少类型注释而导致
owner = <target>无法编译的错误 (#1648)。 - ts:调整
provider.ts中的send和simulate函数,以便它们使用Wallet.signTransaction的返回值 (#1527)。
重大更改
- ts:将
transaction、instruction、simulate和rpc程序命名空间标记为已弃用,改为使用methods(#1539)。 - ts:不再允许在
methods#accounts()中手动设置全局可解析程序公钥。([#1548][https://github.com/coral-xyz/anchor/pull/1548]) - lang/ts:现在使用
sol_log_data系统调用发出事件 (#1608)。 - lang:删除使用
#[derive(Default)]的空间计算 (#1519)。 - lang:添加对记录预期值和实际值以及 pubkey 的支持。添加
require_eq和require_keys_eq宏。将默认错误代码添加到require宏 (#1572)。 - lang:添加
system_programCPI 包装函数。使system_program模块公开,而不是重新导出system_program::System(#1629)。 - cli:如果首先需要安装,
avm use不再提示 [y/n] - 它只是告诉用户avm install(#1565) - ts:添加带有程序堆栈的
AnchorError,以及非AnchorError错误的程序堆栈 (#1640)。对于将skipPreflight设置为true的processedtx,不返回AnchorError(它会回退到ProgramError或原始 solana 库错误)。
[0.22.1] - 2022-02-28
修复
[0.22.0] - 2022-02-20
功能
- lang:添加检查,以确保声明的 id == 程序 id (#1451)。
- ts:添加了浮点类型支持 (#1425)。
- cli:添加
--skip-lint选项以禁用 (#1452) 中引入的检查 linting,用于快速原型设计 (#1482)。
修复
- ts:允许
Option<T>映射类型的可空类型 (#1428)。
重大更改
- lang:强制要求为初始化的账户的 payer 标记为
mut(#1271)。 - lang:所有与错误相关的代码现在都在 error 模块中 (#1426)。
- lang:在使用 AccountInfo 或 UncheckedAccount 类型时需要文档注释 (#1452)。
- lang:添加
error!和err!宏和Result类型 (#1462)。 此更改将破坏大多数程序。请执行以下操作进行升级: **将所有ProgramResult更改为Result<()>**将#[error]更改为#[error_code]**将所有Err(MyError::SomeError.into())更改为Err(error!(MyError::SomeError)),并将所有Err(ProgramError::SomeProgramError)更改为Err(ProgramError::SomeProgramError.into())或Err(Error::from(ProgramError::SomeProgramError).with_source(source!()))以提供错误的文件和行源代码(with_source在使用ProgramError时最有用。error!已经为自定义和 anchor 内部错误添加了源信息)。 **将所有solana_program::program::invoke()更改为solana_program::program::invoke().map_err(Into::into),并将solana_program::program::invoke_signed()更改为solana_program::program::invoke_signed().map_err(Into::into)
[0.21.0] - 2022-02-07
修复
- ts:修复
Wallet/NodeWallet类的根类型声明 (#1363)。 - ts:改进了将 Account 字段映射到 Typescript 的类型映射,并额外支持
Option<T>和Vec<String>类型 (#1393)。
功能
- lang:添加
seeds::program约束,用于指定在派生 PDA 时要使用的 program_id (#1197)。 - lang:
Context现在有一个新的bumps: BTree<String, u8>参数,将账户名称映射到账户上下文“找到”的 bump seed。这允许人们访问 bump seed,而无需从客户端传入或在处理程序中重新计算它们 (#1367)。 - lang, ts:自动推断 PDA 地址 (#1331)。
- ts:当日志 websocket 遇到程序错误时,删除事件解析器中的错误日志记录 (#1313)。
- ts:向程序客户端添加新的
methods命名空间,引入更符合人体工程学的构建器 API (#1324)。 - ts:添加注册表实用程序,用于获取最新的已验证构建 (#1371)。
- cli:通过 [[test.validator.account]] 在 Anchor.toml 中公开 solana-test-validator --account 标志 (#1366)。
- cli:添加 avm,一种用于管理 anchor-cli 版本的工具 (#1385)。
重大更改
- lang:将
init_if_needed放在功能标志后面,以减少错误使用 (#1258)。 - lang:将
loader_account模块重命名为account_loader模块 (#1279) - lang:
Accounts特性的try_accounts方法现在有一个额外的bumps: &mut BTreeMap<String, u8>参数,用于累积 bump seed (#1367)。 - lang:为
init提供bump = <target>目标现在将出错。在init上,仅需要在没有目标的情况下使用bump,并通过ctx.bumps.get("<pda-account-name")在函数处理程序中访问 seed。对于后续的 seed 约束(没有 init),建议将 bump 存储在你的账户上,并将其用作bump = <target>目标,以最大限度地减少使用的计算单元 (#1380)。 - ts:
Coder现在是一个接口,现有的类已重命名为BorshCoder。此更改允许为非 anchor 程序生成 Anchor 客户端 (#1259)。 - cli:Anchor.toml 中的 [[test.clone]] 键已重命名为 [[test.validator.clone]] (#1366)。
[0.20.1] - 2022-01-09
修复
- lang:改进了在使用
init约束时,缺少所需程序时出现的错误消息 (#1257)
功能
- lang:允许零复制账户的 repr 覆盖 (#1273)。
[0.20.0] - 2022-01-06
修复
- lang:
init_if_needed现在在不需要 init 时检查租金豁免 (#1250)。 - lang:在使用
associated_token::authority时添加缺少的 owner 检查 (#1240)。 - ts:为条件
workspace和Wallet导出添加类型声明 (#1137)。 - ts:将承诺消息
recent更改为processed,将max更改为finalized(#1128) - ts:修复
translateAddress,它目前导致浏览器代码失败。现在使用PublicKey构造函数,而不是原型链构造函数名称检查,这在代码缩小/混淆的情况下不起作用 (#1138) - lang:添加缺少的检查,以验证在使用
init_if_needed且不需要 init 时,账户是否为 ATA (#1221)
功能
- lang: 将
programdata_address: Option<Pubkey>字段添加到Program账户。如果账户是由可升级的 bpf loader 所拥有的程序,则会被填充 (#1125) - lang,ts,ci,cli,docs: 将 solana toolchain 更新到 1.8.5 版本 (#1133).
- lang: 用于非 Anchor 程序的账户包装器不再需要实现
serialize函数,因为它现在有一个默认的 impl。类似地,它们不再需要实现try_deserialize,它现在默认委托给try_deserialize_unchecked(#1156)。 - lang: 将
set_inner方法添加到Account<'a, T>以启用轻松更新 (#1177)。 - lang: 处理长度为 const 的数组 (#968)。
- ts: 将可选的 commitment 参数添加到
fetch和fetchMultiple(#1171)。 - lang: 为
Account<'a, T>实现AsRef<T>(#1173) - cli: 添加
anchor expand命令,该命令包装cargo expand(#1160)
破坏性变更
- client: Client::new 和 Client::new_with_options 现在接受
Rc<dyn Signer>而不是Keypair(#975)。 - lang, ts: 更改“错误的程序所有权”账户验证的错误枚举名称和消息 (#1154)。
- lang: 将零拷贝账户的
#[repr(packed)]更改为#[repr(C)](#1106)。 - lang: 账户类型现在可以在
prelude模块或accounts模块中找到,但不再直接在根目录下。不推荐使用的账户类型不再由 prelude 导入 (#1208)。
[0.19.0] - 2021-12-08
修复
- lang: 将
deprecated属性添加到ProgramAccount(#1014)。 - cli: 将程序
Cargo.toml中的版本号添加到提取的 IDL 中 (#1061)。 - lang: 将
deprecated属性添加到Loader(#1078)。 - lang:
init_if_needed属性现在检查给定的属性(例如 space、owner、token::authority 等)是否经过验证,即使不需要 init (#1096)。
特性
- lang: 添加
ErrorCode::AccountNotInitialized错误,以区分账户具有错误的所有者与账户不存在的情况 (#1024)。 - lang: 默认情况下,调用的指令现在会记录它们的名称。可以使用
no-log-ix-name标志关闭此功能 (#1057)。
ProgramData` 和 `UpgradableLoaderState` 现在可以作为泛型传递到 `Account` 中。请参阅 [UpgradeableLoaderState](https://docs.rs/solana-program/latest/solana_program/bpf_loader_upgradeable/enum.UpgradeableLoaderState.html)。`UpgradableLoaderState` 也可以匹配以获取 `ProgramData`,但是当使用 `ProgramData` 时,anchor 会为你进行序列化和检查它是否实际上是程序数据 ([#1095](https://github.com/coral-xyz/anchor/pull/1095))。
- ts: 如果传递了错误的内容(即不是 pubkey 或字符串)作为指令账户对象中的账户,则在 ts 客户端中添加更好的错误消息 (#1098)。
- ts: 添加输入
postInstructions和preInstructions作为(现在已弃用的)instructions的替代品 (#1007)。 - ts: 将
getAccountInfo辅助方法添加到账户命名空间/客户端 (#1084)。
破坏性变更
- lang, ts: 错误代码已映射到新的数字,以允许每个命名空间有更多错误 (#1096)。
[0.18.2] - 2021-11-14
- cli: 将全局 JavaScript 依赖项安装替换为本地安装。
特性
- lang: 为通用钱包地址或系统程序拥有的账户添加
SystemAccount<'info>账户类型 (#954)
修复
- cli: 修复 NODE_OPTIONS 中的 dns (#928)。
- cli: 在
idl parse子命令中输出 TypeScript IDL (#941)。 - cli: 将字段
os和cpu添加到 npm 包@project-serum/anchor-cli(#976)。 - cli: 允许为 TypeScript IDL 指定输出目录 (#940)。
破坏性变更
- spl: 将许可市场移至 dex 存储库 (#962)。
[0.18.0] - 2021-10-24
特性
- cli: 在 Anchor.toml 中添加对
solana-test-validator的配置选项的支持 (#834)。 - cli: 现在在构建时创建
target/types目录,以存储每个程序的 IDL 的 TypeScript 类型文件 (#795)。 - ts:
Program<T>现在可以使用 IDL 类型进行类型化 (#795)。 - lang: 为
#[derive(Accounts)]中的 mint 初始化添加mint::freeze_authority关键字 (#835)。 - lang: 为支持 CPI 的
zero_copy账户添加AccountLoader类型 (#792)。 - lang: 添加
#[account(init_if_needed)]关键字,允许用户调用相同的指令,即使账户已经创建 (#906)。 - lang: 为原始约束添加自定义错误支持 (#905)。
- lang, cli, spl: 将 solana toolchain 更新到 v1.8.0 (#886)。
- lang: 为
signer、mut、has_one、owner、原始约束和address添加自定义错误支持 (#905, #913)。
破坏性变更
- lang: 当启用
"cpi"功能时,使用#[account(signer)]约束标记的账户现在强制执行 signer (#849)。
[0.17.0] - 2021-10-03
特性
- cli: 添加
localnet命令,用于启动本地solana-test-validator并部署工作区 (#820)。
破坏性变更
CpiContext账户现在必须与crate::cpi::accounts::*模块中生成的账户结构一起使用。这些结构对应于每个指令的账户上下文,但每个字段的类型都是AccountInfo(#824)。
[0.16.2] - 2021-09-27
特性
- lang: 向
anchor test添加--detach标志 (#770)。 - lang: 添加
associated_token关键字,用于初始化#[derive(Accounts)]中的关联 token 账户 (#790)。 - cli: 允许传递 cargo 标志以进行构建命令 (#719)。
- cli: 允许传递 cargo 标志以进行 test、verify 和 publish 命令 (#804)。
修复
- lang: 为 Rust 客户端生成的
AccountMeta现在正确设置isSigner字段 (#762)。
[0.16.1] - 2021-09-17
修复
- lang:
Signer类型现在在 IDL 中将 isSigner 设置为 true (#750)。
[0.16.0] - 2021-09-16
特性
- lang: 引入了用于可执行账户的
Program类型 (#705)。 - lang: 引入了用于未使用数据的签名账户的
Signer类型 (#705)。 - lang: 引入了
UncheckedAccount类型,作为AccountInfo的首选别名 (#745)。
破坏性变更
- lang:
#[account(owner = <pubkey>)]现在需要Pubkey而不是账户 (#691)。
[0.15.0] - 2021-09-07
特性
- lang: 添加新的
Account类型来替换ProgramAccount和CpiAccount,两者都已弃用 (#686)。 - lang:
Box可以与Account类型一起使用,以减少堆栈使用量 (#686)。 - lang: 添加
Ownertrait,它由所有#[account]结构自动实现 (#686)。 - lang: 在 mut 借用之前检查 ProgramAccount 是否可写(仅限
anchor-debug) (#681)。
破坏性变更
- lang: 所有程序现在都必须通过
declare_id!在源代码中定义它们的程序 id (#686)。
[0.14.0] - 2021-09-02
特性
- lang: 忽略
Unnamed结构而不是 panic (#605)。 - lang: 添加用于初始化 mint 账户作为 pda 的约束,
#[account(init, seeds = [...], mint::decimals = <expr>, mint::authority = <expr>)](#562)。 - lang: 为
AccountInfo包装器添加AsRef<AccountInfo>(#652)。 - lang: 通过删除
AccountInfo克隆来优化trait Key(#652)。 - cli, client, lang: 将 solana toolchain 更新到 v1.7.11 (#653)。
破坏性变更
- lang: 将
#[account(init, seeds = [...], token = <expr>, authority = <expr>)]更改为#[account(init, token::mint = <expr> token::authority = <expr>)](#562)。 - lang:
#[associated]和#[account(associated = <target>, with = <target>)]都被删除 (#612)。 - cli: 删除
anchor launch命令 (#634)。 - lang:
#[account(init)]现在在同一指令中创建账户,以与初始化 PDA 保持一致。要保持init的旧行为,请将其替换为#[account(zero)](#641)。 - lang: 使用
seeds约束时必须提供bump。添加此项作为额外的安全约束,以确保每当通过约束初始化 PDA 时,使用的 bump 都是由Pubkey::find_program_address创建的 (#641)。 - lang:
try_from_init已从Loader、ProgramAccount和CpiAccount中删除,并替换为try_from_unchecked(#641)。 - lang: 删除
AccountsInittrait (#641)。 - lang:
ProgramAccount、Loader和ProgramState的try_from方法现在接受一个额外的program_id: &Pubkey参数 (#660)。
[0.13.2] - 2021-08-11
修复
- cli: 修复
anchor init命令“未找到工作区”回归 (#598)。
[0.13.1] - 2021-08-10
特性
- cli: 在测试期间嵌入到 genesis 中的程序将生成程序日志 (#594)。
修复
- cli: 允许 Cargo.lock 在发布时存在于工作区子目录中 (#593)。
[0.13.0] - 2021-08-08
特性
- cli: 在 Anchor toml 中添加
[registry]部分 (#570)。 - cli: 添加
anchor login <api-token>命令 (#570)。 - cli: 添加
anchor publish <package>命令 (#570)。 - cli: 向 Anchor.toml 添加根级别
anchor_version字段,用于指定用于可验证构建的 anchor docker 镜像 (#570)。 - cli: 向 Anchor.toml 添加根级别
solana_version字段,用于指定用于可验证构建的 solana toolchain (#570)。 - lang: 使用
init时动态获取租金 sysvar (#587)。
破坏性变更
- cli:
[clusters.<network>]Anchor.toml 部分已重命名为[programs.<network>](#570)。 - cli:
[workspace]成员和排除数组现在必须是相对于工作区根目录的文件路径 (#570)。
[0.12.0] - 2021-08-03
特性
- cli: 在配置
programs部分添加键members/exclude(#546)。 - cli: 允许通过
clusters.localnet为 test 命令配置程序地址 (#554)。 - lang: 现在从整个 crate 解析 IDL (#517)。
- spl: Dex 许可市场代理 (#519, #543)。
破坏性变更
- ts: 默认使用
hex解码指令 (#547)。 - lang:
CpiAccount::reload改变现有结构,而不是返回新结构 (#526)。 - cli: Anchor.toml 现在需要显式的
[scripts]测试命令 (#550)。
[0.11.1] - 2021-07-09
特性
- lang: 添加
require宏,用于指定失败时返回错误代码的 assertion (#483)。 - lang: 允许用户在创建 PDA 时指定任意程序作为所有者 (#483)。
- lang: 向账户约束添加了一个新的
bump关键字,用于向seeds数组的末尾添加可选的 bump seed。当与init和seeds一起使用时,程序将执行find_program_address以 assertion 给定的 bump 是 canonical bump (#483)。
修复
[0.11.0] - 2021-07-03
特性
- lang: 添加回退函数 (#457)。
- lang: 添加一个功能标志,用于使用旧的状态账户鉴别器。对于那些在 v0.7.0 之前构建了程序但想要使用最新 Anchor 版本的人来说,这是一个临时标志。预计将在未来版本中删除此标志 (#446)。
- lang: 向 Accounts 添加泛型支持 (#496)。
破坏性变更
[0.10.0] - 2021-06-27
特性
- lang: 添加
#[account(address = <expr>)]约束以 assertion 账户的地址 (#400)。 - lang: 添加
#[account(init, token = <mint-target>, authority = <token-owner-target>...)]约束以将 SPL token 账户初始化为程序的程序派生地址。可以在通过seeds或associated初始化时使用 (#400)。 - lang: 添加
associated_seeds!宏,用于为由#[account(associated = <target>)]账户签名的 CPI 生成 signer seed (#400)。 - cli: 向 Anchor.toml 添加
[scripts]部分,用于指定可以通过anchor run <script>运行的工作区脚本 (#400)。 - cli:
[clusters.<network>]表条目现在也可以使用{ address = <base58-str>, idl = <filepath-str> }来指定工作区程序 (#400)。
破坏性变更
- cli: 删除
--yarn标志,转而使用npx(#432)。
[0.9.0] - 2021-06-15
特性
破坏性变更
[0.8.0] - 2021-06-10
特性
- cli: 添加
--program-name选项,用于构建命令以一次构建单个程序 (#362)。 - cli, client: 从 str 解析自定义集群 url (#369)。
- cli, client, lang: 将 solana toolchain 更新到 v1.7.1 (#368)。
- ts: 指令解码和格式化 (#372)。
- lang: 添加
#[account(close = <destination>)]约束以关闭账户并将租金豁免 lamport 发送到指定的 destination 账户 (#371)。
修复
- lang: 通过在
CpiContext上实现ToAccountMetastrait,允许用户将remaining_accounts与CpiContext一起使用 (#351)。
破坏性变更
- lang, ts: 引入了框架定义的错误代码,为 Anchor 保留了错误代码 0-300,为用户定义的错误代码保留了 300 及以上的错误代码 (#354)。
[0.7.0] - 2021-05-31
特性
- cli: 添加用于覆盖 Anchor.toml 值的全局选项 (#313)。
- spl: 添加
SetAuthority指令 (#307)。 - spl: 添加 init 并关闭打开的订单指令 (#245)。
- lang: 添加
constraint = <expression>作为(现在已弃用的)字符串字面量约束的替代品 (#341)。 - lang: 现在保留 span 信息,提供信息丰富的编译器错误消息 (#341)。
- ts: 地址元数据现在对于
anchor.workspace客户端是可选的 (#310)。
破坏性变更
- ts: 从
<program>.account.<my-account>和<program>.state命名空间检索反序列化账户现在需要显式调用fetchAPI。例如,program.account.myAccount(<address>)和program.state()现在是program.account.myAccount.fetch(<address>)和program.state.fetch()(#322)。 - lang:
#[account(associated)]现在需要提供init来创建关联账户。如果未提供,则假定地址存在,并将添加约束以确保地址的正确性 (#318)。 - lang, ts: 将
#[state]账户鉴别器的账户鉴别器 pre-image 更改为由 "state:" 命名空间 (#320)。 - lang, ts: 将指令 sighash 的 pre-image 的域分隔符更改为单个冒号
:,以与账户保持一致 (#321)。 - lang: 关联约束不再自动实现
mut(#341)。 - lang: 关联的
space约束现在必须是字面整数,而不是字面字符串 (#341)。
[0.6.0] - 2021-05-23
特性
- ts: 添加
program.simulate命名空间 (#266)。 - ts: 引入
Address类型,允许用户在公共 API 中使用 Base 58 编码的字符串 (#304)。 - ts: 在公共 API 中将已弃用的
web3.Account替换为web3.Signer(#296)。 - ts: 现在可以使用 Anchor.toml 中的
[cluster.<slug>]为每个网络自定义生成的anchor.workspace客户端 (#308)。 - cli: 向 test 命令添加 yarn 标志 (#267)。
- cli: 向 test 命令添加
--skip-build标志 (301)。 - cli: 添加
anchor shell命令以生成一个填充了基于 Anchor.toml 的环境的节点 shell (#303)。
破坏性变更
- cli: Anchor.toml 的
wallet和cluster设置现在必须位于[provider]表下 (#305)。 - ts: 事件编码器
decodeAPI 更改为直接解码字符串而不是缓冲区 (#292)。 - ts: 删除了事件编码器
encodeAPI (#292)。
[0.5.0] - 2021-05-07
特性
破坏性变更
- client: 将
RequestBuilder::new重命名为RequestBuilder::from(#248)。 - lang: 将生成的
instruction::state::Ctor结构重命名为instruction::state::New(#248)。
[0.4.5] - 2021-04-29
- spl: 添加 serum DEX CPI 客户端 (#224)。
[0.4.4] - 2021-04-18
特性
- lang: 允许在创建关联帐户时指定多个
with目标 (#197)。 - lang, ts: 添加数组支持 (#202)。
- lang: 零拷贝反序列化账户 (#202, #206)。
- lang, spl, cli, client: 将 solana toolchain 升级到 1.6.6 (#210)。
[0.4.3] - 2021-04-13
特性
- lang: 用于程序状态指令的 CPI 客户端 (#43)。
- lang: 添加
#[account(owner = <program>)]约束 (#178)。 - lang, cli, ts: 添加
#[account(associated = <target>)]和#[associated]属性,用于在程序中创建关联的程序帐户。TypeScript 包可以使用新的<program>.account.<account-name>.associated(和associatedAddress)方法获取这些帐户 (#186)。
修复
- lang: 未使用的
#[account]现在已正确解析到 IDL 中 ([#177](https://github.- cli:指定要运行的测试文件 (#118)。 - lang:允许覆盖
#[state]账户的大小 (#121)。 - lang, client, ts:添加事件发送和订阅 (#89)。
- lang/account:允许命名空间账户鉴别器 (#128)。
- cli:TypeScript 迁移 (#132)。
- lang:添加
#[account(executable)]属性 (#140)。
破坏性更改
- client:使用
Cluster结构替换 url 字符串来构造客户端 (#89)。 - lang:更改
IdlAccount的账户鉴别器,使其由"internal"命名空间 (#128)。 - lang, spl, cli:将 solana 工具链升级到 1.6.3,这是一个主版本升级,即使只增加了次版本。这允许删除
-#![feature(proc_macro_hygiene)]。 (#139)。
[0.3.0] - 2021-03-12
功能
- ts:允许预加载 state rpc 事务的指令 (cf9c84)。
- ts:导出 sighash 编码器函数 (734c75)。
- cli:指定要通过 Anchor.toml 嵌入到本地验证器创世块中的程序,用于测试 (b3803a)。
- cli:允许在针对 localnet 进行测试时跳过本地验证器的创建 (#93)。
- cli:添加对使用 Typescript 进行测试的支持 (#94)。
- cli:确定性和可验证的构建 (#100)。
- cli, lang:为 IDL 升级添加写入缓冲区 (#107)。
破坏性更改
- lang:删除
IdlInstruction::Clear(#107)。
修复
- cli:传播错误时的 mocha 测试退出状态 (79b791)。
[0.2.1] - 2021-02-11
功能
- cli:在测试时将工作区程序嵌入到本地验证器创世块中 (733ec3)。
- cli:在测试时将程序日志流式传输到
.anchor/program-logs目录 (ce5ca7)。 - spl:添加共享内存 api (d92cb1)。
- lang/attribute/access-control:允许指定多个修饰符函数 (845df6)。
- lang/syn:允许没有 ctor 或 impl 块(只有 trait 实现)的状态结构 (a78000)。
- ts:将指令方法添加到状态命名空间 (627c27)。
- lang/syn, ts:添加对 u128 和 i128 的支持 (#83)。
[0.2.0] - 2021-02-08
功能
- lang:添加创建和使用 CPI 程序接口的能力 (#66)。
破坏性更改
- lang, client, ts:从基于 rust 枚举的方法分发迁移到 sighash 的变体 (#64)。
[0.1.0] - 2021-01-31
首次发布。
包括
- lang:
anchor-langcrate,为 Solana 提供 Rust eDSL。 - lang/attribute/access-control:用于函数修饰符的内部属性宏。
- lang/attribute/account:用于定义 Anchor 账户的内部属性宏。
- lang/attribute/error:用于定义 Anchor 程序错误的内部属性宏。
- lang/attribute/program:用于定义 Anchor 程序的内部属性宏。
- lang/attribute/state:用于定义 Anchor 程序状态结构的内部属性宏。
- lang/derive/accounts:用于定义反序列化账户结构的内部派生宏。
- lang/syn:用于解析 Anchor eDSL、生成代码和 IDL 的内部 crate。
- spl:
anchor-splcrate,为 Anchor 程序提供 CPI 客户端。 - client:
anchor-clientcrate,为 Anchor 程序提供 Rust 客户端。 - ts:
@project-serum/anchor包,用于生成 TypeScript 客户端。 - cli:用于管理 Anchor 程序的命令行界面。
- 原文链接: github.com/solana-founda...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~