From 5aa4f95eeef94370679f6f1d97380ec8ec9ae12a Mon Sep 17 00:00:00 2001 From: Colin Roberts <colin@primitive.xyz> Date: Mon, 26 Feb 2024 18:31:31 -0700 Subject: [PATCH 1/2] trying out implementations --- Cargo.lock | 286 +++++++++++++++--- kit/Cargo.toml | 1 + kit/src/behaviors/initialize.rs | 18 ++ .../behaviors/liquidity_provision/initial.rs | 18 ++ kit/src/behaviors/liquidity_provision/mod.rs | 52 ++++ kit/src/behaviors/mod.rs | 2 + kit/src/lib.rs | 2 + kit/src/pool/constant_sum.rs | 8 +- kit/src/pool/mod.rs | 17 +- 9 files changed, 357 insertions(+), 47 deletions(-) create mode 100644 kit/src/behaviors/initialize.rs create mode 100644 kit/src/behaviors/liquidity_provision/initial.rs create mode 100644 kit/src/behaviors/liquidity_provision/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 6cce4f54..b7791dcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -33,7 +33,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "cipher", "cpufeatures", ] @@ -44,7 +44,7 @@ version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "getrandom", "once_cell", "version_check", @@ -89,7 +89,7 @@ checksum = "ef197eb250c64962003cb08b90b17f0882c192f4a6f2f544809d424fd7cb0e7d" dependencies = [ "alloy-rlp", "bytes", - "cfg-if", + "cfg-if 1.0.0", "const-hex", "derive_more", "hex-literal", @@ -401,6 +401,18 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +[[package]] +name = "as-slice" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" +dependencies = [ + "generic-array 0.12.4", + "generic-array 0.13.3", + "generic-array 0.14.7", + "stable_deref_trait", +] + [[package]] name = "ascii-canvas" version = "3.0.0" @@ -504,7 +516,7 @@ checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", - "cfg-if", + "cfg-if 1.0.0", "libc", "miniz_oxide", "object", @@ -590,7 +602,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -636,6 +648,19 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "build_id" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6deb6795d8b4d2269c3fcf87a87bff9f4cd45a99e259806603ee8007077daf3" +dependencies = [ + "byteorder", + "once_cell", + "palaver", + "twox-hash", + "uuid", +] + [[package]] name = "bumpalo" version = "3.15.3" @@ -759,6 +784,12 @@ dependencies = [ "libc", ] +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + [[package]] name = "cfg-if" version = "1.0.0" @@ -891,7 +922,7 @@ dependencies = [ "bech32", "bs58", "digest 0.10.7", - "generic-array", + "generic-array 0.14.7", "hex", "ripemd", "serde", @@ -925,7 +956,7 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18d59688ad0945eaf6b84cb44fedbe93484c81b48970e98f09db8a22832d7961" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "cpufeatures", "hex", "proptest", @@ -981,7 +1012,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -1061,7 +1092,7 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "generic-array", + "generic-array 0.14.7", "rand_core", "subtle", "zeroize", @@ -1073,7 +1104,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array", + "generic-array 0.14.7", "typenum", ] @@ -1150,6 +1181,7 @@ dependencies = [ "futures-util", "serde", "serde_json", + "serde_traitobject", "tokio", "tracing", "tracing-subscriber", @@ -1167,7 +1199,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1197,7 +1229,7 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "dirs-sys-next", ] @@ -1266,7 +1298,7 @@ dependencies = [ "crypto-bigint", "digest 0.10.7", "ff", - "generic-array", + "generic-array 0.14.7", "group", "pkcs8", "rand_core", @@ -1290,7 +1322,7 @@ version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -1340,6 +1372,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + [[package]] name = "errno" version = "0.3.8" @@ -1520,7 +1561,7 @@ dependencies = [ "const-hex", "elliptic-curve", "ethabi", - "generic-array", + "generic-array 0.14.7", "k256", "num_enum", "once_cell", @@ -1643,7 +1684,7 @@ version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d21df08582e0a43005018a858cc9b465c5fff9cf4056651be64f844e57d1f55f" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "const-hex", "dirs", "dunce", @@ -1917,6 +1958,24 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1934,7 +1993,7 @@ version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "js-sys", "libc", "wasi", @@ -2005,6 +2064,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hash32" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.13.2" @@ -2035,6 +2103,18 @@ dependencies = [ "fxhash", ] +[[package]] +name = "heapless" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1" +dependencies = [ + "as-slice", + "generic-array 0.13.3", + "hash32", + "stable_deref_trait", +] + [[package]] name = "heck" version = "0.4.1" @@ -2245,7 +2325,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -2254,7 +2334,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -2333,7 +2413,7 @@ version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "ecdsa", "elliptic-curve", "once_cell", @@ -2526,13 +2606,22 @@ dependencies = [ "libc", ] +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + [[package]] name = "md-5" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "digest 0.10.7", ] @@ -2551,6 +2640,12 @@ dependencies = [ "libc", ] +[[package]] +name = "metatype" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23decce7c32638bcefbd5a5a5d79a5bb5b720c47b82ad5cb670a7eb912705946" + [[package]] name = "mime" version = "0.3.17" @@ -2605,6 +2700,25 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nix" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nom" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf51a729ecf40266a2368ad335a5fdde43471f545a967109cd62146ecf8b66ff" + [[package]] name = "now" version = "0.1.3" @@ -2798,6 +2912,23 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "palaver" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49dfc200733ac34dcd9a1e4a7e454b521723936010bef3710e2d8024a32d685f" +dependencies = [ + "bitflags 1.3.2", + "heapless", + "lazy_static", + "libc", + "mach", + "nix", + "procinfo", + "typenum", + "winapi", +] + [[package]] name = "parity-scale-codec" version = "3.6.9" @@ -2840,7 +2971,7 @@ version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "libc", "redox_syscall", "smallvec", @@ -3531,6 +3662,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "procinfo" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab1427f3d2635891f842892dda177883dca0639e05fe66796a62c9d2f23b49c" +dependencies = [ + "byteorder", + "libc", + "nom", + "rustc_version 0.2.3", +] + [[package]] name = "proptest" version = "1.4.0" @@ -3716,6 +3859,17 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "relative" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3401c189ee92c7028ba4863f3fdb92af815789993221af2fa186eed8115da304" +dependencies = [ + "build_id", + "serde", + "uuid", +] + [[package]] name = "reqwest" version = "0.11.24" @@ -3764,7 +3918,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "266f86bdefa6dac07d92e2f5c37d7d183f2575b2f9e0ee9cba9402dfde912524" dependencies = [ "auto_impl", - "cfg-if", + "cfg-if 1.0.0", "ethers-core", "ethers-providers", "futures", @@ -3815,7 +3969,7 @@ dependencies = [ "bitvec", "blst", "c-kzg", - "cfg-if", + "cfg-if 1.0.0", "derive_more", "enumn", "hashbrown 0.14.3", @@ -3856,7 +4010,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "cfg-if", + "cfg-if 1.0.0", "getrandom", "libc", "spin 0.9.8", @@ -3937,6 +4091,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + [[package]] name = "rustc_version" version = "0.3.3" @@ -4047,7 +4210,7 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "derive_more", "parity-scale-codec", "scale-info-derive", @@ -4101,7 +4264,7 @@ checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", - "generic-array", + "generic-array 0.14.7", "pkcs8", "subtle", "zeroize", @@ -4125,13 +4288,22 @@ dependencies = [ "cc", ] +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser 0.7.0", +] + [[package]] name = "semver" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" dependencies = [ - "semver-parser", + "semver-parser 0.10.2", ] [[package]] @@ -4143,6 +4315,12 @@ dependencies = [ "serde", ] +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + [[package]] name = "semver-parser" version = "0.10.2" @@ -4211,6 +4389,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_traitobject" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c5ae15a5d31f7c57875a480ddd7be02314d264617d0294d961314a6d502e6b1" +dependencies = [ + "erased-serde", + "metatype", + "relative", + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4229,7 +4419,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "cpufeatures", "digest 0.10.7", ] @@ -4240,7 +4430,7 @@ version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "cpufeatures", "digest 0.10.7", ] @@ -4262,7 +4452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bac61da6b35ad76b195eb4771210f947734321a8d81d7738e1580d953bc7a15e" dependencies = [ "cc", - "cfg-if", + "cfg-if 1.0.0", ] [[package]] @@ -4422,6 +4612,12 @@ dependencies = [ "log", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -4563,7 +4759,7 @@ version = "0.30.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fb4f3438c8f6389c864e61221cbc97e9bca98b4daf39a5beb7bea660f528bb2" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "core-foundation-sys", "libc", "ntapi", @@ -4610,7 +4806,7 @@ version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a365e8cd18e44762ef95d87f284f4b5cd04107fec2ff3052bd6a3e6069669e67" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "fastrand", "rustix", "windows-sys 0.52.0", @@ -4653,7 +4849,7 @@ version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "once_cell", ] @@ -4967,6 +5163,16 @@ dependencies = [ "utf-8", ] +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if 1.0.0", + "static_assertions", +] + [[package]] name = "typenum" version = "1.17.0" @@ -5114,6 +5320,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + [[package]] name = "wait-timeout" version = "0.2.0" @@ -5154,7 +5366,7 @@ version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "wasm-bindgen-macro", ] @@ -5179,7 +5391,7 @@ version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "js-sys", "wasm-bindgen", "web-sys", @@ -5436,7 +5648,7 @@ version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "cfg-if", + "cfg-if 1.0.0", "windows-sys 0.48.0", ] diff --git a/kit/Cargo.toml b/kit/Cargo.toml index 65443b8c..dde07bb4 100644 --- a/kit/Cargo.toml +++ b/kit/Cargo.toml @@ -25,6 +25,7 @@ futures-util = "0.3.30" # Serde serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.114" +serde_traitobject = "0.2.8" # Errors and tracing anyhow = "1.0.80" diff --git a/kit/src/behaviors/initialize.rs b/kit/src/behaviors/initialize.rs new file mode 100644 index 00000000..dca328d2 --- /dev/null +++ b/kit/src/behaviors/initialize.rs @@ -0,0 +1,18 @@ +use super::*; + +#[derive(Debug, Deserialize, Serialize)] +pub struct Initialize<P: PoolType> { + // pub pool: Pool<P>, + phantom: std::marker::PhantomData<P>, +} + +#[async_trait::async_trait] +impl<P: PoolType> Behavior<()> for Initialize<P> { + async fn startup( + &mut self, + client: Arc<ArbiterMiddleware>, + messager: Messager, + ) -> Result<Option<EventStream<()>>> { + Ok(None) + } +} diff --git a/kit/src/behaviors/liquidity_provision/initial.rs b/kit/src/behaviors/liquidity_provision/initial.rs new file mode 100644 index 00000000..2f7ad457 --- /dev/null +++ b/kit/src/behaviors/liquidity_provision/initial.rs @@ -0,0 +1,18 @@ +use super::*; + +#[derive(Debug, Deserialize, Serialize)] +pub struct Initial { + pub input_x: Option<eU256>, + pub input_y: Option<eU256>, + pub price: eU256, +} + +impl AllocationType<()> for Initial { + fn change_allocation_amount(self, event: ()) -> Option<Allocation> { + Some(Allocation { + amount_x: self.input_x.map(I256::from_raw), + amount_y: self.input_y.map(I256::from_raw), + price: Some(self.price), + }) + } +} diff --git a/kit/src/behaviors/liquidity_provision/mod.rs b/kit/src/behaviors/liquidity_provision/mod.rs new file mode 100644 index 00000000..47c44e07 --- /dev/null +++ b/kit/src/behaviors/liquidity_provision/mod.rs @@ -0,0 +1,52 @@ +use std::fmt::Debug; +use std::marker::PhantomData; + +use ethers::types::I256; +use serde::de::DeserializeOwned; + +use super::*; + +pub mod initial; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LiquidityProvision<A, E> +where + A: AllocationType<E>, + E: Debug + Send + Sync, +{ + pub allocation_type: A, + // #[serde(skip)] + // pub pool: Option<Pool<P>>, + #[serde(skip)] + pub client: Option<Arc<ArbiterMiddleware>>, + #[serde(skip)] + pub messager: Option<Messager>, + phantom: PhantomData<E>, +} + +pub trait AllocationType<E>: Send + Sync + Debug + Serialize + 'static { + fn change_allocation_amount(self, event: E) -> Option<Allocation>; +} + +pub struct Allocation { + pub amount_x: Option<I256>, + pub amount_y: Option<I256>, + pub price: Option<eU256>, +} + +#[async_trait::async_trait] +impl<A, E> Behavior<E> for LiquidityProvision<A, E> +where + A: AllocationType<E> + DeserializeOwned, + E: Debug + Send + Sync + 'static, +{ + async fn startup( + &mut self, + client: Arc<ArbiterMiddleware>, + messager: Messager, + ) -> Result<Option<EventStream<E>>> { + self.client = Some(client); + self.messager = Some(messager); + Ok(None) + } +} diff --git a/kit/src/behaviors/mod.rs b/kit/src/behaviors/mod.rs index 24b2fec7..9908ddb6 100644 --- a/kit/src/behaviors/mod.rs +++ b/kit/src/behaviors/mod.rs @@ -11,6 +11,8 @@ use self::deployer::Deployer; use super::*; pub mod deployer; +pub mod initialize; +pub mod liquidity_provision; #[derive(Behaviors, Debug, Deserialize, Serialize)] pub enum Behaviors { diff --git a/kit/src/lib.rs b/kit/src/lib.rs index 2492edc6..b99004ca 100644 --- a/kit/src/lib.rs +++ b/kit/src/lib.rs @@ -1,8 +1,10 @@ pub mod behaviors; pub mod bindings; pub mod pool; +pub use pool::{Pool, PoolType, Token}; use anyhow::Result; use arbiter_core::middleware::ArbiterMiddleware; use ethers::types::U256 as eU256; +use serde::{Deserialize, Serialize}; use tracing::trace; diff --git a/kit/src/pool/constant_sum.rs b/kit/src/pool/constant_sum.rs index b7ad4c30..9668a3a1 100644 --- a/kit/src/pool/constant_sum.rs +++ b/kit/src/pool/constant_sum.rs @@ -2,12 +2,14 @@ use bindings::{constant_sum::ConstantSum, constant_sum_solver::ConstantSumSolver use super::*; +#[derive(Debug)] pub struct ConstantSumPool { pub strategy_contract: ConstantSum<ArbiterMiddleware>, pub solver_contract: ConstantSumSolver<ArbiterMiddleware>, pub parameters: ConstantSumParameters, } +#[derive(Debug, Deserialize, Serialize)] pub struct ConstantSumParameters { pub price: eU256, pub swap_fee: eU256, @@ -22,17 +24,17 @@ impl PoolType for ConstantSumPool { async fn swap_data( &self, pool_id: eU256, - input_token: InputToken, + input_token: Token, amount_in: eU256, ) -> Result<Bytes> { let (valid, _, data) = match input_token { - InputToken::TokenX => { + Token::TokenX => { self.solver_contract .simulate_swap(pool_id, true, amount_in) .call() .await? } - InputToken::TokenY => { + Token::TokenY => { self.solver_contract .simulate_swap(pool_id, false, amount_in) .call() diff --git a/kit/src/pool/mod.rs b/kit/src/pool/mod.rs index 865d439c..a58621aa 100644 --- a/kit/src/pool/mod.rs +++ b/kit/src/pool/mod.rs @@ -1,3 +1,5 @@ +use std::fmt::Debug; + use arbiter_core::middleware::ArbiterMiddleware; use ethers::types::Bytes; @@ -9,14 +11,14 @@ pub mod constant_sum; pub mod geometric_mean; pub mod log_normal; -pub trait PoolType { +pub trait PoolType: Debug + Send + Sync { type Parameters; type StrategyContract; type SolverContract; type AllocationData; #[allow(async_fn_in_trait)] - async fn swap_data(&self, pool_id: eU256, swap: InputToken, amount_in: eU256) -> Result<Bytes>; + async fn swap_data(&self, pool_id: eU256, swap: Token, amount_in: eU256) -> Result<Bytes>; /// Change Parameters #[allow(async_fn_in_trait)] async fn update_data(&self, new_data: Self::Parameters) -> Result<Bytes>; @@ -29,7 +31,7 @@ pub trait PoolType { ) -> Result<Bytes>; } -pub enum InputToken { +pub enum Token { TokenX, TokenY, } @@ -39,23 +41,24 @@ pub enum AllocateOrDeallocate { Deallocate, } +#[derive(Debug)] pub struct Pool<P: PoolType> { pub id: eU256, - pub dfmm: DFMM<ArbiterMiddleware>, pub instance: P, + pub dfmm: DFMM<ArbiterMiddleware>, pub token_x: ArbiterToken<ArbiterMiddleware>, pub token_y: ArbiterToken<ArbiterMiddleware>, } impl<P: PoolType> Pool<P> { - pub async fn swap(&self, amount_in: eU256, token_in: InputToken) -> Result<()> { + pub async fn swap(&self, amount_in: eU256, token_in: Token) -> Result<()> { let data = match token_in { - InputToken::TokenX => { + Token::TokenX => { self.instance .swap_data(self.id, token_in, amount_in) .await? } - InputToken::TokenY => { + Token::TokenY => { self.instance .swap_data(self.id, token_in, amount_in) .await? From 33960ed1d4c1c0194104592727a76db96d158583 Mon Sep 17 00:00:00 2001 From: Colin Roberts <colin@primitive.xyz> Date: Mon, 26 Feb 2024 19:53:03 -0700 Subject: [PATCH 2/2] feat: initialize --- kit/src/behaviors/deployer.rs | 58 +++++++++++++++++++++++---------- kit/src/behaviors/initialize.rs | 45 ++++++++++++++++++++++--- kit/src/behaviors/mod.rs | 2 +- kit/src/lib.rs | 16 +++++++-- kit/src/pool/constant_sum.rs | 12 ++----- 5 files changed, 97 insertions(+), 36 deletions(-) diff --git a/kit/src/behaviors/deployer.rs b/kit/src/behaviors/deployer.rs index c781d7c2..6c9aab1d 100644 --- a/kit/src/behaviors/deployer.rs +++ b/kit/src/behaviors/deployer.rs @@ -1,9 +1,4 @@ -use arbiter_bindings::bindings::weth::WETH; use arbiter_engine::messager::To; -use bindings::{ - constant_sum::ConstantSum, dfmm::DFMM, geometric_mean::GeometricMean, log_normal::LogNormal, -}; -use ethers::types::Address; use super::*; @@ -11,13 +6,16 @@ use super::*; pub struct Deployer {} #[derive(Debug, Deserialize, Serialize)] pub struct DeploymentData { - pub weth: Address, - pub dfmm: Address, - pub geometric_mean: Address, - pub log_normal: Address, - pub constant_sum: Address, - pub token_x: Address, - pub token_y: Address, + pub weth: eAddress, + pub dfmm: eAddress, + pub geometric_mean: eAddress, + pub geometric_mean_solver: eAddress, + pub log_normal: eAddress, + pub log_normal_solver: eAddress, + pub constant_sum: eAddress, + pub constant_sum_solver: eAddress, + pub token_x: eAddress, + pub token_y: eAddress, } #[async_trait::async_trait] @@ -36,25 +34,48 @@ impl Behavior<()> for Deployer { let geometric_mean = GeometricMean::deploy(client.clone(), dfmm.address())? .send() .await?; - trace!("GeometricMean deployed at {:?}", geometric_mean.address()); + let geometric_mean_solver = + GeometricMeanSolver::deploy(client.clone(), geometric_mean.address())? + .send() + .await?; + trace!( + "GeometricMean deployed at {:?} with solver at {:?}", + geometric_mean.address(), + geometric_mean_solver.address() + ); let log_normal = LogNormal::deploy(client.clone(), dfmm.address())? .send() .await?; - trace!("LogNormal deployed at {:?}", log_normal.address()); + let log_normal_solver = LogNormalSolver::deploy(client.clone(), log_normal.address())? + .send() + .await?; + trace!( + "LogNormal deployed at {:?} with solver at {:?}", + log_normal.address(), + log_normal_solver.address() + ); let constant_sum = ConstantSum::deploy(client.clone(), dfmm.address())? .send() .await?; - trace!("ConstantSum deployed at {:?}", constant_sum.address()); + let constant_sum_solver = + ConstantSumSolver::deploy(client.clone(), constant_sum.address())? + .send() + .await?; + trace!( + "ConstantSum deployed at {:?} with solver at {:?}", + constant_sum.address(), + constant_sum_solver.address() + ); - let token_x = arbiter_bindings::bindings::arbiter_token::ArbiterToken::deploy( + let token_x = ArbiterToken::deploy( client.clone(), ("Token X".to_owned(), "ARBX".to_owned(), 18u8), )? .send() .await?; - let token_y = arbiter_bindings::bindings::arbiter_token::ArbiterToken::deploy( + let token_y = ArbiterToken::deploy( client.clone(), ("Token Y".to_owned(), "ARBY".to_owned(), 18u8), )? @@ -71,8 +92,11 @@ impl Behavior<()> for Deployer { weth: weth.address(), dfmm: dfmm.address(), geometric_mean: geometric_mean.address(), + geometric_mean_solver: geometric_mean_solver.address(), log_normal: log_normal.address(), + log_normal_solver: log_normal_solver.address(), constant_sum: constant_sum.address(), + constant_sum_solver: constant_sum_solver.address(), token_x: token_x.address(), token_y: token_y.address(), }; diff --git a/kit/src/behaviors/initialize.rs b/kit/src/behaviors/initialize.rs index dca328d2..179c971b 100644 --- a/kit/src/behaviors/initialize.rs +++ b/kit/src/behaviors/initialize.rs @@ -1,18 +1,53 @@ +use self::bindings::idfmm::InitParams; use super::*; #[derive(Debug, Deserialize, Serialize)] -pub struct Initialize<P: PoolType> { - // pub pool: Pool<P>, - phantom: std::marker::PhantomData<P>, +pub struct Initialize { + pub rx: Option<eU256>, + pub ry: Option<eU256>, + pub pool_parameters: PoolParameters, +} + +#[derive(Debug, Deserialize, Serialize)] +pub enum PoolParameters { + ConstantSum(ConstantSumParams), } #[async_trait::async_trait] -impl<P: PoolType> Behavior<()> for Initialize<P> { +impl Behavior<()> for Initialize { async fn startup( &mut self, client: Arc<ArbiterMiddleware>, - messager: Messager, + mut messager: Messager, ) -> Result<Option<EventStream<()>>> { + // await the deployment of DFMM contracts + while let Ok(message) = messager.get_next().await { + let deployment_data = match serde_json::from_str::<DeploymentData>(&message.data) { + Ok(data) => data, + Err(_) => continue, + }; + match &self.pool_parameters { + PoolParameters::ConstantSum(params) => { + let solver = + ConstantSumSolver::new(deployment_data.constant_sum, client.clone()); + let data = solver + .get_initial_pool_data(self.rx.unwrap(), self.ry.unwrap(), params.clone()) + .call() + .await?; + let dfmm = DFMM::new(deployment_data.dfmm, client); + dfmm.init(InitParams { + strategy: deployment_data.constant_sum, + token_x: deployment_data.token_x, + token_y: deployment_data.token_y, + data, + }) + .send() + .await? + .await?; + break; + } + } + } Ok(None) } } diff --git a/kit/src/behaviors/mod.rs b/kit/src/behaviors/mod.rs index 9908ddb6..f2d2a6cb 100644 --- a/kit/src/behaviors/mod.rs +++ b/kit/src/behaviors/mod.rs @@ -7,7 +7,7 @@ use arbiter_engine::{ use arbiter_macros::Behaviors; use serde::{Deserialize, Serialize}; -use self::deployer::Deployer; +pub use self::deployer::{Deployer, DeploymentData}; use super::*; pub mod deployer; diff --git a/kit/src/lib.rs b/kit/src/lib.rs index b99004ca..605d6340 100644 --- a/kit/src/lib.rs +++ b/kit/src/lib.rs @@ -1,10 +1,20 @@ pub mod behaviors; pub mod bindings; pub mod pool; -pub use pool::{Pool, PoolType, Token}; - use anyhow::Result; +use arbiter_bindings::bindings::arbiter_token::ArbiterToken; use arbiter_core::middleware::ArbiterMiddleware; -use ethers::types::U256 as eU256; +use bindings::{ + constant_sum::ConstantSum, + constant_sum_solver::{ConstantSumParams, ConstantSumSolver}, + dfmm::DFMM, + geometric_mean::GeometricMean, + geometric_mean_solver::{GeometricMeanParams, GeometricMeanSolver}, + log_normal::LogNormal, + log_normal_solver::{LogNormalParams, LogNormalSolver}, + weth::WETH, +}; +use ethers::types::{Address as eAddress, U256 as eU256}; +use pool::{constant_sum::ConstantSumPool, Pool, PoolType, Token}; use serde::{Deserialize, Serialize}; use tracing::trace; diff --git a/kit/src/pool/constant_sum.rs b/kit/src/pool/constant_sum.rs index 9668a3a1..7bef01fb 100644 --- a/kit/src/pool/constant_sum.rs +++ b/kit/src/pool/constant_sum.rs @@ -1,22 +1,14 @@ -use bindings::{constant_sum::ConstantSum, constant_sum_solver::ConstantSumSolver}; - use super::*; #[derive(Debug)] pub struct ConstantSumPool { pub strategy_contract: ConstantSum<ArbiterMiddleware>, pub solver_contract: ConstantSumSolver<ArbiterMiddleware>, - pub parameters: ConstantSumParameters, -} - -#[derive(Debug, Deserialize, Serialize)] -pub struct ConstantSumParameters { - pub price: eU256, - pub swap_fee: eU256, + pub parameters: ConstantSumParams, } impl PoolType for ConstantSumPool { - type Parameters = ConstantSumParameters; + type Parameters = ConstantSumParams; type StrategyContract = ConstantSum<ArbiterMiddleware>; type SolverContract = ConstantSumSolver<ArbiterMiddleware>; type AllocationData = (AllocateOrDeallocate, eU256, eU256);