Options
All
  • Public
  • Public/Protected
  • All
Menu

Program provides the IDL deserialized client representation of an Anchor program.

This API is the one stop shop for all things related to communicating with on-chain programs. Among other things, one can send transactions, fetch deserialized accounts, decode instruction data, subscribe to account changes, and listen to events.

In addition to field accessors and methods, the object provides a set of dynamically generated properties, also known as namespaces, that map one-to-one to program methods and accounts. These namespaces generally can be used as follows:

Usage

program.<namespace>.<program-specific-method>

API specifics are namespace dependent. The examples used in the documentation below will refer to the two counter examples found here.

Type Parameters

Hierarchy

  • Program

Index

Constructors

  • Type Parameters

    Parameters

    • idl: IDL

      The interface definition.

    • provider: Provider = ...

      The network and wallet context to use. If not provided then uses getProvider.

    • Optional coder: Coder<string, string>
    • Optional getCustomResolver: ((instruction: IdlInstruction) => undefined | CustomAccountResolver<IDL>)

      A function that returns a custom account resolver for the given instruction. This is useful for resolving public keys of missing accounts when building instructions

    Returns Program<IDL>

Properties

account: AccountNamespace<IDL>

The namespace provides handles to an AccountClient object for each account in the program.

Usage

program.account.<account-client>

Example

To fetch a Counter account from the above example,

const counter = await program.account.counter.fetch(address);

For the full API, see the AccountClient reference.

instruction: InstructionNamespace<IDL, AllInstructions<IDL>>

The namespace provides functions to build TransactionInstruction objects for each method of a program.

Usage

program.instruction.<method>(...args, ctx);

Parameters

  1. args - The positional arguments for the program. The type and number of these arguments depend on the program being used.
  2. ctx - Context non-argument parameters to pass to the method. Always the last parameter in the method call.

Example

To create an instruction for the increment method above,

const tx = await program.instruction.increment({
accounts: {
counter,
},
});
deprecated
methods: MethodsNamespace<IDL, AllInstructions<IDL>>

The namespace provides a builder API for all APIs on the program. This is an alternative to using namespace the other namespaces..

rpc: RpcNamespace<IDL, AllInstructions<IDL>>

Async methods to send signed transactions to non-state methods on the program, returning a TransactionSignature.

Usage

rpc.<method>(...args, ctx);

Parameters

  1. args - The positional arguments for the program. The type and number of these arguments depend on the program being used.
  2. ctx - Context non-argument parameters to pass to the method. Always the last parameter in the method call.

Example

To send a transaction invoking the increment method above,

const txSignature = await program.rpc.increment({
accounts: {
counter,
authority,
},
});
deprecated

Use program.methods.(...args).rpc() instead

simulate: SimulateNamespace<IDL, AllInstructions<IDL>>

The namespace provides functions to simulate transactions for each method of a program, returning a list of deserialized events and raw program logs.

One can use this to read data calculated from a program on chain, by emitting an event in the program and reading the emitted event client side via the simulate namespace.

simulate

program.simulate.<method>(...args, ctx);

Parameters

  1. args - The positional arguments for the program. The type and number of these arguments depend on the program being used.
  2. ctx - Context non-argument parameters to pass to the method. Always the last parameter in the method call.

Example

To simulate the increment method above,

const events = await program.simulate.increment({
accounts: {
counter,
},
});
deprecated
transaction: TransactionNamespace<IDL, AllInstructions<IDL>>

The namespace provides functions to build Transaction objects for each method of a program.

Usage

program.transaction.<method>(...args, ctx);

Parameters

  1. args - The positional arguments for the program. The type and number of these arguments depend on the program being used.
  2. ctx - Context non-argument parameters to pass to the method. Always the last parameter in the method call.

Example

To create an instruction for the increment method above,

const tx = await program.transaction.increment({
accounts: {
counter,
},
});
deprecated
views?: ViewNamespace<IDL, AllInstructions<IDL>>

Accessors

  • get coder(): Coder<string, string>
  • get idl(): IDL
  • get rawIdl(): Idl

Methods

  • addEventListener<E>(eventName: E & string, callback: ((event: IdlEvents<IDL>[E], slot: number, signature: string) => void)): number
  • Invokes the given callback every time the given event is emitted.

    Type Parameters

    • E extends string

    Parameters

    • eventName: E & string

      The PascalCase name of the event, provided by the IDL.

    • callback: ((event: IdlEvents<IDL>[E], slot: number, signature: string) => void)

      The function to invoke whenever the event is emitted from program logs.

        • (event: IdlEvents<IDL>[E], slot: number, signature: string): void
        • Parameters

          • event: IdlEvents<IDL>[E]
          • slot: number
          • signature: string

          Returns void

    Returns number

  • removeEventListener(listener: number): Promise<void>
  • Generates a Program client by fetching the IDL from the network.

    In order to use this method, an IDL must have been previously initialized via the anchor CLI's anchor idl init command.

    Type Parameters

    Parameters

    • address: Address
    • Optional provider: Provider

      The network and wallet context.

    Returns Promise<Program<IDL>>

  • Fetches an idl from the blockchain.

    In order to use this method, an IDL must have been previously initialized via the anchor CLI's anchor idl init command.

    Type Parameters

    Parameters

    • address: Address
    • Optional provider: Provider

      The network and wallet context.

    Returns Promise<null | IDL>

Generated using TypeDoc