这段内容是关于一个 anchor 开源项目的变更日志,详细记录了每个版本的显著变化,包括新特性、修复和破坏性变化。文档按版本组织,提供了每个版本的发布日期,以及每个版本内的具体更改和功能。内容清晰且具有层次结构,适合开发者跟踪项目的演变。
对该项目的所有显著更改都将在此文件中记录。
格式基于 Keep a Changelog, 本项目遵循 语义版本控制。
注意: 语义版本控制的版本 0 的处理方式与版本 1 及以上有所不同。 在发生破坏性更改时,将增加小版本号,功能更新时将增加修补版本号。
Provider
在帐户解析器中需要 publicKey 而不是 wallet (#3613)solanafoundation/anchor
替换 backpackapp/build
Docker 镜像 (#3619).solana_account_decoder
依赖在 anchor 客户端中公有 (#3455).Provider.sendAndConfirm
添加可选的 options.blockhash
(#3070).Program.addEventListener
添加可选的 commitment
参数 (#3052).cargo
参数传递给 IDL 生成 (#3059).idl-build
特性错误用法的检查 (#3061).prelude
导出 Discriminator
特质 (#3075).Account
实用类型以从字节获取帐户 (#3091).declare_program!
中添加不支持 8 字节 discriminator (#3103).ThreadSafeSigner
特质公有 (#3107).dispatch
函数以支持动态 discriminators (#3104).try_entry
函数中移除备用函数快捷方式 (#3109).withdraw_withheld_tokens_from_accounts
指令 (#3128).Provider
接口添加可选的 wallet
属性 (#3130).anchor-spl/idl-build
,则发出警告 (#3133).mock
特性添加 internal_rpc
方法 (#3135).#[instruction]
属性 proc-macro 以覆盖默认指令 discriminators (#3137).#[account]
中使用关联的 discriminator 常量而不是硬编码 (#3144).#[account]
属性添加 discriminator
参数 (#3149).#[event]
属性添加 discriminator
参数 (#3152).test
命令添加 --no-idl
选项 (#3175).burn_checked
、mint_to_checked
和 approve_checked
指令 (#3186).solana_version
为 >= 1.18.19
时迁移到 agave-install
(#3185).IdlBuilder
(#3188).clean
命令也删除 .anchor
目录 (#3192).#[interface]
属性 (#3195).LazyAccount
(#3194).solana-program
依赖时发出警告 (#3250).idl build
命令时检查 idl-build
特性是否存在 (#3273).idl build
命令时,如果只有一个程序则构建 IDL (#3275).idl build
命令添加缩写别名 (#3283).idl convert
命令添加 --program-id
选项 (#3309).declare_program!
中生成常量文档 (#3311).install
和 list
命令添加缩写别名 (#3326).init
命令中添加可选的 package-manager
标志以设置 Anchor.toml 中的包管理器字段 (#3328).zero
约束冲突的帐户 discriminators (#3365).--max-retries
选项到 deploy
命令 (#3354).anchor-debug
特性 (#3511).declare-program!
中的 align
repr 支持 (#3056).getrandom
依赖 (#3072).InitSpace
支持无名和单位结构体 (#3084).owner
约束与 Box
ed 帐户 (#3087).--no-idl
选项则跳过 IDL 检查 (#3093).--locked
参数的安装 (#3143).crypto-hash
依赖 (#3171).view
方法的错误消息 (#3177).arrayref
依赖 (#3201).address
约束 (#3216).Program
中使用完整路径类型 (#3228).try_accounts
的堆栈使用 (#2939).cfg
属性 (#2339).ANCHOR_LOG
记录输出并改善构建错误消息 (#3284).declare_program!
时的常量字节声明 (#3287).declare_program!
(#3290).engines.node
至 >= 17
(#3301).rustc 1.79.0
(#3315).shell
命令失败 (#3351).cpi
特性指令未考虑到 discriminator 覆盖 (#3376).verify
期间避免额外的 IDL 生成 (#3398).zero
帐户唯一 (#3409).zero
帐户与 init
帐户反向求以消除重复 (#3422).provider.cluster
(#3428).workspace
加载名称中包含数字的程序 (#3450).declare_program!
中修复获取 IDL 时的潜在恐慌 (#3458).program::seed
解析 (#3474).declare_program!
中向类型别名定义添加 derive
和 repr
(#3504).std::process::exit
的使用 (#3544).seeds::program
中使用 Pubkey
常量 (#3559).declare_program!
中没有帐户的指令导致的编译错误 (#3567).seeds::program
中使用账户或参数值 (#3570).declare_program!
中将 data
用作指令参数名称 (#3574).anchor.workspace
模板中使用 camelCase 作为程序名称 (#3581).hash
特性中移除 bpf
目标支持 (#3078).RequestBuilder
添加 tokio
支持与 async
特性 (#3057).EventData
特质 (#3083).async_rpc
方法 (#3053).zero
约束时要求实现 Discriminator
特质 (#3118).DISCRIMINATOR_SIZE
常量 (#3120).#[account]
属性参数不再将标识符解析为命名空间 (#3140).token_program_id
重命名为 program_id
(#3076).Discriminator
特质中移除 discriminator
方法 (#3163).node
升级至 20.16.0 LTS (#3179).Program
构造函数的 idl
参数类型更改为 any
(#3181).borsh 0.9
支持 (#3199).typescript
至 5.5.4
并移除 SimulateResponse
的泛型参数 (#3221).StateCoder
(#3224).warp_slot
(#3235).EventIndex
(#3244).dex
特性 (#3257).typescript
版本升级至 v5 (#3480).snake-case
依赖 (#3507).RUSTUP_TOOLCHAIN
环境变量覆盖 idl 构建工具链 (#2941).AVM_HOME
环境变量自定义安装位置 (#2917).avm list
(#2962).init
命令添加 --no-install
选项 (#2945).Error
实现 TryFromIntError
以传播整数转换错误 (#2950).upgrade
命令添加额外的 solana 参数 (#2998).spl-associated-token-account
crate (#2999).declare_program!
的遗留 IDLs (#2997).idl convert
命令 (#3009).idl type
命令 (#3017).anchor_lang::pubkey
宏用于声明 Pubkey
常量值 (#3021).anchor-syn
依赖 (#3030).const
添加到 declare_id!
和 declare_program!
(#3019).AnchorProvider.send*()
方法中的 maxSupportedTransactionVersion
不正确 (#2922).anchor init
创建的新项目使用 npm 配置的默认许可证 (#2929).Cargo.lock
路径解析 (#2946).declare_program!
(#2959).declare_program!
的问题 (#2965).Vec<u8>
类型与 declare_program!
的问题 (#2966).ProgramError::ArithmeticOverflow
未找到错误 (#2975).declare_program!
(#2967).declare_program!
生成指令返回类型 (#2977).unexpected_cfgs
构建警告 (#2992).declare_program!
中使元组结构字段公有 (#2994).rust-version
(#3000).address
约束 (#3034).bytemuckunsafe
帐户序列化与 declare_program!
的问题 (#3037). 请参阅 Anchor 0.30 版本说明 以获取有关如何更新的总体概述。
init
和 new
(#2698).deploy
时添加可验证选项 (#2705).anchor deploy
命令添加对基本 solana program deploy
命令的参数的支持 (#2709).InstructionData::write_to
实现 (#2733).#[interface(..)]
属性以覆盖指令 discriminator (#2728)..interface(..)
方法 (#2728).anchor-lang
和 CLI 版本的兼容性 (#2753).idl close
接受可选的 --idl-address
参数 (#2760).workspace.members
和 workspace.exclude
中添加对简单通配符模式的支持 (#2785).init
命令添加 --test-template
选项 (#2805).anchor test
能够运行多个命令 (#2799).@coral-xyz/anchor
包和 CLI 版本的兼容性 (#2813).repr
的支持 (#2824).accountsPartial
方法以保持旧的 accounts
方法行为 (#2824).AnchorProvider
构造函数的 opts
参数可选 (#2843).build
命令添加 --no-idl
标志 (#2847).preInstructions
方法添加 prepend
选项 (#2863).declare_program!
宏 (#2857).solana-test-validator
配置添加 deactivate_feature
标志 (#2872).docs
字段 (#2887).Event
实用类型以从字节获取事件 (#2897).Lamports
特性的操作返回溢出错误 (#2907). new_from_array
方法到 Hash
(#2682)。resolver = "2"
) (#2676)。Anchor.toml
中使用用户特定路径的 provider.wallet
(#2696)。anchor_version
覆盖 (#2704)。shmem
特性时的编译问题 (#2722)。localhost
更改为 127.0.0.1
,NodeJS 17 的 IP 解析方法改变为 IPv6 (#2725)。try_to_vec
的使用,以减少堆内存的使用 (#2744)。ts-node
安装时 migrate
命令无法正常工作 (#2767)。parse_logs_response
,以防止在日志中存在超过一个外部指令时发生崩溃 (#2856)。ahash
的 stdsimd
特性编译错误 (#2867)。solana-program
依赖 (#2900)。TokenAccount
和 Mint
可 Copy
(#2904)。cargo build-sbf
成为默认的构建命令 (#2694)。overflow-checks
标志 (#2716)。anchor-deprecated-state
特性 (#2717)。CLOSED_ACCOUNT_DISCRIMINATOR
(#2726)。Option<u8>
而不是 u8
(#2730)。shared-memory
程序 (#2747)。associated
、account.associated
和 account.associatedAddress
方法 (#2749)。idl upgrade
命令关闭 IDL 缓冲账户 (#2760)。init
命令中移除 --jest
选项 (#2805)。Cargo.toml
中要求 idl-build
特性 (#2824)。seeds
特性重命名为 resolution
并默认启用 (#2824)。idl parse
命令 (#2824)。idl-parse
和 seeds
特性 (#2824)。accounts
方法不再接受可解析账户 (#2824)。Program
实例对所有内容使用 camelCase (#2824)。Program
构造函数的 programId
参数 (#2864)。anchor-syn
crate 移动到新 IDL crate (#2882)。#[non_exhaustive]
(#2890)。请查看 Anchor 0.29 发布说明 获取更新的高层概述。
AccountInfo
(#2656)。get_lamports
、add_lamports
和 sub_lamports
方法 (#2552)。DynSigner
以简化 Client<C> where <C: Clone + Deref<Target = impl Signer>
的使用,配合 Solana clap CLI 工具将 Signer
加载为 Box<dyn Signer>
(#2550)。anchor build
仍然使用解析方法生成 IDLs,使用 anchor idl build
使用构建方法生成 IDLs (#2011)。.anchorversion
文件的支持,以便在不同版本的 anchor-cli
之间切换 (#2553)。anchor.workspace.myProgram
、anchor.workspace.MyProgram
... (#2579)。mpl-token-metadata
crate (#2583)。TokenRecordAccount
用于 pNFTs (#2597)。anchor_lang::error::Error
的内枚举放入 Box
中,以优化 anchor_lang::Result
(#2600)。Program.addEventListener
方法添加强类型支持 (#2627)。IdlBuild
特性以实现对自定义类型的 IDL 支持 (#2629)。idl-build
特性。使用 anchor-spl
时,如果未启用此特性,则 IDL 构建方法将无法工作 (#2629)。Anchor.toml
中添加 test.upgradeable
、test.genesis.upgradeable
设置,以支持测试升级程序 (#2642)。1.17.0
,1.16
仍受支持 (#2645)。anchor-cli
(#2659)。Anchor.toml
中添加 toolchain
属性以覆盖 Anchor 和 Solana 版本 (#2649)。assert
(#2535)。InitSpace
宏中支持 const
(#2555)。1.14
编译 (#2572)。anchor build --no-docs
在 IDL 中添加文档 (#2575)。associated_token::token_program
约束 (#2603)。anchor account
命令在非工作区外崩溃 (#2620)。idl
特性已被 idl-build
、idl-parse
和 idl-types
特性替代 (#2011)。parse
方法现在返回 Result<Idl>
而不是 Result<Option<Idl>>
(#2582)。mpl-token-metadata
依赖关系以使用客户端 SDK,而不是程序 crate (#2632)。base64-js
依赖 (#2635)。IdlTypeDefinitionTy
枚举有一个新变体 Alias
(#2637)。1.14
不再受支持,最低要求的 Solana 版本为 1.16.0
(#2645)。anchor_version
和 solana_version
属性在 Anchor.toml
中被移动到 toolchain
内,它们现在用于工作区中的所有命令,而不仅仅是可验证构建 (#2649)。async
特性标志以使用异步 anchor-client (#2488)。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)。Token
、Mint
和 AssociatedToken
账户添加 token_program
约束,以覆盖所需的 token_program
字段,并在同一指令中使用不同的Token接口实现 (#2460)。anchor init
和 anchor new
接受 --solidity
选项,创建 Solidity 代码而不是 Rust。anchor build
和 anchor test
相应工作 (#2421)。idl set-buffer
、idl set-authority
和 idl close
接受 --print-only
选项。它以 base64 Borsh 兼容格式打印交易,但不发送到集群。当在多签名下管理权限时,这是有帮助的,例如,用户可以为 SPL 治理中的 Custom Instruction
创建提案 (#2486)。emit_cpi!
和 #[event_cpi]
宏(在 event-cpi
特性标志后面)以将事件日志存储在交易元数据中 (#2438)。keys sync
命令以同步程序 ID 声明 (#2505)。1.16.0
并指定最大版本为 <1.17.0
(#2512)。anchor deploy
命令的 --program-name
参数接收程序 lib 名称 (#2519)。AccountClient
类型为其适当的账户类型 (#2440)。program_id
、accounts
、ix_data
、remaining_accounts
(#2464)。metadata.address
生成不正确的问题 (#2485)。anchor new
未更新 Anchor.toml
(#2516)。__
前缀重命名为内部使用的标识符 (program_id
、accounts
、ix_data
、remaining_accounts
) (#2464)。metadata::create_metadata_account_v2
被弃用的包装器,因为它已从Token元数据程序中移除 (#2480)。MasterEditionAccount
账户反序列化 (#2393)。InitSpace
派生宏以在初始化账户时自动计算空间 (#2346)。env
选项 (#2325)。idl close
命令以关闭程序的 IDL 账户 (#2329)。idl init
现在支持非常大的 IDL 文件 (#2329)。transfer_checked
函数 (#2353)。approve_checked
函数 (#2401)。--skip-build
选项 (#2387)。--multithreaded
(#2321)。async_rpc
方法,返回非阻塞的 Solana RPC 客户端 (#2322)。reqwest
的 rustls-tls
特性,以便用户无需安装 OpenSSL (#2385)。VersionedTransaction
支持。Provider
类和 Wallet
接口中的方法现在使用参数 tx: Transaction | VersionedTransaction
(#2427)。--arch sbf
选项以使用 cargo build-sbf
编译程序 (#2398)。Interface
和 InterfaceAccount
类型支持具有相同接口的多个程序,相关于 token-2022 (#2386)。AccountClient.fetchMultiple
的返回类型以匹配正在获取的账户类型 (#2390)。signers
,provider.simulate
将发送交易时设置 sigVerify: false
(#2331)。CpiAccount
、Loader
和 ProgramAccount
(#2375)。state
和 interface
属性 (#2285)。#[account(constraint = {})]
替代 (#2379)。account(zero_copy)
和 zero_copy
属性现在衍生 bytemuck::Pod
和 bytemuck::Zeroable
特性,而不再使用 unsafe impl
(#2330)。这对类型施加了有益的限制,例如不具有填充字节,且所有字段本身都是 Pod
。有关详细信息,请参阅 bytemuck::Pod。此更改需要将 bytemuck = { version = "1.4.0", features = ["derive", "min_const_generics"]}
添加到你的 cargo.toml
。遗留应用程序仍可以使用 #[account(zero_copy(unsafe))]
和 #[zero_copy(unsafe)]
来获取旧行为。createProgramAddressSync
、findProgramAddressSync
(现在可以在 @solana/web3.js
中使用)并将 associatedAddress
更新为同步 (#2357)。anchor test
添加 --run
以运行测试套件的子集 (#1828)。transaction
函数 (#1958)。create_metadata_accounts_v3
和 set_collection_size
包装器 (#2119)。MetadataAccount
账户反序列化 (#2014)。update_primary_sale_happened_via_token
包装器 (#2173)。sign_metadata
和 remove_creator_verification
包装器 (#2175)。initialize_account3
和 initialize_mint2
(#2265)。serum-dex
更改为 openbook-dex
(#2308)。has_one
关系推断,因此通过 has_one
关系映射的账户不再需要提供 (#2160)。.prepare()
(#2160)。freeze_delegated_account
和 thaw_delegated_account
包装器 (#2164)。AnchorProvider
方法添加费用支付者检查,因此如果费用支付者尚未设置,则 anchor 将钱包写为费用支付者 (#2186)。AccountsClose
以使其安全地手动调用 (#2209)。test.validator.geyser_plugin_config
的支持 (#2016)。account
子命令 (#1923)。ticks_per_slot
选项 (#1875)。seed
生成 (#2125)。.fetchNullable()
使其能够处理仅持有余额的账户 (#2301)。rent
(#2265)。associated_token::Create
中移除 rent
(#2265)。Discriminator
和 Owner
特性实现 (#1997)。@coral-xyz/borsh
包现在是 yarn mono-repo 的一部分 (#2290)。在构建 anchor 包之前,需要先构建 borsh 包,但在运行 yarn build
电脑包/anchor 时此过程应该自动进行,请见 #2299 和 #2306。Optional<Account<'info, T>>
。不应影响现有程序,但可能为使用 anchor 生成的 IDL 的工具带来破坏性更改。 #2101。@project-serum/anchor
切换到 @coral-xyz/anchor
包 #2318。realloc
、realloc::payer
和 realloc::zero
作为程序账户的新约束组 (#1986)。anchor_lang::Error
添加 PartialEq
和 Eq
(#1544)。anchor publish
添加 --skip-build
(#1786)。anchor deploy
添加 --program-keypair
(#1786)。build
现在将文档添加到 idl。 可以通过 --no-docs
关闭 (#1561)。b
和 t
别名分别对应于 build
和 test
(#1823)。Mint
添加更多派生特性到 TokenAccount
(#1818)。sync_native
Token程序 CPI 包装函数 (#1833)。anchor run
将参数传递给基础脚本 (#1914)。program.coder.types
以进行编码/解码用户定义类型 (#1931)。send_with_spinner_and_config
函数 (#1926)。NodeWallet.local()
时,缺少 ANCHOR_WALLET
变量的详细错误信息 (#1958)。MethodsBuilder#accountsStrict
以实现对 ix 账户输入的严格类型 (#2019)。anchor keys list
错误读取 target
目录 (#2063)。overflow-checks
移入工作区 Cargo.toml
,以便不会被编译器忽略 (#1806)。init
或 zero
时反序列化失败时缺少账户名称信息 (#1800)。BROWSER
环境变量更改为 ANCHOR_BROWSER
(#1233).EventCallback
参数 (#1851).EventParser#parseLogs
的实现为生成器,而不是回调函数 (#2018).Accounts::try_accounts
添加新的 &mut reallocs: BTreeSet<Pubkey>
参数 (#1986).returns
被序列化为 null
而不是 undefined
在 IDL 中 (#1782).Test.toml
包含一个尚不存在的相对路径时 anchor build
失败的问题,因为它是由 anchor build
创建的 (#1772).AnchorProvider
类 (#1770).avm update
命令可以将 Anchor CLI 更新到最新版本 (#1670).program.methods
语法 (#1732).anchor init
创建的工作区现在带有 prettier
格式化程序和包含的脚本 (#1741).pubkeys
函数以获取所有指令账户地址 (#1733).error.ts
导出 LangErrorCode
和 LangErrorMessage
(#1756).avm install
不再下载该版本 (#1670).--skip-deploy
选项而没有 --skip-local-validator
选项时,如果已经有正在运行的验证器,anchor test
使其失败 (#1675).(Account)Loader
的函数中返回适当的错误,而不是崩溃 (#1678).@types/bn.js
添加到 cli 模板中的 devDependencies
(#1712).avm install
完成后切换到新安装的版本 (#1670).spl_token
crate (#1665).Program
类型现在仅按需反序列化 programdata_address
(#1723).Provider
变为接口并调整其签名,添加 AnchorProvider
实现类 (#1707).token::burn
中将 "to" 更改为 "from" (#1080).anchor clean
命令,功能与 cargo clean
相同,但保留 target/deploy
中的密钥对 (#1470).anchor init
现在会为工作区初始化一个新的 git 仓库。可以通过 --no-git
标志禁用此功能 (#1605).anchor idl fetch
的支持,可以在 anchor 工作区外使用 (#1509).AccountSysvarMismatch
错误代码以及 sysvars 的测试用例 (#1535).std::io::Cursor
(#1589).require_neq
, require_keys_neq
, require_gt
和 require_gte
比较宏 (#1622).Spl.token
工厂方法添加提供者参数 (#1597).methods
命名空间时发生的严格类型丢失的问题 (#1539).spl/governance
以使用新错误 (#1582).Cluster
的 FromStr
实现 (#1362).Pubkey
实现 Key
,以便 associated_token::*
约束可以再次使用 pubkey 目标 (#1601).#[error_code]
仅通过导入 anchor_lang::error_code
工作 (#1610).spl-token
编码器账户解析 (#1604).yarn
安装失败则回退到 npm install
(#1643).owner = <target>
不编译的错误,该错误由于缺少类型注释 (#1648).provider.ts
中的 send
和 simulate
函数,使它们使用 Wallet.signTransaction
的返回值 (#1527).transaction
、instruction
、simulate
和 rpc
程序命名空间标记为弃用,优先使用 methods
(#1539).methods#accounts()
中手动设置全局可解析程序公钥 (#1548).sol_log_data
syscall 进行发射 (#1608).#[derive(Default)]
的空间计算 (#1519).require_eq
和 require_keys_eq
宏。将默认错误代码添加到 require
宏 (#1572).system_program
CPI 包装函数。使 system_program
模块公开而不是重新导出 system_program::System
(#1629).avm use
不再提示 [y/n] 如果需要首先安装 - 它只是告诉用户去执行 avm install
(#1565).AnchorError
,包括程序堆栈以及非 AnchorError
错误的程序堆栈 (#1640). 如果 processed
tx 的 skipPreflight
设置为 true
,则不返回 AnchorError
(降级为 ProgramError
或原始 solana 库错误)。--skip-lint
选项以禁用引入的 lint 检查,以进行快速原型设计 (#1452) (#1482).Option<T>
映射类型的可空类型 (#1428).mut
的初始化账户的付款人 (#1271).AccountInfo
或 UncheckedAccount
类型时,需要提供文档注释 (#1452).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)
。Wallet
/ NodeWallet
类的根类型声明 (#1363).Option<T>
和 Vec<String>
类型 (#1393).seeds::program
约束以指定推导 PDA 时使用的 program_id (#1197).Context
现在有一个新的 bumps: BTree<String, u8>
参数,映射账户名到由账户上下文"找到"的 bump seed。这使得可以访问 bump seeds,而无需从客户端传递或在处理程序中重新计算它们 (#1367).methods
命名空间,引入更符合人机工程学的构建 API (#1324).init_if_needed
放在功能标志后以减少错误使用 (#1258).loader_account
模块重命名为 account_loader
模块 (#1279).Accounts
特性的 try_accounts
方法现在有一个额外的 bumps: &mut BTreeMap<String, u8>
参数,用于累积 bump seeds (#1367).bump = <target>
目标的 init
现在会导致错误。仅在 init
时,必须使用不带目标的 bump
并在函数处理程序中通过 ctx.bumps.get("<pda-account-name")
访问种子。对于后续的种子约束(不带初始化),建议将 bump 存储在账户上,并将其用作 bump = <target>
目标,以减少使用的计算单位 (#1380).Coder
现在是一个接口,现有类已重命名为 BorshCoder
。此更改允许为非 anchor 程序生成 Anchor 客户端 (#1259).init
约束时,所需程序缺失时改进错误消息 (#1257).init_if_needed
现在在不需要初始化时检查租金豁免 (#1250).associated_token::authority
时,添加缺少的拥有者检查 (#1240).workspace
和 Wallet
导出添加类型声明 (#1137).recent
为 processed
,max
为 finalized
(#1128).translateAddress
,此问题会导致浏览器代码失败。现在使用 PublicKey
构造函数,而不是原型链构造函数名称检查,因为在代码压缩/混淆的情况下该检查不起作用 (#1138).init_if_needed
时验证账户是 ATA 并且不需要初始化 (#1221).Program
账户添加 programdata_address: Option<Pubkey>
字段。如果账户是由可升级 bpf 加载程序拥有的程序,则将填充该字段 (#1125).serialize
函数,因为现在有默认实现。同样,它们不再需要实现 try_deserialize
,因为现在默认委托给 try_deserialize_unchecked
(#1156).Account<'a, T>
添加 set_inner
方法以便于更新 (#1177).fetch
和 fetchMultiple
添加可选的承诺参数 (#1171).Account<'a, T>
实现 AsRef<T>
(#1173).anchor expand
命令,该命令包装 cargo expand
(#1160).Rc<dyn Signer>
而不是 Keypair
(#975).#[repr(packed)]
更改为 #[repr(C)]
(#1106).prelude
模块或 accounts
模块中找到,但不再直接在根下。
已弃用的账户类型不再由预编译导入 (#1208).ProgramAccount
添加 deprecated
属性 (#1014).Cargo.toml
中的版本号添加到提取的 IDL 中 (#1061).Loader
添加 deprecated
属性 (#1078).init_if_needed
属性现在确保给定属性(例如空间、拥有者、token::authority 等)在不需要初始化时进行验证 (#1096).ErrorCode::AccountNotInitialized
错误,以将账户有错误所有者的情况与账户不存在的情况分开 (#1024).no-log-ix-name
标志关闭此功能 (#1057).ProgramData
和 UpgradableLoaderState
现在可以作为泛型传入 Account
。请参见 UpgradeableLoaderState。
UpgradableLoaderState
也可以匹配以获取 ProgramData
,但当使用 ProgramData
时,anchor 会为你处理序列化和检查,这确实是程序数据 (#1095).postInstructions
和 preInstructions
替换(现在已弃用的)instructions
(#1007).getAccountInfo
辅助方法 (#1084).SystemAccount<'info>
账户类型,用于系统程序所拥有的通用钱包地址或账户 (#954).idl parse
子命令中输出 TypeScript IDL (#941).@project-serum/anchor-cli
添加 os
和 cpu
字段 (#976).solana-test-validator
的配置选项支持 (#834).target/types
目录现在在构建时创建,用于存储每个程序的 IDL 相关的 TypeScript 类型文件 (#795).Program<T>
现在可以用 IDL 类型进行类型化 (#795).#[derive(Accounts)]
中添加 mint::freeze_authority 关键字以便初始化 (#835).AccountLoader
类型以支持包含 CPI 的零拷贝账户 (#792).#[account(init_if_needed)]
关键字中添加允许初始化账户即使它已经创建的功能 (#906).signer
,mut
,has_one
,owner
,原始约束和 address
的自定义错误支持 (#905, #913).#[account(signer)]
的账户约束现在在启用 "cpi"
功能时强制执行签名 (#849).localnet
命令,用于启动本地的 solana-test-validator
,并部署工作区 (#820).CpiContext
账户现在必须使用在 crate::cpi::accounts::*
模块中生成的账户结构体。这些结构体对应于每个指令的账户上下文,不同之处在于每个字段都是 AccountInfo
类型 (#824).anchor test
添加 --detach
标志 (#770).associated_token
关键字以便在 #[derive(Accounts)]
中初始化关联Token账户 (#790).AccountMeta
s 现在在 Rust 客户端中正确设置 isSigner
字段 (#762).Signer
类型现在在 IDL 中将 isSigner 设置为 true (#750).Program
类型 (#705).Signer
类型,其中数据未被使用 (#705).UncheckedAccount
类型,作为 AccountInfo
的首选别名 (#745).#[account(owner = <pubkey>)]
现在需要 Pubkey
而不是账户 (#691).Account
类型以替换已弃用的 ProgramAccount
和 CpiAccount
(#686).Box
可以与 Account
类型一起使用,以减少堆栈使用量 (#686).Owner
特性,所有 #[account]
结构自动实现 (#686).anchor-debug
) (#681).declare_id!
在源代码中定义其程序 id (#686).Unnamed
结构,而不是发生恐慌 (#605).#[account(init, seeds = [...], mint::decimals = <expr>, mint::authority = <expr>)]
(#562).AccountInfo
包装器添加 AsRef<AccountInfo>
(#652).AccountInfo
克隆来优化 trait Key
(#652).#[account(init, seeds = [...], token = <expr>, authority = <expr>)]
更改为 #[account(init, token::mint = <expr>, token::authority = <expr>)]
(#562).#[associated]
和 #[account(associated = <target>, with = <target>)]
(#612).anchor launch
命令 (#634).#[account(init)]
现在在同一个指令内创建账户,以便于初始化 PDAs 一致。要保持 init
的旧行为,请将其替换为 #[account(zero)]
(#641).seeds
约束时,必须提供 bump。此限制已添加以确保每当通过约束初始化 PDA 时使用的 bump 是由 Pubkey::find_program_address
创建的 (#641).try_from_init
已从 Loader
、ProgramAccount
和 CpiAccount
中移除,替换为 try_from_unchecked
(#641).AccountsInit
特性 (#641).ProgramAccount
、Loader
和 ProgramState
的 try_from
方法现在会额外接受一个 program_id: &Pubkey
参数 (#660).anchor init
命令 "Workspace not found" 的回归 (#598).Cargo.lock
(#593).[registry]
部分 (#570).anchor login <api-token>
命令 (#570).anchor publish <package>
命令 (#570).anchor_version
字段,以指定用于可验证构建的 Anchor docker 镜像 (#570).solana_version
字段,以指定用于可验证构建的 solana 工具链 (#570).init
时动态获取租金 sysvar (#587).[clusters.<network>]
Anchor.toml 部分已重命名为 [programs.<network>]
(#570).[workspace]
成员和排除数组现在必须是相对于工作区根目录的文件路径 (#570).programs
部分中添加 members
/ exclude
键 (#546).clusters.localnet
允许在测试命令中配置程序地址 (#554).hex
解码指令 (#547)。CpiAccount::reload
修改现有结构而不是返回一个新的结构 (#526)。[scripts]
测试命令 (#550)。require
宏用于指定返回错误代码的断言 (#483)。bump
关键字,用于在 seeds
数组的末尾添加可选的向上种子。当与 两者 init
和 seeds
一起使用时,程序执行 find_program_address
来断言给定的 bump 是规范的 bump (#483)。#[account(address = <expr>)]
约束以断言账户地址 (#400)。#[account(init, token = <mint-target>, authority = <token-owner-target>...)]
约束以初始化作为程序派生地址的 SPL 代币账户。可以在通过 seeds
或 associated
初始化时使用 (#400)。associated_seeds!
宏以生成由 #[account(associated = <target>)]
账户签署的 CPI 签名者种子 (#400)。[scripts]
部分,以指定可以通过 anchor run <script>
运行的工作区脚本 (#400)。[clusters.<network>]
表条目现在也可以使用 { address = <base58-str>, idl = <filepath-str> }
来指定工作区程序 (#400)。--yarn
标志以使用 npx
(#432)。--program-name
选项以一次构建单个程序 (#362)。#[account(close = <destination>)]
约束用于关闭账户并将租金豁免 lamports 发送至指定的目标账户 (#371)。CpiContext
上实现 ToAccountMetas
特征使用 remaining_accounts
(#351)。SetAuthority
指令 (#307)。constraint = <expression>
被添加作为(现已废弃的)字符串文字约束的替代品 (#341)。anchor.workspace
客户端的可选项 (#310)。<program>.account.<my-account>
和 <program>.state
命名空间检索反序列化账户现在需要显式调用 fetch
API。例如,program.account.myAccount(<address>)
和 program.state()
现在是 program.account.myAccount.fetch(<address>)
和 program.state.fetch()
(#322)。#[account(associated)]
现在要求提供 init
以创建关联账户。如果未提供,则假设地址已存在,并将添加约束以确保地址的正确性 (#318)。#[state]
账户鉴别标志的预图像为通过 "state:" 命名空间来进行 (#320)。:
以与账户一致 (#321)。mut
(#341)。space
约束现在必须是文字整数而不是文字字符串 (#341)。program.simulate
命名空间 (#266)。Address
类型,允许在公共 API 中使用 Base 58 编码的字符串 (#304)。web3.Signer
替代已废弃的 web3.Account
(#296)。anchor.workspace
客户端现在可以通过 Anchor.toml 中的 [cluster.<slug>]
为每个网络进行定制 (#308)。--skip-build
标志 (301)。anchor shell
命令以启动一个用 Anchor.toml 配置的环境的节点 Shell (#303)。wallet
和 cluster
设置现在必须在 [provider]
表下 (#305)。decode
API 将直接解码字符串而不是缓冲区 (#292)。encode
API 被移除 (#292)。RequestBuilder::new
重命名为 RequestBuilder::from
(#248)。instruction::state::Ctor
结构重命名为 instruction::state::New
(#248)。with
目标 (#197)。#[account(owner = <program>)]
约束 (#178)。#[account(associated = <target>)]
和 #[associated]
属性,以在程序中创建关联程序账户。TypeScript 包可以通过新的 <program>.account.<account-name>.associated
(和 associatedAddress
)方法获取这些账户 (#186)。#[account]
现在已正确解析为 IDL (#177)。#[state]
账户的大小 (#121)。#[account(executable)]
属性 (#140)。Cluster
结构替换 URL 字符串 (#89)。IdlAccount
的账户鉴别器更改为使用 "internal" 作为命名空间 (#128)。-#![feature(proc_macro_hygiene)]
(#139)。IdlInstruction::Clear
(#107)。.anchor/program-logs
目录 (ce5ca7)。初始发布。
anchor-lang
crate 提供了一个用于 Solana 的 Rust eDSL。anchor-spl
crate 提供了 Anchor 程序的 CPI 客户端。anchor-client
crate 提供了 Anchor 程序的 Rust 客户端。@project-serum/anchor
包用于生成 TypeScript 客户端。
- 原文链接: github.com/project-serum...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!