diff --git a/Anchor.toml b/Anchor.toml index f397419..6e05b45 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -10,6 +10,7 @@ adapter_katana = "ADPTwDKJTizC3V8gZXDxt5uLjJv4pBnh1nTTf9dZJnS2" adapter_tulip = "ADPT9nhC1asRcEB13FKymLTatqWGCuZHDznGgnakWKxW" adapter_friktion = "ADPTzbsaBdXA3FqXoPHjaTjPfh9kadxxFKxonZihP1Ji" adapter_nft_finance = "ADPTyBr92sBCE1hdYBRvXbMpF4hKs17xyDjFPxopcsrh" +adapter_marinade = "ADPTAGmW9f42rJ5a25vECpjtzhQCHVDBgqhRCxi5cQbi" [registry] url = "https://anchor.projectserum.com" diff --git a/Cargo.lock b/Cargo.lock index c643f19..5d4830b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,6 +42,14 @@ dependencies = [ "anchor-spl", ] +[[package]] +name = "adapter-marinade" +version = "0.1.0" +dependencies = [ + "anchor-lang", + "anchor-spl", +] + [[package]] name = "adapter-nft-finance" version = "0.1.0" diff --git a/programs/adapter-marinade/Cargo.toml b/programs/adapter-marinade/Cargo.toml new file mode 100644 index 0000000..6cb2cce --- /dev/null +++ b/programs/adapter-marinade/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "adapter-marinade" +version = "0.1.0" +description = "Created with Anchor" +edition = "2021" + +[lib] +crate-type = ["cdylib", "lib"] +name = "adapter_marinade" + +[features] +no-entrypoint = [] +no-idl = [] +no-log-ix-name = [] +cpi = ["no-entrypoint"] + +[dependencies] +anchor-lang = "0.24.2" +anchor-spl = "0.24.2" diff --git a/programs/adapter-marinade/Xargo.toml b/programs/adapter-marinade/Xargo.toml new file mode 100644 index 0000000..475fb71 --- /dev/null +++ b/programs/adapter-marinade/Xargo.toml @@ -0,0 +1,2 @@ +[target.bpfel-unknown-unknown.dependencies.std] +features = [] diff --git a/programs/adapter-marinade/src/lib.rs b/programs/adapter-marinade/src/lib.rs new file mode 100644 index 0000000..48bf785 --- /dev/null +++ b/programs/adapter-marinade/src/lib.rs @@ -0,0 +1,71 @@ +use anchor_lang::prelude::*; +use anchor_lang::solana_program::{ + hash::hash, + instruction::{AccountMeta, Instruction}, + program::invoke, +}; + +declare_id!("ADPTAGmW9f42rJ5a25vECpjtzhQCHVDBgqhRCxi5cQbi"); + +pub mod adapter_lido { + use super::*; + use std::borrow::BorrowMut; + + pub fn initiate_deposit<'a, 'b, 'c, 'info>( + ctx: Context<'a, 'b, 'c, 'info, Action<'info>>, + input: Vec, + ) -> Result<()> { + let mut deposit_data = sighash("global", "deposit").to_vec(); + let mut input_bytes = &input[..]; + let input_struct = InitiateDepositInputWrapper::deserialize(&mut input_bytes)?; + + let deposit_amount = input_struct.deposit_amount; + + deposit_data.append(deposit_amount.to_le_bytes().to_vec().borrow_mut()); + + let deposit_accounts = vec![ + AccountMeta::new(ctx.remaining_accounts[0].key(), false), + AccountMeta::new_readonly(ctx.remaining_accounts[1].key(), false), + AccountMeta::new(ctx.remaining_accounts[2].key(), false), + AccountMeta::new(ctx.remaining_accounts[3].key(), false), + AccountMeta::new(ctx.remaining_accounts[4].key(), false), + AccountMeta::new(ctx.remaining_accounts[5].key(), false), + AccountMeta::new(ctx.remaining_accounts[6].key(), false), + AccountMeta::new(ctx.remaining_accounts[7].key(), true), + AccountMeta::new_readonly(ctx.remaining_accounts[8].key(), false), + ]; + + let ix = Instruction { + program_id: ctx.accounts.base_program_id.key(), + accounts: deposit_accounts, + data: deposit_data, + }; + + invoke(&ix, ctx.remaining_accounts)?; + + msg!("Input: {:?}", input_struct); + + // Deriving keys + Ok(()) + } +} + +#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, Default)] +pub struct InitiateDepositInputWrapper { + pub deposit_amount: u64, +} + +pub struct Action<'info> { + // TODO: Add constraints + pub gateway_authority: Signer<'info>, + /// CHECK: Safe + pub base_program_id: AccountInfo<'info>, +} + +pub fn sighash(namespace: &str, name: &str) -> [u8; 8] { + let preimage = format!("{}:{}", namespace, name); + let mut sighash = [0u8; 8]; + + sighash.copy_from_slice(&hash(preimage.as_bytes()).to_bytes()[..8]); + sighash +}