intent_transfer/
lib.rs

1#![allow(unexpected_cfgs)] // warning: unexpected `cfg` condition value: `anchor-debug`
2
3declare_id!("Xfry4dW9m42ncAqm8LyEnyS5V6xu5DSJTMRQLiGkARD");
4
5use anchor_lang::prelude::*;
6
7pub mod bridge;
8pub mod config;
9mod error;
10mod fees;
11mod intrachain;
12mod nonce;
13mod verify;
14
15use crate::config::state::fee_config::FeeConfig;
16use bridge::processor::bridge_ntt_tokens::*;
17use config::processor::register_fee_config::*;
18use config::processor::register_ntt_config::*;
19use intrachain::processor::send_native::*;
20use intrachain::processor::send_tokens::*;
21
22const INTENT_TRANSFER_SEED: &[u8] = b"intent_transfer";
23
24#[program]
25pub mod intent_transfer {
26    use super::*;
27
28    #[instruction(discriminator = [0])]
29    pub fn send_tokens<'info>(ctx: Context<'_, '_, '_, 'info, SendTokens<'info>>) -> Result<()> {
30        ctx.accounts
31            .verify_and_send(&[&[INTENT_TRANSFER_SEED, &[ctx.bumps.intent_transfer_setter]]])
32    }
33
34    #[instruction(discriminator = [1])]
35    pub fn bridge_ntt_tokens<'info>(
36        ctx: Context<'_, '_, '_, 'info, BridgeNttTokens<'info>>,
37        args: BridgeNttTokensArgs,
38    ) -> Result<()> {
39        ctx.accounts.verify_and_initiate_bridge(
40            &[&[INTENT_TRANSFER_SEED, &[ctx.bumps.intent_transfer_setter]]],
41            args,
42        )
43    }
44
45    #[instruction(discriminator = [2])]
46    pub fn register_ntt_config<'info>(
47        ctx: Context<'_, '_, '_, 'info, RegisterNttConfig<'info>>,
48    ) -> Result<()> {
49        ctx.accounts.process()
50    }
51
52    #[instruction(discriminator = [3])]
53    pub fn register_fee_config<'info>(
54        ctx: Context<'_, '_, '_, 'info, RegisterFeeConfig<'info>>,
55        fee_config: FeeConfig,
56    ) -> Result<()> {
57        ctx.accounts.process(fee_config)
58    }
59
60    #[instruction(discriminator = [4])]
61    pub fn send_native<'info>(ctx: Context<'_, '_, '_, 'info, SendNative<'info>>) -> Result<()> {
62        ctx.accounts
63            .verify_and_send(&[&[INTENT_TRANSFER_SEED, &[ctx.bumps.intent_transfer_setter]]])
64    }
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70    use fogo_sessions_sdk::intent_transfer::INTENT_TRANSFER_SETTER;
71
72    #[test]
73    fn test_session_setter_pda_derivation() {
74        assert_eq!(
75            INTENT_TRANSFER_SETTER,
76            Pubkey::find_program_address(&[INTENT_TRANSFER_SEED], &ID).0
77        );
78    }
79}