Skip to content

Commit

Permalink
done oraiswap_router
Browse files Browse the repository at this point in the history
  • Loading branch information
tubackkhoa committed Nov 3, 2022
1 parent d6d8f34 commit 5c00c03
Show file tree
Hide file tree
Showing 11 changed files with 136 additions and 123 deletions.
20 changes: 20 additions & 0 deletions Cargo.lock

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

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["packages/*", "contracts/oraiswap_token","contracts/oraiswap_oracle","contracts/oraiswap_pair","contracts/oraiswap_factory"]
members = ["packages/*", "contracts/oraiswap_token","contracts/oraiswap_oracle","contracts/oraiswap_pair","contracts/oraiswap_factory","contracts/oraiswap_router"]

[profile.release]
opt-level = 3
Expand Down
6 changes: 3 additions & 3 deletions contracts/oraiswap_pair/src/testing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ fn provide_liquidity() {
app.execute(
Addr::unchecked(MOCK_CONTRACT_ADDR),
asset_addr.clone(),
&cw20_base::msg::ExecuteMsg::IncreaseAllowance {
&cw20::Cw20ExecuteMsg::IncreaseAllowance {
spender: pair_addr.to_string(),
amount: Uint128::from(100u128),
expires: None,
Expand Down Expand Up @@ -197,7 +197,7 @@ fn provide_liquidity() {
app.execute(
Addr::unchecked(MOCK_CONTRACT_ADDR),
asset_addr.clone(),
&cw20_base::msg::ExecuteMsg::IncreaseAllowance {
&cw20::Cw20ExecuteMsg::IncreaseAllowance {
spender: pair_addr.to_string(),
amount: Uint128::from(100u128),
expires: None,
Expand Down Expand Up @@ -327,7 +327,7 @@ fn withdraw_liquidity() {
app.execute(
Addr::unchecked("addr0000"),
liquidity_addr.clone(),
&cw20_base::msg::ExecuteMsg::IncreaseAllowance {
&cw20::Cw20ExecuteMsg::IncreaseAllowance {
spender: pair_addr.to_string(),
amount: Uint128::from(1000u128),
expires: None,
Expand Down
4 changes: 2 additions & 2 deletions contracts/oraiswap_router/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ cw-storage-plus = { version = "0.16.0" }
integer-sqrt = "0.1.5"
schemars = "0.8.1"
serde = { version = "1.0.103", default-features = false, features = ["derive"] }
cw-multi-test = { version = "0.16.0" }
cosmwasm-schema = "1.1.0"

[dev-dependencies]
cw-multi-test = { version = "0.16.0" }
cosmwasm-storage = { version = "1.1.0" }
cosmwasm-schema = "1.1.0"
oraiswap-oracle = { path = "../oraiswap_oracle" }
oraiswap-token = { path = "../oraiswap_token" }
oraiswap-pair = { path = "../oraiswap_pair" }
Expand Down
18 changes: 0 additions & 18 deletions contracts/oraiswap_router/examples/schema.rs

This file was deleted.

11 changes: 11 additions & 0 deletions contracts/oraiswap_router/src/bin/schema.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use cosmwasm_schema::write_api;

use oraiswap::router::{ExecuteMsg, InstantiateMsg, QueryMsg};

fn main() {
write_api! {
instantiate: InstantiateMsg,
execute: ExecuteMsg,
query: QueryMsg,
}
}
46 changes: 25 additions & 21 deletions contracts/oraiswap_router/src/contract.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#[cfg(not(feature = "library"))]
use cosmwasm_std::entry_point;

use cosmwasm_std::{
from_binary, to_binary, Addr, Binary, Deps, DepsMut, Env, MessageInfo, QueryRequest, Response,
Response, StdError, StdResult, Uint128, WasmQuery,
StdError, StdResult, Uint128, WasmQuery,
};
use oraiswap::error::ContractError;

Expand All @@ -17,6 +20,7 @@ use oraiswap::router::{
SimulateSwapOperationsResponse, SwapOperation,
};

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut,
_env: Env,
Expand All @@ -26,13 +30,14 @@ pub fn instantiate(
CONFIG.save(
deps.storage,
&Config {
factory_addr: deps.api.addr_canonicalize(&msg.factory_addr)?,
factory_addr: deps.api.addr_canonicalize(msg.factory_addr.as_str())?,
},
)?;

Ok(Response::default())
}

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
deps: DepsMut,
env: Env,
Expand Down Expand Up @@ -71,20 +76,21 @@ pub fn receive_cw20(
_info: MessageInfo,
cw20_msg: Cw20ReceiveMsg,
) -> Result<Response, ContractError> {
let sender = deps.api.addr_validate(&cw20_msg.sender)?;

// throw empty data as well when decoding
match from_binary(&cw20_msg.msg.unwrap_or_default())? {
match from_binary(&cw20_msg.msg)? {
Cw20HookMsg::ExecuteSwapOperations {
operations,
minimum_receive,
to,
} => handle_swap_operations(
deps,
env,
cw20_msg.sender,
operations,
minimum_receive,
to.map(Addr),
),
} => {
let receiver = match to {
Some(addr) => deps.api.addr_validate(addr.as_str()).ok(),
None => None,
};
handle_swap_operations(deps, env, sender, operations, minimum_receive, receiver)
}
}
}

Expand All @@ -96,7 +102,7 @@ fn assert_minium_receive(
receiver: Addr,
) -> Result<Response, ContractError> {
let receiver_balance = asset_info.query_pool(&deps.querier, receiver)?;
let swap_amount = Asset::checked_sub(receiver_balance, prev_balance)?;
let swap_amount = receiver_balance.checked_sub(prev_balance)?;

if swap_amount < minium_receive {
return Err(ContractError::SwapAssertionFailure {
Expand All @@ -108,6 +114,7 @@ fn assert_minium_receive(
Ok(Response::default())
}

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
match msg {
QueryMsg::Config {} => to_binary(&query_config(deps)?),
Expand Down Expand Up @@ -163,14 +170,12 @@ fn simulate_swap_operations(
};

// Deduct tax before querying simulation, with native token only
offer_amount = Asset::checked_sub(
offer_amount,
return_asset.compute_tax(&oracle_contract, &deps.querier)?,
)?;
offer_amount = offer_amount
.checked_sub(return_asset.compute_tax(&oracle_contract, &deps.querier)?)?;

let mut res: SimulationResponse =
deps.querier.query(&QueryRequest::Wasm(WasmQuery::Smart {
contract_addr: pair_info.contract_addr.clone(),
contract_addr: pair_info.contract_addr.to_string(),
msg: to_binary(&PairQueryMsg::Simulation {
offer_asset: Asset {
info: offer_asset_info,
Expand All @@ -185,10 +190,9 @@ fn simulate_swap_operations(
};

// Deduct tax after querying simulation, with native token only
res.return_amount = Asset::checked_sub(
res.return_amount,
return_asset.compute_tax(&oracle_contract, &deps.querier)?,
)?;
res.return_amount = res
.return_amount
.checked_sub(return_asset.compute_tax(&oracle_contract, &deps.querier)?)?;

offer_amount = res.return_amount;
}
Expand Down
40 changes: 15 additions & 25 deletions contracts/oraiswap_router/src/operations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,7 @@ pub fn handle_swap_operation(
}
};

Ok(Response {
messages,
attributes: vec![],
data: None,
})
Ok(Response::new().add_messages(messages))
}

pub fn handle_swap_operations(
Expand Down Expand Up @@ -103,8 +99,8 @@ pub fn handle_swap_operations(
.map(|op| {
operation_index += 1;
Ok(CosmosMsg::Wasm(WasmMsg::Execute {
contract_addr: env.contract.address.clone(),
send: vec![],
contract_addr: env.contract.address.to_string(),
funds: vec![],
msg: to_binary(&ExecuteMsg::ExecuteSwapOperation {
operation: op,
to: if operation_index == operations_len {
Expand All @@ -122,8 +118,8 @@ pub fn handle_swap_operations(
let receiver_balance = target_asset_info.query_pool(&deps.querier, to.clone())?;

messages.push(CosmosMsg::Wasm(WasmMsg::Execute {
contract_addr: env.contract.address.clone(),
send: vec![],
contract_addr: env.contract.address.to_string(),
funds: vec![],
msg: to_binary(&ExecuteMsg::AssertMinimumReceive {
asset_info: target_asset_info,
prev_balance: receiver_balance,
Expand All @@ -133,11 +129,7 @@ pub fn handle_swap_operations(
}))
}

Ok(Response {
messages,
attributes: vec![],
data: None,
})
Ok(Response::new().add_messages(messages))
}

fn asset_into_swap_msg(
Expand All @@ -158,14 +150,13 @@ fn asset_into_swap_msg(
};

// deduct tax first
let amount = Asset::checked_sub(
offer_asset.amount,
return_asset.compute_tax(oracle_contract, &deps.querier)?,
)?;
let amount = offer_asset
.amount
.checked_sub(return_asset.compute_tax(oracle_contract, &deps.querier)?)?;

Ok(CosmosMsg::Wasm(WasmMsg::Execute {
contract_addr: pair_contract,
send: vec![Coin { denom, amount }],
contract_addr: pair_contract.to_string(),
funds: vec![Coin { denom, amount }],
msg: to_binary(&PairExecuteMsg::Swap {
offer_asset: Asset {
amount,
Expand All @@ -178,18 +169,17 @@ fn asset_into_swap_msg(
}))
}
AssetInfo::Token { contract_addr } => Ok(CosmosMsg::Wasm(WasmMsg::Execute {
contract_addr,
send: vec![],
contract_addr: contract_addr.to_string(),
funds: vec![],
msg: to_binary(&Cw20ExecuteMsg::Send {
contract: pair_contract,
contract: pair_contract.to_string(),
amount: offer_asset.amount,
msg: to_binary(&PairExecuteMsg::Swap {
offer_asset,
belief_price: None,
max_spread,
to,
})
.ok(),
})?,
})?,
})),
}
Expand Down
4 changes: 2 additions & 2 deletions contracts/oraiswap_router/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ mod test {

#[test]
fn legacy_compatibility() {
let mut deps = mock_dependencies(&[]);
let mut deps = mock_dependencies();
store_config(
&mut deps.storage,
&Config {
factory_addr: deps.api.addr_canonicalize(&"addr0000".into()).unwrap(),
factory_addr: deps.api.addr_canonicalize("addr0000").unwrap(),
},
)
.unwrap();
Expand Down
Loading

0 comments on commit 5c00c03

Please sign in to comment.