Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/blue-hairs-rescue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@orca-so/whirlpools-rust": patch
---

Fix: drop MutexGuard immediately
20 changes: 7 additions & 13 deletions rust-sdk/whirlpool/src/create_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,21 +222,15 @@ pub async fn create_concentrated_liquidity_pool_instructions(

let initial_sqrt_price: u128 = price_to_sqrt_price(initial_price, decimals_a, decimals_b);

let pool_address = get_whirlpool_address(
&*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?,
&token_a,
&token_b,
tick_spacing,
)?
.0;
let whirlpools_config_address = *WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?;
let pool_address =
get_whirlpool_address(&whirlpools_config_address, &token_a, &token_b, tick_spacing)?.0;

let fee_tier = get_fee_tier_address(&*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?, tick_spacing)?.0;
let fee_tier = get_fee_tier_address(&whirlpools_config_address, tick_spacing)?.0;

let token_badge_a =
get_token_badge_address(&*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?, &token_a)?.0;
let token_badge_a = get_token_badge_address(&whirlpools_config_address, &token_a)?.0;

let token_badge_b =
get_token_badge_address(&*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?, &token_b)?.0;
let token_badge_b = get_token_badge_address(&whirlpools_config_address, &token_b)?.0;

let token_vault_a = Keypair::new();
let token_vault_b = Keypair::new();
Expand All @@ -246,7 +240,7 @@ pub async fn create_concentrated_liquidity_pool_instructions(

instructions.push(
InitializePoolV2 {
whirlpools_config: *WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?,
whirlpools_config: whirlpools_config_address,
token_mint_a: token_a,
token_mint_b: token_b,
token_badge_a,
Expand Down
20 changes: 10 additions & 10 deletions rust-sdk/whirlpool/src/pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,17 +202,17 @@ pub async fn fetch_concentrated_liquidity_pool(
token_2: Pubkey,
tick_spacing: u16,
) -> Result<PoolInfo, Box<dyn Error>> {
let whirlpools_config_address = &*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?;
let whirlpools_config_address = *WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?;
let [token_a, token_b] = order_mints(token_1, token_2);
let whirlpool_address =
get_whirlpool_address(whirlpools_config_address, &token_a, &token_b, tick_spacing)?.0;
get_whirlpool_address(&whirlpools_config_address, &token_a, &token_b, tick_spacing)?.0;

let fee_tier_address = get_fee_tier_address(whirlpools_config_address, tick_spacing)?;
let fee_tier_address = get_fee_tier_address(&whirlpools_config_address, tick_spacing)?;

let account_infos = rpc
.get_multiple_accounts(&[
whirlpool_address,
*whirlpools_config_address,
whirlpools_config_address,
fee_tier_address.0,
token_a,
token_b,
Expand Down Expand Up @@ -247,7 +247,7 @@ pub async fn fetch_concentrated_liquidity_pool(
} else {
Ok(PoolInfo::Uninitialized(UninitializedPool {
address: whirlpool_address,
whirlpools_config: *whirlpools_config_address,
whirlpools_config: whirlpools_config_address,
tick_spacing,
fee_rate: fee_tier.default_fee_rate,
protocol_fee_rate: whirlpools_config.default_protocol_fee_rate,
Expand Down Expand Up @@ -315,17 +315,17 @@ pub async fn fetch_whirlpools_by_token_pair(
token_1: Pubkey,
token_2: Pubkey,
) -> Result<Vec<PoolInfo>, Box<dyn Error>> {
let whirlpools_config_address = &*WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?;
let whirlpools_config_address = *WHIRLPOOLS_CONFIG_ADDRESS.try_lock()?;
let [token_a, token_b] = order_mints(token_1, token_2);

let fee_tiers = fetch_all_fee_tier_with_filter(
rpc,
vec![FeeTierFilter::WhirlpoolsConfig(*whirlpools_config_address)],
vec![FeeTierFilter::WhirlpoolsConfig(whirlpools_config_address)],
)
.await?;

let account_infos = rpc
.get_multiple_accounts(&[*whirlpools_config_address, token_a, token_b])
.get_multiple_accounts(&[whirlpools_config_address, token_a, token_b])
.await?;

let whirlpools_config_info = account_infos[0].as_ref().ok_or(format!(
Expand All @@ -348,7 +348,7 @@ pub async fn fetch_whirlpools_by_token_pair(
.iter()
.map(|fee_tier| fee_tier.data.tick_spacing)
.map(|tick_spacing| {
get_whirlpool_address(whirlpools_config_address, &token_a, &token_b, tick_spacing)
get_whirlpool_address(&whirlpools_config_address, &token_a, &token_b, tick_spacing)
})
.map(|x| x.map(|y| y.0))
.collect::<Result<Vec<Pubkey>, ProgramError>>()?;
Expand All @@ -368,7 +368,7 @@ pub async fn fetch_whirlpools_by_token_pair(
} else {
whirlpools.push(PoolInfo::Uninitialized(UninitializedPool {
address: pool_address,
whirlpools_config: *whirlpools_config_address,
whirlpools_config: whirlpools_config_address,
tick_spacing: fee_tier.data.tick_spacing,
fee_rate: fee_tier.data.default_fee_rate,
protocol_fee_rate: whirlpools_config.default_protocol_fee_rate,
Expand Down