Crate anchor_lang[][src]

Expand description

Anchor ⚓ is a framework for Solana’s Sealevel runtime providing several convenient developer tools.

  • Rust eDSL for writing safe, secure, and high level Solana programs
  • IDL specification
  • TypeScript package for generating clients from IDL
  • CLI and workspace management for developing complete applications

If you’re familiar with developing in Ethereum’s Solidity, Truffle, web3.js or Parity’s Ink!, then the experience will be familiar. Although the syntax and semantics are targeted at Solana, the high level workflow of writing RPC request handlers, emitting an IDL, and generating clients from IDL is the same.

For detailed tutorials and examples on how to use Anchor, see the guided tutorials or examples in the GitHub repository.

Presented here are the Rust primitives for building on Solana.

Re-exports

pub use solana_program;

Modules

prelude

The prelude contains all commonly used components of the crate. All programs should include it via anchor_lang::prelude::*;.

Macros

emit

Creates an event that can be subscribed to by clients. Calling this method will internally borsh serialize the event, base64 encode the bytes, and then add a msg! log to the transaction.

Structs

Context

Provides non-argument inputs to the program.

CpiAccount

Container for any account not owned by the current program.

CpiContext

Context specifying non-argument inputs for cross-program-invocations.

CpiState

Boxed container for the program state singleton, used when the state is for a program not currently executing.

CpiStateContext

Context specifying non-argument inputs for cross-program-invocations targeted at program state instructions.

Loader

Account loader facilitating on demand zero copy deserialization. Note that using accounts in this way is distinctly different from using, for example, the ProgramAccount. Namely, one must call load, load_mut, or load_init, before reading or writing to the account. For more details on zero-copy-deserialization, see the account attribute.

ProgramAccount

Boxed container for a deserialized account. Use this to reference any account owned by the currently executing program.

ProgramState

Boxed container for the program state singleton.

Sysvar

Container for sysvars.

Traits

AccountDeserialize

A data structure that can be deserialized and stored into account storage, i.e. an AccountInfo’s mutable data slice.

AccountSerialize

A data structure that can be serialized and stored into account storage, i.e. an AccountInfo’s mutable data slice.

Accounts

A data structure of validated accounts that can be deserialized from the input to a Solana program. Implementations of this trait should perform any and all requisite constraint checks on accounts to ensure the accounts maintain any invariants required for the program to run securely. In most cases, it’s recommended to use the Accounts derive macro to implement this trait.

AccountsClose

The close procedure to initiate garabage collection of an account, allowing one to retrieve the rent exemption.

AccountsExit

The exit procedure for an account. Any cleanup or persistence to storage should be done here.

AccountsInit

A data structure of accounts providing a one time deserialization upon account initialization, i.e., when the data array for a given account is zeroed. Any subsequent call to try_accounts_init should fail. For all subsequent deserializations, it’s expected that Accounts is used.

AnchorDeserialize

Borsh is the default serialization format for instructions and accounts.

AnchorSerialize

Borsh is the default serialization format for instructions and accounts.

Bump

Bump seed for program derived addresses.

Discriminator

8 byte unique identifier for a type.

Event

An event that can be emitted via a Solana log.

InstructionData

Calculates the data for an instruction invocation, where the data is Sha256(<namespace>::<method_name>)[..8] || BorshSerialize(args). args is a borsh serialized struct of named fields for each argument given to an instruction.

ToAccountInfo

Transformation to an AccountInfo struct.

ToAccountInfos

Transformation to AccountInfo structs.

ToAccountMetas

Transformation to AccountMeta structs.

ZeroCopy

An account data structure capable of zero copy deserialization.

Attribute Macros

access_control

Executes the given access control method before running the decorated instruction handler. Any method in scope of the attribute can be invoked with any arguments from the associated instruction handler.

account

A data structure representing a Solana account, implementing various traits:

associated

Extends the #[account] attribute to allow one to create associated accounts. This includes a Default implementation, which means all fields in an #[associated] struct must implement Default and an anchor_lang::Bump trait implementation, which allows the account to be used as a program derived address.

error

Generates Error and type Result<T> = Result<T, Error> types to be used as return types from Anchor instruction handlers. Importantly, the attribute implements From on the ErrorCode to support converting from the user defined error enum into the generated Error.

event

The event attribute allows a struct to be used with emit! so that programs can log significant events in their programs that clients can subscribe to. Currently, this macro is for structs only.

interface

The #[interface] attribute allows one to define an external program dependency, without having any knowledge about the program, other than the fact that it implements the given trait.

program

The #[program] attribute defines the module containing all instruction handlers defining all entries into a Solana program.

state

The #[state] attribute defines the program’s state struct, i.e., the program’s global account singleton giving the program the illusion of state.

zero_copy

A data structure that can be used as an internal field for a zero copy deserialized account, i.e., a struct marked with #[account(zero_copy)].

Derive Macros

Accounts

Implements an Accounts deserializer on the given struct, applying any constraints specified via inert #[account(..)] attributes upon deserialization.

AnchorDeserialize

Borsh is the default serialization format for instructions and accounts.

AnchorSerialize

Borsh is the default serialization format for instructions and accounts.