Skip to content

Commit 10acaf5

Browse files
committed
solana: require that transfer is not released in redeem
1 parent eff94d7 commit 10acaf5

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

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

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ pub enum NTTError {
1919
InvalidRecipientNttManager,
2020
#[msg("TransferAlreadyRedeemed")]
2121
TransferAlreadyRedeemed,
22+
#[msg("TransferCannotBeRedeemed")]
23+
TransferCannotBeRedeemed,
2224
#[msg("TransferNotApproved")]
2325
TransferNotApproved,
2426
#[msg("MessageAlreadySent")]

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ pub fn redeem(ctx: Context<Redeem>, _args: RedeemArgs) -> Result<()> {
134134
RateLimitResult::Delayed(release_timestamp) => release_timestamp,
135135
};
136136

137-
accs.inbox_item.release_status = ReleaseStatus::ReleaseAfter(release_timestamp);
137+
accs.inbox_item.release_after(release_timestamp)?;
138138

139139
Ok(())
140140
}

solana/programs/example-native-token-transfers/src/queue/inbox.rs

+8
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@ impl InboxItem {
4545
ReleaseStatus::Released => Err(NTTError::TransferAlreadyRedeemed.into()),
4646
}
4747
}
48+
49+
pub fn release_after(&mut self, release_timestamp: i64) -> Result<()> {
50+
if self.release_status != ReleaseStatus::NotApproved {
51+
return Err(NTTError::TransferCannotBeRedeemed.into());
52+
};
53+
self.release_status = ReleaseStatus::ReleaseAfter(release_timestamp);
54+
Ok(())
55+
}
4856
}
4957

5058
/// Inbound rate limit per chain.

0 commit comments

Comments
 (0)