From af354ee57ceae8b910dd21a6c0da18290e4786c3 Mon Sep 17 00:00:00 2001 From: cnek Date: Thu, 9 Jun 2022 20:43:32 +0800 Subject: [PATCH 1/2] deposit + liquid unstake ix --- Cargo.lock | 49 +++++++++++++++++++++++++++- programs/anchor-comp/Cargo.toml | 2 ++ programs/anchor-comp/src/lib.rs | 1 + programs/anchor-comp/src/marinade.rs | 23 +++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 programs/anchor-comp/src/marinade.rs diff --git a/Cargo.lock b/Cargo.lock index f5cbc7e..6a8f673 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -135,10 +135,12 @@ dependencies = [ [[package]] name = "anchor-comp" -version = "0.2.2" +version = "0.2.3" dependencies = [ "anchor-lang", "mango", + "marinade-finance", + "marinade-onchain-helper", "serum_dex", "solana-program", "spl-governance", @@ -181,6 +183,18 @@ dependencies = [ "thiserror", ] +[[package]] +name = "anchor-spl" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0188c33b4a3c124c4e593f2b440415aaea70a7650fac6ba0772395385d71c003" +dependencies = [ + "anchor-lang", + "solana-program", + "spl-associated-token-account", + "spl-token", +] + [[package]] name = "anchor-syn" version = "0.24.2" @@ -897,6 +911,28 @@ dependencies = [ "syn", ] +[[package]] +name = "marinade-finance" +version = "0.1.0" +source = "git+https://github.com/UXDProtocol/liquid-staking-program#f7e468e456a7735b2b4673b45a1d28ecae258912" +dependencies = [ + "anchor-lang", + "anchor-spl", + "bincode", + "spl-token", +] + +[[package]] +name = "marinade-onchain-helper" +version = "0.1.0" +source = "git+https://github.com/UXDProtocol/marinade-onchain-helper#e25391d4d55d9fa72e445474bf9d15cbce74e234" +dependencies = [ + "anchor-lang", + "anchor-spl", + "marinade-finance", + "solana-program", +] + [[package]] name = "memchr" version = "2.5.0" @@ -1466,6 +1502,17 @@ dependencies = [ "syn", ] +[[package]] +name = "spl-associated-token-account" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b013067447a1396303ddfc294f36e3d260a32f8a16c501c295bcdc7de39b490" +dependencies = [ + "borsh", + "solana-program", + "spl-token", +] + [[package]] name = "spl-governance" version = "2.2.4" diff --git a/programs/anchor-comp/Cargo.toml b/programs/anchor-comp/Cargo.toml index 1459c1f..bf67471 100644 --- a/programs/anchor-comp/Cargo.toml +++ b/programs/anchor-comp/Cargo.toml @@ -26,3 +26,5 @@ mango = { tag = "v3.4.6", git = "https://github.com/blockworks-foundation/mango- # Follows mango serum_dex = { rev = "7f55a5ef5f7937b74381a3124021a261cd7d7283", git = "https://github.com/blockworks-foundation/serum-dex.git", default-features=false, features = ["no-entrypoint", "program"] } spl-governance = { version = "2.2.4", features = ["no-entrypoint"] } +marinade-finance = { git = "https://github.com/UXDProtocol/liquid-staking-program", features = ["no-entrypoint"] } +marinade-onchain-helper = { git = "https://github.com/UXDProtocol/marinade-onchain-helper" } diff --git a/programs/anchor-comp/src/lib.rs b/programs/anchor-comp/src/lib.rs index 7825c66..f71f180 100644 --- a/programs/anchor-comp/src/lib.rs +++ b/programs/anchor-comp/src/lib.rs @@ -1,2 +1,3 @@ pub mod mango_markets_v3; pub mod spl_governance_v2; +pub mod marinade; diff --git a/programs/anchor-comp/src/marinade.rs b/programs/anchor-comp/src/marinade.rs new file mode 100644 index 0000000..c015af4 --- /dev/null +++ b/programs/anchor-comp/src/marinade.rs @@ -0,0 +1,23 @@ +use anchor_lang::prelude::CpiContext; +use anchor_lang::prelude::*; +use marinade_onchain_helper::{cpi_context_accounts::{MarinadeDeposit, MarinadeLiquidUnstake}, cpi_util}; + +pub fn deposit<'a, 'b, 'c, 'info>( + ctx: CpiContext<'_, '_, '_, 'info, MarinadeDeposit<'info>>, + deposit_lamports: u64, +) -> Result<()> { + let data = marinade_finance::instruction::Deposit { + lamports: deposit_lamports, + }; + cpi_util::invoke_signed(ctx, data) +} + +pub fn liquid_unstake<'a, 'b, 'c, 'info>( + ctx: CpiContext<'_, '_, '_, 'info, MarinadeLiquidUnstake<'info>>, + msol_liquid_unstake_amount: u64, +) -> Result<()> { + let instruction_data = marinade_finance::instruction::LiquidUnstake { + msol_amount: msol_liquid_unstake_amount, + }; + cpi_util::invoke_signed(ctx, instruction_data) +} From 2a07948f05ebd511585c14dad39fa4e00718f315 Mon Sep 17 00:00:00 2001 From: cnek Date: Thu, 9 Jun 2022 21:09:37 +0800 Subject: [PATCH 2/2] added sync native --- Cargo.lock | 1 + programs/anchor-comp/Cargo.toml | 1 + programs/anchor-comp/src/lib.rs | 1 + programs/anchor-comp/src/marinade.rs | 1 - programs/anchor-comp/src/spl_token.rs | 25 +++++++++++++++++++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 programs/anchor-comp/src/spl_token.rs diff --git a/Cargo.lock b/Cargo.lock index 6a8f673..3bc446a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -144,6 +144,7 @@ dependencies = [ "serum_dex", "solana-program", "spl-governance", + "spl-token", ] [[package]] diff --git a/programs/anchor-comp/Cargo.toml b/programs/anchor-comp/Cargo.toml index bf67471..721cc11 100644 --- a/programs/anchor-comp/Cargo.toml +++ b/programs/anchor-comp/Cargo.toml @@ -21,6 +21,7 @@ development = [] [dependencies] solana-program = ">=1.9.0" +spl-token = { version = "3.3.0", features = ["no-entrypoint"] } anchor-lang = "0.24.2" mango = { tag = "v3.4.6", git = "https://github.com/blockworks-foundation/mango-v3", features = ["no-entrypoint"] } # Follows mango diff --git a/programs/anchor-comp/src/lib.rs b/programs/anchor-comp/src/lib.rs index f71f180..fb028b9 100644 --- a/programs/anchor-comp/src/lib.rs +++ b/programs/anchor-comp/src/lib.rs @@ -1,3 +1,4 @@ pub mod mango_markets_v3; pub mod spl_governance_v2; pub mod marinade; +pub mod spl_token; diff --git a/programs/anchor-comp/src/marinade.rs b/programs/anchor-comp/src/marinade.rs index c015af4..2cbc91d 100644 --- a/programs/anchor-comp/src/marinade.rs +++ b/programs/anchor-comp/src/marinade.rs @@ -1,4 +1,3 @@ -use anchor_lang::prelude::CpiContext; use anchor_lang::prelude::*; use marinade_onchain_helper::{cpi_context_accounts::{MarinadeDeposit, MarinadeLiquidUnstake}, cpi_util}; diff --git a/programs/anchor-comp/src/spl_token.rs b/programs/anchor-comp/src/spl_token.rs new file mode 100644 index 0000000..4113751 --- /dev/null +++ b/programs/anchor-comp/src/spl_token.rs @@ -0,0 +1,25 @@ +use anchor_lang::prelude::*; +use solana_program::program::invoke_signed; + +pub fn sync_native<'a, 'b, 'c, 'info>( + ctx: CpiContext<'_, '_, '_, 'info, SyncNative<'info>> +)-> Result<()> { + let ix = &spl_token::instruction::sync_native( + ctx.accounts.token_program.key, + &ctx.accounts.account.key(), + )?; + invoke_signed( + ix, + &[ctx.accounts.account.clone()], + ctx.signer_seeds, + ) + .map_err(Into::into) +} + +#[derive(Accounts)] +pub struct SyncNative<'info> { + /// CHECK: token program CPI + pub account: AccountInfo<'info>, + /// CHECK: token program CPI + pub token_program: AccountInfo<'info>, +} \ No newline at end of file