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: 允许强制
init
和new
(#2698)。 - cli: 在
deploy
时添加可验证选项 (#2705)。 - cli: 允许在
anchor deploy
使用solana program deploy
命令传递参数 (#2709)。 - lang: 添加
InstructionData::write_to
实现 (#2733)。 - lang: 添加
#[interface(..)]
属性以重写指令区分符 (#2728)。 - ts: 为指令区分符重写添加
.interface(..)
方法 (#2728)。 - cli: 检查
anchor-lang
和 CLI 版本兼容性 (#2753)。 - ts: 添加缺失的 IDL PDA 种子类型 (#2752)。
- cli:
idl close
接受可选的--idl-address
参数 (#2760)。 - cli: 在 Anchor.toml 的
workspace.members
和workspace.exclude
中添加对简单通配符模式的支持 (#2785)。 - cli: 为
init
命令添加--test-template
选项 (#2805)。 - cli:
anchor test
能够运行多个命令 (#2799)。 - cli: 检查
@coral-xyz/anchor
包与 CLI 版本的兼容性 (#2813)。 - cli: 将包名作为程序名接收 (#2816)。
- cli: 添加仅构建和测试指定程序的能力 (#2823)。
- idl: 添加新的 IDL 规范 (#2824)。
- idl: 添加对
repr
的支持 (#2824)。 - idl: 添加对表达式求值的支持 (#2824)。
- idl: 添加在生成 IDL 时使用外部类型的支持 (#2824)。
- idl, ts: 添加单位和元组结构支持 (#2824)。
- idl, ts: 添加泛型支持 (#2824)。
- ts: 添加
accountsPartial
方法以保持旧的accounts
方法行为 (#2824)。 - ts: 将
AnchorProvider
构造函数的opts
参数设为可选 (#2843)。 - cli: 在
build
命令中添加--no-idl
标志 (#2847)。 - cli: 将优先费用添加到 idl 命令 (#2845)。
- ts: 向 MethodBuilder
preInstructions
方法添加prepend
选项 (#2863)。 - lang: 添加
declare_program!
宏 (#2857)。 - cli: 在 Anchor.toml 中将
solana-test-validator
配置的deactivate_feature
标志 (#2872)。 - idl: 添加常量的
docs
字段 (#2887)。 - idl: 存储其他集群的部署地址 (#2892)。
- lang: 添加
Event
工具类型以从字节中获取事件 (#2897)。 - lang, spl: 添加对 令牌扩展的支持 (#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 时
ahash
的stdsimd
功能编译错误 (#2867)。 - spl: 修复无法反序列化较新的 token 2022 扩展 (#2876)。
- spl: 移除
solana-program
依赖 (#2900)。 - spl: 使
TokenAccount
和Mint
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: 移除
associated
、account.associated
和account.associatedAddress
方法 (#2749)。 - cli:
idl upgrade
命令关闭 IDL 缓冲账户 (#2760)。 - cli: 从
init
命令中移除--jest
选项 (#2805)。 - cli: 在程序
Cargo.toml
中要求idl-build
功能 (#2824)。 - cli: 将
seeds
功能重命名为resolution
并默认启用 (#2824)。 - cli: 移除
idl parse
命令 (#2824)。 - idl: 更改 IDL 规范 (#2824)。
- syn: 移除
idl-parse
和seeds
功能 (#2824)。 - ts: 将
accounts
方法更改为不再接受可解析账户 (#2824)。 - ts:
Program
实例的所有内容使用 camelCase (#2824)。 - ts: 移除区分符函数 (#2824)。
- ts: 移除
Program
构造函数的programId
参数 (#2864)。 - idl, syn: 将 IDL 类型从
anchor-syn
crate 移动到新的 IDL crate (#2882)。 - idl: 在 IDL 枚举中添加
#[non_exhaustive]
(#2890)。
[0.29.0] - 2023-10-16
功能
- lang: 更改所有账户以引用
AccountInfo
(#2656)。 - lang: 为所有账户类型添加
get_lamports
、add_lamports
和sub_lamports
方法 (#2552)。 - client: 添加一个助手结构
DynSigner
以简化Client<C> where <C: Clone + Deref<Target = impl Signer>
与 Solana clap CLI 工具的使用,这些工具将Signer
加载为Box<dyn Signer>
(#2550)。 - lang: 允许 CPI 调用匹配接口而不固定程序 ID (#2559)。
- cli, lang: 通过编译添加 IDL 生成。
anchor build
仍然使用解析方法生成 IDL,使用anchor idl build
通过构建方法生成 IDL (#2011)。 - avm: 添加对
.anchorversion
文件的支持,以方便在不同版本的anchor-cli
之间切换 (#2553)。 - ts: 添加能力以独立于使用的大小写访问工作区程序,
例如
anchor.workspace.myProgram
、anchor.workspace.MyProgram
... (#2579)。 - bench: 为程序二进制大小添加基准测试 (#2591)。
- spl: 导出
mpl-token-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.upgradeable
、test.genesis.upgradeable
设置以支持测试可升级程序 (#2642)。 - cli, client, lang, spl: 将 Solana 工具链和依赖更新为
1.17.0
,1.16
仍然受支持 (#2645)。 - spl: 添加对备忘录程序的支持 (#2661)。
- avm: 从提交安装
anchor-cli
(#2659)。 - cli: 在
Anchor.toml
中添加toolchain
属性,以重写 Anchor 和 Solana 版本 (#2649)。
修复
- ts: 包不再依赖
assert
(#2535)。 - lang: 在
InitSpace
宏中对const
的支持 (#2555)。 - cli: 支持工作区继承 (#2570)。
- client: 使用 Solana
1.14
编译 (#2572)。 - cli: 修复
anchor build --no-docs
将文档添加到 IDL (#2575)。 - ts: 按需加载工作区程序,而不是一次性加载所有程序 (#2579)。
- lang: 修复
associated_token::token_program
约束 (#2603)。 - cli: 修复
anchor account
命令在工作区外崩溃 (#2620)。 - lang: IDL 命名枚举变体字段现在使用 camelCase,而不是 snake_case,与其他 IDL 类型一致 (#2633)。
- avm: 移除过度崩溃并优雅处理错误 (#2671)。
破坏性更改
- lang: 在上下文中切换至类型安全的 bumps (#2542)。
- syn:
idl
功能已被idl-build
、idl-parse
和idl-types
功能取代 (#2011)。 - syn: IDL 的
parse
方法现在返回Result<Idl>
而不是Result<Option<Idl>>
(#2582)。 - spl: 更新
mpl-token-metadata
依赖项,以使用客户端 SDK 而不是 程序 crate (#2632)。 - ts: 移除
base64-js
依赖 (#2635)。 - syn:
IdlTypeDefinitionTy
枚举有一个新的变体Alias
(#2637)。 - cli, client, lang, spl: Solana
1.14
不再受支持,最低要求的 Solana 版本为1.16.0
(#2645)。 - cli:
anchor_version
和solana_version
属性在Anchor.toml
中,以前用于可验证构建,已移入toolchain
中。 现在用于工作区中的所有命令,而不仅仅是可验证构建 (#2649)。
[0.28.0] - 2023-06-09
功能
- client: 添加
async
功能标志,以使用异步 anchor-client (#2488)。 - spl: 添加 metadata 包装器
approve_collection_authority
、bubblegum_set_collection_size
、burn_edition_nft
、burn_nft
、revoke_collection_authority
、set_token_standard
、utilize
、unverify_sized_collection_item
、unverify_collection
(#2430) - spl: 添加
token_program
约束以在Token
、Mint
和AssociatedToken
账户中覆盖所需的token_program
字段并在同一指令中使用 不同的令牌接口实现 (#2460) - cli: 添加对 Solidity 程序的支持。
anchor init
和anchor new
接受选项--solidity
,而不是创建 rust 代码,创建 Solidity 代码。anchor build
和anchor test
相应地工作 (#2421) - bench: 添加计算单元使用的基准测试 (#2466)
- cli:
idl set-buffer
、idl set-authority
和idl 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_id
、accounts
、ix_data
、remaining_accounts
(#2464) - cli: 修复在使用自定义密钥对进行部署后 IDL 中不正确的
metadata.address
生成 (#2485) - cli: IDL 命令在付款人没有资金支付事务费用时不再挂起 (#2492)
- cli: 修复
anchor new
未更新Anchor.toml
(#2516)。 - client, lang, spl: 允许更广泛的依赖项版本以减少依赖项问题 (#2524)。
破坏性更改
- lang: 打算用于内部使用的标识符(
program_id
、accounts
、ix_data
、remaining_accounts
)已重新命名为带有__
前缀 (#2464) - spl: 移除
metadata::create_metadata_account_v2
弃用包装器 因为它已从代币元数据程序中移除 (#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: 使用
reqwest
的rustls-tls
功能,以便用户无需安装 OpenSSL (#2385)。 - ts: 添加
VersionedTransaction
支持。Provider
类和Wallet
接口中的方法现在使用参数tx: Transaction | VersionedTransaction
(#2427)。 - cli: 添加
--arch sbf
选项来使用cargo build-sbf
编译程序 (#2398)。 - lang: 使用
Interface
和InterfaceAccount
类型支持多个具有相同接口的程序 ,与 token-2022 相关 (#2386)。
修复- ts: 使 AccountClient.fetchMultiple
的返回类型与正在获取的账户类型匹配 (#2390)
- cli: 在 read_all_programs() 中不重新生成 idl。 (#2332).
- ts: 如果没有
signers
被提供,provider.simulate
将以sigVerify: false
发送事务 (#2331). - cli: 失败的命令将返回正确的退出状态。 (#2370).
- idl: 更新 IDL 程序以使用非弃用的账户类型 (#2365).
- ts: 枚举字段没有从 snake_case 转换为 camelCase (#2378).
- lang/cli: 更新至 solana-program 版本 1.14.16 和 rust 版本 1.60,似乎仍然与 1.15 CLI 不兼容 (#2420).
突破性变化
- lang: 删除废弃的账户类型:
CpiAccount
、Loader
和ProgramAccount
(#2375). - lang: 删除
state
和interface
属性 (#2285). - lang: 删除已经被
#[account(constraint = {})]
替代的废弃字面约束 (#2379). - lang:
account(zero_copy)
和zero_copy
属性现在推导出bytemuck::Pod
和bytemuck::Zeroable
特性,而不是使用unsafe impl
(#2330). 这对类型施加了有用的限制,比如不能有填充字节,并且所有字段本身都是Pod
。参见 bytemuck::Pod 以获取详情。此更改需要在cargo.toml
中添加bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"]}
以支持你的项目。遗留应用程序仍可以使用#[account(zero_copy(unsafe))]
和#[zero_copy(unsafe)]
以获得旧行为。 - ts: 删除
createProgramAddressSync
、findProgramAddressSync
(现在在@solana/web3.js
中可用),并将associatedAddress
更新为同步 (#2357).
[0.26.0] - 2022-12-15
新特性
- cli: 为
anchor test
添加--run
选项,以便运行一部分测试套件 (#1828). - client: 向 RequestBuilder 添加
transaction
函数 (#1958). - spl: 添加
create_metadata_accounts_v3
和set_collection_size
封装 (#2119). - spl: 添加
MetadataAccount
账户反序列化。 (#2014). - spl: 添加
update_primary_sale_happened_via_token
封装 (#2173). - spl: 添加
sign_metadata
和remove_creator_verification
封装 (#2175). - spl: 添加
initialize_account3
和initialize_mint2
(#2265). - spl: 将
serum-dex
更改为openbook-dex
(#2308). - lang: 为 IDL PDA 种子生成添加通过 impl 块解析 consts 的支持 (#2128).
- lang: 账户关闭重新分配给系统程序并重新分配 (#2169).
- ts: 为 SPL 程序添加编码器 (#2143).
- ts: 添加
has_one
关系推断,因此通过 has_one 关系映射的账户不再需要提供 (#2160). - ts: 添加在设置账户并检索公钥后设置参数的能力 (#2160).
- ts: 添加
.prepare()
到构建模式 (#2160). - spl: 添加
freeze_delegated_account
和thaw_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: 为表示指令的结构体添加
Discriminator
和Owner
特性实现 (#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: 添加
realloc
、realloc::payer
和realloc::zero
作为程序帐户的新约束组 (#1986). - lang: 为
anchor_lang::Error
添加PartialEq
和Eq
(#1544). - cli: 为
anchor publish
添加--skip-build
选项 (#1786). - cli: 为
anchor deploy
添加--program-keypair
选项 (#1786). - cli: 向 cli 模板添加编译优化 (#1807).
- cli:
build
现在将文档添加到 idl。这可以通过--no-docs
关闭 (#1561). - cli: 为
build
和test
添加b
和t
别名 (#1823). - spl: 为
TokenAccount
添加更多派生特性至Mint
(#1818). - spl: 添加
sync_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: 修复反序列化失败时丢失账户名称信息的问题
使用
init
或zero
(#1800). - ts: 在 Provider 中暴露钱包的 publickey (#1845).
突破性变化
- ts: 将
BROWSER
环境变量更改为ANCHOR_BROWSER
(#1233). - ts: 将事务签名添加到
EventCallback
参数 (#1851). - ts: 将
EventParser#parseLogs
的实现更改为生成器而不是回调函数 (#2018). - lang: 在
Accounts::try_accounts
中添加一个新的&mut reallocs: BTreeSet<Pubkey>
参数 (#1986).
[0.24.2] - 2022-04-13
修复
- lang: 修复 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
导出LangErrorCode
和LangErrorMessage
(#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_neq
、require_keys_neq
、require_gt
和require_gte
(#1622). - lang: 处理指令数据中带有 const 的数组 (#1623).
- spl: 添加撤销指令的支持 (#1493).
- ts: 将提供程序参数添加到
Spl.token
工厂方法 (#1597).
修复
- ts: 修复在构建者函数中使用
methods
命名空间时类型严格性的丢失 (#1539). - spl: 更新
spl/governance
以使用新错误 (#1582). - client: 修复
Cluster
的FromStr
实现 (#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
中的send
和simulate
函数,以便它们使用Wallet.signTransaction
的返回值 (#1527).
突破性变化
- ts: 将
transaction
、instruction
、simulate
和rpc
程序命名空间标记为已弃用,以支持methods
(#1539). - ts: 不再允许在
methods#accounts()
中手动设置全局可解析程序公共密钥。 (#1548 - lang/ts: 事件现在使用
sol_log_data
系统调用发送 (#1608). - lang: 删除使用
#[derive(Default)]
的空间计算 (#1519). - lang: 添加用于记录期望和实际值及 pubkeys 的支持。 添加
require_eq
和require_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
设置为true
的processed
tx,不返回AnchorError
(回退到或使用原生 Solana 库错误)。
[0.22.1] - 2022-02-28
修复
[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_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)
- 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:
ProgramData
和UpgradableLoaderState
现在可以作为泛型传递给Account
。请参见 UpgradeableLoaderState。UpgradableLoaderState
也可以被匹配以获取ProgramData
,但是当使用ProgramData
时,Anchor 为你执行序列化和检查它确实是程序数据 (#1095). - ts: 如果在指令账户对象中传入的某个值有问题(例如,不是公钥或字符串),则在 ts 客户端中提供更好的错误消息 (#1098).
- ts: 将输入
postInstructions
和preInstructions
作为替换 (现在已弃用的)instructions
(#1007). - ts: 将
getAccountInfo
辅助方法添加到账户命名空间/客户端 (#1084).
破坏性变更
- lang, ts: 错误代码已映射到新编号,以允许每个命名空间拥有更多错误 (#1096).
[0.18.2] - 2021-11-14
- cli: 用局部的替换全局 JavaScript 依赖项安装。
功能
- lang: 为系统程序拥有的通用钱包地址或账户类型添加
SystemAccount<'info>
(#954).
修复
- cli: 修正 NODE_OPTIONS 中的 DNS (#928).
- cli: 在
idl parse
子命令中输出 TypeScript IDL (#941). - cli: 将字段
os
和cpu
添加到 npm 包@project-serum/anchor-cli
(#976). - cli: 允许为 TypeScript IDL 指定输出目录 (#940).
破坏性变更
- spl: 将权限市场移至 dex 存储库 (#962).
[0.18.0] - 2021-10-24
功能
- cli: 在 Anchor.toml 中为
solana-test-validator
添加配置选项支持 (#834). - cli:
target/types
目录现在在构建时创建,以存储每个程序的 IDL 的 TypeScript 类型文件 (#795). - ts:
Program<T>
现在可以使用 IDL 类型 (#795). - lang: 为
#[derive(Accounts)]
中的铸币初始化添加mint::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: 为
signer
、mut
、has_one
、owner
、原始约束和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
类型以替代ProgramAccount
和CpiAccount
,这两个均已弃用 (#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
已从Loader
、ProgramAccount
和CpiAccount
中移除,并用try_from_unchecked
替换 (#641). - lang: 移除
AccountsInit
特性 (#641). - lang:
ProgramAccount
、Loader
和ProgramState
的try_from
方法现在接受一个额外的program_id: &Pubkey
参数 (#660).
[0.13.2] - 2021-08-11
修复
- cli: 修正
anchor init
命令中的“未找到工作区”回归 (#598).
[0.13.1] - 2021-08-10
功能
- cli: 测试中嵌入的程序将在其产生程序日志 (#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 程序的命令行接口。