LogoAnchor 中文文档
Anchor 中文文档Anchor 更新

更新日志

Anchor 更新日志

版本 0 的语义版本控制与版本 1 及以上有所不同。次要版本将在有破坏性变更时增量更新,而补丁版本将在新功能添加时增量更新。


[0.30.1] - 2024-06-20

功能

  • idl: 允许使用 RUSTUP_TOOLCHAIN 环境变量重写 idl 构建工具链 (#2941)。
  • avm: 支持使用 AVM_HOME 环境变量自定义安装位置 (#2917)。
  • avm: 当达到 GitHub API 限制时优化 avm list (#2962)
  • idl, ts: 添加对关联代币账户的账户解析 (#2927)。
  • cli: 在 init 命令中添加 --no-install 选项 (#2945)。
  • lang: 为 Error 实现 TryFromIntError 以能够传播整数 转换错误 (#2950)。
  • idl: 添加转换旧版 IDL 的能力 (#2986)。
  • ts: 将 Anchor 错误代码提取到自己的包中 (#2983)。
  • cli: 在 upgrade 命令中添加额外的 solana 参数 (#2998)。
  • spl: 导出 spl-associated-token-account crate (#2999)。
  • lang: 支持使用 declare_program! 的旧版 IDL (#2997)。
  • cli: 添加 idl convert 命令 (#3009)。
  • cli: 添加 idl type 命令 (#3017)。
  • lang: 添加 anchor_lang::pubkey 宏以声明 Pubkey 常量值 (#3021)。
  • cli: 在初始构建时同步程序 ID (#3023)。
  • idl: 移除 anchor-syn 依赖 (#3030)。
  • lang: 向 declare_id!declare_program! 添加程序 ID 的 const (#3019)。
  • idl: 添加单独的规范 crate (#3036)。

修复

  • lang: 消除为令牌扩展代码生成而累积的变量分配 (#2913)。
  • ts: 修复 AnchorProvider.send*() 方法中不正确的 maxSupportedTransactionVersion (#2922)。
  • cli: 对于使用 anchor init 创建的新项目使用 npm 配置的默认许可证 (#2929)。
  • cli: 在 '无法读取密钥对文件' 错误中添加文件名 (#2932)。
  • idl: 修复生成外部类型的 idls 时项目的 Cargo.lock 路径解析 (#2946)。
  • idl: 修复外部类型解析时的潜在崩溃 (#2954)。
  • lang: 修复在指令参数中使用定义的类型与 declare_program! (#2959)。
  • lang: 修复在 declare_program! 中使用常量泛型 (#2965)。
  • lang: 修复在 declare_program! 中使用 Vec<u8> 类型 (#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: 修复在某些情况下无法使用定义类型作为泛型参数的 IDL (#3016)。
  • idl: 修复生成不支持的表达式 (#3033)。
  • idl: 修复在字段表达式中使用 address 约束 (#3034)。
  • lang: 修复在 declare_program! 中使用 bytemuckunsafe 账户序列化 (#3037)。

破坏性更改

[0.30.0] - 2024-04-15

功能

  • 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: 添加对 令牌扩展的支持 (#2789)。
  • lang: 从 Lamports trait 操作返回溢出错误 (#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 更改为 127.0.0.1,NodeJS 17 的 IP 解析更改为 IPv6 (#2725)。
  • lang: 在使用具有区分符的数据时消除临时 Vec 分配并将默认容量设为 256 字节 (#2691)。
  • lang: 允许在账户结构中定义自定义生命周期 (#2741)。
  • lang: 在设置返回数据时移除 try_to_vec 使用以减少堆内存使用 (#2744)
  • cli: 如果使用工具链重写时未安装 Solana 工具,则显示安装进度 (#2757)。
  • ts: 修复格式化枚举 (#2763)。
  • cli: 修复 migrate 命令在没有全局 ts-node 安装时无法工作 (#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: 使 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: 将可选账户的 bump 更改为 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

功能

  • 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: 将 anchor_lang::error::Error 的内部枚举进行 Box 优化以优化 anchor_lang::Result (#2600)。
  • ts: 为 Program.addEventListener 方法添加强类型支持 (#2627)。
  • syn: 添加 IdlBuild trait 以实现自定义类型的 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: 修复 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: 添加 metadata 包装器 approve_collection_authoritybubblegum_set_collection_sizeburn_edition_nftburn_nftrevoke_collection_authorityset_token_standardutilizeunverify_sized_collection_itemunverify_collection (#2430)
  • spl: 添加 token_program 约束以在 TokenMintAssociatedToken 账户中覆盖所需的 token_program 字段并在同一指令中使用 不同的令牌接口实现 (#2460)
  • cli: 添加对 Solidity 程序的支持。anchor initanchor new 接受选项 --solidity,而不是创建 rust 代码,创建 Solidity 代码。 anchor buildanchor test 相应地工作 (#2421)
  • bench: 添加计算单元使用的基准测试 (#2466)
  • cli: idl set-bufferidl set-authorityidl close 接受选项 --print-only。这以 base64 Borsh 兼容格式打印事务,但不发送到集群。它在 multsig 下管理权限时很有用, 例如,用户可以为 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 参数接受程序库名 (#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 弃用包装器 因为它已从代币元数据程序中移除 (#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: 向 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)。
  • lang: 使用 InterfaceInterfaceAccount 类型支持多个具有相同接口的程序 ,与 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: 删除废弃的账户类型:CpiAccountLoaderProgramAccount (#2375).
  • lang: 删除 stateinterface 属性 (#2285).
  • lang: 删除已经被 #[account(constraint = {})] 替代的废弃字面约束 (#2379).
  • lang: account(zero_copy)zero_copy 属性现在推导出 bytemuck::Podbytemuck::Zeroable 特性,而不是使用 unsafe impl (#2330). 这对类型施加了有用的限制,比如不能有填充字节,并且所有字段本身都是 Pod。参见 bytemuck::Pod 以获取详情。此更改需要在 cargo.toml 中添加 bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"]} 以支持你的项目。遗留应用程序仍可以使用 #[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 种子生成添加通过 impl 块解析 consts 的支持 (#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 方法添加 feePayer 检查,以便 anchor 在未设置费用支付者的情况下将提供者的钱包写入费用支付者 (#2186).
  • ts: 添加嵌套 PDA 推断 (#2194).
  • ts: 添加通过自定义解析程序解析缺失账户的功能 (#2194).
  • ts: 更新由 anchor ts 使用的 Solana web3 库至 version 1.64.0 (#2220).
  • lang: 更新 AccountsClose 以使其安全地手动调用 (#2209).
  • lang: 更新仓库中使用的 rust 版本至 1.62 (#2272).
  • cli: 允许自定义集群配置 (#2271).
  • ts: 为 parseLogs 添加可选标志,在解码失败时抛出错误 (#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: 修复引发错误的破坏性变化,当空或未定义钱包被使用时 (#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 单体仓库的一部分 (#2290). 在创建 anchor 包之前,需要首先构建 borsh 包,但在执行 yarn build 时,packages/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: 为 buildtest 添加 bt 别名 (#1823).
  • spl: 为 TokenAccount 添加更多派生特性至 Mint (#1818).
  • spl: 添加 sync_native 令牌程序 CPI 封装函数 (#1833).
  • cli: 允许通过 anchor run 向底层脚本传递参数 (#1914).
  • ts: 实现一个编码器用于系统程序 (#1920).
  • ts: 为编码/解码用户定义类型添加 program.coder.types (#1931).
  • client: 向 RequestBuilder 添加 send_with_spinner_and_config 函数 (#1926).
  • ts: 为 SPL 关联令牌程序实现一个编码器 (#1939).
  • 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 移动到工作区 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: 修复 IDL 中 returns 被序列化为 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: 添加视图函数 (#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: 当运行 anchor test 时,如果使用 --skip-deploy 选项,但未使用 --skip-local-validator 选项,而当前已有一个正在运行的验证者,则应使其失败 (#1675).
  • lang: 在 (Account)Loader 的函数中,如果账户的长度小于区分符,则返回适当的错误,而不是恐慌 (#1678).
  • cli: 在 cli 模板的 devDependencies 中添加 @types/bn.js (#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: 用一个自定义的 Write 实现替换 std::io::Cursor,该实现使用 Solana mem 系统调用 (#1589).
  • lang: 添加比较宏 require_neqrequire_keys_neqrequire_gtrequire_gte (#1622).
  • lang: 处理指令数据中带有 const 的数组 (#1623).
  • spl: 添加撤销指令的支持 (#1493).
  • ts: 将提供程序参数添加到 Spl.token 工厂方法 (#1597).

修复

  • ts: 修复在构建者函数中使用 methods 命名空间时类型严格性的丢失 (#1539).
  • spl: 更新 spl/governance 以使用新错误 (#1582).
  • client: 修复 ClusterFromStr 实现 (#1362).
  • lang: 再次实现 Key 以便在使用 pubkey 目标的 associated_token::* 约束时能够使用 (#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 系统调用发送 (#1608).
  • lang: 删除使用 #[derive(Default)] 的空间计算 (#1519).
  • lang: 添加用于记录期望和实际值及 pubkeys 的支持。 添加 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(回退到或使用原生 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).

修复

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

突破性变化

  • lang: 强制要求初始化的账户的付款人标记为 mut (#1271).
  • lang: 所有与错误相关的代码现在都在错误模块中 (#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_sourceProgramError 特别有用。 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)
  • 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: 为 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: 如果在指令账户对象中传入的某个值有问题(例如,不是公钥或字符串),则在 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::freeze_authority 关键字 (#835).
  • lang: 为支持 CPI 的 zero_copy 账户添加 AccountLoader 类型 (#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).

破坏性变更

  • 现在必须使用在 crate::cpi::accounts::* 模块中生成的帐户结构来使用 CpiContext 账户。这些结构对应于每个指令的账户上下文,但每个字段的类型都是 AccountInfo (#824).

[0.16.2] - 2021-09-27

功能

  • lang: 为 anchor test 添加 --detach 标志 (#770).
  • lang: 为在 #[derive(Accounts)] 中初始化关联 token 账户添加 associated_token 关键字 (#790).
  • cli: 允许为构建命令传递 cargo 标志 (#719).
  • cli: 允许为测试、验证和发布命令传递 cargo 标志 (#804).

修复

  • lang: 为 Rust 客户端生成的 AccountMeta 现在正确设置 isSigner 字段 (#762).

[0.16.1] - 2021-09-17

修复

  • lang: Signer 类型现在将 isSigner 设置为 true 在 IDL 中 (#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 结构,而不是导致 panic (#605).
  • lang: 为初始化铸币账户作为 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 创建的 bump (#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 命令中的“未找到工作区”回归 (#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 时动态获取租金系统变量 (#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: IDLs 现在从整个 crate 中解析 (#517).
  • spl: Dex 权限市场代理 (#519, #543).

破坏性变更

  • ts: 默认使用 hex 解码指令 (#547).
  • lang: CpiAccount::reload 修改现有结构,而不是返回一个新的结构 (#526).
  • cli: Anchor.toml 现在要求明确的 [scripts] 测试命令 (#550).- 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 程序的命令行接口。