pub fn entry<'info>(
program_id: &Pubkey,
accounts: &'info [AccountInfo<'info>],
data: &[u8],
) -> ProgramResult
Expand description
The Anchor codegen exposes a programming model where a user defines
a set of methods inside of a #[program]
module in a way similar
to writing RPC request handlers. The macro then generates a bunch of
code wrapping these user defined methods into something that can be
executed on Solana.
These methods fall into one category for now.
Global methods - regular methods inside of the #[program]
.
Care must be taken by the codegen to prevent collisions between methods in these different namespaces. For this reason, Anchor uses a variant of sighash to perform method dispatch, rather than something like a simple enum variant discriminator.
The execution flow of the generated code can be roughly outlined:
- Start program via the entrypoint.
- Strip method identifier off the first 8 bytes of the instruction
data and invoke the identified method. The method identifier
is a variant of sighash. See docs.rs for
anchor_lang
for details. - If the method identifier is an IDL identifier, execute the IDL instructions, which are a special set of hardcoded instructions baked into every Anchor program. Then exit.
- Otherwise, the method identifier is for a user defined
instruction, i.e., one of the methods in the user defined
#[program]
module. Perform method dispatch, i.e., execute the big match statement mapping method identifier to method handler wrapper. - Run the method handler wrapper. This wraps the code the user actually wrote, deserializing the accounts, constructing the context, invoking the user’s code, and finally running the exit routine, which typically persists account changes.
The entry
function here, defines the standard entry to a Solana
program, where execution begins.