Skip to content

Commit 2bd3584

Browse files
committed
solana: Validate token_authority is multisig signer
1 parent e2c6d0c commit 2bd3584

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

solana/programs/example-native-token-transfers/src/error.rs

+2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ pub enum NTTError {
5353
BitmapIndexOutOfBounds,
5454
#[msg("NoRegisteredTransceivers")]
5555
NoRegisteredTransceivers,
56+
#[msg("InvalidMultisig")]
57+
InvalidMultisig,
5658
}
5759

5860
impl From<ScalingError> for NTTError {

solana/programs/example-native-token-transfers/src/instructions/initialize.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use crate::{
1010
bitmap::Bitmap,
1111
error::NTTError,
1212
queue::{outbox::OutboxRateLimit, rate_limit::RateLimitState},
13+
spl_multisig::SplMultisig,
1314
};
1415

1516
#[derive(Accounts)]
@@ -117,8 +118,12 @@ pub struct InitializeMultisig<'info> {
117118
)]
118119
pub common: Initialize<'info>,
119120

120-
/// CHECK: multisig is mint authority
121-
pub multisig: UncheckedAccount<'info>,
121+
#[account(
122+
constraint =
123+
multisig.m == 1 && multisig.signers.contains(&common.token_authority.key())
124+
@ NTTError::InvalidMultisig,
125+
)]
126+
pub multisig: InterfaceAccount<'info, SplMultisig>,
122127
}
123128

124129
pub fn initialize_multisig(ctx: Context<InitializeMultisig>, args: InitializeArgs) -> Result<()> {

solana/programs/example-native-token-transfers/src/instructions/release_inbound.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::{
77
config::*,
88
error::NTTError,
99
queue::inbox::{InboxItem, ReleaseStatus},
10+
spl_multisig::SplMultisig,
1011
};
1112

1213
#[derive(Accounts)]
@@ -137,8 +138,12 @@ pub struct ReleaseInboundMintMultisig<'info> {
137138
)]
138139
common: ReleaseInbound<'info>,
139140

140-
/// CHECK: multisig account should be mint authority
141-
pub multisig: UncheckedAccount<'info>,
141+
#[account(
142+
constraint =
143+
multisig.m == 1 && multisig.signers.contains(&common.token_authority.key())
144+
@ NTTError::InvalidMultisig,
145+
)]
146+
pub multisig: InterfaceAccount<'info, SplMultisig>,
142147
}
143148

144149
pub fn release_inbound_mint_multisig<'info>(

solana/ts/idl/3_0_0/json/example_native_token_transfers.json

+5
Original file line numberDiff line numberDiff line change
@@ -2188,6 +2188,11 @@
21882188
"code": 6023,
21892189
"name": "NoRegisteredTransceivers",
21902190
"msg": "NoRegisteredTransceivers"
2191+
},
2192+
{
2193+
"code": 6024,
2194+
"name": "InvalidMultisig",
2195+
"msg": "InvalidMultisig"
21912196
}
21922197
]
21932198
}

solana/ts/idl/3_0_0/ts/example_native_token_transfers.ts

+10
Original file line numberDiff line numberDiff line change
@@ -2188,6 +2188,11 @@ export type ExampleNativeTokenTransfers = {
21882188
"code": 6023,
21892189
"name": "NoRegisteredTransceivers",
21902190
"msg": "NoRegisteredTransceivers"
2191+
},
2192+
{
2193+
"code": 6024,
2194+
"name": "InvalidMultisig",
2195+
"msg": "InvalidMultisig"
21912196
}
21922197
]
21932198
}
@@ -4381,6 +4386,11 @@ export const IDL: ExampleNativeTokenTransfers = {
43814386
"code": 6023,
43824387
"name": "NoRegisteredTransceivers",
43834388
"msg": "NoRegisteredTransceivers"
4389+
},
4390+
{
4391+
"code": 6024,
4392+
"name": "InvalidMultisig",
4393+
"msg": "InvalidMultisig"
43844394
}
43854395
]
43864396
}

0 commit comments

Comments
 (0)