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_tokens::*;
20
21const INTENT_TRANSFER_SEED: &[u8] = b"intent_transfer";
22
23#[program]
24pub mod intent_transfer {
25 use super::*;
26
27 #[instruction(discriminator = [0])]
28 pub fn send_tokens<'info>(ctx: Context<'_, '_, '_, 'info, SendTokens<'info>>) -> Result<()> {
29 ctx.accounts
30 .verify_and_send(&[&[INTENT_TRANSFER_SEED, &[ctx.bumps.intent_transfer_setter]]])
31 }
32
33 #[instruction(discriminator = [1])]
34 pub fn bridge_ntt_tokens<'info>(
35 ctx: Context<'_, '_, '_, 'info, BridgeNttTokens<'info>>,
36 args: BridgeNttTokensArgs,
37 ) -> Result<()> {
38 ctx.accounts.verify_and_initiate_bridge(
39 &[&[INTENT_TRANSFER_SEED, &[ctx.bumps.intent_transfer_setter]]],
40 args,
41 )
42 }
43
44 #[instruction(discriminator = [2])]
45 pub fn register_ntt_config<'info>(
46 ctx: Context<'_, '_, '_, 'info, RegisterNttConfig<'info>>,
47 ) -> Result<()> {
48 ctx.accounts.process()
49 }
50
51 #[instruction(discriminator = [3])]
52 pub fn register_fee_config<'info>(
53 ctx: Context<'_, '_, '_, 'info, RegisterFeeConfig<'info>>,
54 fee_config: FeeConfig,
55 ) -> Result<()> {
56 ctx.accounts.process(fee_config)
57 }
58}
59
60#[cfg(test)]
61mod tests {
62 use super::*;
63 use std::str::FromStr;
64
65 #[test]
66 fn test_session_setter_pda_derivation() {
67 assert_eq!(
68 Pubkey::from_str("EkYeW6iAtp2XsxsFZ2pDryf54qSND4RkGFCgMmX55vBL").unwrap(),
69 Pubkey::find_program_address(&[INTENT_TRANSFER_SEED], &ID).0
70 );
71 }
72}