Skip to main content

bulk_client/msgs/
multisig.rs

1use serde::{Deserialize, Serialize};
2use solana_keypair::Pubkey;
3use crate::transaction::{Action, ActionMeta};
4
5/// Create multi-sig account
6#[derive(Clone, Debug, Serialize, Deserialize)]
7#[serde(rename_all = "camelCase")]
8pub struct CreateMultisig {
9    #[serde(default)]
10    pub signers: Vec<Pubkey>,
11    pub threshold: u32,
12    #[serde(default)]
13    pub time_lock_secs: u32,
14    #[serde(default = "default_proposal_lifetime_secs")]
15    pub proposal_lifetime_secs: u32,
16
17    #[serde(skip)]
18    pub meta: ActionMeta,
19}
20
21/// Create multi-sig proposed action(s)
22#[derive(Clone, Debug, Serialize, Deserialize)]
23#[serde(rename_all = "camelCase")]
24pub struct MultisigPropose {
25    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
26    pub multisig: Pubkey,
27    #[serde(rename = "a", default)]
28    pub actions: Vec<Action>,
29
30    #[serde(skip)]
31    pub meta: ActionMeta,
32}
33
34/// Multi-sig approval
35/// - one signer approves proposal
36#[derive(Clone, Debug, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct MultisigApprove {
39    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
40    pub multisig: Pubkey,
41    #[serde(rename = "p")]
42    pub proposal_id: u64,
43
44    #[serde(skip)]
45    pub meta: ActionMeta,
46}
47
48/// Multi-sig reject
49/// - one signer rejects proposal
50#[derive(Clone, Debug, Serialize, Deserialize)]
51#[serde(rename_all = "camelCase")]
52pub struct MultisigReject {
53    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
54    pub multisig: Pubkey,
55    #[serde(rename = "p")]
56    pub proposal_id: u64,
57
58    #[serde(skip)]
59    pub meta: ActionMeta,
60}
61
62/// Multi-sig cancel
63#[derive(Clone, Debug, Serialize, Deserialize)]
64#[serde(rename_all = "camelCase")]
65pub struct MultisigCancel {
66    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
67    pub multisig: Pubkey,
68    #[serde(rename = "p")]
69    pub proposal_id: u64,
70
71    #[serde(skip)]
72    pub meta: ActionMeta,
73}
74
75/// Multi-sig execute
76#[derive(Clone, Debug, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct MultisigExecute {
79    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
80    pub multisig: Pubkey,
81    #[serde(rename = "p")]
82    pub proposal_id: u64,
83
84    #[serde(skip)]
85    pub meta: ActionMeta,
86}
87
88/// Update multi-sig requirements
89#[derive(Clone, Debug, Serialize, Deserialize)]
90#[serde(rename_all = "camelCase")]
91pub struct UpdateMultisigPolicy {
92    #[serde(with = "crate::msgs::serde_pubkey", rename = "m")]
93    pub multisig: Pubkey,
94    #[serde(default = "default_signers")]
95    pub signers: Vec<Pubkey>,
96    pub threshold: u32,
97    #[serde(default)]
98    pub time_lock_secs: u32,
99    #[serde(default = "default_proposal_lifetime_secs")]
100    pub proposal_lifetime_secs: u32,
101
102    #[serde(skip)]
103    pub meta: ActionMeta,
104}
105
106fn default_signers() -> Vec<Pubkey> {
107    Vec::new()
108}
109fn default_proposal_lifetime_secs() -> u32 {
110    7 * 24 * 3600
111}
112