diff --git a/demo.log b/demo.log new file mode 100644 index 0000000..4b15ae5 --- /dev/null +++ b/demo.log @@ -0,0 +1,13 @@ +AT Teppy +AT Luni +AT Hamza +AA USD +AA BTC +SR 1 51EB851 28F5C28 33333333 28F5C28 +AF 1 1 500000000 +AF 2 0 3D09000000000 +AF 3 0 3D09000000000 +SR 0 28F5C28 0 19999999 28F5C28 +OR 1 1 100000000 0 C35000000000 +OR 2 0 9C4000000000 1 100000000 +OR 3 0 753000000000 1 80000000 diff --git a/demo_orders.log b/demo_orders.log new file mode 100644 index 0000000..b19c47c --- /dev/null +++ b/demo_orders.log @@ -0,0 +1,4 @@ +OR 0 1 100000000 0 C35000000000 +OR 1 1 100000000 0 C35000000000 +OR 2 0 9C4000000000 1 100000000 +OR 3 0 753000000000 1 80000000 diff --git a/demox.log b/demox.log new file mode 100644 index 0000000..3d979bf --- /dev/null +++ b/demox.log @@ -0,0 +1,11 @@ +AT Teppy +AT Luni +AT Hamza +AA USD +AA BTC +SR 1 51EB851 28F5C28 33333333 19999999 +AF 1 1 500000000 +AF 2 0 3D09000000000 +AF 3 0 3D09000000000 +SR 0 51EB851 28F5C28 33333333 19999999 +OR 1 1 100000000 0 C35000000000 diff --git a/royalty1.log b/royalty1.log index 7092d47..f9e48e6 100644 --- a/royalty1.log +++ b/royalty1.log @@ -1,8 +1,10 @@ -OR 3 0 1FE3FBAD19 1 27E6390B60 -OR 1 1 36D7DEE73 0 257D2AD487 -OR 1 0 D06BEB6BD 1 DDD310931 -AF 1 0 19062A3F90 -AF 1 0 1FFCFCEF35 -AF 1 0 1BED05581E -OR 3 1 98F9EFF44 0 266AA46814 -OR 1 0 1A10091947 1 273A6E40B5 +AT Teppy +AT Luni +AT Hamza +AA USD +AA BTC +SR 1 51EB851 28F5C28 33333333 28F5C28 +AF 1 1 500000000 +AF 2 0 3D09000000000 +AF 3 0 3D09000000000 +SR 0 28F5C28 0 19999999 28F5C28 diff --git a/royalty2.log b/royalty2.log index 16f8680..e69de29 100644 --- a/royalty2.log +++ b/royalty2.log @@ -1,15 +0,0 @@ -NOP Error: adduser -AT Teppy -AT Luni -AT Hamza -AA USD -AA BTC -SR 0 20000000 0 0 0 -OR 3 0 1FE3FBAD19 1 27E6390B60 -OR 1 1 36D7DEE73 0 257D2AD487 -OR 1 0 D06BEB6BD 1 DDD310931 -AF 1 0 19062A3F90 -AF 1 0 1FFCFCEF35 -AF 1 0 1BED05581E -OR 3 1 98F9EFF44 0 266AA46814 -OR 1 0 1A10091947 1 273A6E40B5 diff --git a/src/main.rs b/src/main.rs index 58b375b..2bbd0c0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -454,9 +454,11 @@ impl Market { } fn dump(&mut self) { println!("Dumping Market:"); - println!("Money Supply:"); + println!("Asset MoneySupply Royalty% Commission%"); for index in 0..self.assets.len() { - println!(" {}: {}",self.number_to_asset(index).name,self.money_supply[&index]); + let ass=self.number_to_asset(index); + let aname=self.money_supply[&index].to_string(); + println!(" {:<3}{:>16} {}/{} {}/{}",ass.name,aname,ass.royalty0_rate.fmt_pct2(),ass.royalty1_rate.fmt_pct2(),ass.commission0_rate.fmt_pct2(),ass.commission1_rate.fmt_pct2()); } for (ap,pq) in &self.orders { println!("Orders selling {} to buy {}:",self.number_to_name(ap.0),self.number_to_name(ap.1)); @@ -474,12 +476,14 @@ impl Market { royalty_amt); } } - println!("Royalties accumulated but not captured:"); + println!("Royalty Accum SpareChange"); for index in 0..self.assets.len() { self.royalties.entry(index).or_insert(RoyaltyTree::new()); - let tot=self.royalties.get(&index).unwrap().acc_total(); - println!(" For {}: {}",self.number_to_asset(index).name,tot); + let name=self.number_to_asset(index).name; let rt=self.royalties.get_mut(&index).unwrap(); + let sc=rt.spare_change; + let tot=rt.acc_total(); + println!(" {:<3} {} {}",name,tot,sc); for indexr in 0..rt.tree.len() { let royalty_amt=rt.get_royalty(indexr); let r=&rt.tree[indexr]; @@ -492,7 +496,7 @@ impl Market { println!(" Index {} Weight {} Royalty {} OrderID {}",indexr,r.weight,royalty_amt,r.order_id); } } - for (k,v) in &rt.order_finder { println!(" Order ID {} at position {}",k,v); } +// Heavy Debug for (k,v) in &rt.order_finder { println!(" Order ID {} at position {}",k,v); } } println!("Trader Balances:"); for t in &self.traders { @@ -545,7 +549,7 @@ impl Market { Result::ExecutedBatch(log) } */ - fn retract_order(&mut self, order_id:usize) -> Result { + fn retract_order(&mut self, order_id:usize) -> Result { // Still need to credit back funds! But first fix the bug where we are creating commission0 from thin air in make_order (not charging seller) let pair=self.order_finder.get(&order_id).unwrap(); let queue=self.orders.get_mut(pair).unwrap(); let queue_index=*queue.order_finder.get(&order_id).unwrap(); @@ -633,7 +637,8 @@ impl Market { self.next_order_id+=1; // Pay royalties to existing orders on the sell size - self.royalties.entry(sell_type).or_insert(RoyaltyTree::new()).add_royalty(royalty0_qty); + self.royalties.entry(sell_type).or_insert(RoyaltyTree::new()).add_royalty(royalty0_qty+royalty1_qty); + royalty_acc+=royalty0_qty+royalty1_qty; // Create a new entry in the RoyaltyTree to accumulate for this Order let rt=self.royalties.entry(buy_type).or_insert(RoyaltyTree::new()); @@ -647,7 +652,7 @@ impl Market { self.order_count+=1; self.order_finder.insert(id,(sell_type,buy_type)); self.traders[owner].sub_balance(sell_type,sell_qty_remain); - self.traders[0].add_balance(sell_type,commission0_qty); + commission_acc+=commission0_qty+commission1_qty; self.traders[owner].order_finder.insert(id,(sell_type,buy_type)); log.push(format!("Moved {} {} ({}) to market",sell_qty_remain,self.number_to_name(sell_type),self.traders[owner].name)); } @@ -1156,7 +1161,7 @@ fn interactive(m: &mut Market, mut out: Option) { Ok(input) => { let tokens: Vec<&str> = input.split_whitespace().collect(); let cmd:Command=match tokens.as_slice() { - ["dump"] => { m.dump(); Command::None }, + ["dump"] => { m.dump(); m.sanity_check(); Command::None }, ["randomorder"] => { println!("Random OrderID: {:?}",m.random_order_id()); Command::None } ["login", username] => { if let Some(t)=m.trader_name2num.get_mut(*username) { trader=*t; println!("Logged in as {}",m.traders[trader].name) } else { println!("Trader {} not found.",username) }