1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
//! Upgradeable loader instruction definitions #[repr(u8)] #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)] pub enum UpgradeableLoaderInstruction { /// Initialize a Buffer account. /// /// A Buffer account is an intermediary that once fully populated is used /// with the `DeployWithMaxDataLen` instruction to populate the program's /// ProgramData account. /// /// The `InitializeBuffer` 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 may initialize the account. /// /// # Account references /// 0. [writable] source account to initialize. /// 1. [] Buffer authority, optional, if omitted then the buffer will be /// immutable. InitializeBuffer, /// Write program data into a Buffer account. /// /// # Account references /// 0. [writable] Buffer account to write program data to. /// 1. [signer] Buffer authority Write { /// Offset at which to write the given bytes. offset: u32, /// Serialized program data #[serde(with = "serde_bytes")] bytes: Vec<u8>, }, /// Deploy an executable program. /// /// A program consists of a Program and ProgramData account pair. /// - The Program account's address will serve as the program id for any /// instructions that execute this program. /// - The ProgramData account will remain mutable by the loader only and /// holds the program data and authority information. The ProgramData /// account's address is derived from the Program account's address and /// created by the DeployWithMaxDataLen instruction. /// /// The ProgramData address is derived from the Program account's address as /// follows: /// /// `let (program_data_address, _) = Pubkey::find_program_address( /// &[program_address], /// &bpf_loader_upgradeable::id() /// );` /// /// The `DeployWithMaxDataLen` instruction does not require the ProgramData /// account be a signer and therefore MUST be included within the same /// Transaction as the system program's `CreateAccount` instruction that /// creates the Program account. Otherwise another party may initialize the /// account. /// /// # Account references /// 0. [signer] The payer account that will pay to create the ProgramData /// account. /// 1. [writable] The uninitialized ProgramData account. /// 2. [writable] The uninitialized Program account. /// 3. [writable] The Buffer account where the program data has been /// written. The buffer account's authority must match the program's /// authority /// 4. [] Rent sysvar. /// 5. [] Clock sysvar. /// 6. [] System program (`solana_sdk::system_program::id()`). /// 7. [signer] The program's authority DeployWithMaxDataLen { /// Maximum length that the program can be upgraded to. max_data_len: usize, }, /// Upgrade a program. /// /// A program can be updated as long as the program's authority has not been /// set to `None`. /// /// The Buffer account must contain sufficient lamports to fund the /// ProgramData account to be rent-exempt, any additional lamports left over /// will be transferred to the spill account, leaving the Buffer account /// balance at zero. /// /// # Account references /// 0. [writable] The ProgramData account. /// 1. [writable] The Program account. /// 2. [writable] The Buffer account where the program data has been /// written. The buffer account's authority must match the program's /// authority /// 3. [writable] The spill account. /// 4. [] Rent sysvar. /// 5. [] Clock sysvar. /// 6. [signer] The program's authority. Upgrade, /// Set a new authority that is allowed to write the buffer or upgrade the /// program. To permanently make the buffer immutable or disable program /// updates omit the new authority. /// /// # Account references /// 0. `[writable]` The Buffer or ProgramData account to change the /// authority of. /// 1. `[signer]` The current authority. /// 2. `[]` The new authority, optional, if omitted then the program will /// not be upgradeable. SetAuthority, /// Closes an account owned by the upgradeable loader of all lamports and /// withdraws all the lamports /// /// # Account references /// 0. `[writable]` The account to close. /// 1. `[writable]` The account to deposit the closed account's lamports. /// 2. `[signer]` The account's authority. Close, }