Eliminate doc warnings and fix some markdown (#18566)
* Fix link target in doc comment * Fix formatting of log examples in process_instruction * Fix doc markdown in solana-gossip * Fix doc markdown in solana-runtime * Escape square braces in doc comments to avoid warnings * Surround 'account references' doc items in code spans to avoid warnings * Fix code block in loader_upgradeable_instruction * Fix doctest for loader_upgradable_instruction
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| //! Crds Gossip | ||||
| //! Crds Gossip. | ||||
| //! | ||||
| //! This module ties together Crds and the push and pull gossip overlays.  The interface is | ||||
| //! designed to run with a simulator or over a UDP network connection with messages up to a | ||||
| //! packet::PACKET_DATA_SIZE size. | ||||
| @@ -39,7 +40,8 @@ pub struct CrdsGossip { | ||||
| } | ||||
|  | ||||
| impl CrdsGossip { | ||||
|     /// process a push message to the network | ||||
|     /// Process a push message to the network. | ||||
|     /// | ||||
|     /// Returns unique origins' pubkeys of upserted values. | ||||
|     pub fn process_push_message( | ||||
|         &self, | ||||
| @@ -54,7 +56,7 @@ impl CrdsGossip { | ||||
|             .collect() | ||||
|     } | ||||
|  | ||||
|     /// remove redundant paths in the network | ||||
|     /// Remove redundant paths in the network. | ||||
|     pub fn prune_received_cache<I>( | ||||
|         &self, | ||||
|         self_pubkey: &Pubkey, | ||||
| @@ -145,7 +147,7 @@ impl CrdsGossip { | ||||
|         Ok(()) | ||||
|     } | ||||
|  | ||||
|     /// add the `from` to the peer's filter of nodes | ||||
|     /// Add the `from` to the peer's filter of nodes. | ||||
|     pub fn process_prune_msg( | ||||
|         &self, | ||||
|         self_pubkey: &Pubkey, | ||||
| @@ -167,8 +169,7 @@ impl CrdsGossip { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// refresh the push active set | ||||
|     /// * ratio - number of actives to rotate | ||||
|     /// Refresh the push active set. | ||||
|     pub fn refresh_push_active_set( | ||||
|         &self, | ||||
|         self_pubkey: &Pubkey, | ||||
| @@ -188,7 +189,7 @@ impl CrdsGossip { | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     /// generate a random request | ||||
|     /// Generate a random request. | ||||
|     #[allow(clippy::too_many_arguments)] | ||||
|     pub fn new_pull_request( | ||||
|         &self, | ||||
| @@ -216,14 +217,15 @@ impl CrdsGossip { | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     /// time when a request to `from` was initiated | ||||
|     /// Time when a request to `from` was initiated. | ||||
|     /// | ||||
|     /// This is used for weighted random selection during `new_pull_request` | ||||
|     /// It's important to use the local nodes request creation time as the weight | ||||
|     /// instead of the response received time otherwise failed nodes will increase their weight. | ||||
|     pub fn mark_pull_request_creation_time(&self, from: Pubkey, now: u64) { | ||||
|         self.pull.mark_pull_request_creation_time(from, now) | ||||
|     } | ||||
|     /// process a pull request and create a response | ||||
|     /// Process a pull request and create a response. | ||||
|     pub fn process_pull_requests<I>(&self, callers: I, now: u64) | ||||
|     where | ||||
|         I: IntoIterator<Item = CrdsValue>, | ||||
| @@ -255,7 +257,7 @@ impl CrdsGossip { | ||||
|             .filter_pull_responses(&self.crds, timeouts, response, now, process_pull_stats) | ||||
|     } | ||||
|  | ||||
|     /// process a pull response | ||||
|     /// Process a pull response. | ||||
|     pub fn process_pull_responses( | ||||
|         &self, | ||||
|         from: &Pubkey, | ||||
| @@ -322,14 +324,15 @@ impl CrdsGossip { | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Computes a normalized(log of actual stake) stake | ||||
| /// Computes a normalized (log of actual stake) stake. | ||||
| pub fn get_stake<S: std::hash::BuildHasher>(id: &Pubkey, stakes: &HashMap<Pubkey, u64, S>) -> f32 { | ||||
|     // cap the max balance to u32 max (it should be plenty) | ||||
|     let bal = f64::from(u32::max_value()).min(*stakes.get(id).unwrap_or(&0) as f64); | ||||
|     1_f32.max((bal as f32).ln()) | ||||
| } | ||||
|  | ||||
| /// Computes bounded weight given some max, a time since last selected, and a stake value | ||||
| /// Computes bounded weight given some max, a time since last selected, and a stake value. | ||||
| /// | ||||
| /// The minimum stake is 1 and not 0 to allow 'time since last' picked to factor in. | ||||
| pub fn get_weight(max_weight: f32, time_since_last_selected: u32, stake: f32) -> f32 { | ||||
|     let mut weight = time_since_last_selected as f32 * stake; | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| //! Crds Gossip Pull overlay | ||||
| //! Crds Gossip Pull overlay. | ||||
| //! | ||||
| //! This module implements the anti-entropy protocol for the network. | ||||
| //! | ||||
| //! The basic strategy is as follows: | ||||
| //! | ||||
| //! 1. Construct a bloom filter of the local data set | ||||
| //! 2. Randomly ask a node on the network for data that is not contained in the bloom filter. | ||||
| //! | ||||
| @@ -186,7 +188,7 @@ pub struct ProcessPullStats { | ||||
| } | ||||
|  | ||||
| pub struct CrdsGossipPull { | ||||
|     /// timestamp of last request | ||||
|     /// Timestamp of last request | ||||
|     pull_request_time: RwLock<LruCache<Pubkey, /*timestamp:*/ u64>>, | ||||
|     // Hash value and record time (ms) of the pull responses which failed to be | ||||
|     // inserted in crds table; Preserved to stop the sender to send back the | ||||
| @@ -210,7 +212,7 @@ impl Default for CrdsGossipPull { | ||||
|     } | ||||
| } | ||||
| impl CrdsGossipPull { | ||||
|     /// generate a random request | ||||
|     /// Generate a random request | ||||
|     #[allow(clippy::too_many_arguments)] | ||||
|     pub(crate) fn new_pull_request( | ||||
|         &self, | ||||
| @@ -326,7 +328,8 @@ impl CrdsGossipPull { | ||||
|             .collect() | ||||
|     } | ||||
|  | ||||
|     /// time when a request to `from` was initiated | ||||
|     /// Time when a request to `from` was initiated. | ||||
|     /// | ||||
|     /// This is used for weighted random selection during `new_pull_request` | ||||
|     /// It's important to use the local nodes request creation time as the weight | ||||
|     /// instead of the response received time otherwise failed nodes will increase their weight. | ||||
| @@ -334,7 +337,7 @@ impl CrdsGossipPull { | ||||
|         self.pull_request_time.write().unwrap().put(from, now); | ||||
|     } | ||||
|  | ||||
|     /// process a pull request | ||||
|     /// Process a pull request | ||||
|     pub(crate) fn process_pull_requests<I>(crds: &RwLock<Crds>, callers: I, now: u64) | ||||
|     where | ||||
|         I: IntoIterator<Item = CrdsValue>, | ||||
| @@ -409,7 +412,7 @@ impl CrdsGossipPull { | ||||
|         (active_values, expired_values, failed_inserts) | ||||
|     } | ||||
|  | ||||
|     /// process a vec of pull responses | ||||
|     /// Process a vec of pull responses | ||||
|     pub(crate) fn process_pull_responses( | ||||
|         &self, | ||||
|         crds: &RwLock<Crds>, | ||||
| @@ -499,7 +502,7 @@ impl CrdsGossipPull { | ||||
|         filters.into() | ||||
|     } | ||||
|  | ||||
|     /// filter values that fail the bloom filter up to max_bytes | ||||
|     /// Filter values that fail the bloom filter up to `max_bytes`. | ||||
|     fn filter_crds_values( | ||||
|         crds: &RwLock<Crds>, | ||||
|         filters: &[(CrdsValue, CrdsFilter)], | ||||
|   | ||||
| @@ -1,9 +1,12 @@ | ||||
| //! Crds Gossip Push overlay | ||||
| //! Crds Gossip Push overlay. | ||||
| //! | ||||
| //! This module is used to propagate recently created CrdsValues across the network | ||||
| //! Eager push strategy is based on Plumtree | ||||
| //! http://asc.di.fct.unl.pt/~jleitao/pdf/srds07-leitao.pdf | ||||
| //! Eager push strategy is based on [Plumtree]. | ||||
| //! | ||||
| //! [Plumtree]: http://asc.di.fct.unl.pt/~jleitao/pdf/srds07-leitao.pdf | ||||
| //! | ||||
| //! Main differences are: | ||||
| //! | ||||
| //! 1. There is no `max hop`.  Messages are signed with a local wallclock.  If they are outside of | ||||
| //!    the local nodes wallclock window they are dropped silently. | ||||
| //! 2. The prune set is stored in a Bloom filter. | ||||
| @@ -50,14 +53,15 @@ pub const CRDS_GOSSIP_PRUNE_MIN_INGRESS_NODES: usize = 3; | ||||
| const PUSH_ACTIVE_TIMEOUT_MS: u64 = 60_000; | ||||
|  | ||||
| pub struct CrdsGossipPush { | ||||
|     /// max bytes per message | ||||
|     /// Max bytes per message | ||||
|     max_bytes: usize, | ||||
|     /// active set of validators for push | ||||
|     /// Active set of validators for push | ||||
|     active_set: RwLock<IndexMap<Pubkey, AtomicBloom<Pubkey>>>, | ||||
|     /// Cursor into the crds table for values to push. | ||||
|     crds_cursor: Mutex<Cursor>, | ||||
|     /// Cache that tracks which validators a message was received from | ||||
|     /// bool indicates it has been pruned. | ||||
|     /// | ||||
|     /// This cache represents a lagging view of which validators | ||||
|     /// currently have this node in their `active_set` | ||||
|     #[allow(clippy::type_complexity)] | ||||
| @@ -199,7 +203,8 @@ impl CrdsGossipPush { | ||||
|         now.saturating_sub(self.msg_timeout)..=now.saturating_add(self.msg_timeout) | ||||
|     } | ||||
|  | ||||
|     /// process a push message to the network | ||||
|     /// Process a push message to the network. | ||||
|     /// | ||||
|     /// Returns origins' pubkeys of upserted values. | ||||
|     pub(crate) fn process_push_message( | ||||
|         &self, | ||||
| @@ -246,6 +251,7 @@ impl CrdsGossipPush { | ||||
|     } | ||||
|  | ||||
|     /// New push message to broadcast to peers. | ||||
|     /// | ||||
|     /// Returns a list of Pubkeys for the selected peers and a list of values to send to all the | ||||
|     /// peers. | ||||
|     /// The list of push messages is created such that all the randomly selected peers have not | ||||
| @@ -306,7 +312,7 @@ impl CrdsGossipPush { | ||||
|         push_messages | ||||
|     } | ||||
|  | ||||
|     /// add the `from` to the peer's filter of nodes | ||||
|     /// Add the `from` to the peer's filter of nodes. | ||||
|     pub fn process_prune_msg(&self, self_pubkey: &Pubkey, peer: &Pubkey, origins: &[Pubkey]) { | ||||
|         if let Some(filter) = self.active_set.read().unwrap().get(peer) { | ||||
|             for origin in origins { | ||||
| @@ -322,7 +328,10 @@ impl CrdsGossipPush { | ||||
|         cmp::min(num_active, (num_active - active_set_len) + num) | ||||
|     } | ||||
|  | ||||
|     /// refresh the push active set | ||||
|     /// Refresh the push active set. | ||||
|     /// | ||||
|     /// # Arguments | ||||
|     /// | ||||
|     /// * ratio - active_set.len()/ratio is the number of actives to rotate | ||||
|     pub(crate) fn refresh_push_active_set( | ||||
|         &self, | ||||
| @@ -429,7 +438,7 @@ impl CrdsGossipPush { | ||||
|             .collect() | ||||
|     } | ||||
|  | ||||
|     /// purge received push message cache | ||||
|     /// Purge received push message cache | ||||
|     pub(crate) fn purge_old_received_cache(&self, min_time: u64) { | ||||
|         self.received_cache.lock().unwrap().retain(|_, v| { | ||||
|             v.retain(|_, (_, t)| *t > min_time); | ||||
|   | ||||
| @@ -8,7 +8,7 @@ pub struct PurgeStats { | ||||
| } | ||||
|  | ||||
| impl Blockstore { | ||||
|     /// Silently deletes all blockstore column families in the range [from_slot,to_slot] | ||||
|     /// Silently deletes all blockstore column families in the range \[from_slot,to_slot\] | ||||
|     /// Dangerous; Use with care: | ||||
|     /// Does not check for integrity and does not update slot metas that refer to deleted slots | ||||
|     /// Modifies multiple column families simultaneously | ||||
| @@ -57,7 +57,7 @@ impl Blockstore { | ||||
|     } | ||||
|  | ||||
|     /// Ensures that the SlotMeta::next_slots vector for all slots contain no references in the | ||||
|     /// [from_slot,to_slot] range | ||||
|     /// \[from_slot,to_slot\] range | ||||
|     /// | ||||
|     /// Dangerous; Use with care | ||||
|     pub fn purge_from_next_slots(&self, from_slot: Slot, to_slot: Slot) { | ||||
|   | ||||
| @@ -57,59 +57,59 @@ pub enum VoteInstruction { | ||||
|     /// Initialize a vote account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Uninitialized vote account | ||||
|     ///   1. [] Rent sysvar | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [SIGNER] New validator identity (node_pubkey) | ||||
|     ///   0. `[WRITE]` Uninitialized vote account | ||||
|     ///   1. `[]` Rent sysvar | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[SIGNER]` New validator identity (node_pubkey) | ||||
|     InitializeAccount(VoteInit), | ||||
|  | ||||
|     /// Authorize a key to send votes or issue a withdrawal | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to be updated with the Pubkey for authorization | ||||
|     ///   1. [] Clock sysvar | ||||
|     ///   2. [SIGNER] Vote or withdraw authority | ||||
|     ///   0. `[WRITE]` Vote account to be updated with the Pubkey for authorization | ||||
|     ///   1. `[]` Clock sysvar | ||||
|     ///   2. `[SIGNER]` Vote or withdraw authority | ||||
|     Authorize(Pubkey, VoteAuthorize), | ||||
|  | ||||
|     /// A Vote instruction with recent votes | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to vote with | ||||
|     ///   1. [] Slot hashes sysvar | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [SIGNER] Vote authority | ||||
|     ///   0. `[WRITE]` Vote account to vote with | ||||
|     ///   1. `[]` Slot hashes sysvar | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[SIGNER]` Vote authority | ||||
|     Vote(Vote), | ||||
|  | ||||
|     /// Withdraw some amount of funds | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to withdraw from | ||||
|     ///   1. [WRITE] Recipient account | ||||
|     ///   2. [SIGNER] Withdraw authority | ||||
|     ///   0. `[WRITE]` Vote account to withdraw from | ||||
|     ///   1. `[WRITE]` Recipient account | ||||
|     ///   2. `[SIGNER]` Withdraw authority | ||||
|     Withdraw(u64), | ||||
|  | ||||
|     /// Update the vote account's validator identity (node_pubkey) | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to be updated with the given authority public key | ||||
|     ///   1. [SIGNER] New validator identity (node_pubkey) | ||||
|     ///   2. [SIGNER] Withdraw authority | ||||
|     ///   0. `[WRITE]` Vote account to be updated with the given authority public key | ||||
|     ///   1. `[SIGNER]` New validator identity (node_pubkey) | ||||
|     ///   2. `[SIGNER]` Withdraw authority | ||||
|     UpdateValidatorIdentity, | ||||
|  | ||||
|     /// Update the commission for the vote account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to be updated | ||||
|     ///   1. [SIGNER] Withdraw authority | ||||
|     ///   0. `[WRITE]` Vote account to be updated | ||||
|     ///   1. `[SIGNER]` Withdraw authority | ||||
|     UpdateCommission(u8), | ||||
|  | ||||
|     /// A Vote instruction with recent votes | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to vote with | ||||
|     ///   1. [] Slot hashes sysvar | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [SIGNER] Vote authority | ||||
|     ///   0. `[WRITE]` Vote account to vote with | ||||
|     ///   1. `[]` Slot hashes sysvar | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[SIGNER]` Vote authority | ||||
|     VoteSwitch(Vote, Hash), | ||||
|  | ||||
|     /// Authorize a key to send votes or issue a withdrawal | ||||
| @@ -118,10 +118,10 @@ pub enum VoteInstruction { | ||||
|     /// or withdraw authority must also be a signer. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Vote account to be updated with the Pubkey for authorization | ||||
|     ///   1. [] Clock sysvar | ||||
|     ///   2. [SIGNER] Vote or withdraw authority | ||||
|     ///   3. [SIGNER] New vote or withdraw authority | ||||
|     ///   0. `[WRITE]` Vote account to be updated with the Pubkey for authorization | ||||
|     ///   1. `[]` Clock sysvar | ||||
|     ///   2. `[SIGNER]` Vote or withdraw authority | ||||
|     ///   3. `[SIGNER]` New vote or withdraw authority | ||||
|     AuthorizeChecked(VoteAuthorize), | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,5 +1,8 @@ | ||||
| //! Persistent storage for accounts. For more information, see: | ||||
| //! https://docs.solana.com/implemented-proposals/persistent-account-storage | ||||
| //! Persistent storage for accounts. | ||||
| //! | ||||
| //! For more information, see: | ||||
| //! | ||||
| //! <https://docs.solana.com/implemented-proposals/persistent-account-storage> | ||||
|  | ||||
| use log::*; | ||||
| use memmap2::MmapMut; | ||||
|   | ||||
| @@ -67,10 +67,12 @@ impl<T: BloomHashIndex> Bloom<T> { | ||||
|             _phantom: PhantomData::default(), | ||||
|         } | ||||
|     } | ||||
|     /// create filter optimal for num size given the `FALSE_RATE` | ||||
|     /// the keys are randomized for picking data out of a collision resistant hash of size | ||||
|     /// `keysize` bytes | ||||
|     /// https://hur.st/bloomfilter/ | ||||
|     /// Create filter optimal for num size given the `FALSE_RATE`. | ||||
|     /// | ||||
|     /// The keys are randomized for picking data out of a collision resistant hash of size | ||||
|     /// `keysize` bytes. | ||||
|     /// | ||||
|     /// See <https://hur.st/bloomfilter/>. | ||||
|     pub fn random(num_items: usize, false_rate: f64, max_bits: usize) -> Self { | ||||
|         let m = Self::num_bits(num_items as f64, false_rate); | ||||
|         let num_bits = cmp::max(1, cmp::min(m as usize, max_bits)); | ||||
|   | ||||
| @@ -15,16 +15,16 @@ pub enum UpgradeableLoaderInstruction { | ||||
|     /// 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 | ||||
|     ///   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 | ||||
|     ///   0. `[writable]` Buffer account to write program data to. | ||||
|     ///   1. `[signer]` Buffer authority | ||||
|     Write { | ||||
|         /// Offset at which to write the given bytes. | ||||
|         offset: u32, | ||||
| @@ -46,10 +46,15 @@ pub enum UpgradeableLoaderInstruction { | ||||
|     /// The ProgramData address is derived from the Program account's address as | ||||
|     /// follows: | ||||
|     /// | ||||
|     /// `let (program_data_address, _) = Pubkey::find_program_address( | ||||
|     /// ``` | ||||
|     /// # use solana_program::pubkey::Pubkey; | ||||
|     /// # use solana_program::bpf_loader_upgradeable; | ||||
|     /// # let program_address = &[]; | ||||
|     /// 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 | ||||
| @@ -58,17 +63,17 @@ pub enum UpgradeableLoaderInstruction { | ||||
|     /// account. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [signer] The payer account that will pay to create the ProgramData | ||||
|     ///   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 | ||||
|     ///   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 | ||||
|     ///   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, | ||||
| @@ -85,15 +90,15 @@ pub enum UpgradeableLoaderInstruction { | ||||
|     /// 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 | ||||
|     ///   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. | ||||
|     ///   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 | ||||
|   | ||||
| @@ -880,7 +880,7 @@ impl<T: Clone> Clone for COption<T> { | ||||
| } | ||||
|  | ||||
| impl<T> Default for COption<T> { | ||||
|     /// Returns [`COption::None`][COption::COption::None]. | ||||
|     /// Returns [`COption::None`][COption::None]. | ||||
|     /// | ||||
|     /// # Examples | ||||
|     /// | ||||
|   | ||||
| @@ -59,8 +59,8 @@ pub enum StakeInstruction { | ||||
|     /// Initialize a stake with lockup and authorization information | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Uninitialized stake account | ||||
|     ///   1. [] Rent sysvar | ||||
|     ///   0. `[WRITE]` Uninitialized stake account | ||||
|     ///   1. `[]` Rent sysvar | ||||
|     /// | ||||
|     /// Authorized carries pubkeys that must sign staker transactions | ||||
|     ///   and withdrawer transactions. | ||||
| @@ -70,22 +70,22 @@ pub enum StakeInstruction { | ||||
|     /// Authorize a key to manage stake or withdrawal | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account to be updated | ||||
|     ///   1. [] Clock sysvar | ||||
|     ///   2. [SIGNER] The stake or withdraw authority | ||||
|     ///   3. Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///   0. `[WRITE]` Stake account to be updated | ||||
|     ///   1. `[]` Clock sysvar | ||||
|     ///   2. `[SIGNER]` The stake or withdraw authority | ||||
|     ///   3. Optional: `[SIGNER]` Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///      lockup expiration | ||||
|     Authorize(Pubkey, StakeAuthorize), | ||||
|  | ||||
|     /// Delegate a stake to a particular vote account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Initialized stake account to be delegated | ||||
|     ///   1. [] Vote account to which this stake will be delegated | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [] Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. [] Address of config account that carries stake config | ||||
|     ///   5. [SIGNER] Stake authority | ||||
|     ///   0. `[WRITE]` Initialized stake account to be delegated | ||||
|     ///   1. `[]` Vote account to which this stake will be delegated | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[]` Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. `[]` Address of config account that carries stake config | ||||
|     ///   5. `[SIGNER]` Stake authority | ||||
|     /// | ||||
|     /// The entire balance of the staking account is staked.  DelegateStake | ||||
|     ///   can be called multiple times, but re-delegation is delayed | ||||
| @@ -95,20 +95,20 @@ pub enum StakeInstruction { | ||||
|     /// Split u64 tokens and stake off a stake account into another stake account. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account to be split; must be in the Initialized or Stake state | ||||
|     ///   1. [WRITE] Uninitialized stake account that will take the split-off amount | ||||
|     ///   2. [SIGNER] Stake authority | ||||
|     ///   0. `[WRITE]` Stake account to be split; must be in the Initialized or Stake state | ||||
|     ///   1. `[WRITE]` Uninitialized stake account that will take the split-off amount | ||||
|     ///   2. `[SIGNER]` Stake authority | ||||
|     Split(u64), | ||||
|  | ||||
|     /// Withdraw unstaked lamports from the stake account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account from which to withdraw | ||||
|     ///   1. [WRITE] Recipient account | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [] Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. [SIGNER] Withdraw authority | ||||
|     ///   5. Optional: [SIGNER] Lockup authority, if before lockup expiration | ||||
|     ///   0. `[WRITE]` Stake account from which to withdraw | ||||
|     ///   1. `[WRITE]` Recipient account | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[]` Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. `[SIGNER]` Withdraw authority | ||||
|     ///   5. Optional: `[SIGNER]` Lockup authority, if before lockup expiration | ||||
|     /// | ||||
|     /// The u64 is the portion of the stake account balance to be withdrawn, | ||||
|     ///    must be `<= StakeAccount.lamports - staked_lamports`. | ||||
| @@ -117,9 +117,9 @@ pub enum StakeInstruction { | ||||
|     /// Deactivates the stake in the account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Delegated stake account | ||||
|     ///   1. [] Clock sysvar | ||||
|     ///   2. [SIGNER] Stake authority | ||||
|     ///   0. `[WRITE]` Delegated stake account | ||||
|     ///   1. `[]` Clock sysvar | ||||
|     ///   2. `[SIGNER]` Stake authority | ||||
|     Deactivate, | ||||
|  | ||||
|     /// Set stake lockup | ||||
| @@ -128,8 +128,8 @@ pub enum StakeInstruction { | ||||
|     /// If a lockup is active, the lockup custodian may update the lockup parameters | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Initialized stake account | ||||
|     ///   1. [SIGNER] Lockup authority or withdraw authority | ||||
|     ///   0. `[WRITE]` Initialized stake account | ||||
|     ///   1. `[SIGNER]` Lockup authority or withdraw authority | ||||
|     SetLockup(LockupArgs), | ||||
|  | ||||
|     /// Merge two stake accounts. | ||||
| @@ -151,20 +151,20 @@ pub enum StakeInstruction { | ||||
|     /// non-zero effective stake. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Destination stake account for the merge | ||||
|     ///   1. [WRITE] Source stake account for to merge.  This account will be drained | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [] Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. [SIGNER] Stake authority | ||||
|     ///   0. `[WRITE]` Destination stake account for the merge | ||||
|     ///   1. `[WRITE]` Source stake account for to merge.  This account will be drained | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[]` Stake history sysvar that carries stake warmup/cooldown history | ||||
|     ///   4. `[SIGNER]` Stake authority | ||||
|     Merge, | ||||
|  | ||||
|     /// Authorize a key to manage stake or withdrawal with a derived key | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account to be updated | ||||
|     ///   1. [SIGNER] Base key of stake or withdraw authority | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///   0. `[WRITE]` Stake account to be updated | ||||
|     ///   1. `[SIGNER]` Base key of stake or withdraw authority | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. Optional: `[SIGNER]` Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///      lockup expiration | ||||
|     AuthorizeWithSeed(AuthorizeWithSeedArgs), | ||||
|  | ||||
| @@ -174,10 +174,10 @@ pub enum StakeInstruction { | ||||
|     /// must be a signer, and no lockup is applied to the account. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Uninitialized stake account | ||||
|     ///   1. [] Rent sysvar | ||||
|     ///   2. [] The stake authority | ||||
|     ///   3. [SIGNER] The withdraw authority | ||||
|     ///   0. `[WRITE]` Uninitialized stake account | ||||
|     ///   1. `[]` Rent sysvar | ||||
|     ///   2. `[]` The stake authority | ||||
|     ///   3. `[SIGNER]` The withdraw authority | ||||
|     /// | ||||
|     InitializeChecked, | ||||
|  | ||||
| @@ -187,11 +187,11 @@ pub enum StakeInstruction { | ||||
|     /// stake or withdraw authority must also be a signer. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account to be updated | ||||
|     ///   1. [] Clock sysvar | ||||
|     ///   2. [SIGNER] The stake or withdraw authority | ||||
|     ///   3. [SIGNER] The new stake or withdraw authority | ||||
|     ///   4. Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///   0. `[WRITE]` Stake account to be updated | ||||
|     ///   1. `[]` Clock sysvar | ||||
|     ///   2. `[SIGNER]` The stake or withdraw authority | ||||
|     ///   3. `[SIGNER]` The new stake or withdraw authority | ||||
|     ///   4. Optional: `[SIGNER]` Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///      lockup expiration | ||||
|     AuthorizeChecked(StakeAuthorize), | ||||
|  | ||||
| @@ -201,11 +201,11 @@ pub enum StakeInstruction { | ||||
|     /// the new stake or withdraw authority must also be a signer. | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Stake account to be updated | ||||
|     ///   1. [SIGNER] Base key of stake or withdraw authority | ||||
|     ///   2. [] Clock sysvar | ||||
|     ///   3. [SIGNER] The new stake or withdraw authority | ||||
|     ///   4. Optional: [SIGNER] Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///   0. `[WRITE]` Stake account to be updated | ||||
|     ///   1. `[SIGNER]` Base key of stake or withdraw authority | ||||
|     ///   2. `[]` Clock sysvar | ||||
|     ///   3. `[SIGNER]` The new stake or withdraw authority | ||||
|     ///   4. Optional: `[SIGNER]` Lockup authority, if updating StakeAuthorize::Withdrawer before | ||||
|     ///      lockup expiration | ||||
|     AuthorizeCheckedWithSeed(AuthorizeCheckedWithSeedArgs), | ||||
|  | ||||
| @@ -218,9 +218,9 @@ pub enum StakeInstruction { | ||||
|     /// If a lockup is active, the lockup custodian may update the lockup parameters | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Initialized stake account | ||||
|     ///   1. [SIGNER] Lockup authority or withdraw authority | ||||
|     ///   2. Optional: [SIGNER] New lockup authority | ||||
|     ///   0. `[WRITE]` Initialized stake account | ||||
|     ///   1. `[SIGNER]` Lockup authority or withdraw authority | ||||
|     ///   2. Optional: `[SIGNER]` New lockup authority | ||||
|     SetLockupChecked(LockupCheckedArgs), | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -58,8 +58,8 @@ pub enum SystemInstruction { | ||||
|     /// Create a new account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE, SIGNER] Funding account | ||||
|     ///   1. [WRITE, SIGNER] New account | ||||
|     ///   0. `[WRITE, SIGNER]` Funding account | ||||
|     ///   1. `[WRITE, SIGNER]` New account | ||||
|     CreateAccount { | ||||
|         /// Number of lamports to transfer to the new account | ||||
|         lamports: u64, | ||||
| @@ -74,7 +74,7 @@ pub enum SystemInstruction { | ||||
|     /// Assign account to a program | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE, SIGNER] Assigned account public key | ||||
|     ///   0. `[WRITE, SIGNER]` Assigned account public key | ||||
|     Assign { | ||||
|         /// Owner program account | ||||
|         owner: Pubkey, | ||||
| @@ -83,16 +83,16 @@ pub enum SystemInstruction { | ||||
|     /// Transfer lamports | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE, SIGNER] Funding account | ||||
|     ///   1. [WRITE] Recipient account | ||||
|     ///   0. `[WRITE, SIGNER]` Funding account | ||||
|     ///   1. `[WRITE]` Recipient account | ||||
|     Transfer { lamports: u64 }, | ||||
|  | ||||
|     /// Create a new account at an address derived from a base pubkey and a seed | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE, SIGNER] Funding account | ||||
|     ///   1. [WRITE] Created account | ||||
|     ///   2. [SIGNER] (optional) Base account; the account matching the base Pubkey below must be | ||||
|     ///   0. `[WRITE, SIGNER]` Funding account | ||||
|     ///   1. `[WRITE]` Created account | ||||
|     ///   2. `[SIGNER]` (optional) Base account; the account matching the base Pubkey below must be | ||||
|     ///                          provided as a signer, but may be the same as the funding account | ||||
|     ///                          and provided as account 0 | ||||
|     CreateAccountWithSeed { | ||||
| @@ -115,19 +115,19 @@ pub enum SystemInstruction { | ||||
|     /// Consumes a stored nonce, replacing it with a successor | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Nonce account | ||||
|     ///   1. [] RecentBlockhashes sysvar | ||||
|     ///   2. [SIGNER] Nonce authority | ||||
|     ///   0. `[WRITE]` Nonce account | ||||
|     ///   1. `[]` RecentBlockhashes sysvar | ||||
|     ///   2. `[SIGNER]` Nonce authority | ||||
|     AdvanceNonceAccount, | ||||
|  | ||||
|     /// Withdraw funds from a nonce account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Nonce account | ||||
|     ///   1. [WRITE] Recipient account | ||||
|     ///   2. [] RecentBlockhashes sysvar | ||||
|     ///   3. [] Rent sysvar | ||||
|     ///   4. [SIGNER] Nonce authority | ||||
|     ///   0. `[WRITE]` Nonce account | ||||
|     ///   1. `[WRITE]` Recipient account | ||||
|     ///   2. `[]` RecentBlockhashes sysvar | ||||
|     ///   3. `[]` Rent sysvar | ||||
|     ///   4. `[SIGNER]` Nonce authority | ||||
|     /// | ||||
|     /// The `u64` parameter is the lamports to withdraw, which must leave the | ||||
|     /// account balance above the rent exempt reserve or at zero. | ||||
| @@ -136,9 +136,9 @@ pub enum SystemInstruction { | ||||
|     /// Drive state of Uninitalized nonce account to Initialized, setting the nonce value | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Nonce account | ||||
|     ///   1. [] RecentBlockhashes sysvar | ||||
|     ///   2. [] Rent sysvar | ||||
|     ///   0. `[WRITE]` Nonce account | ||||
|     ///   1. `[]` RecentBlockhashes sysvar | ||||
|     ///   2. `[]` Rent sysvar | ||||
|     /// | ||||
|     /// The `Pubkey` parameter specifies the entity authorized to execute nonce | ||||
|     /// instruction on the account | ||||
| @@ -150,8 +150,8 @@ pub enum SystemInstruction { | ||||
|     /// Change the entity authorized to execute nonce instructions on the account | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Nonce account | ||||
|     ///   1. [SIGNER] Nonce authority | ||||
|     ///   0. `[WRITE]` Nonce account | ||||
|     ///   1. `[SIGNER]` Nonce authority | ||||
|     /// | ||||
|     /// The `Pubkey` parameter identifies the entity to authorize | ||||
|     AuthorizeNonceAccount(Pubkey), | ||||
| @@ -159,7 +159,7 @@ pub enum SystemInstruction { | ||||
|     /// Allocate space in a (possibly new) account without funding | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE, SIGNER] New account | ||||
|     ///   0. `[WRITE, SIGNER]` New account | ||||
|     Allocate { | ||||
|         /// Number of bytes of memory to allocate | ||||
|         space: u64, | ||||
| @@ -169,8 +169,8 @@ pub enum SystemInstruction { | ||||
|     ///    derived from a base public key and a seed | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Allocated account | ||||
|     ///   1. [SIGNER] Base account | ||||
|     ///   0. `[WRITE]` Allocated account | ||||
|     ///   1. `[SIGNER]` Base account | ||||
|     AllocateWithSeed { | ||||
|         /// Base public key | ||||
|         base: Pubkey, | ||||
| @@ -188,8 +188,8 @@ pub enum SystemInstruction { | ||||
|     /// Assign account to a program based on a seed | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Assigned account | ||||
|     ///   1. [SIGNER] Base account | ||||
|     ///   0. `[WRITE]` Assigned account | ||||
|     ///   1. `[SIGNER]` Base account | ||||
|     AssignWithSeed { | ||||
|         /// Base public key | ||||
|         base: Pubkey, | ||||
| @@ -204,9 +204,9 @@ pub enum SystemInstruction { | ||||
|     /// Transfer lamports from a derived address | ||||
|     /// | ||||
|     /// # Account references | ||||
|     ///   0. [WRITE] Funding account | ||||
|     ///   1. [SIGNER] Base for funding account | ||||
|     ///   2. [WRITE] Recipient account | ||||
|     ///   0. `[WRITE]` Funding account | ||||
|     ///   1. `[SIGNER]` Base for funding account | ||||
|     ///   2. `[WRITE]` Recipient account | ||||
|     TransferWithSeed { | ||||
|         /// Amount to transfer | ||||
|         lamports: u64, | ||||
|   | ||||
| @@ -243,7 +243,10 @@ pub mod stable_log { | ||||
|     /// Log a program invoke. | ||||
|     /// | ||||
|     /// The general form is: | ||||
|     /// | ||||
|     /// ```notrust | ||||
|     /// "Program <address> invoke [<depth>]" | ||||
|     /// ``` | ||||
|     pub fn program_invoke( | ||||
|         logger: &Rc<RefCell<dyn Logger>>, | ||||
|         program_id: &Pubkey, | ||||
| @@ -255,7 +258,11 @@ pub mod stable_log { | ||||
|     /// Log a message from the program itself. | ||||
|     /// | ||||
|     /// The general form is: | ||||
|     /// | ||||
|     /// ```notrust | ||||
|     /// "Program log: <program-generated output>" | ||||
|     /// ``` | ||||
|     /// | ||||
|     /// That is, any program-generated output is guaranteed to be prefixed by "Program log: " | ||||
|     pub fn program_log(logger: &Rc<RefCell<dyn Logger>>, message: &str) { | ||||
|         ic_logger_msg!(logger, "Program log: {}", message); | ||||
| @@ -264,7 +271,10 @@ pub mod stable_log { | ||||
|     /// Log successful program execution. | ||||
|     /// | ||||
|     /// The general form is: | ||||
|     /// | ||||
|     /// ```notrust | ||||
|     /// "Program <address> success" | ||||
|     /// ``` | ||||
|     pub fn program_success(logger: &Rc<RefCell<dyn Logger>>, program_id: &Pubkey) { | ||||
|         ic_logger_msg!(logger, "Program {} success", program_id); | ||||
|     } | ||||
| @@ -272,7 +282,10 @@ pub mod stable_log { | ||||
|     /// Log program execution failure | ||||
|     /// | ||||
|     /// The general form is: | ||||
|     /// | ||||
|     /// ```notrust | ||||
|     /// "Program <address> failed: <program error details>" | ||||
|     /// ``` | ||||
|     pub fn program_failure( | ||||
|         logger: &Rc<RefCell<dyn Logger>>, | ||||
|         program_id: &Pubkey, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user