#![allow(clippy::result_large_err)]
#![deny(arithmetic_overflow)]
#![deny(unused_must_use)]
pub use anchor_lang;
use anchor_lang::prelude::*;
#[cfg(not(feature = "no-entrypoint"))]
use solana_security_txt::security_txt;
pub use instructions::ProgramConfig;
pub use instructions::*;
pub use state::*;
pub use utils::SmallVec;
pub mod allocator;
pub mod errors;
pub mod instructions;
pub mod state;
mod utils;
#[cfg(not(feature = "no-entrypoint"))]
security_txt! {
name: "Nova Shield Multisig Program (Fork of Squads V4)",
project_url: "https://github.com/ceobitch/nova-multisig",
contacts: "email:hi@nshield.org",
policy: "https://github.com/ceobitch/nova-multisig/blob/main/security.txt",
preferred_languages: "en",
source_code: "https://github.com/ceobitch/nova-multisig",
auditors: "Original Squads V4: OtterSec, Neodyme, Certora, Trail of Bits"
}
#[cfg(not(feature = "testing"))]
declare_id!("novabpN56UHHXTFRnJrwuaJaQqCoBeXupf8fsiFA2r2");
#[cfg(feature = "testing")]
declare_id!("GyhGAqjokLwF9UXdQ2dR5Zwiup242j4mX4J1tSMKyAmD");
#[program]
pub mod squads_multisig_program {
use errors::MultisigError;
use super::*;
pub fn program_config_init(
ctx: Context<ProgramConfigInit>,
args: ProgramConfigInitArgs,
) -> Result<()> {
ProgramConfigInit::program_config_init(ctx, args)
}
pub fn program_config_set_authority(
ctx: Context<ProgramConfig>,
args: ProgramConfigSetAuthorityArgs,
) -> Result<()> {
ProgramConfig::program_config_set_authority(ctx, args)
}
pub fn program_config_set_multisig_creation_fee(
ctx: Context<ProgramConfig>,
args: ProgramConfigSetMultisigCreationFeeArgs,
) -> Result<()> {
ProgramConfig::program_config_set_multisig_creation_fee(ctx, args)
}
pub fn program_config_set_treasury(
ctx: Context<ProgramConfig>,
args: ProgramConfigSetTreasuryArgs,
) -> Result<()> {
ProgramConfig::program_config_set_treasury(ctx, args)
}
pub fn multisig_create(_ctx: Context<Deprecated>) -> Result<()> {
msg!("multisig_create has been deprecated. Use multisig_create_v2 instead.");
Err(MultisigError::MultisigCreateDeprecated.into())
}
pub fn multisig_create_v2(
ctx: Context<MultisigCreateV2>,
args: MultisigCreateArgsV2,
) -> Result<()> {
MultisigCreateV2::multisig_create(ctx, args)
}
pub fn multisig_add_member(
ctx: Context<MultisigConfig>,
args: MultisigAddMemberArgs,
) -> Result<()> {
MultisigConfig::multisig_add_member(ctx, args)
}
pub fn multisig_remove_member(
ctx: Context<MultisigConfig>,
args: MultisigRemoveMemberArgs,
) -> Result<()> {
MultisigConfig::multisig_remove_member(ctx, args)
}
pub fn multisig_set_time_lock(
ctx: Context<MultisigConfig>,
args: MultisigSetTimeLockArgs,
) -> Result<()> {
MultisigConfig::multisig_set_time_lock(ctx, args)
}
pub fn multisig_change_threshold(
ctx: Context<MultisigConfig>,
args: MultisigChangeThresholdArgs,
) -> Result<()> {
MultisigConfig::multisig_change_threshold(ctx, args)
}
pub fn multisig_set_config_authority(
ctx: Context<MultisigConfig>,
args: MultisigSetConfigAuthorityArgs,
) -> Result<()> {
MultisigConfig::multisig_set_config_authority(ctx, args)
}
pub fn multisig_set_rent_collector(
ctx: Context<MultisigConfig>,
args: MultisigSetRentCollectorArgs,
) -> Result<()> {
MultisigConfig::multisig_set_rent_collector(ctx, args)
}
pub fn multisig_add_spending_limit(
ctx: Context<MultisigAddSpendingLimit>,
args: MultisigAddSpendingLimitArgs,
) -> Result<()> {
MultisigAddSpendingLimit::multisig_add_spending_limit(ctx, args)
}
pub fn multisig_remove_spending_limit(
ctx: Context<MultisigRemoveSpendingLimit>,
args: MultisigRemoveSpendingLimitArgs,
) -> Result<()> {
MultisigRemoveSpendingLimit::multisig_remove_spending_limit(ctx, args)
}
pub fn config_transaction_create(
ctx: Context<ConfigTransactionCreate>,
args: ConfigTransactionCreateArgs,
) -> Result<()> {
ConfigTransactionCreate::config_transaction_create(ctx, args)
}
pub fn config_transaction_execute<'info>(
ctx: Context<'_, '_, 'info, 'info, ConfigTransactionExecute<'info>>,
) -> Result<()> {
ConfigTransactionExecute::config_transaction_execute(ctx)
}
pub fn vault_transaction_create(
ctx: Context<VaultTransactionCreate>,
args: VaultTransactionCreateArgs,
) -> Result<()> {
VaultTransactionCreate::vault_transaction_create(ctx, args)
}
pub fn transaction_buffer_create(
ctx: Context<TransactionBufferCreate>,
args: TransactionBufferCreateArgs,
) -> Result<()> {
TransactionBufferCreate::transaction_buffer_create(ctx, args)
}
pub fn transaction_buffer_close(ctx: Context<TransactionBufferClose>) -> Result<()> {
TransactionBufferClose::transaction_buffer_close(ctx)
}
pub fn transaction_buffer_extend(
ctx: Context<TransactionBufferExtend>,
args: TransactionBufferExtendArgs,
) -> Result<()> {
TransactionBufferExtend::transaction_buffer_extend(ctx, args)
}
pub fn vault_transaction_create_from_buffer<'info>(
ctx: Context<'_, '_, 'info, 'info, VaultTransactionCreateFromBuffer<'info>>,
args: VaultTransactionCreateArgs,
) -> Result<()> {
VaultTransactionCreateFromBuffer::vault_transaction_create_from_buffer(ctx, args)
}
pub fn vault_transaction_execute(ctx: Context<VaultTransactionExecute>) -> Result<()> {
VaultTransactionExecute::vault_transaction_execute(ctx)
}
pub fn batch_create(ctx: Context<BatchCreate>, args: BatchCreateArgs) -> Result<()> {
BatchCreate::batch_create(ctx, args)
}
pub fn batch_add_transaction(
ctx: Context<BatchAddTransaction>,
args: BatchAddTransactionArgs,
) -> Result<()> {
BatchAddTransaction::batch_add_transaction(ctx, args)
}
pub fn batch_execute_transaction(ctx: Context<BatchExecuteTransaction>) -> Result<()> {
BatchExecuteTransaction::batch_execute_transaction(ctx)
}
pub fn proposal_create(ctx: Context<ProposalCreate>, args: ProposalCreateArgs) -> Result<()> {
ProposalCreate::proposal_create(ctx, args)
}
pub fn proposal_activate(ctx: Context<ProposalActivate>) -> Result<()> {
ProposalActivate::proposal_activate(ctx)
}
pub fn proposal_approve(ctx: Context<ProposalVote>, args: ProposalVoteArgs) -> Result<()> {
ProposalVote::proposal_approve(ctx, args)
}
pub fn proposal_reject(ctx: Context<ProposalVote>, args: ProposalVoteArgs) -> Result<()> {
ProposalVote::proposal_reject(ctx, args)
}
pub fn proposal_cancel(ctx: Context<ProposalVote>, args: ProposalVoteArgs) -> Result<()> {
ProposalVote::proposal_cancel(ctx, args)
}
pub fn proposal_cancel_v2<'info>(
ctx: Context<'_, '_, 'info, 'info, ProposalCancelV2<'info>>,
args: ProposalVoteArgs,
) -> Result<()> {
ProposalCancelV2::proposal_cancel_v2(ctx, args)
}
pub fn spending_limit_use(
ctx: Context<SpendingLimitUse>,
args: SpendingLimitUseArgs,
) -> Result<()> {
SpendingLimitUse::spending_limit_use(ctx, args)
}
pub fn config_transaction_accounts_close(
ctx: Context<ConfigTransactionAccountsClose>,
) -> Result<()> {
ConfigTransactionAccountsClose::config_transaction_accounts_close(ctx)
}
pub fn vault_transaction_accounts_close(
ctx: Context<VaultTransactionAccountsClose>,
) -> Result<()> {
VaultTransactionAccountsClose::vault_transaction_accounts_close(ctx)
}
pub fn vault_batch_transaction_account_close(
ctx: Context<VaultBatchTransactionAccountClose>,
) -> Result<()> {
VaultBatchTransactionAccountClose::vault_batch_transaction_account_close(ctx)
}
pub fn batch_accounts_close(ctx: Context<BatchAccountsClose>) -> Result<()> {
BatchAccountsClose::batch_accounts_close(ctx)
}
}