1#![allow(unexpected_cfgs)] declare_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}