# ats-smart-contract NOTES ``` #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] pub struct InstantiateMsg { pub name: String, // Some name (display) pub bind_name: String, // name bound on chain, used similar to DNS to resolve contract address with human readable name (Example: orderbook1.orderbook.pb) pub base_denom: String, // REQUIRED: Underlying token to buy (think of a security, like a stock) pub convertible_base_denoms: Vec<String>, // token with 1:1 exchange rate to the base denom // Think of a STOCK OPTION and its relationship to a STOCK when thinking of a CONVERTIBLE_BASE_DENOM and its relationship to the BASE_DENOM pub supported_quote_denoms: Vec<String>, // REQUIRED: Token used for pricing (think of stablecoins) pub approvers: Vec<String>, // Blockchain addresses allowed to approve orders (SEC regulation required) // Used to approve convertible_base_denom ask orders (since the convertible_base_denom needs to be converted into the base_denom) // NOTE: // - When an approver calls "approve_ask", // the contract will swap the convertible_base_denom tokens with the same quantity of base_denom coins in the ask order in the contract // - Once approved + swapped, a match can be executed pub executors: Vec<String>, // Blockchain addresses used to manage orders (match + reject + expire) // Fees collected are held in the smart contract until the account makes a request to redeem fees pub ask_fee_rate: Option<String>, // Fee percentage taken from ask orders (in the form of quote denom - gets withheld on match) pub ask_fee_account: Option<String>, // Blockchain address that can redeem the ask fees pub bid_fee_rate: Option<String>, // Fee percentage taken from bid orders (in the form of quote denom - gets withheld on match, but passed in request) pub bid_fee_account: Option<String>, // Blockchain address that can redeem the bid fees pub ask_required_attributes: Vec<String>, // List of attributes required on a blockchain account to create ask orders pub bid_required_attributes: Vec<String>, // List of attributes required on a blockchain account to create bid orders pub price_precision: Uint128, // Used for some math validation on the price doesnt result in loss during price calculations with size_increment // 10 ^ price_precision pub size_increment: Uint128, // Multiple of the base_denom that can be traded // size_increment == 1, then you can trade 1, 2, 3.. etc of the base denom // size_increment == 100, then you can only trade 100, 200, 300, etc. of the base denom // price_precision and size_increment: // if (msg.size_increment.u128() % 10u128.pow(msg.price_precision.u128() as u32)).ne(&0) { // return Err(InvalidPricePrecisionSizePair); // } // size_increment has to be a multiple of price_precision } ```