Skip to content

Commit

Permalink
Fix/simplify range swap (#571)
Browse files Browse the repository at this point in the history
## 1. Overview

Minor code changes that should not affect functionality and refactoring
of test-tube init functions

## 2. Implementation details

- Bump osmosis-std and osmosis-test-tube versions
- Refactor a boolean condition for easier readability
- test tube init refactor

## 3. How to test/use

<!-- How can people test/use this? -->

## 4. Checklist

<!-- Checklist for PR author(s). -->

[x] Does the Readme need to be updated?
No

## 5. Limitations (optional)

N/A

## 6. Future Work (optional)

N/A
  • Loading branch information
LaurensKubat committed Feb 15, 2024
1 parent 55d9285 commit 74650d5
Show file tree
Hide file tree
Showing 9 changed files with 244 additions and 232 deletions.
18 changes: 9 additions & 9 deletions smart-contracts/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions smart-contracts/contracts/cl-vault/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ cw-utils = "1.0.2"
cw-vault-multi-standard = {git = "https://github.com/quasar-finance/cw-vault-standard", features = ["lockup", "force-unlock"]}
cw2 = "1.0.1"
num_enum = "0.7.0"
osmosis-std = "0.21.0"
osmosis-std = "0.22.0"
prost = {version = "0.12.3", default-features = false}
serde = {version = "1.0.145", default-features = false, features = ["derive"]}
thiserror = {version = "1.0.31"}

[dev-dependencies]
osmosis-test-tube = "21.0.0"
osmosis-test-tube = "22.1.0"
proptest = "1.2.0"
19 changes: 9 additions & 10 deletions smart-contracts/contracts/cl-vault/src/test_tube/admin.rs
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
#[cfg(test)]
mod tests {
use cosmwasm_std::coin;
use osmosis_std::types::cosmos::base::v1beta1;

use crate::test_tube::initialize::initialize::default_init;
use crate::test_tube::initialize::initialize::{default_init, TOKENS_PROVIDED_AMOUNT};

const DENOM_BASE: &str = "uatom";
const DENOM_QUOTE: &str = "uosmo";

#[test]
#[ignore]
fn range_admin_update_works() {
let (_app, _contract_address, _cl_pool_id, _admin) = default_init(vec![
v1beta1::Coin {
denom: DENOM_BASE.to_string(),
amount: "1000000000000".to_string(),
},
v1beta1::Coin {
denom: DENOM_QUOTE.to_string(),
amount: "1000000000000".to_string(),
},
let (_app, _contract, _cl_pool_id, _admin) = default_init(vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
],
vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
])
.unwrap();
// change the range admin and verify that it works
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#[cfg(test)]
mod tests {
use cosmwasm_std::{assert_approx_eq, Coin, Uint128};
use cosmwasm_std::{assert_approx_eq, coin, Coin, Uint128};

use osmosis_std::types::cosmos::base::v1beta1;
use osmosis_test_tube::{Account, Module, Wasm};

use crate::{
msg::{ExecuteMsg, ExtensionQueryMsg, QueryMsg},
query::{AssetsBalanceResponse, TotalAssetsResponse, UserSharesBalanceResponse},
test_tube::initialize::initialize::default_init,
test_tube::initialize::initialize::{default_init, TOKENS_PROVIDED_AMOUNT},
};

const INITIAL_BALANCE_AMOUNT: u128 = 340282366920938463463374607431768211455u128;
Expand All @@ -18,15 +18,13 @@ mod tests {
#[test]
#[ignore]
fn single_deposit_withdraw_works() {
let (app, contract_address, _cl_pool_id, _admin) = default_init(vec![
v1beta1::Coin {
denom: DENOM_BASE.to_string(),
amount: "1000000000000".to_string(),
},
v1beta1::Coin {
denom: DENOM_QUOTE.to_string(),
amount: "1000000000000".to_string(),
},
let (app, contract, cl_pool_id, admin) = default_init(vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
],
vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
])
.unwrap();
let wasm = Wasm::new(&app);
Expand All @@ -40,12 +38,12 @@ mod tests {
.unwrap();

let vault_assets_before: TotalAssetsResponse = wasm
.query(contract_address.as_str(), &QueryMsg::TotalAssets {})
.query(contract.as_str(), &QueryMsg::TotalAssets {})
.unwrap();

// TODO: Check this -> Certain deposit amounts do not work here due to an off by one error in Osmosis cl code. The value here is chosen to specifically work
wasm.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::ExactDeposit { recipient: None },
&[
Coin::new(1_000_000_000_000_000, DENOM_BASE),
Expand All @@ -58,7 +56,7 @@ mod tests {
// Get shares for Alice from vault contract and assert
let shares: UserSharesBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::VaultExtension(ExtensionQueryMsg::Balances(
crate::msg::UserBalanceQueryMsg::UserSharesBalance {
user: alice.address(),
Expand All @@ -71,7 +69,7 @@ mod tests {
// Get user_assets for Alice from vault contract and assert
let user_assets: AssetsBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::VaultExtension(ExtensionQueryMsg::Balances(
crate::msg::UserBalanceQueryMsg::UserAssetsBalance {
user: alice.address(),
Expand All @@ -96,7 +94,7 @@ mod tests {

// Get vault assets and assert
let vault_assets: TotalAssetsResponse = wasm
.query(contract_address.as_str(), &QueryMsg::TotalAssets {})
.query(contract.as_str(), &QueryMsg::TotalAssets {})
.unwrap();
assert_approx_eq!(
vault_assets.token0.amount,
Expand All @@ -121,7 +119,7 @@ mod tests {

let _withdraw = wasm
.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::Redeem {
recipient: None,
amount: shares.balance,
Expand All @@ -137,15 +135,13 @@ mod tests {
#[test]
#[ignore]
fn multiple_deposit_withdraw_works() {
let (app, contract_address, _cl_pool_id, _admin) = default_init(vec![
v1beta1::Coin {
denom: DENOM_BASE.to_string(),
amount: "1000000000000".to_string(),
},
v1beta1::Coin {
denom: DENOM_QUOTE.to_string(),
amount: "1000000000000".to_string(),
},
let (app, contract, cl_pool_id, admin) = default_init(vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
],
vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
])
.unwrap();
let wasm = Wasm::new(&app);
Expand All @@ -160,13 +156,13 @@ mod tests {

// Get vaults assets before doing anything for future assertions
let vault_assets_before: TotalAssetsResponse = wasm
.query(contract_address.as_str(), &QueryMsg::TotalAssets {})
.query(contract.as_str(), &QueryMsg::TotalAssets {})
.unwrap();

// Loop 3 times to do multiple deposits as Alice
for _ in 0..3 {
wasm.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::ExactDeposit { recipient: None },
&[
Coin::new(1_000_000_000_000_000_000, DENOM_BASE),
Expand All @@ -180,7 +176,7 @@ mod tests {
// Get Alice shares from vault contract
let shares: UserSharesBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::VaultExtension(ExtensionQueryMsg::Balances(
crate::msg::UserBalanceQueryMsg::UserSharesBalance {
user: alice.address(),
Expand All @@ -193,7 +189,7 @@ mod tests {
// Get Alice assets from vault contract
let user_assets: AssetsBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::VaultExtension(ExtensionQueryMsg::Balances(
crate::msg::UserBalanceQueryMsg::UserAssetsBalance {
user: alice.address(),
Expand All @@ -217,7 +213,7 @@ mod tests {

let user_assets_again: AssetsBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::ConvertToAssets {
amount: shares.balance,
},
Expand All @@ -235,7 +231,7 @@ mod tests {
);

let vault_assets: TotalAssetsResponse = wasm
.query(contract_address.as_str(), &QueryMsg::TotalAssets {})
.query(contract.as_str(), &QueryMsg::TotalAssets {})
.unwrap();

assert_approx_eq!(
Expand All @@ -260,7 +256,7 @@ mod tests {

let _withdraw = wasm
.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::Redeem {
recipient: None,
amount: shares.balance,
Expand All @@ -275,15 +271,13 @@ mod tests {
#[test]
#[ignore]
fn multiple_deposit_withdraw_unused_funds_works() {
let (app, contract_address, _cl_pool_id, _admin) = default_init(vec![
v1beta1::Coin {
denom: DENOM_BASE.to_string(),
amount: "1000000000000".to_string(),
},
v1beta1::Coin {
denom: DENOM_QUOTE.to_string(),
amount: "1000000000000".to_string(),
},
let (app, contract, cl_pool_id, admin) = default_init(vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
],
vec![
coin(TOKENS_PROVIDED_AMOUNT, DENOM_BASE.to_string()),
coin(TOKENS_PROVIDED_AMOUNT, DENOM_QUOTE.to_string()),
])
.unwrap();
//let bank = Bank::new(&app);
Expand Down Expand Up @@ -335,7 +329,7 @@ mod tests {
// depositing
for user in &users {
wasm.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::ExactDeposit { recipient: None },
&[
Coin::new(deposit_amount, DENOM_BASE),
Expand All @@ -352,7 +346,7 @@ mod tests {
for user in users {
let user_shares: UserSharesBalanceResponse = wasm
.query(
contract_address.as_str(),
contract.as_str(),
&QueryMsg::VaultExtension(ExtensionQueryMsg::Balances(
crate::msg::UserBalanceQueryMsg::UserSharesBalance {
user: user.address(),
Expand All @@ -363,13 +357,13 @@ mod tests {

// let _balances = bank
// .query_all_balances(&QueryAllBalancesRequest {
// address: contract_address.to_string(),
// address: contract.to_string(),
// pagination: None,
// })
// .unwrap();
// let pos_id: PositionResponse = wasm
// .query(
// contract_address.as_str(),
// contract.as_str(),
// &QueryMsg::VaultExtension(ExtensionQueryMsg::ConcentratedLiquidity(
// crate::msg::ClQueryMsg::Position {},
// )),
Expand All @@ -383,7 +377,7 @@ mod tests {

// withdrawing
wasm.execute(
contract_address.as_str(),
contract.as_str(),
&ExecuteMsg::Redeem {
recipient: None,
amount: user_shares.balance,
Expand Down
Loading

0 comments on commit 74650d5

Please sign in to comment.