Skip to content

Commit

Permalink
Merge tag 'v1.14.0' into develop
Browse files Browse the repository at this point in the history
v1.14.0
  • Loading branch information
8dell committed Jul 20, 2022
2 parents b665138 + c2ead8a commit e74423c
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 55 deletions.
22 changes: 11 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions programs/multisig/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "mean-multisig"
version = "1.13.0"
version = "1.14.0"
description = "Created with Anchor"
edition = "2018"
license = "Apache-2.0"
Expand All @@ -17,4 +17,4 @@ default = []

[dependencies]
anchor-lang = { version = "^0.24.2", features = ["init-if-needed"] }
solana-program = "~1.9.17"
solana-program = "~1.9.29"
134 changes: 92 additions & 42 deletions programs/multisig/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,6 @@ use std::ops::Deref;

declare_id!("FF7U7Vj1PpBkTPau7frwLLrUHrjkxTQLsH7U5K3T3B3j");

pub const MULTISIG_FEE: u64 = 20_000_000;

pub mod mean_multisig_ops_account {
solana_program::declare_id!("3TD6SWY9M1mLY2kZWJNavPLhwXvcRsWdnZLRaMzERJBw");
}

#[program]
pub mod mean_multisig {

Expand Down Expand Up @@ -76,15 +70,15 @@ pub mod mean_multisig {
// Fee
let pay_fee_ix = solana_program::system_instruction::transfer(
ctx.accounts.proposer.key,
ctx.accounts.multisig_ops_account.key,
MULTISIG_FEE
ctx.accounts.ops_account.key,
ctx.accounts.settings.create_multisig_fee
);

solana_program::program::invoke(
&pay_fee_ix,
&[
ctx.accounts.proposer.to_account_info(),
ctx.accounts.multisig_ops_account.to_account_info(),
ctx.accounts.ops_account.to_account_info(),
ctx.accounts.system_program.to_account_info()
]
)?;
Expand Down Expand Up @@ -118,9 +112,11 @@ pub mod mean_multisig {
};
}

multisig.owners = multisig_owners;
multisig.owner_set_seqno += 1;
multisig.owners = multisig_owners;
multisig.pending_txs = 0;
multisig.owner_set_seqno = multisig.owner_set_seqno
.checked_add(1)
.ok_or(ErrorCode::Overflow)?;

Ok(())
}
Expand Down Expand Up @@ -188,15 +184,15 @@ pub mod mean_multisig {
// Fee
let pay_fee_ix = solana_program::system_instruction::transfer(
ctx.accounts.proposer.key,
ctx.accounts.multisig_ops_account.key,
MULTISIG_FEE
ctx.accounts.ops_account.key,
ctx.accounts.settings.create_transaction_fee
);

solana_program::program::invoke(
&pay_fee_ix,
&[
ctx.accounts.proposer.to_account_info(),
ctx.accounts.multisig_ops_account.to_account_info(),
ctx.accounts.ops_account.to_account_info(),
ctx.accounts.system_program.to_account_info()
]
)?;
Expand Down Expand Up @@ -334,12 +330,7 @@ pub mod mean_multisig {
}

/// Executes the given transaction if threshold owners have signed it.
pub fn execute_transaction_pda(
ctx: Context<ExecuteTransactionPda>,
pda_timestamp: u64,
pda_bump: u8

) -> Result<()> {
pub fn execute_transaction_pda(ctx: Context<ExecuteTransactionPda>) -> Result<()> {

// Has this been executed already?
if ctx.accounts.transaction.executed_on > 0 {
Expand Down Expand Up @@ -391,8 +382,8 @@ pub mod mean_multisig {

let pda_seeds = &[
ctx.accounts.multisig.to_account_info().key.as_ref(),
&pda_timestamp.to_le_bytes(),
&[pda_bump],
&ctx.accounts.transaction.pda_timestamp.to_le_bytes(),
&[ctx.accounts.transaction.pda_bump],
];

let signers = &[&transaction_seeds[..], &pda_seeds[..]];
Expand All @@ -410,6 +401,21 @@ pub mod mean_multisig {

Ok(())
}

pub fn update_settings(
ctx: Context<UpdateSettings>,
ops_account: Pubkey,
create_multisig_fee: u64,
create_transaction_fee: u64,

) -> Result<()> {

ctx.accounts.settings.ops_account = ops_account;
ctx.accounts.settings.create_multisig_fee = create_multisig_fee;
ctx.accounts.settings.create_transaction_fee = create_transaction_fee;

Ok(())
}
}

#[derive(Accounts)]
Expand All @@ -422,8 +428,16 @@ pub struct CreateMultisig<'info> {
space = 8 + 640 + 1 + 1 + 32 + 4 + 8 + 8 + 8, // 710
)]
multisig: Box<Account<'info, MultisigV2>>,
#[account(mut, address = mean_multisig_ops_account::ID)]
multisig_ops_account: SystemAccount<'info>,
#[account(
mut,
address = settings.ops_account
)]
ops_account: SystemAccount<'info>,
#[account(
seeds = [b"settings"],
bump = settings.bump
)]
settings: Box<Account<'info, Settings>>,
system_program: Program<'info, System>
}

Expand Down Expand Up @@ -455,8 +469,16 @@ pub struct CreateTransaction<'info> {
// One of the owners. Checked in the handler.
#[account(mut)]
proposer: Signer<'info>,
#[account(mut, address = mean_multisig_ops_account::ID)]
multisig_ops_account: SystemAccount<'info>,
#[account(
mut,
address = settings.ops_account
)]
ops_account: SystemAccount<'info>,
#[account(
seeds = [b"settings"],
bump = settings.bump
)]
settings: Box<Account<'info, Settings>>,
system_program: Program<'info, System>
}

Expand Down Expand Up @@ -571,10 +593,6 @@ pub struct ExecuteTransaction<'info> {
}

#[derive(Accounts)]
#[instruction(
pda_timestamp: u64,
pda_bump: u8
)]
pub struct ExecuteTransactionPda<'info> {
/// CHECK: multisig_signer is a PDA program signer. Data is never read or written to
#[account(
Expand All @@ -591,8 +609,8 @@ pub struct ExecuteTransactionPda<'info> {
/// CHECK: `doc comment explaining why no checks through types are necessary`
#[account(
mut,
seeds = [multisig.key().as_ref(), &pda_timestamp.to_le_bytes()],
bump = pda_bump,
seeds = [multisig.key().as_ref(), &transaction.pda_timestamp.to_le_bytes()],
bump = transaction.pda_bump,
)]
pda_account: UncheckedAccount<'info>,
#[account(mut, has_one = multisig)]
Expand All @@ -611,17 +629,33 @@ pub struct ExecuteTransactionPda<'info> {
system_program: Program<'info, System>
}

#[account]
pub struct Multisig {
pub owners: Vec<Pubkey>,
pub threshold: u64,
pub nonce: u8,
pub owner_set_seqno: u32,
pub label: String,
pub created_on: u64,
pub pending_txs: u64
#[derive(Accounts)]
pub struct UpdateSettings<'info> {
#[account()]
authority: Signer<'info>,
#[account(
mut,
seeds = [b"settings"],
bump = settings.bump
)]
settings: Account<'info, Settings>,
#[account(constraint = program.programdata_address()? == Some(program_data.key()))]
program: Program<'info, crate::program::MeanMultisig>,
#[account(constraint = program_data.upgrade_authority_address == Some(authority.key()))]
program_data: Account<'info, ProgramData>,
}

// #[account]
// pub struct Multisig {
// pub owners: Vec<Pubkey>,
// pub threshold: u64,
// pub nonce: u8,
// pub owner_set_seqno: u32,
// pub label: String,
// pub created_on: u64,
// pub pending_txs: u64
// }

#[account]
pub struct MultisigV2 {
/// multisig account owners
Expand Down Expand Up @@ -683,8 +717,24 @@ pub struct TransactionDetail {
pub expiration_date: u64
}

/// Owner parameter passed on create and edit multisig
#[account]
pub struct Settings {
/// Account version
pub version: u8,
/// PDA bump
pub bump: u8,
/// Account authority
pub authority: Pubkey,
/// Fees account
pub ops_account: Pubkey,
/// Fee amount in lamports
pub create_multisig_fee: u64,
/// Fee amount in lamports
pub create_transaction_fee: u64,
}

/// Owner parameter passed on create and edit multisig
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct Owner {
pub address: Pubkey,
pub name: String
Expand Down

0 comments on commit e74423c

Please sign in to comment.