anchor 变更日志

这段内容是关于一个 anchor 开源项目的变更日志,详细记录了每个版本的显著变化,包括新特性、修复和破坏性变化。文档按版本组织,提供了每个版本的发布日期,以及每个版本内的具体更改和功能。内容清晰且具有层次结构,适合开发者跟踪项目的演变。

更新日志

对该项目的所有显著更改都将在此文件中记录。

格式基于 Keep a Changelog, 本项目遵循 语义版本控制

注意: 语义版本控制的版本 0 的处理方式与版本 1 及以上有所不同。 在发生破坏性更改时,将增加小版本号,功能更新时将增加修补版本号。

[未发布]

新特性

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

修复

  • cli, docker: 用 solanafoundation/anchor 替换 backpackapp/build Docker 镜像 (#3619).

破坏性更改

[0.31.0] - 2025-03-08

新特性

  • client: 使 solana_account_decoder 依赖在 anchor 客户端中公有 (#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 特质 (#3075).
  • lang: 添加 Account 实用类型以从字节获取帐户 (#3091).
  • client: 添加一个选项以在使用 anchor_client 时传递模拟 rpc 客户端 (#3053).
  • lang: 动态获取 discriminators 的长度 (#3101).
  • lang: 在 declare_program! 中添加不支持 8 字节 discriminator (#3103).
  • client: 使 ThreadSafeSigner 特质公有 (#3107).
  • lang: 更新 dispatch 函数以支持动态 discriminators (#3104).
  • lang: 在 try_entry 函数中移除备用函数快捷方式 (#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: 在 #[account] 中使用关联的 discriminator 常量而不是硬编码 (#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: 如果未安装则询问是否安装 (#3230).
  • cli: 如果清单中有 solana-program 依赖时发出警告 (#3250).
  • cli: 添加完成功能以通过 clap_complete crate 生成 shell 完成 (#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: 添加对获取遗留 IDLs 的支持 (#3324).
  • avm: 为 installlist 命令添加缩写别名 (#3326).
  • avm: 为重命名 anchor 二进制文件添加 Windows 支持 (#3325).
  • cli: 在 init 命令中添加可选的 package-manager 标志以设置 Anchor.toml 中的包管理器字段 (#3328).
  • cli: 为 Mollusk 添加测试模板 (#3352).
  • idl: 禁止可能与 zero 约束冲突的帐户 discriminators (#3365).
  • cli: 默认包含推荐的 solana 参数并新增 --max-retries 选项到 deploy 命令 (#3354).
  • avm: 使安装默认下载二进制文件 (#3445).
  • idl: 支持无参数调用表达式的 PDA 解析 (#3485).
  • spl: 添加 anchor-debug 特性 (#3511).

修复

  • idl: 当程序路径环境未设置时,安全注释检查默默失败 (#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: 在帐户退出例程中删除不必要的克隆 (#3139).
  • cli: 修复使用 Rust v1.80 时带有 --locked 参数的安装 (#3143).
  • lang: 修复由于未使用的弃用程序 id 宏导致的编译警告 (#3170).
  • ts: 移除 crypto-hash 依赖 (#3171).
  • ts: 改善不支持的 view 方法的错误消息 (#3177).
  • idl: 修复测试时的崩溃 (#3197).
  • lang: 移除 arrayref 依赖 (#3201).
  • cli: 修复模板代码不应转义 (#3210).
  • idl: 修复在非常量表达式中使用 address 约束 (#3216).
  • idl: 修复在 Program 中使用完整路径类型 (#3228).
  • lang: 使用闭包减少 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: 使用与操作系统无关的路径 (#3307).
  • avm: 当安装版本低于 v0.31 时使用 rustc 1.79.0 (#3315).
  • cli: 修复使当地网络导致恐慌的优先费计算 (#3318).
  • cli: 修复因陈旧的程序初始化导致的 shell 命令失败 (#3351).
  • idl: 修复检测在模块路径转换期间的文档注释的假阳性 (#3359).
  • cli: 删除将租金 sysvar 帐户传递给 IDL 指令 (#3372).
  • lang: 修复 cpi 特性指令未考虑到 discriminator 覆盖 (#3376).
  • idl: 在构建期间忽略编译器警告 (#3396).
  • cli: 在 verify 期间避免额外的 IDL 生成 (#3398).
  • lang: 要求 zero 帐户唯一 (#3409).
  • lang: 将 zero 帐户与 init 帐户反向求以消除重复 (#3422).
  • cli: 修复自定义 provider.cluster (#3428).
  • cli: 忽略非 semver solana/agave 发布以避免恐慌 (#3432).
  • ts: 修复使用 workspace 加载名称中包含数字的程序 (#3450).
  • lang: 在 declare_program! 中修复获取 IDL 时的潜在恐慌 (#3458).
  • cli: 修复更改用户提供的库名称 (#3467).
  • idl: 修复缺失的 program::seed 解析 (#3474).
  • lang: 修复在 declare_program! 中向类型别名定义添加 deriverepr (#3504).
  • idl: 修复将常量标识符用作泛型参数 (#3522).
  • client: 移除 std::process::exit 的使用 (#3544).
  • idl: 修复在 seeds::program 中使用 Pubkey 常量 (#3559).
  • lang: 修复 declare_program! 中没有帐户的指令导致的编译错误 (#3567).
  • idl: 修复在 seeds::program 中使用账户或参数值 (#3570).
  • lang: 修复在 declare_program! 中将 data 用作指令参数名称 (#3574).
  • cli: 在 anchor.workspace 模板中使用 camelCase 作为程序名称 (#3581).

破坏性更改

  • syn: 在 hash 特性中移除 bpf 目标支持 (#3078).
  • client: 向 RequestBuilder 添加 tokio 支持与 async 特性 (#3057).
  • lang: 移除 EventData 特质 (#3083).
  • client: 移除 async_rpc 方法 (#3053).
  • lang: 使 discriminator 类型不定型 (#3098).
  • lang: 在使用 zero 约束时要求实现 Discriminator 特质 (#3118).
  • ts: 移除 DISCRIMINATOR_SIZE 常量 (#3120).
  • lang: #[account] 属性参数不再将标识符解析为命名空间 (#3140).
  • spl: 将元数据接口指令字段从 token_program_id 重命名为 program_id (#3076).
  • lang, ts: 从 discriminator 错误消息中移除 "8 字节" 的要求 (#3161).
  • lang: 从 Discriminator 特质中移除 discriminator 方法 (#3163).
  • docker: 将 node 升级至 20.16.0 LTS (#3179).
  • ts: 将 Program 构造函数的 idl 参数类型更改为 any (#3181).
  • lang, spl: 移除 borsh 0.9 支持 (#3199).
  • ts: 升级 typescript5.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: 在可验证构建中从 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: 当达到 GitHub API 速率限制时优化 avm list (#2962).
  • idl, ts: 添加与关联token帐户的帐户解析 (#2927).
  • cli: 向 init 命令添加 --no-install 选项 (#2945).
  • lang: 为 Error 实现 TryFromIntError 以传播整数转换错误 (#2950).
  • idl: 添加转换遗留 IDLs 的能力 (#2986).
  • ts: 提取 Anchor 错误代码到其自身的包中 (#2983).
  • cli: 向 upgrade 命令添加额外的 solana 参数 (#2998).
  • spl: 导出 spl-associated-token-account crate (#2999).
  • lang: 支持使用 declare_program! 的遗留 IDLs (#2997).
  • cli: 添加 idl convert 命令 (#3009).
  • cli: 添加 idl type 命令 (#3017).
  • lang: 添加 anchor_lang::pubkey 宏用于声明 Pubkey 常量值 (#3021).
  • cli: 在初始构建中同步程序 ID (#3023).
  • idl: 移除 anchor-syn 依赖 (#3030).
  • lang: 将程序 ID 的 const 添加到 declare_id!declare_program! (#3019).
  • idl: 添加单独的规范 crate (#3036).

修复

  • lang: 消除为Token扩展代码生成积累堆栈空间的变量分配 (#2913).
  • ts: 修复 AnchorProvider.send*() 方法中的 maxSupportedTransactionVersion 不正确 (#2922).
  • cli: 对用 anchor init 创建的新项目使用 npm 配置的默认许可证 (#2929).
  • cli: 在“无法读取 keypair 文件”错误中添加文件名 (#2932).
  • idl: 修复在生成外部类型的 idl 时的 Cargo.lock 路径解析 (#2946).
  • idl: 修复外部类型解析中的潜在崩溃 (#2954).
  • lang: 修复使用已定义类型作为指令参数的功能与 declare_program! (#2959).
  • lang: 修复用常量泛型使用 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 清单中移除 rust-version (#3000).
  • cli: 修复可升级程序复制 (#3010).
  • ts: 修复使用有已定义类型作为泛型参数的 IDLs (#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(..)] 属性以覆盖指令 discriminator (#2728).
  • ts: 为指令 discriminator 重写添加 .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: 添加缺失的 new_from_array 方法到 Hash (#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 更改为 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,以防止在日志中存在超过一个外部指令时发生崩溃 (#2856)。
  • avm, cli: 修复在使用较新 Rust 版本安装 CLI 时来自 ahashstdsimd 特性编译错误 (#2867)。
  • spl: 修复无法反序列化更新的 token 2022 扩展 (#2876)。
  • spl: 移除 solana-program 依赖 (#2900)。
  • spl: 使 TokenAccountMintCopy (#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 仍然使用解析方法生成 IDLs,使用 anchor idl build 使用构建方法生成 IDLs (#2011)。
  • avm: 添加对 .anchorversion 文件的支持,以便在不同版本的 anchor-cli 之间切换 (#2553)。
  • ts: 添加独立于使用的大小写访问工作区程序的能力,例如 anchor.workspace.myProgramanchor.workspace.MyProgram... (#2579)。
  • bench: 添加程序二进制大小的基准测试 (#2591)。
  • spl: 导出 mpl-token-metadata crate (#2583)。
  • spl: 添加 TokenRecordAccount 用于 pNFTs (#2597)。
  • ts: 为账户中的未命名(元组)枚举添加支持 (#2601)。
  • cli: 添加具有多个文件的程序模板用于指令、状态... (#2602)。
  • bench: 添加栈内存使用的基准测试 (#2617)。
  • lang: 将 anchor_lang::error::Error 的内枚举放入 Box 中,以优化 anchor_lang::Result (#2600)。
  • ts: 为 Program.addEventListener 方法添加强类型支持 (#2627)。
  • syn: 添加 IdlBuild 特性以实现对自定义类型的 IDL 支持 (#2629)。
  • spl: 添加 idl-build 特性。使用 anchor-spl 时,如果未启用此特性,则 IDL 构建方法将无法工作 (#2629)。
  • lang: 添加在 IDLs 中对类型别名的支持 (#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: 修复 anchor account 命令在非工作区外崩溃 (#2620)。
  • lang: IDL 命名枚举变体字段现在使用 camelCase 而不是 snake_case,与其他 IDL 类型一致 (#2633)。
  • avm: 移除过多的崩溃,优雅地处理错误 (#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_versionsolana_version 属性在 Anchor.toml 中被移动到 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: 为 TokenMintAssociatedToken 账户添加 token_program 约束,以覆盖所需的 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 治理中的 Custom Instruction 创建提案 (#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 参数接收程序 lib 名称 (#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元数据程序中移除 (#2480)。

[0.27.0] - 2023-03-08

新特性

  • spl: 向 spl 元数据添加 MasterEditionAccount 账户反序列化 (#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: 向验证命令添加 --skip-build 选项 (#2387)。
  • client: 向 RequestBuilder 添加对多线程的支持:使用标志 --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)。
  • lang: 使用 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 种子生成 (#2128)。
  • lang: 账户关闭重新分配给系统程序并重新分配 (#2169)。
  • ts: 添加 SPL 程序的编码器 (#2143)。
  • ts: 添加 has_one 关系推断,因此通过 has_one 关系映射的账户不再需要提供 (#2160)。
  • ts: 在设置账户和检索公钥后设置参数的能力 (#2160)。
  • ts: 向构建器模式添加 .prepare() (#2160)。
  • spl: 添加 freeze_delegated_accountthaw_delegated_account 包装器 (#2164)。
  • ts: 向 AnchorProvider 方法添加费用支付者检查,因此如果费用支付者尚未设置,则 anchor 将钱包写为费用支付者 (#2186)。
  • ts: 添加嵌套 PDA 推断 (#2194)。
  • ts: 添加使用自定义解析器解析缺失账户的能力 (#2194)。
  • ts: 更新 anchor ts 使用的 Solana web3 库至版本 1.64.0 (#2220)。
  • lang: 更新 AccountsClose 以使其安全地手动调用 (#2209)。
  • lang: 更新仓库中的 Rust 版本为 1.62 (#2272)。
  • cli: 允许自定义集群配置 (#2271)。
  • ts: 添加可选标志以解析日志,以便在解码失败时抛出错误 (#2043)。
  • cli: 添加对 test.validator.geyser_plugin_config 的支持 (#2016)。
  • cli: 向 cli 添加 account 子命令 (#1923)。
  • cli: 向验证器参数添加 ticks_per_slot 选项 (#1875)。

修复

  • lang: 修复 IDL 中字节文本的解析 (#2261)。
  • lang: 修复字节字符串文字的 IDL seed 生成 (#2125)。
  • ts: 更新种子推断,以允许嵌套用户定义的结构体在种子中 (#2198)。
  • event: 修复同名的多个事件监听器 (#2165)。
  • lang: 防止付款人账户初始化为程序账户 (#2284)。
  • ts: 修复在 wallet 为 null 或 undefined 时抛出错误的改变 (#2303)。
  • ts: 修复 .fetchNullable() 使其能够处理仅持有余额的账户 (#2301)。
  • lang: 仅将公共枚举添加到 IDL (#2309)。
  • lang: 修复堆密集的错误映射 (#2313)。

破坏性更改

  • ts: 已从主 Anchor 包中移除 SPL 编码器 (#2155)。
  • lang: 从约束中移除 rent (#2265)。
  • spl: 从 associated_token::Create 中移除 rent (#2265)。
  • lang: 为代表指令的结构添加 DiscriminatorOwner 特性实现 (#1997)。
  • ts: @coral-xyz/borsh 包现在是 yarn mono-repo 的一部分 (#2290)。在构建 anchor 包之前,需要先构建 borsh 包,但在运行 yarn build 电脑包/anchor 时此过程应该自动进行,请见 #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: 添加 bt 别名分别对应于 buildtest (#1823)。
  • spl: 为 Mint 添加更多派生特性到 TokenAccount (#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: 为 SPL 关联的Token程序实现编码器 (#1939)。
  • ts: 当使用 NodeWallet.local() 时,缺少 ANCHOR_WALLET 变量的详细错误信息 (#1958)。
  • ts: 添加 MethodsBuilder#accountsStrict 以实现对 ix 账户输入的严格类型 (#2019)。
  • 更新 Solana 依赖项至 1.10.29 (#2027)。

修复

  • cli: 修复 anchor keys list 错误读取 target 目录 (#2063)。
  • cli: 将 overflow-checks 移入工作区 Cargo.toml,以便不会被编译器忽略 (#1806)。
  • lang: 修复在使用 initzero 时反序列化失败时缺少账户名称信息 (#1800)。
  • ts: 在 Provider 上公开钱包的公钥 (#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 被序列化为 null 而不是 undefined 在 IDL 中 (#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: 添加视图函数 (#1695).
  • avm: 新的 avm update 命令可以将 Anchor CLI 更新到最新版本 (#1670).
  • cli: 更新 js/ts 模板以使用新的 program.methods 语法 (#1732).
  • cli: 使用 anchor init 创建的工作区现在带有 prettier 格式化程序和包含的脚本 (#1741).
  • ts: 向方法构建器添加 pubkeys 函数以获取所有指令账户地址 (#1733).
  • ts: 从 error.ts 导出 LangErrorCodeLangErrorMessage (#1756).

修复

  • avm: 如果已在机器上安装,avm install 不再下载该版本 (#1670).
  • cli: 当使用 --skip-deploy 选项而没有 --skip-local-validator 选项时,如果已经有正在运行的验证器,anchor test 使其失败 (#1675).
  • lang: 如果账户长度小于识别符,在 (Account)Loader 的函数中返回适当的错误,而不是崩溃 (#1678).
  • cli: 将 @types/bn.js 添加到 cli 模板中的 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 中的密钥对 (#1470).
  • cli: 运行 anchor init 现在会为工作区初始化一个新的 git 仓库。可以通过 --no-git 标志禁用此功能 (#1605).
  • cli: 添加对 anchor idl fetch 的支持,可以在 anchor 工作区外使用 (#1509).
  • cli: [[test.validator.clone]] 还克隆了由 bpf 可升级加载程序拥有的程序数据账户 (#1481).
  • lang: 添加新的 AccountSysvarMismatch 错误代码以及 sysvars 的测试用例 (#1535).
  • lang: 使用 Solana mem syscall 替换 std::io::Cursor (#1589).
  • lang: 新增 require_neq, require_keys_neq, require_gtrequire_gte 比较宏 (#1622).
  • lang: 在指令数据中处理以 const 为大小的数组 (#1623).
  • spl: 添加对撤销指令的支持 (#1493).
  • ts: 向 Spl.token 工厂方法添加提供者参数 (#1597).

修复

  • ts: 修复了使用 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).
  • lang/ts: 事件现在使用 sol_log_data syscall 进行发射 (#1608).
  • lang: 移除使用 #[derive(Default)] 的空间计算 (#1519).
  • lang: 添加支持记录期望值和实际值及公钥的功能。添加 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). 如果 processed tx 的 skipPreflight 设置为 true,则不返回 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 选项以禁用引入的 lint 检查,以进行快速原型设计 (#1452) (#1482).

修复

  • ts: 允许 Option<T> 映射类型的可空类型 (#1428).

重大变更

  • lang: 强制标记为 mut 的初始化账户的付款人 (#1271).
  • lang: 所有与错误相关的代码现在位于错误模块中 (#1426).
  • lang: 使用 AccountInfoUncheckedAccount 类型时,需要提供文档注释 (#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: 改进账户字段到 Typescript 的类型映射,额外支持 Option<T>Vec<String> 类型 (#1393).

新功能

  • lang: 添加 seeds::program 约束以指定推导 PDA 时使用的 program_id (#1197).
  • lang: Context 现在有一个新的 bumps: BTree<String, u8> 参数,映射账户名到由账户上下文"找到"的 bump seed。这使得可以访问 bump seeds,而无需从客户端传递或在处理程序中重新计算它们 (#1367).
  • lang, ts: 自动推导 PDA 地址 (#1331).
  • ts: 当日志 websocket 遇到程序错误时,移除事件解析器中的错误日志 (#1313).
  • ts: 在程序客户端中添加新的 methods 命名空间,引入更符合人机工程学的构建 API (#1324).
  • ts: 添加注册表工具以获取最新的已验证构建 (#1371).
  • cli: 在 Anchor.toml 中通过 [[test.validator.account]] 显示 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 seeds (#1367).
  • lang: 提供 bump = <target> 目标的 init 现在会导致错误。仅在 init 时,必须使用不带目标的 bump 并在函数处理程序中通过 ctx.bumps.get("<pda-account-name") 访问种子。对于后续的种子约束(不带初始化),建议将 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 现在在不需要初始化时检查租金豁免 (#1250).
  • lang: 当使用 associated_token::authority 时,添加缺少的拥有者检查 (#1240).
  • ts: 为条件 workspaceWallet 导出添加类型声明 (#1137).
  • ts: 更改承诺消息 recentprocessedmaxfinalized (#1128).
  • ts: 修复 translateAddress,此问题会导致浏览器代码失败。现在使用 PublicKey 构造函数,而不是原型链构造函数名称检查,因为在代码压缩/混淆的情况下该检查不起作用 (#1138).
  • lang: 添加缺少的检查,以验证在 init_if_needed 时验证账户是 ATA 并且不需要初始化 (#1221).

新功能

  • lang: 向 Program 账户添加 programdata_address: Option<Pubkey> 字段。如果账户是由可升级 bpf 加载程序拥有的程序,则将填充该字段 (#1125).
  • lang,ts,ci,cli,docs: 更新 solana 工具链至版本 1.8.5 (#1133).
  • lang: 非 Anchor 程序的账户包装器不再需要实现 serialize 函数,因为现在有默认实现。同样,它们不再需要实现 try_deserialize,因为现在默认委托给 try_deserialize_unchecked (#1156).
  • lang: 向 Account<'a, T> 添加 set_inner 方法以便于更新 (#1177).
  • lang: 处理用 const 作为长度的数组 (#968).
  • ts: 向 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 模块中找到,但不再直接在根下。 已弃用的账户类型不再由预编译导入 (#1208).

[0.19.0] - 2021-12-08

修复

  • lang: 向 ProgramAccount 添加 deprecated 属性 (#1014).
  • cli: 将程序的 Cargo.toml 中的版本号添加到提取的 IDL 中 (#1061).
  • lang: 向 Loader 添加 deprecated 属性 (#1078).
  • lang: init_if_needed 属性现在确保给定属性(例如空间、拥有者、token::authority 等)在不需要初始化时进行验证 (#1096).

新功能

  • lang: 添加 ErrorCode::AccountNotInitialized 错误,以将账户有错误所有者的情况与账户不存在的情况分开 (#1024).
  • lang: 调用指令现在默认记录其名称。可以通过 no-log-ix-name 标志关闭此功能 (#1057).
  • lang: ProgramDataUpgradableLoaderState 现在可以作为泛型传入 Account。请参见 UpgradeableLoaderStateUpgradableLoaderState 也可以匹配以获取 ProgramData,但当使用 ProgramData 时,anchor 会为你处理序列化和检查,这确实是程序数据 (#1095).
  • ts: 如果输入了不正确的账户(即不是 pubkey 或字符串类型),则在客户端中添加更好的错误消息 (#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: 向 npm 包 @project-serum/anchor-cli 添加 oscpu 字段 (#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::freeze_authority 关键字以便初始化 (#835).
  • lang: 添加 AccountLoader 类型以支持包含 CPI 的零拷贝账户 (#792).
  • lang: 在 #[account(init_if_needed)] 关键字中添加允许初始化账户即使它已经创建的功能 (#906).
  • lang: 添加对原始约束的自定义错误支持 (#905).
  • lang, cli, spl: 更新 solana 工具链至 v1.8.0 (#886).
  • lang: 添加对 signermuthas_oneowner,原始约束和 address 的自定义错误支持 (#905, #913).

重大变更

  • lang: 标记为 #[account(signer)] 的账户约束现在在启用 "cpi" 功能时强制执行签名 (#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 标志 (#804).

修复

  • lang: 生成的 AccountMetas 现在在 Rust 客户端中正确设置 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 特性,所有 #[account] 结构自动实现 (#686).
  • lang: 检查可写的 ProgramAccount 以进行动态借用(仅限于 anchor-debug) (#681).

重大变更

  • lang: 所有程序现在必须通过 declare_id! 在源代码中定义其程序 id (#686).

[0.14.0] - 2021-09-02

新功能

  • lang: 忽略 Unnamed 结构,而不是发生恐慌 (#605).
  • lang: 为将 mint 账户初始化为 pdas 添加约束 #[account(init, seeds = [...], mint::decimals = <expr>, mint::authority = <expr>)] (#562).
  • lang: 为 AccountInfo 包装器添加 AsRef<AccountInfo> (#652).
  • lang: 通过删除 AccountInfo 克隆来优化 trait Key (#652).
  • cli, client, lang: 更新 solana 工具链至 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)] 现在在同一个指令内创建账户,以便于初始化 PDAs 一致。要保持 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 特性 (#641).
  • lang: ProgramAccountLoaderProgramStatetry_from 方法现在会额外接受一个 program_id: &Pubkey 参数 (#660).

[0.13.2] - 2021-08-11

修复

  • cli: 修复 anchor init 命令 "Workspace not found" 的回归 (#598).

[0.13.1] - 2021-08-10

新功能

  • cli: 在测试期间嵌入到创世纪的程序将显示程序日志 (#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 工具链 (#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 允许在测试命令中配置程序地址 (#554).
  • lang: IDL 现从整个 crate 中解析 (#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 宏用于指定返回错误代码的断言 (#483)。
  • lang: 允许在创建 PDA 时指定任意程序作为所有者 (#483)。
  • lang: 在账户约束中添加一个新的 bump 关键字,用于在 seeds 数组的末尾添加可选的向上种子。当与 两者 initseeds 一起使用时,程序执行 find_program_address 来断言给定的 bump 是规范的 bump (#483)。

修复

  • lang: 保留所有指令数据以备后备功能 (#483)。
  • ts: 创建关联账户时事件监听器未触发 (#356)。

[0.11.0] - 2021-07-03

功能

  • lang: 添加后备功能 (#457)。
  • lang: 添加旧状态账户鉴别标志的特性标志。对于那些在 v0.7.0 之前构建的程序,但希望使用最新的 Anchor 版本的人,这是一个临时标志。预计在未来的版本中将被删除 (#446)。
  • lang: 为账户添加通用支持 (#496)。

重大变更

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

[0.10.0] - 2021-06-27

功能

  • lang: 添加 #[account(address = <expr>)] 约束以断言账户地址 (#400)。
  • lang: 添加 #[account(init, token = <mint-target>, authority = <token-owner-target>...)] 约束以初始化作为程序派生地址的 SPL 代币账户。可以在通过 seedsassociated 初始化时使用 (#400)。
  • lang: 添加 associated_seeds! 宏以生成由 #[account(associated = <target>)] 账户签署的 CPI 签名者种子 (#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: 账户特征现在接受一个额外的 &[u8] 参数 (#386)。

[0.8.0] - 2021-06-10

功能

  • cli: 为构建命令添加 --program-name 选项以一次构建单个程序 (#362)。
  • cli, client: 从 str 解析自定义集群 URLs (#369)。
  • cli, client, lang: 更新 solana 工具链至 v1.7.1 (#368)。
  • ts: 指令解码和格式化 (#372)。
  • lang: 添加 #[account(close = <destination>)] 约束用于关闭账户并将租金豁免 lamports 发送至指定的目标账户 (#371)。

修复

  • lang: 允许通过在 CpiContext 上实现 ToAccountMetas 特征使用 remaining_accounts (#351)。

重大变更

  • lang, ts: 引入框架定义的错误代码,保留错误代码 0-300 给 Anchor,300 及以上用于用户定义的错误代码 (#354)。

[0.7.0] - 2021-05-31

功能

  • cli: 添加全局选项以覆盖 Anchor.toml 值 (#313)。
  • spl: 添加 SetAuthority 指令 (#307)。
  • spl: 添加初始化和关闭开放订单指令 (#245)。
  • lang: constraint = <expression> 被添加作为(现已废弃的)字符串文字约束的替代品 (#341)。
  • lang: 现在保留跨度信息,提供信息丰富的编译器错误消息 (#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] 账户鉴别标志的预图像为通过 "state:" 命名空间来进行 (#320)。
  • lang, ts: 将指令 sighash 的预图像的域分隔符更改为一个冒号 : 以与账户一致 (#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.Signer 替代已废弃的 web3.Account (#296)。
  • ts: 生成的 anchor.workspace 客户端现在可以通过 Anchor.toml 中的 [cluster.<slug>] 为每个网络进行定制 (#308)。
  • cli: 为测试命令添加 yarn 标志 (#267)。
  • cli: 为测试命令添加 --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: 添加对状态指令的支持 (#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 工具链至 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)。

[0.4.2] - 2021-04-10

功能

  • cli: 在测试时为 Anchor.toml 配置的钱包提供资金 (#164)。
  • spl: 添加用于 SPL 代币的 initialize_account 指令 (#166)。

[0.4.1] - 2021-04-06

  • cli: 版本可验证的 docker 构建器 (#145)。

[0.4.0] - 2021-04-04

功能

  • 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: 允许预加载状态 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: 允许没有构造函数或 impl 块(仅有特征实现)的状态结构 (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: 内部 crate 用于解析 Anchor eDSL,生成代码以及 IDL。
  • spl: anchor-spl crate 提供了 Anchor 程序的 CPI 客户端。
  • client: anchor-client crate 提供了 Anchor 程序的 Rust 客户端。
  • ts: @project-serum/anchor 包用于生成 TypeScript 客户端。
  • cli: 用于管理 Anchor 程序的命令行接口。
  • 原文链接: github.com/project-serum...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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