actions list, so the same permission model
applies to a single signer or a ParticipantSet with several members.
This page lists the 18 actions accepted by wallet.roles.add() in TypeScript
0.10.0 and Python 0.9.0, with their required fields, units, and permission
boundaries.
Read the action reference
In TypeScript, each action is an object with atype and the fields listed
below. Python uses an exported constructor named after the action, such as
ManageAuthorityAction() or TokenRecurringDestinationLimitAction(...).
Python field names use snake case: program_id and recurring_amount
correspond to TypeScript’s programId and recurringAmount.
For a complete transaction example, see
Add Roles. To save permissions as
reusable wallet-creation configuration, see
Policy Templates.
Program access and asset spending are checked separately. For example, a SOL
transfer needs access to the System Program and an appropriate SOL allowance.
Granting program, programAll, or programCurated alone does not grant an
unlimited SOL or token allowance.
Amounts addresses and windows
- Express SOL and staking amounts in lamports, and token amounts in the mint’s
smallest units. For a token with six decimals,
1_000_000represents one token. - TypeScript accepts
bigint, integer strings, or numbers. Usebigintor integer strings when a value exceeds JavaScript’s safe integer range. Python accepts integers or integer strings. - Express
windowin Solana slots, not seconds. A recurring allowance resets according to its on-chain window; it is not a per-transaction limit or an exact wall-clock schedule. - Supply public addresses as base58 strings. A SOL
destinationis the recipient account. A tokendestinationis the recipient token account, such as its associated token account, rather than the owner’s wallet address.
Management permissions
An authority that can manage roles can grant powerful permissions to another
key. Choose it when the signer should administer the wallet.
SOL permissions
Token permissions
For example, a token transfer can combine the appropriate token program
permission with
tokenDestinationLimit to restrict both the asset and its
recipient. The destination account in the permission must match the account
used by the transfer.
Program permissions
The curated list is defined by the protocol version. It is not a list supplied
by the application, and it does not imply approval of every operation that a
listed program exposes.
Staking and sub account permissions
Adding an action grants permission; it does not create a stake account or a
sub-account, or prepare its operations automatically. Use the appropriate
protocol instructions for those operations.
The action list above is the Developer SDK’s
AddRoleAction surface, not every
permission in every protocol version. In particular, it does not expose
ReplaceAuthority, ProgramScope, CloseSwigAuthority, or the scoped V2
sub-account actions. Consult the
TypeScript action definitions
and Python action definitions
when choosing SDK inputs.
