Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e4908f5f19 | |||
| c8732cb2b0 | |||
| 68d6b3d409 | |||
| 1a958ec8df | |||
| 771d18aeaa | |||
| d4cbf229a6 | |||
| 4a334d4f66 | |||
| 8fa172da17 | |||
| 2153a6ce96 | |||
| 76a4610903 |
0
.gitignore~
Normal file
0
.gitignore~
Normal file
49
Cargo.lock
generated
49
Cargo.lock
generated
@@ -2,24 +2,6 @@
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "ahash"
|
||||
version = "0.8.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"once_cell",
|
||||
"version_check",
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.5.0"
|
||||
@@ -43,16 +25,6 @@ dependencies = [
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"allocator-api2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.169"
|
||||
@@ -63,16 +35,9 @@ checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
|
||||
name = "lzf1"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"hashbrown",
|
||||
"rand",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.20.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.20"
|
||||
@@ -84,9 +49,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.92"
|
||||
version = "1.0.93"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
|
||||
checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@@ -132,9 +97,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.93"
|
||||
version = "2.0.96"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c786062daee0d6db1132800e623df74274a0a87322d8e183338e01b3d98d058"
|
||||
checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -147,12 +112,6 @@ version = "1.0.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.0+wasi-snapshot-preview1"
|
||||
|
||||
@@ -14,5 +14,4 @@ debug = true
|
||||
|
||||
[dependencies]
|
||||
rand="0.8.5"
|
||||
hashbrown="0.14.5"
|
||||
|
||||
|
||||
13
batchtrades.log
Normal file
13
batchtrades.log
Normal file
@@ -0,0 +1,13 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
AF 1 0 186A000000000
|
||||
AF 1 0 186A000000000
|
||||
AF 2 1 600000000
|
||||
OR 2 1 200000000 0 186A000000000
|
||||
OR 2 1 200000000 0 1D4C000000000
|
||||
OR 2 1 200000000 0 30D4000000000
|
||||
ORB 1 0 2F9B800000000 1 300000000
|
||||
EXE 0 2848800000000 1 300000000
|
||||
18
demo.bak
Normal file
18
demo.bak
Normal file
@@ -0,0 +1,18 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AT UncleSam
|
||||
NOP Error: Could not find asset BTC
|
||||
NOP Error: Could not find asset ETH
|
||||
AA USD
|
||||
AA BTC
|
||||
AA ETH
|
||||
AA SOL
|
||||
AF 1 1 A00000000
|
||||
AF 2 2 3200000000
|
||||
AF 3 3 FA00000000
|
||||
AF 4 0 F424000000000
|
||||
OR 1 1 100000000 2 400000000
|
||||
OR 2 2 100000000 3 400000000
|
||||
OR 3 3 100000000 0 FA00000000
|
||||
OR 1 1 100000000 3 1900000000
|
||||
33
demo.log
33
demo.log
@@ -1,15 +1,18 @@
|
||||
AT Teppy ; addtrader Teppy
|
||||
AT Luni ; addtrader Luni
|
||||
AT Hamza ; addtrader Hamza
|
||||
AA USD ; addasset USD
|
||||
AA BTC ; addasset BTC
|
||||
SR 0 51EB851 28F5C28 7AE147A 28F5C28 ; setroyalty USD 0.02 0.01 0.03 0.01
|
||||
SR 1 51EB851 28F5C28 7AE147A 28F5C28 ; setroyalty BTC 0.02 0.01 0.03 0.01
|
||||
AF 1 1 500000000 ; addfunds Teppy 5 BTC
|
||||
AF 2 0 186A000000000 ; addfunds Luni 100000 USD
|
||||
AF 3 0 186A000000000 ; addfunds Hamza 100000 USD
|
||||
OR 1 1 200000000 0 186A000000000 ; [login Teppy] order 2 BTC 100000 USD
|
||||
OR 2 0 753000000000 1 80000000 ; [login Luni] order 30000 USD 0.5 BTC
|
||||
OR 2 0 4E2000000000 1 80000000 ; [login Luni] order 20000 USD 0.5 BTC
|
||||
OR 2 0 55F000000000 1 80000000
|
||||
OR 2 1 40000000 0 35B600000000
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AT UncleSam
|
||||
NOP Error: Could not find asset BTC
|
||||
NOP Error: Could not find asset ETH
|
||||
AA USD
|
||||
AA BTC
|
||||
AA ETH
|
||||
AA SOL
|
||||
AF 1 1 A00000000
|
||||
AF 2 2 3200000000
|
||||
AF 3 3 FA00000000
|
||||
AF 4 0 F424000000000
|
||||
OR 1 1 100000000 2 400000000
|
||||
OR 2 2 100000000 3 400000000
|
||||
OR 3 3 100000000 0 FA00000000
|
||||
OR 1 1 100000000 3 1900000000
|
||||
|
||||
14
demo.log~
Normal file
14
demo.log~
Normal file
@@ -0,0 +1,14 @@
|
||||
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 0 1 100000000 0 C35000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
OR 2 0 9C4000000000 1 100000000
|
||||
OR 3 0 753000000000 1 80000000
|
||||
10
demo1.log
10
demo1.log
@@ -1,11 +1,7 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 0 0 0
|
||||
SR 1 51EB851 0 0 0
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
NOP Error: Could not parse quantity USD
|
||||
AF 1 0 3E800000000
|
||||
AF 2 1 6400000000
|
||||
|
||||
11
demo1.log~
Normal file
11
demo1.log~
Normal file
@@ -0,0 +1,11 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 0 28F5C28 0 0
|
||||
SR 1 0 28F5C28 0 0
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
23
demo13.log~
Normal file
23
demo13.log~
Normal file
@@ -0,0 +1,23 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 28F5C28 33333333 19999999
|
||||
SR 1 51EB851 28F5C28 33333333 19999999
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
AF 2 1 14F0117759
|
||||
AF 1 1 1D1E0D15FF
|
||||
AF 2 1 70D4B3855
|
||||
OR 2 0 22E869AB9A 1 2327CD75D7
|
||||
AF 2 1 12F54589D1
|
||||
AF 1 0 16EC0573FE
|
||||
AF 3 1 1DBA3B2F64
|
||||
AF 1 0 22A45121F2
|
||||
AF 3 0 BDB8CCB60
|
||||
OR 2 0 21CDCD2B81 1 2407EB5978
|
||||
AF 3 1 24E1249869
|
||||
OR 3 0 231B497C77 1 7C6A3D844
|
||||
OR 1 1 161753A88E 0 21069FA53A
|
||||
10
demo13x.log~
Normal file
10
demo13x.log~
Normal file
@@ -0,0 +1,10 @@
|
||||
AT Teppy
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 0 0 0 33333333
|
||||
SR 1 0 0 0 33333333
|
||||
AF 1 1 2800000000
|
||||
AF 2 0 3D09000000000
|
||||
OR 2 0 1E00000000 1 100000000
|
||||
OR 1 1 100000000 0 1900000000
|
||||
11
demo4.log~
Normal file
11
demo4.log~
Normal file
@@ -0,0 +1,11 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 28F5C28 33333333 19999999
|
||||
SR 1 51EB851 28F5C28 33333333 19999999
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
21
demox.log
21
demox.log
@@ -1,11 +1,10 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 28F5C28 33333333 19999999
|
||||
SR 1 51EB851 28F5C28 33333333 19999999
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
AT Teppy ; addtrader Teppy
|
||||
AT Luni ; addtrader Luni
|
||||
AT Hamza ; addtrader Hamza
|
||||
AA USD ; addasset USD
|
||||
AA BTC ; addasset BTC
|
||||
SR 0 51EB851 28F5C28 7AE147A 28F5C28 ; setroyalty USD 0.02 0.01 0.03 0.01
|
||||
SR 1 51EB851 28F5C28 7AE147A 28F5C28 ; setroyalty BTC 0.02 0.01 0.03 0.01
|
||||
AF 1 1 500000000 ; addfunds Teppy 5 BTC
|
||||
AF 2 0 186A000000000 ; addfunds Luni 100000 USD
|
||||
AF 3 0 186A000000000 ; addfunds Hamza 100000 USD
|
||||
|
||||
13
demox.log~
Normal file
13
demox.log~
Normal file
@@ -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
|
||||
11
demoy.log~
Normal file
11
demoy.log~
Normal file
@@ -0,0 +1,11 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 28F5C28 33333333 19999999
|
||||
SR 1 51EB851 28F5C28 33333333 19999999
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
OR 1 1 100000000 0 C35000000000
|
||||
11
demoz.log~
Normal file
11
demoz.log~
Normal file
@@ -0,0 +1,11 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 51EB851 28F5C28 33333333 19999999
|
||||
SR 1 51EB851 28F5C28 33333333 19999999
|
||||
AF 1 1 500000000
|
||||
AF 2 0 3D09000000000
|
||||
AF 3 0 3D09000000000
|
||||
|
||||
491
flamegraph.svg
Normal file
491
flamegraph.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 26 KiB |
18
logs/demo.log
Normal file
18
logs/demo.log
Normal file
@@ -0,0 +1,18 @@
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AT UncleSam
|
||||
NOP Error: Could not find asset BTC
|
||||
NOP Error: Could not find asset ETH
|
||||
AA USD
|
||||
AA BTC
|
||||
AA ETH
|
||||
AA SOL
|
||||
AF 1 1 A00000000
|
||||
AF 2 2 3200000000
|
||||
AF 3 3 FA00000000
|
||||
AF 4 0 F424000000000
|
||||
OR 1 1 100000000 2 400000000
|
||||
OR 2 2 100000000 3 400000000
|
||||
OR 3 3 100000000 0 FA00000000
|
||||
OR 1 1 100000000 3 1900000000
|
||||
BIN
perf.data.old
Normal file
BIN
perf.data.old
Normal file
Binary file not shown.
12
royalty0.log~
Normal file
12
royalty0.log~
Normal file
@@ -0,0 +1,12 @@
|
||||
NOP Error: adduser
|
||||
AT Teppy
|
||||
AT Luni
|
||||
AT Hamza
|
||||
AA USD
|
||||
AA BTC
|
||||
SR 0 19999999 0 0 0
|
||||
AF 2 1 300000000
|
||||
AF 1 0 186A000000000
|
||||
OR 2 1 100000000 0 C35000000000
|
||||
OR 2 1 100000000 0 EA6000000000
|
||||
OR 1 0 1117000000000 1 80000000
|
||||
1598
src/#main.rs#
Normal file
1598
src/#main.rs#
Normal file
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,9 @@ impl FiNum {
|
||||
pub fn one() -> Self {
|
||||
FiNum(1u64<<32)
|
||||
}
|
||||
pub fn infinity() -> Self {
|
||||
FiNum(u64::MAX)
|
||||
}
|
||||
pub fn is_tiny(self) -> bool {
|
||||
self.0>0u64 && self.0<=1u64
|
||||
}
|
||||
|
||||
270
src/main.rs
270
src/main.rs
@@ -36,6 +36,13 @@
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Thoughts on cheapest-path algorithm:
|
||||
// Create a square matrix of costs from each asset to each asset. Some of the entries will be infinity. The goal is to lower the entries.
|
||||
// In each cell, store not just the cost, but the path and path capacity.
|
||||
// Starting with the source asset, see if visiting each other asset lowers the cost to get there. If it does, replace that asset's cost with the new cost and path.
|
||||
//
|
||||
|
||||
|
||||
#![allow(unsafe_code)]
|
||||
#![allow(unused_variables)]
|
||||
@@ -47,7 +54,9 @@ use std::path::Path;
|
||||
use std::io::{self, BufRead, Write};
|
||||
use std::env;
|
||||
use std::collections::HashMap;
|
||||
use std::collections::HashSet;
|
||||
use std::cmp::Ordering;
|
||||
use std::cmp::min;
|
||||
use rand::prelude::*;
|
||||
use rand::rngs::StdRng;
|
||||
use std::time::Instant;
|
||||
@@ -248,11 +257,16 @@ impl RoyaltyTree {
|
||||
}
|
||||
}
|
||||
// We really need two methods: remove an order and redistribute, remove some and return captured amount
|
||||
fn remove_order_id(&mut self, id: usize) { // And zero out in the tree
|
||||
fn remove_order_id(&mut self, id: usize) -> FiNum { // And zero out in the tree
|
||||
if let Some(pos)=self.order_finder.remove(&id) {
|
||||
self.capture0(pos);
|
||||
let weight=self.weight_here(pos);
|
||||
self.sub_weight(pos,weight);
|
||||
let rval=self.tree[pos].acc;
|
||||
self.tree[pos].acc=FiNum::zero();
|
||||
rval
|
||||
}
|
||||
else { FiNum::zero() }
|
||||
}
|
||||
fn random_order_id(&self, rng: &mut rand::rngs::StdRng) -> Option<usize> {
|
||||
if self.tree.len()==0 { return None }
|
||||
@@ -270,16 +284,25 @@ impl RoyaltyTree {
|
||||
}
|
||||
None
|
||||
}
|
||||
fn capture_partial(&mut self, id: usize, weight: FiNum) -> FiNum {
|
||||
FiNum::zero()
|
||||
fn capture_by_order_id(&mut self, order_id: usize) -> FiNum {
|
||||
if let Some(&index)=self.order_finder.get(&order_id) {
|
||||
self.capture0(index);
|
||||
let rval=self.tree[index].acc;
|
||||
self.tree[index].acc=FiNum::zero();
|
||||
rval
|
||||
} else { FiNum::zero() }
|
||||
}
|
||||
fn sub_weight(&mut self, index: usize, mut weight: FiNum) {
|
||||
self.get_royalty(index);
|
||||
let delta_count;
|
||||
let wh=self.weight_here(index);
|
||||
let redist=if weight>=wh { delta_count=if wh>FiNum::zero() { 1 } else { 0 }; weight=wh; self.tree[index].acc }
|
||||
else { delta_count=0; self.tree[index].acc*weight/wh };
|
||||
self.tree[index].acc-=redist;
|
||||
if weight>=wh {
|
||||
delta_count=if wh>FiNum::zero() { 1 } else { 0 };
|
||||
weight=wh;
|
||||
}
|
||||
else {
|
||||
delta_count=0;
|
||||
}
|
||||
let mut index=index;
|
||||
let ff=self.forefather();
|
||||
loop {
|
||||
@@ -288,7 +311,6 @@ impl RoyaltyTree {
|
||||
if index==ff { break; }
|
||||
index=wt_parent(index);
|
||||
}
|
||||
self.add_royalty(redist);
|
||||
}
|
||||
fn set_location(&mut self, id: usize, index: usize) {
|
||||
self.tree[index].order_id=id;
|
||||
@@ -349,7 +371,7 @@ impl Dumpable for usize {
|
||||
|
||||
impl Dumpable for Order {
|
||||
fn dump(&self) {
|
||||
println!("Giving {}/{} to get {}",self.sell_remain,self.sell_qty,self.buy_qty);
|
||||
println!("Giving {}/{} ({} each) to get {}",self.sell_remain,self.sell_qty,self.buy_qty/self.sell_qty,self.buy_qty);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,6 +383,7 @@ struct Market {
|
||||
traders: Vec<Trader>,
|
||||
trader_name2num: HashMap<String,usize>,
|
||||
orders: HashMap<(usize,usize),OrderQueue>,
|
||||
shadows: HashSet<(usize,usize)>,
|
||||
royalties: HashMap<usize,RoyaltyTree>, // Active orders that are accepting asset X. They receive royalties when someone makes an order to sell X
|
||||
royalty_rate: HashMap<usize,FiNum>,
|
||||
order_finder: HashMap<usize,(usize,usize)>, // Maps Order ID to an asset pair (in other systems, a "market.") From there you can look in self.orders.get((usize,usize)) which is an OrderQueue, and OrderQueues have a mapping from ID to position in the OrderQueue
|
||||
@@ -378,6 +401,7 @@ impl Market {
|
||||
traders: Vec::new(),
|
||||
trader_name2num: HashMap::new(),
|
||||
orders: HashMap::new(),
|
||||
shadows: HashSet::new(),
|
||||
royalties: HashMap::new(),
|
||||
royalty_rate: HashMap::new(),
|
||||
order_finder: HashMap::new(),
|
||||
@@ -552,6 +576,8 @@ impl Market {
|
||||
let ap0=(asset_type0,asset_type1);
|
||||
let ap1=(asset_type1,asset_type0);
|
||||
let [bids0,bids1]=self.orders.get_many_mut([&ap0, &ap1]).unwrap(); // There's a workaround for this where you remove and reinsert the keys.
|
||||
let bids0p=bids0.peek();
|
||||
let bids1p=bids1.peek();
|
||||
while !bids0.empty() && !bids1.empty()
|
||||
&& bids0.peek().sell_qty/bids0.peek().buy_qty>=strike0/strike1
|
||||
&& bids1.peek().sell_qty/bids1.peek().buy_qty>=strike1/strike0 {
|
||||
@@ -574,6 +600,7 @@ impl Market {
|
||||
fn retract_order(&mut self, order_id:usize) -> Result { // Still need to credit back funds!
|
||||
let pair=self.order_finder.get(&order_id).unwrap();
|
||||
let sell_type=pair.0;
|
||||
let buy_type=pair.1;
|
||||
let queue=self.orders.get_mut(pair).unwrap();
|
||||
let queue_index=*queue.order_finder.get(&order_id).unwrap();
|
||||
let order=&queue.v[queue_index];
|
||||
@@ -582,7 +609,8 @@ impl Market {
|
||||
println!("Order owner is {}",order.owner);
|
||||
// Remove from royalties
|
||||
let rt=self.royalties.get_mut(&pair.0).unwrap();
|
||||
rt.remove_order_id(order_id);
|
||||
let dist=rt.remove_order_id(order_id);
|
||||
self.traders[order.owner].add_balance(buy_type,dist);
|
||||
// Remove from order_finder
|
||||
self.order_finder.remove(&order_id);
|
||||
// Remove from orders
|
||||
@@ -621,10 +649,21 @@ impl Market {
|
||||
let cq0=commission0_qty*pay_qty/sell_qty_initial;
|
||||
let rq1=royalty1_qty *pay_qty/sell_qty_initial;
|
||||
let cq1=commission1_qty*pay_qty/sell_qty_initial;
|
||||
//println!("Transact at ask rate. Qty={} elt.sell_remain={} elt.royalty_remain={} elt.commission_remain={}",qty,elt.sell_remain,elt.royalty_remain,elt.commission_remain);
|
||||
let rq2=if !elt.sell_remain.is_zero() { elt.royalty_remain *qty/elt.sell_remain } else { FiNum::zero() };
|
||||
let cq2=if !elt.sell_remain.is_zero() { elt.commission_remain*qty/elt.sell_remain } else { FiNum::zero() };
|
||||
//elt.sell_remain-=qty;
|
||||
self.royalties.entry(sell_type).or_insert(RoyaltyTree::new());
|
||||
self.royalties.entry(buy_type) .or_insert(RoyaltyTree::new());
|
||||
let rtb=self.royalties.entry(buy_type) .or_insert(RoyaltyTree::new());
|
||||
let rts=self.royalties.entry(sell_type).or_insert(RoyaltyTree::new());
|
||||
if let Some(&cap_index)=rts.order_finder.get(&elt.order_id) {
|
||||
let wh0=rts.weight_here(cap_index);
|
||||
let acc0=rts.tree[cap_index].acc;
|
||||
let cap=rts.capture_by_order_id(elt.owner);
|
||||
rts.sub_weight(cap_index,pay_qty);
|
||||
let wh1=rts.weight_here(cap_index);
|
||||
let acc1=rts.tree[cap_index].acc;
|
||||
self.traders[elt.owner].add_balance(sell_type,cap);
|
||||
}
|
||||
royalty_acc+=rq0+rq1;
|
||||
commission_acc+=cq0+cq1;
|
||||
royalty0_qty-=rq0;
|
||||
@@ -634,17 +673,15 @@ impl Market {
|
||||
self.royalties.entry(sell_type).or_insert(RoyaltyTree::new()).add_royalty(rq0+rq1);
|
||||
self.royalties.entry(buy_type) .or_insert(RoyaltyTree::new()).add_royalty(rq2);
|
||||
let top_order=self.orders.get_mut(&ap).unwrap().peek();
|
||||
//println!("top_order.commission_remain={} cq2={} elt.commission_remain={} qty={} elt.sell_remain={}",top_order.commission_remain,cq2,elt.commission_remain,qty,elt.sell_remain);
|
||||
top_order.royalty_remain-=rq2;
|
||||
top_order.commission_remain-=cq2;
|
||||
//println!("Crediting {} commissions to house {}+{}+{}",sell_type,cq0,cq1,cq2);
|
||||
self.traders[0].add_balance(sell_type,cq0+cq1);
|
||||
self.traders[0].add_balance(buy_type,cq2);
|
||||
if elt.sell_remain==qty { // deal with pennies stored in royalty_remain and commission_remain
|
||||
//if !top_order.commission_remain.is_zero() { println!("Little commission? {} ",top_order.commission_remain); }
|
||||
let rq3=top_order.royalty_remain;
|
||||
let cq3=top_order.commission_remain;
|
||||
self.royalties.get_mut(&buy_type).unwrap().remove_order_id(top_order.order_id);
|
||||
let dist=self.royalties.get_mut(&buy_type).unwrap().remove_order_id(top_order.order_id);
|
||||
self.traders[elt.owner].add_balance(sell_type,dist);
|
||||
self.order_finder.remove(&top_order.order_id);
|
||||
self.traders[top_order.owner].order_finder.remove(&top_order.order_id);
|
||||
self.orders.get_mut(&ap).unwrap().pop(); // This removes id (which is stored as part of the Order) from self.order's finder
|
||||
@@ -697,7 +734,68 @@ impl Market {
|
||||
commission_acc,self.number_to_name(sell_type),self.traders[owner].name));
|
||||
Result::PlacedOrder(id,log)
|
||||
}
|
||||
fn path_cost(&self, src: usize, dest: usize, depth_left: usize) -> TradePath {
|
||||
let mut cheapest=vec![TradePath::new();self.assets.len()];
|
||||
cheapest[src].cost=FiNum::new_i32(1);
|
||||
cheapest[src].path[0]=src;
|
||||
cheapest[src].len=1;
|
||||
for i in 0..6 {
|
||||
let mut progress=false;
|
||||
for ass0 in 0..self.assets.len() {
|
||||
for ass1 in 0..self.assets.len() {
|
||||
if true || ass0!=ass1 {
|
||||
if let Some(topq)=self.orders.get(&(ass1,ass0)) {
|
||||
let top=topq.peek_nomut(); if true {
|
||||
println!("There is a direct path from {} to {} with a cost of {} {}",
|
||||
self.number_to_name(ass0),self.number_to_name(ass1),top.buy_qty/top.sell_qty,self.number_to_name(ass1));
|
||||
let candidate=cheapest[ass0].cost*top.buy_qty/top.sell_qty;
|
||||
if candidate<cheapest[ass1].cost {
|
||||
// Extend cheapest[ass1]
|
||||
println!("Extending Length {} {} because {} < {}",cheapest[ass0].len,self.number_to_name(ass1),candidate,cheapest[ass1].cost);
|
||||
cheapest[ass1]=cheapest[ass0];
|
||||
let ext=&mut cheapest[ass1];
|
||||
let arbitrage=ext.path.contains(&ass1);
|
||||
ext.path[ext.len]=ass1;
|
||||
ext.len+=1;
|
||||
ext.cost=candidate;
|
||||
ext.cap=min(ext.cap,ext.cost*top.sell_remain);
|
||||
progress=true;
|
||||
if arbitrage {
|
||||
ext.arbitrage=true;
|
||||
return ext.clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if !progress { println!("Definitely found the cheapest path."); break; }
|
||||
}
|
||||
for ass in 0..self.assets.len() { println!("Cheapest path from {} to {} is {}",self.number_to_name(src),self.number_to_name(ass),cheapest[ass].cost); }
|
||||
cheapest[dest].clone()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy,Clone)]
|
||||
struct TradePath {
|
||||
cost: FiNum,
|
||||
path: [ usize; 600],
|
||||
len: usize,
|
||||
cap: FiNum,
|
||||
arbitrage: bool,
|
||||
}
|
||||
|
||||
impl TradePath {
|
||||
fn new() -> Self { TradePath {
|
||||
cost: FiNum::infinity(),
|
||||
path: [0; 600],
|
||||
len: 0,
|
||||
cap: FiNum::infinity(),
|
||||
arbitrage: false,
|
||||
} }
|
||||
}
|
||||
|
||||
|
||||
impl PartialOrd for Order {
|
||||
fn partial_cmp(&self, other:&Self) -> Option<Ordering> {
|
||||
@@ -717,25 +815,88 @@ impl PartialEq for Order {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// If Some(shadow) then peek should return a reference to shadow, and pop should replace shadow with v[next[0]]
|
||||
//
|
||||
struct OrderQueue {
|
||||
v: Vec<Order>,
|
||||
shadowing: bool,
|
||||
shadow: Option<Order>,
|
||||
next: Vec<usize>, // A priority queue
|
||||
order_finder: HashMap<usize,usize>, // Maps OrderIDs to locations in v
|
||||
}
|
||||
|
||||
|
||||
impl OrderQueue {
|
||||
fn new()->Self {
|
||||
OrderQueue {
|
||||
v: Vec::new(),
|
||||
shadowing: false,
|
||||
shadow: None,
|
||||
next: Vec::new(),
|
||||
order_finder:HashMap::new(),
|
||||
}
|
||||
}
|
||||
fn assure_shadowing(&mut self) {
|
||||
if !self.shadowing {
|
||||
assert!(self.next.len()==0);
|
||||
self.shadowing=true;
|
||||
if self.v.len()>0 { self.shadow=Some(self.v[0].clone()); }
|
||||
else { self.shadow=None; }
|
||||
self.queue_shadow(0);
|
||||
}
|
||||
}
|
||||
fn stop_shadowing(&mut self) {
|
||||
if self.shadowing {
|
||||
self.next.clear();
|
||||
self.shadowing=false;
|
||||
self.shadow=None;
|
||||
self.next=Vec::new();
|
||||
}
|
||||
}
|
||||
fn queue_shadow(&mut self, parent: usize) {
|
||||
if parent*2+1<self.v.len() { self.next.push(parent*2+1); self.bubble_up_next(self.next.len()-1); }
|
||||
if parent*2+2<self.v.len() { self.next.push(parent*2+2); self.bubble_up_next(self.next.len()-1); }
|
||||
}
|
||||
fn peek(&mut self) -> &mut Order {
|
||||
self.v.first_mut().unwrap()
|
||||
if !self.shadowing { self.v.first_mut().unwrap() }
|
||||
else { self.shadow.as_mut().expect("Shadowing mismatch") }
|
||||
}
|
||||
fn peek_nomut(&self) -> &Order {
|
||||
if !self.shadowing { self.v.first().unwrap() }
|
||||
else { self.shadow.as_ref().expect("Shadowing mismatch") }
|
||||
}
|
||||
fn peekn(&self) -> Option<&Order> {
|
||||
match &self.shadow {
|
||||
Some(order) => Some(order),
|
||||
None => { self.v.first() }
|
||||
}
|
||||
}
|
||||
fn empty(&self) -> bool {
|
||||
self.v.len()==0
|
||||
}
|
||||
fn pop(&mut self) -> Option<Order> {
|
||||
if !self.shadowing { return self.remove(0); }
|
||||
let rval=self.shadow.clone();
|
||||
if self.next.len()==0 { self.shadow=None; }
|
||||
else {
|
||||
self.shadow=Some(self.v[self.next[0]].clone());
|
||||
self.queue_shadow(self.next[0]);
|
||||
if self.next.len()>1 { self.next[0]=self.next.pop().unwrap(); }
|
||||
else { self.next.pop(); }
|
||||
self.trickle_down_next(0);
|
||||
}
|
||||
rval
|
||||
}
|
||||
fn bubble_up_next(&mut self, pos: usize) {
|
||||
if pos>0 {
|
||||
let parent=(pos-1)/2;
|
||||
if self.v[self.next[parent]]<self.v[self.next[pos]] {
|
||||
self.next.swap(parent,pos);
|
||||
self.bubble_up_next(parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
fn bubble_up(&mut self, pos: usize) {
|
||||
if pos>0 {
|
||||
let parent=(pos-1)/2;
|
||||
@@ -765,16 +926,30 @@ impl OrderQueue {
|
||||
}
|
||||
}
|
||||
}
|
||||
fn trickle_down_next(&mut self, pos: usize) {
|
||||
let mut pivot=pos;
|
||||
let child0=pos*2+1;
|
||||
let child1=pos*2+2;
|
||||
if child0<self.next.len() {
|
||||
if self.v[self.next[pos]]<self.v[self.next[child0]] { pivot=child0; }
|
||||
if child1<self.next.len() {
|
||||
if self.v[self.next[pivot]]<self.v[self.next[child1]] { pivot=child1; }
|
||||
}
|
||||
if pivot!=pos {
|
||||
self.next.swap(pivot,pos);
|
||||
self.trickle_down_next(pivot);
|
||||
}
|
||||
}
|
||||
}
|
||||
fn insert(&mut self, item: Order) {
|
||||
assert!(!self.shadowing);
|
||||
let id=item.order_id;
|
||||
self.v.push(item);
|
||||
self.order_finder.insert(id,self.v.len()-1);
|
||||
self.bubble_up(self.v.len()-1);
|
||||
}
|
||||
fn pop(&mut self) -> Option<Order> {
|
||||
self.remove(0)
|
||||
}
|
||||
fn remove(&mut self, pos: usize) -> Option<Order> {
|
||||
assert!(!self.shadowing);
|
||||
if self.v.len()<=pos { None }
|
||||
else {
|
||||
let end=self.v.len()-1;
|
||||
@@ -789,6 +964,7 @@ impl OrderQueue {
|
||||
for index in 0..self.v.len() {
|
||||
self.v[index].dump();
|
||||
}
|
||||
if self.shadowing { for index in 0..self.next.len() { println!(" Shadow {}",self.next[index]); } }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -920,7 +1096,7 @@ fn royalty_stuff() {
|
||||
let node=rng.gen_range(0..10);
|
||||
match rng.gen_range(0..10) {
|
||||
0 => rt.add_weight(node,FiNum::new_i32(rng.gen_range(0..101))),
|
||||
1 => rt.sub_weight(node,FiNum::new_i32(rng.gen_range(0..101))),
|
||||
1 => { rt.sub_weight(node,FiNum::new_i32(rng.gen_range(0..101))); },
|
||||
2 => rt.add_royalty(FiNum::new_i32(rng.gen_range(0..10))),
|
||||
// 3 => println!("Random Order ID: {:?}",rt.random_order_id(&mut rng)),
|
||||
_ => (),
|
||||
@@ -948,6 +1124,7 @@ enum Command {
|
||||
AddFunds { user_id: usize, asset_id: usize, amt: FiNum },
|
||||
SubFunds { user_id: usize, asset_id: usize, amt: FiNum },
|
||||
Order { user_id: usize, sell_type: usize, sell_qty: FiNum, buy_type: usize, buy_qty: FiNum },
|
||||
SmartOrder { user_id: usize, sell_type: usize, sell_qty: FiNum, buy_type: usize, buy_qty: FiNum, max0: FiNum, max1: FiNum },
|
||||
OrderBatch { user_id: usize, sell_type: usize, sell_qty: FiNum, buy_type: usize, buy_qty: FiNum },
|
||||
ExecuteBatch { asset_type0: usize, strike0: FiNum, asset_type1: usize, strike1: FiNum },
|
||||
RetractOrder { order_id: usize },
|
||||
@@ -1089,6 +1266,9 @@ impl Market {
|
||||
Command::Order { user_id, sell_type, sell_qty, buy_type, buy_qty } => {
|
||||
self.make_order(*user_id,*sell_type,*buy_type,*sell_qty,*buy_qty,true)
|
||||
}
|
||||
Command::SmartOrder { user_id, sell_type, sell_qty, buy_type, buy_qty, max0, max1 } => {
|
||||
self.make_smart_order(*user_id,*sell_type,*buy_type,*sell_qty,*buy_qty,*max0,*max1,true)
|
||||
}
|
||||
Command::OrderBatch { user_id, sell_type, sell_qty, buy_type, buy_qty } => {
|
||||
self.make_order(*user_id,*sell_type,*buy_type,*sell_qty,*buy_qty,false)
|
||||
}
|
||||
@@ -1182,6 +1362,22 @@ fn tokens_to_command(m: &Market, logged_in: usize, tokens: Vec<&str>,line: &str)
|
||||
else if qty1.is_zero() { Command::Error("Qty1 is must be > 0".to_string()) }
|
||||
else { Command::Order { user_id: logged_in, sell_type: *cur0.unwrap(), sell_qty: qty0, buy_type: *cur1.unwrap(), buy_qty: qty1 } }
|
||||
}
|
||||
// Sell up to qty0 cur0 to buy up to qty1 cur1 where no suborder exceeds maxsub (expressed as a fraction)
|
||||
["smart", qty0, cur0, qty1, cur1, max0, "/", max1 ] => {
|
||||
let qty0=FiNum::new_str(qty0);
|
||||
let cur0=m.name_to_number(cur0);
|
||||
let qty1=FiNum::new_str(qty1);
|
||||
let cur1=m.name_to_number(cur1);
|
||||
let max0=FiNum::new_str(max0);
|
||||
let max1=FiNum::new_str(max1);
|
||||
if !cur0.is_some() { Command::Error("Count not find currency".to_string()) }
|
||||
else if !cur1.is_some() { Command::Error("Count not find currency".to_string()) }
|
||||
else if qty0.is_zero() { Command::Error("Qty0 is must be > 0".to_string()) }
|
||||
else if qty1.is_zero() { Command::Error("Qty1 is must be > 0".to_string()) }
|
||||
else if max0.is_zero() { Command::Error("Max0 is must be > 0".to_string()) }
|
||||
else if max1.is_zero() { Command::Error("Max1 is must be > 0".to_string()) }
|
||||
else { Command::SmartOrder { user_id: logged_in, sell_type: *cur0.unwrap(), sell_qty: qty0, buy_type: *cur1.unwrap(), buy_qty: qty1, max0: max0, max1: max1 } }
|
||||
}
|
||||
["orderbatch", qty0, cur0, qty1, cur1 ] => {
|
||||
let qty0=FiNum::new_str(qty0);
|
||||
let cur0=m.name_to_number(cur0);
|
||||
@@ -1221,6 +1417,16 @@ fn interactive(m: &mut Market, mut out: Option<File>) {
|
||||
let cmd:Command=match tokens.as_slice() {
|
||||
["dump"] => { m.dump(); Command::None },
|
||||
["sanity"] => { m.sanity_check(); Command::None },
|
||||
["path",src,dest] => {
|
||||
let cur0=*m.name_to_number(src).unwrap();
|
||||
let cur1=*m.name_to_number(dest).unwrap();
|
||||
let path=m.path_cost(cur0,cur1,6);
|
||||
let mut str=format!("Cost: {} Cap: {}",path.cost,path.cap);
|
||||
if path.len>0 { str=format!("{} {}",str,m.number_to_name(path.path[0])) }
|
||||
for i in 1..path.len { str=format!("{}->{}",str,m.number_to_name(path.path[i])) }
|
||||
println!("{}",str);
|
||||
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) }
|
||||
@@ -1249,13 +1455,31 @@ fn interactive(m: &mut Market, mut out: Option<File>) {
|
||||
} else { println!("Could not find trader {}",username); }
|
||||
Command::None
|
||||
},
|
||||
["seedrandom", seed] => {
|
||||
["seedrandom"|"sr", seed] => {
|
||||
let seed=seed.parse().unwrap();
|
||||
m.seed_random(seed);
|
||||
println!("Seeded RNG with {}",seed);
|
||||
Command::None
|
||||
}
|
||||
["randomcommands", qty] => {
|
||||
["testshadow",src,dst] => {
|
||||
if let Some(cur0)=m.name_to_number(src) {
|
||||
if let Some(cur1)=m.name_to_number(dst) {
|
||||
println!("Currencies are {} and {}",cur0,cur1);
|
||||
if let Some(q)=m.orders.get_mut(&(*cur0,*cur1)) {
|
||||
println!("Dumping queue");
|
||||
q.dump();
|
||||
println!("Dumping shadow");
|
||||
q.assure_shadowing();
|
||||
while let Some(ord)=q.pop() {
|
||||
ord.dump();
|
||||
}
|
||||
q.stop_shadowing();
|
||||
}
|
||||
}
|
||||
}
|
||||
Command::None
|
||||
}
|
||||
["randomcommands"|"rc", qty] => {
|
||||
let qty:u32=qty.parse().unwrap();
|
||||
let start = Instant::now();
|
||||
for i in 0..qty {
|
||||
|
||||
1
target/.rustc_info.json
Normal file
1
target/.rustc_info.json
Normal file
@@ -0,0 +1 @@
|
||||
{"rustc_fingerprint":4343802041220384422,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.78.0 (9b00956e5 2024-04-29)\nbinary: rustc\ncommit-hash: 9b00956e56009bab2aa15d7bff10916599e3d6d6\ncommit-date: 2024-04-29\nhost: x86_64-unknown-linux-gnu\nrelease: 1.78.0\nLLVM version: 18.1.2\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/teppy/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
|
||||
3
target/CACHEDIR.TAG
Normal file
3
target/CACHEDIR.TAG
Normal file
@@ -0,0 +1,3 @@
|
||||
Signature: 8a477f597d28d172789f06886806bc55
|
||||
# This file is a cache directory tag created by cargo.
|
||||
# For information about cache directory tags see https://bford.info/cachedir/
|
||||
0
target/debug/.cargo-lock
Normal file
0
target/debug/.cargo-lock
Normal file
BIN
target/debug/.fingerprint/ahash-504617b552ae60e6/dep-lib-ahash
Normal file
BIN
target/debug/.fingerprint/ahash-504617b552ae60e6/dep-lib-ahash
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
4230498a9c42e042
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":15946166061513530080,"profile":12206360443249279867,"path":12392441229074647953,"deps":[[2452538001284770427,"cfg_if",false,15490626430350646643],[2751633865096478575,"once_cell",false,16713956236338845288],[8776983334904785487,"zerocopy",false,16227130453912014384],[15443876827423482409,"build_script_build",false,14344379806883822968]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-504617b552ae60e6/dep-lib-ahash","checksum":false}}],"rustflags":[],"metadata":6548036084630991988,"config":2202906307356721367,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
78bd98406f7911c7
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[15443876827423482409,"build_script_build",false,5847417838522015174]],"local":[{"RerunIfChanged":{"output":"debug/build/ahash-5e0db2a2193f2a50/output","paths":["build.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
c61d630e8b332651
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"atomic-polyfill\", \"compile-time-rng\", \"const-random\", \"default\", \"getrandom\", \"nightly-arm-aes\", \"no-rng\", \"runtime-rng\", \"serde\", \"std\"]","target":13708040221295731214,"profile":13232757476167777671,"path":1911677316096773071,"deps":[[4366825111050392739,"version_check",false,9750224066250550833]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/ahash-f26514e0e1cc5812/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"metadata":6548036084630991988,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
36bf9e34dcec3fc1
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[\"alloc\"]","declared_features":"[\"alloc\", \"default\", \"fresh-rust\", \"nightly\", \"serde\", \"std\"]","target":2974225908581929585,"profile":7377589772334827443,"path":9747662362732745721,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/allocator-api2-88d7b7890afadc02/dep-lib-allocator_api2","checksum":false}}],"rustflags":[],"metadata":363439559241483613,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
07ffa39b65b47849
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"[]","declared_features":"","target":18335588937564793828,"profile":12206360443249279867,"path":18212526820589864309,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-2664cbc6c1fc8866/dep-lib-byteorder"}}],"rustflags":[],"metadata":5398730104718078656,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
08979f0142fe4bc3
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"default\", \"i128\", \"std\"]","target":16903832911151110546,"profile":12206360443249279867,"path":12518329022543172825,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-d36d73da0d12e75b/dep-lib-byteorder","checksum":false}}],"rustflags":[],"metadata":5398730104718078656,"config":2202906307356721367,"compile_kind":0}
|
||||
BIN
target/debug/.fingerprint/cfg-if-8217498f8667ada9/dep-lib-cfg_if
Normal file
BIN
target/debug/.fingerprint/cfg-if-8217498f8667ada9/dep-lib-cfg_if
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
73dd5361aac2f9d6
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"compiler_builtins\", \"core\", \"rustc-dep-of-std\"]","target":11601024444410784892,"profile":12206360443249279867,"path":14057495008324417411,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-8217498f8667ada9/dep-lib-cfg_if","checksum":false}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0}
|
||||
BIN
target/debug/.fingerprint/cfg-if-cc9cb5b64779c561/dep-lib-cfg-if
Normal file
BIN
target/debug/.fingerprint/cfg-if-cc9cb5b64779c561/dep-lib-cfg-if
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
aa227124af55cbea
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"[]","declared_features":"","target":10623512480563079566,"profile":12206360443249279867,"path":16466490194263946508,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-cc9cb5b64779c561/dep-lib-cfg-if"}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
248a326b01c758d8
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"[\"std\"]","declared_features":"","target":16789414514566550411,"profile":12206360443249279867,"path":14784813645262806707,"deps":[[2452538001284770427,"cfg_if",false,16918710635866432170],[7780729136333935213,"libc",false,6691589959117722990]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/getrandom-0ec5f3132051ed62/dep-lib-getrandom"}}],"rustflags":[],"metadata":12606519392706294666,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
7470adbd5fe41576
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[\"std\"]","declared_features":"[\"compiler_builtins\", \"core\", \"custom\", \"js\", \"js-sys\", \"linux_disable_fallback\", \"rdrand\", \"rustc-dep-of-std\", \"std\", \"test-in-browser\", \"wasm-bindgen\"]","target":11884987481660704207,"profile":12206360443249279867,"path":15288689928076690446,"deps":[[2452538001284770427,"cfg_if",false,15490626430350646643],[7780729136333935213,"libc",false,12428729079082602323]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/getrandom-3eaa2c90033669a2/dep-lib-getrandom","checksum":false}}],"rustflags":[],"metadata":12606519392706294666,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
7cd7fce5ffdaa84f
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[\"ahash\", \"allocator-api2\", \"default\", \"inline-more\"]","declared_features":"[\"ahash\", \"alloc\", \"allocator-api2\", \"compiler_builtins\", \"core\", \"default\", \"equivalent\", \"inline-more\", \"nightly\", \"raw\", \"rayon\", \"rkyv\", \"rustc-dep-of-std\", \"rustc-internal-api\", \"serde\"]","target":8830771204028428646,"profile":12206360443249279867,"path":3366490264348346016,"deps":[[2289252893304123003,"allocator_api2",false,13925109003372642102],[15443876827423482409,"ahash",false,4818924841388814402]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/hashbrown-cfbf150afb2f415b/dep-lib-hashbrown","checksum":false}}],"rustflags":[],"metadata":6228333144549390726,"config":2202906307356721367,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
2f48406071e7bfcf
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"align\", \"const-extern-fn\", \"default\", \"extra_traits\", \"rustc-dep-of-std\", \"rustc-std-workspace-core\", \"std\", \"use_std\"]","target":9652763411108993936,"profile":13232757476167777671,"path":33283817025902004,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-0bf4ed26e03f527c/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
BIN
target/debug/.fingerprint/libc-22a89fb39553949d/dep-lib-libc
Normal file
BIN
target/debug/.fingerprint/libc-22a89fb39553949d/dep-lib-libc
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
1
target/debug/.fingerprint/libc-22a89fb39553949d/lib-libc
Normal file
1
target/debug/.fingerprint/libc-22a89fb39553949d/lib-libc
Normal file
@@ -0,0 +1 @@
|
||||
534f49483fb77bac
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[\"align\", \"const-extern-fn\", \"default\", \"extra_traits\", \"rustc-dep-of-std\", \"rustc-std-workspace-core\", \"std\", \"use_std\"]","target":10680253861624505453,"profile":12206360443249279867,"path":18370078949461830637,"deps":[[7780729136333935213,"build_script_build",false,11321662282393169494]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-22a89fb39553949d/dep-lib-libc","checksum":false}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
56aefb70dc9f1e9d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[7780729136333935213,"build_script_build",false,14969938160534964271]],"local":[{"RerunIfChanged":{"output":"debug/build/libc-2fba499436484a1c/output","paths":["build.rs"]}},{"RerunIfEnvChanged":{"var":"RUST_LIBC_UNSTABLE_FREEBSD_VERSION","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}
|
||||
BIN
target/debug/.fingerprint/libc-682eaa70fa6ca44e/dep-lib-libc
Normal file
BIN
target/debug/.fingerprint/libc-682eaa70fa6ca44e/dep-lib-libc
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
1
target/debug/.fingerprint/libc-682eaa70fa6ca44e/lib-libc
Normal file
1
target/debug/.fingerprint/libc-682eaa70fa6ca44e/lib-libc
Normal file
@@ -0,0 +1 @@
|
||||
6e55c83f9d4ddd5c
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"[]","declared_features":"","target":2703894136786000,"profile":12206360443249279867,"path":5458437750425973037,"deps":[[7780729136333935213,"build_script_build",false,5581047334126213733]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-682eaa70fa6ca44e/dep-lib-libc"}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
65da3b11fbdc734d
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[7780729136333935213,"build_script_build",false,18015918853468524591]],"local":[{"RerunIfChanged":{"output":"debug/build/libc-b102164365839731/output","paths":["build.rs"]}},{"RerunIfEnvChanged":{"var":"RUST_LIBC_UNSTABLE_FREEBSD_VERSION","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}
|
||||
@@ -0,0 +1 @@
|
||||
2f1041abbe6605fa
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":1059629350237521597,"features":"[]","declared_features":"","target":427768481117760528,"profile":13232757476167777671,"path":8823324033568247709,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/libc-f7cc13a5deb09582/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":14998826085014762512,"config":2202906307356721367,"compile_kind":0}
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[]","target":17286931796177957147,"profile":11597332650809196192,"path":10602529704205407992,"deps":[[5910892534286594076,"rand",false,7402337238667449966]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lzf1-43121faddb8b3a38/dep-bin-lzf1","checksum":false}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
|
||||
BIN
target/debug/.fingerprint/lzf1-43121faddb8b3a38/dep-bin-lzf1
Normal file
BIN
target/debug/.fingerprint/lzf1-43121faddb8b3a38/dep-bin-lzf1
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
1
target/debug/.fingerprint/lzf1-632ea32a70f0e245/bin-lzf1
Normal file
1
target/debug/.fingerprint/lzf1-632ea32a70f0e245/bin-lzf1
Normal file
@@ -0,0 +1 @@
|
||||
3a7ed6a2ad8a568f
|
||||
@@ -0,0 +1 @@
|
||||
{"rustc":11594289678289209806,"features":"[]","declared_features":"[]","target":17286931796177957147,"profile":11597332650809196192,"path":10602529704205407992,"deps":[[5910892534286594076,"rand",false,2053896911618300010],[8480487335294508957,"hashbrown",false,5740078517693765500]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/lzf1-632ea32a70f0e245/dep-bin-lzf1","checksum":false}}],"rustflags":[],"metadata":7797948686568424061,"config":2202906307356721367,"compile_kind":0}
|
||||
BIN
target/debug/.fingerprint/lzf1-632ea32a70f0e245/dep-bin-lzf1
Normal file
BIN
target/debug/.fingerprint/lzf1-632ea32a70f0e245/dep-bin-lzf1
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
@@ -0,0 +1 @@
|
||||
This file has an mtime of when this was started.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user