Skip to content

Feat/relayer #40

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 22, 2024
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
42 changes: 30 additions & 12 deletions contracts/oraiswap_limit_order/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION");

// default commission rate = 0.1 %
const DEFAULT_COMMISSION_RATE: &str = "0.001";
const REWARD_WALLET: &str = "orai16stq6f4pnrfpz75n9ujv6qg3czcfa4qyjux5en";

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
Expand All @@ -43,11 +42,13 @@ pub fn instantiate(
msg: InstantiateMsg,
) -> StdResult<Response> {
let creator = deps.api.addr_canonicalize(info.sender.as_str())?;
let default_reward_address = deps.api.addr_canonicalize(REWARD_WALLET)?;
let config = ContractInfo {
name: msg.name.unwrap_or(CONTRACT_NAME.to_string()),
version: msg.version.unwrap_or(CONTRACT_VERSION.to_string()),

operator: match msg.operator {
Some(addr) => Some(deps.api.addr_canonicalize(&addr)?),
None => None,
},
// admin should be multisig
admin: if let Some(admin) = msg.admin {
deps.api.addr_canonicalize(admin.as_str())?
Expand All @@ -57,11 +58,7 @@ pub fn instantiate(
commission_rate: msg
.commission_rate
.unwrap_or(DEFAULT_COMMISSION_RATE.to_string()),
reward_address: if let Some(reward_address) = msg.reward_address {
deps.api.addr_canonicalize(reward_address.as_str())?
} else {
default_reward_address
},
reward_address: deps.api.addr_canonicalize(msg.reward_address.as_str())?,
};

store_config(deps.storage, &config)?;
Expand All @@ -81,6 +78,7 @@ pub fn execute(
match msg {
ExecuteMsg::Receive(msg) => receive_cw20(deps, env, info, msg),
ExecuteMsg::UpdateAdmin { admin } => execute_update_admin(deps, info, admin),
ExecuteMsg::UpdateOperator { operator } => execute_update_operator(deps, info, operator),
ExecuteMsg::UpdateConfig {
reward_address,
commission_rate,
Expand All @@ -105,7 +103,7 @@ pub fn execute(
} => {
validate_admin(
deps.api,
read_config(deps.storage)?.admin,
&read_config(deps.storage)?.admin,
info.sender.as_str(),
)?;
let pair_key = pair_key(&[
Expand Down Expand Up @@ -246,7 +244,7 @@ pub fn execute(
ExecuteMsg::RemoveOrderBookPair { asset_infos } => remove_pair(deps, info, asset_infos),
ExecuteMsg::WithdrawToken { asset } => {
let contract_info = read_config(deps.storage)?;
validate_admin(deps.api, contract_info.admin.clone(), info.sender.as_str())?;
validate_admin(deps.api, &contract_info.admin, info.sender.as_str())?;
let msg = asset.into_msg(
None,
&deps.querier,
Expand All @@ -266,7 +264,7 @@ pub fn execute_update_admin(
admin: Addr,
) -> Result<Response, ContractError> {
let mut contract_info = read_config(deps.storage)?;
validate_admin(deps.api, contract_info.admin, info.sender.as_str())?;
validate_admin(deps.api, &contract_info.admin, info.sender.as_str())?;

// update new admin
contract_info.admin = deps.api.addr_canonicalize(admin.as_str())?;
Expand All @@ -275,6 +273,25 @@ pub fn execute_update_admin(
Ok(Response::new().add_attributes(vec![("action", "execute_update_admin")]))
}

pub fn execute_update_operator(
deps: DepsMut,
info: MessageInfo,
operator: Option<String>,
) -> Result<Response, ContractError> {
let mut contract_info = read_config(deps.storage)?;
validate_admin(deps.api, &contract_info.admin, info.sender.as_str())?;

// if None then no operator to receive reward
contract_info.operator = match operator {
Some(addr) => Some(deps.api.addr_canonicalize(&addr)?),
None => None,
};

store_config(deps.storage, &contract_info)?;

Ok(Response::new().add_attributes(vec![("action", "execute_update_operator")]))
}

pub fn execute_update_config(
deps: DepsMut,
info: MessageInfo,
Expand Down Expand Up @@ -592,6 +609,7 @@ pub fn query_contract_info(deps: Deps) -> StdResult<ContractInfoResponse> {
}

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn migrate(_deps: DepsMut, _env: Env, _msg: MigrateMsg) -> StdResult<Response> {
pub fn migrate(deps: DepsMut, _env: Env, msg: MigrateMsg) -> StdResult<Response> {
store_config(deps.storage, &msg.new_config)?;
Ok(Response::default())
}
6 changes: 5 additions & 1 deletion contracts/oraiswap_limit_order/src/order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,11 @@ pub fn execute_matching_orders(
let contract_info = read_config(deps.storage)?;
let commission_rate = Decimal::from_str(&contract_info.commission_rate)?;

let relayer_addr = deps.api.addr_canonicalize(info.sender.as_str())?;
// get default operator to receive reward
let relayer_addr = match contract_info.operator {
Some(addr) => addr,
None => deps.api.addr_canonicalize(info.sender.as_str())?,
};
let pair_key = pair_key(&[
asset_infos[0].to_raw(deps.api)?,
asset_infos[1].to_raw(deps.api)?,
Expand Down
2 changes: 1 addition & 1 deletion contracts/oraiswap_limit_order/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ pub fn read_orders(
.collect()
}

pub fn validate_admin(api: &dyn Api, admin: CanonicalAddr, sender: &str) -> StdResult<()> {
pub fn validate_admin(api: &dyn Api, admin: &CanonicalAddr, sender: &str) -> StdResult<()> {
let sender_addr = api.addr_canonicalize(sender)?;
// check authorized
if admin.ne(&sender_addr) {
Expand Down
49 changes: 33 additions & 16 deletions contracts/oraiswap_limit_order/src/testing/contract_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ use crate::jsonstr;
use crate::order::{get_market_asset, get_paid_and_quote_assets};
use crate::orderbook::OrderBook;
const USDT_DENOM: &str = "usdt";
const REWARD_ADDR: &str = "orai16stq6f4pnrfpz75n9ujv6qg3czcfa4qyjux5en";

fn basic_fixture() -> (MockApp, Addr) {
let mut app = MockApp::new(&[
Expand Down Expand Up @@ -61,7 +62,8 @@ fn basic_fixture() -> (MockApp, Addr) {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -634,7 +636,8 @@ fn submit_order() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -1193,7 +1196,8 @@ fn submit_order_with_spread_native_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -1546,7 +1550,8 @@ fn submit_order_with_spread_cw20_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -2261,7 +2266,8 @@ fn submit_market_order_native_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -2554,7 +2560,8 @@ fn submit_market_order_cw20_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -2867,7 +2874,8 @@ fn cancel_order_native_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -3205,7 +3213,8 @@ fn cancel_order_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -3522,7 +3531,8 @@ fn execute_pair_native_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -4753,7 +4763,8 @@ fn execute_pair_cw20_token() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -5933,7 +5944,8 @@ fn spread_test() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -6398,7 +6410,8 @@ fn simple_matching_test() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -6720,7 +6733,8 @@ fn reward_to_executor_test() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -7030,7 +7044,8 @@ fn mock_basic_query_data() -> (MockApp, Addr) {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down Expand Up @@ -7306,7 +7321,8 @@ fn remove_orderbook_pair() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};

let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
Expand Down Expand Up @@ -7634,7 +7650,8 @@ fn orders_querier() {
version: None,
admin: None,
commission_rate: None,
reward_address: None,
operator: None,
reward_address: REWARD_ADDR.to_string(),
};
let code_id = app.upload(Box::new(create_entry_points_testing!(crate)));
let limit_order_addr = app
Expand Down
14 changes: 11 additions & 3 deletions packages/oraiswap/src/limit_order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ pub struct ContractInfo {
pub admin: CanonicalAddr,
pub commission_rate: String,
pub reward_address: CanonicalAddr,
pub operator: Option<CanonicalAddr>,
}

#[cw_serde]
Expand Down Expand Up @@ -58,9 +59,10 @@ impl Default for OrderDirection {
pub struct InstantiateMsg {
pub name: Option<String>,
pub version: Option<String>,
pub admin: Option<Addr>,
pub admin: Option<String>,
pub commission_rate: Option<String>,
pub reward_address: Option<Addr>,
pub reward_address: String,
pub operator: Option<String>,
}

#[cw_serde]
Expand All @@ -76,6 +78,10 @@ pub enum ExecuteMsg {
commission_rate: Option<String>,
},

UpdateOperator {
operator: Option<String>,
},

CreateOrderBookPair {
base_coin_info: AssetInfo,
quote_coin_info: AssetInfo,
Expand Down Expand Up @@ -279,4 +285,6 @@ pub struct BaseAmountResponse {

/// We currently take no arguments for migrations
#[cw_serde]
pub struct MigrateMsg {}
pub struct MigrateMsg {
pub new_config: ContractInfo,
}
4 changes: 2 additions & 2 deletions packages/oraiswap/src/staking.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use cosmwasm_schema::{cw_serde, QueryResponses};

use crate::asset::{Asset, AssetInfo};
use cosmwasm_std::{Addr, Binary, Decimal, Uint128};
use cosmwasm_std::{Addr, Decimal, Uint128};
use cw20::Cw20ReceiveMsg;

#[cw_serde]
Expand Down Expand Up @@ -119,7 +119,7 @@ pub enum QueryMsg {
},
#[returns(Vec<QueryPoolInfoResponse>)]
GetPoolsInformation {},
#[returns(Binary)]
#[returns(cosmwasm_std::Binary)]
QueryOldStore { store_type: OldStoreType },
}

Expand Down