From 0e542858a6344ca8787d7a6ad28c8fbec79f49df Mon Sep 17 00:00:00 2001 From: RohanXKapur Date: Tue, 22 Feb 2022 02:33:14 +0800 Subject: [PATCH 1/7] add revoke instruction to token.rs --- spl/src/token.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/spl/src/token.rs b/spl/src/token.rs index 2ed7558a13..196cfa643a 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -4,7 +4,7 @@ use anchor_lang::solana_program::program_pack::Pack; use anchor_lang::solana_program::pubkey::Pubkey; use anchor_lang::{context::CpiContext, Accounts}; use anchor_lang::{solana_program, Result}; -use std::ops::Deref; +use std::{fmt::Result, ops::Deref}; pub use spl_token::ID; @@ -104,6 +104,21 @@ pub fn approve<'a, 'b, 'c, 'info>( .map_err(Into::into) } +pub fn revoke<'a, 'b, 'c, 'info>(ctx: CpiContext<'a, 'b, 'c, 'info, Revoke<'info>>) -> Result<()> { + let ix = spl_token::instruction::revoke( + &spl_token::ID, + ctx.accounts.source.key, + ctx.accounts.owner.key, + &[], + )?; + solana_program::program::invoke_signed( + &ix, + &[ctx.accounts.source.clone(), ctx.accounts.owner.clone()], + ctx.signer_seeds, + ) + .map_err(Into::into) +} + pub fn initialize_account<'a, 'b, 'c, 'info>( ctx: CpiContext<'a, 'b, 'c, 'info, InitializeAccount<'info>>, ) -> Result<()> { @@ -270,6 +285,12 @@ pub struct Approve<'info> { pub authority: AccountInfo<'info>, } +#[derive(Accounts)] +pub struct Revoke<'info> { + pub source: AccountInfo<'info>, + pub owner: AccountInfo<'info>, +} + #[derive(Accounts)] pub struct InitializeAccount<'info> { pub account: AccountInfo<'info>, From 8d41ad4df516b5a01001afc7eac5c4ada46a66db Mon Sep 17 00:00:00 2001 From: RohanXKapur Date: Tue, 22 Feb 2022 03:49:53 +0800 Subject: [PATCH 2/7] rename owner to authority --- spl/src/token.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spl/src/token.rs b/spl/src/token.rs index 196cfa643a..5b8fbe716a 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -108,12 +108,12 @@ pub fn revoke<'a, 'b, 'c, 'info>(ctx: CpiContext<'a, 'b, 'c, 'info, Revoke<'info let ix = spl_token::instruction::revoke( &spl_token::ID, ctx.accounts.source.key, - ctx.accounts.owner.key, + ctx.accounts.authority.key, &[], )?; solana_program::program::invoke_signed( &ix, - &[ctx.accounts.source.clone(), ctx.accounts.owner.clone()], + &[ctx.accounts.source.clone(), ctx.accounts.authority.clone()], ctx.signer_seeds, ) .map_err(Into::into) @@ -288,7 +288,7 @@ pub struct Approve<'info> { #[derive(Accounts)] pub struct Revoke<'info> { pub source: AccountInfo<'info>, - pub owner: AccountInfo<'info>, + pub authority: AccountInfo<'info>, } #[derive(Accounts)] From 55848afcc70bd34a03019f7487ca8e3abb8c218a Mon Sep 17 00:00:00 2001 From: RohanXKapur Date: Tue, 22 Feb 2022 03:50:59 +0800 Subject: [PATCH 3/7] remove unnecessary import --- spl/src/token.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spl/src/token.rs b/spl/src/token.rs index 5b8fbe716a..669a195b65 100644 --- a/spl/src/token.rs +++ b/spl/src/token.rs @@ -4,7 +4,7 @@ use anchor_lang::solana_program::program_pack::Pack; use anchor_lang::solana_program::pubkey::Pubkey; use anchor_lang::{context::CpiContext, Accounts}; use anchor_lang::{solana_program, Result}; -use std::{fmt::Result, ops::Deref}; +use std::ops::Deref; pub use spl_token::ID; From 82e183ab5700965760e4e52189331c298e79d2d7 Mon Sep 17 00:00:00 2001 From: RohanXKapur Date: Tue, 22 Feb 2022 04:29:47 +0800 Subject: [PATCH 4/7] update CHANGELOG --- CHANGELOG.md | 464 +++++++++++++++++++++++++-------------------------- 1 file changed, 232 insertions(+), 232 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d305cad876..c2a45be656 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,497 +11,497 @@ incremented for features. ## [Unreleased] +spl: Add support for revoke instruction ([#1493](https://github.com/project-serum/anchor/pull/1493)). + ### Fixes -* cli: Fix rust template ([#1488](https://github.com/project-serum/anchor/pull/1488)). +- cli: Fix rust template ([#1488](https://github.com/project-serum/anchor/pull/1488)). ## [0.22.0] - 2022-02-20 ### Features -* lang: Add check that declared id == program id ([#1451](https://github.com/project-serum/anchor/pull/1451)). -* ts: Added float types support ([#1425](https://github.com/project-serum/anchor/pull/1425)). -* cli: Add `--skip-lint` option to disable check linting introduced in ([#1452](https://github.com/project-serum/anchor/pull/1452)) for rapid prototyping ([#1482](https://github.com/project-serum/anchor/pull/1482)). +- lang: Add check that declared id == program id ([#1451](https://github.com/project-serum/anchor/pull/1451)). +- ts: Added float types support ([#1425](https://github.com/project-serum/anchor/pull/1425)). +- cli: Add `--skip-lint` option to disable check linting introduced in ([#1452](https://github.com/project-serum/anchor/pull/1452)) for rapid prototyping ([#1482](https://github.com/project-serum/anchor/pull/1482)). ### Fixes -* ts: Allow nullable types for `Option` mapped types ([#1428](https://github.com/project-serum/anchor/pull/1428)). +- ts: Allow nullable types for `Option` mapped types ([#1428](https://github.com/project-serum/anchor/pull/1428)). ### Breaking -* lang: Enforce that the payer for an init-ed account be marked `mut` ([#1271](https://github.com/project-serum/anchor/pull/1271)). -* lang: All error-related code is now in the error module ([#1426](https://github.com/project-serum/anchor/pull/1426)). -* lang: Require doc comments when using AccountInfo or UncheckedAccount types ([#1452](https://github.com/project-serum/anchor/pull/1452)). -* lang: add [`error!`](https://docs.rs/anchor-lang/latest/anchor_lang/prelude/macro.error.html) and [`err!`](https://docs.rs/anchor-lang/latest/anchor_lang/prelude/macro.err.html) macro and `Result` type ([#1462](https://github.com/project-serum/anchor/pull/1462)). -This change will break most programs. Do the following to upgrade: - * change all `ProgramResult`'s to `Result<()>` - * change `#[error]` to `#[error_code]` - * change all `Err(MyError::SomeError.into())` to `Err(error!(MyError::SomeError))` and all `Err(ProgramError::SomeProgramError)` to `Err(ProgramError::SomeProgramError.into())` or `Err(Error::from(ProgramError::SomeProgramError).with_source(source!()))` to provide file and line source of the error (`with_source` is most useful with `ProgramError`s. `error!` already adds source information for custom and anchor internal errors). +- lang: Enforce that the payer for an init-ed account be marked `mut` ([#1271](https://github.com/project-serum/anchor/pull/1271)). +- lang: All error-related code is now in the error module ([#1426](https://github.com/project-serum/anchor/pull/1426)). +- lang: Require doc comments when using AccountInfo or UncheckedAccount types ([#1452](https://github.com/project-serum/anchor/pull/1452)). +- lang: add [`error!`](https://docs.rs/anchor-lang/latest/anchor_lang/prelude/macro.error.html) and [`err!`](https://docs.rs/anchor-lang/latest/anchor_lang/prelude/macro.err.html) macro and `Result` type ([#1462](https://github.com/project-serum/anchor/pull/1462)). + This change will break most programs. Do the following to upgrade: + _ change all `ProgramResult`'s to `Result<()>` + _ change `#[error]` to `#[error_code]` \* change all `Err(MyError::SomeError.into())` to `Err(error!(MyError::SomeError))` and all `Err(ProgramError::SomeProgramError)` to `Err(ProgramError::SomeProgramError.into())` or `Err(Error::from(ProgramError::SomeProgramError).with_source(source!()))` to provide file and line source of the error (`with_source` is most useful with `ProgramError`s. `error!` already adds source information for custom and anchor internal errors). ## [0.21.0] - 2022-02-07 ### Fixes -* ts: Fix the root type declaration of the `Wallet` / `NodeWallet` class ([#1363](https://github.com/project-serum/anchor/pull/1363)). -* ts: Improve type mapping of Account fields into Typescript with additional support for `Option` and `Vec` types ([#1393](https://github.com/project-serum/anchor/pull/1393)). +- ts: Fix the root type declaration of the `Wallet` / `NodeWallet` class ([#1363](https://github.com/project-serum/anchor/pull/1363)). +- ts: Improve type mapping of Account fields into Typescript with additional support for `Option` and `Vec` types ([#1393](https://github.com/project-serum/anchor/pull/1393)). ### Features -* lang: Add `seeds::program` constraint for specifying which program_id to use when deriving PDAs ([#1197](https://github.com/project-serum/anchor/pull/1197)). -* lang: `Context` now has a new `bumps: BTree` argument, mapping account name to bump seed "found" by the accounts context. This allows one to access bump seeds without having to pass them in from the client or recalculate them in the handler ([#1367](https://github.com/project-serum/anchor/pull/1367)). -* lang, ts: Automatically infer PDA addresses ([#1331](https://github.com/project-serum/anchor/pull/1331)). -* ts: Remove error logging in the event parser when log websocket encounters a program error ([#1313](https://github.com/project-serum/anchor/pull/1313)). -* ts: Add new `methods` namespace to the program client, introducing a more ergonomic builder API ([#1324](https://github.com/project-serum/anchor/pull/1324)). -* ts: Add registry utility for fetching the latest verified build ([#1371](https://github.com/project-serum/anchor/pull/1371)). -* cli: Expose the solana-test-validator --account flag in Anchor.toml via [[test.validator.account]] ([#1366](https://github.com/project-serum/anchor/pull/1366)). -* cli: Add avm, a tool for managing anchor-cli versions ([#1385](https://github.com/project-serum/anchor/pull/1385)). +- lang: Add `seeds::program` constraint for specifying which program_id to use when deriving PDAs ([#1197](https://github.com/project-serum/anchor/pull/1197)). +- lang: `Context` now has a new `bumps: BTree` argument, mapping account name to bump seed "found" by the accounts context. This allows one to access bump seeds without having to pass them in from the client or recalculate them in the handler ([#1367](https://github.com/project-serum/anchor/pull/1367)). +- lang, ts: Automatically infer PDA addresses ([#1331](https://github.com/project-serum/anchor/pull/1331)). +- ts: Remove error logging in the event parser when log websocket encounters a program error ([#1313](https://github.com/project-serum/anchor/pull/1313)). +- ts: Add new `methods` namespace to the program client, introducing a more ergonomic builder API ([#1324](https://github.com/project-serum/anchor/pull/1324)). +- ts: Add registry utility for fetching the latest verified build ([#1371](https://github.com/project-serum/anchor/pull/1371)). +- cli: Expose the solana-test-validator --account flag in Anchor.toml via [[test.validator.account]] ([#1366](https://github.com/project-serum/anchor/pull/1366)). +- cli: Add avm, a tool for managing anchor-cli versions ([#1385](https://github.com/project-serum/anchor/pull/1385)). ### Breaking -* lang: Put `init_if_needed` behind a feature flag to decrease wrong usage ([#1258](https://github.com/project-serum/anchor/pull/1258)). -* lang: rename `loader_account` module to `account_loader` module ([#1279](https://github.com/project-serum/anchor/pull/1279)) -* lang: The `Accounts` trait's `try_accounts` method now has an additional `bumps: &mut BTreeMap` argument, which accumulates bump seeds ([#1367](https://github.com/project-serum/anchor/pull/1367)). -* lang: Providing `bump = ` targets with `init` will now error. On `init` only, it is required to use `bump` without a target and access the seed inside function handlers via `ctx.bumps.get("` target to minimize compute units used ([#1380](https://github.com/project-serum/anchor/pull/1380)). -* ts: `Coder` is now an interface and the existing class has been renamed to `BorshCoder`. This change allows the generation of Anchor clients for non anchor programs ([#1259](https://github.com/project-serum/anchor/pull/1259/files)). -* cli: [[test.clone]] key in Anchor.toml is renamed to [[test.validator.clone]] ([#1366](https://github.com/project-serum/anchor/pull/1366)). - +- lang: Put `init_if_needed` behind a feature flag to decrease wrong usage ([#1258](https://github.com/project-serum/anchor/pull/1258)). +- lang: rename `loader_account` module to `account_loader` module ([#1279](https://github.com/project-serum/anchor/pull/1279)) +- lang: The `Accounts` trait's `try_accounts` method now has an additional `bumps: &mut BTreeMap` argument, which accumulates bump seeds ([#1367](https://github.com/project-serum/anchor/pull/1367)). +- lang: Providing `bump = ` targets with `init` will now error. On `init` only, it is required to use `bump` without a target and access the seed inside function handlers via `ctx.bumps.get("` target to minimize compute units used ([#1380](https://github.com/project-serum/anchor/pull/1380)). +- ts: `Coder` is now an interface and the existing class has been renamed to `BorshCoder`. This change allows the generation of Anchor clients for non anchor programs ([#1259](https://github.com/project-serum/anchor/pull/1259/files)). +- cli: [[test.clone]] key in Anchor.toml is renamed to [[test.validator.clone]] ([#1366](https://github.com/project-serum/anchor/pull/1366)). ## [0.20.1] - 2022-01-09 ### Fixes -* lang: Improved error msgs when required programs are missing when using the `init` constraint([#1257](https://github.com/project-serum/anchor/pull/1257)) +- lang: Improved error msgs when required programs are missing when using the `init` constraint([#1257](https://github.com/project-serum/anchor/pull/1257)) ### Features -* lang: Allow repr overrides for zero copy accounts ([#1273](https://github.com/project-serum/anchor/pull/1273)). +- lang: Allow repr overrides for zero copy accounts ([#1273](https://github.com/project-serum/anchor/pull/1273)). ## [0.20.0] - 2022-01-06 ### Fixes -* lang: `init_if_needed` now checks rent exemption when init is not needed ([#1250](https://github.com/project-serum/anchor/pull/1250)). -* lang: Add missing owner check when `associated_token::authority` is used ([#1240](https://github.com/project-serum/anchor/pull/1240)). -* ts: Add type declarations for conditional `workspace` and `Wallet` exports ([#1137](https://github.com/project-serum/anchor/pull/1137)). -* ts: Change commitment message `recent` to `processed` and `max` to `finalized` ([#1128](https://github.com/project-serum/anchor/pull/1128)) -* ts: fix `translateAddress` which currently leads to failing browser code. Now uses `PublicKey` constructor instead of prototype chain constructor name checking which doesn't work in the presence of code minifying/mangling([#1138](https://github.com/project-serum/anchor/pull/1138)) -* lang: add missing check that verifies that account is ATA when using `init_if_needed` and init is not needed([#1221](https://github.com/project-serum/anchor/pull/1221)) +- lang: `init_if_needed` now checks rent exemption when init is not needed ([#1250](https://github.com/project-serum/anchor/pull/1250)). +- lang: Add missing owner check when `associated_token::authority` is used ([#1240](https://github.com/project-serum/anchor/pull/1240)). +- ts: Add type declarations for conditional `workspace` and `Wallet` exports ([#1137](https://github.com/project-serum/anchor/pull/1137)). +- ts: Change commitment message `recent` to `processed` and `max` to `finalized` ([#1128](https://github.com/project-serum/anchor/pull/1128)) +- ts: fix `translateAddress` which currently leads to failing browser code. Now uses `PublicKey` constructor instead of prototype chain constructor name checking which doesn't work in the presence of code minifying/mangling([#1138](https://github.com/project-serum/anchor/pull/1138)) +- lang: add missing check that verifies that account is ATA when using `init_if_needed` and init is not needed([#1221](https://github.com/project-serum/anchor/pull/1221)) ### Features -* lang: Add `programdata_address: Option` field to `Program` account. Will be populated if account is a program owned by the upgradable bpf loader ([#1125](https://github.com/project-serum/anchor/pull/1125)) -* lang,ts,ci,cli,docs: update solana toolchain to version 1.8.5([#1133](https://github.com/project-serum/anchor/pull/1133)). -* lang: Account wrappers for non-Anchor programs no longer have to implement the `serialize` function because it has a default impl now. Similarly, they no longer have to implement `try_deserialize` which now delegates to `try_deserialize_unchecked` by default([#1156](https://github.com/project-serum/anchor/pull/1156)). -* lang: Add `set_inner` method to `Account<'a, T>` to enable easy updates ([#1177](https://github.com/project-serum/anchor/pull/1177)). -* lang: Handle arrays with const as length ([#968](https://github.com/project-serum/anchor/pull/968)). -* ts: Add optional commitment argument to `fetch` and `fetchMultiple` ([#1171](https://github.com/project-serum/anchor/pull/1171)). -* lang: Implement `AsRef` for `Account<'a, T>`([#1173](https://github.com/project-serum/anchor/pull/1173)) -* cli: Add `anchor expand` command which wraps around `cargo expand` ([#1160](https://github.com/project-serum/anchor/pull/1160)) +- lang: Add `programdata_address: Option` field to `Program` account. Will be populated if account is a program owned by the upgradable bpf loader ([#1125](https://github.com/project-serum/anchor/pull/1125)) +- lang,ts,ci,cli,docs: update solana toolchain to version 1.8.5([#1133](https://github.com/project-serum/anchor/pull/1133)). +- lang: Account wrappers for non-Anchor programs no longer have to implement the `serialize` function because it has a default impl now. Similarly, they no longer have to implement `try_deserialize` which now delegates to `try_deserialize_unchecked` by default([#1156](https://github.com/project-serum/anchor/pull/1156)). +- lang: Add `set_inner` method to `Account<'a, T>` to enable easy updates ([#1177](https://github.com/project-serum/anchor/pull/1177)). +- lang: Handle arrays with const as length ([#968](https://github.com/project-serum/anchor/pull/968)). +- ts: Add optional commitment argument to `fetch` and `fetchMultiple` ([#1171](https://github.com/project-serum/anchor/pull/1171)). +- lang: Implement `AsRef` for `Account<'a, T>`([#1173](https://github.com/project-serum/anchor/pull/1173)) +- cli: Add `anchor expand` command which wraps around `cargo expand` ([#1160](https://github.com/project-serum/anchor/pull/1160)) ### Breaking -* client: Client::new and Client::new_with_options now accept `Rc` instead of `Keypair` ([#975](https://github.com/project-serum/anchor/pull/975)). -* lang, ts: Change error enum name and message for 'wrong program ownership' account validation ([#1154](https://github.com/project-serum/anchor/pull/1154)). -* lang: Change from `#[repr(packed)]` to `#[repr(C)]` for zero copy accounts ([#1106](https://github.com/project-serum/anchor/pull/1106)). -* lang: Account types can now be found either in the `prelude` module or the `accounts` module but not longer directly under the root. -Deprecated account types are no longer imported by the prelude ([#1208](https://github.com/project-serum/anchor/pull/1208)). +- client: Client::new and Client::new_with_options now accept `Rc` instead of `Keypair` ([#975](https://github.com/project-serum/anchor/pull/975)). +- lang, ts: Change error enum name and message for 'wrong program ownership' account validation ([#1154](https://github.com/project-serum/anchor/pull/1154)). +- lang: Change from `#[repr(packed)]` to `#[repr(C)]` for zero copy accounts ([#1106](https://github.com/project-serum/anchor/pull/1106)). +- lang: Account types can now be found either in the `prelude` module or the `accounts` module but not longer directly under the root. + Deprecated account types are no longer imported by the prelude ([#1208](https://github.com/project-serum/anchor/pull/1208)). ## [0.19.0] - 2021-12-08 ### Fixes -* lang: Add `deprecated` attribute to `ProgramAccount` ([#1014](https://github.com/project-serum/anchor/pull/1014)). -* cli: Add version number from programs `Cargo.toml` into extracted IDL ([#1061](https://github.com/project-serum/anchor/pull/1061)). -* lang: Add `deprecated` attribute to `Loader`([#1078](https://github.com/project-serum/anchor/pull/1078)). -* lang: the `init_if_needed` attribute now checks that given attributes (e.g. space, owner, token::authority etc.) are validated even when init is not needed ([#1096](https://github.com/project-serum/anchor/pull/1096)). +- lang: Add `deprecated` attribute to `ProgramAccount` ([#1014](https://github.com/project-serum/anchor/pull/1014)). +- cli: Add version number from programs `Cargo.toml` into extracted IDL ([#1061](https://github.com/project-serum/anchor/pull/1061)). +- lang: Add `deprecated` attribute to `Loader`([#1078](https://github.com/project-serum/anchor/pull/1078)). +- lang: the `init_if_needed` attribute now checks that given attributes (e.g. space, owner, token::authority etc.) are validated even when init is not needed ([#1096](https://github.com/project-serum/anchor/pull/1096)). ### Features -* lang: Add `ErrorCode::AccountNotInitialized` error to separate the situation when the account has the wrong owner from when it does not exist (#[1024](https://github.com/project-serum/anchor/pull/1024)). -* lang: Called instructions now log their name by default. This can be turned off with the `no-log-ix-name` flag ([#1057](https://github.com/project-serum/anchor/pull/1057)). -* lang: `ProgramData` and `UpgradableLoaderState` can now be passed into `Account` as generics. see [UpgradeableLoaderState](https://docs.rs/solana-program/latest/solana_program/bpf_loader_upgradeable/enum.UpgradeableLoaderState.html). `UpgradableLoaderState` can also be matched on to get `ProgramData`, but when `ProgramData` is used instead, anchor does the serialization and checking that it is actually program data for you ([#1095](https://github.com/project-serum/anchor/pull/1095)). -* ts: Add better error msgs in the ts client if something wrong (i.e. not a pubkey or a string) is passed in as an account in an instruction accounts object ([#1098](https://github.com/project-serum/anchor/pull/1098)). -* ts: Add inputs `postInstructions` and `preInstructions` as a replacement for (the now deprecated) `instructions` ([#1007](https://github.com/project-serum/anchor/pull/1007)). -* ts: Add `getAccountInfo` helper method to account namespace/client ([#1084](https://github.com/project-serum/anchor/pull/1084)). +- lang: Add `ErrorCode::AccountNotInitialized` error to separate the situation when the account has the wrong owner from when it does not exist (#[1024](https://github.com/project-serum/anchor/pull/1024)). +- lang: Called instructions now log their name by default. This can be turned off with the `no-log-ix-name` flag ([#1057](https://github.com/project-serum/anchor/pull/1057)). +- lang: `ProgramData` and `UpgradableLoaderState` can now be passed into `Account` as generics. see [UpgradeableLoaderState](https://docs.rs/solana-program/latest/solana_program/bpf_loader_upgradeable/enum.UpgradeableLoaderState.html). `UpgradableLoaderState` can also be matched on to get `ProgramData`, but when `ProgramData` is used instead, anchor does the serialization and checking that it is actually program data for you ([#1095](https://github.com/project-serum/anchor/pull/1095)). +- ts: Add better error msgs in the ts client if something wrong (i.e. not a pubkey or a string) is passed in as an account in an instruction accounts object ([#1098](https://github.com/project-serum/anchor/pull/1098)). +- ts: Add inputs `postInstructions` and `preInstructions` as a replacement for (the now deprecated) `instructions` ([#1007](https://github.com/project-serum/anchor/pull/1007)). +- ts: Add `getAccountInfo` helper method to account namespace/client ([#1084](https://github.com/project-serum/anchor/pull/1084)). ### Breaking -* lang, ts: Error codes have been mapped to new numbers to allow for more errors per namespace ([#1096](https://github.com/project-serum/anchor/pull/1096)). +- lang, ts: Error codes have been mapped to new numbers to allow for more errors per namespace ([#1096](https://github.com/project-serum/anchor/pull/1096)). ## [0.18.2] - 2021-11-14 -* cli: Replace global JavaScript dependency installs with local. +- cli: Replace global JavaScript dependency installs with local. ### Features -* lang: Add `SystemAccount<'info>` account type for generic wallet addresses or accounts owned by the system program ([#954](https://github.com/project-serum/anchor/pull/954)) +- lang: Add `SystemAccount<'info>` account type for generic wallet addresses or accounts owned by the system program ([#954](https://github.com/project-serum/anchor/pull/954)) ### Fixes -* cli: fix dns in NODE_OPTIONS ([#928](https://github.com/project-serum/anchor/pull/928)). -* cli: output TypeScript IDL in `idl parse` subcommand ([#941](https://github.com/project-serum/anchor/pull/941)). -* cli: Add fields `os` and `cpu` to npm package `@project-serum/anchor-cli` ([#976](https://github.com/project-serum/anchor/pull/976)). -* cli: Allow specify output directory for TypeScript IDL ([#940](https://github.com/project-serum/anchor/pull/940)). +- cli: fix dns in NODE_OPTIONS ([#928](https://github.com/project-serum/anchor/pull/928)). +- cli: output TypeScript IDL in `idl parse` subcommand ([#941](https://github.com/project-serum/anchor/pull/941)). +- cli: Add fields `os` and `cpu` to npm package `@project-serum/anchor-cli` ([#976](https://github.com/project-serum/anchor/pull/976)). +- cli: Allow specify output directory for TypeScript IDL ([#940](https://github.com/project-serum/anchor/pull/940)). ### Breaking -* spl: Move permissioned markets into dex repository ([#962](https://github.com/project-serum/anchor/pull/962)). +- spl: Move permissioned markets into dex repository ([#962](https://github.com/project-serum/anchor/pull/962)). ## [0.18.0] - 2021-10-24 ### Features -* cli: Add support for configuration options for `solana-test-validator` in Anchor.toml ([#834](https://github.com/project-serum/anchor/pull/834)). -* cli: `target/types` directory now created on build to store a TypeScript types file for each program's IDL ([#795](https://github.com/project-serum/anchor/pull/795)). -* ts: `Program` can now be typed with an IDL type ([#795](https://github.com/project-serum/anchor/pull/795)). -* lang: Add `mint::freeze_authority` keyword for mint initialization within `#[derive(Accounts)]` ([#835](https://github.com/project-serum/anchor/pull/835)). -* lang: Add `AccountLoader` type for `zero_copy` accounts with support for CPI ([#792](https://github.com/project-serum/anchor/pull/792)). -* lang: Add `#[account(init_if_needed)]` keyword for allowing one to invoke the same instruction even if the account was created already ([#906](https://github.com/project-serum/anchor/pull/906)). -* lang: Add custom errors support for raw constraints ([#905](https://github.com/project-serum/anchor/pull/905)). -* lang, cli, spl: Update solana toolchain to v1.8.0 ([#886](https://github.com/project-serum/anchor/pull/886)). -* lang: Add custom errors support for `signer`, `mut`, `has_one`, `owner`, raw constraints and `address` ([#905](https://github.com/project-serum/anchor/pull/905), [#913](https://github.com/project-serum/anchor/pull/913)). +- cli: Add support for configuration options for `solana-test-validator` in Anchor.toml ([#834](https://github.com/project-serum/anchor/pull/834)). +- cli: `target/types` directory now created on build to store a TypeScript types file for each program's IDL ([#795](https://github.com/project-serum/anchor/pull/795)). +- ts: `Program` can now be typed with an IDL type ([#795](https://github.com/project-serum/anchor/pull/795)). +- lang: Add `mint::freeze_authority` keyword for mint initialization within `#[derive(Accounts)]` ([#835](https://github.com/project-serum/anchor/pull/835)). +- lang: Add `AccountLoader` type for `zero_copy` accounts with support for CPI ([#792](https://github.com/project-serum/anchor/pull/792)). +- lang: Add `#[account(init_if_needed)]` keyword for allowing one to invoke the same instruction even if the account was created already ([#906](https://github.com/project-serum/anchor/pull/906)). +- lang: Add custom errors support for raw constraints ([#905](https://github.com/project-serum/anchor/pull/905)). +- lang, cli, spl: Update solana toolchain to v1.8.0 ([#886](https://github.com/project-serum/anchor/pull/886)). +- lang: Add custom errors support for `signer`, `mut`, `has_one`, `owner`, raw constraints and `address` ([#905](https://github.com/project-serum/anchor/pull/905), [#913](https://github.com/project-serum/anchor/pull/913)). ### Breaking -* lang: Accounts marked with the `#[account(signer)]` constraint now enforce signer when the `"cpi"` feature is enabled ([#849](https://github.com/project-serum/anchor/pull/849)). +- lang: Accounts marked with the `#[account(signer)]` constraint now enforce signer when the `"cpi"` feature is enabled ([#849](https://github.com/project-serum/anchor/pull/849)). ## [0.17.0] - 2021-10-03 ### Features -* cli: Add `localnet` command for starting a local `solana-test-validator` with the workspace deployed ([#820](https://github.com/project-serum/anchor/pull/820)). +- cli: Add `localnet` command for starting a local `solana-test-validator` with the workspace deployed ([#820](https://github.com/project-serum/anchor/pull/820)). ### Breaking -* `CpiContext` accounts must now be used with the accounts struct generated in the `crate::cpi::accounts::*` module. These structs correspond to the accounts context for each instruction, except that each field is of type `AccountInfo` ([#824](https://github.com/project-serum/anchor/pull/824)). +- `CpiContext` accounts must now be used with the accounts struct generated in the `crate::cpi::accounts::*` module. These structs correspond to the accounts context for each instruction, except that each field is of type `AccountInfo` ([#824](https://github.com/project-serum/anchor/pull/824)). ## [0.16.2] - 2021-09-27 ### Features -* lang: Add `--detach` flag to `anchor test` ([#770](https://github.com/project-serum/anchor/pull/770)). -* lang: Add `associated_token` keyword for initializing associated token accounts within `#[derive(Accounts)]` ([#790](https://github.com/project-serum/anchor/pull/790)). -* cli: Allow passing through cargo flags for build command ([#719](https://github.com/project-serum/anchor/pull/719)). -* cli: Allow passing through cargo flags for test, verify, and publish commands ([#804](https://github.com/project-serum/anchor/pull/804)). +- lang: Add `--detach` flag to `anchor test` ([#770](https://github.com/project-serum/anchor/pull/770)). +- lang: Add `associated_token` keyword for initializing associated token accounts within `#[derive(Accounts)]` ([#790](https://github.com/project-serum/anchor/pull/790)). +- cli: Allow passing through cargo flags for build command ([#719](https://github.com/project-serum/anchor/pull/719)). +- cli: Allow passing through cargo flags for test, verify, and publish commands ([#804](https://github.com/project-serum/anchor/pull/804)). ### Fixes -* lang: Generated `AccountMeta`s for Rust clients now properly set the `isSigner` field ([#762](https://github.com/project-serum/anchor/pull/762)). +- lang: Generated `AccountMeta`s for Rust clients now properly set the `isSigner` field ([#762](https://github.com/project-serum/anchor/pull/762)). ## [0.16.1] - 2021-09-17 ### Fixes -* lang: `Signer` type now sets isSigner to true in the IDL ([#750](https://github.com/project-serum/anchor/pull/750)). +- lang: `Signer` type now sets isSigner to true in the IDL ([#750](https://github.com/project-serum/anchor/pull/750)). ## [0.16.0] - 2021-09-16 ### Features -* lang: `Program` type introduced for executable accounts ([#705](https://github.com/project-serum/anchor/pull/705)). -* lang: `Signer` type introduced for signing accounts where data is not used ([#705](https://github.com/project-serum/anchor/pull/705)). -* lang: `UncheckedAccount` type introduced as a preferred alias for `AccountInfo` ([#745](https://github.com/project-serum/anchor/pull/745)). +- lang: `Program` type introduced for executable accounts ([#705](https://github.com/project-serum/anchor/pull/705)). +- lang: `Signer` type introduced for signing accounts where data is not used ([#705](https://github.com/project-serum/anchor/pull/705)). +- lang: `UncheckedAccount` type introduced as a preferred alias for `AccountInfo` ([#745](https://github.com/project-serum/anchor/pull/745)). ### Breaking Changes -* lang: `#[account(owner = )]` now requires a `Pubkey` instead of an account ([#691](https://github.com/project-serum/anchor/pull/691)). +- lang: `#[account(owner = )]` now requires a `Pubkey` instead of an account ([#691](https://github.com/project-serum/anchor/pull/691)). ## [0.15.0] - 2021-09-07 ### Features -* lang: Add new `Account` type to replace `ProgramAccount` and `CpiAccount`, both of which are deprecated ([#686](https://github.com/project-serum/anchor/pull/686)). -* lang: `Box` can be used with `Account` types to reduce stack usage ([#686](https://github.com/project-serum/anchor/pull/686)). -* lang: Add `Owner` trait, which is automatically implemented by all `#[account]` structs ([#686](https://github.com/project-serum/anchor/pull/686)). -* lang: Check that ProgramAccount writable before mut borrow (`anchor-debug` only) ([#681](https://github.com/project-serum/anchor/pull/681)). +- lang: Add new `Account` type to replace `ProgramAccount` and `CpiAccount`, both of which are deprecated ([#686](https://github.com/project-serum/anchor/pull/686)). +- lang: `Box` can be used with `Account` types to reduce stack usage ([#686](https://github.com/project-serum/anchor/pull/686)). +- lang: Add `Owner` trait, which is automatically implemented by all `#[account]` structs ([#686](https://github.com/project-serum/anchor/pull/686)). +- lang: Check that ProgramAccount writable before mut borrow (`anchor-debug` only) ([#681](https://github.com/project-serum/anchor/pull/681)). ### Breaking Changes -* lang: All programs must now define their program id in source via `declare_id!` ([#686](https://github.com/project-serum/anchor/pull/686)). +- lang: All programs must now define their program id in source via `declare_id!` ([#686](https://github.com/project-serum/anchor/pull/686)). ## [0.14.0] - 2021-09-02 ### Features -* lang: Ignore `Unnamed` structs instead of panic ([#605](https://github.com/project-serum/anchor/pull/605)). -* lang: Add constraints for initializing mint accounts as pdas, `#[account(init, seeds = [...], mint::decimals = , mint::authority = )]` ([#562](https://github.com/project-serum/anchor/pull/562)). -* lang: Add `AsRef` for `AccountInfo` wrappers ([#652](https://github.com/project-serum/anchor/pull/652)). -* lang: Optimize `trait Key` by removing `AccountInfo` cloning ([#652](https://github.com/project-serum/anchor/pull/652)). -* cli, client, lang: Update solana toolchain to v1.7.11 ([#653](https://github.com/project-serum/anchor/pull/653)). +- lang: Ignore `Unnamed` structs instead of panic ([#605](https://github.com/project-serum/anchor/pull/605)). +- lang: Add constraints for initializing mint accounts as pdas, `#[account(init, seeds = [...], mint::decimals = , mint::authority = )]` ([#562](https://github.com/project-serum/anchor/pull/562)). +- lang: Add `AsRef` for `AccountInfo` wrappers ([#652](https://github.com/project-serum/anchor/pull/652)). +- lang: Optimize `trait Key` by removing `AccountInfo` cloning ([#652](https://github.com/project-serum/anchor/pull/652)). +- cli, client, lang: Update solana toolchain to v1.7.11 ([#653](https://github.com/project-serum/anchor/pull/653)). ### Breaking Changes -* lang: Change `#[account(init, seeds = [...], token = , authority = )]` to `#[account(init, token::mint = token::authority = )]` ([#562](https://github.com/project-serum/anchor/pull/562)). -* lang: `#[associated]` and `#[account(associated = , with = )]` are both removed ([#612](https://github.com/project-serum/anchor/pull/612)). -* cli: Removed `anchor launch` command ([#634](https://github.com/project-serum/anchor/pull/634)). -* lang: `#[account(init)]` now creates the account inside the same instruction to be consistent with initializing PDAs. To maintain the old behavior of `init`, replace it with `#[account(zero)]` ([#641](https://github.com/project-serum/anchor/pull/641)). -* lang: `bump` must be provided when using the `seeds` constraint. This has been added as an extra safety constraint to ensure that whenever a PDA is initialized via a constraint the bump used is the one created by `Pubkey::find_program_address` ([#641](https://github.com/project-serum/anchor/pull/641)). -* lang: `try_from_init` has been removed from `Loader`, `ProgramAccount`, and `CpiAccount` and replaced with `try_from_unchecked` ([#641](https://github.com/project-serum/anchor/pull/641)). -* lang: Remove `AccountsInit` trait ([#641](https://github.com/project-serum/anchor/pull/641)). -* lang: `try_from` methods for `ProgramAccount`, `Loader`, and `ProgramState` now take in an additional `program_id: &Pubkey` parameter ([#660](https://github.com/project-serum/anchor/pull/660)). +- lang: Change `#[account(init, seeds = [...], token = , authority = )]` to `#[account(init, token::mint = token::authority = )]` ([#562](https://github.com/project-serum/anchor/pull/562)). +- lang: `#[associated]` and `#[account(associated = , with = )]` are both removed ([#612](https://github.com/project-serum/anchor/pull/612)). +- cli: Removed `anchor launch` command ([#634](https://github.com/project-serum/anchor/pull/634)). +- lang: `#[account(init)]` now creates the account inside the same instruction to be consistent with initializing PDAs. To maintain the old behavior of `init`, replace it with `#[account(zero)]` ([#641](https://github.com/project-serum/anchor/pull/641)). +- lang: `bump` must be provided when using the `seeds` constraint. This has been added as an extra safety constraint to ensure that whenever a PDA is initialized via a constraint the bump used is the one created by `Pubkey::find_program_address` ([#641](https://github.com/project-serum/anchor/pull/641)). +- lang: `try_from_init` has been removed from `Loader`, `ProgramAccount`, and `CpiAccount` and replaced with `try_from_unchecked` ([#641](https://github.com/project-serum/anchor/pull/641)). +- lang: Remove `AccountsInit` trait ([#641](https://github.com/project-serum/anchor/pull/641)). +- lang: `try_from` methods for `ProgramAccount`, `Loader`, and `ProgramState` now take in an additional `program_id: &Pubkey` parameter ([#660](https://github.com/project-serum/anchor/pull/660)). ## [0.13.2] - 2021-08-11 ### Fixes -* cli: Fix `anchor init` command "Workspace not found" regression ([#598](https://github.com/project-serum/anchor/pull/598)). +- cli: Fix `anchor init` command "Workspace not found" regression ([#598](https://github.com/project-serum/anchor/pull/598)). ## [0.13.1] - 2021-08-10 ### Features -* cli: Programs embedded into genesis during tests will produce program logs ([#594](https://github.com/project-serum/anchor/pull/594)). +- cli: Programs embedded into genesis during tests will produce program logs ([#594](https://github.com/project-serum/anchor/pull/594)). ### Fixes -* cli: Allows Cargo.lock to exist in workspace subdirectories when publishing ([#593](https://github.com/project-serum/anchor/pull/593)). +- cli: Allows Cargo.lock to exist in workspace subdirectories when publishing ([#593](https://github.com/project-serum/anchor/pull/593)). ## [0.13.0] - 2021-08-08 ### Features -* cli: Adds a `[registry]` section in the Anchor toml ([#570](https://github.com/project-serum/anchor/pull/570)). -* cli: Adds the `anchor login ` command ([#570](https://github.com/project-serum/anchor/pull/570)). -* cli: Adds the `anchor publish ` command ([#570](https://github.com/project-serum/anchor/pull/570)). -* cli: Adds a root level `anchor_version` field to the Anchor.toml for specifying the anchor docker image to use for verifiable builds ([#570](https://github.com/project-serum/anchor/pull/570)). -* cli: Adds a root level `solana_version` field to the Anchor.toml for specifying the solana toolchain to use for verifiable builds ([#570](https://github.com/project-serum/anchor/pull/570)). -* lang: Dynamically fetch rent sysvar for when using `init` ([#587](https://github.com/project-serum/anchor/pull/587)). +- cli: Adds a `[registry]` section in the Anchor toml ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: Adds the `anchor login ` command ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: Adds the `anchor publish ` command ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: Adds a root level `anchor_version` field to the Anchor.toml for specifying the anchor docker image to use for verifiable builds ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: Adds a root level `solana_version` field to the Anchor.toml for specifying the solana toolchain to use for verifiable builds ([#570](https://github.com/project-serum/anchor/pull/570)). +- lang: Dynamically fetch rent sysvar for when using `init` ([#587](https://github.com/project-serum/anchor/pull/587)). ### Breaking -* cli: `[clusters.]` Anchor.toml section has been renamed to `[programs.]` ([#570](https://github.com/project-serum/anchor/pull/570)). -* cli: `[workspace]` member and exclude arrays must now be filepaths relative to the workpsace root ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: `[clusters.]` Anchor.toml section has been renamed to `[programs.]` ([#570](https://github.com/project-serum/anchor/pull/570)). +- cli: `[workspace]` member and exclude arrays must now be filepaths relative to the workpsace root ([#570](https://github.com/project-serum/anchor/pull/570)). ## [0.12.0] - 2021-08-03 ### Features -* cli: Add keys `members` / `exclude` in config `programs` section ([#546](https://github.com/project-serum/anchor/pull/546)). -* cli: Allow program address configuration for test command through `clusters.localnet` ([#554](https://github.com/project-serum/anchor/pull/554)). -* lang: IDLs are now parsed from the entire crate ([#517](https://github.com/project-serum/anchor/pull/517)). -* spl: Dex permissioned markets proxy ([#519](https://github.com/project-serum/anchor/pull/519), [#543](https://github.com/project-serum/anchor/pull/543)). +- cli: Add keys `members` / `exclude` in config `programs` section ([#546](https://github.com/project-serum/anchor/pull/546)). +- cli: Allow program address configuration for test command through `clusters.localnet` ([#554](https://github.com/project-serum/anchor/pull/554)). +- lang: IDLs are now parsed from the entire crate ([#517](https://github.com/project-serum/anchor/pull/517)). +- spl: Dex permissioned markets proxy ([#519](https://github.com/project-serum/anchor/pull/519), [#543](https://github.com/project-serum/anchor/pull/543)). ### Breaking Changes -* ts: Use `hex` by default for decoding Instruction ([#547](https://github.com/project-serum/anchor/pull/547)). -* lang: `CpiAccount::reload` mutates the existing struct instead of returning a new one ([#526](https://github.com/project-serum/anchor/pull/526)). -* cli: Anchor.toml now requires an explicit `[scripts]` test command ([#550](https://github.com/project-serum/anchor/pull/550)). +- ts: Use `hex` by default for decoding Instruction ([#547](https://github.com/project-serum/anchor/pull/547)). +- lang: `CpiAccount::reload` mutates the existing struct instead of returning a new one ([#526](https://github.com/project-serum/anchor/pull/526)). +- cli: Anchor.toml now requires an explicit `[scripts]` test command ([#550](https://github.com/project-serum/anchor/pull/550)). ## [0.11.1] - 2021-07-09 ### Features -* lang: Adds `require` macro for specifying assertions that return error codes on failure ([#483](https://github.com/project-serum/anchor/pull/483)). -* lang: Allow one to specify arbitrary programs as the owner when creating PDA ([#483](https://github.com/project-serum/anchor/pull/483)). -* lang: A new `bump` keyword is added to the accounts constraints, which is used to add an optional bump seed to the end of a `seeds` array. When used in conjunction with *both* `init` and `seeds`, then the program executes `find_program_address` to assert that the given bump is the canonical bump ([#483](https://github.com/project-serum/anchor/pull/483)). +- lang: Adds `require` macro for specifying assertions that return error codes on failure ([#483](https://github.com/project-serum/anchor/pull/483)). +- lang: Allow one to specify arbitrary programs as the owner when creating PDA ([#483](https://github.com/project-serum/anchor/pull/483)). +- lang: A new `bump` keyword is added to the accounts constraints, which is used to add an optional bump seed to the end of a `seeds` array. When used in conjunction with _both_ `init` and `seeds`, then the program executes `find_program_address` to assert that the given bump is the canonical bump ([#483](https://github.com/project-serum/anchor/pull/483)). ### Fixes -* lang: Preserve all instruction data for fallback functions ([#483](https://github.com/project-serum/anchor/pull/483)). -* ts: Event listener not firing when creating associated accounts ([#356](https://github.com/project-serum/anchor/issues/356)). +- lang: Preserve all instruction data for fallback functions ([#483](https://github.com/project-serum/anchor/pull/483)). +- ts: Event listener not firing when creating associated accounts ([#356](https://github.com/project-serum/anchor/issues/356)). ## [0.11.0] - 2021-07-03 ### Features -* lang: Add fallback functions ([#457](https://github.com/project-serum/anchor/pull/457)). -* lang: Add feature flag for using the old state account discriminator. This is a temporary flag for those with programs built prior to v0.7.0 but want to use the latest Anchor version. Expect this to be removed in a future version ([#446](https://github.com/project-serum/anchor/pull/446)). -* lang: Add generic support to Accounts ([#496](https://github.com/project-serum/anchor/pull/496)). +- lang: Add fallback functions ([#457](https://github.com/project-serum/anchor/pull/457)). +- lang: Add feature flag for using the old state account discriminator. This is a temporary flag for those with programs built prior to v0.7.0 but want to use the latest Anchor version. Expect this to be removed in a future version ([#446](https://github.com/project-serum/anchor/pull/446)). +- lang: Add generic support to Accounts ([#496](https://github.com/project-serum/anchor/pull/496)). ### Breaking Changes -* cli: Remove `.spec` suffix on TypeScript tests files ([#441](https://github.com/project-serum/anchor/pull/441)). -* lang: Remove `belongs_to` constraint ([#459](https://github.com/project-serum/anchor/pull/459)). +- cli: Remove `.spec` suffix on TypeScript tests files ([#441](https://github.com/project-serum/anchor/pull/441)). +- lang: Remove `belongs_to` constraint ([#459](https://github.com/project-serum/anchor/pull/459)). ## [0.10.0] - 2021-06-27 ### Features -* lang: Add `#[account(address = )]` constraint for asserting the address of an account ([#400](https://github.com/project-serum/anchor/pull/400)). -* lang: Add `#[account(init, token = , authority = ...)]` constraint for initializing SPL token accounts as program derived addresses for the program. Can be used when initialized via `seeds` or `associated` ([#400](https://github.com/project-serum/anchor/pull/400)). -* lang: Add `associated_seeds!` macro for generating signer seeds for CPIs signed by an `#[account(associated = )]` account ([#400](https://github.com/project-serum/anchor/pull/400)). -* cli: Add `[scripts]` section to the Anchor.toml for specifying workspace scripts that can be run via `anchor run