#[repr(u8)]
pub enum UpgradeableLoaderInstruction {
InitializeBuffer,
Write {
offset: u32,
bytes: Vec<u8, Global>,
},
DeployWithMaxDataLen {
max_data_len: usize,
},
Upgrade,
SetAuthority,
Close,
}
Variants
InitializeBuffer
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
[writable]
source account to initialize.[]
Buffer authority, optional, if omitted then the buffer will be immutable.
Write
Fields
offset: u32
Offset at which to write the given bytes.
Write program data into a Buffer account.
Account references
[writable]
Buffer account to write program data to.[signer]
Buffer authority
DeployWithMaxDataLen
Fields
max_data_len: usize
Maximum length that the program can be upgraded to.
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
[signer]
The payer account that will pay to create the ProgramData account.[writable]
The uninitialized ProgramData account.[writable]
The uninitialized Program account.[writable]
The Buffer account where the program data has been written. The buffer account’s authority must match the program’s authority[]
Rent sysvar.[]
Clock sysvar.[]
System program (solana_sdk::system_program::id()
).[signer]
The program’s authority
Upgrade
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
[writable]
The ProgramData account.[writable]
The Program account.[writable]
The Buffer account where the program data has been written. The buffer account’s authority must match the program’s authority[writable]
The spill account.[]
Rent sysvar.[]
Clock sysvar.[signer]
The program’s authority.
SetAuthority
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
[writable]
The Buffer or ProgramData account to change the authority of.[signer]
The current authority.[]
The new authority, optional, if omitted then the program will not be upgradeable.
Close
Closes an account owned by the upgradeable loader of all lamports and withdraws all the lamports
Account references
[writable]
The account to close, if closing a program must be the ProgramData account.[writable]
The account to deposit the closed account’s lamports.[signer]
The account’s authority, Optional, required for initialized accounts.[writable]
The associated Program account if the account to close is a ProgramData account.
Trait Implementations
sourceimpl Clone for UpgradeableLoaderInstruction
impl Clone for UpgradeableLoaderInstruction
sourcefn clone(&self) -> UpgradeableLoaderInstruction
fn clone(&self) -> UpgradeableLoaderInstruction
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for UpgradeableLoaderInstruction
impl Debug for UpgradeableLoaderInstruction
sourceimpl<'de> Deserialize<'de> for UpgradeableLoaderInstruction
impl<'de> Deserialize<'de> for UpgradeableLoaderInstruction
sourcefn deserialize<__D>(
__deserializer: __D
) -> Result<UpgradeableLoaderInstruction, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D
) -> Result<UpgradeableLoaderInstruction, <__D as Deserializer<'de>>::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
sourceimpl PartialEq<UpgradeableLoaderInstruction> for UpgradeableLoaderInstruction
impl PartialEq<UpgradeableLoaderInstruction> for UpgradeableLoaderInstruction
sourcefn eq(&self, other: &UpgradeableLoaderInstruction) -> bool
fn eq(&self, other: &UpgradeableLoaderInstruction) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &UpgradeableLoaderInstruction) -> bool
fn ne(&self, other: &UpgradeableLoaderInstruction) -> bool
This method tests for !=
.
sourceimpl Serialize for UpgradeableLoaderInstruction
impl Serialize for UpgradeableLoaderInstruction
sourcefn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
impl Eq for UpgradeableLoaderInstruction
impl StructuralEq for UpgradeableLoaderInstruction
impl StructuralPartialEq for UpgradeableLoaderInstruction
Auto Trait Implementations
impl RefUnwindSafe for UpgradeableLoaderInstruction
impl Send for UpgradeableLoaderInstruction
impl Sync for UpgradeableLoaderInstruction
impl Unpin for UpgradeableLoaderInstruction
impl UnwindSafe for UpgradeableLoaderInstruction
Blanket Implementations
sourceimpl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
default fn visit_for_abi(
&self,
_digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
sourceimpl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
default fn visit_for_abi(
&self,
digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
sourceimpl<T> AbiExample for T
impl<T> AbiExample for T
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Pointable for T
impl<T> Pointable for T
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more