coral-xyz / anchor

⚓ Solana Sealevel Framework
https://anchor-lang.com
Apache License 2.0
3.36k stars 1.25k forks source link

Anchor 0.29 Deploy failure on instruction #2926

Open mgild opened 2 months ago

mgild commented 2 months ago
#[derive(Clone, AnchorSerialize, AnchorDeserialize)]
pub struct StateSetConfigsParams {
    pub new_authority: Option<Pubkey>,
    pub min_quote_verify_votes: Option<u64>,
    pub test_only_disable_mr_enclave_check: Option<u8>,
    pub stake_pool: Option<Pubkey>,
    pub stake_program: Option<Pubkey>,
    pub add_advisory: Option<Vec<u32>>,
    pub rm_advisory: Option<Vec<u32>>,
}

Above produces consistent deploy failure when used as instruciton parameter. Below succeeds

#[derive(Clone, AnchorSerialize, AnchorDeserialize)]
pub struct StateSetConfigsParams {
    pub new_authority: Option<Pubkey>,
    pub min_quote_verify_votes: Option<u64>,
    pub test_only_disable_mr_enclave_check: Option<u8>,
    pub stake_pool: Option<Pubkey>,
    pub stake_program: Option<Pubkey>,
    pub add_advisory: Option<u32>,
    pub rm_advisory: Option<u32>,
}
mgild commented 2 months ago

In fact, just using an Option is making transaction size go haywire

acheroncrypto commented 2 months ago
#[derive(Clone, AnchorSerialize, AnchorDeserialize)]
pub struct StateSetConfigsParams {
    pub new_authority: Option<Pubkey>,
    pub min_quote_verify_votes: Option<u64>,
    pub test_only_disable_mr_enclave_check: Option<u8>,
    pub stake_pool: Option<Pubkey>,
    pub stake_program: Option<Pubkey>,
-   pub add_advisory: Option<Vec<u32>>,
-   pub rm_advisory: Option<Vec<u32>>,
+   pub add_advisory: Option<u32>,
+   pub rm_advisory: Option<u32>,
}

Is it because of the Option<Vec<_>>?

Or, could it be because this data structure potentially has multiple ways to be de/serialized by borsh?