From bc2053273fcc8fff1beab223e5772ea1c2267e3e Mon Sep 17 00:00:00 2001 From: febo Date: Fri, 27 Mar 2026 16:49:59 +0000 Subject: [PATCH 1/5] Add idl --- pinocchio/program/idl.json | 3002 ++++++++++++++++++++++++++++++++++++ 1 file changed, 3002 insertions(+) create mode 100644 pinocchio/program/idl.json diff --git a/pinocchio/program/idl.json b/pinocchio/program/idl.json new file mode 100644 index 00000000..0fc64262 --- /dev/null +++ b/pinocchio/program/idl.json @@ -0,0 +1,3002 @@ +{ + "kind": "rootNode", + "program": { + "kind": "programNode", + "pdas": [], + "accounts": [ + { + "kind": "accountNode", + "data": { + "kind": "structTypeNode", + "fields": [ + { + "kind": "structFieldTypeNode", + "name": "mintAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u32", + "endian": "le" + }, + "fixed": true + }, + "docs": [ + "Optional authority used to mint new tokens. The mint authority may only", + "be provided during mint creation. If no mint authority is present", + "then the mint has a fixed supply and no further tokens may be minted." + ] + }, + { + "kind": "structFieldTypeNode", + "name": "supply", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["Total supply of tokens."] + }, + { + "kind": "structFieldTypeNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Number of base 10 digits to the right of the decimal place." + ] + }, + { + "kind": "structFieldTypeNode", + "name": "isInitialized", + "type": { + "kind": "booleanTypeNode", + "size": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + } + }, + "docs": ["Is `true` if this structure has been initialized."] + }, + { + "kind": "structFieldTypeNode", + "name": "freezeAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u32", + "endian": "le" + }, + "fixed": true + }, + "docs": ["Optional authority to freeze token accounts."] + } + ] + }, + "discriminators": [ + { + "kind": "sizeDiscriminatorNode", + "size": 82 + } + ], + "name": "mint", + "docs": [], + "size": 82 + }, + { + "kind": "accountNode", + "data": { + "kind": "structTypeNode", + "fields": [ + { + "kind": "structFieldTypeNode", + "name": "mint", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["The mint associated with this account."] + }, + { + "kind": "structFieldTypeNode", + "name": "owner", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["The owner of this account."] + }, + { + "kind": "structFieldTypeNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens this account holds."] + }, + { + "kind": "structFieldTypeNode", + "name": "delegate", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u32", + "endian": "le" + }, + "fixed": true + }, + "docs": [ + "If `delegate` is `Some` then `delegated_amount` represents", + "the amount authorized by the delegate." + ] + }, + { + "kind": "structFieldTypeNode", + "name": "state", + "type": { "kind": "definedTypeLinkNode", "name": "accountState" }, + "docs": ["The account's state."] + }, + { + "kind": "structFieldTypeNode", + "name": "isNative", + "type": { + "kind": "optionTypeNode", + "item": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "prefix": { + "kind": "numberTypeNode", + "format": "u32", + "endian": "le" + }, + "fixed": true + }, + "docs": [ + "If is_native.is_some, this is a native token, and the value logs the", + "rent-exempt reserve. An Account is required to be rent-exempt, so", + "the value is used by the Processor to ensure that wrapped SOL", + "accounts do not drop below this threshold." + ] + }, + { + "kind": "structFieldTypeNode", + "name": "delegatedAmount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount delegated."] + }, + { + "kind": "structFieldTypeNode", + "name": "closeAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u32", + "endian": "le" + }, + "fixed": true + }, + "docs": ["Optional authority to close the account."] + } + ] + }, + "discriminators": [ + { + "kind": "sizeDiscriminatorNode", + "size": 165 + } + ], + "name": "token", + "docs": [], + "size": 165 + }, + { + "kind": "accountNode", + "data": { + "kind": "structTypeNode", + "fields": [ + { + "kind": "structFieldTypeNode", + "name": "m", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": ["Number of signers required."] + }, + { + "kind": "structFieldTypeNode", + "name": "n", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": ["Number of valid signers."] + }, + { + "kind": "structFieldTypeNode", + "name": "isInitialized", + "type": { + "kind": "booleanTypeNode", + "size": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + } + }, + "docs": ["Is `true` if this structure has been initialized."] + }, + { + "kind": "structFieldTypeNode", + "name": "signers", + "type": { + "kind": "arrayTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "count": { "kind": "fixedCountNode", "value": 11 } + }, + "docs": ["Signer public keys."] + } + ] + }, + "discriminators": [ + { + "kind": "sizeDiscriminatorNode", + "size": 355 + } + ], + "name": "multisig", + "docs": [], + "size": 355 + } + ], + "instructions": [ + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["Token mint account."] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 0 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": ["Number of decimals in token account amounts."] + }, + { + "kind": "instructionArgumentNode", + "name": "mintAuthority", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["Minting authority."] + }, + { + "kind": "instructionArgumentNode", + "name": "freezeAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "fixed": false + }, + "defaultValue": { + "kind": "noneValueNode" + }, + "docs": ["Optional authority that can freeze token accounts."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeMint", + "docs": [ + "Initializes a new mint and optionally deposits all the newly minted", + "tokens in an account.", + "", + "The `InitializeMint` instruction requires no signers and MUST be", + "included within the same Transaction as the system program's", + "`CreateAccount` instruction that creates the account being initialized.", + "Otherwise another party can acquire ownership of the uninitialized account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to initialize."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint this account will be associated with."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The new account's owner/multisignature."] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 1 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeAccount", + "docs": [ + "Initializes a new account to hold tokens. If this account is associated", + "with the native mint then the token balance of the initialized account", + "will be equal to the amount of SOL in the account. If this account is", + "associated with another mint, that mint must be initialized before this", + "command can succeed.", + "", + "The `InitializeAccount` instruction requires no signers and MUST be", + "included within the same Transaction as the system program's", + "`CreateAccount` instruction that creates the account being initialized.", + "Otherwise another party can acquire ownership of the uninitialized account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "multisig", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The multisignature account to initialize."] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 2 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "m", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "The number of signers (M) required to validate this multisignature account." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "signers" + } + } + ], + "name": "initializeMultisig", + "docs": [ + "Initializes a multisignature account with N provided signers.", + "", + "Multisignature accounts can used in place of any single owner/delegate", + "accounts in any token instruction that require an owner/delegate to be", + "present. The variant field represents the number of signers (M)", + "required to validate this multisignature account.", + "", + "The `InitializeMultisig` instruction requires no signers and MUST be", + "included within the same Transaction as the system program's", + "`CreateAccount` instruction that creates the account being initialized.", + "Otherwise another party can acquire ownership of the uninitialized account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The source account's owner/delegate or its multisignature account." + ], + "defaultValue": { "kind": "identityValueNode" } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 3 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens to transfer."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "transfer", + "docs": [ + "Transfers tokens from one account to another either directly or via a delegate.", + "If this account is associated with the native mint then equal amounts", + "of SOL and Tokens will be transferred to the destination account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "delegate", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The delegate."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 4 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens the delegate is approved for."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "approve", + "docs": [ + "Approves a delegate. A delegate is given the authority over tokens on", + "behalf of the source account's owner." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 5 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "revoke", + "docs": ["Revokes the delegate's authority."], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "owned", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The mint or account to change the authority of."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The current authority or the multisignature account of the mint or account to update." + ] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 6 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "authorityType", + "type": { "kind": "definedTypeLinkNode", "name": "authorityType" }, + "docs": ["The type of authority to update."] + }, + { + "kind": "instructionArgumentNode", + "name": "newAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "fixed": false + }, + "docs": ["The new authority"] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "setAuthority", + "docs": ["Sets a new authority of a mint or account."], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The mint account."] + }, + { + "kind": "instructionAccountNode", + "name": "token", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to mint tokens to."] + }, + { + "kind": "instructionAccountNode", + "name": "mintAuthority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The mint's minting authority or its multisignature account." + ] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 7 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of new tokens to mint."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "mintTo", + "docs": [ + "Mints new tokens to an account. The native mint does not support minting." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to burn from."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The account's owner/delegate or its multisignature account." + ], + "defaultValue": { "kind": "identityValueNode" } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": ["The amount of tokens to burn."], + "defaultValue": { "kind": "numberValueNode", "number": 8 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": [] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "burn", + "docs": [ + "Burns tokens by removing them from an account. `Burn` does not support", + "accounts associated with the native mint, use `CloseAccount` instead." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to close."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The account's owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 9 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "closeAccount", + "docs": [ + "Close an account by transferring all its SOL to the destination account.", + "Non-native accounts may only be closed if its token amount is zero." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to freeze."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The mint freeze authority or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 10 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "freezeAccount", + "docs": [ + "Freeze an Initialized account using the Mint's freeze_authority (if set)." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to thaw."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The mint freeze authority or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 11 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "thawAccount", + "docs": [ + "Thaw a Frozen account using the Mint's freeze_authority (if set)." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The source account's owner/delegate or its multisignature account." + ], + "defaultValue": { "kind": "identityValueNode" } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 12 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens to transfer."] + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Expected number of base 10 digits to the right of the decimal place." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "transferChecked", + "docs": [ + "Transfers tokens from one account to another either directly or via a", + "delegate. If this account is associated with the native mint then equal", + "amounts of SOL and Tokens will be transferred to the destination account.", + "", + "This instruction differs from Transfer in that the token mint and", + "decimals value is checked by the caller. This may be useful when", + "creating transactions offline or within a hardware wallet." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "delegate", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The delegate."] + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 13 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens the delegate is approved for."] + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Expected number of base 10 digits to the right of the decimal place." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "approveChecked", + "docs": [ + "Approves a delegate. A delegate is given the authority over tokens on", + "behalf of the source account's owner.", + "", + "This instruction differs from Approve in that the token mint and", + "decimals value is checked by the caller. This may be useful when", + "creating transactions offline or within a hardware wallet." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The mint."] + }, + { + "kind": "instructionAccountNode", + "name": "token", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to mint tokens to."] + }, + { + "kind": "instructionAccountNode", + "name": "mintAuthority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The mint's minting authority or its multisignature account." + ] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 14 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of new tokens to mint."] + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Expected number of base 10 digits to the right of the decimal place." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "mintToChecked", + "docs": [ + "Mints new tokens to an account. The native mint does not support minting.", + "", + "This instruction differs from MintTo in that the decimals value is", + "checked by the caller. This may be useful when creating transactions", + "offline or within a hardware wallet." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to burn from."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": [ + "The account's owner/delegate or its multisignature account." + ], + "defaultValue": { "kind": "identityValueNode" } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 15 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens to burn."] + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Expected number of base 10 digits to the right of the decimal place." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "burnChecked", + "docs": [ + "Burns tokens by removing them from an account. `BurnChecked` does not", + "support accounts associated with the native mint, use `CloseAccount` instead.", + "", + "This instruction differs from Burn in that the decimals value is checked", + "by the caller. This may be useful when creating transactions offline or", + "within a hardware wallet." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to initialize."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint this account will be associated with."] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 16 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "owner", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["The new account's owner/multisignature."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeAccount2", + "docs": [ + "Like InitializeAccount, but the owner pubkey is passed via instruction", + "data rather than the accounts list. This variant may be preferable", + "when using Cross Program Invocation from an instruction that does", + "not need the owner's `AccountInfo` otherwise." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": [ + "The native token account to sync with its underlying lamports." + ] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": true, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 17 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "syncNative", + "docs": [ + "Given a wrapped / native token account (a token account containing SOL)", + "updates its amount field based on the account's underlying `lamports`.", + "This is useful if a non-wrapped SOL account uses", + "`system_instruction::transfer` to move lamports to a wrapped token", + "account, and needs to have its token `amount` field updated." + ], + "optionalAccountStrategy": "omitted" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to initialize."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint this account will be associated with."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 18 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "owner", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["The new account's owner/multisignature."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeAccount3", + "docs": [ + "Like InitializeAccount2, but does not require the Rent sysvar to be provided." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "multisig", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The multisignature account to initialize."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 19 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "m", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "The number of signers (M) required to validate this multisignature account." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "signers" + } + } + ], + "name": "initializeMultisig2", + "docs": [ + "Like InitializeMultisig, but does not require the Rent sysvar to be provided." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The mint to initialize."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 20 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "decimals", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [ + "Number of base 10 digits to the right of the decimal place." + ] + }, + { + "kind": "instructionArgumentNode", + "name": "mintAuthority", + "type": { "kind": "publicKeyTypeNode" }, + "docs": ["The authority/multisignature to mint tokens."] + }, + { + "kind": "instructionArgumentNode", + "name": "freezeAuthority", + "type": { + "kind": "optionTypeNode", + "item": { "kind": "publicKeyTypeNode" }, + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "fixed": false + }, + "defaultValue": { + "kind": "noneValueNode" + }, + "docs": [ + "The optional freeze authority/multisignature of the mint." + ] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeMint2", + "docs": [ + "Like [`InitializeMint`], but does not require the Rent sysvar to be provided." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint to calculate for."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 21 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "getAccountDataSize", + "docs": [ + "Gets the required size of an account for the given mint as a", + "little-endian `u64`.", + "", + "Return data can be fetched using `sol_get_return_data` and deserializing", + "the return data as a little-endian `u64`." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "account", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The account to initialize."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 22 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "initializeImmutableOwner", + "docs": [ + "Initialize the Immutable Owner extension for the given token account", + "", + "Fails if the account has already been initialized, so must be called", + "before `InitializeAccount`.", + "", + "No-ops in this version of the program, but is included for compatibility", + "with the Associated Token Account program." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint to calculate for."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 23 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "docs": ["The amount of tokens to reformat."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "amountToUiAmount", + "docs": [ + "Convert an Amount of tokens to a UiAmount `string`, using the given", + "mint. In this version of the program, the mint can only specify the", + "number of decimals.", + "", + "Fails on an invalid mint.", + "", + "Return data can be fetched using `sol_get_return_data` and deserialized", + "with `String::from_utf8`." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The mint to calculate for."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 24 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "uiAmount", + "type": { + "kind": "stringTypeNode", + "encoding": "utf8" + }, + "docs": ["The ui_amount of tokens to reformat."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "uiAmountToAmount", + "docs": [ + "Convert a UiAmount of tokens to a little-endian `u64` raw Amount, using", + "the given mint. In this version of the program, the mint can only", + "specify the number of decimals.", + "", + "Return data can be fetched using `sol_get_return_data` and deserializing", + "the return data as a little-endian `u64`." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 38 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "withdrawExcessLamports", + "docs": [ + "Rescue SOL sent to any TokenProgram-owned account", + "by sending them to any other account, leaving behind only", + "lamports for rent exemption." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 45 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "optionTypeNode", + "item": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "fixed": false + }, + "defaultValue": { + "kind": "noneValueNode" + }, + "docs": ["Optional amount of lamports to transfer."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "UnwrapLamports", + "docs": [ + "Transfer lamports from a native SOL account to a destination account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 255 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "data", + "type": { + "kind": "arrayTypeNode", + "item": { + "kind": "structTypeNode", + "fields": [ + { "kind": "structFieldTypeNode", "name": "numberOfAccounts", "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + } + }, + { "kind": "structFieldTypeNode", "name": "instructionData", "type": { + "kind": "sizePrefixTypeNode", + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "type": { "kind": "bytesTypeNode" } } + } + ] + }, + "count": { "kind": "remainderCountNode" } + }, + "docs": ["Instruction data for batch instructions."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "account" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "Batch", + "docs": [ + "Executes a batch of instructions. The instructions to be executed are", + "specified in sequence on the instruction data." + ], + "optionalAccountStrategy": "programId" + } + ], + "definedTypes": [ + { + "kind": "definedTypeNode", + "name": "accountState", + "type": { + "kind": "enumTypeNode", + "variants": [ + { "kind": "enumEmptyVariantTypeNode", "name": "uninitialized" }, + { "kind": "enumEmptyVariantTypeNode", "name": "initialized" }, + { "kind": "enumEmptyVariantTypeNode", "name": "frozen" } + ], + "size": { "kind": "numberTypeNode", "format": "u8", "endian": "le" } + }, + "docs": [] + }, + { + "kind": "definedTypeNode", + "name": "authorityType", + "type": { + "kind": "enumTypeNode", + "variants": [ + { "kind": "enumEmptyVariantTypeNode", "name": "mintTokens" }, + { "kind": "enumEmptyVariantTypeNode", "name": "freezeAccount" }, + { "kind": "enumEmptyVariantTypeNode", "name": "accountOwner" }, + { "kind": "enumEmptyVariantTypeNode", "name": "closeAccount" } + ], + "size": { "kind": "numberTypeNode", "format": "u8", "endian": "le" } + }, + "docs": [] + } + ], + "errors": [ + { + "kind": "errorNode", + "name": "notRentExempt", + "code": 0, + "message": "Lamport balance below rent-exempt threshold", + "docs": ["NotRentExempt: Lamport balance below rent-exempt threshold"] + }, + { + "kind": "errorNode", + "name": "insufficientFunds", + "code": 1, + "message": "Insufficient funds", + "docs": ["InsufficientFunds: Insufficient funds"] + }, + { + "kind": "errorNode", + "name": "invalidMint", + "code": 2, + "message": "Invalid Mint", + "docs": ["InvalidMint: Invalid Mint"] + }, + { + "kind": "errorNode", + "name": "mintMismatch", + "code": 3, + "message": "Account not associated with this Mint", + "docs": ["MintMismatch: Account not associated with this Mint"] + }, + { + "kind": "errorNode", + "name": "ownerMismatch", + "code": 4, + "message": "Owner does not match", + "docs": ["OwnerMismatch: Owner does not match"] + }, + { + "kind": "errorNode", + "name": "fixedSupply", + "code": 5, + "message": "Fixed supply", + "docs": ["FixedSupply: Fixed supply"] + }, + { + "kind": "errorNode", + "name": "alreadyInUse", + "code": 6, + "message": "Already in use", + "docs": ["AlreadyInUse: Already in use"] + }, + { + "kind": "errorNode", + "name": "invalidNumberOfProvidedSigners", + "code": 7, + "message": "Invalid number of provided signers", + "docs": [ + "InvalidNumberOfProvidedSigners: Invalid number of provided signers" + ] + }, + { + "kind": "errorNode", + "name": "invalidNumberOfRequiredSigners", + "code": 8, + "message": "Invalid number of required signers", + "docs": [ + "InvalidNumberOfRequiredSigners: Invalid number of required signers" + ] + }, + { + "kind": "errorNode", + "name": "uninitializedState", + "code": 9, + "message": "State is unititialized", + "docs": ["UninitializedState: State is unititialized"] + }, + { + "kind": "errorNode", + "name": "nativeNotSupported", + "code": 10, + "message": "Instruction does not support native tokens", + "docs": [ + "NativeNotSupported: Instruction does not support native tokens" + ] + }, + { + "kind": "errorNode", + "name": "nonNativeHasBalance", + "code": 11, + "message": "Non-native account can only be closed if its balance is zero", + "docs": [ + "NonNativeHasBalance: Non-native account can only be closed if its balance is zero" + ] + }, + { + "kind": "errorNode", + "name": "invalidInstruction", + "code": 12, + "message": "Invalid instruction", + "docs": ["InvalidInstruction: Invalid instruction"] + }, + { + "kind": "errorNode", + "name": "invalidState", + "code": 13, + "message": "State is invalid for requested operation", + "docs": ["InvalidState: State is invalid for requested operation"] + }, + { + "kind": "errorNode", + "name": "overflow", + "code": 14, + "message": "Operation overflowed", + "docs": ["Overflow: Operation overflowed"] + }, + { + "kind": "errorNode", + "name": "authorityTypeNotSupported", + "code": 15, + "message": "Account does not support specified authority type", + "docs": [ + "AuthorityTypeNotSupported: Account does not support specified authority type" + ] + }, + { + "kind": "errorNode", + "name": "mintCannotFreeze", + "code": 16, + "message": "This token mint cannot freeze accounts", + "docs": ["MintCannotFreeze: This token mint cannot freeze accounts"] + }, + { + "kind": "errorNode", + "name": "accountFrozen", + "code": 17, + "message": "Account is frozen", + "docs": ["AccountFrozen: Account is frozen"] + }, + { + "kind": "errorNode", + "name": "mintDecimalsMismatch", + "code": 18, + "message": "The provided decimals value different from the Mint decimals", + "docs": [ + "MintDecimalsMismatch: The provided decimals value different from the Mint decimals" + ] + }, + { + "kind": "errorNode", + "name": "nonNativeNotSupported", + "code": 19, + "message": "Instruction does not support non-native tokens", + "docs": [ + "NonNativeNotSupported: Instruction does not support non-native tokens" + ] + } + ], + "name": "token", + "prefix": "", + "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + "version": "3.3.0", + "origin": "shank" + }, + "additionalPrograms": [ + { + "kind": "programNode", + "pdas": [ + { + "kind": "pdaNode", + "name": "associatedToken", + "seeds": [ + { + "kind": "variablePdaSeedNode", + "name": "owner", + "docs": ["The wallet address of the associated token account."], + "type": { + "kind": "publicKeyTypeNode" + } + }, + { + "kind": "variablePdaSeedNode", + "name": "tokenProgram", + "docs": ["The address of the token program to use."], + "type": { + "kind": "publicKeyTypeNode" + } + }, + { + "kind": "variablePdaSeedNode", + "name": "mint", + "docs": ["The mint address of the associated token account."], + "type": { + "kind": "publicKeyTypeNode" + } + } + ] + } + ], + "accounts": [], + "instructions": [ + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "payer", + "isWritable": true, + "isSigner": true, + "isOptional": false, + "docs": ["Funding account (must be a system account)."], + "defaultValue": { "kind": "payerValueNode" } + }, + { + "kind": "instructionAccountNode", + "name": "ata", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["Associated token account address to be created."], + "defaultValue": { + "kind": "pdaValueNode", + "pda": { + "kind": "pdaLinkNode", + "name": "associatedToken" + }, + "seeds": [ + { + "kind": "pdaSeedValueNode", + "name": "owner", + "value": { + "kind": "accountValueNode", + "name": "owner" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "tokenProgram", + "value": { + "kind": "accountValueNode", + "name": "tokenProgram" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "mint", + "value": { + "kind": "accountValueNode", + "name": "mint" + } + } + ] + } + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Wallet address for the new associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint for the new associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "systemProgram", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["System program."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "11111111111111111111111111111111" + } + }, + { + "kind": "instructionAccountNode", + "name": "tokenProgram", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["SPL Token program."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 0 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "createAssociatedToken", + "docs": [ + "Creates an associated token account for the given wallet address and", + "token mint Returns an error if the account exists." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "payer", + "isWritable": true, + "isSigner": true, + "isOptional": false, + "docs": ["Funding account (must be a system account)."], + "defaultValue": { "kind": "payerValueNode" } + }, + { + "kind": "instructionAccountNode", + "name": "ata", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["Associated token account address to be created."], + "defaultValue": { + "kind": "pdaValueNode", + "pda": { + "kind": "pdaLinkNode", + "name": "associatedToken" + }, + "seeds": [ + { + "kind": "pdaSeedValueNode", + "name": "owner", + "value": { + "kind": "accountValueNode", + "name": "owner" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "tokenProgram", + "value": { + "kind": "accountValueNode", + "name": "tokenProgram" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "mint", + "value": { + "kind": "accountValueNode", + "name": "mint" + } + } + ] + } + }, + { + "kind": "instructionAccountNode", + "name": "owner", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Wallet address for the new associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "mint", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["The token mint for the new associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "systemProgram", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["System program."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "11111111111111111111111111111111" + } + }, + { + "kind": "instructionAccountNode", + "name": "tokenProgram", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["SPL Token program."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 1 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "createAssociatedTokenIdempotent", + "docs": [ + "Creates an associated token account for the given wallet address and", + "token mint, if it doesn't already exist. Returns an error if the", + "account exists, but with a different owner." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "nestedAssociatedAccountAddress", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": [ + "Nested associated token account, must be owned by `ownerAssociatedAccountAddress`." + ], + "defaultValue": { + "kind": "pdaValueNode", + "pda": { + "kind": "pdaLinkNode", + "name": "associatedToken" + }, + "seeds": [ + { + "kind": "pdaSeedValueNode", + "name": "owner", + "value": { + "kind": "accountValueNode", + "name": "ownerAssociatedAccountAddress" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "tokenProgram", + "value": { + "kind": "accountValueNode", + "name": "tokenProgram" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "mint", + "value": { + "kind": "accountValueNode", + "name": "nestedTokenMintAddress" + } + } + ] + } + }, + { + "kind": "instructionAccountNode", + "name": "nestedTokenMintAddress", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Token mint for the nested associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "destinationAssociatedAccountAddress", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["Wallet's associated token account."], + "defaultValue": { + "kind": "pdaValueNode", + "pda": { + "kind": "pdaLinkNode", + "name": "associatedToken" + }, + "seeds": [ + { + "kind": "pdaSeedValueNode", + "name": "owner", + "value": { + "kind": "accountValueNode", + "name": "walletAddress" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "tokenProgram", + "value": { + "kind": "accountValueNode", + "name": "tokenProgram" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "mint", + "value": { + "kind": "accountValueNode", + "name": "nestedTokenMintAddress" + } + } + ] + } + }, + { + "kind": "instructionAccountNode", + "name": "ownerAssociatedAccountAddress", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": [ + "Owner associated token account address, must be owned by `walletAddress`." + ], + "defaultValue": { + "kind": "pdaValueNode", + "pda": { + "kind": "pdaLinkNode", + "name": "associatedToken" + }, + "seeds": [ + { + "kind": "pdaSeedValueNode", + "name": "owner", + "value": { + "kind": "accountValueNode", + "name": "walletAddress" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "tokenProgram", + "value": { + "kind": "accountValueNode", + "name": "tokenProgram" + } + }, + { + "kind": "pdaSeedValueNode", + "name": "mint", + "value": { + "kind": "accountValueNode", + "name": "ownerTokenMintAddress" + } + } + ] + } + }, + { + "kind": "instructionAccountNode", + "name": "ownerTokenMintAddress", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["Token mint for the owner associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "walletAddress", + "isWritable": true, + "isSigner": true, + "isOptional": false, + "docs": ["Wallet address for the owner associated token account."] + }, + { + "kind": "instructionAccountNode", + "name": "tokenProgram", + "isWritable": false, + "isSigner": false, + "isOptional": false, + "docs": ["SPL Token program."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + } + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 2 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "name": "recoverNestedAssociatedToken", + "docs": [ + "Transfers from and closes a nested associated token account: an", + "associated token account owned by an associated token account.", + "", + "The tokens are moved from the nested associated token account to the", + "wallet's associated token account, and the nested account lamports are", + "moved to the wallet.", + "", + "Note: Nested token accounts are an anti-pattern, and almost always", + "created unintentionally, so this instruction should only be used to", + "recover from errors." + ], + "optionalAccountStrategy": "programId" + } + ], + "definedTypes": [], + "errors": [ + { + "kind": "errorNode", + "name": "invalidOwner", + "code": 0, + "message": "Associated token account owner does not match address derivation", + "docs": [ + "InvalidOwner: Associated token account owner does not match address derivation" + ] + } + ], + "name": "associatedToken", + "prefix": "", + "publicKey": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", + "version": "1.1.1", + "origin": "shank" + } + ], + "standard": "codama", + "version": "1.0.0" +} From 41a6c7d6d5753d82227f7551f42c93a5ce076bdd Mon Sep 17 00:00:00 2001 From: febo Date: Mon, 30 Mar 2026 17:49:06 +0100 Subject: [PATCH 2/5] Replace current IDL --- pinocchio/program/idl.json | 3002 ------------------------------------ program/idl.json | 241 ++- 2 files changed, 240 insertions(+), 3003 deletions(-) delete mode 100644 pinocchio/program/idl.json diff --git a/pinocchio/program/idl.json b/pinocchio/program/idl.json deleted file mode 100644 index 0fc64262..00000000 --- a/pinocchio/program/idl.json +++ /dev/null @@ -1,3002 +0,0 @@ -{ - "kind": "rootNode", - "program": { - "kind": "programNode", - "pdas": [], - "accounts": [ - { - "kind": "accountNode", - "data": { - "kind": "structTypeNode", - "fields": [ - { - "kind": "structFieldTypeNode", - "name": "mintAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u32", - "endian": "le" - }, - "fixed": true - }, - "docs": [ - "Optional authority used to mint new tokens. The mint authority may only", - "be provided during mint creation. If no mint authority is present", - "then the mint has a fixed supply and no further tokens may be minted." - ] - }, - { - "kind": "structFieldTypeNode", - "name": "supply", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["Total supply of tokens."] - }, - { - "kind": "structFieldTypeNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Number of base 10 digits to the right of the decimal place." - ] - }, - { - "kind": "structFieldTypeNode", - "name": "isInitialized", - "type": { - "kind": "booleanTypeNode", - "size": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - } - }, - "docs": ["Is `true` if this structure has been initialized."] - }, - { - "kind": "structFieldTypeNode", - "name": "freezeAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u32", - "endian": "le" - }, - "fixed": true - }, - "docs": ["Optional authority to freeze token accounts."] - } - ] - }, - "discriminators": [ - { - "kind": "sizeDiscriminatorNode", - "size": 82 - } - ], - "name": "mint", - "docs": [], - "size": 82 - }, - { - "kind": "accountNode", - "data": { - "kind": "structTypeNode", - "fields": [ - { - "kind": "structFieldTypeNode", - "name": "mint", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["The mint associated with this account."] - }, - { - "kind": "structFieldTypeNode", - "name": "owner", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["The owner of this account."] - }, - { - "kind": "structFieldTypeNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens this account holds."] - }, - { - "kind": "structFieldTypeNode", - "name": "delegate", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u32", - "endian": "le" - }, - "fixed": true - }, - "docs": [ - "If `delegate` is `Some` then `delegated_amount` represents", - "the amount authorized by the delegate." - ] - }, - { - "kind": "structFieldTypeNode", - "name": "state", - "type": { "kind": "definedTypeLinkNode", "name": "accountState" }, - "docs": ["The account's state."] - }, - { - "kind": "structFieldTypeNode", - "name": "isNative", - "type": { - "kind": "optionTypeNode", - "item": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "prefix": { - "kind": "numberTypeNode", - "format": "u32", - "endian": "le" - }, - "fixed": true - }, - "docs": [ - "If is_native.is_some, this is a native token, and the value logs the", - "rent-exempt reserve. An Account is required to be rent-exempt, so", - "the value is used by the Processor to ensure that wrapped SOL", - "accounts do not drop below this threshold." - ] - }, - { - "kind": "structFieldTypeNode", - "name": "delegatedAmount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount delegated."] - }, - { - "kind": "structFieldTypeNode", - "name": "closeAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u32", - "endian": "le" - }, - "fixed": true - }, - "docs": ["Optional authority to close the account."] - } - ] - }, - "discriminators": [ - { - "kind": "sizeDiscriminatorNode", - "size": 165 - } - ], - "name": "token", - "docs": [], - "size": 165 - }, - { - "kind": "accountNode", - "data": { - "kind": "structTypeNode", - "fields": [ - { - "kind": "structFieldTypeNode", - "name": "m", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": ["Number of signers required."] - }, - { - "kind": "structFieldTypeNode", - "name": "n", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": ["Number of valid signers."] - }, - { - "kind": "structFieldTypeNode", - "name": "isInitialized", - "type": { - "kind": "booleanTypeNode", - "size": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - } - }, - "docs": ["Is `true` if this structure has been initialized."] - }, - { - "kind": "structFieldTypeNode", - "name": "signers", - "type": { - "kind": "arrayTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "count": { "kind": "fixedCountNode", "value": 11 } - }, - "docs": ["Signer public keys."] - } - ] - }, - "discriminators": [ - { - "kind": "sizeDiscriminatorNode", - "size": 355 - } - ], - "name": "multisig", - "docs": [], - "size": 355 - } - ], - "instructions": [ - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["Token mint account."] - }, - { - "kind": "instructionAccountNode", - "name": "rent", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Rent sysvar."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "SysvarRent111111111111111111111111111111111" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 0 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": ["Number of decimals in token account amounts."] - }, - { - "kind": "instructionArgumentNode", - "name": "mintAuthority", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["Minting authority."] - }, - { - "kind": "instructionArgumentNode", - "name": "freezeAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "fixed": false - }, - "defaultValue": { - "kind": "noneValueNode" - }, - "docs": ["Optional authority that can freeze token accounts."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeMint", - "docs": [ - "Initializes a new mint and optionally deposits all the newly minted", - "tokens in an account.", - "", - "The `InitializeMint` instruction requires no signers and MUST be", - "included within the same Transaction as the system program's", - "`CreateAccount` instruction that creates the account being initialized.", - "Otherwise another party can acquire ownership of the uninitialized account." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to initialize."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint this account will be associated with."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The new account's owner/multisignature."] - }, - { - "kind": "instructionAccountNode", - "name": "rent", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Rent sysvar."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "SysvarRent111111111111111111111111111111111" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 1 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeAccount", - "docs": [ - "Initializes a new account to hold tokens. If this account is associated", - "with the native mint then the token balance of the initialized account", - "will be equal to the amount of SOL in the account. If this account is", - "associated with another mint, that mint must be initialized before this", - "command can succeed.", - "", - "The `InitializeAccount` instruction requires no signers and MUST be", - "included within the same Transaction as the system program's", - "`CreateAccount` instruction that creates the account being initialized.", - "Otherwise another party can acquire ownership of the uninitialized account." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "multisig", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The multisignature account to initialize."] - }, - { - "kind": "instructionAccountNode", - "name": "rent", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Rent sysvar."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "SysvarRent111111111111111111111111111111111" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 2 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "m", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "The number of signers (M) required to validate this multisignature account." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "signers" - } - } - ], - "name": "initializeMultisig", - "docs": [ - "Initializes a multisignature account with N provided signers.", - "", - "Multisignature accounts can used in place of any single owner/delegate", - "accounts in any token instruction that require an owner/delegate to be", - "present. The variant field represents the number of signers (M)", - "required to validate this multisignature account.", - "", - "The `InitializeMultisig` instruction requires no signers and MUST be", - "included within the same Transaction as the system program's", - "`CreateAccount` instruction that creates the account being initialized.", - "Otherwise another party can acquire ownership of the uninitialized account." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "destination", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The destination account."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The source account's owner/delegate or its multisignature account." - ], - "defaultValue": { "kind": "identityValueNode" } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 3 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens to transfer."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "transfer", - "docs": [ - "Transfers tokens from one account to another either directly or via a delegate.", - "If this account is associated with the native mint then equal amounts", - "of SOL and Tokens will be transferred to the destination account." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "delegate", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The delegate."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The source account owner or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 4 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens the delegate is approved for."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "approve", - "docs": [ - "Approves a delegate. A delegate is given the authority over tokens on", - "behalf of the source account's owner." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The source account owner or its multisignature."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 5 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "revoke", - "docs": ["Revokes the delegate's authority."], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "owned", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The mint or account to change the authority of."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The current authority or the multisignature account of the mint or account to update." - ] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 6 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "authorityType", - "type": { "kind": "definedTypeLinkNode", "name": "authorityType" }, - "docs": ["The type of authority to update."] - }, - { - "kind": "instructionArgumentNode", - "name": "newAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "fixed": false - }, - "docs": ["The new authority"] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "setAuthority", - "docs": ["Sets a new authority of a mint or account."], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The mint account."] - }, - { - "kind": "instructionAccountNode", - "name": "token", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to mint tokens to."] - }, - { - "kind": "instructionAccountNode", - "name": "mintAuthority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The mint's minting authority or its multisignature account." - ] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 7 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of new tokens to mint."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "mintTo", - "docs": [ - "Mints new tokens to an account. The native mint does not support minting." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to burn from."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The account's owner/delegate or its multisignature account." - ], - "defaultValue": { "kind": "identityValueNode" } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": ["The amount of tokens to burn."], - "defaultValue": { "kind": "numberValueNode", "number": 8 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": [] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "burn", - "docs": [ - "Burns tokens by removing them from an account. `Burn` does not support", - "accounts associated with the native mint, use `CloseAccount` instead." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to close."] - }, - { - "kind": "instructionAccountNode", - "name": "destination", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The destination account."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The account's owner or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 9 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "closeAccount", - "docs": [ - "Close an account by transferring all its SOL to the destination account.", - "Non-native accounts may only be closed if its token amount is zero." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to freeze."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The mint freeze authority or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 10 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "freezeAccount", - "docs": [ - "Freeze an Initialized account using the Mint's freeze_authority (if set)." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to thaw."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The mint freeze authority or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 11 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "thawAccount", - "docs": [ - "Thaw a Frozen account using the Mint's freeze_authority (if set)." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "destination", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The destination account."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The source account's owner/delegate or its multisignature account." - ], - "defaultValue": { "kind": "identityValueNode" } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 12 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens to transfer."] - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Expected number of base 10 digits to the right of the decimal place." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "transferChecked", - "docs": [ - "Transfers tokens from one account to another either directly or via a", - "delegate. If this account is associated with the native mint then equal", - "amounts of SOL and Tokens will be transferred to the destination account.", - "", - "This instruction differs from Transfer in that the token mint and", - "decimals value is checked by the caller. This may be useful when", - "creating transactions offline or within a hardware wallet." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "delegate", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The delegate."] - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The source account owner or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 13 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens the delegate is approved for."] - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Expected number of base 10 digits to the right of the decimal place." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "approveChecked", - "docs": [ - "Approves a delegate. A delegate is given the authority over tokens on", - "behalf of the source account's owner.", - "", - "This instruction differs from Approve in that the token mint and", - "decimals value is checked by the caller. This may be useful when", - "creating transactions offline or within a hardware wallet." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The mint."] - }, - { - "kind": "instructionAccountNode", - "name": "token", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to mint tokens to."] - }, - { - "kind": "instructionAccountNode", - "name": "mintAuthority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The mint's minting authority or its multisignature account." - ] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 14 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of new tokens to mint."] - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Expected number of base 10 digits to the right of the decimal place." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "mintToChecked", - "docs": [ - "Mints new tokens to an account. The native mint does not support minting.", - "", - "This instruction differs from MintTo in that the decimals value is", - "checked by the caller. This may be useful when creating transactions", - "offline or within a hardware wallet." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to burn from."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": [ - "The account's owner/delegate or its multisignature account." - ], - "defaultValue": { "kind": "identityValueNode" } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 15 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens to burn."] - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Expected number of base 10 digits to the right of the decimal place." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "burnChecked", - "docs": [ - "Burns tokens by removing them from an account. `BurnChecked` does not", - "support accounts associated with the native mint, use `CloseAccount` instead.", - "", - "This instruction differs from Burn in that the decimals value is checked", - "by the caller. This may be useful when creating transactions offline or", - "within a hardware wallet." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to initialize."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint this account will be associated with."] - }, - { - "kind": "instructionAccountNode", - "name": "rent", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Rent sysvar."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "SysvarRent111111111111111111111111111111111" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 16 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "owner", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["The new account's owner/multisignature."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeAccount2", - "docs": [ - "Like InitializeAccount, but the owner pubkey is passed via instruction", - "data rather than the accounts list. This variant may be preferable", - "when using Cross Program Invocation from an instruction that does", - "not need the owner's `AccountInfo` otherwise." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": [ - "The native token account to sync with its underlying lamports." - ] - }, - { - "kind": "instructionAccountNode", - "name": "rent", - "isWritable": false, - "isSigner": false, - "isOptional": true, - "docs": ["Rent sysvar."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "SysvarRent111111111111111111111111111111111" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 17 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "syncNative", - "docs": [ - "Given a wrapped / native token account (a token account containing SOL)", - "updates its amount field based on the account's underlying `lamports`.", - "This is useful if a non-wrapped SOL account uses", - "`system_instruction::transfer` to move lamports to a wrapped token", - "account, and needs to have its token `amount` field updated." - ], - "optionalAccountStrategy": "omitted" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to initialize."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint this account will be associated with."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 18 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "owner", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["The new account's owner/multisignature."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeAccount3", - "docs": [ - "Like InitializeAccount2, but does not require the Rent sysvar to be provided." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "multisig", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The multisignature account to initialize."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 19 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "m", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "The number of signers (M) required to validate this multisignature account." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "signers" - } - } - ], - "name": "initializeMultisig2", - "docs": [ - "Like InitializeMultisig, but does not require the Rent sysvar to be provided." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The mint to initialize."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 20 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "decimals", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [ - "Number of base 10 digits to the right of the decimal place." - ] - }, - { - "kind": "instructionArgumentNode", - "name": "mintAuthority", - "type": { "kind": "publicKeyTypeNode" }, - "docs": ["The authority/multisignature to mint tokens."] - }, - { - "kind": "instructionArgumentNode", - "name": "freezeAuthority", - "type": { - "kind": "optionTypeNode", - "item": { "kind": "publicKeyTypeNode" }, - "prefix": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "fixed": false - }, - "defaultValue": { - "kind": "noneValueNode" - }, - "docs": [ - "The optional freeze authority/multisignature of the mint." - ] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeMint2", - "docs": [ - "Like [`InitializeMint`], but does not require the Rent sysvar to be provided." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint to calculate for."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 21 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "getAccountDataSize", - "docs": [ - "Gets the required size of an account for the given mint as a", - "little-endian `u64`.", - "", - "Return data can be fetched using `sol_get_return_data` and deserializing", - "the return data as a little-endian `u64`." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "account", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The account to initialize."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 22 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "initializeImmutableOwner", - "docs": [ - "Initialize the Immutable Owner extension for the given token account", - "", - "Fails if the account has already been initialized, so must be called", - "before `InitializeAccount`.", - "", - "No-ops in this version of the program, but is included for compatibility", - "with the Associated Token Account program." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint to calculate for."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 23 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "docs": ["The amount of tokens to reformat."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "amountToUiAmount", - "docs": [ - "Convert an Amount of tokens to a UiAmount `string`, using the given", - "mint. In this version of the program, the mint can only specify the", - "number of decimals.", - "", - "Fails on an invalid mint.", - "", - "Return data can be fetched using `sol_get_return_data` and deserialized", - "with `String::from_utf8`." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The mint to calculate for."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 24 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "uiAmount", - "type": { - "kind": "stringTypeNode", - "encoding": "utf8" - }, - "docs": ["The ui_amount of tokens to reformat."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "uiAmountToAmount", - "docs": [ - "Convert a UiAmount of tokens to a little-endian `u64` raw Amount, using", - "the given mint. In this version of the program, the mint can only", - "specify the number of decimals.", - "", - "Return data can be fetched using `sol_get_return_data` and deserializing", - "the return data as a little-endian `u64`." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "destination", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The destination account."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The source account owner or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 38 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "withdrawExcessLamports", - "docs": [ - "Rescue SOL sent to any TokenProgram-owned account", - "by sending them to any other account, leaving behind only", - "lamports for rent exemption." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "source", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The source account."] - }, - { - "kind": "instructionAccountNode", - "name": "destination", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["The destination account."] - }, - { - "kind": "instructionAccountNode", - "name": "authority", - "isWritable": false, - "isSigner": "either", - "isOptional": false, - "docs": ["The source account owner or its multisignature account."] - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 45 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "amount", - "type": { - "kind": "optionTypeNode", - "item": { - "kind": "numberTypeNode", - "format": "u64", - "endian": "le" - }, - "prefix": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "fixed": false - }, - "defaultValue": { - "kind": "noneValueNode" - }, - "docs": ["Optional amount of lamports to transfer."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "multiSigners" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "UnwrapLamports", - "docs": [ - "Transfer lamports from a native SOL account to a destination account." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 255 }, - "defaultValueStrategy": "omitted" - }, - { - "kind": "instructionArgumentNode", - "name": "data", - "type": { - "kind": "arrayTypeNode", - "item": { - "kind": "structTypeNode", - "fields": [ - { "kind": "structFieldTypeNode", "name": "numberOfAccounts", "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - } - }, - { "kind": "structFieldTypeNode", "name": "instructionData", "type": { - "kind": "sizePrefixTypeNode", - "prefix": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "type": { "kind": "bytesTypeNode" } } - } - ] - }, - "count": { "kind": "remainderCountNode" } - }, - "docs": ["Instruction data for batch instructions."] - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "remainingAccounts": [ - { - "kind": "instructionRemainingAccountsNode", - "value": { - "kind": "argumentValueNode", - "name": "account" - }, - "isOptional": true, - "isSigner": true - } - ], - "name": "Batch", - "docs": [ - "Executes a batch of instructions. The instructions to be executed are", - "specified in sequence on the instruction data." - ], - "optionalAccountStrategy": "programId" - } - ], - "definedTypes": [ - { - "kind": "definedTypeNode", - "name": "accountState", - "type": { - "kind": "enumTypeNode", - "variants": [ - { "kind": "enumEmptyVariantTypeNode", "name": "uninitialized" }, - { "kind": "enumEmptyVariantTypeNode", "name": "initialized" }, - { "kind": "enumEmptyVariantTypeNode", "name": "frozen" } - ], - "size": { "kind": "numberTypeNode", "format": "u8", "endian": "le" } - }, - "docs": [] - }, - { - "kind": "definedTypeNode", - "name": "authorityType", - "type": { - "kind": "enumTypeNode", - "variants": [ - { "kind": "enumEmptyVariantTypeNode", "name": "mintTokens" }, - { "kind": "enumEmptyVariantTypeNode", "name": "freezeAccount" }, - { "kind": "enumEmptyVariantTypeNode", "name": "accountOwner" }, - { "kind": "enumEmptyVariantTypeNode", "name": "closeAccount" } - ], - "size": { "kind": "numberTypeNode", "format": "u8", "endian": "le" } - }, - "docs": [] - } - ], - "errors": [ - { - "kind": "errorNode", - "name": "notRentExempt", - "code": 0, - "message": "Lamport balance below rent-exempt threshold", - "docs": ["NotRentExempt: Lamport balance below rent-exempt threshold"] - }, - { - "kind": "errorNode", - "name": "insufficientFunds", - "code": 1, - "message": "Insufficient funds", - "docs": ["InsufficientFunds: Insufficient funds"] - }, - { - "kind": "errorNode", - "name": "invalidMint", - "code": 2, - "message": "Invalid Mint", - "docs": ["InvalidMint: Invalid Mint"] - }, - { - "kind": "errorNode", - "name": "mintMismatch", - "code": 3, - "message": "Account not associated with this Mint", - "docs": ["MintMismatch: Account not associated with this Mint"] - }, - { - "kind": "errorNode", - "name": "ownerMismatch", - "code": 4, - "message": "Owner does not match", - "docs": ["OwnerMismatch: Owner does not match"] - }, - { - "kind": "errorNode", - "name": "fixedSupply", - "code": 5, - "message": "Fixed supply", - "docs": ["FixedSupply: Fixed supply"] - }, - { - "kind": "errorNode", - "name": "alreadyInUse", - "code": 6, - "message": "Already in use", - "docs": ["AlreadyInUse: Already in use"] - }, - { - "kind": "errorNode", - "name": "invalidNumberOfProvidedSigners", - "code": 7, - "message": "Invalid number of provided signers", - "docs": [ - "InvalidNumberOfProvidedSigners: Invalid number of provided signers" - ] - }, - { - "kind": "errorNode", - "name": "invalidNumberOfRequiredSigners", - "code": 8, - "message": "Invalid number of required signers", - "docs": [ - "InvalidNumberOfRequiredSigners: Invalid number of required signers" - ] - }, - { - "kind": "errorNode", - "name": "uninitializedState", - "code": 9, - "message": "State is unititialized", - "docs": ["UninitializedState: State is unititialized"] - }, - { - "kind": "errorNode", - "name": "nativeNotSupported", - "code": 10, - "message": "Instruction does not support native tokens", - "docs": [ - "NativeNotSupported: Instruction does not support native tokens" - ] - }, - { - "kind": "errorNode", - "name": "nonNativeHasBalance", - "code": 11, - "message": "Non-native account can only be closed if its balance is zero", - "docs": [ - "NonNativeHasBalance: Non-native account can only be closed if its balance is zero" - ] - }, - { - "kind": "errorNode", - "name": "invalidInstruction", - "code": 12, - "message": "Invalid instruction", - "docs": ["InvalidInstruction: Invalid instruction"] - }, - { - "kind": "errorNode", - "name": "invalidState", - "code": 13, - "message": "State is invalid for requested operation", - "docs": ["InvalidState: State is invalid for requested operation"] - }, - { - "kind": "errorNode", - "name": "overflow", - "code": 14, - "message": "Operation overflowed", - "docs": ["Overflow: Operation overflowed"] - }, - { - "kind": "errorNode", - "name": "authorityTypeNotSupported", - "code": 15, - "message": "Account does not support specified authority type", - "docs": [ - "AuthorityTypeNotSupported: Account does not support specified authority type" - ] - }, - { - "kind": "errorNode", - "name": "mintCannotFreeze", - "code": 16, - "message": "This token mint cannot freeze accounts", - "docs": ["MintCannotFreeze: This token mint cannot freeze accounts"] - }, - { - "kind": "errorNode", - "name": "accountFrozen", - "code": 17, - "message": "Account is frozen", - "docs": ["AccountFrozen: Account is frozen"] - }, - { - "kind": "errorNode", - "name": "mintDecimalsMismatch", - "code": 18, - "message": "The provided decimals value different from the Mint decimals", - "docs": [ - "MintDecimalsMismatch: The provided decimals value different from the Mint decimals" - ] - }, - { - "kind": "errorNode", - "name": "nonNativeNotSupported", - "code": 19, - "message": "Instruction does not support non-native tokens", - "docs": [ - "NonNativeNotSupported: Instruction does not support non-native tokens" - ] - } - ], - "name": "token", - "prefix": "", - "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", - "version": "3.3.0", - "origin": "shank" - }, - "additionalPrograms": [ - { - "kind": "programNode", - "pdas": [ - { - "kind": "pdaNode", - "name": "associatedToken", - "seeds": [ - { - "kind": "variablePdaSeedNode", - "name": "owner", - "docs": ["The wallet address of the associated token account."], - "type": { - "kind": "publicKeyTypeNode" - } - }, - { - "kind": "variablePdaSeedNode", - "name": "tokenProgram", - "docs": ["The address of the token program to use."], - "type": { - "kind": "publicKeyTypeNode" - } - }, - { - "kind": "variablePdaSeedNode", - "name": "mint", - "docs": ["The mint address of the associated token account."], - "type": { - "kind": "publicKeyTypeNode" - } - } - ] - } - ], - "accounts": [], - "instructions": [ - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "payer", - "isWritable": true, - "isSigner": true, - "isOptional": false, - "docs": ["Funding account (must be a system account)."], - "defaultValue": { "kind": "payerValueNode" } - }, - { - "kind": "instructionAccountNode", - "name": "ata", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["Associated token account address to be created."], - "defaultValue": { - "kind": "pdaValueNode", - "pda": { - "kind": "pdaLinkNode", - "name": "associatedToken" - }, - "seeds": [ - { - "kind": "pdaSeedValueNode", - "name": "owner", - "value": { - "kind": "accountValueNode", - "name": "owner" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "tokenProgram", - "value": { - "kind": "accountValueNode", - "name": "tokenProgram" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "mint", - "value": { - "kind": "accountValueNode", - "name": "mint" - } - } - ] - } - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Wallet address for the new associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint for the new associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "systemProgram", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["System program."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "11111111111111111111111111111111" - } - }, - { - "kind": "instructionAccountNode", - "name": "tokenProgram", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["SPL Token program."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 0 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "createAssociatedToken", - "docs": [ - "Creates an associated token account for the given wallet address and", - "token mint Returns an error if the account exists." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "payer", - "isWritable": true, - "isSigner": true, - "isOptional": false, - "docs": ["Funding account (must be a system account)."], - "defaultValue": { "kind": "payerValueNode" } - }, - { - "kind": "instructionAccountNode", - "name": "ata", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["Associated token account address to be created."], - "defaultValue": { - "kind": "pdaValueNode", - "pda": { - "kind": "pdaLinkNode", - "name": "associatedToken" - }, - "seeds": [ - { - "kind": "pdaSeedValueNode", - "name": "owner", - "value": { - "kind": "accountValueNode", - "name": "owner" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "tokenProgram", - "value": { - "kind": "accountValueNode", - "name": "tokenProgram" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "mint", - "value": { - "kind": "accountValueNode", - "name": "mint" - } - } - ] - } - }, - { - "kind": "instructionAccountNode", - "name": "owner", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Wallet address for the new associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "mint", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["The token mint for the new associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "systemProgram", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["System program."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "11111111111111111111111111111111" - } - }, - { - "kind": "instructionAccountNode", - "name": "tokenProgram", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["SPL Token program."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 1 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "createAssociatedTokenIdempotent", - "docs": [ - "Creates an associated token account for the given wallet address and", - "token mint, if it doesn't already exist. Returns an error if the", - "account exists, but with a different owner." - ], - "optionalAccountStrategy": "programId" - }, - { - "kind": "instructionNode", - "accounts": [ - { - "kind": "instructionAccountNode", - "name": "nestedAssociatedAccountAddress", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": [ - "Nested associated token account, must be owned by `ownerAssociatedAccountAddress`." - ], - "defaultValue": { - "kind": "pdaValueNode", - "pda": { - "kind": "pdaLinkNode", - "name": "associatedToken" - }, - "seeds": [ - { - "kind": "pdaSeedValueNode", - "name": "owner", - "value": { - "kind": "accountValueNode", - "name": "ownerAssociatedAccountAddress" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "tokenProgram", - "value": { - "kind": "accountValueNode", - "name": "tokenProgram" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "mint", - "value": { - "kind": "accountValueNode", - "name": "nestedTokenMintAddress" - } - } - ] - } - }, - { - "kind": "instructionAccountNode", - "name": "nestedTokenMintAddress", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Token mint for the nested associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "destinationAssociatedAccountAddress", - "isWritable": true, - "isSigner": false, - "isOptional": false, - "docs": ["Wallet's associated token account."], - "defaultValue": { - "kind": "pdaValueNode", - "pda": { - "kind": "pdaLinkNode", - "name": "associatedToken" - }, - "seeds": [ - { - "kind": "pdaSeedValueNode", - "name": "owner", - "value": { - "kind": "accountValueNode", - "name": "walletAddress" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "tokenProgram", - "value": { - "kind": "accountValueNode", - "name": "tokenProgram" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "mint", - "value": { - "kind": "accountValueNode", - "name": "nestedTokenMintAddress" - } - } - ] - } - }, - { - "kind": "instructionAccountNode", - "name": "ownerAssociatedAccountAddress", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": [ - "Owner associated token account address, must be owned by `walletAddress`." - ], - "defaultValue": { - "kind": "pdaValueNode", - "pda": { - "kind": "pdaLinkNode", - "name": "associatedToken" - }, - "seeds": [ - { - "kind": "pdaSeedValueNode", - "name": "owner", - "value": { - "kind": "accountValueNode", - "name": "walletAddress" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "tokenProgram", - "value": { - "kind": "accountValueNode", - "name": "tokenProgram" - } - }, - { - "kind": "pdaSeedValueNode", - "name": "mint", - "value": { - "kind": "accountValueNode", - "name": "ownerTokenMintAddress" - } - } - ] - } - }, - { - "kind": "instructionAccountNode", - "name": "ownerTokenMintAddress", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["Token mint for the owner associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "walletAddress", - "isWritable": true, - "isSigner": true, - "isOptional": false, - "docs": ["Wallet address for the owner associated token account."] - }, - { - "kind": "instructionAccountNode", - "name": "tokenProgram", - "isWritable": false, - "isSigner": false, - "isOptional": false, - "docs": ["SPL Token program."], - "defaultValue": { - "kind": "publicKeyValueNode", - "publicKey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - } - } - ], - "arguments": [ - { - "kind": "instructionArgumentNode", - "name": "discriminator", - "type": { - "kind": "numberTypeNode", - "format": "u8", - "endian": "le" - }, - "docs": [], - "defaultValue": { "kind": "numberValueNode", "number": 2 }, - "defaultValueStrategy": "omitted" - } - ], - "discriminators": [ - { - "kind": "fieldDiscriminatorNode", - "name": "discriminator", - "offset": 0 - } - ], - "name": "recoverNestedAssociatedToken", - "docs": [ - "Transfers from and closes a nested associated token account: an", - "associated token account owned by an associated token account.", - "", - "The tokens are moved from the nested associated token account to the", - "wallet's associated token account, and the nested account lamports are", - "moved to the wallet.", - "", - "Note: Nested token accounts are an anti-pattern, and almost always", - "created unintentionally, so this instruction should only be used to", - "recover from errors." - ], - "optionalAccountStrategy": "programId" - } - ], - "definedTypes": [], - "errors": [ - { - "kind": "errorNode", - "name": "invalidOwner", - "code": 0, - "message": "Associated token account owner does not match address derivation", - "docs": [ - "InvalidOwner: Associated token account owner does not match address derivation" - ] - } - ], - "name": "associatedToken", - "prefix": "", - "publicKey": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", - "version": "1.1.1", - "origin": "shank" - } - ], - "standard": "codama", - "version": "1.0.0" -} diff --git a/program/idl.json b/program/idl.json index 83c87941..0fc64262 100644 --- a/program/idl.json +++ b/program/idl.json @@ -1639,6 +1639,18 @@ "docs": [ "The native token account to sync with its underlying lamports." ] + }, + { + "kind": "instructionAccountNode", + "name": "rent", + "isWritable": false, + "isSigner": false, + "isOptional": true, + "docs": ["Rent sysvar."], + "defaultValue": { + "kind": "publicKeyValueNode", + "publicKey": "SysvarRent111111111111111111111111111111111" + } } ], "arguments": [ @@ -1670,7 +1682,7 @@ "`system_instruction::transfer` to move lamports to a wrapped token", "account, and needs to have its token `amount` field updated." ], - "optionalAccountStrategy": "programId" + "optionalAccountStrategy": "omitted" }, { "kind": "instructionNode", @@ -2058,6 +2070,233 @@ "the return data as a little-endian `u64`." ], "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 38 }, + "defaultValueStrategy": "omitted" + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "withdrawExcessLamports", + "docs": [ + "Rescue SOL sent to any TokenProgram-owned account", + "by sending them to any other account, leaving behind only", + "lamports for rent exemption." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [ + { + "kind": "instructionAccountNode", + "name": "source", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The source account."] + }, + { + "kind": "instructionAccountNode", + "name": "destination", + "isWritable": true, + "isSigner": false, + "isOptional": false, + "docs": ["The destination account."] + }, + { + "kind": "instructionAccountNode", + "name": "authority", + "isWritable": false, + "isSigner": "either", + "isOptional": false, + "docs": ["The source account owner or its multisignature account."] + } + ], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 45 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "amount", + "type": { + "kind": "optionTypeNode", + "item": { + "kind": "numberTypeNode", + "format": "u64", + "endian": "le" + }, + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "fixed": false + }, + "defaultValue": { + "kind": "noneValueNode" + }, + "docs": ["Optional amount of lamports to transfer."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "multiSigners" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "UnwrapLamports", + "docs": [ + "Transfer lamports from a native SOL account to a destination account." + ], + "optionalAccountStrategy": "programId" + }, + { + "kind": "instructionNode", + "accounts": [], + "arguments": [ + { + "kind": "instructionArgumentNode", + "name": "discriminator", + "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "docs": [], + "defaultValue": { "kind": "numberValueNode", "number": 255 }, + "defaultValueStrategy": "omitted" + }, + { + "kind": "instructionArgumentNode", + "name": "data", + "type": { + "kind": "arrayTypeNode", + "item": { + "kind": "structTypeNode", + "fields": [ + { "kind": "structFieldTypeNode", "name": "numberOfAccounts", "type": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + } + }, + { "kind": "structFieldTypeNode", "name": "instructionData", "type": { + "kind": "sizePrefixTypeNode", + "prefix": { + "kind": "numberTypeNode", + "format": "u8", + "endian": "le" + }, + "type": { "kind": "bytesTypeNode" } } + } + ] + }, + "count": { "kind": "remainderCountNode" } + }, + "docs": ["Instruction data for batch instructions."] + } + ], + "discriminators": [ + { + "kind": "fieldDiscriminatorNode", + "name": "discriminator", + "offset": 0 + } + ], + "remainingAccounts": [ + { + "kind": "instructionRemainingAccountsNode", + "value": { + "kind": "argumentValueNode", + "name": "account" + }, + "isOptional": true, + "isSigner": true + } + ], + "name": "Batch", + "docs": [ + "Executes a batch of instructions. The instructions to be executed are", + "specified in sequence on the instruction data." + ], + "optionalAccountStrategy": "programId" } ], "definedTypes": [ From 1b079dc776c8ac3f69db8d6d51dbab6d1018e7a8 Mon Sep 17 00:00:00 2001 From: febo Date: Mon, 30 Mar 2026 18:22:50 +0100 Subject: [PATCH 3/5] Address review comments --- program/idl.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/program/idl.json b/program/idl.json index 0fc64262..34a7eba2 100644 --- a/program/idl.json +++ b/program/idl.json @@ -2200,7 +2200,10 @@ "defaultValue": { "kind": "noneValueNode" }, - "docs": ["Optional amount of lamports to transfer."] + "docs": [ + "Optional amount of lamports to transfer.", + "If not provided, the instruction will unwrap all lamports in excess of rent exemption." + ] } ], "discriminators": [ @@ -2285,7 +2288,7 @@ "kind": "instructionRemainingAccountsNode", "value": { "kind": "argumentValueNode", - "name": "account" + "name": "accounts" }, "isOptional": true, "isSigner": true From a214b74b5d4f7e93d00452c0adc4882afce1d0bc Mon Sep 17 00:00:00 2001 From: febo Date: Mon, 30 Mar 2026 18:23:38 +0100 Subject: [PATCH 4/5] Update generated client --- .../js/src/generated/instructions/batch.ts | 138 +++++++++++ .../js/src/generated/instructions/index.ts | 3 + .../src/generated/instructions/syncNative.ts | 48 +++- .../generated/instructions/unwrapLamports.ts | 218 ++++++++++++++++++ .../instructions/withdrawExcessLamports.ts | 197 ++++++++++++++++ clients/js/src/generated/programs/token.ts | 54 ++++- 6 files changed, 648 insertions(+), 10 deletions(-) create mode 100644 clients/js/src/generated/instructions/batch.ts create mode 100644 clients/js/src/generated/instructions/unwrapLamports.ts create mode 100644 clients/js/src/generated/instructions/withdrawExcessLamports.ts diff --git a/clients/js/src/generated/instructions/batch.ts b/clients/js/src/generated/instructions/batch.ts new file mode 100644 index 00000000..3aee12b0 --- /dev/null +++ b/clients/js/src/generated/instructions/batch.ts @@ -0,0 +1,138 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + AccountRole, + addDecoderSizePrefix, + addEncoderSizePrefix, + combineCodec, + getArrayDecoder, + getArrayEncoder, + getBytesDecoder, + getBytesEncoder, + getStructDecoder, + getStructEncoder, + getU8Decoder, + getU8Encoder, + transformEncoder, + type AccountMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyUint8Array, + type TransactionSigner, +} from '@solana/kit'; +import { TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const BATCH_DISCRIMINATOR = 255; + +export function getBatchDiscriminatorBytes() { + return getU8Encoder().encode(BATCH_DISCRIMINATOR); +} + +export type BatchInstruction< + TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & InstructionWithData & InstructionWithAccounts; + +export type BatchInstructionData = { + discriminator: number; + /** Instruction data for batch instructions. */ + data: Array<{ numberOfAccounts: number; instructionData: ReadonlyUint8Array }>; +}; + +export type BatchInstructionDataArgs = { + /** Instruction data for batch instructions. */ + data: Array<{ numberOfAccounts: number; instructionData: ReadonlyUint8Array }>; +}; + +export function getBatchInstructionDataEncoder(): Encoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', getU8Encoder()], + [ + 'data', + getArrayEncoder( + getStructEncoder([ + ['numberOfAccounts', getU8Encoder()], + ['instructionData', addEncoderSizePrefix(getBytesEncoder(), getU8Encoder())], + ]), + { size: 'remainder' }, + ), + ], + ]), + value => ({ ...value, discriminator: BATCH_DISCRIMINATOR }), + ); +} + +export function getBatchInstructionDataDecoder(): Decoder { + return getStructDecoder([ + ['discriminator', getU8Decoder()], + [ + 'data', + getArrayDecoder( + getStructDecoder([ + ['numberOfAccounts', getU8Decoder()], + ['instructionData', addDecoderSizePrefix(getBytesDecoder(), getU8Decoder())], + ]), + { size: 'remainder' }, + ), + ], + ]); +} + +export function getBatchInstructionDataCodec(): Codec { + return combineCodec(getBatchInstructionDataEncoder(), getBatchInstructionDataDecoder()); +} + +export type BatchInput = { + data: BatchInstructionDataArgs['data']; + accounts?: Array; +}; + +export function getBatchInstruction( + input: BatchInput, + config?: { programAddress?: TProgramAddress }, +): BatchInstruction { + // Program address. + const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS; + + // Original args. + const args = { ...input }; + + // Remaining accounts. + const remainingAccounts: AccountMeta[] = (args.accounts ?? []).map(signer => ({ + address: signer.address, + role: AccountRole.READONLY_SIGNER, + signer, + })); + + return Object.freeze({ + accounts: remainingAccounts, + data: getBatchInstructionDataEncoder().encode(args as BatchInstructionDataArgs), + programAddress, + } as BatchInstruction); +} + +export type ParsedBatchInstruction = { + programAddress: Address; + data: BatchInstructionData; +}; + +export function parseBatchInstruction( + instruction: Instruction & InstructionWithData, +): ParsedBatchInstruction { + return { + programAddress: instruction.programAddress, + data: getBatchInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/clients/js/src/generated/instructions/index.ts b/clients/js/src/generated/instructions/index.ts index a9731e09..2626709b 100644 --- a/clients/js/src/generated/instructions/index.ts +++ b/clients/js/src/generated/instructions/index.ts @@ -9,6 +9,7 @@ export * from './amountToUiAmount'; export * from './approve'; export * from './approveChecked'; +export * from './batch'; export * from './burn'; export * from './burnChecked'; export * from './closeAccount'; @@ -34,3 +35,5 @@ export * from './thawAccount'; export * from './transfer'; export * from './transferChecked'; export * from './uiAmountToAmount'; +export * from './unwrapLamports'; +export * from './withdrawExcessLamports'; diff --git a/clients/js/src/generated/instructions/syncNative.ts b/clients/js/src/generated/instructions/syncNative.ts index 118fc893..bb0a40ad 100644 --- a/clients/js/src/generated/instructions/syncNative.ts +++ b/clients/js/src/generated/instructions/syncNative.ts @@ -23,6 +23,7 @@ import { type Instruction, type InstructionWithAccounts, type InstructionWithData, + type ReadonlyAccount, type ReadonlyUint8Array, type WritableAccount, } from '@solana/kit'; @@ -38,11 +39,18 @@ export function getSyncNativeDiscriminatorBytes() { export type SyncNativeInstruction< TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, TAccountAccount extends string | AccountMeta = string, + TAccountRent extends string | AccountMeta | undefined = undefined, TRemainingAccounts extends readonly AccountMeta[] = [], > = Instruction & InstructionWithData & InstructionWithAccounts< - [TAccountAccount extends string ? WritableAccount : TAccountAccount, ...TRemainingAccounts] + [ + TAccountAccount extends string ? WritableAccount : TAccountAccount, + ...(TAccountRent extends undefined + ? [] + : [TAccountRent extends string ? ReadonlyAccount : TAccountRent]), + ...TRemainingAccounts, + ] >; export type SyncNativeInstructionData = { discriminator: number }; @@ -67,31 +75,45 @@ export function getSyncNativeInstructionDataCodec(): FixedSizeCodec< return combineCodec(getSyncNativeInstructionDataEncoder(), getSyncNativeInstructionDataDecoder()); } -export type SyncNativeInput = { +export type SyncNativeInput = { /** The native token account to sync with its underlying lamports. */ account: Address; + /** Rent sysvar. */ + rent?: Address; }; export function getSyncNativeInstruction< TAccountAccount extends string, + TAccountRent extends string, TProgramAddress extends Address = typeof TOKEN_PROGRAM_ADDRESS, >( - input: SyncNativeInput, + input: SyncNativeInput, config?: { programAddress?: TProgramAddress }, -): SyncNativeInstruction { +): SyncNativeInstruction { // Program address. const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS; // Original accounts. - const originalAccounts = { account: { value: input.account ?? null, isWritable: true } }; + const originalAccounts = { + account: { value: input.account ?? null, isWritable: true }, + rent: { value: input.rent ?? null, isWritable: false }, + }; const accounts = originalAccounts as Record; - const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + // Resolve default values. + if (!accounts.rent.value) { + accounts.rent.value = + 'SysvarRent111111111111111111111111111111111' as Address<'SysvarRent111111111111111111111111111111111'>; + } + + const getAccountMeta = getAccountMetaFactory(programAddress, 'omitted'); return Object.freeze({ - accounts: [getAccountMeta('account', accounts.account)], + accounts: [getAccountMeta('account', accounts.account), getAccountMeta('rent', accounts.rent)].filter( + (x: T | undefined): x is T => x !== undefined, + ), data: getSyncNativeInstructionDataEncoder().encode({}), programAddress, - } as SyncNativeInstruction); + } as SyncNativeInstruction); } export type ParsedSyncNativeInstruction< @@ -102,6 +124,8 @@ export type ParsedSyncNativeInstruction< accounts: { /** The native token account to sync with its underlying lamports. */ account: TAccountMetas[0]; + /** Rent sysvar. */ + rent?: TAccountMetas[1] | undefined; }; data: SyncNativeInstructionData; }; @@ -123,9 +147,15 @@ export function parseSyncNativeInstruction { + if (optionalAccountsRemaining === 0) return undefined; + optionalAccountsRemaining -= 1; + return getNextAccount(); + }; return { programAddress: instruction.programAddress, - accounts: { account: getNextAccount() }, + accounts: { account: getNextAccount(), rent: getNextOptionalAccount() }, data: getSyncNativeInstructionDataDecoder().decode(instruction.data), }; } diff --git a/clients/js/src/generated/instructions/unwrapLamports.ts b/clients/js/src/generated/instructions/unwrapLamports.ts new file mode 100644 index 00000000..fe9a32cc --- /dev/null +++ b/clients/js/src/generated/instructions/unwrapLamports.ts @@ -0,0 +1,218 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + AccountRole, + combineCodec, + getOptionDecoder, + getOptionEncoder, + getStructDecoder, + getStructEncoder, + getU64Decoder, + getU64Encoder, + getU8Decoder, + getU8Encoder, + none, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type Codec, + type Decoder, + type Encoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type Option, + type OptionOrNullable, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, +} from '@solana/kit'; +import { getAccountMetaFactory, type ResolvedInstructionAccount } from '@solana/kit/program-client-core'; +import { TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const UNWRAP_LAMPORTS_DISCRIMINATOR = 45; + +export function getUnwrapLamportsDiscriminatorBytes() { + return getU8Encoder().encode(UNWRAP_LAMPORTS_DISCRIMINATOR); +} + +export type UnwrapLamportsInstruction< + TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, + TAccountSource extends string | AccountMeta = string, + TAccountDestination extends string | AccountMeta = string, + TAccountAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountSource extends string ? WritableAccount : TAccountSource, + TAccountDestination extends string ? WritableAccount : TAccountDestination, + TAccountAuthority extends string ? ReadonlyAccount : TAccountAuthority, + ...TRemainingAccounts, + ] + >; + +export type UnwrapLamportsInstructionData = { + discriminator: number; + /** + * Optional amount of lamports to transfer. + * If not provided, the instruction will unwrap all lamports in excess of rent exemption. + */ + amount: Option; +}; + +export type UnwrapLamportsInstructionDataArgs = { + /** + * Optional amount of lamports to transfer. + * If not provided, the instruction will unwrap all lamports in excess of rent exemption. + */ + amount?: OptionOrNullable; +}; + +export function getUnwrapLamportsInstructionDataEncoder(): Encoder { + return transformEncoder( + getStructEncoder([ + ['discriminator', getU8Encoder()], + ['amount', getOptionEncoder(getU64Encoder())], + ]), + value => ({ ...value, discriminator: UNWRAP_LAMPORTS_DISCRIMINATOR, amount: value.amount ?? none() }), + ); +} + +export function getUnwrapLamportsInstructionDataDecoder(): Decoder { + return getStructDecoder([ + ['discriminator', getU8Decoder()], + ['amount', getOptionDecoder(getU64Decoder())], + ]); +} + +export function getUnwrapLamportsInstructionDataCodec(): Codec< + UnwrapLamportsInstructionDataArgs, + UnwrapLamportsInstructionData +> { + return combineCodec(getUnwrapLamportsInstructionDataEncoder(), getUnwrapLamportsInstructionDataDecoder()); +} + +export type UnwrapLamportsInput< + TAccountSource extends string = string, + TAccountDestination extends string = string, + TAccountAuthority extends string = string, +> = { + /** The source account. */ + source: Address; + /** The destination account. */ + destination: Address; + /** The source account owner or its multisignature account. */ + authority: Address | TransactionSigner; + amount?: UnwrapLamportsInstructionDataArgs['amount']; + multiSigners?: Array; +}; + +export function getUnwrapLamportsInstruction< + TAccountSource extends string, + TAccountDestination extends string, + TAccountAuthority extends string, + TProgramAddress extends Address = typeof TOKEN_PROGRAM_ADDRESS, +>( + input: UnwrapLamportsInput, + config?: { programAddress?: TProgramAddress }, +): UnwrapLamportsInstruction< + TProgramAddress, + TAccountSource, + TAccountDestination, + (typeof input)['authority'] extends TransactionSigner + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority +> { + // Program address. + const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + source: { value: input.source ?? null, isWritable: true }, + destination: { value: input.destination ?? null, isWritable: true }, + authority: { value: input.authority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Remaining accounts. + const remainingAccounts: AccountMeta[] = (args.multiSigners ?? []).map(signer => ({ + address: signer.address, + role: AccountRole.READONLY_SIGNER, + signer, + })); + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('source', accounts.source), + getAccountMeta('destination', accounts.destination), + getAccountMeta('authority', accounts.authority), + ...remainingAccounts, + ], + data: getUnwrapLamportsInstructionDataEncoder().encode(args as UnwrapLamportsInstructionDataArgs), + programAddress, + } as UnwrapLamportsInstruction< + TProgramAddress, + TAccountSource, + TAccountDestination, + (typeof input)['authority'] extends TransactionSigner + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority + >); +} + +export type ParsedUnwrapLamportsInstruction< + TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + /** The source account. */ + source: TAccountMetas[0]; + /** The destination account. */ + destination: TAccountMetas[1]; + /** The source account owner or its multisignature account. */ + authority: TAccountMetas[2]; + }; + data: UnwrapLamportsInstructionData; +}; + +export function parseUnwrapLamportsInstruction( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedUnwrapLamportsInstruction { + if (instruction.accounts.length < 3) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 3, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { source: getNextAccount(), destination: getNextAccount(), authority: getNextAccount() }, + data: getUnwrapLamportsInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/clients/js/src/generated/instructions/withdrawExcessLamports.ts b/clients/js/src/generated/instructions/withdrawExcessLamports.ts new file mode 100644 index 00000000..02467803 --- /dev/null +++ b/clients/js/src/generated/instructions/withdrawExcessLamports.ts @@ -0,0 +1,197 @@ +/** + * This code was AUTOGENERATED using the Codama library. + * Please DO NOT EDIT THIS FILE, instead use visitors + * to add features, then rerun Codama to update it. + * + * @see https://github.com/codama-idl/codama + */ + +import { + AccountRole, + combineCodec, + getStructDecoder, + getStructEncoder, + getU8Decoder, + getU8Encoder, + SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, + SolanaError, + transformEncoder, + type AccountMeta, + type AccountSignerMeta, + type Address, + type FixedSizeCodec, + type FixedSizeDecoder, + type FixedSizeEncoder, + type Instruction, + type InstructionWithAccounts, + type InstructionWithData, + type ReadonlyAccount, + type ReadonlySignerAccount, + type ReadonlyUint8Array, + type TransactionSigner, + type WritableAccount, +} from '@solana/kit'; +import { getAccountMetaFactory, type ResolvedInstructionAccount } from '@solana/kit/program-client-core'; +import { TOKEN_PROGRAM_ADDRESS } from '../programs'; + +export const WITHDRAW_EXCESS_LAMPORTS_DISCRIMINATOR = 38; + +export function getWithdrawExcessLamportsDiscriminatorBytes() { + return getU8Encoder().encode(WITHDRAW_EXCESS_LAMPORTS_DISCRIMINATOR); +} + +export type WithdrawExcessLamportsInstruction< + TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, + TAccountSource extends string | AccountMeta = string, + TAccountDestination extends string | AccountMeta = string, + TAccountAuthority extends string | AccountMeta = string, + TRemainingAccounts extends readonly AccountMeta[] = [], +> = Instruction & + InstructionWithData & + InstructionWithAccounts< + [ + TAccountSource extends string ? WritableAccount : TAccountSource, + TAccountDestination extends string ? WritableAccount : TAccountDestination, + TAccountAuthority extends string ? ReadonlyAccount : TAccountAuthority, + ...TRemainingAccounts, + ] + >; + +export type WithdrawExcessLamportsInstructionData = { discriminator: number }; + +export type WithdrawExcessLamportsInstructionDataArgs = {}; + +export function getWithdrawExcessLamportsInstructionDataEncoder(): FixedSizeEncoder { + return transformEncoder(getStructEncoder([['discriminator', getU8Encoder()]]), value => ({ + ...value, + discriminator: WITHDRAW_EXCESS_LAMPORTS_DISCRIMINATOR, + })); +} + +export function getWithdrawExcessLamportsInstructionDataDecoder(): FixedSizeDecoder { + return getStructDecoder([['discriminator', getU8Decoder()]]); +} + +export function getWithdrawExcessLamportsInstructionDataCodec(): FixedSizeCodec< + WithdrawExcessLamportsInstructionDataArgs, + WithdrawExcessLamportsInstructionData +> { + return combineCodec( + getWithdrawExcessLamportsInstructionDataEncoder(), + getWithdrawExcessLamportsInstructionDataDecoder(), + ); +} + +export type WithdrawExcessLamportsInput< + TAccountSource extends string = string, + TAccountDestination extends string = string, + TAccountAuthority extends string = string, +> = { + /** The source account. */ + source: Address; + /** The destination account. */ + destination: Address; + /** The source account owner or its multisignature account. */ + authority: Address | TransactionSigner; + multiSigners?: Array; +}; + +export function getWithdrawExcessLamportsInstruction< + TAccountSource extends string, + TAccountDestination extends string, + TAccountAuthority extends string, + TProgramAddress extends Address = typeof TOKEN_PROGRAM_ADDRESS, +>( + input: WithdrawExcessLamportsInput, + config?: { programAddress?: TProgramAddress }, +): WithdrawExcessLamportsInstruction< + TProgramAddress, + TAccountSource, + TAccountDestination, + (typeof input)['authority'] extends TransactionSigner + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority +> { + // Program address. + const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS; + + // Original accounts. + const originalAccounts = { + source: { value: input.source ?? null, isWritable: true }, + destination: { value: input.destination ?? null, isWritable: true }, + authority: { value: input.authority ?? null, isWritable: false }, + }; + const accounts = originalAccounts as Record; + + // Original args. + const args = { ...input }; + + // Remaining accounts. + const remainingAccounts: AccountMeta[] = (args.multiSigners ?? []).map(signer => ({ + address: signer.address, + role: AccountRole.READONLY_SIGNER, + signer, + })); + + const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); + return Object.freeze({ + accounts: [ + getAccountMeta('source', accounts.source), + getAccountMeta('destination', accounts.destination), + getAccountMeta('authority', accounts.authority), + ...remainingAccounts, + ], + data: getWithdrawExcessLamportsInstructionDataEncoder().encode({}), + programAddress, + } as WithdrawExcessLamportsInstruction< + TProgramAddress, + TAccountSource, + TAccountDestination, + (typeof input)['authority'] extends TransactionSigner + ? ReadonlySignerAccount & AccountSignerMeta + : TAccountAuthority + >); +} + +export type ParsedWithdrawExcessLamportsInstruction< + TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, + TAccountMetas extends readonly AccountMeta[] = readonly AccountMeta[], +> = { + programAddress: Address; + accounts: { + /** The source account. */ + source: TAccountMetas[0]; + /** The destination account. */ + destination: TAccountMetas[1]; + /** The source account owner or its multisignature account. */ + authority: TAccountMetas[2]; + }; + data: WithdrawExcessLamportsInstructionData; +}; + +export function parseWithdrawExcessLamportsInstruction< + TProgram extends string, + TAccountMetas extends readonly AccountMeta[], +>( + instruction: Instruction & + InstructionWithAccounts & + InstructionWithData, +): ParsedWithdrawExcessLamportsInstruction { + if (instruction.accounts.length < 3) { + throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS, { + actualAccountMetas: instruction.accounts.length, + expectedAccountMetas: 3, + }); + } + let accountIndex = 0; + const getNextAccount = () => { + const accountMeta = (instruction.accounts as TAccountMetas)[accountIndex]!; + accountIndex += 1; + return accountMeta; + }; + return { + programAddress: instruction.programAddress, + accounts: { source: getNextAccount(), destination: getNextAccount(), authority: getNextAccount() }, + data: getWithdrawExcessLamportsInstructionDataDecoder().decode(instruction.data), + }; +} diff --git a/clients/js/src/generated/programs/token.ts b/clients/js/src/generated/programs/token.ts index f2094234..58beff35 100644 --- a/clients/js/src/generated/programs/token.ts +++ b/clients/js/src/generated/programs/token.ts @@ -45,6 +45,7 @@ import { getAmountToUiAmountInstruction, getApproveCheckedInstruction, getApproveInstruction, + getBatchInstruction, getBurnCheckedInstruction, getBurnInstruction, getCloseAccountInstruction, @@ -67,9 +68,12 @@ import { getTransferCheckedInstruction, getTransferInstruction, getUiAmountToAmountInstruction, + getUnwrapLamportsInstruction, + getWithdrawExcessLamportsInstruction, parseAmountToUiAmountInstruction, parseApproveCheckedInstruction, parseApproveInstruction, + parseBatchInstruction, parseBurnCheckedInstruction, parseBurnInstruction, parseCloseAccountInstruction, @@ -92,9 +96,12 @@ import { parseTransferCheckedInstruction, parseTransferInstruction, parseUiAmountToAmountInstruction, + parseUnwrapLamportsInstruction, + parseWithdrawExcessLamportsInstruction, type AmountToUiAmountInput, type ApproveCheckedInput, type ApproveInput, + type BatchInput, type BurnCheckedInput, type BurnInput, type CloseAccountInput, @@ -113,6 +120,7 @@ import { type ParsedAmountToUiAmountInstruction, type ParsedApproveCheckedInstruction, type ParsedApproveInstruction, + type ParsedBatchInstruction, type ParsedBurnCheckedInstruction, type ParsedBurnInstruction, type ParsedCloseAccountInstruction, @@ -135,6 +143,8 @@ import { type ParsedTransferCheckedInstruction, type ParsedTransferInstruction, type ParsedUiAmountToAmountInstruction, + type ParsedUnwrapLamportsInstruction, + type ParsedWithdrawExcessLamportsInstruction, type RevokeInput, type SetAuthorityInput, type SyncNativeInput, @@ -142,6 +152,8 @@ import { type TransferCheckedInput, type TransferInput, type UiAmountToAmountInput, + type UnwrapLamportsInput, + type WithdrawExcessLamportsInput, } from '../instructions'; export const TOKEN_PROGRAM_ADDRESS = @@ -196,6 +208,9 @@ export enum TokenInstruction { InitializeImmutableOwner, AmountToUiAmount, UiAmountToAmount, + WithdrawExcessLamports, + UnwrapLamports, + Batch, } export function identifyTokenInstruction( @@ -277,6 +292,15 @@ export function identifyTokenInstruction( if (containsBytes(data, getU8Encoder().encode(24), 0)) { return TokenInstruction.UiAmountToAmount; } + if (containsBytes(data, getU8Encoder().encode(38), 0)) { + return TokenInstruction.WithdrawExcessLamports; + } + if (containsBytes(data, getU8Encoder().encode(45), 0)) { + return TokenInstruction.UnwrapLamports; + } + if (containsBytes(data, getU8Encoder().encode(255), 0)) { + return TokenInstruction.Batch; + } throw new SolanaError(SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION, { instructionData: data, programName: 'token', @@ -310,7 +334,10 @@ export type ParsedTokenInstruction