pub struct GovernanceV2 {
    pub account_type: GovernanceAccountType,
    pub realm: Pubkey,
    pub governed_account: Pubkey,
    pub reserved1: u32,
    pub config: GovernanceConfig,
    pub reserved_v2: Reserved119,
    pub required_signatories_count: u8,
    pub active_proposal_count: u64,
}
Expand description

Governance Account

Fields§

§account_type: GovernanceAccountType

Account type. It can be Uninitialized, Governance, ProgramGovernance, TokenGovernance or MintGovernance

§realm: Pubkey

Governance Realm

§governed_account: Pubkey

Account governed by this Governance and/or PDA identity seed It can be Program account, Mint account, Token account or any other account

Note: The account doesn’t have to exist. In that case the field is only a PDA seed

Note: Setting governed_account doesn’t give any authority over the governed account The relevant authorities for specific account types must still be transferred to the Governance PDA Ex: mint_authority/ freeze_authority for a Mint account or upgrade_authority for a Program account should be transferred to the Governance PDA

§reserved1: u32

Reserved space for future versions

§config: GovernanceConfig

Governance config

§reserved_v2: Reserved119

Reserved space for versions v2 and onwards Note 1: V1 accounts must be resized before using this space Note 2: The reserved space should be used from the end to also allow the config to grow if needed

§required_signatories_count: u8

The number of required signatories for proposals in the Governance

§active_proposal_count: u64

The number of active proposals where active means Draft, SigningOff or Voting state

Note: The counter was introduced in program V3 and didn’t exist in program V1 & V2 If the program is upgraded from program V1 or V2 while there are any outstanding active proposals the counter won’t be accurate until all proposals are transitioned to an inactive final state and the counter reset

Implementations§

source§

impl GovernanceV2

source

pub fn get_governance_address_seeds(&self) -> Result<[&[u8]; 3], ProgramError>

Returns Governance PDA seeds

source

pub fn serialize<W: Write>(self, writer: W) -> Result<(), ProgramError>

Serializes account into the target buffer

source

pub fn serialize_as_governance_v2<'a>( self, governance_info: &AccountInfo<'a>, payer_info: &AccountInfo<'a>, system_info: &AccountInfo<'a>, rent: &Rent ) -> Result<(), ProgramError>

Serializes Governance accounts as GovernanceV2 If the account is GovernanceV1 then it changes its type to GovernanceV2 and resizes account data Note: It supports all the specialized Governance account types (Governance, ProgramGovernance, MintGovernance and TokenGovernance)

source

pub fn assert_governing_token_mint_can_vote( &self, realm_data: &RealmV2, vote_governing_token_mint: &Pubkey, vote_kind: &VoteKind ) -> Result<(), ProgramError>

Asserts the provided voting population represented by the given governing_token_mint can cast the given vote type on proposals for the Governance

source

pub fn resolve_vote_threshold( &self, realm_data: &RealmV2, vote_governing_token_mint: &Pubkey, vote_kind: &VoteKind ) -> Result<VoteThreshold, ProgramError>

Resolves VoteThreshold for the given realm, governing token and Vote kind

source

pub fn get_vote_tipping( &self, realm_data: &RealmV2, governing_token_mint: &Pubkey ) -> Result<&VoteTipping, ProgramError>

Returns VoteTipping for the given governing_token_mint

source

pub fn get_proposal_deposit_amount(&self) -> u64

Returns the required deposit amount for creating Nth Proposal based on the number of active proposals where N equals to active_proposal_count - deposit_exempt_proposal_count The deposit is not payed unless there are more active Proposal than the exempt amount

Note: The exact deposit payed for Nth Proposal is N*SECURITY_DEPOSIT_BASE_LAMPORTS + min_rent_for(ProposalDeposit)

Note: Although the deposit amount payed for Nth proposal is linear the total deposit amount required to create N proposals is sum of arithmetic series Dn = Nr + dN*(N+1)/2

Trait Implementations§

source§

impl AccountMaxSize for GovernanceV2

source§

fn get_max_size(&self) -> Option<usize>

Returns max account size or None if max size is not known and actual instance size should be used
source§

impl BorshDeserialize for GovernanceV2

source§

fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>

source§

fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>

Deserializes this instance from a given slice of bytes. Updates the buffer to point at the remaining bytes.
source§

fn try_from_slice(v: &[u8]) -> Result<Self, Error>

Deserialize this instance from a slice of bytes.
source§

fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>
where R: Read,

source§

impl BorshSchema for GovernanceV2

source§

fn declaration() -> Declaration

Get the name of the type without brackets.
source§

fn add_definitions_recursively( definitions: &mut HashMap<Declaration, Definition> )

Recursively, using DFS, add type definitions required for this type. For primitive types this is an empty map. Type definition explains how to serialize/deserialize a type.
source§

fn add_definition( declaration: String, definition: Definition, definitions: &mut HashMap<String, Definition> )

Helper method to add a single type definition to the map.
source§

fn schema_container() -> BorshSchemaContainer

source§

impl BorshSerialize for GovernanceV2

source§

fn serialize<W: Write>(&self, writer: &mut W) -> Result<(), Error>

source§

fn try_to_vec(&self) -> Result<Vec<u8>, Error>

Serialize this instance into a vector of bytes.
source§

impl Clone for GovernanceV2

source§

fn clone(&self) -> GovernanceV2

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for GovernanceV2

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl IsInitialized for GovernanceV2

source§

fn is_initialized(&self) -> bool

Is initialized
source§

impl PartialEq for GovernanceV2

source§

fn eq(&self, other: &GovernanceV2) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for GovernanceV2

source§

impl StructuralEq for GovernanceV2

source§

impl StructuralPartialEq for GovernanceV2

Auto Trait Implementations§

Blanket Implementations§

§

impl<T> AbiExample for T

§

default fn example() -> T

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V