Anchor 历史更新日志 - 了解 Anchor 框架的演变和升级过程

本文档记录了 Anchor 项目的所有显著更改,从最早版本到最新版本,详细列出了每个版本的新增功能、修复的错误以及重大更改,方便开发者了解 Anchor 框架的演变和升级过程。

更新日志

此项目的所有重要更改都将记录在此文件中。

格式基于 Keep a Changelog, 并且此项目遵循 Semantic Versioning

注意: 语义化版本 0 的处理方式与 1 及以上版本不同。 次版本将在出现重大更改时递增,补丁版本将在新增功能时递增。

[Unreleased]

功能

  • ts: 使 Provider 在账户解析器中需要 publicKey 而不是 wallet (#3613)

修复

  • cli, docker: 将 backpackapp/build Docker 镜像替换为 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 导出 Discriminator trait (#3075).
  • lang: 添加 Account 实用工具类型,用于从字节获取账户 (#3091).
  • client: 添加在使用 anchor_client 时传入 mock rpc client 的选项 (#3053).
  • lang: 动态获取 discriminator 长度 (#3101).
  • lang: 在 declare_program! 中添加非 8 字节 discriminator 支持 (#3103).
  • client: 使 ThreadSafeSigner trait 公开 (#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_checkedmint_to_checkedapprove_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: 为 installlist 命令添加短别名 (#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! 中的 align repr 支持 (#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: 修复由于 time crate 问题,使用 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! 中向类型别名定义添加 deriverepr 的问题 (#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: 移除 EventData trait (#3083).
  • client: 移除 async_rpc 方法 (#3053).
  • lang: 使 discriminator 类型为 unsized (#3098).
  • lang: 在使用 zero 约束时,需要 Discriminator trait 实现 (#3118).
  • ts: 移除 DISCRIMINATOR_SIZE 常量 (#3120).
  • lang: #[account] 属性参数不再将标识符解析为命名空间 (#3140).
  • spl: 将元数据接口指令字段从 token_program_id 重命名为 program_id (#3076).
  • lang, ts: 从 discriminator 错误消息中移除“8 字节”要求 (#3161).
  • lang: 从 Discriminator trait 中移除 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-account crate (#2999).
  • lang: 支持带有 declare_program! 的 legacy IDL (#2997).
  • cli: 添加 idl convert 命令 (#3009).
  • cli: 添加 idl type 命令 (#3017).
  • lang: 添加 anchor_lang::pubkey 宏,用于声明 Pubkey const 值 (#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: 允许强制 initnew (#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.membersworkspace.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: 使 TokenAccountMint Copy (#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: 删除 associatedaccount.associatedaccount.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-parseseeds 特性 (#2824).
  • ts: 更改 accounts 方法以不再接受可解析的帐户 (#2824).
  • ts: Program 实例对所有内容使用 camelCase (#2824).
  • ts: 删除鉴别器函数 (#2824).
  • ts: 删除 Program 构造函数的 programId 参数 (#2864).
  • idl, syn: 将 IDL 类型从 anchor-syn crate 移动到新的 IDL crate (#2882).
  • idl: 向 IDL 枚举添加 #[non_exhaustive] (#2890).

[0.29.0] - 2023-10-16

有关如何更新的高级概述,请参阅 Anchor 0.29 发布说明

功能

  • lang: 将所有帐户更改为引用 AccountInfo (#2656).
  • lang: 为所有帐户类型添加 get_lamportsadd_lamportssub_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.myProgramanchor.workspace.MyProgram... (#2579).
  • bench: 添加程序二进制大小的基准测试 (#2591).
  • spl: 导出 mpl-token-metadata crate (#2583).
  • spl: 为 pNFT 添加 TokenRecordAccount (#2597).
  • ts: 在帐户中添加对未命名(元组)枚举的支持 (#2601).
  • cli: 添加具有多个文件的程序模板,用于指令、状态... (#2602).
  • bench: 添加堆栈内存使用情况的基准测试 (#2617).
  • lang: Box anchor_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.upgradeabletest.genesis.upgradeable 设置以支持测试可升级程序 (#2642).
  • cli, client, lang, spl: 将 Solana 工具链和依赖项更新到 1.17.01.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-buildidl-parseidl-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_versionsolana_version 属性已移至 toolchain 内部。它们现在用于工作区中的所有命令,而不仅仅是可验证的构建 (#2649).

[0.28.0] - 2023-06-09

功能

  • client: 添加 async 特性标志以使用异步 anchor-client (#2488).
  • spl: 添加元数据包装器 approve_collection_authoritybubblegum_set_collection_sizeburn_edition_nftburn_nftrevoke_collection_authorityset_token_standardutilizeunverify_sized_collection_itemunverify_collection (#2430)
  • spl: 将 token_program 约束添加到 TokenMintAssociatedToken 帐户,以便覆盖所需的 token_program 字段并在同一指令中使用不同的 token 接口实现 (#2460)
  • cli: 添加对 Solidity 程序的支持。anchor initanchor new 接受一个选项 --solidity,该选项创建 solidity 代码而不是 rust 代码。anchor buildanchor test 相应地工作 (#2421)
  • bench: 添加计算单元使用情况的基准测试 (#2466)
  • cli: idl set-bufferidl set-authorityidl 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_idaccountsix_dataremaining_accounts 的问题 (#2464)
  • cli: 修复使用自定义密钥对部署后 IDL 中不正确的 metadata.address 生成 (#2485)
  • cli: 当付款人没有资金支付交易费用时,IDL 命令不再挂起 (#2492)
  • cli: 修复 anchor new 不更新 Anchor.toml 的问题 (#2516).
  • client, lang, spl: 允许更广泛的依赖项版本,以减少依赖项问题 (#2524).

破坏性更改

  • lang: 旨在供内部使用的标识符(program_idaccountsix_dataremaining_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: 使用 reqwestrustls-tls 特性,以便用户不需要安装 OpenSSL (#2385).
  • ts: 添加 VersionedTransaction 支持。Provider 类和 Wallet 接口中的方法现在使用参数 tx: Transaction | VersionedTransaction (#2427).
  • cli: 添加 --arch sbf 选项以使用 cargo build-sbf 编译程序 (#2398).
  • land: 使用 InterfaceInterfaceAccount 类型支持具有相同接口的多个程序,与 token-2022 相关 (#2386).

修复

  • ts: 使 AccountClient.fetchMultiple 的返回类型与正在提取的帐户类型匹配 (#2390)
  • cli: 不要在 read_all_programs() 中重新生成 idl。(#2332).
  • ts: 如果不存在 signersprovider.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: 删除已弃用的帐户类型:CpiAccountLoaderProgramAccount (#2375).
  • lang: 删除 stateinterface 属性 (#2285).
  • lang: 删除已被 #[account(constraint = {})] 替换的已弃用文字约束 (#2379).
  • lang: account(zero_copy)zero_copy 属性现在派生 bytemuck::Podbytemuck::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: 删除 createProgramAddressSyncfindProgramAddressSync (现在在 @solana/web3.js 中可用) 并更新 associatedAddress 以使其同步 (#2357).

[0.26.0] - 2022-12-15

功能

  • cli:为 anchor test 添加 --run,用于运行测试套件的子集 (#1828)。
  • client:向 RequestBuilder 添加 transaction 函数 (#1958)。
  • spl:添加 create_metadata_accounts_v3set_collection_size 包装器 (#2119)。
  • spl:添加 MetadataAccount 账户反序列化。(#2014)。
  • spl:添加 update_primary_sale_happened_via_token 包装器 (#2173)。
  • spl:添加 sign_metadataremove_creator_verification 包装器 (#2175)。
  • spl:添加 initialize_account3initialize_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_accountthaw_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:为表示指令的结构添加 DiscriminatorOwner 特性实现 (#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:添加 reallocrealloc::payerrealloc::zero 作为程序账户的新约束组 (#1986)。
  • lang:为 anchor_lang::Error 添加 PartialEqEq (#1544)。
  • cli:为 anchor publish 添加 --skip-build (#1786)。
  • cli:为 anchor deploy 添加 --program-keypair (#1786)。
  • cli:向 cli 模板添加编译优化 (#1807)。
  • cli:build 现在将文档添加到 idl。可以使用 --no-docs 关闭此功能 (#1561)。
  • cli:分别为 buildtest 添加 bt 别名 (#1823)。
  • spl:向 TokenAccountMint 添加更多派生特性 (#1818)。
  • spl:添加 sync_native token 程序 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 移动到 workspace Cargo.toml 中,使其不会被编译器忽略 (#1806)。
  • lang:修复使用 initzero 时,反序列化失败时缺少账户名称信息的问题 (#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 导出 LangErrorCodeLangErrorMessage (#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_token crate (#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 系统调用的自定义 Write impl (#1589)。
  • lang:添加 require_neqrequire_keys_neqrequire_gtrequire_gte 比较宏 (#1622)。
  • lang:在指令数据中处理大小为 const 的数组 (#1623
  • spl:添加对 revoke 指令的支持 (#1493)。
  • ts:将 provider 参数添加到 Spl.token 工厂方法 (#1597)。

修复

  • ts:修复使用 builder 函数上的 methods 命名空间丢失严格类型的问题 (#1539)。
  • spl:更新 spl/governance 以使用新错误 (#1582)。
  • client:修复 ClusterFromStr 实现 (#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 中的 sendsimulate 函数,以便它们使用 Wallet.signTransaction 的返回值 (#1527)。

重大更改

  • ts:将 transactioninstructionsimulaterpc 程序命名空间标记为已弃用,改为使用 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_eqrequire_keys_eq 宏。将默认错误代码添加到 require 宏 (#1572)。
  • lang:添加 system_program CPI 包装函数。使 system_program 模块公开,而不是重新导出 system_program::System(#1629)。
  • cli:如果首先需要安装,avm use 不再提示 [y/n] - 它只是告诉用户 avm install (#1565)
  • ts:添加带有程序堆栈的 AnchorError,以及非 AnchorError 错误的程序堆栈 (#1640)。对于将 skipPreflight 设置为 trueprocessed tx,不返回 AnchorError(它会回退到 ProgramError 或原始 solana 库错误)。

[0.22.1] - 2022-02-28

修复

  • cli:修复 rust 模板 (#1488)。
  • lang:处理事件中具有可变大小的数组大小以及 IDL 解析中的数组大小转换 (#1485)

[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:为条件 workspaceWallet 导出添加类型声明 (#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 参数添加到 fetchfetchMultiple (#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: 添加输入 postInstructionspreInstructions 作为(现在已弃用的)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: 将字段 oscpu 添加到 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: 为 signermuthas_oneowner、原始约束和 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 类型来替换 ProgramAccountCpiAccount,两者都已弃用 (#686)。
  • lang: Box 可以与 Account 类型一起使用,以减少堆栈使用量 (#686)。
  • lang: 添加 Owner trait,它由所有 #[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 已从 LoaderProgramAccountCpiAccount 中删除,并替换为 try_from_unchecked (#641)。
  • lang: 删除 AccountsInit trait (#641)。
  • lang: ProgramAccountLoaderProgramStatetry_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。当与 initseeds 一起使用时,程序将执行 find_program_address 以 assertion 给定的 bump 是 canonical bump (#483)。

修复

  • lang: 为回退函数保留所有指令数据 (#483)。
  • ts: 创建关联账户时,事件侦听器未触发 (#356)。

[0.11.0] - 2021-07-03

特性

  • lang: 添加回退函数 (#457)。
  • lang: 添加一个功能标志,用于使用旧的状态账户鉴别器。对于那些在 v0.7.0 之前构建了程序但想要使用最新 Anchor 版本的人来说,这是一个临时标志。预计将在未来版本中删除此标志 (#446)。
  • lang: 向 Accounts 添加泛型支持 (#496)。

破坏性变更

  • cli: 删除 TypeScript 测试文件上的 .spec 后缀 (#441)。
  • lang: 删除 belongs_to 约束 (#459)。

[0.10.0] - 2021-06-27

特性

  • lang: 添加 #[account(address = <expr>)] 约束以 assertion 账户的地址 (#400)。
  • lang: 添加 #[account(init, token = <mint-target>, authority = <token-owner-target>...)] 约束以将 SPL token 账户初始化为程序的程序派生地址。可以在通过 seedsassociated 初始化时使用 (#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

特性

  • lang: 指令数据现在可用于账户约束 (#386)。
  • lang: 使用账户约束初始化程序派生地址 (#386)。

破坏性变更

  • lang: IDL 中的事件字段名称现在是混合大小写。 (#379)。
  • lang: Accounts trait 现在接受一个额外的 &[u8] 参数 (#386)。

[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 上实现 ToAccountMetas trait,允许用户将 remaining_accountsCpiContext 一起使用 (#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 命名空间检索反序列化账户现在需要显式调用 fetch API。例如,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 的 walletcluster 设置现在必须位于 [provider] 表下 (#305)。
  • ts: 事件编码器 decode API 更改为直接解码字符串而不是缓冲区 (#292)。
  • ts: 删除了事件编码器 encode API (#292)。

[0.5.0] - 2021-05-07

特性

  • client: 添加对 state 指令的支持 (#248)。
  • lang: 为日志记录添加 anchor-debug 功能标志 (#253)。
  • ts: 添加对 u16 的支持 (#255)。

破坏性变更

  • 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-lang crate,为 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-spl crate,为 Anchor 程序提供 CPI 客户端。
  • client:anchor-client crate,为 Anchor 程序提供 Rust 客户端。
  • ts:@project-serum/anchor 包,用于生成 TypeScript 客户端。
  • cli:用于管理 Anchor 程序的命令行界面。
  • 原文链接: github.com/solana-founda...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
solana-foundation
solana-foundation
江湖只有他的大名,没有他的介绍。