diff --git a/Cargo.lock b/Cargo.lock index 515bb376b..22fe4e5a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,6 +27,18 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.2" @@ -52,9 +64,9 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" @@ -90,6 +102,15 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -123,6 +144,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bech32" version = "0.9.1" @@ -156,9 +183,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "block-buffer" @@ -190,9 +217,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" @@ -388,9 +415,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" dependencies = [ "cfg-if 1.0.0", ] @@ -443,6 +470,17 @@ dependencies = [ "zeroize", ] +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "dex-tests" version = "0.0.0" @@ -489,6 +527,17 @@ dependencies = [ "subtle", ] +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "distribution" version = "0.0.0" @@ -648,6 +697,29 @@ dependencies = [ "multiversx-sc-meta", ] +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -996,6 +1068,21 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -1003,6 +1090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1011,12 +1099,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + [[package]] name = "futures-io" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "futures-sink" version = "0.3.30" @@ -1035,8 +1145,11 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", "futures-io", + "futures-macro", + "futures-sink", "futures-task", "memchr", "pin-project-lite", @@ -1160,9 +1273,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.24" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" dependencies = [ "bytes", "fnv", @@ -1182,6 +1295,10 @@ name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "serde", +] [[package]] name = "heck" @@ -1224,9 +1341,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.11" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -1235,12 +1352,24 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" dependencies = [ "bytes", + "futures-core", "http", + "http-body", "pin-project-lite", ] @@ -1251,46 +1380,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] -name = "httpdate" -version = "1.0.3" +name = "humantime" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -1327,6 +1475,22 @@ checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown", + "serde", +] + +[[package]] +name = "interactor" +version = "0.0.0" +dependencies = [ + "clap", + "common_structs", + "multiversx-sc", + "multiversx-sc-modules", + "multiversx-sc-scenario", + "multiversx-sc-snippets", + "proxies", + "serde", + "toml", ] [[package]] @@ -1467,20 +1631,24 @@ dependencies = [ "multiversx-sc-meta", ] +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + [[package]] name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" [[package]] name = "math" @@ -1491,9 +1659,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memory_units" @@ -1571,11 +1739,11 @@ dependencies = [ [[package]] name = "multiversx-chain-vm" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a363734a77774f4095fad6f49c6772b82edd833ed47a7c1ca87db18f68ccfffd" +checksum = "f69520691466bc184475320c27db21137e68be5e959df25c1a14b09e055d0d58" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "colored", "ed25519-dalek", "hex", @@ -1598,33 +1766,35 @@ checksum = "b59072fa0624b55ae5ae3fa6bfa91515bbeb4ac440214bc4a509e2c8806d6e9f" [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "hex-literal 0.4.1", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", "num-bigint", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -1634,9 +1804,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -1647,9 +1817,9 @@ dependencies = [ [[package]] name = "multiversx-sc-meta" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ce1f4557894ea3b556d3376d4a12c0494b8085a69c7f02def42bed0702ade58" +checksum = "07fe6edb214529678c77e82e25d9495b04773d489c441ef49fc19ad0664504f3" dependencies = [ "clap", "colored", @@ -1667,27 +1837,27 @@ dependencies = [ "serde", "serde_json", "toml", - "wasmparser 0.121.2", + "wasmparser", "wasmprinter", "zip", ] [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-scenario" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa109d85d90599c232c2c4ac19a0f6c12a558ad72aa04f4b40ff9e23365b1897" +checksum = "3dd07e4626e551c051f3065c0b2b44047d3281c20cdbcef9375aecb5f9fd5307" dependencies = [ - "base64", + "base64 0.22.1", "bech32", "clap", "colored", @@ -1707,16 +1877,33 @@ dependencies = [ "serde_json", "sha2 0.10.8", "tokio", + "unwrap-infallible", +] + +[[package]] +name = "multiversx-sc-snippets" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9460bd8e2816feb1aa75fddf101f18422a6059801c3b51d5ea228162bd28c195" +dependencies = [ + "base64 0.22.1", + "env_logger", + "futures", + "hex", + "log", + "multiversx-sc-scenario", + "multiversx-sdk", + "tokio", ] [[package]] name = "multiversx-sdk" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d709ddf46c50a407ce4b90ff487e854926d47f80de6abfe4a4adca3eaa7964" +checksum = "5cb2f8dd4a17ce9c9fa1ab3d80152929702968be6536499f32bd7e2278c2e0fb" dependencies = [ "anyhow", - "base64", + "base64 0.22.1", "bech32", "bip39", "hex", @@ -1764,30 +1951,28 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -1829,7 +2014,7 @@ version = "0.10.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -1983,7 +2168,7 @@ version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8fcc794035347fb64beda2d3b462595dd2753e3f268d89c5aae77e8cf2c310" dependencies = [ - "base64", + "base64 0.21.7", "serde", ] @@ -1997,11 +2182,31 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" name = "permissions_module" version = "0.0.0" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "common_errors", "multiversx-sc", ] +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -2051,13 +2256,28 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] +[[package]] +name = "proxies" +version = "0.0.0" +dependencies = [ + "common_structs", + "config", + "energy-factory", + "farm-boosted-yields", + "multiversx-sc", + "multiversx-sc-scenario", + "pausable", + "permissions_module", + "weekly-rewards-splitting", +] + [[package]] name = "proxy-deployer" version = "0.0.0" @@ -2123,9 +2343,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -2260,20 +2480,23 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "encoding_rs", + "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", + "http-body-util", "hyper", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -2282,9 +2505,11 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -2315,11 +2540,13 @@ dependencies = [ name = "router" version = "0.0.0" dependencies = [ + "common_structs", "locking_module", "multiversx-sc", "multiversx-sc-scenario", "pair", "pausable", + "permissions_module", "simple-lock", "token_send", ] @@ -2367,13 +2594,29 @@ version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.52.0", ] +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + [[package]] name = "ryu" version = "1.0.16" @@ -2554,6 +2797,12 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + [[package]] name = "simple-lock" version = "0.0.0" @@ -2635,15 +2884,21 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + [[package]] name = "system-configuration" version = "0.5.1" @@ -2678,6 +2933,26 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "thiserror" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2826,6 +3101,28 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -2838,6 +3135,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-core", ] @@ -2890,6 +3188,12 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" @@ -3035,34 +3339,26 @@ checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "wasmparser" -version = "0.119.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c35daf77afb4f9b14016625144a391085ec2ca99ca9cc53ed291bb53ab5278d" -dependencies = [ - "bitflags 2.4.2", - "indexmap", - "semver", -] - -[[package]] -name = "wasmparser" -version = "0.121.2" +version = "0.208.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dbe55c8f9d0dbd25d9447a5a889ff90c0cc3feaa7395310d3d826b2c703eaab" +checksum = "dd921789c9dcc495f589cb37d200155dee65b4a4beeb853323b5e24e0a5f9c58" dependencies = [ - "bitflags 2.4.2", + "ahash", + "bitflags 2.5.0", + "hashbrown", "indexmap", "semver", + "serde", ] [[package]] name = "wasmprinter" -version = "0.2.76" +version = "0.208.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac2a7745372074e5573e365e17100f5a26058740576313784ef03fb900ea8d2" +checksum = "0700bdace4821e6c694617938500ae9999946df464bb13219c16570f8b6f202f" dependencies = [ "anyhow", - "wasmparser 0.119.0", + "wasmparser", ] [[package]] @@ -3281,14 +3577,34 @@ dependencies = [ [[package]] name = "winreg" -version = "0.50.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" dependencies = [ "cfg-if 1.0.0", "windows-sys 0.48.0", ] +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zeroize" version = "1.7.0" @@ -3311,12 +3627,31 @@ dependencies = [ [[package]] name = "zip" -version = "0.6.6" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +checksum = "1dd56a4d5921bc2f99947ac5b3abe5f510b1be7376fdc5e9fce4a23c6a93e87c" dependencies = [ - "byteorder", + "arbitrary", "crc32fast", "crossbeam-utils", + "displaydoc", "flate2", + "indexmap", + "memchr", + "thiserror", + "zopfli", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", ] diff --git a/Cargo.toml b/Cargo.toml index 0944e273b..ede6b6b07 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,4 +60,6 @@ members = [ "pause-all", "pause-all/meta", + + "dex/interactor" ] diff --git a/common/common_errors/Cargo.toml b/common/common_errors/Cargo.toml index 64926a87a..7da90bf8e 100644 --- a/common/common_errors/Cargo.toml +++ b/common/common_errors/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/common_structs/Cargo.toml b/common/common_structs/Cargo.toml index 7379b6b97..9129633d7 100644 --- a/common/common_structs/Cargo.toml +++ b/common/common_structs/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.mergeable] diff --git a/common/modules/farm/config/Cargo.toml b/common/modules/farm/config/Cargo.toml index 89f943416..bd5ca278a 100644 --- a/common/modules/farm/config/Cargo.toml +++ b/common/modules/farm/config/Cargo.toml @@ -23,5 +23,5 @@ path = "../../pausable" path = "../../permissions_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/farm/contexts/Cargo.toml b/common/modules/farm/contexts/Cargo.toml index fc43fa5e1..51d850b18 100644 --- a/common/modules/farm/contexts/Cargo.toml +++ b/common/modules/farm/contexts/Cargo.toml @@ -35,8 +35,8 @@ path = "../../pausable" path = "../../permissions_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" diff --git a/common/modules/farm/contexts/src/mod.rs b/common/modules/farm/contexts/src/mod.rs index e8f133eb6..a1ceed191 100644 --- a/common/modules/farm/contexts/src/mod.rs +++ b/common/modules/farm/contexts/src/mod.rs @@ -1,5 +1,4 @@ #![no_std] -#![feature(trait_alias)] pub mod claim_rewards_context; pub mod enter_farm_context; diff --git a/common/modules/farm/contexts/src/storage_cache.rs b/common/modules/farm/contexts/src/storage_cache.rs index 4e14ea2ec..76f4cfc1d 100644 --- a/common/modules/farm/contexts/src/storage_cache.rs +++ b/common/modules/farm/contexts/src/storage_cache.rs @@ -3,8 +3,15 @@ multiversx_sc::derive_imports!(); use pausable::State; -pub trait FarmContracTraitBounds = - config::ConfigModule + rewards::RewardsModule + farm_token::FarmTokenModule; +pub trait FarmContracTraitBounds: + config::ConfigModule + rewards::RewardsModule + farm_token::FarmTokenModule +{ +} + +impl FarmContracTraitBounds for T where + T: config::ConfigModule + rewards::RewardsModule + farm_token::FarmTokenModule +{ +} pub struct StorageCache<'a, C: FarmContracTraitBounds> { sc_ref: &'a C, diff --git a/common/modules/farm/events/Cargo.toml b/common/modules/farm/events/Cargo.toml index 96af56178..74b9a572b 100644 --- a/common/modules/farm/events/Cargo.toml +++ b/common/modules/farm/events/Cargo.toml @@ -14,5 +14,5 @@ path = "../../../common_structs" path = "../contexts" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/farm/farm_base_impl/Cargo.toml b/common/modules/farm/farm_base_impl/Cargo.toml index ff33b5860..dd38fd198 100644 --- a/common/modules/farm/farm_base_impl/Cargo.toml +++ b/common/modules/farm/farm_base_impl/Cargo.toml @@ -50,11 +50,11 @@ path = "../../../traits/mergeable" path = "../../../traits/fixed-supply-token" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/common/modules/farm/farm_base_impl/src/base_traits_impl.rs b/common/modules/farm/farm_base_impl/src/base_traits_impl.rs index f2ccc293c..fec015bc3 100644 --- a/common/modules/farm/farm_base_impl/src/base_traits_impl.rs +++ b/common/modules/farm/farm_base_impl/src/base_traits_impl.rs @@ -4,18 +4,31 @@ use common_structs::{FarmToken, FarmTokenAttributes, Nonce}; use config::ConfigModule; use contexts::storage_cache::StorageCache; use core::marker::PhantomData; +use farm_token::FarmTokenModule; use fixed_supply_token::FixedSupplyToken; use mergeable::Mergeable; use multiversx_sc_modules::transfer_role_proxy::PaymentsVec; use rewards::RewardsModule; -pub trait AllBaseFarmImplTraits = +pub trait AllBaseFarmImplTraits: rewards::RewardsModule + + config::ConfigModule + + farm_token::FarmTokenModule + + permissions_module::PermissionsModule + + pausable::PausableModule + + multiversx_sc_modules::default_issue_callbacks::DefaultIssueCallbacksModule +{ +} + +impl AllBaseFarmImplTraits for T where + T: rewards::RewardsModule + config::ConfigModule + farm_token::FarmTokenModule + permissions_module::PermissionsModule + pausable::PausableModule - + multiversx_sc_modules::default_issue_callbacks::DefaultIssueCallbacksModule; + + multiversx_sc_modules::default_issue_callbacks::DefaultIssueCallbacksModule +{ +} pub trait FarmContract { type FarmSc: AllBaseFarmImplTraits; @@ -30,8 +43,7 @@ pub trait FarmContract { + FixedSupplyToken<::Api> + FarmToken<::Api> + From::Api>> - + Into::Api>> = - FarmTokenAttributes<::Api>; + + Into::Api>>; #[inline] fn mint_rewards( @@ -259,4 +271,6 @@ where T: AllBaseFarmImplTraits, { type FarmSc = T; + + type AttributesType = FarmTokenAttributes<::Api>; } diff --git a/common/modules/farm/farm_base_impl/src/lib.rs b/common/modules/farm/farm_base_impl/src/lib.rs index f63df2820..00c0d2672 100644 --- a/common/modules/farm/farm_base_impl/src/lib.rs +++ b/common/modules/farm/farm_base_impl/src/lib.rs @@ -1,8 +1,5 @@ #![no_std] #![allow(clippy::too_many_arguments)] -#![feature(exact_size_is_empty)] -#![feature(trait_alias)] -#![feature(associated_type_defaults)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); diff --git a/common/modules/farm/farm_token/Cargo.toml b/common/modules/farm/farm_token/Cargo.toml index eaf015a78..2ef99529f 100644 --- a/common/modules/farm/farm_token/Cargo.toml +++ b/common/modules/farm/farm_token/Cargo.toml @@ -26,8 +26,8 @@ path = "../../pausable" path = "../../permissions_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" diff --git a/common/modules/farm/farm_token_merge/Cargo.toml b/common/modules/farm/farm_token_merge/Cargo.toml index 1b8ec9ee2..7680267e4 100644 --- a/common/modules/farm/farm_token_merge/Cargo.toml +++ b/common/modules/farm/farm_token_merge/Cargo.toml @@ -23,11 +23,11 @@ path = "../../token_merge_helper" path = "../farm_token" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/common/modules/farm/rewards/Cargo.toml b/common/modules/farm/rewards/Cargo.toml index 115cd04b3..755054ec5 100644 --- a/common/modules/farm/rewards/Cargo.toml +++ b/common/modules/farm/rewards/Cargo.toml @@ -29,8 +29,8 @@ path = "../../pausable" path = "../../permissions_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" diff --git a/common/modules/legacy_token_decode_module/Cargo.toml b/common/modules/legacy_token_decode_module/Cargo.toml index 5c12ba15d..6592fffbb 100644 --- a/common/modules/legacy_token_decode_module/Cargo.toml +++ b/common/modules/legacy_token_decode_module/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.common_structs] diff --git a/common/modules/locking_module/Cargo.toml b/common/modules/locking_module/Cargo.toml index 07b8719b7..f49f1af09 100644 --- a/common/modules/locking_module/Cargo.toml +++ b/common/modules/locking_module/Cargo.toml @@ -8,11 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] - -[dependencies.simple-lock] -path = "../../../locked-asset/simple-lock" - -[dependencies.energy-factory] -path = "../../../locked-asset/energy-factory" diff --git a/common/modules/locking_module/src/energy_factory_lock_proxy.rs b/common/modules/locking_module/src/energy_factory_lock_proxy.rs new file mode 100644 index 000000000..0dd9b143e --- /dev/null +++ b/common/modules/locking_module/src/energy_factory_lock_proxy.rs @@ -0,0 +1,89 @@ +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Locks a whitelisted token until `unlock_epoch` and receive meta ESDT LOCKED tokens + /// on a 1:1 ratio. Accepted input tokens: + /// - base asset token + /// - old factory token -> extends all periods to the provided option + /// - previously locked token -> extends period to the provided option + /// + /// Arguments: + /// - lock_epochs - Number of epochs for which the tokens are locked for. + /// Caller may only choose from the available options, + /// which can be seen by querying getLockOptions + /// - opt_destination - OPTIONAL: destination address for the LOCKED tokens. Default is caller. + /// + /// Output payment: LOCKED tokens + pub fn lock_tokens_endpoint< + Arg0: ProxyArg, + Arg1: ProxyArg>>, + >( + self, + lock_epochs: Arg0, + opt_destination: Arg1, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("lockTokens") + .argument(&lock_epochs) + .argument(&opt_destination) + .original_result() + } + + pub fn lock_virtual< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + >( + self, + token_id: Arg0, + amount: Arg1, + lock_epochs: Arg2, + dest_address: Arg3, + energy_address: Arg4, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("lockVirtual") + .argument(&token_id) + .argument(&amount) + .argument(&lock_epochs) + .argument(&dest_address) + .argument(&energy_address) + .original_result() + } +} diff --git a/common/modules/locking_module/src/lib.rs b/common/modules/locking_module/src/lib.rs index c567533d2..a7eb80fc3 100644 --- a/common/modules/locking_module/src/lib.rs +++ b/common/modules/locking_module/src/lib.rs @@ -1,4 +1,5 @@ #![no_std] +mod energy_factory_lock_proxy; pub mod lock_with_energy_module; pub mod locking_module; diff --git a/common/modules/locking_module/src/lock_with_energy_module.rs b/common/modules/locking_module/src/lock_with_energy_module.rs index cb7b02911..02503ab65 100644 --- a/common/modules/locking_module/src/lock_with_energy_module.rs +++ b/common/modules/locking_module/src/lock_with_energy_module.rs @@ -1,6 +1,6 @@ -multiversx_sc::imports!(); +use crate::energy_factory_lock_proxy; -use energy_factory::virtual_lock::ProxyTrait as _; +multiversx_sc::imports!(); #[multiversx_sc::module] pub trait LockWithEnergyModule { @@ -29,21 +29,16 @@ pub trait LockWithEnergyModule { energy_address: ManagedAddress, ) -> EsdtTokenPayment { let lock_epochs = self.lock_epochs().get(); - let mut proxy_instance = self.get_locking_sc_proxy_instance(); + let locking_sc_address = self.locking_sc_address().get(); - proxy_instance + self.tx() + .to(locking_sc_address) + .typed(energy_factory_lock_proxy::SimpleLockEnergyProxy) .lock_virtual(token_id, amount, lock_epochs, dest_address, energy_address) - .execute_on_dest_context() + .returns(ReturnsResult) + .sync_call() } - fn get_locking_sc_proxy_instance(&self) -> energy_factory::Proxy { - let locking_sc_address = self.locking_sc_address().get(); - self.locking_sc_proxy_obj(locking_sc_address) - } - - #[proxy] - fn locking_sc_proxy_obj(&self, sc_address: ManagedAddress) -> energy_factory::Proxy; - #[view(getLockingScAddress)] #[storage_mapper("lockingScAddress")] fn locking_sc_address(&self) -> SingleValueMapper; diff --git a/common/modules/locking_module/src/locking_module.rs b/common/modules/locking_module/src/locking_module.rs index 4b79a57af..2d4a941ad 100644 --- a/common/modules/locking_module/src/locking_module.rs +++ b/common/modules/locking_module/src/locking_module.rs @@ -1,3 +1,5 @@ +use crate::energy_factory_lock_proxy; + multiversx_sc::imports!(); #[multiversx_sc::module] @@ -45,22 +47,20 @@ pub trait LockingModule { amount: BigUint, ) -> EgldOrEsdtTokenPayment { let unlock_epoch = self.unlock_epoch().get(); - let mut proxy_instance = self.get_locking_sc_proxy_instance(); + let locking_sc_address = self.locking_sc_address().get(); - proxy_instance + let tokens = self + .tx() + .to(locking_sc_address) + .typed(energy_factory_lock_proxy::SimpleLockEnergyProxy) .lock_tokens_endpoint(unlock_epoch, opt_dest) - .with_egld_or_single_esdt_transfer((token_id, 0, amount)) - .execute_on_dest_context() - } + .egld_or_single_esdt(&token_id, 0, &amount) + .returns(ReturnsResult) + .sync_call(); - fn get_locking_sc_proxy_instance(&self) -> simple_lock::Proxy { - let locking_sc_address = self.locking_sc_address().get(); - self.locking_sc_proxy_obj(locking_sc_address) + EgldOrEsdtTokenPayment::from(tokens) } - #[proxy] - fn locking_sc_proxy_obj(&self, sc_address: ManagedAddress) -> simple_lock::Proxy; - #[view(getLockingScAddress)] #[storage_mapper("lockingScAddress")] fn locking_sc_address(&self) -> SingleValueMapper; diff --git a/common/modules/math/Cargo.toml b/common/modules/math/Cargo.toml index 830764e08..3988d2e7d 100644 --- a/common/modules/math/Cargo.toml +++ b/common/modules/math/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/pausable/Cargo.toml b/common/modules/pausable/Cargo.toml index 3668c2822..d902e2c3e 100644 --- a/common/modules/pausable/Cargo.toml +++ b/common/modules/pausable/Cargo.toml @@ -11,5 +11,5 @@ path = "src/pausable.rs" path = "../permissions_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/permissions_module/Cargo.toml b/common/modules/permissions_module/Cargo.toml index af71e2aef..4842ad364 100644 --- a/common/modules/permissions_module/Cargo.toml +++ b/common/modules/permissions_module/Cargo.toml @@ -17,5 +17,5 @@ bitflags = "2.4.1" path = "../../common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/permissions_module/src/permissions.rs b/common/modules/permissions_module/src/permissions.rs index 623c72718..c0e4ec205 100644 --- a/common/modules/permissions_module/src/permissions.rs +++ b/common/modules/permissions_module/src/permissions.rs @@ -1,6 +1,6 @@ use bitflags::bitflags; use multiversx_sc::{ - abi::TypeAbi, + abi::{TypeAbi, TypeAbiFrom}, codec::{DecodeError, TopDecode, TopEncode}, }; bitflags! { @@ -32,8 +32,16 @@ impl TopDecode for Permissions { } } +impl TypeAbiFrom for Permissions {} + impl TypeAbi for Permissions { + type Unmanaged = Self; + fn type_name() -> multiversx_sc::abi::TypeName { core::any::type_name::().into() } + + fn type_name_rust() -> multiversx_sc::abi::TypeName { + core::any::type_name::().into() + } } diff --git a/common/modules/permissions_module/src/permissions_module.rs b/common/modules/permissions_module/src/permissions_module.rs index 5853ca0da..38eab7fdd 100644 --- a/common/modules/permissions_module/src/permissions_module.rs +++ b/common/modules/permissions_module/src/permissions_module.rs @@ -1,6 +1,6 @@ #![no_std] -mod permissions; +pub mod permissions; use common_errors::ERROR_PERMISSION_DENIED; diff --git a/common/modules/sc_whitelist_module/Cargo.toml b/common/modules/sc_whitelist_module/Cargo.toml index 82e3e103a..ccd798c4d 100644 --- a/common/modules/sc_whitelist_module/Cargo.toml +++ b/common/modules/sc_whitelist_module/Cargo.toml @@ -11,5 +11,5 @@ path = "src/sc_whitelist_module.rs" path = "../../common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/token_merge_helper/Cargo.toml b/common/modules/token_merge_helper/Cargo.toml index 46795b0fc..010a21507 100644 --- a/common/modules/token_merge_helper/Cargo.toml +++ b/common/modules/token_merge_helper/Cargo.toml @@ -11,5 +11,5 @@ path = "src/lib.rs" path = "../../common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/token_send/Cargo.toml b/common/modules/token_send/Cargo.toml index 714272dea..53a40fe78 100644 --- a/common/modules/token_send/Cargo.toml +++ b/common/modules/token_send/Cargo.toml @@ -14,5 +14,5 @@ path = "../../common_structs" path = "../../common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/modules/token_send/src/token_send.rs b/common/modules/token_send/src/token_send.rs index aefee5cb3..19ef58030 100644 --- a/common/modules/token_send/src/token_send.rs +++ b/common/modules/token_send/src/token_send.rs @@ -18,7 +18,10 @@ pub trait TokenSendModule { } if !non_zero_payments.is_empty() { - self.send().direct_multi(destination, &non_zero_payments) + self.tx() + .to(destination) + .payment(non_zero_payments) + .transfer(); } } @@ -33,7 +36,10 @@ pub trait TokenSendModule { return; } - self.send().direct_esdt(to, token_id, token_nonce, amount); + self.tx() + .to(to) + .single_esdt(token_id, token_nonce, amount) + .transfer(); } fn send_payment_non_zero(&self, to: &ManagedAddress, payment: &EsdtTokenPayment) { diff --git a/common/modules/utils/Cargo.toml b/common/modules/utils/Cargo.toml index cc25d8fb1..a41870d58 100644 --- a/common/modules/utils/Cargo.toml +++ b/common/modules/utils/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.common_structs] diff --git a/common/traits/fixed-supply-token/Cargo.toml b/common/traits/fixed-supply-token/Cargo.toml index 951361da3..6b3762105 100644 --- a/common/traits/fixed-supply-token/Cargo.toml +++ b/common/traits/fixed-supply-token/Cargo.toml @@ -8,4 +8,4 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" diff --git a/common/traits/mergeable/Cargo.toml b/common/traits/mergeable/Cargo.toml index 5d21bb032..2a06c0d3a 100644 --- a/common/traits/mergeable/Cargo.toml +++ b/common/traits/mergeable/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/common/traits/unwrappable/Cargo.toml b/common/traits/unwrappable/Cargo.toml index abfe07baa..ee77373a5 100644 --- a/common/traits/unwrappable/Cargo.toml +++ b/common/traits/unwrappable/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/dex/Cargo.toml b/dex/Cargo.toml index 15911dec5..935490bf3 100644 --- a/dex/Cargo.toml +++ b/dex/Cargo.toml @@ -5,17 +5,17 @@ edition = "2021" publish = false [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.config] path = "../common/modules/farm/config" diff --git a/dex/farm-with-locked-rewards/Cargo.toml b/dex/farm-with-locked-rewards/Cargo.toml index 2f7981506..104b773a4 100644 --- a/dex/farm-with-locked-rewards/Cargo.toml +++ b/dex/farm-with-locked-rewards/Cargo.toml @@ -75,17 +75,17 @@ path = "../../locked-asset/energy-factory" path = "../../energy-integration/common-modules/energy-query" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.simple-lock] path = "../../locked-asset/simple-lock" diff --git a/dex/farm-with-locked-rewards/meta/Cargo.toml b/dex/farm-with-locked-rewards/meta/Cargo.toml index 804328648..16473ed9c 100644 --- a/dex/farm-with-locked-rewards/meta/Cargo.toml +++ b/dex/farm-with-locked-rewards/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/farm-with-locked-rewards/sc-config.toml b/dex/farm-with-locked-rewards/sc-config.toml new file mode 100644 index 000000000..ae510f3aa --- /dev/null +++ b/dex/farm-with-locked-rewards/sc-config.toml @@ -0,0 +1,2 @@ +[[proxy]] +path = "../interactor/proxies/src/farm_with_locked_rewards_proxy.rs" diff --git a/dex/farm-with-locked-rewards/src/lib.rs b/dex/farm-with-locked-rewards/src/lib.rs index d704a80df..e47aa331b 100644 --- a/dex/farm-with-locked-rewards/src/lib.rs +++ b/dex/farm-with-locked-rewards/src/lib.rs @@ -1,6 +1,5 @@ #![no_std] #![allow(clippy::too_many_arguments)] -#![feature(exact_size_is_empty)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); diff --git a/dex/farm-with-locked-rewards/wasm/Cargo.lock b/dex/farm-with-locked-rewards/wasm/Cargo.lock index 8cdfe8576..352a2313e 100644 --- a/dex/farm-with-locked-rewards/wasm/Cargo.lock +++ b/dex/farm-with-locked-rewards/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -294,9 +294,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -315,32 +313,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -350,9 +350,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -363,18 +363,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -390,9 +390,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -432,18 +432,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -492,15 +492,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -530,6 +530,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/farm-with-locked-rewards/wasm/Cargo.toml b/dex/farm-with-locked-rewards/wasm/Cargo.toml index 6a907bd28..0771738f2 100644 --- a/dex/farm-with-locked-rewards/wasm/Cargo.toml +++ b/dex/farm-with-locked-rewards/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.farm-with-locked-rewards] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/farm-with-locked-rewards/wasm/src/lib.rs b/dex/farm-with-locked-rewards/wasm/src/lib.rs index c3aaf7509..37561d256 100644 --- a/dex/farm-with-locked-rewards/wasm/src/lib.rs +++ b/dex/farm-with-locked-rewards/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 68 +// Upgrade: 1 +// Endpoints: 67 // Async Callback: 1 // Total number of exported functions: 70 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/farm/Cargo.toml b/dex/farm/Cargo.toml index 411855d62..ce6346234 100644 --- a/dex/farm/Cargo.toml +++ b/dex/farm/Cargo.toml @@ -69,11 +69,11 @@ path = "../../energy-integration/common-modules/weekly-rewards-splitting" path = "../../energy-integration/common-modules/energy-query" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies] num-bigint = "0.4.2" @@ -82,7 +82,7 @@ num-bigint = "0.4.2" path = "../../energy-integration/energy-update" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.energy-factory-mock] path = "../../energy-integration/energy-factory-mock" diff --git a/dex/farm/meta/Cargo.toml b/dex/farm/meta/Cargo.toml index 396e12099..ea4b6ab3f 100644 --- a/dex/farm/meta/Cargo.toml +++ b/dex/farm/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/farm/src/exit_penalty.rs b/dex/farm/src/exit_penalty.rs index 19f101a26..1c4c34ea1 100644 --- a/dex/farm/src/exit_penalty.rs +++ b/dex/farm/src/exit_penalty.rs @@ -2,9 +2,8 @@ multiversx_sc::imports!(); use common_errors::ERROR_PARAMETERS; use common_structs::Epoch; -use pair::pair_actions::remove_liq::ProxyTrait as _; -use crate::MAX_PERCENT; +use crate::{pair_proxy, MAX_PERCENT}; pub const DEFAULT_PENALTY_PERCENT: u64 = 100; pub const DEFAULT_MINUMUM_FARMING_EPOCHS: u64 = 3; @@ -47,17 +46,17 @@ pub trait ExitPenaltyModule: permissions_module::PermissionsModule { .esdt_local_burn(farming_token_id, 0, farming_amount); } else { let gas_limit = self.burn_gas_limit().get(); - self.pair_contract_proxy(pair_contract_address) + + self.tx() + .to(&pair_contract_address) + .typed(pair_proxy::PairProxy) .remove_liquidity_and_burn_token(reward_token_id.clone()) - .with_esdt_transfer((farming_token_id.clone(), 0, farming_amount.clone())) - .with_gas_limit(gas_limit) + .single_esdt(farming_token_id, 0, farming_amount) + .gas(gas_limit) .transfer_execute(); } } - #[proxy] - fn pair_contract_proxy(&self, to: ManagedAddress) -> pair::Proxy; - #[view(getPenaltyPercent)] #[storage_mapper("penalty_percent")] fn penalty_percent(&self) -> SingleValueMapper; diff --git a/dex/farm/src/lib.rs b/dex/farm/src/lib.rs index 1a35c1631..ceabcc191 100644 --- a/dex/farm/src/lib.rs +++ b/dex/farm/src/lib.rs @@ -1,12 +1,12 @@ #![no_std] #![allow(clippy::too_many_arguments)] -#![feature(exact_size_is_empty)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); pub mod base_functions; pub mod exit_penalty; +pub mod pair_proxy; use base_functions::{ClaimRewardsResultType, DoubleMultiPayment, Wrapper}; use common_structs::FarmTokenAttributes; diff --git a/dex/farm/src/pair_proxy.rs b/dex/farm/src/pair_proxy.rs new file mode 100644 index 000000000..9c5ffb78c --- /dev/null +++ b/dex/farm/src/pair_proxy.rs @@ -0,0 +1,46 @@ +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn remove_liquidity_and_burn_token>>( + self, + token_to_buyback_and_burn: Arg0, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("removeLiquidityAndBuyBackAndBurnToken") + .argument(&token_to_buyback_and_burn) + .original_result() + } +} diff --git a/dex/farm/wasm/Cargo.lock b/dex/farm/wasm/Cargo.lock index 98035925c..9843cebcf 100644 --- a/dex/farm/wasm/Cargo.lock +++ b/dex/farm/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -264,9 +264,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -285,32 +283,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -320,9 +320,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -333,18 +333,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -360,9 +360,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -402,18 +402,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -462,15 +462,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -500,6 +500,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/farm/wasm/Cargo.toml b/dex/farm/wasm/Cargo.toml index f2c3e3d7b..e50d6f005 100644 --- a/dex/farm/wasm/Cargo.toml +++ b/dex/farm/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.farm] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/farm/wasm/src/lib.rs b/dex/farm/wasm/src/lib.rs index c129590b3..60fe520f8 100644 --- a/dex/farm/wasm/src/lib.rs +++ b/dex/farm/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 65 +// Upgrade: 1 +// Endpoints: 64 // Async Callback: 1 // Total number of exported functions: 67 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/fuzz/Cargo.toml b/dex/fuzz/Cargo.toml index c88fdb5fe..08e10a006 100644 --- a/dex/fuzz/Cargo.toml +++ b/dex/fuzz/Cargo.toml @@ -12,11 +12,11 @@ num-bigint = "0.4.2" rand = "0.8.4" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dependencies.pausable] path = "../../common/modules/pausable" diff --git a/dex/governance/Cargo.toml b/dex/governance/Cargo.toml index 8488415a5..42115e47a 100644 --- a/dex/governance/Cargo.toml +++ b/dex/governance/Cargo.toml @@ -9,14 +9,14 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.pair-mock] path = "../pair-mock" diff --git a/dex/governance/meta/Cargo.toml b/dex/governance/meta/Cargo.toml index 89991cea1..6f62ebee8 100644 --- a/dex/governance/meta/Cargo.toml +++ b/dex/governance/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/governance/src/lib.rs b/dex/governance/src/lib.rs index 460aabcda..58d9f0088 100644 --- a/dex/governance/src/lib.rs +++ b/dex/governance/src/lib.rs @@ -9,6 +9,7 @@ multiversx_sc::derive_imports!(); pub mod config; pub mod errors; mod events; +pub mod price_provider_proxy; pub mod proposal; mod validation; pub mod vote; diff --git a/dex/governance/src/price_provider_proxy.rs b/dex/governance/src/price_provider_proxy.rs new file mode 100644 index 000000000..b38d40cf1 --- /dev/null +++ b/dex/governance/src/price_provider_proxy.rs @@ -0,0 +1,52 @@ +use multiversx_sc::proxy_imports::*; + +pub struct PriceProviderProxy; + +impl TxProxyTrait for PriceProviderProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PriceProviderProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PriceProviderProxyMethods { wrapped_tx: tx } + } +} + +pub struct PriceProviderProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl PriceProviderProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn get_tokens_for_given_position_with_safe_price>>( + self, + liquidity: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("getTokensForGivenPositionWithSafePrice") + .argument(&liquidity) + .original_result() + } +} diff --git a/dex/governance/src/proposal.rs b/dex/governance/src/proposal.rs index 3a80c60bd..2c641d688 100644 --- a/dex/governance/src/proposal.rs +++ b/dex/governance/src/proposal.rs @@ -103,10 +103,11 @@ pub trait ProposalHelper: config::Config { } fn execute_action(&self, action: &Action) -> Result<(), &'static [u8]> { - self.send() - .contract_call::<()>(action.dest_address.clone(), action.endpoint_name.clone()) - .with_raw_arguments(ManagedArgBuffer::from(action.arguments.clone())) - .with_gas_limit(action.gas_limit) + self.tx() + .to(&action.dest_address) + .raw_call(action.endpoint_name.clone()) + .arguments_raw(action.arguments.clone().into()) + .gas(action.gas_limit) .transfer_execute(); Result::Ok(()) // ContractCallNoPayment::new() diff --git a/dex/governance/src/weight.rs b/dex/governance/src/weight.rs index 07b075f95..f3c46f5c2 100644 --- a/dex/governance/src/weight.rs +++ b/dex/governance/src/weight.rs @@ -1,19 +1,7 @@ multiversx_sc::imports!(); use crate::config; - -mod price_provider_proxy { - multiversx_sc::imports!(); - - #[multiversx_sc::proxy] - pub trait PriceProvider { - #[endpoint(getTokensForGivenPositionWithSafePrice)] - fn get_tokens_for_given_position_with_safe_price( - &self, - liquidity: BigUint, - ) -> MultiValue2, EsdtTokenPayment>; - } -} +use crate::price_provider_proxy; #[multiversx_sc::module] pub trait Lib: config::Config { @@ -25,10 +13,14 @@ pub trait Lib: config::Config { } if let Some(provider) = self.price_providers().get(&payment.token_identifier) { - let call_result: MultiValue2, EsdtTokenPayment> = - self.price_provider_proxy(provider) - .get_tokens_for_given_position_with_safe_price(payment.amount.clone()) - .execute_on_dest_context(); + let call_result = self + .tx() + .to(&provider) + .typed(price_provider_proxy::PriceProviderProxy) + .get_tokens_for_given_position_with_safe_price(payment.amount.clone()) + .returns(ReturnsResult) + .sync_call(); + let (token1, token2) = call_result.into_tuple(); if token1.token_identifier == mex_token_id { @@ -44,14 +36,9 @@ pub trait Lib: config::Config { } fn send_back(&self, payment: EsdtTokenPayment) { - self.send().direct_esdt( - &self.blockchain().get_caller(), - &payment.token_identifier, - payment.token_nonce, - &payment.amount, - ); + self.tx() + .to(&self.blockchain().get_caller()) + .payment(payment) + .transfer(); } - - #[proxy] - fn price_provider_proxy(&self, to: ManagedAddress) -> price_provider_proxy::Proxy; } diff --git a/dex/governance/wasm/Cargo.lock b/dex/governance/wasm/Cargo.lock index 9fff7d29b..6aa002681 100644 --- a/dex/governance/wasm/Cargo.lock +++ b/dex/governance/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "endian-type" @@ -55,32 +55,34 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -90,9 +92,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -103,9 +105,9 @@ dependencies = [ [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -121,27 +123,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -158,15 +160,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -178,3 +180,9 @@ name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" diff --git a/dex/governance/wasm/Cargo.toml b/dex/governance/wasm/Cargo.toml index 773f97944..86f8e37ef 100644 --- a/dex/governance/wasm/Cargo.toml +++ b/dex/governance/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.governance] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/governance/wasm/src/lib.rs b/dex/governance/wasm/src/lib.rs index 913c84bba..8e699c12c 100644 --- a/dex/governance/wasm/src/lib.rs +++ b/dex/governance/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 22 +// Upgrade: 1 +// Endpoints: 21 // Async Callback (empty): 1 // Total number of exported functions: 24 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/interactor/.gitignore b/dex/interactor/.gitignore new file mode 100644 index 000000000..7b3374d58 --- /dev/null +++ b/dex/interactor/.gitignore @@ -0,0 +1,5 @@ +# Pem files are used for interactions, but shouldn't be committed +*.pem + +# Trace file of interactor tooling +interactor*.scen.json diff --git a/dex/interactor/Cargo.toml b/dex/interactor/Cargo.toml new file mode 100644 index 000000000..1917d90d3 --- /dev/null +++ b/dex/interactor/Cargo.toml @@ -0,0 +1,39 @@ +[[bin]] +name = "interactor" +path = "src/dex_interact.rs" + +[package] +name = "interactor" +version = "0.0.0" +authors = [""] +edition = "2021" +publish = false + +[dependencies] +toml = "0.8.6" + +[dependencies.clap] +version = "4.4.7" +features = ["derive"] + +[dependencies.serde] +version = "1.0" +features = ["derive"] + +[dependencies.multiversx-sc] +version = "=0.50.3" + +[dependencies.multiversx-sc-modules] +version = "=0.50.3" + +[dependencies.multiversx-sc-snippets] +version = "=0.50.3" + +[dependencies.multiversx-sc-scenario] +version = "=0.50.3" + +[dependencies.proxies] +path = "proxies" + +[dependencies.common_structs] +path = "../../common/common_structs" diff --git a/dex/interactor/config.toml b/dex/interactor/config.toml new file mode 100644 index 000000000..d3f5add34 --- /dev/null +++ b/dex/interactor/config.toml @@ -0,0 +1 @@ +gateway = 'https://devnet-gateway.multiversx.com' \ No newline at end of file diff --git a/dex/interactor/proxies/Cargo.toml b/dex/interactor/proxies/Cargo.toml new file mode 100644 index 000000000..a20177922 --- /dev/null +++ b/dex/interactor/proxies/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "proxies" +version = "0.0.0" +authors = [""] +edition = "2021" + +[lib] +path = "src/lib.rs" + +[dependencies.multiversx-sc] +version = "=0.50.3" + +[dependencies.multiversx-sc-scenario] +version = "=0.50.3" + +[dependencies.common_structs] +path = "../../../common/common_structs" + +[dependencies.permissions_module] +path = "../../../common/modules/permissions_module" + +[dependencies.pausable] +path = "../../../common/modules/pausable" + +[dependencies.farm-boosted-yields] +path = "../../../energy-integration/farm-boosted-yields" + +[dependencies.energy-factory] +path = "../../../locked-asset/energy-factory" + +[dependencies.config] +path = "../../../common/modules/farm/config" + +[dependencies.weekly-rewards-splitting] +path = "../../../energy-integration/common-modules/weekly-rewards-splitting" diff --git a/dex/interactor/proxies/src/energy_factory_proxy.rs b/dex/interactor/proxies/src/energy_factory_proxy.rs new file mode 100644 index 000000000..d594b83d7 --- /dev/null +++ b/dex/interactor/proxies/src/energy_factory_proxy.rs @@ -0,0 +1,599 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + /// Args: + /// - base_asset_token_id: The only token that is accepted for the lockTokens endpoint. + /// NOTE: The SC also needs the ESDTLocalMint and ESDTLocalBurn roles for this token. + /// - legacy_token_id: The token ID of the old locked asset. + /// NOTE: The SC also needs the NFTBurn role for this token. + /// - old_locked_asset_factory_address + /// - min_migrated_token_locked_period - The minimum number of epochs that + /// a migrated old LKMEX token will be locked for after the average is calculated + /// - lock_options: See `addLockOptions` endpoint doc for details. + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg, + Arg4: ProxyArg>>, + >( + self, + base_asset_token_id: Arg0, + legacy_token_id: Arg1, + old_locked_asset_factory_address: Arg2, + min_migrated_token_locked_period: Arg3, + lock_options: Arg4, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&base_asset_token_id) + .argument(&legacy_token_id) + .argument(&old_locked_asset_factory_address) + .argument(&min_migrated_token_locked_period) + .argument(&lock_options) + .original_result() + } +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Locks a whitelisted token until `unlock_epoch` and receive meta ESDT LOCKED tokens + /// on a 1:1 ratio. Accepted input tokens: + /// - base asset token + /// - old factory token -> extends all periods to the provided option + /// - previously locked token -> extends period to the provided option + /// + /// Arguments: + /// - lock_epochs - Number of epochs for which the tokens are locked for. + /// Caller may only choose from the available options, + /// which can be seen by querying getLockOptions + /// - opt_destination - OPTIONAL: destination address for the LOCKED tokens. Default is caller. + /// + /// Output payment: LOCKED tokens + pub fn lock_tokens_endpoint< + Arg0: ProxyArg, + Arg1: ProxyArg>>, + >( + self, + lock_epochs: Arg0, + opt_destination: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("lockTokens") + .argument(&lock_epochs) + .argument(&opt_destination) + .original_result() + } + + /// Unlock tokens, previously locked with the `lockTokens` endpoint + /// + /// Expected payments: LOCKED tokens + /// + /// Output payments: the originally locked tokens + pub fn unlock_tokens_endpoint( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("unlockTokens") + .original_result() + } + + /// Used internally by proxy-dex + pub fn extend_lock_period< + Arg0: ProxyArg, + Arg1: ProxyArg>, + >( + self, + lock_epochs: Arg0, + user: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("extendLockPeriod") + .argument(&lock_epochs) + .argument(&user) + .original_result() + } + + pub fn issue_locked_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + >( + self, + token_display_name: Arg0, + token_ticker: Arg1, + num_decimals: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("issueLockedToken") + .argument(&token_display_name) + .argument(&token_ticker) + .argument(&num_decimals) + .original_result() + } + + pub fn locked_token( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockedTokenId") + .original_result() + } + + pub fn base_asset_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBaseAssetTokenId") + .original_result() + } + + pub fn legacy_locked_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLegacyLockedTokenId") + .original_result() + } + + pub fn get_updated_energy_entry_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyEntryForUser") + .argument(&user) + .original_result() + } + + pub fn get_energy_amount_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyAmountForUser") + .argument(&user) + .original_result() + } + + /// Add lock options, as pairs of epochs and penalty percentages. + /// lock epochs must be >= 360 epochs (1 year), + /// percentages must be between 0 and 10_000 + /// Additionally, percentages must increase as lock period increases. + /// + /// For example, an option pair of "360, 100" means the user can choose to lock their tokens + /// for 360 epochs, and if they were to unlock the immediately, + /// they would incur a penalty of 1%. + /// + /// When calling lockTokens, or reducing lock periods, + /// users may only pick one of the whitelisted lock options. + pub fn add_lock_options< + Arg0: ProxyArg>>, + >( + self, + new_lock_options: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addLockOptions") + .argument(&new_lock_options) + .original_result() + } + + pub fn get_lock_options_view( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockOptions") + .original_result() + } + + /// Unlock a locked token instantly. This incures a penalty. + /// The longer the remaining locking time, the bigger the penalty. + /// Tokens can be unlocked through another SC after the unbond period has passed. + pub fn unlock_early( + self, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("unlockEarly") + .original_result() + } + + /// Reduce the locking period of a locked token. This incures a penalty. + /// The longer the reduction, the bigger the penalty. + /// new_lock_period must be one of the available lock options + pub fn reduce_lock_period< + Arg0: ProxyArg, + >( + self, + new_lock_period: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("reduceLockPeriod") + .argument(&new_lock_period) + .original_result() + } + + /// Calculates the penalty that would be incurred if `token_amount` tokens + /// were to have their lock epochs reduced from `prev_lock_epochs` to + /// `new_lock_epochs`. For full unlock, `new_lock_epochs` should be 0. + pub fn calculate_penalty_amount< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + >( + self, + token_amount: Arg0, + prev_lock_epochs: Arg1, + new_lock_epochs: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPenaltyAmount") + .argument(&token_amount) + .argument(&prev_lock_epochs) + .argument(&new_lock_epochs) + .original_result() + } + + /// - token_unstake_address - The address of the SC that will handle the unbond logic + /// By default, all tokens go through an unbond period after unlock + pub fn set_token_unstake_address< + Arg0: ProxyArg>, + >( + self, + sc_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setTokenUnstakeAddress") + .argument(&sc_address) + .original_result() + } + + pub fn revert_unstake< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + new_energy: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("revertUnstake") + .argument(&user) + .argument(&new_energy) + .original_result() + } + + pub fn token_unstake_sc_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTokenUnstakeScAddress") + .original_result() + } + + /// Sets the energy amounts and token amounts for users. Overwrites any existing values. + /// Expects any number of pairs of (user address, token amount, energy amount). + pub fn set_energy_for_old_tokens< + Arg0: ProxyArg, BigUint, BigInt>>>, + >( + self, + users_energy: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setEnergyForOldTokens") + .argument(&users_energy) + .original_result() + } + + pub fn update_energy_after_old_token_unlock< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + original_caller: Arg0, + initial_epoch_amount_pairs: Arg1, + final_epoch_amount_pairs: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateEnergyAfterOldTokenUnlock") + .argument(&original_caller) + .argument(&initial_epoch_amount_pairs) + .argument(&final_epoch_amount_pairs) + .original_result() + } + + pub fn migrate_old_tokens( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .raw_call("migrateOldTokens") + .original_result() + } + + pub fn pause_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn unpause_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("unpause") + .original_result() + } + + pub fn paused_status( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isPaused") + .original_result() + } + + /// Sets the transfer role for the given address. Defaults to own address. + pub fn set_transfer_role< + Arg0: ProxyArg>>, + >( + self, + opt_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setTransferRoleLockedToken") + .argument(&opt_address) + .original_result() + } + + /// Sets the burn role for the given address + pub fn set_burn_role< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBurnRoleLockedToken") + .argument(&address) + .original_result() + } + + pub fn merge_tokens_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_original_caller: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("mergeTokens") + .argument(&opt_original_caller) + .original_result() + } + + pub fn lock_virtual< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + >( + self, + token_id: Arg0, + amount: Arg1, + lock_epochs: Arg2, + dest_address: Arg3, + energy_address: Arg4, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("lockVirtual") + .argument(&token_id) + .argument(&amount) + .argument(&lock_epochs) + .argument(&dest_address) + .argument(&energy_address) + .original_result() + } + + pub fn add_sc_address_to_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addSCAddressToWhitelist") + .argument(&address) + .original_result() + } + + pub fn remove_sc_address_from_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeSCAddressFromWhitelist") + .argument(&address) + .original_result() + } + + pub fn is_sc_address_whitelisted< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isSCAddressWhitelisted") + .argument(&address) + .original_result() + } + + pub fn add_to_token_transfer_whitelist< + Arg0: ProxyArg>>, + >( + self, + sc_addresses: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToTokenTransferWhitelist") + .argument(&sc_addresses) + .original_result() + } + + pub fn remove_from_token_transfer_whitelist< + Arg0: ProxyArg>>, + >( + self, + sc_addresses: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromTokenTransferWhitelist") + .argument(&sc_addresses) + .original_result() + } + + pub fn set_user_energy_after_locked_token_transfer< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + energy: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setUserEnergyAfterLockedTokenTransfer") + .argument(&user) + .argument(&energy) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode, NestedEncode, NestedDecode, Clone, PartialEq, Debug)] +pub struct Energy +where + Api: ManagedTypeApi, +{ + pub amount: BigInt, + pub last_update_epoch: u64, + pub total_locked_tokens: BigUint, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct LockOption { + pub lock_epochs: u64, + pub penalty_start_percentage: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct EnergyUpdatedEvent +where + Api: ManagedTypeApi, +{ + pub old_energy_entry: Energy, + pub new_energy_entry: Energy, +} diff --git a/dex/interactor/proxies/src/farm_staking_proxy_sc_proxy.rs b/dex/interactor/proxies/src/farm_staking_proxy_sc_proxy.rs new file mode 100644 index 000000000..83461b9b7 --- /dev/null +++ b/dex/interactor/proxies/src/farm_staking_proxy_sc_proxy.rs @@ -0,0 +1,335 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmStakingProxyProxy; + +impl TxProxyTrait for FarmStakingProxyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmStakingProxyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmStakingProxyProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmStakingProxyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl FarmStakingProxyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + Arg5: ProxyArg>, + Arg6: ProxyArg>, + Arg7: ProxyArg>, + >( + self, + energy_factory_address: Arg0, + lp_farm_address: Arg1, + staking_farm_address: Arg2, + pair_address: Arg3, + staking_token_id: Arg4, + lp_farm_token_id: Arg5, + staking_farm_token_id: Arg6, + lp_token_id: Arg7, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&energy_factory_address) + .argument(&lp_farm_address) + .argument(&staking_farm_address) + .argument(&pair_address) + .argument(&staking_token_id) + .argument(&lp_farm_token_id) + .argument(&staking_farm_token_id) + .argument(&lp_token_id) + .original_result() + } +} + +#[rustfmt::skip] +impl FarmStakingProxyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl FarmStakingProxyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn register_dual_yield_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + >( + self, + token_display_name: Arg0, + token_ticker: Arg1, + num_decimals: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("registerDualYieldToken") + .argument(&token_display_name) + .argument(&token_ticker) + .argument(&num_decimals) + .original_result() + } + + pub fn dual_yield_token( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getDualYieldTokenId") + .original_result() + } + + pub fn lp_farm_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpFarmAddress") + .original_result() + } + + pub fn staking_farm_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getStakingFarmAddress") + .original_result() + } + + pub fn pair_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPairAddress") + .original_result() + } + + pub fn staking_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getStakingTokenId") + .original_result() + } + + pub fn staking_farm_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmTokenId") + .original_result() + } + + pub fn lp_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokenId") + .original_result() + } + + pub fn lp_farm_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpFarmTokenId") + .original_result() + } + + pub fn set_energy_factory_address< + Arg0: ProxyArg>, + >( + self, + sc_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setEnergyFactoryAddress") + .argument(&sc_address) + .original_result() + } + + pub fn energy_factory_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyFactoryAddress") + .original_result() + } + + pub fn add_sc_address_to_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addSCAddressToWhitelist") + .argument(&address) + .original_result() + } + + pub fn remove_sc_address_from_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeSCAddressFromWhitelist") + .argument(&address) + .original_result() + } + + pub fn is_sc_address_whitelisted< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isSCAddressWhitelisted") + .argument(&address) + .original_result() + } + + pub fn stake_farm_tokens< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("stakeFarmTokens") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_dual_yield_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("claimDualYield") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn unstake_farm_tokens< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>>, + >( + self, + pair_first_token_min_amount: Arg0, + pair_second_token_min_amount: Arg1, + opt_orig_caller: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("unstakeFarmTokens") + .argument(&pair_first_token_min_amount) + .argument(&pair_second_token_min_amount) + .argument(&opt_orig_caller) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct StakeProxyResult +where + Api: ManagedTypeApi, +{ + pub dual_yield_tokens: EsdtTokenPayment, + pub staking_boosted_rewards: EsdtTokenPayment, + pub lp_farm_boosted_rewards: EsdtTokenPayment, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct ClaimDualYieldResult +where + Api: ManagedTypeApi, +{ + pub lp_farm_rewards: EsdtTokenPayment, + pub staking_farm_rewards: EsdtTokenPayment, + pub new_dual_yield_tokens: EsdtTokenPayment, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct UnstakeResult +where + Api: ManagedTypeApi, +{ + pub other_token_payment: EsdtTokenPayment, + pub lp_farm_rewards: EsdtTokenPayment, + pub staking_rewards: EsdtTokenPayment, + pub unbond_staking_farm_token: EsdtTokenPayment, +} diff --git a/dex/interactor/proxies/src/farm_staking_sc_proxy.rs b/dex/interactor/proxies/src/farm_staking_sc_proxy.rs new file mode 100644 index 000000000..63a0bc9ab --- /dev/null +++ b/dex/interactor/proxies/src/farm_staking_sc_proxy.rs @@ -0,0 +1,919 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmStakingProxy; + +impl TxProxyTrait for FarmStakingProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmStakingProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmStakingProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmStakingProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl FarmStakingProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg, + Arg4: ProxyArg>, + Arg5: ProxyArg>>, + >( + self, + farming_token_id: Arg0, + division_safety_constant: Arg1, + max_apr: Arg2, + min_unbond_epochs: Arg3, + owner: Arg4, + admins: Arg5, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&farming_token_id) + .argument(&division_safety_constant) + .argument(&max_apr) + .argument(&min_unbond_epochs) + .argument(&owner) + .argument(&admins) + .original_result() + } +} + +#[rustfmt::skip] +impl FarmStakingProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl FarmStakingProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn merge_farm_tokens_endpoint( + self, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("mergeFarmTokens") + .original_result() + } + + pub fn set_boosted_yields_rewards_percentage< + Arg0: ProxyArg, + >( + self, + percentage: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBoostedYieldsRewardsPercentage") + .argument(&percentage) + .original_result() + } + + pub fn calculate_rewards_for_given_position< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + farm_token_amount: Arg0, + attributes: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("calculateRewardsForGivenPosition") + .argument(&farm_token_amount) + .argument(&attributes) + .original_result() + } + + pub fn top_up_rewards( + self, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("topUpRewards") + .original_result() + } + + pub fn withdraw_rewards< + Arg0: ProxyArg>, + >( + self, + withdraw_amount: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("withdrawRewards") + .argument(&withdraw_amount) + .original_result() + } + + pub fn end_produce_rewards( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("endProduceRewards") + .original_result() + } + + pub fn set_per_block_rewards< + Arg0: ProxyArg>, + >( + self, + per_block_amount: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setPerBlockRewardAmount") + .argument(&per_block_amount) + .original_result() + } + + pub fn set_max_apr< + Arg0: ProxyArg>, + >( + self, + max_apr: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setMaxApr") + .argument(&max_apr) + .original_result() + } + + pub fn set_min_unbond_epochs_endpoint< + Arg0: ProxyArg, + >( + self, + min_unbond_epochs: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setMinUnbondEpochs") + .argument(&min_unbond_epochs) + .original_result() + } + + pub fn start_produce_rewards_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("startProduceRewards") + .original_result() + } + + pub fn accumulated_rewards( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAccumulatedRewards") + .original_result() + } + + pub fn reward_capacity( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardCapacity") + .original_result() + } + + pub fn max_annual_percentage_rewards( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAnnualPercentageRewards") + .original_result() + } + + pub fn min_unbond_epochs( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getMinUnbondEpochs") + .original_result() + } + + pub fn reward_per_share( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardPerShare") + .original_result() + } + + pub fn reward_reserve( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardReserve") + .original_result() + } + + pub fn allow_external_claim_boosted_rewards< + Arg0: ProxyArg, + >( + self, + allow_external_claim: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("allowExternalClaimBoostedRewards") + .argument(&allow_external_claim) + .original_result() + } + + pub fn get_allow_external_claim_rewards< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAllowExternalClaimRewards") + .argument(&user) + .original_result() + } + + pub fn farming_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmingTokenId") + .original_result() + } + + pub fn reward_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardTokenId") + .original_result() + } + + pub fn per_block_reward_amount( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPerBlockRewardAmount") + .original_result() + } + + pub fn last_reward_block_nonce( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastRewardBlockNonce") + .original_result() + } + + pub fn division_safety_constant( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getDivisionSafetyConstant") + .original_result() + } + + pub fn user_total_farm_position< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUserTotalFarmPosition") + .argument(&user) + .original_result() + } + + pub fn farm_position_migration_nonce( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmPositionMigrationNonce") + .original_result() + } + + pub fn register_farm_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + >( + self, + token_display_name: Arg0, + token_ticker: Arg1, + num_decimals: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("registerFarmToken") + .argument(&token_display_name) + .argument(&token_ticker) + .argument(&num_decimals) + .original_result() + } + + pub fn farm_token( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmTokenId") + .original_result() + } + + pub fn farm_token_supply( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmTokenSupply") + .original_result() + } + + pub fn add_sc_address_to_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addSCAddressToWhitelist") + .argument(&address) + .original_result() + } + + pub fn remove_sc_address_from_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeSCAddressFromWhitelist") + .argument(&address) + .original_result() + } + + pub fn is_sc_address_whitelisted< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isSCAddressWhitelisted") + .argument(&address) + .original_result() + } + + pub fn add_to_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn remove_from_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn pause( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn resume( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("resume") + .original_result() + } + + pub fn state( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getState") + .original_result() + } + + pub fn add_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addAdmin") + .argument(&address) + .original_result() + } + + pub fn remove_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeAdmin") + .argument(&address) + .original_result() + } + + pub fn update_owner_or_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + previous_owner: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateOwnerOrAdmin") + .argument(&previous_owner) + .original_result() + } + + pub fn permissions< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPermissions") + .argument(&address) + .original_result() + } + + pub fn set_burn_role_for_address< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBurnRoleForAddress") + .argument(&address) + .original_result() + } + + pub fn stake_farm_through_proxy< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + staked_token_amount: Arg0, + original_caller: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("stakeFarmThroughProxy") + .argument(&staked_token_amount) + .argument(&original_caller) + .original_result() + } + + pub fn stake_farm_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_original_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("stakeFarm") + .argument(&opt_original_caller) + .original_result() + } + + pub fn claim_rewards< + Arg0: ProxyArg>>, + >( + self, + opt_original_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("claimRewards") + .argument(&opt_original_caller) + .original_result() + } + + pub fn claim_rewards_with_new_value< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + new_farming_amount: Arg0, + original_caller: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("claimRewardsWithNewValue") + .argument(&new_farming_amount) + .argument(&original_caller) + .original_result() + } + + pub fn compound_rewards( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("compoundRewards") + .original_result() + } + + pub fn unstake_farm< + Arg0: ProxyArg>>, + >( + self, + opt_original_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("unstakeFarm") + .argument(&opt_original_caller) + .original_result() + } + + pub fn unstake_farm_through_proxy< + Arg0: ProxyArg>, + >( + self, + original_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("unstakeFarmThroughProxy") + .argument(&original_caller) + .original_result() + } + + pub fn unbond_farm( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("unbondFarm") + .original_result() + } + + pub fn claim_boosted_rewards< + Arg0: ProxyArg>>, + >( + self, + opt_user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("claimBoostedRewards") + .argument(&opt_user) + .original_result() + } + + pub fn collect_undistributed_boosted_rewards( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("collectUndistributedBoostedRewards") + .original_result() + } + + pub fn boosted_yields_rewards_percentage( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBoostedYieldsRewardsPercentage") + .original_result() + } + + pub fn accumulated_rewards_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAccumulatedRewardsForWeek") + .argument(&week) + .original_result() + } + + pub fn farm_supply_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmSupplyForWeek") + .argument(&week) + .original_result() + } + + pub fn remaining_boosted_rewards_to_distribute< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRemainingBoostedRewardsToDistribute") + .argument(&week) + .original_result() + } + + pub fn undistributed_boosted_rewards( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUndistributedBoostedRewards") + .original_result() + } + + pub fn set_boosted_yields_factors< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + >( + self, + max_rewards_factor: Arg0, + user_rewards_energy_const: Arg1, + user_rewards_farm_const: Arg2, + min_energy_amount: Arg3, + min_farm_amount: Arg4, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBoostedYieldsFactors") + .argument(&max_rewards_factor) + .argument(&user_rewards_energy_const) + .argument(&user_rewards_farm_const) + .argument(&min_energy_amount) + .argument(&min_farm_amount) + .original_result() + } + + pub fn get_boosted_yields_factors( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBoostedYieldsFactors") + .original_result() + } + + /// Week starts from 1 + pub fn get_current_week( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getCurrentWeek") + .original_result() + } + + pub fn first_week_start_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFirstWeekStartEpoch") + .original_result() + } + + pub fn get_last_active_week_for_user_view< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastActiveWeekForUser") + .argument(&user) + .original_result() + } + + pub fn get_user_energy_for_week_view< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + user: Arg0, + week: Arg1, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUserEnergyForWeek") + .argument(&user) + .argument(&week) + .original_result() + } + + pub fn last_global_update_week( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastGlobalUpdateWeek") + .original_result() + } + + pub fn total_rewards_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalRewardsForWeek") + .argument(&week) + .original_result() + } + + pub fn total_energy_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalEnergyForWeek") + .argument(&week) + .original_result() + } + + pub fn total_locked_tokens_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalLockedTokensForWeek") + .argument(&week) + .original_result() + } + + pub fn update_energy_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateEnergyForUser") + .argument(&user) + .original_result() + } + + pub fn current_claim_progress< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getCurrentClaimProgress") + .argument(&user) + .original_result() + } + + pub fn set_energy_factory_address< + Arg0: ProxyArg>, + >( + self, + sc_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setEnergyFactoryAddress") + .argument(&sc_address) + .original_result() + } + + pub fn energy_factory_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyFactoryAddress") + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct StakingFarmTokenAttributes +where + Api: ManagedTypeApi, +{ + pub reward_per_share: BigUint, + pub compounded_reward: BigUint, + pub current_farm_amount: BigUint, + pub original_owner: ManagedAddress, +} diff --git a/dex/interactor/proxies/src/farm_with_locked_rewards_proxy.rs b/dex/interactor/proxies/src/farm_with_locked_rewards_proxy.rs new file mode 100644 index 000000000..aec16b897 --- /dev/null +++ b/dex/interactor/proxies/src/farm_with_locked_rewards_proxy.rs @@ -0,0 +1,880 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + Arg5: ProxyArg>>, + >( + self, + reward_token_id: Arg0, + farming_token_id: Arg1, + division_safety_constant: Arg2, + pair_contract_address: Arg3, + owner: Arg4, + admins: Arg5, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&reward_token_id) + .argument(&farming_token_id) + .argument(&division_safety_constant) + .argument(&pair_contract_address) + .argument(&owner) + .argument(&admins) + .original_result() + } +} + +#[rustfmt::skip] +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn enter_farm_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("enterFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_rewards_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("claimRewards") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn exit_farm_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("exitFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn merge_farm_tokens_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("mergeFarmTokens") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_boosted_rewards< + Arg0: ProxyArg>>, + >( + self, + opt_user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("claimBoostedRewards") + .argument(&opt_user) + .original_result() + } + + pub fn start_produce_rewards_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("startProduceRewards") + .original_result() + } + + pub fn end_produce_rewards_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("endProduceRewards") + .original_result() + } + + pub fn set_per_block_rewards_endpoint< + Arg0: ProxyArg>, + >( + self, + per_block_amount: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setPerBlockRewardAmount") + .argument(&per_block_amount) + .original_result() + } + + pub fn set_boosted_yields_rewards_percentage< + Arg0: ProxyArg, + >( + self, + percentage: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBoostedYieldsRewardsPercentage") + .argument(&percentage) + .original_result() + } + + pub fn calculate_rewards_for_given_position< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + user: Arg0, + farm_token_amount: Arg1, + attributes: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("calculateRewardsForGivenPosition") + .argument(&user) + .argument(&farm_token_amount) + .argument(&attributes) + .original_result() + } + + pub fn reward_per_share( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardPerShare") + .original_result() + } + + pub fn reward_reserve( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardReserve") + .original_result() + } + + pub fn allow_external_claim_boosted_rewards< + Arg0: ProxyArg, + >( + self, + allow_external_claim: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("allowExternalClaimBoostedRewards") + .argument(&allow_external_claim) + .original_result() + } + + pub fn get_allow_external_claim_rewards< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAllowExternalClaimRewards") + .argument(&user) + .original_result() + } + + pub fn farming_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmingTokenId") + .original_result() + } + + pub fn reward_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRewardTokenId") + .original_result() + } + + pub fn per_block_reward_amount( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPerBlockRewardAmount") + .original_result() + } + + pub fn last_reward_block_nonce( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastRewardBlockNonce") + .original_result() + } + + pub fn division_safety_constant( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getDivisionSafetyConstant") + .original_result() + } + + pub fn user_total_farm_position< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUserTotalFarmPosition") + .argument(&user) + .original_result() + } + + pub fn farm_position_migration_nonce( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmPositionMigrationNonce") + .original_result() + } + + pub fn set_locking_sc_address< + Arg0: ProxyArg>, + >( + self, + new_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockingScAddress") + .argument(&new_address) + .original_result() + } + + pub fn set_lock_epochs< + Arg0: ProxyArg, + >( + self, + lock_epochs: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockEpochs") + .argument(&lock_epochs) + .original_result() + } + + pub fn locking_sc_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockingScAddress") + .original_result() + } + + pub fn lock_epochs( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockEpochs") + .original_result() + } + + pub fn register_farm_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + >( + self, + token_display_name: Arg0, + token_ticker: Arg1, + num_decimals: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("registerFarmToken") + .argument(&token_display_name) + .argument(&token_ticker) + .argument(&num_decimals) + .original_result() + } + + pub fn farm_token( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmTokenId") + .original_result() + } + + pub fn farm_token_supply( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmTokenSupply") + .original_result() + } + + pub fn add_to_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn remove_from_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn pause( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn resume( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("resume") + .original_result() + } + + pub fn state( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getState") + .original_result() + } + + pub fn add_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addAdmin") + .argument(&address) + .original_result() + } + + pub fn remove_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeAdmin") + .argument(&address) + .original_result() + } + + pub fn update_owner_or_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + previous_owner: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateOwnerOrAdmin") + .argument(&previous_owner) + .original_result() + } + + pub fn permissions< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPermissions") + .argument(&address) + .original_result() + } + + pub fn add_sc_address_to_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addSCAddressToWhitelist") + .argument(&address) + .original_result() + } + + pub fn remove_sc_address_from_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeSCAddressFromWhitelist") + .argument(&address) + .original_result() + } + + pub fn is_sc_address_whitelisted< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isSCAddressWhitelisted") + .argument(&address) + .original_result() + } + + pub fn set_penalty_percent< + Arg0: ProxyArg, + >( + self, + percent: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("set_penalty_percent") + .argument(&percent) + .original_result() + } + + pub fn set_minimum_farming_epochs< + Arg0: ProxyArg, + >( + self, + epochs: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("set_minimum_farming_epochs") + .argument(&epochs) + .original_result() + } + + pub fn set_burn_gas_limit< + Arg0: ProxyArg, + >( + self, + gas_limit: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("set_burn_gas_limit") + .argument(&gas_limit) + .original_result() + } + + pub fn penalty_percent( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPenaltyPercent") + .original_result() + } + + pub fn minimum_farming_epochs( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getMinimumFarmingEpoch") + .original_result() + } + + pub fn burn_gas_limit( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBurnGasLimit") + .original_result() + } + + pub fn pair_contract_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPairContractManagedAddress") + .original_result() + } + + pub fn collect_undistributed_boosted_rewards( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("collectUndistributedBoostedRewards") + .original_result() + } + + pub fn boosted_yields_rewards_percentage( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBoostedYieldsRewardsPercentage") + .original_result() + } + + pub fn accumulated_rewards_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAccumulatedRewardsForWeek") + .argument(&week) + .original_result() + } + + pub fn farm_supply_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFarmSupplyForWeek") + .argument(&week) + .original_result() + } + + pub fn remaining_boosted_rewards_to_distribute< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRemainingBoostedRewardsToDistribute") + .argument(&week) + .original_result() + } + + pub fn undistributed_boosted_rewards( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUndistributedBoostedRewards") + .original_result() + } + + pub fn set_boosted_yields_factors< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + >( + self, + max_rewards_factor: Arg0, + user_rewards_energy_const: Arg1, + user_rewards_farm_const: Arg2, + min_energy_amount: Arg3, + min_farm_amount: Arg4, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBoostedYieldsFactors") + .argument(&max_rewards_factor) + .argument(&user_rewards_energy_const) + .argument(&user_rewards_farm_const) + .argument(&min_energy_amount) + .argument(&min_farm_amount) + .original_result() + } + + pub fn get_boosted_yields_factors( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBoostedYieldsFactors") + .original_result() + } + + /// Week starts from 1 + pub fn get_current_week( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getCurrentWeek") + .original_result() + } + + pub fn first_week_start_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFirstWeekStartEpoch") + .original_result() + } + + pub fn get_last_active_week_for_user_view< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastActiveWeekForUser") + .argument(&user) + .original_result() + } + + pub fn get_user_energy_for_week_view< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + user: Arg0, + week: Arg1, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUserEnergyForWeek") + .argument(&user) + .argument(&week) + .original_result() + } + + pub fn last_global_update_week( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLastGlobalUpdateWeek") + .original_result() + } + + pub fn total_rewards_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalRewardsForWeek") + .argument(&week) + .original_result() + } + + pub fn total_energy_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalEnergyForWeek") + .argument(&week) + .original_result() + } + + pub fn total_locked_tokens_for_week< + Arg0: ProxyArg, + >( + self, + week: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalLockedTokensForWeek") + .argument(&week) + .original_result() + } + + pub fn update_energy_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateEnergyForUser") + .argument(&user) + .original_result() + } + + pub fn current_claim_progress< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getCurrentClaimProgress") + .argument(&user) + .original_result() + } + + pub fn set_energy_factory_address< + Arg0: ProxyArg>, + >( + self, + sc_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setEnergyFactoryAddress") + .argument(&sc_address) + .original_result() + } + + pub fn energy_factory_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyFactoryAddress") + .original_result() + } +} diff --git a/dex/interactor/proxies/src/lib.rs b/dex/interactor/proxies/src/lib.rs new file mode 100644 index 000000000..ef6b1b707 --- /dev/null +++ b/dex/interactor/proxies/src/lib.rs @@ -0,0 +1,13 @@ +pub mod energy_factory_proxy; +pub mod farm_staking_proxy_sc_proxy; +pub mod farm_staking_sc_proxy; +pub mod farm_with_locked_rewards_proxy; +pub mod pair_proxy; +pub mod router_proxy; + +pub use energy_factory_proxy::*; +pub use farm_staking_proxy_sc_proxy::*; +pub use farm_staking_sc_proxy::*; +pub use farm_with_locked_rewards_proxy::*; +pub use pair_proxy::*; +pub use router_proxy::*; diff --git a/dex/interactor/proxies/src/pair_proxy.rs b/dex/interactor/proxies/src/pair_proxy.rs new file mode 100644 index 000000000..cdecef331 --- /dev/null +++ b/dex/interactor/proxies/src/pair_proxy.rs @@ -0,0 +1,1015 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg, + Arg5: ProxyArg, + Arg6: ProxyArg>, + Arg7: ProxyArg>>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + router_address: Arg2, + router_owner_address: Arg3, + total_fee_percent: Arg4, + special_fee_percent: Arg5, + initial_liquidity_adder: Arg6, + admins: Arg7, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&first_token_id) + .argument(&second_token_id) + .argument(&router_address) + .argument(&router_owner_address) + .argument(&total_fee_percent) + .argument(&special_fee_percent) + .argument(&initial_liquidity_adder) + .argument(&admins) + .original_result() + } +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn set_lp_token_identifier< + Arg0: ProxyArg>, + >( + self, + token_identifier: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLpTokenIdentifier") + .argument(&token_identifier) + .original_result() + } + + pub fn is_fee_enabled( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeeState") + .original_result() + } + + pub fn whitelist_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("whitelist") + .argument(&address) + .original_result() + } + + pub fn remove_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeWhitelist") + .argument(&address) + .original_result() + } + + pub fn add_trusted_swap_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + first_token: Arg1, + second_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addTrustedSwapPair") + .argument(&pair_address) + .argument(&first_token) + .argument(&second_token) + .original_result() + } + + pub fn remove_trusted_swap_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token: Arg0, + second_token: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeTrustedSwapPair") + .argument(&first_token) + .argument(&second_token) + .original_result() + } + + /// `fees_collector_cut_percentage` of the special fees are sent to the fees_collector_address SC + /// + /// For example, if special fees is 5%, and fees_collector_cut_percentage is 10%, + /// then of the 5%, 10% are reserved, and only the rest are split between other pair contracts. + pub fn setup_fees_collector< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + fees_collector_address: Arg0, + fees_collector_cut_percentage: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setupFeesCollector") + .argument(&fees_collector_address) + .argument(&fees_collector_cut_percentage) + .original_result() + } + + pub fn set_fee_on< + Arg0: ProxyArg, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + enabled: Arg0, + fee_to_address: Arg1, + fee_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeeOn") + .argument(&enabled) + .argument(&fee_to_address) + .argument(&fee_token) + .original_result() + } + + pub fn get_fee_destinations( + self, + ) -> TxTypedCall, TokenIdentifier)>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeeDestinations") + .original_result() + } + + pub fn get_trusted_swap_pairs( + self, + ) -> TxTypedCall, ManagedAddress)>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTrustedSwapPairs") + .original_result() + } + + pub fn get_whitelisted_managed_addresses( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getWhitelistedManagedAddresses") + .original_result() + } + + pub fn fees_collector_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeesCollectorAddress") + .original_result() + } + + pub fn fees_collector_cut_percentage( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeesCollectorCutPercentage") + .original_result() + } + + pub fn set_state_active_no_swaps( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setStateActiveNoSwaps") + .original_result() + } + + pub fn set_fee_percent< + Arg0: ProxyArg, + Arg1: ProxyArg, + >( + self, + total_fee_percent: Arg0, + special_fee_percent: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeePercents") + .argument(&total_fee_percent) + .argument(&special_fee_percent) + .original_result() + } + + pub fn get_lp_token_identifier( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokenIdentifier") + .original_result() + } + + pub fn total_fee_percent( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalFeePercent") + .original_result() + } + + pub fn special_fee_percent( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSpecialFee") + .original_result() + } + + pub fn router_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRouterManagedAddress") + .original_result() + } + + pub fn first_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFirstTokenId") + .original_result() + } + + pub fn second_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSecondTokenId") + .original_result() + } + + pub fn lp_token_supply( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalSupply") + .original_result() + } + + pub fn initial_liquidity_adder( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getInitialLiquidtyAdder") + .original_result() + } + + pub fn pair_reserve< + Arg0: ProxyArg>, + >( + self, + token_id: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getReserve") + .argument(&token_id) + .original_result() + } + + pub fn safe_price_current_index( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceCurrentIndex") + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_default_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + pair_address: Arg0, + liquidity: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByDefaultOffset") + .argument(&pair_address) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_round_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + round_offset: Arg1, + liquidity: Arg2, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByRoundOffset") + .argument(&pair_address) + .argument(&round_offset) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_timestamp_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + timestamp_offset: Arg1, + liquidity: Arg2, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByTimestampOffset") + .argument(&pair_address) + .argument(×tamp_offset) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + Arg3: ProxyArg>, + >( + self, + pair_address: Arg0, + start_round: Arg1, + end_round: Arg2, + liquidity: Arg3, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePrice") + .argument(&pair_address) + .argument(&start_round) + .argument(&end_round) + .argument(&liquidity) + .original_result() + } + + pub fn get_safe_price_by_default_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + pair_address: Arg0, + input_payment: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByDefaultOffset") + .argument(&pair_address) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price_by_round_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + round_offset: Arg1, + input_payment: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByRoundOffset") + .argument(&pair_address) + .argument(&round_offset) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price_by_timestamp_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + timestamp_offset: Arg1, + input_payment: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByTimestampOffset") + .argument(&pair_address) + .argument(×tamp_offset) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + Arg3: ProxyArg>, + >( + self, + pair_address: Arg0, + start_round: Arg1, + end_round: Arg2, + input_payment: Arg3, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePrice") + .argument(&pair_address) + .argument(&start_round) + .argument(&end_round) + .argument(&input_payment) + .original_result() + } + + pub fn get_price_observation_view< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + pair_address: Arg0, + search_round: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPriceObservation") + .argument(&pair_address) + .argument(&search_round) + .original_result() + } + + pub fn update_and_get_tokens_for_given_position_with_safe_price< + Arg0: ProxyArg>, + >( + self, + liquidity: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateAndGetTokensForGivenPositionWithSafePrice") + .argument(&liquidity) + .original_result() + } + + pub fn update_and_get_safe_price< + Arg0: ProxyArg>, + >( + self, + input: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateAndGetSafePrice") + .argument(&input) + .original_result() + } + + pub fn set_locking_deadline_epoch< + Arg0: ProxyArg, + >( + self, + new_deadline: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockingDeadlineEpoch") + .argument(&new_deadline) + .original_result() + } + + pub fn set_locking_sc_address< + Arg0: ProxyArg>, + >( + self, + new_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockingScAddress") + .argument(&new_address) + .original_result() + } + + pub fn set_unlock_epoch< + Arg0: ProxyArg, + >( + self, + new_epoch: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setUnlockEpoch") + .argument(&new_epoch) + .original_result() + } + + pub fn locking_sc_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockingScAddress") + .original_result() + } + + pub fn unlock_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUnlockEpoch") + .original_result() + } + + pub fn locking_deadline_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockingDeadlineEpoch") + .original_result() + } + + pub fn add_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addAdmin") + .argument(&address) + .original_result() + } + + pub fn remove_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeAdmin") + .argument(&address) + .original_result() + } + + pub fn update_owner_or_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + previous_owner: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateOwnerOrAdmin") + .argument(&previous_owner) + .original_result() + } + + pub fn permissions< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPermissions") + .argument(&address) + .original_result() + } + + pub fn add_to_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn remove_from_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn pause( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn resume( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("resume") + .original_result() + } + + pub fn state( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getState") + .original_result() + } + + pub fn add_initial_liquidity( + self, + ) -> TxTypedCall, EsdtTokenPayment, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("addInitialLiquidity") + .original_result() + } + + pub fn add_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxTypedCall, EsdtTokenPayment, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("addLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("removeLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity_and_burn_token< + Arg0: ProxyArg>, + >( + self, + token_to_buyback_and_burn: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("removeLiquidityAndBuyBackAndBurnToken") + .argument(&token_to_buyback_and_burn) + .original_result() + } + + pub fn swap_no_fee< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + destination_address: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("swapNoFeeAndForward") + .argument(&token_out) + .argument(&destination_address) + .original_result() + } + + pub fn swap_tokens_fixed_input< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + amount_out_min: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("swapTokensFixedInput") + .argument(&token_out) + .argument(&amount_out_min) + .original_result() + } + + pub fn swap_tokens_fixed_output< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + amount_out: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("swapTokensFixedOutput") + .argument(&token_out) + .argument(&amount_out) + .original_result() + } + + pub fn get_tokens_for_given_position< + Arg0: ProxyArg>, + >( + self, + liquidity: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTokensForGivenPosition") + .argument(&liquidity) + .original_result() + } + + pub fn get_reserves_and_total_supply( + self, + ) -> TxTypedCall, BigUint, BigUint>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getReservesAndTotalSupply") + .original_result() + } + + pub fn get_amount_out_view< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_in: Arg0, + amount_in: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAmountOut") + .argument(&token_in) + .argument(&amount_in) + .original_result() + } + + pub fn get_amount_in_view< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_wanted: Arg0, + amount_wanted: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAmountIn") + .argument(&token_wanted) + .argument(&amount_wanted) + .original_result() + } + + pub fn get_equivalent< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_in: Arg0, + amount_in: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEquivalent") + .argument(&token_in) + .argument(&amount_in) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct SwapEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub token_id_in: TokenIdentifier, + pub token_amount_in: BigUint, + pub token_id_out: TokenIdentifier, + pub token_amount_out: BigUint, + pub fee_amount: BigUint, + pub token_in_reserve: BigUint, + pub token_out_reserve: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct SwapNoFeeAndForwardEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub token_id_in: TokenIdentifier, + pub token_amount_in: BigUint, + pub token_id_out: TokenIdentifier, + pub token_amount_out: BigUint, + pub destination: ManagedAddress, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct AddLiquidityEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub first_token_amount: BigUint, + pub second_token_id: TokenIdentifier, + pub second_token_amount: BigUint, + pub lp_token_id: TokenIdentifier, + pub lp_token_amount: BigUint, + pub lp_supply: BigUint, + pub first_token_reserves: BigUint, + pub second_token_reserves: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct RemoveLiquidityEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub first_token_amount: BigUint, + pub second_token_id: TokenIdentifier, + pub second_token_amount: BigUint, + pub lp_token_id: TokenIdentifier, + pub lp_token_amount: BigUint, + pub lp_supply: BigUint, + pub first_token_reserves: BigUint, + pub second_token_reserves: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct PriceObservation +where + Api: ManagedTypeApi, +{ + pub first_token_reserve_accumulated: BigUint, + pub second_token_reserve_accumulated: BigUint, + pub weight_accumulated: u64, + pub recording_round: u64, + pub lp_supply_accumulated: BigUint, +} diff --git a/dex/interactor/proxies/src/router_proxy.rs b/dex/interactor/proxies/src/router_proxy.rs new file mode 100644 index 000000000..5e0610e5b --- /dev/null +++ b/dex/interactor/proxies/src/router_proxy.rs @@ -0,0 +1,552 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct RouterProxy; + +impl TxProxyTrait for RouterProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = RouterProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + RouterProxyMethods { wrapped_tx: tx } + } +} + +pub struct RouterProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl RouterProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>>, + >( + self, + pair_template_address_opt: Arg0, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&pair_template_address_opt) + .original_result() + } +} + +#[rustfmt::skip] +impl RouterProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl RouterProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn pause< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .argument(&address) + .original_result() + } + + pub fn resume< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("resume") + .argument(&address) + .original_result() + } + + pub fn create_pair_endpoint< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>>, + Arg4: ProxyArg>>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + initial_liquidity_adder: Arg2, + opt_fee_percents: Arg3, + admins: Arg4, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("createPair") + .argument(&first_token_id) + .argument(&second_token_id) + .argument(&initial_liquidity_adder) + .argument(&opt_fee_percents) + .argument(&admins) + .original_result() + } + + pub fn upgrade_pair_endpoint< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("upgradePair") + .argument(&first_token_id) + .argument(&second_token_id) + .original_result() + } + + pub fn issue_lp_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + lp_token_display_name: Arg1, + lp_token_ticker: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("issueLpToken") + .argument(&pair_address) + .argument(&lp_token_display_name) + .argument(&lp_token_ticker) + .original_result() + } + + pub fn set_local_roles< + Arg0: ProxyArg>, + >( + self, + pair_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLocalRoles") + .argument(&pair_address) + .original_result() + } + + pub fn remove_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removePair") + .argument(&first_token_id) + .argument(&second_token_id) + .original_result() + } + + pub fn set_fee_on< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + fee_to_address: Arg1, + fee_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeeOn") + .argument(&pair_address) + .argument(&fee_to_address) + .argument(&fee_token) + .original_result() + } + + pub fn set_fee_off< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + fee_to_address: Arg1, + fee_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeeOff") + .argument(&pair_address) + .argument(&fee_to_address) + .argument(&fee_token) + .original_result() + } + + pub fn set_pair_creation_enabled< + Arg0: ProxyArg, + >( + self, + enabled: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setPairCreationEnabled") + .argument(&enabled) + .original_result() + } + + pub fn migrate_pair_map( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("migratePairMap") + .original_result() + } + + pub fn pair_creation_enabled( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPairCreationEnabled") + .original_result() + } + + pub fn state( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getState") + .original_result() + } + + pub fn owner( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getOwner") + .original_result() + } + + pub fn set_temporary_owner_period< + Arg0: ProxyArg, + >( + self, + period_blocks: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setTemporaryOwnerPeriod") + .argument(&period_blocks) + .original_result() + } + + pub fn set_pair_template_address< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setPairTemplateAddress") + .argument(&address) + .original_result() + } + + pub fn pair_template_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPairTemplateAddress") + .original_result() + } + + pub fn temporary_owner_period( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTemporaryOwnerPeriod") + .original_result() + } + + pub fn common_tokens_for_user_pairs( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getCommonTokensForUserPairs") + .original_result() + } + + pub fn get_all_pairs_addresses( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAllPairsManagedAddresses") + .original_result() + } + + pub fn get_all_token_pairs( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAllPairTokens") + .original_result() + } + + pub fn get_all_pair_contract_metadata( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAllPairContractMetadata") + .original_result() + } + + pub fn get_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPair") + .argument(&first_token_id) + .argument(&second_token_id) + .original_result() + } + + pub fn get_pair_tokens< + Arg0: ProxyArg>, + >( + self, + pair_address: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPairTokens") + .argument(&pair_address) + .original_result() + } + + pub fn clear_pair_temporary_owner_storage( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("clearPairTemporaryOwnerStorage") + .original_result() + } + + pub fn multi_pair_swap< + Arg0: ProxyArg, ManagedBuffer, TokenIdentifier, BigUint>>>, + >( + self, + swap_operations: Arg0, + ) -> TxTypedCall>> { + self.wrapped_tx + .raw_call("multiPairSwap") + .argument(&swap_operations) + .original_result() + } + + pub fn config_enable_by_user_parameters< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg, + >( + self, + common_token_id: Arg0, + locked_token_id: Arg1, + min_locked_token_value: Arg2, + min_lock_period_epochs: Arg3, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("configEnableByUserParameters") + .argument(&common_token_id) + .argument(&locked_token_id) + .argument(&min_locked_token_value) + .argument(&min_lock_period_epochs) + .original_result() + } + + pub fn add_common_tokens_for_user_pairs< + Arg0: ProxyArg>>, + >( + self, + tokens: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addCommonTokensForUserPairs") + .argument(&tokens) + .original_result() + } + + pub fn remove_common_tokens_for_user_pairs< + Arg0: ProxyArg>>, + >( + self, + tokens: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeCommonTokensForUserPairs") + .argument(&tokens) + .original_result() + } + + pub fn set_swap_enabled_by_user< + Arg0: ProxyArg>, + >( + self, + pair_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("setSwapEnabledByUser") + .argument(&pair_address) + .original_result() + } + + pub fn try_get_config< + Arg0: ProxyArg>, + >( + self, + token_id: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnableSwapByUserConfig") + .argument(&token_id) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct PairTokens +where + Api: ManagedTypeApi, +{ + pub first_token_id: TokenIdentifier, + pub second_token_id: TokenIdentifier, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct PairContractMetadata +where + Api: ManagedTypeApi, +{ + pub first_token_id: TokenIdentifier, + pub second_token_id: TokenIdentifier, + pub address: ManagedAddress, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct CreatePairEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub second_token_id: TokenIdentifier, + pub total_fee_percent: u64, + pub special_fee_percent: u64, + pub pair_address: ManagedAddress, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct UserPairSwapEnabledEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub second_token_id: TokenIdentifier, + pub pair_address: ManagedAddress, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct EnableSwapByUserConfig +where + Api: ManagedTypeApi, +{ + pub locked_token_id: TokenIdentifier, + pub min_locked_token_value: BigUint, + pub min_lock_period_epochs: u64, +} diff --git a/dex/interactor/src/dex_interact.rs b/dex/interactor/src/dex_interact.rs new file mode 100644 index 000000000..eadfe5b40 --- /dev/null +++ b/dex/interactor/src/dex_interact.rs @@ -0,0 +1,117 @@ +mod dex_interact_cli; +mod dex_interact_config; +mod dex_interact_state; +mod energy_factory; +mod farm_locked; +mod farm_staking_proxy; +mod pair; +mod structs; + +use clap::Parser; +use dex_interact_cli::AddArgs; +use dex_interact_config::Config; +use dex_interact_state::State; +use multiversx_sc_snippets::imports::*; +use proxies::*; + +#[tokio::main] +async fn main() { + env_logger::init(); + + let mut dex_interact = DexInteract::init().await; + dex_interact.register_wallets(); + + let cli = dex_interact_cli::InteractCli::parse(); + match &cli.command { + Some(dex_interact_cli::InteractCliCommand::Swap(args)) => { + pair::swap_tokens_fixed_input(&mut dex_interact, args).await; + } + Some(dex_interact_cli::InteractCliCommand::Add(args)) => { + pair::add_liquidity(&mut dex_interact, args).await; + } + Some(dex_interact_cli::InteractCliCommand::FullFarm(args)) => { + dex_interact.full_farm_scenario(args).await; + } + None => {} + } +} + +struct DexInteract { + interactor: Interactor, + wallet_address: Bech32Address, + state: State, +} + +impl DexInteract { + async fn init() -> Self { + let config = Config::load_config(); + let mut interactor = Interactor::new(config.gateway()).await; + + let test_address = test_wallets::mike(); + let wallet_address = interactor.register_wallet(test_address); + println!("wallet address: {:#?}", test_address.address()); + + Self { + interactor, + wallet_address: wallet_address.into(), + state: State::load_state(), + } + } + + fn register_wallets(&mut self) { + let carol = test_wallets::carol(); + let dan = test_wallets::dan(); + let eve = test_wallets::eve(); + + for wallet in &[carol, dan, eve] { + self.interactor.register_wallet(*wallet); + } + } + + // mock + async fn full_farm_scenario(&mut self, args: &AddArgs) { + let (_, _, lp_token) = pair::add_liquidity(self, args).await.0; + let _result = farm_locked::enter_farm(self, lp_token).await; + let _query = energy_factory::get_energy_amount_for_user(self, Address::zero()).await; + let _farm_token = farm_staking_proxy::stake_farm_tokens(self, Vec::new(), None).await; + // TODO + } +} + +// Just for demo, still TODO +#[cfg(test)] +pub mod integration_tests { + use multiversx_sc_snippets::tokio; + + use crate::{ + dex_interact_cli::{AddArgs, SwapArgs}, + pair, DexInteract, + }; + + #[tokio::test] + #[ignore = "run on demand"] + async fn test_swap() { + let mut dex_interact = DexInteract::init().await; + dex_interact.register_wallets(); + let args = SwapArgs { + amount: 10_000_000_000_000_000_000u128, + min_amount: 1_000_000_000_000u128, + }; + let result = pair::swap_tokens_fixed_input(&mut dex_interact, &args).await; + println!("result {:#?}", result); + } + + #[tokio::test] + #[ignore = "run on demand"] + async fn test_full_farm_scenario() { + // initialize interactor + let mut dex_interact = DexInteract::init().await; + // test users + dex_interact.register_wallets(); + // mock arguments + let args = AddArgs::default(); + + // runs a full farm scenario + dex_interact.full_farm_scenario(&args).await; + } +} diff --git a/dex/interactor/src/dex_interact_cli.rs b/dex/interactor/src/dex_interact_cli.rs new file mode 100644 index 000000000..ec12bf021 --- /dev/null +++ b/dex/interactor/src/dex_interact_cli.rs @@ -0,0 +1,48 @@ +use clap::{Args, Parser, Subcommand}; + +/// Dex Interact CLI +#[derive(Default, PartialEq, Eq, Debug, Parser)] +#[command(version, about)] +#[command(propagate_version = true)] +pub struct InteractCli { + #[command(subcommand)] + pub command: Option, +} + +/// Dex Interact CLI Commands +#[derive(Clone, PartialEq, Eq, Debug, Subcommand)] +pub enum InteractCliCommand { + #[command(name = "swap", about = "Swaps token with a minimum return amount")] + Swap(SwapArgs), + #[command(name = "add_liquidity", about = "Adds liquidity to a pair")] + Add(AddArgs), + #[command(name = "full_farm", about = "Creates a full farm scenario")] + FullFarm(AddArgs), +} + +// Second token id is taken from the state +#[derive(Default, Clone, PartialEq, Eq, Debug, Args)] +pub struct SwapArgs { + /// Amount to swap + #[arg(short = 'a', long = "amount", verbatim_doc_comment)] + pub amount: u128, + /// Minimum return amount + #[arg(short = 'm', long = "min_amount", verbatim_doc_comment)] + pub min_amount: u128, +} + +#[derive(Default, Clone, PartialEq, Eq, Debug, Args)] +pub struct AddArgs { + /// Amount to send from first token + #[arg(long = "fist_amount", verbatim_doc_comment)] + pub first_payment_amount: u128, + /// Amount to send from second token + #[arg(long = "second_amount", verbatim_doc_comment)] + pub second_payment_amount: u128, + /// Min amount accepted for first token (slippage) + #[arg(long = "first_amount_min", verbatim_doc_comment)] + pub first_token_amount_min: u128, + /// Min amount accepted for second token (slippage) + #[arg(long = "second_amount_min", verbatim_doc_comment)] + pub second_token_amount_min: u128, +} diff --git a/dex/interactor/src/dex_interact_config.rs b/dex/interactor/src/dex_interact_config.rs new file mode 100644 index 000000000..8330f0e51 --- /dev/null +++ b/dex/interactor/src/dex_interact_config.rs @@ -0,0 +1,26 @@ +use serde::Deserialize; +use std::io::Read; + +/// Config file +const CONFIG_FILE: &str = "config.toml"; + +/// Dex Interact configuration +#[derive(Debug, Deserialize)] +pub struct Config { + gateway: String, +} + +impl Config { + // Deserializes config from file + pub fn load_config() -> Self { + let mut file = std::fs::File::open(CONFIG_FILE).unwrap(); + let mut content = String::new(); + file.read_to_string(&mut content).unwrap(); + toml::from_str(&content).unwrap() + } + + // Returns the gateway + pub fn gateway(&self) -> &str { + &self.gateway + } +} diff --git a/dex/interactor/src/dex_interact_state.rs b/dex/interactor/src/dex_interact_state.rs new file mode 100644 index 000000000..e79658255 --- /dev/null +++ b/dex/interactor/src/dex_interact_state.rs @@ -0,0 +1,93 @@ +use multiversx_sc_scenario::imports::Bech32Address; +use serde::{Deserialize, Serialize}; +use std::{ + io::{Read, Write}, + path::Path, +}; + +/// State file +const STATE_FILE: &str = "state.toml"; + +/// Multisig Interact state +#[derive(Debug, Default, Serialize, Deserialize)] +pub struct State { + farm_with_locked_rewards: Option, + pair: Option, + router: Option, + farm_staking: Option, + farm_staking_proxy: Option, + energy_factory: Option, + first_token_id: Option, + second_token_id: Option, +} + +impl State { + // Deserializes state from file + pub fn load_state() -> Self { + if Path::new(STATE_FILE).exists() { + let mut file = std::fs::File::open(STATE_FILE).unwrap(); + let mut content = String::new(); + file.read_to_string(&mut content).unwrap(); + toml::from_str(&content).unwrap() + } else { + Self::default() + } + } + + pub fn current_farm_with_locked_rewards_address(&self) -> &Bech32Address { + self.farm_with_locked_rewards + .as_ref() + .expect("no known farm with locked rewards contract, set first") + } + + pub fn current_pair_address(&self) -> &Bech32Address { + self.pair + .as_ref() + .expect("no known pair contract, set first") + } + + pub fn _current_router_address(&self) -> &Bech32Address { + self.router + .as_ref() + .expect("no known router contract, set first") + } + + pub fn _current_farm_staking_address(&self) -> &Bech32Address { + self.farm_staking + .as_ref() + .expect("no known farm staking contract, set first") + } + + pub fn current_farm_staking_proxy_address(&self) -> &Bech32Address { + self.farm_staking_proxy + .as_ref() + .expect("no known farm staking proxy contract, set first") + } + + pub fn current_energy_factory_address(&self) -> &Bech32Address { + self.energy_factory + .as_ref() + .expect("no known energy factory contract, set first") + } + + pub fn first_token_id(&self) -> &String { + self.first_token_id + .as_ref() + .expect("no knows first token id, set first") + } + + pub fn second_token_id(&self) -> &String { + self.second_token_id + .as_ref() + .expect("no knows second token id, set first") + } +} + +impl Drop for State { + // Serializes state to file + fn drop(&mut self) { + let mut file = std::fs::File::create(STATE_FILE).unwrap(); + file.write_all(toml::to_string(self).unwrap().as_bytes()) + .unwrap(); + } +} diff --git a/dex/interactor/src/energy_factory.rs b/dex/interactor/src/energy_factory.rs new file mode 100644 index 000000000..539397a05 --- /dev/null +++ b/dex/interactor/src/energy_factory.rs @@ -0,0 +1,100 @@ +#![allow(unused)] + +use multiversx_sc_snippets::imports::*; +use proxies::energy_factory_proxy; + +use crate::{ + structs::{to_rust_biguint, InteractorEnergy}, + DexInteract, +}; + +pub(crate) async fn get_energy_entry_for_user( + dex_interact: &mut DexInteract, + user: Address, +) -> InteractorEnergy { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_energy_factory_address()) + .typed(energy_factory_proxy::SimpleLockEnergyProxy) + .get_updated_energy_entry_for_user(user) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorEnergy::from(result_token) +} + +pub(crate) async fn get_energy_amount_for_user( + dex_interact: &mut DexInteract, + user: Address, +) -> RustBigUint { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_energy_factory_address()) + .typed(energy_factory_proxy::SimpleLockEnergyProxy) + .get_energy_amount_for_user(ManagedAddress::from(user)) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + to_rust_biguint(result_token) +} + +pub(crate) async fn get_penalty_amount( + dex_interact: &mut DexInteract, + token_amount: RustBigUint, + prev_lock_epochs: u64, + new_lock_epochs: u64, +) -> RustBigUint { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_energy_factory_address()) + .typed(energy_factory_proxy::SimpleLockEnergyProxy) + .calculate_penalty_amount( + BigUint::from(token_amount), + prev_lock_epochs, + new_lock_epochs, + ) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + to_rust_biguint(result_token) +} + +pub(crate) async fn get_token_unstake_address(dex_interact: &mut DexInteract) -> Address { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_energy_factory_address()) + .typed(energy_factory_proxy::SimpleLockEnergyProxy) + .token_unstake_sc_address() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_address() +} + +pub(crate) async fn is_sc_address_whitelisted( + dex_interact: &mut DexInteract, + address: Address, +) -> bool { + dex_interact + .interactor + .query() + .to(dex_interact.state.current_energy_factory_address()) + .typed(energy_factory_proxy::SimpleLockEnergyProxy) + .is_sc_address_whitelisted(ManagedAddress::from(address)) + .returns(ReturnsResult) + .prepare_async() + .run() + .await +} diff --git a/dex/interactor/src/farm_locked.rs b/dex/interactor/src/farm_locked.rs new file mode 100644 index 000000000..578b7c1ea --- /dev/null +++ b/dex/interactor/src/farm_locked.rs @@ -0,0 +1,199 @@ +#![allow(unused)] + +use common_structs::FarmTokenAttributes; + +use multiversx_sc_snippets::imports::*; + +use crate::{ + farm_with_locked_rewards_proxy, + structs::{extract_caller, to_rust_biguint, InteractorFarmTokenAttributes, InteractorPayment}, + DexInteract, +}; + +pub(crate) async fn enter_farm( + dex_interact: &mut DexInteract, + lp_token: InteractorPayment, +) -> (InteractorPayment, InteractorPayment) { + println!("Attempting to enter farm with locked rewards..."); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .gas(100_000_000u64) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .enter_farm_endpoint(OptionalValue::Some(dex_interact.wallet_address.clone())) + .esdt::>(lp_token.into()) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + ( + InteractorPayment::from(result_token.0 .0), + InteractorPayment::from(result_token.0 .1), + ) +} + +pub(crate) async fn claim_rewards( + dex_interact: &mut DexInteract, + payment: Vec, + opt_original_caller: Option
, +) -> (InteractorPayment, InteractorPayment) { + println!("Attempting to claim rewards from farm with locked rewards..."); + + let payments = payment + .iter() + .map(EsdtTokenPayment::from) + .collect::>>(); + + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .gas(100_000_000u64) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .claim_rewards_endpoint(caller_arg) + .payment(payments) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + ( + InteractorPayment::from(result_token.0 .0), + InteractorPayment::from(result_token.0 .1), + ) +} + +pub(crate) async fn exit_farm( + dex_interact: &mut DexInteract, + payment: InteractorPayment, + opt_original_caller: Option
, +) -> (InteractorPayment, InteractorPayment) { + println!("Attempting to exit farm with locked rewards..."); + + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .gas(100_000_000u64) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .exit_farm_endpoint(caller_arg) + .payment::>(payment.into()) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + ( + InteractorPayment::from(result_token.0 .0), + InteractorPayment::from(result_token.0 .1), + ) +} + +pub(crate) async fn merge_farm_tokens( + dex_interact: &mut DexInteract, + payment: Vec, + opt_original_caller: Option
, +) -> (InteractorPayment, InteractorPayment) { + println!("Attempting to merge tokens in farm with locked rewards..."); + + let payments = payment + .iter() + .map(EsdtTokenPayment::from) + .collect::>>(); + + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .gas(100_000_000u64) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .merge_farm_tokens_endpoint(caller_arg) + .payment(payments) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + ( + InteractorPayment::from(result_token.0 .0), + InteractorPayment::from(result_token.0 .1), + ) +} + +pub(crate) async fn claim_boosted_rewards( + dex_interact: &mut DexInteract, + opt_original_caller: Option
, +) -> InteractorPayment { + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .gas(100_000_000u64) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .claim_boosted_rewards(caller_arg) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorPayment::from(result_token) +} + +pub(crate) async fn calculate_rewards_for_given_position( + dex_interact: &mut DexInteract, + user: Address, + farm_token_amount: u128, + attributes: InteractorFarmTokenAttributes, +) -> RustBigUint { + let attributes_arg: FarmTokenAttributes = FarmTokenAttributes { + reward_per_share: BigUint::from(attributes.reward_per_share), + entering_epoch: attributes.entering_epoch, + compounded_reward: BigUint::from(attributes.compounded_reward), + current_farm_amount: BigUint::from(attributes.current_farm_amount), + original_owner: ManagedAddress::from(attributes.original_owner), + }; + + let result_token = dex_interact + .interactor + .query() + .to(dex_interact + .state + .current_farm_with_locked_rewards_address()) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .calculate_rewards_for_given_position( + ManagedAddress::from(user), + BigUint::from(farm_token_amount), + attributes_arg, + ) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + to_rust_biguint(result_token) +} diff --git a/dex/interactor/src/farm_staking_proxy.rs b/dex/interactor/src/farm_staking_proxy.rs new file mode 100644 index 000000000..3db4bc2d9 --- /dev/null +++ b/dex/interactor/src/farm_staking_proxy.rs @@ -0,0 +1,249 @@ +#![allow(unused)] + +use multiversx_sc_snippets::imports::*; + +use proxies::farm_staking_proxy_sc_proxy; + +use crate::{ + structs::{ + extract_caller, InteractorClaimDualYieldResult, InteractorStakeProxyResult, + InteractorPayment, InteractorUnstakeResult, + }, + DexInteract, +}; + +// views +pub(crate) async fn is_sc_address_whitelisted( + dex_interact: &mut DexInteract, + address: Address, +) -> bool { + dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .is_sc_address_whitelisted(ManagedAddress::from(address)) + .returns(ReturnsResult) + .prepare_async() + .run() + .await +} + +pub(crate) async fn get_dual_yield_token_id(dex_interact: &mut DexInteract) -> String { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .dual_yield_token() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_string() +} + +pub(crate) async fn get_lp_farm_address(dex_interact: &mut DexInteract) -> Address { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .lp_farm_address() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_address() +} + +pub(crate) async fn get_staking_farm_address(dex_interact: &mut DexInteract) -> Address { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .staking_farm_address() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_address() +} + +pub(crate) async fn get_pair_address(dex_interact: &mut DexInteract) -> Address { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .pair_address() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_address() +} + +pub(crate) async fn get_staking_token_id(dex_interact: &mut DexInteract) -> String { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .staking_token_id() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_string() +} + +pub(crate) async fn get_farm_token_id(dex_interact: &mut DexInteract) -> String { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .staking_farm_token_id() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_string() +} + +pub(crate) async fn get_lp_token_id(dex_interact: &mut DexInteract) -> String { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .lp_token_id() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_string() +} + +pub(crate) async fn get_lp_farm_token_id(dex_interact: &mut DexInteract) -> String { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .lp_farm_token_id() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_string() +} + +pub(crate) async fn get_energy_factory_address(dex_interact: &mut DexInteract) -> Address { + let result_token = dex_interact + .interactor + .query() + .to(dex_interact.state.current_farm_staking_proxy_address()) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .energy_factory_address() + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + result_token.to_address() +} + +// endpoints +pub(crate) async fn stake_farm_tokens( + dex_interact: &mut DexInteract, + payment: Vec, + opt_original_caller: Option
, +) -> InteractorStakeProxyResult { + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let payments = payment + .iter() + .map(EsdtTokenPayment::from) + .collect::>>(); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact.state.current_farm_staking_proxy_address()) + .gas(100_000_000u64) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .stake_farm_tokens(caller_arg) + .payment(payments) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorStakeProxyResult::from(result_token) +} + +pub(crate) async fn claim_dual_yield( + dex_interact: &mut DexInteract, + payment: InteractorPayment, + opt_original_caller: Option
, +) -> InteractorClaimDualYieldResult { + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact.state.current_farm_staking_proxy_address()) + .gas(100_000_000u64) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .claim_dual_yield_endpoint(caller_arg) + .payment(EsdtTokenPayment::from(payment)) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorClaimDualYieldResult::from(result_token) +} + +pub(crate) async fn unstake_farm_tokens( + dex_interact: &mut DexInteract, + payment: InteractorPayment, + pair_first_token_min_amount: RustBigUint, + pair_second_token_min_amount: RustBigUint, + opt_original_caller: Option
, +) -> InteractorUnstakeResult { + let caller_arg = extract_caller(dex_interact, opt_original_caller); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact.state.current_farm_staking_proxy_address()) + .gas(100_000_000u64) + .typed(farm_staking_proxy_sc_proxy::FarmStakingProxyProxy) + .unstake_farm_tokens( + BigUint::from(pair_first_token_min_amount), + BigUint::from(pair_second_token_min_amount), + caller_arg, + ) + .payment(EsdtTokenPayment::from(payment)) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorUnstakeResult::from(result_token) +} diff --git a/dex/interactor/src/pair.rs b/dex/interactor/src/pair.rs new file mode 100644 index 000000000..d22a64e09 --- /dev/null +++ b/dex/interactor/src/pair.rs @@ -0,0 +1,73 @@ +use multiversx_sc_scenario::imports::{BigUint, ReturnsResult, TokenIdentifier}; +use multiversx_sc_snippets::InteractorPrepareAsync; +use proxies::pair_proxy; + +use crate::{ + dex_interact_cli::{AddArgs, SwapArgs}, + structs::{InteractorAddLiquidityResultType, InteractorPayment}, + DexInteract, +}; + +pub(crate) async fn swap_tokens_fixed_input( + dex_interact: &mut DexInteract, + args: &SwapArgs, +) -> InteractorPayment { + let payment = args.as_payment(dex_interact); + let first_token_id = dex_interact.state.first_token_id(); + let second_token_id = dex_interact.state.second_token_id(); + + println!( + "Attempting to swap {} {first_token_id} for a min amount {} of {second_token_id}...", + args.amount, args.min_amount + ); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact.state.current_pair_address()) + .gas(100_000_000u64) + .typed(pair_proxy::PairProxy) + .swap_tokens_fixed_input( + TokenIdentifier::from(second_token_id.as_bytes()), + BigUint::from(args.min_amount), + ) + .payment(payment) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorPayment::from(result_token) +} + +pub(crate) async fn add_liquidity( + dex_interact: &mut DexInteract, + args: &AddArgs, +) -> InteractorAddLiquidityResultType { + println!("Attempting to add liquidity to pair..."); + let payments = args.as_payment_vec(dex_interact); + + let result_token = dex_interact + .interactor + .tx() + .from(&dex_interact.wallet_address) + .to(dex_interact.state.current_pair_address()) + .gas(100_000_000u64) + .typed(pair_proxy::PairProxy) + .add_liquidity( + BigUint::from(args.first_token_amount_min), + BigUint::from(args.second_token_amount_min), + ) + .payment(payments) + .returns(ReturnsResult) + .prepare_async() + .run() + .await; + + InteractorAddLiquidityResultType::from(result_token) +} + +// 10000000000000000000 ; 10 UTK +// 1000000000000; 0,000001 WEGLD +// cargo run swap -a 10000000000000000000 -m 1000000000000 diff --git a/dex/interactor/src/structs.rs b/dex/interactor/src/structs.rs new file mode 100644 index 000000000..6a2ac5188 --- /dev/null +++ b/dex/interactor/src/structs.rs @@ -0,0 +1,219 @@ +use multiversx_sc_scenario::{ + api::StaticApi, + imports::{ + Address, BigInt, BigUint, EsdtTokenPayment, ManagedAddress, ManagedTypeApi, ManagedVec, + MultiValue3, OptionalValue, RustBigUint, Sign, TokenIdentifier, + }, + num_bigint, +}; +use proxies::{ClaimDualYieldResult, Energy, StakeProxyResult, UnstakeResult}; + +use crate::{ + dex_interact_cli::{AddArgs, SwapArgs}, + DexInteract, +}; + +pub struct InteractorMultiValue3(pub (T0, T1, T2)); + +impl InteractorMultiValue3 { + pub fn new(first: T0, second: T1, third: T2) -> Self { + InteractorMultiValue3((first, second, third)) + } +} +pub type InteractorAddLiquidityResultType = + InteractorMultiValue3; + +impl + From, EsdtTokenPayment, EsdtTokenPayment>> + for InteractorAddLiquidityResultType +{ + fn from( + value: MultiValue3, EsdtTokenPayment, EsdtTokenPayment>, + ) -> Self { + let extracted = value.0; + + InteractorMultiValue3::new( + InteractorPayment::from(extracted.0), + InteractorPayment::from(extracted.1), + InteractorPayment::from(extracted.2), + ) + } +} + +pub type RustBigInt = num_bigint::BigInt; + +#[allow(dead_code)] +pub struct InteractorUnstakeResult { + pub other_token_payment: InteractorPayment, + pub lp_farm_rewards: InteractorPayment, + pub staking_rewards: InteractorPayment, + pub unbond_staking_farm_token: InteractorPayment, +} + +impl From> for InteractorUnstakeResult { + fn from(value: UnstakeResult) -> Self { + InteractorUnstakeResult { + other_token_payment: InteractorPayment::from(value.other_token_payment), + lp_farm_rewards: InteractorPayment::from(value.lp_farm_rewards), + staking_rewards: InteractorPayment::from(value.staking_rewards), + unbond_staking_farm_token: InteractorPayment::from(value.unbond_staking_farm_token), + } + } +} + +#[allow(dead_code)] +pub struct InteractorStakeProxyResult { + pub dual_yield_tokens: InteractorPayment, + pub staking_boosted_rewards: InteractorPayment, + pub lp_farm_boosted_rewards: InteractorPayment, +} + +impl From> for InteractorStakeProxyResult { + fn from(value: StakeProxyResult) -> Self { + InteractorStakeProxyResult { + dual_yield_tokens: InteractorPayment::from(value.dual_yield_tokens), + staking_boosted_rewards: InteractorPayment::from(value.staking_boosted_rewards), + lp_farm_boosted_rewards: InteractorPayment::from(value.lp_farm_boosted_rewards), + } + } +} + +#[allow(dead_code)] +pub struct InteractorClaimDualYieldResult { + pub lp_farm_rewards: InteractorPayment, + pub staking_farm_rewards: InteractorPayment, + pub new_dual_yield_tokens: InteractorPayment, +} + +impl From> for InteractorClaimDualYieldResult { + fn from(value: ClaimDualYieldResult) -> Self { + InteractorClaimDualYieldResult { + lp_farm_rewards: InteractorPayment::from(value.lp_farm_rewards), + staking_farm_rewards: InteractorPayment::from(value.staking_farm_rewards), + new_dual_yield_tokens: InteractorPayment::from(value.new_dual_yield_tokens), + } + } +} + +pub struct InteractorFarmTokenAttributes { + pub reward_per_share: RustBigUint, + pub entering_epoch: u64, + pub compounded_reward: RustBigUint, + pub current_farm_amount: RustBigUint, + pub original_owner: Address, +} + +#[derive(Debug)] +pub struct InteractorPayment { + pub token_id: String, + pub nonce: u64, + pub amount: RustBigUint, +} + +#[allow(dead_code)] +pub struct InteractorEnergy { + pub amount: RustBigInt, + pub last_update_epoch: u64, + pub total_locked_tokens: RustBigUint, +} + +impl From> for InteractorEnergy { + fn from(value: Energy) -> Self { + InteractorEnergy { + amount: to_rust_bigint(value.amount), + last_update_epoch: value.last_update_epoch, + total_locked_tokens: to_rust_biguint(value.total_locked_tokens), + } + } +} + +impl From> for InteractorPayment { + fn from(value: EsdtTokenPayment) -> Self { + InteractorPayment { + token_id: value.token_identifier.to_string(), + nonce: value.token_nonce, + amount: to_rust_biguint(value.amount), + } + } +} + +impl From for EsdtTokenPayment { + fn from(interactor_token: InteractorPayment) -> Self { + EsdtTokenPayment::new( + TokenIdentifier::from(interactor_token.token_id.as_bytes()), + interactor_token.nonce, + BigUint::from(interactor_token.amount), + ) + } +} + +impl From<&InteractorPayment> for EsdtTokenPayment { + fn from(interactor_token: &InteractorPayment) -> Self { + EsdtTokenPayment::new( + TokenIdentifier::from(interactor_token.token_id.as_bytes()), + interactor_token.nonce, + BigUint::from(interactor_token.amount.clone()), + ) + } +} + +impl AddArgs { + pub fn as_payment_vec( + &self, + dex_interact: &mut DexInteract, + ) -> ManagedVec> { + let first_token_id = dex_interact.state.first_token_id().as_bytes(); + let second_token_id = dex_interact.state.second_token_id().as_bytes(); + + let mut payments = ManagedVec::from_single_item(EsdtTokenPayment::new( + TokenIdentifier::from(first_token_id), + 0, + BigUint::from(self.first_payment_amount), + )); + payments.push(EsdtTokenPayment::new( + TokenIdentifier::from(second_token_id), + 0, + BigUint::from(self.second_payment_amount), + )); + payments + } +} + +impl SwapArgs { + pub fn as_payment(&self, dex_interact: &mut DexInteract) -> EsdtTokenPayment { + let first_token_id = dex_interact.state.first_token_id().as_bytes(); + EsdtTokenPayment::new( + TokenIdentifier::from(first_token_id), + 0, + BigUint::from(self.amount), + ) + } +} + +// helpers + +pub fn extract_caller( + dex_interact: &mut DexInteract, + opt_original_caller: Option
, +) -> OptionalValue> { + let caller = opt_original_caller.unwrap_or_else(|| dex_interact.wallet_address.to_address()); + OptionalValue::>::Some(ManagedAddress::from(caller)) +} + +pub fn to_rust_biguint(value: BigUint) -> RustBigUint { + RustBigUint::from_bytes_be(value.to_bytes_be().as_slice()) +} + +pub fn to_rust_bigint(value: BigInt) -> RustBigInt { + let sign = value.sign(); + + RustBigInt::from_bytes_be(to_rust_sign(sign), value.to_signed_bytes_be().as_slice()) +} + +pub fn to_rust_sign(value: Sign) -> num_bigint::Sign { + match value { + Sign::Minus => num_bigint::Sign::Minus, + Sign::Plus => num_bigint::Sign::Plus, + Sign::NoSign => num_bigint::Sign::NoSign, + } +} diff --git a/dex/interactor/state.toml b/dex/interactor/state.toml new file mode 100644 index 000000000..b416a20d2 --- /dev/null +++ b/dex/interactor/state.toml @@ -0,0 +1,8 @@ +farm_with_locked_rewards = "erd1qqqqqqqqqqqqqpgql7rysqgxxzhykg3j6vccnx4003z2mcl80n4ste3jh8" +pair = "erd1qqqqqqqqqqqqqpgq4zafu6rzdw7fj07hjh5tkm68jsaj7hl60n4s8py4ra" +router = "erd1qqqqqqqqqqqqqpgqa7hv0nahgsl8tz0psat46x0tchm0wuyc0n4s6q28ad" +farm_staking = "erd1qqqqqqqqqqqqqpgquvklwltnlgyn5w5cd65ey36nw8sc008d0n4s0xpr25" +farm_staking_proxy = "erd1qqqqqqqqqqqqqpgqqwn0qa7ft4tew05r0zcd0c5hay5mp6np0n4ss8jm86" +energy_factory = "erd1qqqqqqqqqqqqqpgqs7qnuvj2t0m40xmgrrh88wc7qdx286c60n4spvrzzk" +first_token_id = "UTK-14d57d" +second_token_id = "WEGLD-a28c59" diff --git a/dex/pair-mock/Cargo.toml b/dex/pair-mock/Cargo.toml index e723b6cb2..b32ebc264 100644 --- a/dex/pair-mock/Cargo.toml +++ b/dex/pair-mock/Cargo.toml @@ -12,7 +12,7 @@ path = "src/pair.rs" path = "../../common/common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.itertools] @@ -20,4 +20,4 @@ version = "0.10.1" default-features = false [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/dex/pair-mock/meta/Cargo.toml b/dex/pair-mock/meta/Cargo.toml index 6be30bffe..631b03ed5 100644 --- a/dex/pair-mock/meta/Cargo.toml +++ b/dex/pair-mock/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/pair-mock/src/pair.rs b/dex/pair-mock/src/pair.rs index 1f073c215..991a070ab 100644 --- a/dex/pair-mock/src/pair.rs +++ b/dex/pair-mock/src/pair.rs @@ -110,8 +110,11 @@ pub trait PairMock { let caller = self.blockchain().get_caller(); let lp_token_amount = liquidity - MINIMUM_LIQUIDITY; - self.send() - .direct_esdt(&caller, &lp_token_id, 0, &lp_token_amount); + + self.tx() + .to(&caller) + .single_esdt(&lp_token_id, 0, &lp_token_amount) + .transfer(); ( EsdtTokenPayment::new(lp_token_id, 0, lp_token_amount), diff --git a/dex/pair-mock/wasm/Cargo.lock b/dex/pair-mock/wasm/Cargo.lock index e792a0986..9f45e2aa8 100644 --- a/dex/pair-mock/wasm/Cargo.lock +++ b/dex/pair-mock/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -29,9 +29,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -62,32 +62,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -97,9 +99,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -110,9 +112,9 @@ dependencies = [ [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -128,9 +130,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -154,18 +156,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -182,15 +184,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -202,3 +204,9 @@ name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" diff --git a/dex/pair-mock/wasm/Cargo.toml b/dex/pair-mock/wasm/Cargo.toml index 76349235f..f4a356f60 100644 --- a/dex/pair-mock/wasm/Cargo.toml +++ b/dex/pair-mock/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.pair-mock] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/pair-mock/wasm/src/lib.rs b/dex/pair-mock/wasm/src/lib.rs index e3462d773..4501da7a5 100644 --- a/dex/pair-mock/wasm/src/lib.rs +++ b/dex/pair-mock/wasm/src/lib.rs @@ -10,8 +10,6 @@ // Total number of exported functions: 4 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/pair/Cargo.toml b/dex/pair/Cargo.toml index 145fc58af..e4aea76b6 100644 --- a/dex/pair/Cargo.toml +++ b/dex/pair/Cargo.toml @@ -37,11 +37,11 @@ version = "0.10.1" default-features = false [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/dex/pair/meta/Cargo.toml b/dex/pair/meta/Cargo.toml index cb381e44d..a253b68b7 100644 --- a/dex/pair/meta/Cargo.toml +++ b/dex/pair/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/pair/sc-config.toml b/dex/pair/sc-config.toml index 738e43967..7ba56cf8e 100644 --- a/dex/pair/sc-config.toml +++ b/dex/pair/sc-config.toml @@ -14,4 +14,14 @@ add-labels = ["safe-price-view"] [contracts.full] name = "pair-full" add-unlabelled = true -add-labels = ["safe-price-view"] \ No newline at end of file +add-labels = ["safe-price-view"] + +[[proxy]] +path = "../router/src/pair_proxy.rs" + +[[proxy]] +path = "../interactor/proxies/src/pair_proxy.rs" + +[[proxy.path-rename]] +from = "permissions::Permissions" +to = "Permissions" diff --git a/dex/pair/src/energy_factory_lock_proxy.rs b/dex/pair/src/energy_factory_lock_proxy.rs new file mode 100644 index 000000000..fa41e0f00 --- /dev/null +++ b/dex/pair/src/energy_factory_lock_proxy.rs @@ -0,0 +1,65 @@ +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Locks a whitelisted token until `unlock_epoch` and receive meta ESDT LOCKED tokens + /// on a 1:1 ratio. Accepted input tokens: + /// - base asset token + /// - old factory token -> extends all periods to the provided option + /// - previously locked token -> extends period to the provided option + /// + /// Arguments: + /// - lock_epochs - Number of epochs for which the tokens are locked for. + /// Caller may only choose from the available options, + /// which can be seen by querying getLockOptions + /// - opt_destination - OPTIONAL: destination address for the LOCKED tokens. Default is caller. + /// + /// Output payment: LOCKED tokens + pub fn lock_tokens_endpoint< + Arg0: ProxyArg, + Arg1: ProxyArg>>, + >( + self, + lock_epochs: Arg0, + opt_destination: Arg1, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("lockTokens") + .argument(&lock_epochs) + .argument(&opt_destination) + .original_result() + } +} diff --git a/dex/pair/src/fee.rs b/dex/pair/src/fee.rs index 45df09f82..5703b1bf8 100644 --- a/dex/pair/src/fee.rs +++ b/dex/pair/src/fee.rs @@ -9,19 +9,9 @@ use crate::config::MAX_PERCENTAGE; use crate::contexts::base::StorageCache; use crate::contexts::base::SwapTokensOrder; +use crate::fees_collector_proxy; +use crate::self_proxy; use common_structs::TokenPair; -use fees_collector::fees_accumulation::ProxyTrait as _; - -mod self_proxy { - multiversx_sc::imports!(); - - #[multiversx_sc::proxy] - pub trait PairProxy { - #[payable("*")] - #[endpoint(swapNoFeeAndForward)] - fn swap_no_fee(&self, token_out: TokenIdentifier, destination_address: ManagedAddress); - } -} #[multiversx_sc::module] pub trait FeeModule: @@ -172,11 +162,13 @@ pub trait FeeModule: fn send_fees_collector_cut(&self, token: TokenIdentifier, cut_amount: BigUint) { let fees_collector_address = self.fees_collector_address().get(); - let _: IgnoreValue = self - .fees_collector_proxy(fees_collector_address) + + self.tx() + .to(&fees_collector_address) + .typed(fees_collector_proxy::FeesCollectorProxy) .deposit_swap_fees() - .with_esdt_transfer((token, 0, cut_amount)) - .execute_on_dest_context(); + .single_esdt(&token, 0, &cut_amount) + .sync_call(); } fn send_fee_slice( @@ -296,12 +288,12 @@ pub trait FeeModule: ) { let pair_address = self.get_extern_swap_pair_address(available_token, requested_token); - let _: IgnoreValue = self - .pair_proxy() - .contract(pair_address) + self.tx() + .to(&pair_address) + .typed(self_proxy::PairProxy) .swap_no_fee(requested_token.clone(), destination_address.clone()) - .with_esdt_transfer((available_token.clone(), 0, available_amount.clone())) - .execute_on_dest_context(); + .single_esdt(available_token, 0, available_amount) + .sync_call(); } #[inline] @@ -397,12 +389,6 @@ pub trait FeeModule: result } - #[proxy] - fn pair_proxy(&self) -> self_proxy::Proxy; - - #[proxy] - fn fees_collector_proxy(&self, sc_address: ManagedAddress) -> fees_collector::Proxy; - #[view(getFeesCollectorAddress)] #[storage_mapper("feesCollectorAddress")] fn fees_collector_address(&self) -> SingleValueMapper; diff --git a/dex/pair/src/fees_collector_proxy.rs b/dex/pair/src/fees_collector_proxy.rs new file mode 100644 index 000000000..fcbadf918 --- /dev/null +++ b/dex/pair/src/fees_collector_proxy.rs @@ -0,0 +1,44 @@ +use multiversx_sc::proxy_imports::*; + +pub struct FeesCollectorProxy; + +impl TxProxyTrait for FeesCollectorProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FeesCollectorProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FeesCollectorProxyMethods { wrapped_tx: tx } + } +} + +pub struct FeesCollectorProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FeesCollectorProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Pair SC will deposit the fees through this endpoint + /// Deposits for current week are accessible starting next week + pub fn deposit_swap_fees(self) -> TxProxyCall { + self.wrapped_tx + .raw_call("depositSwapFees") + .original_result() + } +} diff --git a/dex/pair/src/lib.rs b/dex/pair/src/lib.rs index e67010d67..6f7a2f308 100644 --- a/dex/pair/src/lib.rs +++ b/dex/pair/src/lib.rs @@ -6,15 +6,18 @@ multiversx_sc::derive_imports!(); mod amm; pub mod config; mod contexts; +mod energy_factory_lock_proxy; pub mod errors; mod events; pub mod fee; +pub mod fees_collector_proxy; mod liquidity_pool; pub mod locking_wrapper; pub mod pair_actions; pub mod read_pair_storage; pub mod safe_price; pub mod safe_price_view; +pub mod self_proxy; use crate::errors::*; diff --git a/dex/pair/src/locking_wrapper.rs b/dex/pair/src/locking_wrapper.rs index 14fb910b8..460353d50 100644 --- a/dex/pair/src/locking_wrapper.rs +++ b/dex/pair/src/locking_wrapper.rs @@ -1,3 +1,5 @@ +use crate::energy_factory_lock_proxy; + multiversx_sc::imports!(); #[multiversx_sc::module] @@ -56,15 +58,15 @@ pub trait LockingWrapperModule: amount: BigUint, ) -> EsdtTokenPayment { let unlock_epoch = self.unlock_epoch().get(); - let mut proxy_instance = self.get_locking_sc_proxy_instance(); + let locking_sc_address = self.locking_sc_address().get(); - let payment: EgldOrEsdtTokenPayment = proxy_instance + self.tx() + .to(locking_sc_address) + .typed(energy_factory_lock_proxy::SimpleLockEnergyProxy) .lock_tokens_endpoint(unlock_epoch, opt_dest) - .with_esdt_transfer((token_id, 0, amount)) - .execute_on_dest_context(); - let (token_id, token_nonce, amount) = payment.into_tuple(); - - EsdtTokenPayment::new(token_id.unwrap_esdt(), token_nonce, amount) + .single_esdt(&token_id, 0, &amount) + .returns(ReturnsResult) + .sync_call() } fn should_generate_locked_asset(&self) -> bool { @@ -74,14 +76,6 @@ pub trait LockingWrapperModule: current_epoch < locking_deadline_epoch } - fn get_locking_sc_proxy_instance(&self) -> simple_lock::Proxy { - let locking_sc_address = self.locking_sc_address().get(); - self.locking_sc_proxy_obj(locking_sc_address) - } - - #[proxy] - fn locking_sc_proxy_obj(&self, sc_address: ManagedAddress) -> simple_lock::Proxy; - #[view(getLockingScAddress)] #[storage_mapper("lockingScAddress")] fn locking_sc_address(&self) -> SingleValueMapper; diff --git a/dex/pair/src/pair_actions/initial_liq.rs b/dex/pair/src/pair_actions/initial_liq.rs index b418fec2a..ab20a3565 100644 --- a/dex/pair/src/pair_actions/initial_liq.rs +++ b/dex/pair/src/pair_actions/initial_liq.rs @@ -69,8 +69,7 @@ pub trait InitialLiquidityModule: let lp_payment = EsdtTokenPayment::new(storage_cache.lp_token_id.clone(), 0, liq_added.clone()); - self.send() - .direct_non_zero_esdt_payment(&caller, &lp_payment); + self.tx().to(&caller).payment(lp_payment).transfer(); self.state().set(State::PartialActive); diff --git a/dex/pair/src/self_proxy.rs b/dex/pair/src/self_proxy.rs new file mode 100644 index 000000000..d4d2534ff --- /dev/null +++ b/dex/pair/src/self_proxy.rs @@ -0,0 +1,51 @@ +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn swap_no_fee< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + destination_address: Arg1, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("swapNoFeeAndForward") + .argument(&token_out) + .argument(&destination_address) + .original_result() + } +} diff --git a/dex/pair/wasm-pair-full/Cargo.lock b/dex/pair/wasm-pair-full/Cargo.lock index 31a1865f1..57b6b2a65 100644 --- a/dex/pair/wasm-pair-full/Cargo.lock +++ b/dex/pair/wasm-pair-full/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -140,9 +140,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -161,32 +159,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -209,18 +209,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -286,18 +286,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -331,15 +331,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -361,6 +361,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/pair/wasm-pair-full/Cargo.toml b/dex/pair/wasm-pair-full/Cargo.toml index 96ee5d5db..cca493f12 100644 --- a/dex/pair/wasm-pair-full/Cargo.toml +++ b/dex/pair/wasm-pair-full/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.pair] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/pair/wasm-pair-full/src/lib.rs b/dex/pair/wasm-pair-full/src/lib.rs index 149c4a91b..5f39165a9 100644 --- a/dex/pair/wasm-pair-full/src/lib.rs +++ b/dex/pair/wasm-pair-full/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 64 +// Upgrade: 1 +// Endpoints: 63 // Async Callback (empty): 1 // Total number of exported functions: 66 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/pair/wasm-safe-price-view/Cargo.lock b/dex/pair/wasm-safe-price-view/Cargo.lock index 4357069de..9a79d3870 100644 --- a/dex/pair/wasm-safe-price-view/Cargo.lock +++ b/dex/pair/wasm-safe-price-view/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -140,9 +140,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -161,32 +159,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -209,18 +209,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -278,18 +278,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -331,15 +331,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -361,6 +361,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/pair/wasm-safe-price-view/Cargo.toml b/dex/pair/wasm-safe-price-view/Cargo.toml index 2ded396fe..2546d4af1 100644 --- a/dex/pair/wasm-safe-price-view/Cargo.toml +++ b/dex/pair/wasm-safe-price-view/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.pair] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/pair/wasm-safe-price-view/src/lib.rs b/dex/pair/wasm-safe-price-view/src/lib.rs index cc5f99d90..de0966c65 100644 --- a/dex/pair/wasm-safe-price-view/src/lib.rs +++ b/dex/pair/wasm-safe-price-view/src/lib.rs @@ -10,8 +10,6 @@ // Total number of exported functions: 11 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/pair/wasm/Cargo.lock b/dex/pair/wasm/Cargo.lock index 42713d696..cec9d4165 100644 --- a/dex/pair/wasm/Cargo.lock +++ b/dex/pair/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -140,9 +140,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -161,32 +159,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -209,18 +209,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -286,18 +286,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -331,15 +331,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -361,6 +361,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/pair/wasm/Cargo.toml b/dex/pair/wasm/Cargo.toml index 7ab7c8901..4e7543d2a 100644 --- a/dex/pair/wasm/Cargo.toml +++ b/dex/pair/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.pair] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/pair/wasm/src/lib.rs b/dex/pair/wasm/src/lib.rs index 82a357b8a..7279213ee 100644 --- a/dex/pair/wasm/src/lib.rs +++ b/dex/pair/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 55 +// Upgrade: 1 +// Endpoints: 54 // Async Callback (empty): 1 // Total number of exported functions: 57 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/price-discovery/Cargo.toml b/dex/price-discovery/Cargo.toml index 74efd78a8..d020d4f75 100644 --- a/dex/price-discovery/Cargo.toml +++ b/dex/price-discovery/Cargo.toml @@ -12,11 +12,11 @@ path = "src/lib.rs" hex-literal = "0.3.1" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.locking_module] path = "../../common/modules/locking_module" @@ -30,4 +30,4 @@ hex = "0.4" path = "../../locked-asset/simple-lock" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/dex/price-discovery/meta/Cargo.toml b/dex/price-discovery/meta/Cargo.toml index c6a8b19d7..46ed55475 100644 --- a/dex/price-discovery/meta/Cargo.toml +++ b/dex/price-discovery/meta/Cargo.toml @@ -9,5 +9,5 @@ authors = ["Dorin Iancu "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/price-discovery/src/lib.rs b/dex/price-discovery/src/lib.rs index b0c430e52..81d60afd4 100644 --- a/dex/price-discovery/src/lib.rs +++ b/dex/price-discovery/src/lib.rs @@ -200,8 +200,10 @@ pub trait PriceDiscovery: require!(current_price >= min_price, BELOW_MIN_PRICE_ERR_MSG); let caller = self.blockchain().get_caller(); - self.send() - .direct(&caller, &refund_token_id, 0, &withdraw_amount); + self.tx() + .to(&caller) + .egld_or_single_esdt(&refund_token_id, 0, &withdraw_amount) + .transfer(); self.emit_withdraw_event( refund_token_id.clone(), diff --git a/dex/price-discovery/wasm/Cargo.lock b/dex/price-discovery/wasm/Cargo.lock index ae8611c4d..4ddad3327 100644 --- a/dex/price-discovery/wasm/Cargo.lock +++ b/dex/price-discovery/wasm/Cargo.lock @@ -10,33 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" - -[[package]] -name = "common_errors" -version = "0.0.0" -dependencies = [ - "multiversx-sc", -] - -[[package]] -name = "common_structs" -version = "0.0.0" -dependencies = [ - "fixed-supply-token", - "math", - "mergeable", - "multiversx-sc", - "unwrappable", -] +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "endian-type" @@ -44,29 +26,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" -[[package]] -name = "energy-factory" -version = "0.0.0" -dependencies = [ - "common_structs", - "legacy_token_decode_module", - "math", - "mergeable", - "multiversx-sc", - "multiversx-sc-modules", - "sc_whitelist_module", - "simple-lock", - "unwrappable", - "utils", -] - -[[package]] -name = "fixed-supply-token" -version = "0.0.0" -dependencies = [ - "multiversx-sc", -] - [[package]] name = "hex" version = "0.4.3" @@ -85,66 +44,43 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "legacy_token_decode_module" -version = "0.0.0" -dependencies = [ - "common_structs", - "multiversx-sc", - "utils", -] - [[package]] name = "locking_module" version = "0.0.0" -dependencies = [ - "energy-factory", - "multiversx-sc", - "simple-lock", -] - -[[package]] -name = "math" -version = "0.0.0" -dependencies = [ - "multiversx-sc", -] - -[[package]] -name = "mergeable" -version = "0.0.0" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal 0.4.1", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -154,9 +90,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -167,18 +103,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -194,9 +130,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -221,18 +157,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -247,34 +183,17 @@ dependencies = [ "nibble_vec", ] -[[package]] -name = "sc_whitelist_module" -version = "0.0.0" -dependencies = [ - "common_errors", - "multiversx-sc", -] - -[[package]] -name = "simple-lock" -version = "0.0.0" -dependencies = [ - "common_structs", - "multiversx-sc", - "multiversx-sc-modules", -] - [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -288,18 +207,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] -name = "unwrappable" -version = "0.0.0" -dependencies = [ - "multiversx-sc", -] - -[[package]] -name = "utils" -version = "0.0.0" -dependencies = [ - "common_structs", - "fixed-supply-token", - "mergeable", - "multiversx-sc", -] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" diff --git a/dex/price-discovery/wasm/Cargo.toml b/dex/price-discovery/wasm/Cargo.toml index 0969e1b66..4c672d100 100644 --- a/dex/price-discovery/wasm/Cargo.toml +++ b/dex/price-discovery/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.price-discovery] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/price-discovery/wasm/src/lib.rs b/dex/price-discovery/wasm/src/lib.rs index c29196d8a..5e55db7a5 100644 --- a/dex/price-discovery/wasm/src/lib.rs +++ b/dex/price-discovery/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 28 +// Upgrade: 1 +// Endpoints: 27 // Async Callback: 1 // Total number of exported functions: 30 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/proxy-deployer/Cargo.toml b/dex/proxy-deployer/Cargo.toml index f50a038ff..47a00cd0e 100644 --- a/dex/proxy-deployer/Cargo.toml +++ b/dex/proxy-deployer/Cargo.toml @@ -21,11 +21,11 @@ path = "../../common/modules/farm/config" path = "../../common/modules/farm/farm_token" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/dex/proxy-deployer/meta/Cargo.toml b/dex/proxy-deployer/meta/Cargo.toml index ddae9ccb9..0745a5e5a 100644 --- a/dex/proxy-deployer/meta/Cargo.toml +++ b/dex/proxy-deployer/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/proxy-deployer/src/farm_deploy.rs b/dex/proxy-deployer/src/farm_deploy.rs index 8500946e8..96dee8056 100644 --- a/dex/proxy-deployer/src/farm_deploy.rs +++ b/dex/proxy-deployer/src/farm_deploy.rs @@ -1,6 +1,6 @@ -multiversx_sc::imports!(); +use crate::farm_proxy; -use farm::ProxyTrait as _; +multiversx_sc::imports!(); const DIVISION_SAFETY_CONST: u64 = 1_000_000_000_000_000_000; @@ -21,8 +21,10 @@ pub trait FarmDeployModule { let farm_template = self.farm_template_address().get(); let code_metadata = CodeMetadata::PAYABLE_BY_SC | CodeMetadata::READABLE | CodeMetadata::UPGRADEABLE; - let (new_farm_address, ()) = self - .farm_deploy_proxy() + + let new_farm_address = self + .tx() + .typed(farm_proxy::FarmProxy) .init( reward_token_id, farming_token_id, @@ -31,7 +33,10 @@ pub trait FarmDeployModule { owner, admins_list, ) - .deploy_from_source(&farm_template, code_metadata); + .from_source(farm_template) + .code_metadata(code_metadata) + .returns(ReturnsNewManagedAddress) + .sync_call(); self.deployer_farm_addresses(&caller) .update(|farm_addresses| { @@ -51,15 +56,13 @@ pub trait FarmDeployModule { args: MultiValueEncoded, ) { let gas_left = self.blockchain().get_gas_left(); - let mut contract_call = self - .send() - .contract_call::<()>(farm_address, function_name) - .with_gas_limit(gas_left); - for arg in args { - contract_call.push_raw_argument(arg); - } - let _: IgnoreValue = contract_call.execute_on_dest_context(); + self.tx() + .to(&farm_address) + .raw_call(function_name) + .gas(gas_left) + .arguments_raw(args.to_arg_buffer()) + .sync_call(); } #[view(getAllDeployedFarms)] @@ -71,9 +74,6 @@ pub trait FarmDeployModule { all_farm_addresses } - #[proxy] - fn farm_deploy_proxy(&self) -> farm::Proxy; - #[storage_mapper("farmTemplateAddress")] fn farm_template_address(&self) -> SingleValueMapper; diff --git a/dex/proxy-deployer/src/farm_proxy.rs b/dex/proxy-deployer/src/farm_proxy.rs new file mode 100644 index 000000000..e6abee5ce --- /dev/null +++ b/dex/proxy-deployer/src/farm_proxy.rs @@ -0,0 +1,63 @@ +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + Arg5: ProxyArg>>, + >( + self, + reward_token_id: Arg0, + farming_token_id: Arg1, + division_safety_constant: Arg2, + pair_contract_address: Arg3, + owner: Arg4, + admins: Arg5, + ) -> TxProxyDeploy { + self.wrapped_tx + .raw_deploy() + .argument(&reward_token_id) + .argument(&farming_token_id) + .argument(&division_safety_constant) + .argument(&pair_contract_address) + .argument(&owner) + .argument(&admins) + .original_result() + } +} diff --git a/dex/proxy-deployer/src/lib.rs b/dex/proxy-deployer/src/lib.rs index 7f7f0c16a..e2a7acffc 100644 --- a/dex/proxy-deployer/src/lib.rs +++ b/dex/proxy-deployer/src/lib.rs @@ -3,6 +3,7 @@ multiversx_sc::imports!(); pub mod farm_deploy; +pub mod farm_proxy; #[multiversx_sc::contract] pub trait ProxyDeployer: farm_deploy::FarmDeployModule { diff --git a/dex/proxy-deployer/wasm/Cargo.lock b/dex/proxy-deployer/wasm/Cargo.lock index e3585e359..a77bd79d0 100644 --- a/dex/proxy-deployer/wasm/Cargo.lock +++ b/dex/proxy-deployer/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -256,9 +256,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -277,32 +275,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -312,9 +312,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -325,18 +325,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -352,9 +352,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -394,9 +394,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -422,9 +422,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -473,15 +473,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -511,6 +511,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/proxy-deployer/wasm/Cargo.toml b/dex/proxy-deployer/wasm/Cargo.toml index 33d489855..0a790ae43 100644 --- a/dex/proxy-deployer/wasm/Cargo.toml +++ b/dex/proxy-deployer/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.proxy-deployer] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/proxy-deployer/wasm/src/lib.rs b/dex/proxy-deployer/wasm/src/lib.rs index b8f3493f8..620fcb058 100644 --- a/dex/proxy-deployer/wasm/src/lib.rs +++ b/dex/proxy-deployer/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 5 +// Upgrade: 1 +// Endpoints: 4 // Async Callback (empty): 1 // Total number of exported functions: 7 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/router/Cargo.toml b/dex/router/Cargo.toml index a70a9ba1d..1d2a60397 100644 --- a/dex/router/Cargo.toml +++ b/dex/router/Cargo.toml @@ -8,6 +8,12 @@ publish = false [lib] path = "src/contract.rs" +[dependencies.common_structs] +path = "../../common/common_structs" + +[dependencies.permissions_module] +path = "../../common/modules/permissions_module" + [dependencies.token_send] path = "../../common/modules/token_send" @@ -15,7 +21,7 @@ path = "../../common/modules/token_send" path = "../../common/modules/pausable" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.pair] @@ -28,4 +34,4 @@ path = "../../common/modules/locking_module" path = "../../locked-asset/simple-lock" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/dex/router/meta/Cargo.toml b/dex/router/meta/Cargo.toml index 744ea5d49..e6b30fb54 100644 --- a/dex/router/meta/Cargo.toml +++ b/dex/router/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/dex/router/sc-config.toml b/dex/router/sc-config.toml new file mode 100644 index 000000000..fb11e3469 --- /dev/null +++ b/dex/router/sc-config.toml @@ -0,0 +1,2 @@ +[[proxy]] +path = "../interactor/proxies/src/router_proxy.rs" diff --git a/dex/router/src/contract.rs b/dex/router/src/contract.rs index e23d0f12f..9afb49114 100644 --- a/dex/router/src/contract.rs +++ b/dex/router/src/contract.rs @@ -8,12 +8,10 @@ pub mod enable_swap_by_user; mod events; pub mod factory; pub mod multi_pair_swap; +mod pair_proxy; use factory::PairTokens; -use pair::config::ProxyTrait as _; -use pair::fee::ProxyTrait as _; -use pair::{read_pair_storage, ProxyTrait as _}; -use pausable::ProxyTrait as _; +use pair::read_pair_storage; const LP_TOKEN_DECIMALS: usize = 18; const LP_TOKEN_INITIAL_SUPPLY: u64 = 1000; @@ -54,10 +52,11 @@ pub trait Router: self.state().set(false); } else { self.check_is_pair_sc(&address); - let _: IgnoreValue = self - .pair_contract_proxy(address) + self.tx() + .to(&address) + .typed(pair_proxy::PairProxy) .pause() - .execute_on_dest_context(); + .sync_call(); } } @@ -68,10 +67,11 @@ pub trait Router: self.state().set(true); } else { self.check_is_pair_sc(&address); - let _: IgnoreValue = self - .pair_contract_proxy(address) + self.tx() + .to(&address) + .typed(pair_proxy::PairProxy) .resume() - .execute_on_dest_context(); + .sync_call(); } } @@ -156,9 +156,6 @@ pub trait Router: &self, first_token_id: TokenIdentifier, second_token_id: TokenIdentifier, - initial_liquidity_adder: ManagedAddress, - total_fee_percent_requested: u64, - special_fee_percent_requested: u64, ) { require!(self.is_active(), "Not active"); @@ -174,21 +171,7 @@ pub trait Router: let pair_address = self.get_pair(first_token_id.clone(), second_token_id.clone()); require!(!pair_address.is_zero(), "Pair does not exists"); - require!( - total_fee_percent_requested >= special_fee_percent_requested - && total_fee_percent_requested < MAX_TOTAL_FEE_PERCENT, - "Bad percents" - ); - - self.upgrade_pair( - pair_address, - &first_token_id, - &second_token_id, - &self.owner().get(), - &initial_liquidity_adder, - total_fee_percent_requested, - special_fee_percent_requested, - ); + self.upgrade_pair(pair_address); } #[payable("EGLD")] @@ -219,10 +202,14 @@ pub trait Router: } }; - let result: TokenIdentifier = self - .pair_contract_proxy(pair_address.clone()) + let result = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .get_lp_token_identifier() - .execute_on_dest_context(); + .returns(ReturnsResult) + .sync_call(); + require!( !result.is_valid_esdt_identifier(), "LP Token already issued" @@ -247,7 +234,6 @@ pub trait Router: can_add_special_roles: true, }, ) - .async_call() .with_callback( self.callbacks() .lp_token_issue_callback(&caller, &pair_address), @@ -260,10 +246,14 @@ pub trait Router: require!(self.is_active(), "Not active"); self.check_is_pair_sc(&pair_address); - let pair_token: TokenIdentifier = self - .pair_contract_proxy(pair_address.clone()) + let pair_token = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .get_lp_token_identifier() - .execute_on_dest_context(); + .returns(ReturnsResult) + .sync_call(); + require!(pair_token.is_valid_esdt_identifier(), "LP token not issued"); let roles = [EsdtLocalRole::Mint, EsdtLocalRole::Burn]; @@ -271,8 +261,7 @@ pub trait Router: self.send() .esdt_system_sc_proxy() .set_special_roles(&pair_address, &pair_token, roles.iter().cloned()) - .async_call() - .call_and_exit() + .async_call_and_exit() } #[only_owner] @@ -328,10 +317,11 @@ pub trait Router: require!(self.is_active(), "Not active"); self.check_is_pair_sc(&pair_address); - let _: IgnoreValue = self - .pair_contract_proxy(pair_address) + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .set_fee_on(true, fee_to_address, fee_token) - .execute_on_dest_context(); + .sync_call(); } #[only_owner] @@ -345,10 +335,11 @@ pub trait Router: require!(self.is_active(), "Not active"); self.check_is_pair_sc(&pair_address); - let _: IgnoreValue = self - .pair_contract_proxy(pair_address) + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .set_fee_on(false, fee_to_address, fee_token) - .execute_on_dest_context(); + .sync_call(); } #[callback] @@ -362,14 +353,15 @@ pub trait Router: match result { ManagedAsyncCallResult::Ok(()) => { self.pair_temporary_owner().remove(address); - let _: IgnoreValue = self - .pair_contract_proxy(address.clone()) + self.tx() + .to(address) + .typed(pair_proxy::PairProxy) .set_lp_token_identifier(token_id.unwrap_esdt()) - .execute_on_dest_context(); + .sync_call(); } ManagedAsyncCallResult::Err(_) => { if token_id.is_egld() && returned_tokens > 0u64 { - self.send().direct_egld(caller, &returned_tokens); + self.tx().to(caller).egld(&returned_tokens).transfer(); } } } diff --git a/dex/router/src/enable_swap_by_user.rs b/dex/router/src/enable_swap_by_user.rs index 1a8c40770..2fee66942 100644 --- a/dex/router/src/enable_swap_by_user.rs +++ b/dex/router/src/enable_swap_by_user.rs @@ -1,11 +1,10 @@ multiversx_sc::imports!(); multiversx_sc::derive_imports!(); -use pair::{config::ProxyTrait as _, pair_actions::views::ProxyTrait as _, read_pair_storage}; -use pausable::{ProxyTrait as _, State}; +use pausable::State; use simple_lock::locked_token::LockedTokenAttributes; -use crate::{config, DEFAULT_SPECIAL_FEE_PERCENT, USER_DEFINED_TOTAL_FEE_PERCENT}; +use crate::{config, pair_proxy, DEFAULT_SPECIAL_FEE_PERCENT, USER_DEFINED_TOTAL_FEE_PERCENT}; static PAIR_LP_TOKEN_ID_STORAGE_KEY: &[u8] = b"lpTokenIdentifier"; static PAIR_INITIAL_LIQ_ADDER_STORAGE_KEY: &[u8] = b"initial_liquidity_adder"; @@ -28,7 +27,7 @@ pub struct SafePriceResult { #[multiversx_sc::module] pub trait EnableSwapByUserModule: config::ConfigModule - + read_pair_storage::ReadPairStorageModule + + crate::read_pair_storage::ReadPairStorageModule + crate::factory::FactoryModule + crate::events::EventsModule { @@ -137,12 +136,14 @@ pub trait EnableSwapByUserModule: self.set_fee_percents(pair_address.clone()); self.pair_resume(pair_address.clone()); - self.send().direct_esdt( - &caller, - &payment.token_identifier, - payment.token_nonce, - &payment.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &payment.token_identifier, + payment.token_nonce, + &payment.amount, + ) + .transfer(); self.emit_user_swaps_enabled_event( caller, @@ -176,10 +177,13 @@ pub trait EnableSwapByUserModule: pair_address: ManagedAddress, lp_token_amount: BigUint, ) -> SafePriceResult { - let multi_value: MultiValue2, EsdtTokenPayment> = - self.user_pair_proxy(pair_address) - .get_tokens_for_given_position(lp_token_amount) - .execute_on_dest_context(); + let multi_value = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) + .get_tokens_for_given_position(lp_token_amount) + .returns(ReturnsResult) + .sync_call(); let (first_result, second_result) = multi_value.into_tuple(); let mut safe_price_result = SafePriceResult { @@ -229,17 +233,19 @@ pub trait EnableSwapByUserModule: } fn set_fee_percents(&self, pair_address: ManagedAddress) { - let _: IgnoreValue = self - .user_pair_proxy(pair_address) + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .set_fee_percent(USER_DEFINED_TOTAL_FEE_PERCENT, DEFAULT_SPECIAL_FEE_PERCENT) - .execute_on_dest_context(); + .sync_call(); } fn pair_resume(&self, pair_address: ManagedAddress) { - let _: IgnoreValue = self - .user_pair_proxy(pair_address) + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .resume() - .execute_on_dest_context(); + .sync_call(); } fn read_storage_from_pair( @@ -251,7 +257,4 @@ pub trait EnableSwapByUserModule: self.storage_raw() .read_from_address(pair_address, key_buffer) } - - #[proxy] - fn user_pair_proxy(&self, to: ManagedAddress) -> pair::Proxy; } diff --git a/dex/router/src/factory.rs b/dex/router/src/factory.rs index fea434703..c131544ff 100644 --- a/dex/router/src/factory.rs +++ b/dex/router/src/factory.rs @@ -1,8 +1,7 @@ multiversx_sc::imports!(); multiversx_sc::derive_imports!(); -use crate::config; -use pair::read_pair_storage; +use crate::{config, pair_proxy}; const TEMPORARY_OWNER_PERIOD_BLOCKS: u64 = 50; @@ -20,10 +19,9 @@ pub struct PairContractMetadata { } #[multiversx_sc::module] -pub trait FactoryModule: config::ConfigModule + read_pair_storage::ReadPairStorageModule { - #[proxy] - fn pair_contract_deploy_proxy(&self) -> pair::Proxy; - +pub trait FactoryModule: + config::ConfigModule + crate::read_pair_storage::ReadPairStorageModule +{ fn init_factory(&self, pair_template_address_opt: Option) { if let Some(addr) = pair_template_address_opt { self.pair_template_address().set(&addr); @@ -47,9 +45,9 @@ pub trait FactoryModule: config::ConfigModule + read_pair_storage::ReadPairStora !self.pair_template_address().is_empty(), "pair contract template is empty" ); - - let (new_address, ()) = self - .pair_contract_deploy_proxy() + let new_address = self + .tx() + .typed(pair_proxy::PairProxy) .init( first_token_id, second_token_id, @@ -60,10 +58,12 @@ pub trait FactoryModule: config::ConfigModule + read_pair_storage::ReadPairStora initial_liquidity_adder, admins, ) - .deploy_from_source( - &self.pair_template_address().get(), + .from_source(self.pair_template_address().get()) + .code_metadata( CodeMetadata::UPGRADEABLE | CodeMetadata::READABLE | CodeMetadata::PAYABLE_BY_SC, - ); + ) + .returns(ReturnsNewManagedAddress) + .sync_call(); self.pair_map().insert( PairTokens { @@ -82,32 +82,16 @@ pub trait FactoryModule: config::ConfigModule + read_pair_storage::ReadPairStora new_address } - fn upgrade_pair( - &self, - pair_address: ManagedAddress, - first_token_id: &TokenIdentifier, - second_token_id: &TokenIdentifier, - owner: &ManagedAddress, - _initial_liquidity_adder: &ManagedAddress, - total_fee_percent: u64, - special_fee_percent: u64, - ) { - self.pair_contract_deploy_proxy() - .contract(pair_address) - .init( - first_token_id, - second_token_id, - self.blockchain().get_sc_address(), - owner, - total_fee_percent, - special_fee_percent, - ManagedAddress::zero(), - MultiValueEncoded::new(), - ) - .upgrade_from_source( - &self.pair_template_address().get(), + fn upgrade_pair(&self, pair_address: ManagedAddress) { + self.tx() + .to(pair_address) + .typed(pair_proxy::PairProxy) + .upgrade() + .from_source(self.pair_template_address().get()) + .code_metadata( CodeMetadata::UPGRADEABLE | CodeMetadata::READABLE | CodeMetadata::PAYABLE_BY_SC, - ); + ) + .upgrade_async_call_and_exit(); } #[view(getAllPairsManagedAddresses)] diff --git a/dex/router/src/multi_pair_swap.rs b/dex/router/src/multi_pair_swap.rs index 1e47378f9..9c2134bbf 100644 --- a/dex/router/src/multi_pair_swap.rs +++ b/dex/router/src/multi_pair_swap.rs @@ -3,7 +3,7 @@ multiversx_sc::derive_imports!(); use super::factory; use crate::config; -use pair::{pair_actions::swap::ProxyTrait as _, read_pair_storage}; +use crate::pair_proxy; type SwapOperationType = MultiValue4, ManagedBuffer, TokenIdentifier, BigUint>; @@ -14,7 +14,7 @@ pub const SWAP_TOKENS_FIXED_OUTPUT_FUNC_NAME: &[u8] = b"swapTokensFixedOutput"; #[multiversx_sc::module] pub trait MultiPairSwap: config::ConfigModule - + read_pair_storage::ReadPairStorageModule + + crate::read_pair_storage::ReadPairStorageModule + factory::FactoryModule + token_send::TokenSendModule { @@ -70,7 +70,7 @@ pub trait MultiPairSwap: } payments.push(last_payment); - self.send().direct_multi(&caller, &payments); + self.tx().to(&caller).payment(&payments).transfer(); payments } @@ -83,10 +83,13 @@ pub trait MultiPairSwap: token_out: TokenIdentifier, amount_out_min: BigUint, ) -> EsdtTokenPayment { - self.pair_contract_proxy(pair_address) + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .swap_tokens_fixed_input(token_out, amount_out_min) - .with_esdt_transfer((token_in, 0, amount_in)) - .execute_on_dest_context() + .single_esdt(&token_in, 0, &amount_in) + .returns(ReturnsResult) + .sync_call() } fn actual_swap_fixed_output( @@ -97,15 +100,13 @@ pub trait MultiPairSwap: token_out: TokenIdentifier, amount_out: BigUint, ) -> (EsdtTokenPayment, EsdtTokenPayment) { - let call_result: MultiValue2, EsdtTokenPayment> = - self.pair_contract_proxy(pair_address) - .swap_tokens_fixed_output(token_out, amount_out) - .with_esdt_transfer((token_in, 0, amount_in_max)) - .execute_on_dest_context(); - - call_result.into_tuple() + self.tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) + .swap_tokens_fixed_output(token_out, amount_out) + .single_esdt(&token_in, 0, &amount_in_max) + .returns(ReturnsResult) + .sync_call() + .into_tuple() } - - #[proxy] - fn pair_contract_proxy(&self, to: ManagedAddress) -> pair::Proxy; } diff --git a/dex/router/src/pair_proxy.rs b/dex/router/src/pair_proxy.rs new file mode 100644 index 000000000..cdecef331 --- /dev/null +++ b/dex/router/src/pair_proxy.rs @@ -0,0 +1,1015 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg>, + Arg4: ProxyArg, + Arg5: ProxyArg, + Arg6: ProxyArg>, + Arg7: ProxyArg>>, + >( + self, + first_token_id: Arg0, + second_token_id: Arg1, + router_address: Arg2, + router_owner_address: Arg3, + total_fee_percent: Arg4, + special_fee_percent: Arg5, + initial_liquidity_adder: Arg6, + admins: Arg7, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&first_token_id) + .argument(&second_token_id) + .argument(&router_address) + .argument(&router_owner_address) + .argument(&total_fee_percent) + .argument(&special_fee_percent) + .argument(&initial_liquidity_adder) + .argument(&admins) + .original_result() + } +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn set_lp_token_identifier< + Arg0: ProxyArg>, + >( + self, + token_identifier: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLpTokenIdentifier") + .argument(&token_identifier) + .original_result() + } + + pub fn is_fee_enabled( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeeState") + .original_result() + } + + pub fn whitelist_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("whitelist") + .argument(&address) + .original_result() + } + + pub fn remove_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeWhitelist") + .argument(&address) + .original_result() + } + + pub fn add_trusted_swap_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + first_token: Arg1, + second_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addTrustedSwapPair") + .argument(&pair_address) + .argument(&first_token) + .argument(&second_token) + .original_result() + } + + pub fn remove_trusted_swap_pair< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token: Arg0, + second_token: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeTrustedSwapPair") + .argument(&first_token) + .argument(&second_token) + .original_result() + } + + /// `fees_collector_cut_percentage` of the special fees are sent to the fees_collector_address SC + /// + /// For example, if special fees is 5%, and fees_collector_cut_percentage is 10%, + /// then of the 5%, 10% are reserved, and only the rest are split between other pair contracts. + pub fn setup_fees_collector< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + fees_collector_address: Arg0, + fees_collector_cut_percentage: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setupFeesCollector") + .argument(&fees_collector_address) + .argument(&fees_collector_cut_percentage) + .original_result() + } + + pub fn set_fee_on< + Arg0: ProxyArg, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + enabled: Arg0, + fee_to_address: Arg1, + fee_token: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeeOn") + .argument(&enabled) + .argument(&fee_to_address) + .argument(&fee_token) + .original_result() + } + + pub fn get_fee_destinations( + self, + ) -> TxTypedCall, TokenIdentifier)>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeeDestinations") + .original_result() + } + + pub fn get_trusted_swap_pairs( + self, + ) -> TxTypedCall, ManagedAddress)>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTrustedSwapPairs") + .original_result() + } + + pub fn get_whitelisted_managed_addresses( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getWhitelistedManagedAddresses") + .original_result() + } + + pub fn fees_collector_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeesCollectorAddress") + .original_result() + } + + pub fn fees_collector_cut_percentage( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFeesCollectorCutPercentage") + .original_result() + } + + pub fn set_state_active_no_swaps( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setStateActiveNoSwaps") + .original_result() + } + + pub fn set_fee_percent< + Arg0: ProxyArg, + Arg1: ProxyArg, + >( + self, + total_fee_percent: Arg0, + special_fee_percent: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setFeePercents") + .argument(&total_fee_percent) + .argument(&special_fee_percent) + .original_result() + } + + pub fn get_lp_token_identifier( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokenIdentifier") + .original_result() + } + + pub fn total_fee_percent( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalFeePercent") + .original_result() + } + + pub fn special_fee_percent( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSpecialFee") + .original_result() + } + + pub fn router_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getRouterManagedAddress") + .original_result() + } + + pub fn first_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getFirstTokenId") + .original_result() + } + + pub fn second_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSecondTokenId") + .original_result() + } + + pub fn lp_token_supply( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTotalSupply") + .original_result() + } + + pub fn initial_liquidity_adder( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getInitialLiquidtyAdder") + .original_result() + } + + pub fn pair_reserve< + Arg0: ProxyArg>, + >( + self, + token_id: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getReserve") + .argument(&token_id) + .original_result() + } + + pub fn safe_price_current_index( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceCurrentIndex") + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_default_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + pair_address: Arg0, + liquidity: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByDefaultOffset") + .argument(&pair_address) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_round_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + round_offset: Arg1, + liquidity: Arg2, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByRoundOffset") + .argument(&pair_address) + .argument(&round_offset) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price_by_timestamp_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + timestamp_offset: Arg1, + liquidity: Arg2, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePriceByTimestampOffset") + .argument(&pair_address) + .argument(×tamp_offset) + .argument(&liquidity) + .original_result() + } + + pub fn get_lp_tokens_safe_price< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + Arg3: ProxyArg>, + >( + self, + pair_address: Arg0, + start_round: Arg1, + end_round: Arg2, + liquidity: Arg3, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLpTokensSafePrice") + .argument(&pair_address) + .argument(&start_round) + .argument(&end_round) + .argument(&liquidity) + .original_result() + } + + pub fn get_safe_price_by_default_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + pair_address: Arg0, + input_payment: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByDefaultOffset") + .argument(&pair_address) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price_by_round_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + round_offset: Arg1, + input_payment: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByRoundOffset") + .argument(&pair_address) + .argument(&round_offset) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price_by_timestamp_offset< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg>, + >( + self, + pair_address: Arg0, + timestamp_offset: Arg1, + input_payment: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePriceByTimestampOffset") + .argument(&pair_address) + .argument(×tamp_offset) + .argument(&input_payment) + .original_result() + } + + pub fn get_safe_price< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + Arg3: ProxyArg>, + >( + self, + pair_address: Arg0, + start_round: Arg1, + end_round: Arg2, + input_payment: Arg3, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getSafePrice") + .argument(&pair_address) + .argument(&start_round) + .argument(&end_round) + .argument(&input_payment) + .original_result() + } + + pub fn get_price_observation_view< + Arg0: ProxyArg>, + Arg1: ProxyArg, + >( + self, + pair_address: Arg0, + search_round: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPriceObservation") + .argument(&pair_address) + .argument(&search_round) + .original_result() + } + + pub fn update_and_get_tokens_for_given_position_with_safe_price< + Arg0: ProxyArg>, + >( + self, + liquidity: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateAndGetTokensForGivenPositionWithSafePrice") + .argument(&liquidity) + .original_result() + } + + pub fn update_and_get_safe_price< + Arg0: ProxyArg>, + >( + self, + input: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateAndGetSafePrice") + .argument(&input) + .original_result() + } + + pub fn set_locking_deadline_epoch< + Arg0: ProxyArg, + >( + self, + new_deadline: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockingDeadlineEpoch") + .argument(&new_deadline) + .original_result() + } + + pub fn set_locking_sc_address< + Arg0: ProxyArg>, + >( + self, + new_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setLockingScAddress") + .argument(&new_address) + .original_result() + } + + pub fn set_unlock_epoch< + Arg0: ProxyArg, + >( + self, + new_epoch: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setUnlockEpoch") + .argument(&new_epoch) + .original_result() + } + + pub fn locking_sc_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockingScAddress") + .original_result() + } + + pub fn unlock_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getUnlockEpoch") + .original_result() + } + + pub fn locking_deadline_epoch( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockingDeadlineEpoch") + .original_result() + } + + pub fn add_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addAdmin") + .argument(&address) + .original_result() + } + + pub fn remove_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeAdmin") + .argument(&address) + .original_result() + } + + pub fn update_owner_or_admin_endpoint< + Arg0: ProxyArg>, + >( + self, + previous_owner: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateOwnerOrAdmin") + .argument(&previous_owner) + .original_result() + } + + pub fn permissions< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPermissions") + .argument(&address) + .original_result() + } + + pub fn add_to_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn remove_from_pause_whitelist< + Arg0: ProxyArg>>, + >( + self, + address_list: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromPauseWhitelist") + .argument(&address_list) + .original_result() + } + + pub fn pause( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn resume( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("resume") + .original_result() + } + + pub fn state( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getState") + .original_result() + } + + pub fn add_initial_liquidity( + self, + ) -> TxTypedCall, EsdtTokenPayment, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("addInitialLiquidity") + .original_result() + } + + pub fn add_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxTypedCall, EsdtTokenPayment, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("addLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("removeLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity_and_burn_token< + Arg0: ProxyArg>, + >( + self, + token_to_buyback_and_burn: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("removeLiquidityAndBuyBackAndBurnToken") + .argument(&token_to_buyback_and_burn) + .original_result() + } + + pub fn swap_no_fee< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + destination_address: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("swapNoFeeAndForward") + .argument(&token_out) + .argument(&destination_address) + .original_result() + } + + pub fn swap_tokens_fixed_input< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + amount_out_min: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("swapTokensFixedInput") + .argument(&token_out) + .argument(&amount_out_min) + .original_result() + } + + pub fn swap_tokens_fixed_output< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_out: Arg0, + amount_out: Arg1, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("swapTokensFixedOutput") + .argument(&token_out) + .argument(&amount_out) + .original_result() + } + + pub fn get_tokens_for_given_position< + Arg0: ProxyArg>, + >( + self, + liquidity: Arg0, + ) -> TxTypedCall, EsdtTokenPayment>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTokensForGivenPosition") + .argument(&liquidity) + .original_result() + } + + pub fn get_reserves_and_total_supply( + self, + ) -> TxTypedCall, BigUint, BigUint>> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getReservesAndTotalSupply") + .original_result() + } + + pub fn get_amount_out_view< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_in: Arg0, + amount_in: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAmountOut") + .argument(&token_in) + .argument(&amount_in) + .original_result() + } + + pub fn get_amount_in_view< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_wanted: Arg0, + amount_wanted: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getAmountIn") + .argument(&token_wanted) + .argument(&amount_wanted) + .original_result() + } + + pub fn get_equivalent< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + token_in: Arg0, + amount_in: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEquivalent") + .argument(&token_in) + .argument(&amount_in) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct SwapEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub token_id_in: TokenIdentifier, + pub token_amount_in: BigUint, + pub token_id_out: TokenIdentifier, + pub token_amount_out: BigUint, + pub fee_amount: BigUint, + pub token_in_reserve: BigUint, + pub token_out_reserve: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct SwapNoFeeAndForwardEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub token_id_in: TokenIdentifier, + pub token_amount_in: BigUint, + pub token_id_out: TokenIdentifier, + pub token_amount_out: BigUint, + pub destination: ManagedAddress, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct AddLiquidityEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub first_token_amount: BigUint, + pub second_token_id: TokenIdentifier, + pub second_token_amount: BigUint, + pub lp_token_id: TokenIdentifier, + pub lp_token_amount: BigUint, + pub lp_supply: BigUint, + pub first_token_reserves: BigUint, + pub second_token_reserves: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct RemoveLiquidityEvent +where + Api: ManagedTypeApi, +{ + pub caller: ManagedAddress, + pub first_token_id: TokenIdentifier, + pub first_token_amount: BigUint, + pub second_token_id: TokenIdentifier, + pub second_token_amount: BigUint, + pub lp_token_id: TokenIdentifier, + pub lp_token_amount: BigUint, + pub lp_supply: BigUint, + pub first_token_reserves: BigUint, + pub second_token_reserves: BigUint, + pub block: u64, + pub epoch: u64, + pub timestamp: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct PriceObservation +where + Api: ManagedTypeApi, +{ + pub first_token_reserve_accumulated: BigUint, + pub second_token_reserve_accumulated: BigUint, + pub weight_accumulated: u64, + pub recording_round: u64, + pub lp_supply_accumulated: BigUint, +} diff --git a/dex/router/tests/router_test.rs b/dex/router/tests/router_test.rs index 54765f2c4..6564a508e 100644 --- a/dex/router/tests/router_test.rs +++ b/dex/router/tests/router_test.rs @@ -113,13 +113,7 @@ fn test_router_upgrade_pair() { .execute_tx(&owner, &router_wrapper, &rust_zero, |sc| { let first_token_id = managed_token_id!(CUSTOM_TOKEN_ID); let second_token_id = managed_token_id!(USDC_TOKEN_ID); - sc.upgrade_pair_endpoint( - first_token_id, - second_token_id, - managed_address!(&user), - 300, - 50, - ); + sc.upgrade_pair_endpoint(first_token_id, second_token_id); }) .assert_ok(); diff --git a/dex/router/wasm/Cargo.lock b/dex/router/wasm/Cargo.lock index 4b5559753..74c2f360e 100644 --- a/dex/router/wasm/Cargo.lock +++ b/dex/router/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -47,9 +47,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -140,9 +140,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -161,32 +159,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -196,9 +196,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -209,18 +209,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -236,9 +236,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -278,18 +278,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -308,10 +308,12 @@ dependencies = [ name = "router" version = "0.0.0" dependencies = [ + "common_structs", "locking_module", "multiversx-sc", "pair", "pausable", + "permissions_module", "simple-lock", "token_send", ] @@ -343,15 +345,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -373,6 +375,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/dex/router/wasm/Cargo.toml b/dex/router/wasm/Cargo.toml index 32fa69d41..bcc94ea1b 100644 --- a/dex/router/wasm/Cargo.toml +++ b/dex/router/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.router] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/dex/router/wasm/src/lib.rs b/dex/router/wasm/src/lib.rs index ee424764b..eb0bb84d5 100644 --- a/dex/router/wasm/src/lib.rs +++ b/dex/router/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 30 +// Upgrade: 1 +// Endpoints: 29 // Async Callback: 1 // Total number of exported functions: 32 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/dex/scenarios/upgrade_contract.scen.json b/dex/scenarios/upgrade_contract.scen.json index cdadc752b..9a9c88fe2 100644 --- a/dex/scenarios/upgrade_contract.scen.json +++ b/dex/scenarios/upgrade_contract.scen.json @@ -14,10 +14,7 @@ "function": "upgradePair", "arguments": [ "str:ALC-abcdef", - "str:WEGLD-abcdef", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "300", - "100" + "str:WEGLD-abcdef" ], "gasLimit": "1,000,000,000", "gasPrice": "0" diff --git a/dex/tests/dex_scenario_rs_test.rs b/dex/tests/dex_scenario_rs_test.rs index 623f63667..3a0b16a81 100644 --- a/dex/tests/dex_scenario_rs_test.rs +++ b/dex/tests/dex_scenario_rs_test.rs @@ -2,7 +2,6 @@ use multiversx_sc_scenario::ScenarioWorld; fn world() -> ScenarioWorld { let mut blockchain = ScenarioWorld::new(); - blockchain.set_current_dir_from_workspace("dex"); blockchain.register_contract("file:router/output/router.wasm", router::ContractBuilder); blockchain.register_contract("file:pair/output/pair.wasm", pair::ContractBuilder); diff --git a/energy-integration/common-modules/energy-query/Cargo.toml b/energy-integration/common-modules/energy-query/Cargo.toml index 71d7eae02..463db6dfc 100644 --- a/energy-integration/common-modules/energy-query/Cargo.toml +++ b/energy-integration/common-modules/energy-query/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.energy-factory] diff --git a/energy-integration/common-modules/energy-query/src/lib.rs b/energy-integration/common-modules/energy-query/src/lib.rs index 4f4e2e7af..00ee89507 100644 --- a/energy-integration/common-modules/energy-query/src/lib.rs +++ b/energy-integration/common-modules/energy-query/src/lib.rs @@ -77,9 +77,6 @@ pub trait EnergyQueryModule { .read_from_address(&energy_factory_address, key) } - #[proxy] - fn energy_factory_proxy(&self, sc_address: ManagedAddress) -> energy_factory::Proxy; - #[view(getEnergyFactoryAddress)] #[storage_mapper("energyFactoryAddress")] fn energy_factory_address(&self) -> SingleValueMapper; diff --git a/energy-integration/common-modules/week-timekeeping/Cargo.toml b/energy-integration/common-modules/week-timekeeping/Cargo.toml index 9fd1da07a..e8049a48d 100644 --- a/energy-integration/common-modules/week-timekeeping/Cargo.toml +++ b/energy-integration/common-modules/week-timekeeping/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.common-types] diff --git a/energy-integration/common-modules/weekly-rewards-splitting/Cargo.toml b/energy-integration/common-modules/weekly-rewards-splitting/Cargo.toml index 5492ba8cb..27f087e18 100644 --- a/energy-integration/common-modules/weekly-rewards-splitting/Cargo.toml +++ b/energy-integration/common-modules/weekly-rewards-splitting/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.energy-query] diff --git a/energy-integration/common-modules/weekly-rewards-splitting/src/base_impl.rs b/energy-integration/common-modules/weekly-rewards-splitting/src/base_impl.rs index c8579672d..de8783686 100644 --- a/energy-integration/common-modules/weekly-rewards-splitting/src/base_impl.rs +++ b/energy-integration/common-modules/weekly-rewards-splitting/src/base_impl.rs @@ -3,16 +3,32 @@ multiversx_sc::imports!(); use common_types::PaymentsVec; use week_timekeeping::Week; -use crate::{events, ClaimProgress}; +use crate::{ + events, global_info::WeeklyRewardsGlobalInfo, + update_claim_progress_energy::UpdateClaimProgressEnergyModule, ClaimProgress, +}; -pub trait AllBaseWeeklyRewardsSplittingImplTraits = +pub trait AllBaseWeeklyRewardsSplittingImplTraits: crate::WeeklyRewardsSplittingModule + + energy_query::EnergyQueryModule + + week_timekeeping::WeekTimekeepingModule + + crate::global_info::WeeklyRewardsGlobalInfo + + crate::locked_token_buckets::WeeklyRewardsLockedTokenBucketsModule + + events::WeeklyRewardsSplittingEventsModule + + crate::update_claim_progress_energy::UpdateClaimProgressEnergyModule +{ +} + +impl AllBaseWeeklyRewardsSplittingImplTraits for T where + T: crate::WeeklyRewardsSplittingModule + energy_query::EnergyQueryModule + week_timekeeping::WeekTimekeepingModule + crate::global_info::WeeklyRewardsGlobalInfo + crate::locked_token_buckets::WeeklyRewardsLockedTokenBucketsModule + events::WeeklyRewardsSplittingEventsModule - + crate::update_claim_progress_energy::UpdateClaimProgressEnergyModule; + + crate::update_claim_progress_energy::UpdateClaimProgressEnergyModule +{ +} pub trait WeeklyRewardsSplittingTraitsModule { type WeeklyRewardsSplittingMod: AllBaseWeeklyRewardsSplittingImplTraits; diff --git a/energy-integration/common-modules/weekly-rewards-splitting/src/lib.rs b/energy-integration/common-modules/weekly-rewards-splitting/src/lib.rs index 9268023bd..456bf60d2 100644 --- a/energy-integration/common-modules/weekly-rewards-splitting/src/lib.rs +++ b/energy-integration/common-modules/weekly-rewards-splitting/src/lib.rs @@ -1,6 +1,4 @@ #![no_std] -#![feature(trait_alias)] -#![feature(int_roundings)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); diff --git a/energy-integration/common-types/Cargo.toml b/energy-integration/common-types/Cargo.toml index 1f8d53b0a..ec8c6987b 100644 --- a/energy-integration/common-types/Cargo.toml +++ b/energy-integration/common-types/Cargo.toml @@ -8,5 +8,5 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] diff --git a/energy-integration/energy-factory-mock/Cargo.toml b/energy-integration/energy-factory-mock/Cargo.toml index d7f9bcec9..8dd369d48 100644 --- a/energy-integration/energy-factory-mock/Cargo.toml +++ b/energy-integration/energy-factory-mock/Cargo.toml @@ -12,8 +12,8 @@ path = "src/lib.rs" path = "../common-modules/energy-query" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/energy-integration/energy-factory-mock/meta/Cargo.toml b/energy-integration/energy-factory-mock/meta/Cargo.toml index 0806b3834..21b184514 100644 --- a/energy-integration/energy-factory-mock/meta/Cargo.toml +++ b/energy-integration/energy-factory-mock/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/energy-integration/energy-factory-mock/wasm/Cargo.lock b/energy-integration/energy-factory-mock/wasm/Cargo.lock index a0351871d..352b152a0 100644 --- a/energy-integration/energy-factory-mock/wasm/Cargo.lock +++ b/energy-integration/energy-factory-mock/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -128,32 +128,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -163,9 +165,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -176,18 +178,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -203,27 +205,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -257,15 +259,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -278,6 +280,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/energy-integration/energy-factory-mock/wasm/Cargo.toml b/energy-integration/energy-factory-mock/wasm/Cargo.toml index eb5ced1a1..6ab6859fc 100644 --- a/energy-integration/energy-factory-mock/wasm/Cargo.toml +++ b/energy-integration/energy-factory-mock/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.energy-factory-mock] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/energy-integration/energy-factory-mock/wasm/src/lib.rs b/energy-integration/energy-factory-mock/wasm/src/lib.rs index c52b88848..400849b5a 100644 --- a/energy-integration/energy-factory-mock/wasm/src/lib.rs +++ b/energy-integration/energy-factory-mock/wasm/src/lib.rs @@ -10,8 +10,6 @@ // Total number of exported functions: 6 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/energy-integration/energy-update/Cargo.toml b/energy-integration/energy-update/Cargo.toml index e090da980..6c4b48470 100644 --- a/energy-integration/energy-update/Cargo.toml +++ b/energy-integration/energy-update/Cargo.toml @@ -9,11 +9,11 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.farm] path = "../../dex/farm" @@ -25,4 +25,4 @@ path = "../common-modules/weekly-rewards-splitting" num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/energy-integration/energy-update/meta/Cargo.toml b/energy-integration/energy-update/meta/Cargo.toml index cb055bb36..eabf44295 100644 --- a/energy-integration/energy-update/meta/Cargo.toml +++ b/energy-integration/energy-update/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/energy-integration/energy-update/src/farm_proxy.rs b/energy-integration/energy-update/src/farm_proxy.rs new file mode 100644 index 000000000..b01a4e7b9 --- /dev/null +++ b/energy-integration/energy-update/src/farm_proxy.rs @@ -0,0 +1,46 @@ +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn update_energy_for_user>>( + self, + user: Arg0, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("updateEnergyForUser") + .argument(&user) + .original_result() + } +} diff --git a/energy-integration/energy-update/src/lib.rs b/energy-integration/energy-update/src/lib.rs index 6cb9a7520..f09a54bc7 100644 --- a/energy-integration/energy-update/src/lib.rs +++ b/energy-integration/energy-update/src/lib.rs @@ -1,8 +1,7 @@ #![no_std] multiversx_sc::imports!(); - -use weekly_rewards_splitting::update_claim_progress_energy::ProxyTrait as _; +mod farm_proxy; #[multiversx_sc::contract] pub trait EnergyUpdate { @@ -19,13 +18,11 @@ pub trait EnergyUpdate { farm_addresses: MultiValueEncoded, ) { for farm_addr in farm_addresses { - let _: IgnoreValue = self - .farm_proxy(farm_addr) + self.tx() + .to(&farm_addr) + .typed(farm_proxy::FarmProxy) .update_energy_for_user(user.clone()) - .execute_on_dest_context(); + .sync_call(); } } - - #[proxy] - fn farm_proxy(&self, user: ManagedAddress) -> farm::Proxy; } diff --git a/energy-integration/energy-update/wasm/Cargo.lock b/energy-integration/energy-update/wasm/Cargo.lock index e167135ea..1c0a8cb4b 100644 --- a/energy-integration/energy-update/wasm/Cargo.lock +++ b/energy-integration/energy-update/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -274,9 +274,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -295,32 +293,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -330,9 +330,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -343,18 +343,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -370,9 +370,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -412,18 +412,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -472,15 +472,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -510,6 +510,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/energy-integration/energy-update/wasm/Cargo.toml b/energy-integration/energy-update/wasm/Cargo.toml index 7b47001ca..2dde69e95 100644 --- a/energy-integration/energy-update/wasm/Cargo.toml +++ b/energy-integration/energy-update/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.energy-update] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/energy-integration/energy-update/wasm/src/lib.rs b/energy-integration/energy-update/wasm/src/lib.rs index b4de939ec..7d5e5998a 100644 --- a/energy-integration/energy-update/wasm/src/lib.rs +++ b/energy-integration/energy-update/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 2 +// Upgrade: 1 +// Endpoints: 1 // Async Callback (empty): 1 // Total number of exported functions: 4 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/energy-integration/farm-boosted-yields/Cargo.toml b/energy-integration/farm-boosted-yields/Cargo.toml index 2cd9dd558..4ce9a5635 100644 --- a/energy-integration/farm-boosted-yields/Cargo.toml +++ b/energy-integration/farm-boosted-yields/Cargo.toml @@ -8,7 +8,7 @@ edition = "2021" path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.config] diff --git a/energy-integration/fees-collector/Cargo.toml b/energy-integration/fees-collector/Cargo.toml index 0a978dfb8..a9decb965 100644 --- a/energy-integration/fees-collector/Cargo.toml +++ b/energy-integration/fees-collector/Cargo.toml @@ -9,11 +9,11 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.energy-query] path = "../common-modules/energy-query" @@ -49,7 +49,7 @@ path = "../../common/common_errors" num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.sc_whitelist_module] path = "../../common/modules/sc_whitelist_module" diff --git a/energy-integration/fees-collector/meta/Cargo.toml b/energy-integration/fees-collector/meta/Cargo.toml index 319511b83..48b2371c2 100644 --- a/energy-integration/fees-collector/meta/Cargo.toml +++ b/energy-integration/fees-collector/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/energy-integration/fees-collector/src/lib.rs b/energy-integration/fees-collector/src/lib.rs index e78ed6812..3e0fbc48b 100644 --- a/energy-integration/fees-collector/src/lib.rs +++ b/energy-integration/fees-collector/src/lib.rs @@ -111,7 +111,7 @@ pub trait FeesCollector: } if !rewards.is_empty() { - self.send().direct_multi(&caller, &rewards); + self.tx().to(&caller).payment(&rewards).transfer(); } if total_locked_token_rewards_amount > 0 { diff --git a/energy-integration/fees-collector/wasm/Cargo.lock b/energy-integration/fees-collector/wasm/Cargo.lock index 695f4de4b..f45918f75 100644 --- a/energy-integration/fees-collector/wasm/Cargo.lock +++ b/energy-integration/fees-collector/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -133,9 +133,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -154,32 +152,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -189,9 +189,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -202,18 +202,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -229,27 +229,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -283,15 +283,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -304,6 +304,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/energy-integration/fees-collector/wasm/Cargo.toml b/energy-integration/fees-collector/wasm/Cargo.toml index 0d9804acf..c1828da8d 100644 --- a/energy-integration/fees-collector/wasm/Cargo.toml +++ b/energy-integration/fees-collector/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.fees-collector] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/energy-integration/fees-collector/wasm/src/lib.rs b/energy-integration/fees-collector/wasm/src/lib.rs index 75812bfb1..283f21a67 100644 --- a/energy-integration/fees-collector/wasm/src/lib.rs +++ b/energy-integration/fees-collector/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 39 +// Upgrade: 1 +// Endpoints: 38 // Async Callback (empty): 1 // Total number of exported functions: 41 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/energy-integration/governance-v2/Cargo.toml b/energy-integration/governance-v2/Cargo.toml index aec8974fb..d05400c57 100644 --- a/energy-integration/governance-v2/Cargo.toml +++ b/energy-integration/governance-v2/Cargo.toml @@ -12,7 +12,7 @@ path = "src/lib.rs" path = "../common-modules/energy-query" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.permissions_module] @@ -28,7 +28,7 @@ path = "../common-modules/weekly-rewards-splitting" num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.energy-factory-mock] path = "../energy-factory-mock" diff --git a/energy-integration/governance-v2/meta/Cargo.toml b/energy-integration/governance-v2/meta/Cargo.toml index cb33b5197..a2f35d2f6 100644 --- a/energy-integration/governance-v2/meta/Cargo.toml +++ b/energy-integration/governance-v2/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/energy-integration/governance-v2/src/fees_collector_proxy.rs b/energy-integration/governance-v2/src/fees_collector_proxy.rs new file mode 100644 index 000000000..1d5c5dc19 --- /dev/null +++ b/energy-integration/governance-v2/src/fees_collector_proxy.rs @@ -0,0 +1,52 @@ +use multiversx_sc::proxy_imports::*; + +pub struct FeesCollectorProxy; + +impl TxProxyTrait for FeesCollectorProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FeesCollectorProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FeesCollectorProxyMethods { wrapped_tx: tx } + } +} + +pub struct FeesCollectorProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FeesCollectorProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn last_global_update_week(self) -> TxProxyCall { + self.wrapped_tx + .raw_call("getLastGlobalUpdateWeek") + .original_result() + } + + pub fn total_energy_for_week>( + self, + week: Arg0, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("getTotalEnergyForWeek") + .argument(&week) + .original_result() + } +} diff --git a/energy-integration/governance-v2/src/lib.rs b/energy-integration/governance-v2/src/lib.rs index 2014b3a53..3d1abec65 100644 --- a/energy-integration/governance-v2/src/lib.rs +++ b/energy-integration/governance-v2/src/lib.rs @@ -5,14 +5,13 @@ multiversx_sc::imports!(); pub mod configurable; mod errors; pub mod events; +pub mod fees_collector_proxy; pub mod proposal; pub mod proposal_storage; pub mod views; use proposal::*; use proposal_storage::VoteType; -use weekly_rewards_splitting::events::Week; -use weekly_rewards_splitting::global_info::ProxyTrait as _; use crate::configurable::{FULL_PERCENTAGE, MAX_GAS_LIMIT_PER_BLOCK}; use crate::errors::*; @@ -167,15 +166,22 @@ pub trait GovernanceV2: // First voter -> update total_energy if current_quorum == BigUint::zero() { let fees_collector_addr = self.fees_collector_address().get(); - let last_global_update_week: Week = self - .fees_collector_proxy(fees_collector_addr.clone()) + + let last_global_update_week = self + .tx() + .to(&fees_collector_addr) + .typed(fees_collector_proxy::FeesCollectorProxy) .last_global_update_week() - .execute_on_dest_context(); + .returns(ReturnsResult) + .sync_call(); - let total_quorum: BigUint = self - .fees_collector_proxy(fees_collector_addr) + let total_quorum = self + .tx() + .to(&fees_collector_addr) + .typed(fees_collector_proxy::FeesCollectorProxy) .total_energy_for_week(last_global_update_week) - .execute_on_dest_context(); + .returns(ReturnsResult) + .sync_call(); let mut proposal = self.proposals().get(proposal_id); proposal.total_quorum = total_quorum; @@ -305,13 +311,13 @@ pub trait GovernanceV2: proposal: &GovernanceProposal, refund_amount: &BigUint, ) { - self.send().direct_non_zero_esdt_payment( - &proposal.proposer, - &EsdtTokenPayment::new( - proposal.fee_payment.token_identifier.clone(), + self.tx() + .to(&proposal.proposer) + .single_esdt( + &proposal.fee_payment.token_identifier, proposal.fee_payment.token_nonce, - refund_amount.clone(), - ), - ); + refund_amount, + ) + .transfer(); } } diff --git a/energy-integration/governance-v2/src/views.rs b/energy-integration/governance-v2/src/views.rs index ec748edd9..d74d7e65f 100644 --- a/energy-integration/governance-v2/src/views.rs +++ b/energy-integration/governance-v2/src/views.rs @@ -100,9 +100,6 @@ pub trait ViewsModule: self.fees_collector_address().set(new_value); } - #[proxy] - fn fees_collector_proxy(&self, sc_address: ManagedAddress) -> fees_collector::Proxy; - #[view(getFeesCollectorAddress)] #[storage_mapper("feesCollectorAddress")] fn fees_collector_address(&self) -> SingleValueMapper; diff --git a/energy-integration/governance-v2/tests/gov_test_setup/mod.rs b/energy-integration/governance-v2/tests/gov_test_setup/mod.rs index 489fec3b3..b461d2faa 100644 --- a/energy-integration/governance-v2/tests/gov_test_setup/mod.rs +++ b/energy-integration/governance-v2/tests/gov_test_setup/mod.rs @@ -35,6 +35,7 @@ pub const USER_ENERGY: u64 = 1_000_000; pub const GAS_LIMIT: u64 = 1_000_000; #[derive(Clone)] +#[allow(dead_code)] pub struct Payment { pub token: Vec, pub nonce: u64, diff --git a/energy-integration/governance-v2/wasm/Cargo.lock b/energy-integration/governance-v2/wasm/Cargo.lock index cfe51a0c6..1dbce81b9 100644 --- a/energy-integration/governance-v2/wasm/Cargo.lock +++ b/energy-integration/governance-v2/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -144,9 +144,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -165,32 +163,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -213,18 +213,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -240,9 +240,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -258,18 +258,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -303,15 +303,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -324,6 +324,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/energy-integration/governance-v2/wasm/Cargo.toml b/energy-integration/governance-v2/wasm/Cargo.toml index 090b2e76b..3846e7ffa 100644 --- a/energy-integration/governance-v2/wasm/Cargo.toml +++ b/energy-integration/governance-v2/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.governance-v2] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/energy-integration/governance-v2/wasm/src/lib.rs b/energy-integration/governance-v2/wasm/src/lib.rs index bb977bc97..0211fca5a 100644 --- a/energy-integration/governance-v2/wasm/src/lib.rs +++ b/energy-integration/governance-v2/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 30 +// Upgrade: 1 +// Endpoints: 29 // Async Callback (empty): 1 // Total number of exported functions: 32 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/farm-staking/farm-staking-proxy/Cargo.toml b/farm-staking/farm-staking-proxy/Cargo.toml index a4fa7e84b..58b2afab0 100644 --- a/farm-staking/farm-staking-proxy/Cargo.toml +++ b/farm-staking/farm-staking-proxy/Cargo.toml @@ -12,11 +12,11 @@ path = "src/lib.rs" hex-literal = "0.3.1" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.farm] path = "../../dex/farm" @@ -67,7 +67,7 @@ path = "../../energy-integration/common-modules/energy-query" num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.farm_token] path = "../../common/modules/farm/farm_token" diff --git a/farm-staking/farm-staking-proxy/meta/Cargo.toml b/farm-staking/farm-staking-proxy/meta/Cargo.toml index 62566f32c..fe7c49779 100644 --- a/farm-staking/farm-staking-proxy/meta/Cargo.toml +++ b/farm-staking/farm-staking-proxy/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/farm-staking/farm-staking-proxy/sc-config.toml b/farm-staking/farm-staking-proxy/sc-config.toml new file mode 100644 index 000000000..c42785448 --- /dev/null +++ b/farm-staking/farm-staking-proxy/sc-config.toml @@ -0,0 +1,2 @@ +[[proxy]] +path = "../../dex/interactor/proxies/src/farm_staking_proxy_sc_proxy.rs" diff --git a/farm-staking/farm-staking-proxy/src/external_contracts_interactions.rs b/farm-staking/farm-staking-proxy/src/external_contracts_interactions.rs index f8048d66b..d7b168300 100644 --- a/farm-staking/farm-staking-proxy/src/external_contracts_interactions.rs +++ b/farm-staking/farm-staking-proxy/src/external_contracts_interactions.rs @@ -1,19 +1,10 @@ multiversx_sc::imports!(); -use farm::{ - base_functions::{ClaimRewardsResultType, DoubleMultiPayment}, - EnterFarmResultType, ExitFarmWithPartialPosResultType, -}; -use farm_staking::{ - claim_stake_farm_rewards::ProxyTrait as _, stake_farm::ProxyTrait as _, - unstake_farm::ProxyTrait as _, -}; -use farm_with_locked_rewards::ProxyTrait as _; -use pair::{ - pair_actions::{common_result_types::RemoveLiquidityResultType, remove_liq::ProxyTrait as _}, - safe_price_view::ProxyTrait as _, -}; +use farm::base_functions::DoubleMultiPayment; +use crate::farm_staking_proxy_methods; +use crate::farm_with_locked_rewards_proxy; +use crate::pair_proxy; use crate::result_types::*; pub type SafePriceResult = MultiValue2, EsdtTokenPayment>; @@ -32,11 +23,19 @@ pub trait ExternalContractsInteractionsModule: lp_farm_token_amount: BigUint, ) -> LpFarmClaimRewardsResult { let lp_farm_address = self.lp_farm_address().get(); - let lp_farm_result: ClaimRewardsResultType = self - .lp_farm_proxy_obj(lp_farm_address) - .claim_rewards_endpoint(orig_caller) - .with_esdt_transfer((lp_farm_token_id, lp_farm_token_nonce, lp_farm_token_amount)) - .execute_on_dest_context(); + let lp_farm_result = self + .tx() + .to(&lp_farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .claim_rewards_endpoint(OptionalValue::Some(orig_caller)) + .single_esdt( + &lp_farm_token_id, + lp_farm_token_nonce, + &lp_farm_token_amount, + ) + .returns(ReturnsResult) + .sync_call(); + let (new_lp_farm_tokens, lp_farm_rewards) = lp_farm_result.into_tuple(); LpFarmClaimRewardsResult { @@ -53,11 +52,19 @@ pub trait ExternalContractsInteractionsModule: ) -> LpFarmExitResult { let lp_farm_token_id = self.lp_farm_token_id().get(); let lp_farm_address = self.lp_farm_address().get(); - let exit_farm_result: ExitFarmWithPartialPosResultType = self - .lp_farm_proxy_obj(lp_farm_address) - .exit_farm_endpoint(orig_caller) - .with_esdt_transfer((lp_farm_token_id, lp_farm_token_nonce, lp_farm_token_amount)) - .execute_on_dest_context(); + let exit_farm_result = self + .tx() + .to(&lp_farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .exit_farm_endpoint(OptionalValue::Some(orig_caller)) + .single_esdt( + &lp_farm_token_id, + lp_farm_token_nonce, + &lp_farm_token_amount, + ) + .returns(ReturnsResult) + .sync_call(); + let (lp_tokens, lp_farm_rewards) = exit_farm_result.into_tuple(); LpFarmExitResult { @@ -81,10 +88,13 @@ pub trait ExternalContractsInteractionsModule: additional_lp_farm_tokens.push(base_lp_farm_token); let lp_farm_address = self.lp_farm_address().get(); - self.lp_farm_proxy_obj(lp_farm_address) - .merge_farm_tokens_endpoint(orig_caller) - .with_multi_token_transfer(additional_lp_farm_tokens) - .execute_on_dest_context() + self.tx() + .to(lp_farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .merge_farm_tokens_endpoint(OptionalValue::Some(orig_caller)) + .payment(additional_lp_farm_tokens) + .returns(ReturnsResult) + .sync_call() } // staking farm @@ -96,11 +106,15 @@ pub trait ExternalContractsInteractionsModule: staking_farm_tokens: PaymentsVec, ) -> StakingFarmEnterResult { let staking_farm_address = self.staking_farm_address().get(); - let enter_result: EnterFarmResultType = self - .staking_farm_proxy_obj(staking_farm_address) + let enter_result = self + .tx() + .to(&staking_farm_address) + .typed(farm_staking_proxy_methods::FarmStakingProxy) .stake_farm_through_proxy(staking_token_amount, orig_caller) - .with_multi_token_transfer(staking_farm_tokens) - .execute_on_dest_context(); + .payment(staking_farm_tokens) + .returns(ReturnsResult) + .sync_call(); + let (received_staking_farm_token, boosted_rewards) = enter_result.into_tuple(); StakingFarmEnterResult { @@ -118,15 +132,19 @@ pub trait ExternalContractsInteractionsModule: new_staking_farm_value: BigUint, ) -> StakingFarmClaimRewardsResult { let staking_farm_address = self.staking_farm_address().get(); - let staking_farm_result: ClaimRewardsResultType = self - .staking_farm_proxy_obj(staking_farm_address) + let staking_farm_result = self + .tx() + .to(&staking_farm_address) + .typed(farm_staking_proxy_methods::FarmStakingProxy) .claim_rewards_with_new_value(new_staking_farm_value, orig_caller) - .with_esdt_transfer(( - staking_farm_token_id, + .single_esdt( + &staking_farm_token_id, staking_farm_token_nonce, - staking_farm_token_amount, - )) - .execute_on_dest_context(); + &staking_farm_token_amount, + ) + .returns(ReturnsResult) + .sync_call(); + let (new_staking_farm_tokens, staking_farm_rewards) = staking_farm_result.into_tuple(); StakingFarmClaimRewardsResult { @@ -151,11 +169,15 @@ pub trait ExternalContractsInteractionsModule: )); let staking_farm_address = self.staking_farm_address().get(); - let unstake_result: ExitFarmWithPartialPosResultType = self - .staking_farm_proxy_obj(staking_farm_address) + let unstake_result = self + .tx() + .to(&staking_farm_address) + .typed(farm_staking_proxy_methods::FarmStakingProxy) .unstake_farm_through_proxy(orig_caller) - .with_multi_token_transfer(payments) - .execute_on_dest_context(); + .payment(payments) + .returns(ReturnsResult) + .sync_call(); + let (unbond_staking_farm_token, staking_rewards) = unstake_result.into_tuple(); StakingFarmExitResult { @@ -173,11 +195,15 @@ pub trait ExternalContractsInteractionsModule: pair_second_token_min_amount: BigUint, ) -> PairRemoveLiquidityResult { let pair_address = self.pair_address().get(); - let pair_withdraw_result: RemoveLiquidityResultType = self - .pair_proxy_obj(pair_address) + let pair_withdraw_result = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .remove_liquidity(pair_first_token_min_amount, pair_second_token_min_amount) - .with_esdt_transfer(lp_tokens) - .execute_on_dest_context(); + .payment(lp_tokens) + .returns(ReturnsResult) + .sync_call(); + let (pair_first_token_payment, pair_second_token_payment) = pair_withdraw_result.into_tuple(); @@ -199,10 +225,14 @@ pub trait ExternalContractsInteractionsModule: fn get_lp_tokens_safe_price(&self, lp_tokens_amount: BigUint) -> BigUint { let pair_address = self.pair_address().get(); - let result: SafePriceResult = self - .pair_proxy_obj(pair_address) + let result = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .update_and_get_tokens_for_given_position_with_safe_price(lp_tokens_amount) - .execute_on_dest_context(); + .returns(ReturnsResult) + .sync_call(); + let (first_token_info, second_token_info) = result.into_tuple(); let staking_token_id = self.staking_token_id().get(); @@ -215,20 +245,6 @@ pub trait ExternalContractsInteractionsModule: } } - // proxies - - #[proxy] - fn staking_farm_proxy_obj(&self, sc_address: ManagedAddress) -> farm_staking::Proxy; - - #[proxy] - fn lp_farm_proxy_obj( - &self, - sc_address: ManagedAddress, - ) -> farm_with_locked_rewards::Proxy; - - #[proxy] - fn pair_proxy_obj(&self, sc_address: ManagedAddress) -> pair::Proxy; - // storage #[view(getLpFarmAddress)] diff --git a/farm-staking/farm-staking-proxy/src/farm_staking_proxy_methods.rs b/farm-staking/farm-staking-proxy/src/farm_staking_proxy_methods.rs new file mode 100644 index 000000000..3cd20a7b3 --- /dev/null +++ b/farm-staking/farm-staking-proxy/src/farm_staking_proxy_methods.rs @@ -0,0 +1,96 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmStakingProxy; + +impl TxProxyTrait for FarmStakingProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmStakingProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmStakingProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmStakingProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FarmStakingProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn stake_farm_through_proxy< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + staked_token_amount: Arg0, + original_caller: Arg1, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("stakeFarmThroughProxy") + .argument(&staked_token_amount) + .argument(&original_caller) + .original_result() + } + + pub fn claim_rewards_with_new_value< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + new_farming_amount: Arg0, + original_caller: Arg1, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("claimRewardsWithNewValue") + .argument(&new_farming_amount) + .argument(&original_caller) + .original_result() + } + + pub fn unstake_farm_through_proxy>>( + self, + original_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("unstakeFarmThroughProxy") + .argument(&original_caller) + .original_result() + } +} diff --git a/farm-staking/farm-staking-proxy/src/farm_with_locked_rewards_proxy.rs b/farm-staking/farm-staking-proxy/src/farm_with_locked_rewards_proxy.rs new file mode 100644 index 000000000..e54022393 --- /dev/null +++ b/farm-staking/farm-staking-proxy/src/farm_with_locked_rewards_proxy.rs @@ -0,0 +1,86 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn exit_farm_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("exitFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_rewards_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("claimRewards") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn merge_farm_tokens_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("mergeFarmTokens") + .argument(&opt_orig_caller) + .original_result() + } +} diff --git a/farm-staking/farm-staking-proxy/src/lib.rs b/farm-staking/farm-staking-proxy/src/lib.rs index 7bfc66bab..e565a5407 100644 --- a/farm-staking/farm-staking-proxy/src/lib.rs +++ b/farm-staking/farm-staking-proxy/src/lib.rs @@ -4,7 +4,10 @@ multiversx_sc::imports!(); pub mod dual_yield_token; pub mod external_contracts_interactions; +pub mod farm_staking_proxy_methods; +pub mod farm_with_locked_rewards_proxy; pub mod lp_farm_token; +pub mod pair_proxy; pub mod proxy_actions; pub mod result_types; diff --git a/farm-staking/farm-staking-proxy/src/pair_proxy.rs b/farm-staking/farm-staking-proxy/src/pair_proxy.rs new file mode 100644 index 000000000..abc188bab --- /dev/null +++ b/farm-staking/farm-staking-proxy/src/pair_proxy.rs @@ -0,0 +1,77 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn remove_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("removeLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn update_and_get_tokens_for_given_position_with_safe_price< + Arg0: ProxyArg>, + >( + self, + liquidity: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("updateAndGetTokensForGivenPositionWithSafePrice") + .argument(&liquidity) + .original_result() + } +} diff --git a/farm-staking/farm-staking-proxy/wasm/Cargo.lock b/farm-staking/farm-staking-proxy/wasm/Cargo.lock index eed21c778..0580b9369 100644 --- a/farm-staking/farm-staking-proxy/wasm/Cargo.lock +++ b/farm-staking/farm-staking-proxy/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -355,9 +355,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -376,32 +374,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal 0.4.1", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -411,9 +411,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -424,18 +424,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -451,9 +451,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -493,18 +493,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -553,15 +553,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -591,6 +591,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/farm-staking/farm-staking-proxy/wasm/Cargo.toml b/farm-staking/farm-staking-proxy/wasm/Cargo.toml index 7656441fa..9becd38ee 100644 --- a/farm-staking/farm-staking-proxy/wasm/Cargo.toml +++ b/farm-staking/farm-staking-proxy/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.farm-staking-proxy] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/farm-staking/farm-staking-proxy/wasm/src/lib.rs b/farm-staking/farm-staking-proxy/wasm/src/lib.rs index ee8a50b10..3f9abd0a4 100644 --- a/farm-staking/farm-staking-proxy/wasm/src/lib.rs +++ b/farm-staking/farm-staking-proxy/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 18 +// Upgrade: 1 +// Endpoints: 17 // Async Callback: 1 // Total number of exported functions: 20 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/farm-staking/farm-staking/Cargo.toml b/farm-staking/farm-staking/Cargo.toml index 988da5f65..b36e9952e 100644 --- a/farm-staking/farm-staking/Cargo.toml +++ b/farm-staking/farm-staking/Cargo.toml @@ -78,14 +78,14 @@ path = "../../common/common_structs" path = "../../common/common_errors" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/farm-staking/farm-staking/meta/Cargo.toml b/farm-staking/farm-staking/meta/Cargo.toml index ec34dd897..261432796 100644 --- a/farm-staking/farm-staking/meta/Cargo.toml +++ b/farm-staking/farm-staking/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/farm-staking/farm-staking/sc-config.toml b/farm-staking/farm-staking/sc-config.toml new file mode 100644 index 000000000..4cd888336 --- /dev/null +++ b/farm-staking/farm-staking/sc-config.toml @@ -0,0 +1,2 @@ +[[proxy]] +path = "../../dex/interactor/proxies/src/farm_staking_sc_proxy.rs" diff --git a/farm-staking/farm-staking/src/base_impl_wrapper.rs b/farm-staking/farm-staking/src/base_impl_wrapper.rs index 2b671677f..357d2f048 100644 --- a/farm-staking/farm-staking/src/base_impl_wrapper.rs +++ b/farm-staking/farm-staking/src/base_impl_wrapper.rs @@ -9,15 +9,29 @@ use multiversx_sc_modules::transfer_role_proxy::PaymentsVec; use crate::token_attributes::StakingFarmTokenAttributes; -pub trait FarmStakingTraits = +pub trait FarmStakingTraits: crate::custom_rewards::CustomRewardsModule + + rewards::RewardsModule + + config::ConfigModule + + farm_token::FarmTokenModule + + pausable::PausableModule + + permissions_module::PermissionsModule + + multiversx_sc_modules::default_issue_callbacks::DefaultIssueCallbacksModule + + farm_boosted_yields::FarmBoostedYieldsModule +{ +} + +impl FarmStakingTraits for T where + T: crate::custom_rewards::CustomRewardsModule + rewards::RewardsModule + config::ConfigModule + farm_token::FarmTokenModule + pausable::PausableModule + permissions_module::PermissionsModule + multiversx_sc_modules::default_issue_callbacks::DefaultIssueCallbacksModule - + farm_boosted_yields::FarmBoostedYieldsModule; + + farm_boosted_yields::FarmBoostedYieldsModule +{ +} pub struct FarmStakingWrapper where diff --git a/farm-staking/farm-staking/src/lib.rs b/farm-staking/farm-staking/src/lib.rs index 5fd2b28d6..f783c7831 100644 --- a/farm-staking/farm-staking/src/lib.rs +++ b/farm-staking/farm-staking/src/lib.rs @@ -1,6 +1,5 @@ #![no_std] #![allow(clippy::from_over_into)] -#![feature(trait_alias)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); diff --git a/farm-staking/farm-staking/src/unstake_farm.rs b/farm-staking/farm-staking/src/unstake_farm.rs index e40642b4f..052d00e85 100644 --- a/farm-staking/farm-staking/src/unstake_farm.rs +++ b/farm-staking/farm-staking/src/unstake_farm.rs @@ -118,8 +118,10 @@ pub trait UnstakeFarmModule: unlock_epoch: current_epoch + min_unbond_epochs, }, ); - self.send() - .direct_esdt(to, &farm_token_id, nft_nonce, &amount); + self.tx() + .to(to) + .single_esdt(&farm_token_id, nft_nonce, &amount) + .transfer(); EsdtTokenPayment::new(farm_token_id, nft_nonce, amount) } diff --git a/farm-staking/farm-staking/wasm/Cargo.lock b/farm-staking/farm-staking/wasm/Cargo.lock index 61f912ed6..0f6008f44 100644 --- a/farm-staking/farm-staking/wasm/Cargo.lock +++ b/farm-staking/farm-staking/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -295,9 +295,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -316,32 +314,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -364,18 +364,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -391,9 +391,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -433,18 +433,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -493,15 +493,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -531,6 +531,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/farm-staking/farm-staking/wasm/Cargo.toml b/farm-staking/farm-staking/wasm/Cargo.toml index 3c20c8125..3eaf7746d 100644 --- a/farm-staking/farm-staking/wasm/Cargo.toml +++ b/farm-staking/farm-staking/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.farm-staking] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/farm-staking/farm-staking/wasm/src/lib.rs b/farm-staking/farm-staking/wasm/src/lib.rs index 4bc7e0bbb..4842309c2 100644 --- a/farm-staking/farm-staking/wasm/src/lib.rs +++ b/farm-staking/farm-staking/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 71 +// Upgrade: 1 +// Endpoints: 70 // Async Callback: 1 // Total number of exported functions: 73 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/farm-staking/metabonding-staking/Cargo.toml b/farm-staking/metabonding-staking/Cargo.toml index b0cfbd186..674fa7b51 100644 --- a/farm-staking/metabonding-staking/Cargo.toml +++ b/farm-staking/metabonding-staking/Cargo.toml @@ -9,11 +9,11 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.factory] path = "../../locked-asset/factory" @@ -22,7 +22,7 @@ path = "../../locked-asset/factory" num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.common_structs] path = "../../common/common_structs" diff --git a/farm-staking/metabonding-staking/meta/Cargo.toml b/farm-staking/metabonding-staking/meta/Cargo.toml index ed0656799..38532abf9 100644 --- a/farm-staking/metabonding-staking/meta/Cargo.toml +++ b/farm-staking/metabonding-staking/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/farm-staking/metabonding-staking/src/lib.rs b/farm-staking/metabonding-staking/src/lib.rs index d15ce3c90..fbe710185 100644 --- a/farm-staking/metabonding-staking/src/lib.rs +++ b/farm-staking/metabonding-staking/src/lib.rs @@ -3,6 +3,7 @@ multiversx_sc::imports!(); pub mod events; +pub mod locked_asset_factory_proxy; pub mod locked_asset_token; use locked_asset_token::UserEntry; @@ -103,12 +104,15 @@ pub trait MetabondingStaking: }; let locked_asset_token_id = self.locked_asset_token_id().get(); - self.send().direct_esdt( - &caller, - &locked_asset_token_id, - user_entry.token_nonce, - &unstake_amount, - ); + + self.tx() + .to(&caller) + .single_esdt( + &locked_asset_token_id, + user_entry.token_nonce, + &unstake_amount, + ) + .transfer(); self.unbond_event(&caller, opt_entry_after_action); } diff --git a/farm-staking/metabonding-staking/src/locked_asset_factory_proxy.rs b/farm-staking/metabonding-staking/src/locked_asset_factory_proxy.rs new file mode 100644 index 000000000..d0f49b566 --- /dev/null +++ b/farm-staking/metabonding-staking/src/locked_asset_factory_proxy.rs @@ -0,0 +1,45 @@ +use multiversx_sc::proxy_imports::*; + +pub struct LockedAssetFactoryProxy; + +impl TxProxyTrait for LockedAssetFactoryProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = LockedAssetFactoryProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + LockedAssetFactoryProxyMethods { wrapped_tx: tx } + } +} + +pub struct LockedAssetFactoryProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl LockedAssetFactoryProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn merge_tokens( + self, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("mergeTokens") + .original_result() + } +} diff --git a/farm-staking/metabonding-staking/src/locked_asset_token.rs b/farm-staking/metabonding-staking/src/locked_asset_token.rs index c5c354fab..ef19e9a5a 100644 --- a/farm-staking/metabonding-staking/src/locked_asset_token.rs +++ b/farm-staking/metabonding-staking/src/locked_asset_token.rs @@ -1,8 +1,8 @@ +use crate::locked_asset_factory_proxy; + multiversx_sc::imports!(); multiversx_sc::derive_imports!(); -use factory::locked_asset_token_merge::ProxyTrait as _; - pub type PaymentsVec = ManagedVec>; #[derive(TypeAbi, TopEncode, TopDecode, NestedEncode, Debug, PartialEq)] @@ -81,17 +81,15 @@ pub trait LockedAssetTokenModule { } let locked_asset_factory_address = self.locked_asset_factory_address().get(); - self.locked_asset_factory_proxy(locked_asset_factory_address) + self.tx() + .to(&locked_asset_factory_address) + .typed(locked_asset_factory_proxy::LockedAssetFactoryProxy) .merge_tokens() - .with_multi_token_transfer(tokens) - .execute_on_dest_context() + .payment(tokens) + .returns(ReturnsResult) + .sync_call() } - // proxies - - #[proxy] - fn locked_asset_factory_proxy(&self, sc_address: ManagedAddress) -> factory::Proxy; - // storage #[view(getLockedAssetTokenId)] diff --git a/farm-staking/metabonding-staking/wasm/Cargo.lock b/farm-staking/metabonding-staking/wasm/Cargo.lock index 80567369d..6903eb48a 100644 --- a/farm-staking/metabonding-staking/wasm/Cargo.lock +++ b/farm-staking/metabonding-staking/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "cfg-if" @@ -46,9 +46,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -127,9 +127,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "math" @@ -170,32 +170,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -205,9 +207,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -218,18 +220,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -245,27 +247,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -299,15 +301,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -337,6 +339,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/farm-staking/metabonding-staking/wasm/Cargo.toml b/farm-staking/metabonding-staking/wasm/Cargo.toml index 35311134a..ca73fabfe 100644 --- a/farm-staking/metabonding-staking/wasm/Cargo.toml +++ b/farm-staking/metabonding-staking/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.metabonding-staking] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/farm-staking/metabonding-staking/wasm/src/lib.rs b/farm-staking/metabonding-staking/wasm/src/lib.rs index b8e948d22..22b6f6de2 100644 --- a/farm-staking/metabonding-staking/wasm/src/lib.rs +++ b/farm-staking/metabonding-staking/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 11 +// Upgrade: 1 +// Endpoints: 10 // Async Callback (empty): 1 // Total number of exported functions: 13 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/legacy-contracts/simple-lock-legacy/Cargo.toml b/legacy-contracts/simple-lock-legacy/Cargo.toml index fb660121e..49dfd097f 100644 --- a/legacy-contracts/simple-lock-legacy/Cargo.toml +++ b/legacy-contracts/simple-lock-legacy/Cargo.toml @@ -9,11 +9,11 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.common_structs] path = "../../common/common_structs" @@ -24,4 +24,4 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/legacy-contracts/simple-lock-legacy/meta/Cargo.toml b/legacy-contracts/simple-lock-legacy/meta/Cargo.toml index d9ce41012..694dbd35c 100644 --- a/legacy-contracts/simple-lock-legacy/meta/Cargo.toml +++ b/legacy-contracts/simple-lock-legacy/meta/Cargo.toml @@ -9,5 +9,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/legacy-contracts/simple-lock-legacy/wasm/Cargo.lock b/legacy-contracts/simple-lock-legacy/wasm/Cargo.lock index 0a3d09bf3..67a2d562a 100644 --- a/legacy-contracts/simple-lock-legacy/wasm/Cargo.lock +++ b/legacy-contracts/simple-lock-legacy/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_structs" @@ -72,32 +72,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -107,9 +109,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -120,18 +122,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -147,27 +149,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -201,15 +203,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -222,6 +224,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/legacy-contracts/simple-lock-legacy/wasm/Cargo.toml b/legacy-contracts/simple-lock-legacy/wasm/Cargo.toml index 258af6806..cc6a212c2 100644 --- a/legacy-contracts/simple-lock-legacy/wasm/Cargo.toml +++ b/legacy-contracts/simple-lock-legacy/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.simple-lock-legacy] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/legacy-contracts/simple-lock-legacy/wasm/src/lib.rs b/legacy-contracts/simple-lock-legacy/wasm/src/lib.rs index 59effebc7..996a3fd22 100644 --- a/legacy-contracts/simple-lock-legacy/wasm/src/lib.rs +++ b/legacy-contracts/simple-lock-legacy/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 8 +// Upgrade: 1 +// Endpoints: 7 // Async Callback (empty): 1 // Total number of exported functions: 10 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/Cargo.toml b/locked-asset/Cargo.toml index ad5a5986f..4e064cd2c 100644 --- a/locked-asset/Cargo.toml +++ b/locked-asset/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" publish = false [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.farm] @@ -50,7 +50,7 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/distribution/Cargo.toml b/locked-asset/distribution/Cargo.toml index f17a090c9..8a1730b88 100644 --- a/locked-asset/distribution/Cargo.toml +++ b/locked-asset/distribution/Cargo.toml @@ -14,8 +14,8 @@ path = "../../common/common_structs" path = "../factory" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/distribution/meta/Cargo.toml b/locked-asset/distribution/meta/Cargo.toml index 596ee0e76..55a6946aa 100644 --- a/locked-asset/distribution/meta/Cargo.toml +++ b/locked-asset/distribution/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/distribution/src/lib.rs b/locked-asset/distribution/src/lib.rs index b996701df..8fdda3e46 100644 --- a/locked-asset/distribution/src/lib.rs +++ b/locked-asset/distribution/src/lib.rs @@ -7,6 +7,7 @@ multiversx_sc::imports!(); multiversx_sc::derive_imports!(); mod global_op; +mod locked_asset_factory_proxy; const GAS_THRESHOLD: u64 = 100_000; const MAX_CLAIMABLE_DISTRIBUTION_ROUNDS: usize = 4; @@ -32,9 +33,6 @@ pub struct CommunityDistribution { #[multiversx_sc::contract] pub trait Distribution: global_op::GlobalOperationModule { - #[proxy] - fn locked_asset_factory_proxy(&self, to: ManagedAddress) -> factory::Proxy; - #[init] fn init(&self, asset_token_id: TokenIdentifier, locked_asset_factory_address: ManagedAddress) { require!( @@ -112,16 +110,17 @@ pub trait Distribution: global_op::GlobalOperationModule { for elem in locked_assets.iter() { let amount = elem.biguint; let spread_epoch = elem.epoch; - let _: IgnoreValue = self - .locked_asset_factory_proxy(to.clone()) + self.tx() + .to(&to) + .typed(locked_asset_factory_proxy::LockedAssetFactoryProxy) .create_and_forward_custom_period( amount.clone(), caller.clone(), spread_epoch, unlock_period.clone(), ) - .with_gas_limit(gas_limit_per_execute) - .execute_on_dest_context(); + .gas(gas_limit_per_execute) + .sync_call(); cummulated_amount += amount; } diff --git a/locked-asset/distribution/src/locked_asset_factory_proxy.rs b/locked-asset/distribution/src/locked_asset_factory_proxy.rs new file mode 100644 index 000000000..8a1ad9229 --- /dev/null +++ b/locked-asset/distribution/src/locked_asset_factory_proxy.rs @@ -0,0 +1,58 @@ +use multiversx_sc::proxy_imports::*; + +pub struct LockedAssetFactoryProxy; + +impl TxProxyTrait for LockedAssetFactoryProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = LockedAssetFactoryProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + LockedAssetFactoryProxyMethods { wrapped_tx: tx } + } +} + +pub struct LockedAssetFactoryProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl LockedAssetFactoryProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn create_and_forward_custom_period< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + Arg3: ProxyArg>, + >( + self, + amount: Arg0, + address: Arg1, + start_epoch: Arg2, + unlock_period: Arg3, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("createAndForwardCustomPeriod") + .argument(&amount) + .argument(&address) + .argument(&start_epoch) + .argument(&unlock_period) + .original_result() + } +} diff --git a/locked-asset/distribution/wasm/Cargo.lock b/locked-asset/distribution/wasm/Cargo.lock index f942da7bf..6fed92dec 100644 --- a/locked-asset/distribution/wasm/Cargo.lock +++ b/locked-asset/distribution/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "cfg-if" @@ -63,9 +63,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -144,9 +144,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "math" @@ -170,32 +170,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -205,9 +207,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -218,18 +220,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -245,27 +247,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -299,15 +301,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -337,6 +339,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/distribution/wasm/Cargo.toml b/locked-asset/distribution/wasm/Cargo.toml index b878ac51b..2e01e5006 100644 --- a/locked-asset/distribution/wasm/Cargo.toml +++ b/locked-asset/distribution/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.distribution] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/distribution/wasm/src/lib.rs b/locked-asset/distribution/wasm/src/lib.rs index 87c728bb7..4f919ac08 100644 --- a/locked-asset/distribution/wasm/src/lib.rs +++ b/locked-asset/distribution/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 16 +// Upgrade: 1 +// Endpoints: 15 // Async Callback (empty): 1 // Total number of exported functions: 18 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/energy-factory/Cargo.toml b/locked-asset/energy-factory/Cargo.toml index 8b88fa231..4989a1b32 100644 --- a/locked-asset/energy-factory/Cargo.toml +++ b/locked-asset/energy-factory/Cargo.toml @@ -33,11 +33,11 @@ path = "../../common/traits/unwrappable" path = "../../common/modules/legacy_token_decode_module" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies] num-bigint = "0.4.2" @@ -45,4 +45,4 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/energy-factory/meta/Cargo.toml b/locked-asset/energy-factory/meta/Cargo.toml index 2329f08ed..f0bb26e87 100644 --- a/locked-asset/energy-factory/meta/Cargo.toml +++ b/locked-asset/energy-factory/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/energy-factory/sc-config.toml b/locked-asset/energy-factory/sc-config.toml new file mode 100644 index 000000000..a6fc756e0 --- /dev/null +++ b/locked-asset/energy-factory/sc-config.toml @@ -0,0 +1,5 @@ +[[proxy]] +path = "../../dex/interactor/proxies/src/energy_factory_proxy.rs" + +[[proxy]] +path = "src/energy_factory_proxy.rs" diff --git a/locked-asset/energy-factory/src/energy.rs b/locked-asset/energy-factory/src/energy.rs index 533ca58b8..6511168e8 100644 --- a/locked-asset/energy-factory/src/energy.rs +++ b/locked-asset/energy-factory/src/energy.rs @@ -3,7 +3,8 @@ multiversx_sc::derive_imports!(); use common_structs::Epoch; -#[derive(TypeAbi, TopEncode, TopDecode, NestedEncode, NestedDecode, Clone, PartialEq, Debug)] +#[type_abi] +#[derive(TopEncode, TopDecode, NestedEncode, NestedDecode, Clone, PartialEq, Debug)] pub struct Energy { amount: BigInt, last_update_epoch: Epoch, diff --git a/locked-asset/energy-factory/src/energy_factory_proxy.rs b/locked-asset/energy-factory/src/energy_factory_proxy.rs new file mode 100644 index 000000000..d594b83d7 --- /dev/null +++ b/locked-asset/energy-factory/src/energy_factory_proxy.rs @@ -0,0 +1,599 @@ +// Code generated by the multiversx-sc proxy generator. DO NOT EDIT. + +//////////////////////////////////////////////////// +////////////////// AUTO-GENERATED ////////////////// +//////////////////////////////////////////////////// + +#![allow(dead_code)] +#![allow(clippy::all)] + +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + Gas: TxGas, +{ + /// Args: + /// - base_asset_token_id: The only token that is accepted for the lockTokens endpoint. + /// NOTE: The SC also needs the ESDTLocalMint and ESDTLocalBurn roles for this token. + /// - legacy_token_id: The token ID of the old locked asset. + /// NOTE: The SC also needs the NFTBurn role for this token. + /// - old_locked_asset_factory_address + /// - min_migrated_token_locked_period - The minimum number of epochs that + /// a migrated old LKMEX token will be locked for after the average is calculated + /// - lock_options: See `addLockOptions` endpoint doc for details. + pub fn init< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + Arg3: ProxyArg, + Arg4: ProxyArg>>, + >( + self, + base_asset_token_id: Arg0, + legacy_token_id: Arg1, + old_locked_asset_factory_address: Arg2, + min_migrated_token_locked_period: Arg3, + lock_options: Arg4, + ) -> TxTypedDeploy { + self.wrapped_tx + .payment(NotPayable) + .raw_deploy() + .argument(&base_asset_token_id) + .argument(&legacy_token_id) + .argument(&old_locked_asset_factory_address) + .argument(&min_migrated_token_locked_period) + .argument(&lock_options) + .original_result() + } +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn upgrade( + self, + ) -> TxTypedUpgrade { + self.wrapped_tx + .payment(NotPayable) + .raw_upgrade() + .original_result() + } +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Locks a whitelisted token until `unlock_epoch` and receive meta ESDT LOCKED tokens + /// on a 1:1 ratio. Accepted input tokens: + /// - base asset token + /// - old factory token -> extends all periods to the provided option + /// - previously locked token -> extends period to the provided option + /// + /// Arguments: + /// - lock_epochs - Number of epochs for which the tokens are locked for. + /// Caller may only choose from the available options, + /// which can be seen by querying getLockOptions + /// - opt_destination - OPTIONAL: destination address for the LOCKED tokens. Default is caller. + /// + /// Output payment: LOCKED tokens + pub fn lock_tokens_endpoint< + Arg0: ProxyArg, + Arg1: ProxyArg>>, + >( + self, + lock_epochs: Arg0, + opt_destination: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("lockTokens") + .argument(&lock_epochs) + .argument(&opt_destination) + .original_result() + } + + /// Unlock tokens, previously locked with the `lockTokens` endpoint + /// + /// Expected payments: LOCKED tokens + /// + /// Output payments: the originally locked tokens + pub fn unlock_tokens_endpoint( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("unlockTokens") + .original_result() + } + + /// Used internally by proxy-dex + pub fn extend_lock_period< + Arg0: ProxyArg, + Arg1: ProxyArg>, + >( + self, + lock_epochs: Arg0, + user: Arg1, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("extendLockPeriod") + .argument(&lock_epochs) + .argument(&user) + .original_result() + } + + pub fn issue_locked_token< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + >( + self, + token_display_name: Arg0, + token_ticker: Arg1, + num_decimals: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("issueLockedToken") + .argument(&token_display_name) + .argument(&token_ticker) + .argument(&num_decimals) + .original_result() + } + + pub fn locked_token( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockedTokenId") + .original_result() + } + + pub fn base_asset_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getBaseAssetTokenId") + .original_result() + } + + pub fn legacy_locked_token_id( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLegacyLockedTokenId") + .original_result() + } + + pub fn get_updated_energy_entry_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyEntryForUser") + .argument(&user) + .original_result() + } + + pub fn get_energy_amount_for_user< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getEnergyAmountForUser") + .argument(&user) + .original_result() + } + + /// Add lock options, as pairs of epochs and penalty percentages. + /// lock epochs must be >= 360 epochs (1 year), + /// percentages must be between 0 and 10_000 + /// Additionally, percentages must increase as lock period increases. + /// + /// For example, an option pair of "360, 100" means the user can choose to lock their tokens + /// for 360 epochs, and if they were to unlock the immediately, + /// they would incur a penalty of 1%. + /// + /// When calling lockTokens, or reducing lock periods, + /// users may only pick one of the whitelisted lock options. + pub fn add_lock_options< + Arg0: ProxyArg>>, + >( + self, + new_lock_options: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addLockOptions") + .argument(&new_lock_options) + .original_result() + } + + pub fn get_lock_options_view( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getLockOptions") + .original_result() + } + + /// Unlock a locked token instantly. This incures a penalty. + /// The longer the remaining locking time, the bigger the penalty. + /// Tokens can be unlocked through another SC after the unbond period has passed. + pub fn unlock_early( + self, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("unlockEarly") + .original_result() + } + + /// Reduce the locking period of a locked token. This incures a penalty. + /// The longer the reduction, the bigger the penalty. + /// new_lock_period must be one of the available lock options + pub fn reduce_lock_period< + Arg0: ProxyArg, + >( + self, + new_lock_period: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("reduceLockPeriod") + .argument(&new_lock_period) + .original_result() + } + + /// Calculates the penalty that would be incurred if `token_amount` tokens + /// were to have their lock epochs reduced from `prev_lock_epochs` to + /// `new_lock_epochs`. For full unlock, `new_lock_epochs` should be 0. + pub fn calculate_penalty_amount< + Arg0: ProxyArg>, + Arg1: ProxyArg, + Arg2: ProxyArg, + >( + self, + token_amount: Arg0, + prev_lock_epochs: Arg1, + new_lock_epochs: Arg2, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getPenaltyAmount") + .argument(&token_amount) + .argument(&prev_lock_epochs) + .argument(&new_lock_epochs) + .original_result() + } + + /// - token_unstake_address - The address of the SC that will handle the unbond logic + /// By default, all tokens go through an unbond period after unlock + pub fn set_token_unstake_address< + Arg0: ProxyArg>, + >( + self, + sc_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setTokenUnstakeAddress") + .argument(&sc_address) + .original_result() + } + + pub fn revert_unstake< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + new_energy: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .raw_call("revertUnstake") + .argument(&user) + .argument(&new_energy) + .original_result() + } + + pub fn token_unstake_sc_address( + self, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("getTokenUnstakeScAddress") + .original_result() + } + + /// Sets the energy amounts and token amounts for users. Overwrites any existing values. + /// Expects any number of pairs of (user address, token amount, energy amount). + pub fn set_energy_for_old_tokens< + Arg0: ProxyArg, BigUint, BigInt>>>, + >( + self, + users_energy: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setEnergyForOldTokens") + .argument(&users_energy) + .original_result() + } + + pub fn update_energy_after_old_token_unlock< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + original_caller: Arg0, + initial_epoch_amount_pairs: Arg1, + final_epoch_amount_pairs: Arg2, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("updateEnergyAfterOldTokenUnlock") + .argument(&original_caller) + .argument(&initial_epoch_amount_pairs) + .argument(&final_epoch_amount_pairs) + .original_result() + } + + pub fn migrate_old_tokens( + self, + ) -> TxTypedCall>> { + self.wrapped_tx + .raw_call("migrateOldTokens") + .original_result() + } + + pub fn pause_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("pause") + .original_result() + } + + pub fn unpause_endpoint( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("unpause") + .original_result() + } + + pub fn paused_status( + self, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isPaused") + .original_result() + } + + /// Sets the transfer role for the given address. Defaults to own address. + pub fn set_transfer_role< + Arg0: ProxyArg>>, + >( + self, + opt_address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setTransferRoleLockedToken") + .argument(&opt_address) + .original_result() + } + + /// Sets the burn role for the given address + pub fn set_burn_role< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setBurnRoleLockedToken") + .argument(&address) + .original_result() + } + + pub fn merge_tokens_endpoint< + Arg0: ProxyArg>>, + >( + self, + opt_original_caller: Arg0, + ) -> TxTypedCall> { + self.wrapped_tx + .raw_call("mergeTokens") + .argument(&opt_original_caller) + .original_result() + } + + pub fn lock_virtual< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg, + Arg3: ProxyArg>, + Arg4: ProxyArg>, + >( + self, + token_id: Arg0, + amount: Arg1, + lock_epochs: Arg2, + dest_address: Arg3, + energy_address: Arg4, + ) -> TxTypedCall> { + self.wrapped_tx + .payment(NotPayable) + .raw_call("lockVirtual") + .argument(&token_id) + .argument(&amount) + .argument(&lock_epochs) + .argument(&dest_address) + .argument(&energy_address) + .original_result() + } + + pub fn add_sc_address_to_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addSCAddressToWhitelist") + .argument(&address) + .original_result() + } + + pub fn remove_sc_address_from_whitelist< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeSCAddressFromWhitelist") + .argument(&address) + .original_result() + } + + pub fn is_sc_address_whitelisted< + Arg0: ProxyArg>, + >( + self, + address: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("isSCAddressWhitelisted") + .argument(&address) + .original_result() + } + + pub fn add_to_token_transfer_whitelist< + Arg0: ProxyArg>>, + >( + self, + sc_addresses: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("addToTokenTransferWhitelist") + .argument(&sc_addresses) + .original_result() + } + + pub fn remove_from_token_transfer_whitelist< + Arg0: ProxyArg>>, + >( + self, + sc_addresses: Arg0, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("removeFromTokenTransferWhitelist") + .argument(&sc_addresses) + .original_result() + } + + pub fn set_user_energy_after_locked_token_transfer< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + energy: Arg1, + ) -> TxTypedCall { + self.wrapped_tx + .payment(NotPayable) + .raw_call("setUserEnergyAfterLockedTokenTransfer") + .argument(&user) + .argument(&energy) + .original_result() + } +} + +#[type_abi] +#[derive(TopEncode, TopDecode, NestedEncode, NestedDecode, Clone, PartialEq, Debug)] +pub struct Energy +where + Api: ManagedTypeApi, +{ + pub amount: BigInt, + pub last_update_epoch: u64, + pub total_locked_tokens: BigUint, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct LockOption { + pub lock_epochs: u64, + pub penalty_start_percentage: u64, +} + +#[type_abi] +#[derive(TopEncode, TopDecode)] +pub struct EnergyUpdatedEvent +where + Api: ManagedTypeApi, +{ + pub old_energy_entry: Energy, + pub new_energy_entry: Energy, +} diff --git a/locked-asset/energy-factory/src/events.rs b/locked-asset/energy-factory/src/events.rs index 047f46e53..a5e3b78ee 100644 --- a/locked-asset/energy-factory/src/events.rs +++ b/locked-asset/energy-factory/src/events.rs @@ -3,7 +3,8 @@ multiversx_sc::derive_imports!(); use crate::energy::Energy; -#[derive(TypeAbi, TopEncode, TopDecode)] +#[type_abi] +#[derive(TopEncode, TopDecode)] pub struct EnergyUpdatedEvent { pub old_energy_entry: Energy, pub new_energy_entry: Energy, diff --git a/locked-asset/energy-factory/src/lib.rs b/locked-asset/energy-factory/src/lib.rs index f38c2e0e7..2531d2d79 100644 --- a/locked-asset/energy-factory/src/lib.rs +++ b/locked-asset/energy-factory/src/lib.rs @@ -12,15 +12,18 @@ pub mod locked_token_transfer; pub mod migration; pub mod penalty; pub mod token_merging; +mod token_unstake_proxy; pub mod token_whitelist; pub mod unlock_with_penalty; pub mod unstake; pub mod virtual_lock; +pub mod energy_factory_proxy; use common_structs::{Epoch, Percent}; use mergeable::Mergeable; use simple_lock::locked_token::LockedTokenAttributes; use unwrappable::Unwrappable; +pub use energy_factory_proxy::SimpleLockEnergyProxy; use crate::energy::Energy; @@ -129,12 +132,14 @@ pub trait SimpleLockEnergy: let output_tokens = self.lock_by_token_type(&dest_address, payment, unlock_epoch, current_epoch); - self.send().direct_esdt( - &dest_address, - &output_tokens.token_identifier, - output_tokens.token_nonce, - &output_tokens.amount, - ); + self.tx() + .to(&dest_address) + .single_esdt( + &output_tokens.token_identifier, + output_tokens.token_nonce, + &output_tokens.amount, + ) + .transfer(); output_tokens } @@ -177,12 +182,11 @@ pub trait SimpleLockEnergy: self.send() .esdt_local_mint(&output_payment.token_identifier, 0, &output_payment.amount); - self.send().direct_esdt( - &caller, - &output_payment.token_identifier, - 0, - &output_payment.amount, - ); + + self.tx() + .to(&caller) + .single_esdt(&output_payment.token_identifier, 0, &output_payment.amount) + .transfer(); output_payment } @@ -221,12 +225,14 @@ pub trait SimpleLockEnergy: &payment.amount, ); - self.send().direct_esdt( - &caller, - &output_tokens.token_identifier, - output_tokens.token_nonce, - &output_tokens.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &output_tokens.token_identifier, + output_tokens.token_nonce, + &output_tokens.amount, + ) + .transfer(); output_tokens } diff --git a/locked-asset/energy-factory/src/migration.rs b/locked-asset/energy-factory/src/migration.rs index 473d28c98..62c83df51 100644 --- a/locked-asset/energy-factory/src/migration.rs +++ b/locked-asset/energy-factory/src/migration.rs @@ -103,7 +103,7 @@ pub trait SimpleLockMigrationModule: } }); - self.send().direct_multi(&caller, &output_payments); + self.tx().to(&caller).payment(&output_payments).transfer(); output_payments.into() } diff --git a/locked-asset/energy-factory/src/token_unstake_proxy.rs b/locked-asset/energy-factory/src/token_unstake_proxy.rs new file mode 100644 index 000000000..2fa5e9ed0 --- /dev/null +++ b/locked-asset/energy-factory/src/token_unstake_proxy.rs @@ -0,0 +1,57 @@ +use multiversx_sc::proxy_imports::*; + +pub struct TokenUnstakeProxy; + +impl TxProxyTrait for TokenUnstakeProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = TokenUnstakeProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + TokenUnstakeProxyMethods { wrapped_tx: tx } + } +} + +pub struct TokenUnstakeProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl TokenUnstakeProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn deposit_user_tokens< + Arg0: ProxyArg>, + >( + self, + user: Arg0, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("depositUserTokens") + .argument(&user) + .original_result() + } + + pub fn deposit_fees( + self, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("depositFees") + .original_result() + } +} diff --git a/locked-asset/energy-factory/src/unlock_with_penalty.rs b/locked-asset/energy-factory/src/unlock_with_penalty.rs index 102565ed5..00d840213 100644 --- a/locked-asset/energy-factory/src/unlock_with_penalty.rs +++ b/locked-asset/energy-factory/src/unlock_with_penalty.rs @@ -94,12 +94,14 @@ pub trait UnlockWithPenaltyModule: energy.add_after_token_lock(&new_locked_tokens.amount, new_unlock_epoch, current_epoch); self.set_energy_entry(&caller, energy); - self.send().direct( - &caller, - &new_locked_tokens.token_identifier, - new_locked_tokens.token_nonce, - &new_locked_tokens.amount, - ); + self.tx() + .to(&caller) + .egld_or_single_esdt( + &new_locked_tokens.token_identifier, + new_locked_tokens.token_nonce, + &new_locked_tokens.amount, + ) + .transfer(); self.to_esdt_payment(new_locked_tokens) } diff --git a/locked-asset/energy-factory/src/unstake.rs b/locked-asset/energy-factory/src/unstake.rs index 9d9df5f8d..8c51c5eec 100644 --- a/locked-asset/energy-factory/src/unstake.rs +++ b/locked-asset/energy-factory/src/unstake.rs @@ -1,21 +1,6 @@ multiversx_sc::imports!(); -use crate::energy::Energy; - -mod token_unstake_proxy { - multiversx_sc::imports!(); - - #[multiversx_sc::proxy] - pub trait TokenUnstakeProxy { - #[payable("*")] - #[endpoint(depositUserTokens)] - fn deposit_user_tokens(&self, user: ManagedAddress); - - #[payable("*")] - #[endpoint(depositFees)] - fn deposit_fees(&self); - } -} +use crate::{energy::Energy, token_unstake_proxy}; #[multiversx_sc::module] pub trait UnstakeModule: @@ -62,20 +47,22 @@ pub trait UnstakeModule: payments.push(locked_tokens); payments.push(unlocked_tokens); - let _: IgnoreValue = self - .token_unstake_sc_proxy_obj(locking_sc_address) - .deposit_user_tokens(caller) - .with_multi_token_transfer(payments) - .execute_on_dest_context(); + self.tx() + .to(&locking_sc_address) + .typed(token_unstake_proxy::TokenUnstakeProxy) + .deposit_user_tokens(&caller) + .payment(payments) + .sync_call(); } fn send_fees_to_unstake_sc(&self, fees: EsdtTokenPayment) { let locking_sc_address = self.token_unstake_sc_address().get(); - let _: IgnoreValue = self - .token_unstake_sc_proxy_obj(locking_sc_address) + self.tx() + .to(&locking_sc_address) + .typed(token_unstake_proxy::TokenUnstakeProxy) .deposit_fees() - .with_esdt_transfer(fees) - .execute_on_dest_context(); + .payment(fees) + .sync_call(); } fn require_caller_unstake_sc(&self) { @@ -87,12 +74,6 @@ pub trait UnstakeModule: ); } - #[proxy] - fn token_unstake_sc_proxy_obj( - &self, - sc_address: ManagedAddress, - ) -> token_unstake_proxy::Proxy; - #[view(getTokenUnstakeScAddress)] #[storage_mapper("tokenUnstakeScAddress")] fn token_unstake_sc_address(&self) -> SingleValueMapper; diff --git a/locked-asset/energy-factory/src/virtual_lock.rs b/locked-asset/energy-factory/src/virtual_lock.rs index 94aa0abf5..fe1edb7b5 100644 --- a/locked-asset/energy-factory/src/virtual_lock.rs +++ b/locked-asset/energy-factory/src/virtual_lock.rs @@ -57,12 +57,15 @@ pub trait VirtualLockModule: energy, ) }); - self.send().direct_esdt( - &dest_address, - &locked_tokens.token_identifier, - locked_tokens.token_nonce, - &locked_tokens.amount, - ); + + self.tx() + .to(&dest_address) + .single_esdt( + &locked_tokens.token_identifier, + locked_tokens.token_nonce, + &locked_tokens.amount, + ) + .transfer(); locked_tokens } diff --git a/locked-asset/energy-factory/tests/energy_factory_setup/unbond_sc_mock.rs b/locked-asset/energy-factory/tests/energy_factory_setup/unbond_sc_mock.rs index c993b7e24..94ac162bb 100644 --- a/locked-asset/energy-factory/tests/energy_factory_setup/unbond_sc_mock.rs +++ b/locked-asset/energy-factory/tests/energy_factory_setup/unbond_sc_mock.rs @@ -45,11 +45,13 @@ impl UnbondScMock { let (dest_user, ()) = load_endpoint_args::, ())>(("dest_user", ())); - self.send().direct_esdt( - &dest_user, - &unlocked_tokens.token_identifier, - unlocked_tokens.token_nonce, - &unlocked_tokens.amount, - ); + self.tx() + .to(&dest_user) + .single_esdt( + &unlocked_tokens.token_identifier, + unlocked_tokens.token_nonce, + &unlocked_tokens.amount, + ) + .transfer(); } } diff --git a/locked-asset/energy-factory/wasm/Cargo.lock b/locked-asset/energy-factory/wasm/Cargo.lock index ea350f025..bf4e60314 100644 --- a/locked-asset/energy-factory/wasm/Cargo.lock +++ b/locked-asset/energy-factory/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -112,32 +112,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -147,9 +149,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -160,18 +162,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -187,27 +189,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -241,15 +243,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -262,6 +264,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/energy-factory/wasm/Cargo.toml b/locked-asset/energy-factory/wasm/Cargo.toml index 195fec384..b1b904661 100644 --- a/locked-asset/energy-factory/wasm/Cargo.toml +++ b/locked-asset/energy-factory/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.energy-factory] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/energy-factory/wasm/src/lib.rs b/locked-asset/energy-factory/wasm/src/lib.rs index 7393a9e97..fafdc534e 100644 --- a/locked-asset/energy-factory/wasm/src/lib.rs +++ b/locked-asset/energy-factory/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 34 +// Upgrade: 1 +// Endpoints: 33 // Async Callback: 1 // Total number of exported functions: 36 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/factory/Cargo.toml b/locked-asset/factory/Cargo.toml index bebae0fe8..f178e5943 100644 --- a/locked-asset/factory/Cargo.toml +++ b/locked-asset/factory/Cargo.toml @@ -26,11 +26,11 @@ path = "../../common/modules/token_merge_helper" path = "../energy-factory" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.arrayvec] version = "0.7.1" @@ -49,4 +49,4 @@ hex = "0.4" path = "../simple-lock" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/factory/meta/Cargo.toml b/locked-asset/factory/meta/Cargo.toml index a18aa81f1..c6c5a01f5 100644 --- a/locked-asset/factory/meta/Cargo.toml +++ b/locked-asset/factory/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/factory/src/energy_factory_migration_proxy.rs b/locked-asset/factory/src/energy_factory_migration_proxy.rs new file mode 100644 index 000000000..87b1f8416 --- /dev/null +++ b/locked-asset/factory/src/energy_factory_migration_proxy.rs @@ -0,0 +1,55 @@ +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn update_energy_after_old_token_unlock< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + Arg2: ProxyArg>, + >( + self, + original_caller: Arg0, + initial_epoch_amount_pairs: Arg1, + final_epoch_amount_pairs: Arg2, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("updateEnergyAfterOldTokenUnlock") + .argument(&original_caller) + .argument(&initial_epoch_amount_pairs) + .argument(&final_epoch_amount_pairs) + .original_result() + } +} diff --git a/locked-asset/factory/src/lib.rs b/locked-asset/factory/src/lib.rs index b826bb14b..1c5ffc5d4 100644 --- a/locked-asset/factory/src/lib.rs +++ b/locked-asset/factory/src/lib.rs @@ -1,8 +1,8 @@ #![no_std] -#![feature(exact_size_is_empty)] mod attr_ex_helper; mod cache; +mod energy_factory_migration_proxy; mod events; pub mod locked_asset; pub mod locked_asset_token_merge; diff --git a/locked-asset/factory/src/locked_asset.rs b/locked-asset/factory/src/locked_asset.rs index 85eb51636..2d7868daa 100644 --- a/locked-asset/factory/src/locked_asset.rs +++ b/locked-asset/factory/src/locked_asset.rs @@ -30,12 +30,14 @@ pub trait LockedAssetModule: .nft_create(total_amount, attributes); created_tokens.amount -= additional_amount_to_create; - self.send().direct_esdt( - address, - &created_tokens.token_identifier, - created_tokens.token_nonce, - &created_tokens.amount, - ); + self.tx() + .to(address) + .single_esdt( + &created_tokens.token_identifier, + created_tokens.token_nonce, + &created_tokens.amount, + ) + .transfer(); created_tokens } @@ -180,7 +182,10 @@ pub trait LockedAssetModule: if amount > &0 { let asset_token_id = self.asset_token_id().get(); self.send().esdt_local_mint(&asset_token_id, 0, amount); - self.send().direct_esdt(dest, &asset_token_id, 0, amount); + self.tx() + .to(dest) + .single_esdt(&asset_token_id, 0, amount) + .transfer(); } } diff --git a/locked-asset/factory/src/locked_asset_token_merge.rs b/locked-asset/factory/src/locked_asset_token_merge.rs index 995d13528..f6345b183 100644 --- a/locked-asset/factory/src/locked_asset_token_merge.rs +++ b/locked-asset/factory/src/locked_asset_token_merge.rs @@ -49,7 +49,7 @@ pub trait LockedAssetTokenMergeModule: &self, payments: ManagedVecRefIterator>, ) -> (BigUint, LockedAssetTokenAttributesEx) { - require!(!payments.is_empty(), "Cannot merge with 0 tokens"); + require!(payments.len() > 0, "Cannot merge with 0 tokens"); let mut tokens = ManagedVec::new(); let mut sum_amount = BigUint::zero(); diff --git a/locked-asset/factory/src/migration.rs b/locked-asset/factory/src/migration.rs index 590af2e3a..1c6141c21 100644 --- a/locked-asset/factory/src/migration.rs +++ b/locked-asset/factory/src/migration.rs @@ -1,7 +1,7 @@ multiversx_sc::imports!(); +use crate::energy_factory_migration_proxy; use common_structs::UnlockEpochAmountPairs; -use energy_factory::migration::ProxyTrait as _; #[multiversx_sc::module] pub trait LockedTokenMigrationModule: @@ -54,22 +54,18 @@ pub trait LockedTokenMigrationModule: final_epoch_amount_pairs: UnlockEpochAmountPairs, ) { let new_factory_address = self.new_factory_address().get(); - let _: IgnoreValue = self - .new_factory_proxy_builder(new_factory_address) + + self.tx() + .to(new_factory_address) + .typed(energy_factory_migration_proxy::SimpleLockEnergyProxy) .update_energy_after_old_token_unlock( caller, initial_epoch_amount_pairs, final_epoch_amount_pairs, ) - .execute_on_dest_context(); + .sync_call(); } - #[proxy] - fn new_factory_proxy_builder( - &self, - sc_address: ManagedAddress, - ) -> energy_factory::Proxy; - #[storage_mapper("newFactoryAddress")] fn new_factory_address(&self) -> SingleValueMapper; } diff --git a/locked-asset/factory/wasm/Cargo.lock b/locked-asset/factory/wasm/Cargo.lock index 499ad138f..36ced2c72 100644 --- a/locked-asset/factory/wasm/Cargo.lock +++ b/locked-asset/factory/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "cfg-if" @@ -46,9 +46,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -135,9 +135,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "math" @@ -161,32 +161,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -196,9 +198,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -209,18 +211,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -236,27 +238,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -290,15 +292,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -328,6 +330,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/factory/wasm/Cargo.toml b/locked-asset/factory/wasm/Cargo.toml index 5b7a5a327..0144e37bb 100644 --- a/locked-asset/factory/wasm/Cargo.toml +++ b/locked-asset/factory/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.factory] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/factory/wasm/src/lib.rs b/locked-asset/factory/wasm/src/lib.rs index 7ad9e4ac0..8b83df95b 100644 --- a/locked-asset/factory/wasm/src/lib.rs +++ b/locked-asset/factory/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 25 +// Upgrade: 1 +// Endpoints: 24 // Async Callback: 1 // Total number of exported functions: 27 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/lkmex-transfer/Cargo.toml b/locked-asset/lkmex-transfer/Cargo.toml index dbfa97c2b..43801580a 100644 --- a/locked-asset/lkmex-transfer/Cargo.toml +++ b/locked-asset/lkmex-transfer/Cargo.toml @@ -30,14 +30,14 @@ path = "../energy-factory" path = "../../energy-integration/common-modules/energy-query" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dev-dependencies] num-bigint = "0.4.2" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/lkmex-transfer/meta/Cargo.toml b/locked-asset/lkmex-transfer/meta/Cargo.toml index 9ed81bd18..4e9e48da5 100644 --- a/locked-asset/lkmex-transfer/meta/Cargo.toml +++ b/locked-asset/lkmex-transfer/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/lkmex-transfer/src/energy_factory_token_transfer_proxy.rs b/locked-asset/lkmex-transfer/src/energy_factory_token_transfer_proxy.rs new file mode 100644 index 000000000..7fc7fa376 --- /dev/null +++ b/locked-asset/lkmex-transfer/src/energy_factory_token_transfer_proxy.rs @@ -0,0 +1,53 @@ +use energy_query::Energy; +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn set_user_energy_after_locked_token_transfer< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + energy: Arg1, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("setUserEnergyAfterLockedTokenTransfer") + .argument(&user) + .argument(&energy) + .original_result() + } +} diff --git a/locked-asset/lkmex-transfer/src/energy_transfer.rs b/locked-asset/lkmex-transfer/src/energy_transfer.rs index 008517e80..b4552ee92 100644 --- a/locked-asset/lkmex-transfer/src/energy_transfer.rs +++ b/locked-asset/lkmex-transfer/src/energy_transfer.rs @@ -1,7 +1,7 @@ multiversx_sc::imports!(); +use crate::energy_factory_token_transfer_proxy; use common_structs::PaymentsVec; -use energy_factory::locked_token_transfer::ProxyTrait as _; use energy_query::Energy; use simple_lock::locked_token::LockedTokenAttributes; @@ -62,9 +62,10 @@ pub trait EnergyTransferModule: fn set_energy_in_factory(&self, user: ManagedAddress, energy: Energy) { let sc_address = self.energy_factory_address().get(); - let _: () = self - .energy_factory_proxy(sc_address) + self.tx() + .to(&sc_address) + .typed(energy_factory_token_transfer_proxy::SimpleLockEnergyProxy) .set_user_energy_after_locked_token_transfer(user, energy) - .execute_on_dest_context(); + .sync_call(); } } diff --git a/locked-asset/lkmex-transfer/src/lib.rs b/locked-asset/lkmex-transfer/src/lib.rs index 126e740b8..214ff820e 100644 --- a/locked-asset/lkmex-transfer/src/lib.rs +++ b/locked-asset/lkmex-transfer/src/lib.rs @@ -5,6 +5,7 @@ multiversx_sc::imports!(); multiversx_sc::derive_imports!(); pub mod constants; +pub mod energy_factory_token_transfer_proxy; pub mod energy_transfer; pub mod events; @@ -66,7 +67,7 @@ pub trait LkmexTransfer: self.check_address_on_cooldown(&receiver_last_transfer_mapper); let funds = self.get_unlocked_funds(&receiver, &sender); self.add_energy_to_destination(receiver.clone(), &funds); - self.send().direct_multi(&receiver, &funds); + self.tx().to(&receiver).payment(&funds).transfer(); self.locked_funds(&receiver, &sender).clear(); self.all_senders(&receiver).swap_remove(&sender); @@ -92,7 +93,10 @@ pub trait LkmexTransfer: self.sender_last_transfer_epoch(&sender).clear(); self.add_energy_to_destination(sender.clone(), &locked_funds.funds); - self.send().direct_multi(&sender, &locked_funds.funds); + self.tx() + .to(&sender) + .payment(&locked_funds.funds) + .transfer(); self.emit_cancel_transfer_event(sender, receiver, locked_funds); } diff --git a/locked-asset/lkmex-transfer/wasm/Cargo.lock b/locked-asset/lkmex-transfer/wasm/Cargo.lock index 68f71358d..ebedec31f 100644 --- a/locked-asset/lkmex-transfer/wasm/Cargo.lock +++ b/locked-asset/lkmex-transfer/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -134,32 +134,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -169,9 +171,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -182,18 +184,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -209,9 +211,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -227,18 +229,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -272,15 +274,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -293,6 +295,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/lkmex-transfer/wasm/Cargo.toml b/locked-asset/lkmex-transfer/wasm/Cargo.toml index 53407e6a3..965f7179d 100644 --- a/locked-asset/lkmex-transfer/wasm/Cargo.toml +++ b/locked-asset/lkmex-transfer/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.lkmex-transfer] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/lkmex-transfer/wasm/src/lib.rs b/locked-asset/lkmex-transfer/wasm/src/lib.rs index 6df953b3e..24d976e2b 100644 --- a/locked-asset/lkmex-transfer/wasm/src/lib.rs +++ b/locked-asset/lkmex-transfer/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 12 +// Upgrade: 1 +// Endpoints: 11 // Async Callback (empty): 1 // Total number of exported functions: 14 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/locked-token-wrapper/Cargo.toml b/locked-asset/locked-token-wrapper/Cargo.toml index 47ae7ce44..fb7474f3e 100644 --- a/locked-asset/locked-token-wrapper/Cargo.toml +++ b/locked-asset/locked-token-wrapper/Cargo.toml @@ -9,10 +9,10 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.utils] path = "../../common/modules/utils" @@ -44,4 +44,4 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/locked-token-wrapper/meta/Cargo.toml b/locked-asset/locked-token-wrapper/meta/Cargo.toml index 9f28fba35..fbcffef68 100644 --- a/locked-asset/locked-token-wrapper/meta/Cargo.toml +++ b/locked-asset/locked-token-wrapper/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/locked-token-wrapper/src/lib.rs b/locked-asset/locked-token-wrapper/src/lib.rs index 5398cc42a..575652770 100644 --- a/locked-asset/locked-token-wrapper/src/lib.rs +++ b/locked-asset/locked-token-wrapper/src/lib.rs @@ -53,12 +53,14 @@ pub trait LockedTokenWrapper: &ManagedVec::from_single_item(original_locked_tokens.clone()), ); - self.send().direct_esdt( - &caller, - &original_locked_tokens.token_identifier, - original_locked_tokens.token_nonce, - &original_locked_tokens.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &original_locked_tokens.token_identifier, + original_locked_tokens.token_nonce, + &original_locked_tokens.amount, + ) + .transfer(); original_locked_tokens } diff --git a/locked-asset/locked-token-wrapper/src/wrapped_token.rs b/locked-asset/locked-token-wrapper/src/wrapped_token.rs index ae3fce50a..cdb809824 100644 --- a/locked-asset/locked-token-wrapper/src/wrapped_token.rs +++ b/locked-asset/locked-token-wrapper/src/wrapped_token.rs @@ -57,14 +57,13 @@ pub trait WrappedTokenModule: #[endpoint(unsetTransferRoleWrappedToken)] fn unset_transfer_role(&self, address: ManagedAddress) { let wrapped_token_id = self.wrapped_token().get_token_id(); - let system_sc_proxy = ESDTSystemSmartContractProxy::new_proxy_obj(); + let system_sc_proxy = self.send().esdt_system_sc_proxy(); system_sc_proxy .unset_special_roles( &address, &wrapped_token_id, [EsdtLocalRole::Transfer][..].iter().cloned(), ) - .async_call() .call_and_exit(); } diff --git a/locked-asset/locked-token-wrapper/wasm/Cargo.lock b/locked-asset/locked-token-wrapper/wasm/Cargo.lock index b4acc31d9..b7cb9367b 100644 --- a/locked-asset/locked-token-wrapper/wasm/Cargo.lock +++ b/locked-asset/locked-token-wrapper/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -158,32 +158,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -193,9 +195,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -206,18 +208,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -233,9 +235,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -251,18 +253,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -296,15 +298,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -317,6 +319,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/locked-token-wrapper/wasm/Cargo.toml b/locked-asset/locked-token-wrapper/wasm/Cargo.toml index ed6d0c360..b68bfa2db 100644 --- a/locked-asset/locked-token-wrapper/wasm/Cargo.toml +++ b/locked-asset/locked-token-wrapper/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.locked-token-wrapper] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/locked-token-wrapper/wasm/src/lib.rs b/locked-asset/locked-token-wrapper/wasm/src/lib.rs index 6c59af09c..97c8b9704 100644 --- a/locked-asset/locked-token-wrapper/wasm/src/lib.rs +++ b/locked-asset/locked-token-wrapper/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 9 +// Upgrade: 1 +// Endpoints: 8 // Async Callback: 1 // Total number of exported functions: 11 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/proxy_dex/Cargo.toml b/locked-asset/proxy_dex/Cargo.toml index a36ca0338..674e3c389 100644 --- a/locked-asset/proxy_dex/Cargo.toml +++ b/locked-asset/proxy_dex/Cargo.toml @@ -45,11 +45,11 @@ path = "../../common/traits/mergeable" path = "../../common/traits/fixed-supply-token" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.energy-factory] path = "../energy-factory" @@ -69,7 +69,7 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.pausable] path = "../../common/modules/pausable" diff --git a/locked-asset/proxy_dex/meta/Cargo.toml b/locked-asset/proxy_dex/meta/Cargo.toml index 3cec85ec8..7c1d126ad 100644 --- a/locked-asset/proxy_dex/meta/Cargo.toml +++ b/locked-asset/proxy_dex/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/proxy_dex/src/energy_factory_token_transfer_proxy.rs b/locked-asset/proxy_dex/src/energy_factory_token_transfer_proxy.rs new file mode 100644 index 000000000..303760277 --- /dev/null +++ b/locked-asset/proxy_dex/src/energy_factory_token_transfer_proxy.rs @@ -0,0 +1,68 @@ +use energy_query::Energy; +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn extend_lock_period< + Arg0: ProxyArg, + Arg1: ProxyArg>, + >( + self, + lock_epochs: Arg0, + user: Arg1, + ) -> TxProxyCall> { + self.wrapped_tx + .raw_call("extendLockPeriod") + .argument(&lock_epochs) + .argument(&user) + .original_result() + } + + pub fn set_user_energy_after_locked_token_transfer< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + energy: Arg1, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("setUserEnergyAfterLockedTokenTransfer") + .argument(&user) + .argument(&energy) + .original_result() + } +} diff --git a/locked-asset/proxy_dex/src/energy_update.rs b/locked-asset/proxy_dex/src/energy_update.rs index 0c62e34f7..da24a6c1d 100644 --- a/locked-asset/proxy_dex/src/energy_update.rs +++ b/locked-asset/proxy_dex/src/energy_update.rs @@ -1,10 +1,11 @@ multiversx_sc::imports!(); use common_structs::{Epoch, Nonce}; -use energy_factory::{locked_token_transfer::ProxyTrait as _, ProxyTrait as _}; use energy_query::Energy; use simple_lock::locked_token::LockedTokenAttributes; +use crate::energy_factory_token_transfer_proxy; + #[multiversx_sc::module] pub trait EnergyUpdateModule: energy_query::EnergyQueryModule @@ -70,10 +71,13 @@ pub trait EnergyUpdateModule: lock_epochs: Epoch, energy_factory_addr: ManagedAddress, ) -> EsdtTokenPayment { - self.energy_factory_proxy(energy_factory_addr) + self.tx() + .to(&energy_factory_addr) + .typed(energy_factory_token_transfer_proxy::SimpleLockEnergyProxy) .extend_lock_period(lock_epochs, user) - .with_esdt_transfer(old_tokens) - .execute_on_dest_context() + .payment(old_tokens) + .returns(ReturnsResult) + .sync_call() } fn set_energy_in_factory( @@ -82,9 +86,10 @@ pub trait EnergyUpdateModule: energy: Energy, energy_factory_addr: ManagedAddress, ) { - let _: () = self - .energy_factory_proxy(energy_factory_addr) + self.tx() + .to(&energy_factory_addr) + .typed(energy_factory_token_transfer_proxy::SimpleLockEnergyProxy) .set_user_energy_after_locked_token_transfer(user, energy) - .execute_on_dest_context(); + .sync_call(); } } diff --git a/locked-asset/proxy_dex/src/external_merging.rs b/locked-asset/proxy_dex/src/external_merging.rs index 30ef3eb88..407408f31 100644 --- a/locked-asset/proxy_dex/src/external_merging.rs +++ b/locked-asset/proxy_dex/src/external_merging.rs @@ -38,12 +38,12 @@ fn merge_common( endpoint_name: &[u8], tokens: PaymentsVec, ) -> EsdtTokenPayment { - let mut contract_call = ContractCallWithMultiEsdt::>::new( - sc_address, - ManagedBuffer::new_from_bytes(endpoint_name), - tokens, - ); - contract_call.proxy_arg(&original_caller); - - contract_call.execute_on_dest_context() + Tx::new_tx_from_sc() + .to(sc_address) + .raw_call(endpoint_name) + .argument(original_caller) + .payment(tokens) + .original_result::>() + .returns(ReturnsResult) + .sync_call() } diff --git a/locked-asset/proxy_dex/src/farm_interactions.rs b/locked-asset/proxy_dex/src/farm_interactions.rs index dab9a7825..7a4466108 100644 --- a/locked-asset/proxy_dex/src/farm_interactions.rs +++ b/locked-asset/proxy_dex/src/farm_interactions.rs @@ -1,10 +1,7 @@ multiversx_sc::imports!(); -use farm::{ - base_functions::{ClaimRewardsResultType, ClaimRewardsResultWrapper}, - EnterFarmResultType, ExitFarmWithPartialPosResultType, -}; -use farm_with_locked_rewards::ProxyTrait as _; +use crate::farm_with_locked_rewards_proxy; +use farm::base_functions::ClaimRewardsResultWrapper; pub struct EnterFarmResultWrapper { pub farm_token: EsdtTokenPayment, @@ -25,11 +22,14 @@ pub trait FarmInteractionsModule { farming_token_id: TokenIdentifier, farming_token_amount: BigUint, ) -> EnterFarmResultWrapper { - let enter_farm_result: EnterFarmResultType = self - .farm_contract_proxy(farm_address) - .enter_farm_endpoint(user) - .with_esdt_transfer((farming_token_id, 0, farming_token_amount)) - .execute_on_dest_context(); + let enter_farm_result = self + .tx() + .to(&farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .enter_farm_endpoint(OptionalValue::Some(user)) + .single_esdt(&farming_token_id, 0, &farming_token_amount) + .returns(ReturnsResult) + .sync_call(); let (output_farm_token_payment, rewards_payment) = enter_farm_result.into_tuple(); @@ -45,11 +45,15 @@ pub trait FarmInteractionsModule { farm_address: ManagedAddress, farm_token: EsdtTokenPayment, ) -> ExitFarmResultWrapper { - let raw_result: ExitFarmWithPartialPosResultType = self - .farm_contract_proxy(farm_address) - .exit_farm_endpoint(user) - .with_esdt_transfer(farm_token) - .execute_on_dest_context(); + let raw_result = self + .tx() + .to(&farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .exit_farm_endpoint(OptionalValue::Some(user)) + .payment(farm_token) + .returns(ReturnsResult) + .sync_call(); + let (farming_tokens, reward_tokens) = raw_result.into_tuple(); ExitFarmResultWrapper { @@ -64,11 +68,15 @@ pub trait FarmInteractionsModule { farm_address: ManagedAddress, farm_token: EsdtTokenPayment, ) -> ClaimRewardsResultWrapper { - let raw_result: ClaimRewardsResultType = self - .farm_contract_proxy(farm_address) - .claim_rewards_endpoint(user) - .with_esdt_transfer(farm_token) - .execute_on_dest_context(); + let raw_result = self + .tx() + .to(&farm_address) + .typed(farm_with_locked_rewards_proxy::FarmProxy) + .claim_rewards_endpoint(OptionalValue::Some(user)) + .payment(farm_token) + .returns(ReturnsResult) + .sync_call(); + let (new_farm_token, rewards) = raw_result.into_tuple(); ClaimRewardsResultWrapper { @@ -76,8 +84,4 @@ pub trait FarmInteractionsModule { rewards, } } - - #[proxy] - fn farm_contract_proxy(&self, to: ManagedAddress) - -> farm_with_locked_rewards::Proxy; } diff --git a/locked-asset/proxy_dex/src/farm_with_locked_rewards_proxy.rs b/locked-asset/proxy_dex/src/farm_with_locked_rewards_proxy.rs new file mode 100644 index 000000000..1ea21160c --- /dev/null +++ b/locked-asset/proxy_dex/src/farm_with_locked_rewards_proxy.rs @@ -0,0 +1,86 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FarmProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn enter_farm_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("enterFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn exit_farm_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("exitFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_rewards_endpoint>>>( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("claimRewards") + .argument(&opt_orig_caller) + .original_result() + } +} diff --git a/locked-asset/proxy_dex/src/lib.rs b/locked-asset/proxy_dex/src/lib.rs index 3e03c2f06..fab31b15a 100644 --- a/locked-asset/proxy_dex/src/lib.rs +++ b/locked-asset/proxy_dex/src/lib.rs @@ -1,16 +1,18 @@ #![no_std] #![allow(clippy::too_many_arguments)] -#![feature(exact_size_is_empty)] multiversx_sc::imports!(); multiversx_sc::derive_imports!(); +pub mod energy_factory_token_transfer_proxy; pub mod energy_update; pub mod events; pub mod external_merging; pub mod farm_interactions; +pub mod farm_with_locked_rewards_proxy; pub mod other_sc_whitelist; pub mod pair_interactions; +pub mod pair_proxy; pub mod proxy_common; pub mod proxy_farm; pub mod proxy_pair; diff --git a/locked-asset/proxy_dex/src/pair_interactions.rs b/locked-asset/proxy_dex/src/pair_interactions.rs index 7e959a4e1..360baf791 100644 --- a/locked-asset/proxy_dex/src/pair_interactions.rs +++ b/locked-asset/proxy_dex/src/pair_interactions.rs @@ -1,10 +1,6 @@ multiversx_sc::imports!(); -use pair::pair_actions::{ - add_liq::ProxyTrait as _, - common_result_types::{AddLiquidityResultType, RemoveLiquidityResultType}, - remove_liq::ProxyTrait as _, -}; +use crate::pair_proxy; pub struct AddLiquidityResultWrapper { pub lp_tokens_received: EsdtTokenPayment, @@ -38,11 +34,15 @@ pub trait PairInteractionsModule { all_token_payments.push(first_payment); all_token_payments.push(second_payment); - let raw_result: AddLiquidityResultType = self - .pair_contract_proxy(pair_address) + let raw_result = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .add_liquidity(first_token_amount_min, second_token_amount_min) - .with_multi_token_transfer(all_token_payments) - .execute_on_dest_context(); + .payment(all_token_payments) + .returns(ReturnsResult) + .sync_call(); + let (lp_tokens_received, first_tokens_used, second_tokens_used) = raw_result.into_tuple(); let first_token_leftover_amount = &first_token_amount_desired - &first_tokens_used.amount; let second_token_leftover_amount = @@ -74,11 +74,15 @@ pub trait PairInteractionsModule { first_token_amount_min: BigUint, second_token_amount_min: BigUint, ) -> RemoveLiqudityResultWrapper { - let raw_result: RemoveLiquidityResultType = self - .pair_contract_proxy(pair_address) + let raw_result = self + .tx() + .to(&pair_address) + .typed(pair_proxy::PairProxy) .remove_liquidity(first_token_amount_min, second_token_amount_min) - .with_esdt_transfer((lp_token_id, 0, lp_token_amount)) - .execute_on_dest_context(); + .single_esdt(&lp_token_id, 0, &lp_token_amount) + .returns(ReturnsResult) + .sync_call(); + let (first_token_received, second_token_received) = raw_result.into_tuple(); RemoveLiqudityResultWrapper { @@ -86,7 +90,4 @@ pub trait PairInteractionsModule { second_token_received, } } - - #[proxy] - fn pair_contract_proxy(&self, to: ManagedAddress) -> pair::Proxy; } diff --git a/locked-asset/proxy_dex/src/pair_proxy.rs b/locked-asset/proxy_dex/src/pair_proxy.rs new file mode 100644 index 000000000..970a32a62 --- /dev/null +++ b/locked-asset/proxy_dex/src/pair_proxy.rs @@ -0,0 +1,81 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct PairProxy; + +impl TxProxyTrait for PairProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PairProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PairProxyMethods { wrapped_tx: tx } + } +} + +pub struct PairProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl PairProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn add_liquidity>, Arg1: ProxyArg>>( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue3< + EsdtTokenPayment, + EsdtTokenPayment, + EsdtTokenPayment, + >, + > { + self.wrapped_tx + .raw_call("addLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxProxyCall< + Env, + From, + To, + Gas, + MultiValue2, EsdtTokenPayment>, + > { + self.wrapped_tx + .raw_call("removeLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } +} diff --git a/locked-asset/proxy_dex/tests/proxy_dex_test_setup/mod.rs b/locked-asset/proxy_dex/tests/proxy_dex_test_setup/mod.rs index 322fedd61..418e3d234 100644 --- a/locked-asset/proxy_dex/tests/proxy_dex_test_setup/mod.rs +++ b/locked-asset/proxy_dex/tests/proxy_dex_test_setup/mod.rs @@ -157,7 +157,7 @@ where unlock_percent: 10_000, unlock_epoch: LOCK_OPTIONS[0], }); - + let old_token_attributes = LockedAssetTokenAttributesEx { is_merged: false, unlock_schedule: UnlockScheduleEx { unlock_milestones }, @@ -169,7 +169,6 @@ where &rust_biguint!(USER_BALANCE), &old_token_attributes, ); - // users lock tokens b_mock diff --git a/locked-asset/proxy_dex/tests/proxy_lp_test.rs b/locked-asset/proxy_dex/tests/proxy_lp_test.rs index 5d524ba3a..d5b7a8f83 100644 --- a/locked-asset/proxy_dex/tests/proxy_lp_test.rs +++ b/locked-asset/proxy_dex/tests/proxy_lp_test.rs @@ -907,17 +907,6 @@ fn increase_proxy_lp_token_energy() { ) .assert_ok(); - // check old tokens were burned - setup - .b_mock - .check_nft_balance::>( - setup.proxy_wrapper.address_ref(), - WRAPPED_LP_TOKEN_ID, - 1, - &rust_biguint!(0u64), - None, - ); - // chceck new wrapped lp token setup.b_mock.check_nft_balance( &first_user, diff --git a/locked-asset/proxy_dex/wasm/Cargo.lock b/locked-asset/proxy_dex/wasm/Cargo.lock index 6194e8070..0503c5d57 100644 --- a/locked-asset/proxy_dex/wasm/Cargo.lock +++ b/locked-asset/proxy_dex/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "endian-type" @@ -286,9 +286,7 @@ dependencies = [ name = "locking_module" version = "0.0.0" dependencies = [ - "energy-factory", "multiversx-sc", - "simple-lock", ] [[package]] @@ -307,32 +305,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -342,9 +342,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -355,18 +355,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -382,9 +382,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -424,9 +424,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -465,9 +465,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -516,15 +516,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -554,6 +554,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/proxy_dex/wasm/Cargo.toml b/locked-asset/proxy_dex/wasm/Cargo.toml index 294ba0f8a..9c41e91e8 100644 --- a/locked-asset/proxy_dex/wasm/Cargo.toml +++ b/locked-asset/proxy_dex/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.proxy_dex] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/proxy_dex/wasm/src/lib.rs b/locked-asset/proxy_dex/wasm/src/lib.rs index 29b3ab709..c04d97990 100644 --- a/locked-asset/proxy_dex/wasm/src/lib.rs +++ b/locked-asset/proxy_dex/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 31 +// Upgrade: 1 +// Endpoints: 30 // Async Callback: 1 // Total number of exported functions: 33 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/simple-lock/Cargo.toml b/locked-asset/simple-lock/Cargo.toml index 5a2205d17..bcecb34b1 100644 --- a/locked-asset/simple-lock/Cargo.toml +++ b/locked-asset/simple-lock/Cargo.toml @@ -9,11 +9,11 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dependencies.common_structs] path = "../../common/common_structs" @@ -24,4 +24,4 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/simple-lock/meta/Cargo.toml b/locked-asset/simple-lock/meta/Cargo.toml index e8398e175..380868628 100644 --- a/locked-asset/simple-lock/meta/Cargo.toml +++ b/locked-asset/simple-lock/meta/Cargo.toml @@ -9,5 +9,5 @@ authors = ["Dorin Iancu "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/simple-lock/src/basic_lock_unlock.rs b/locked-asset/simple-lock/src/basic_lock_unlock.rs index 5f3a46aa8..4277b3cc7 100644 --- a/locked-asset/simple-lock/src/basic_lock_unlock.rs +++ b/locked-asset/simple-lock/src/basic_lock_unlock.rs @@ -47,12 +47,14 @@ pub trait BasicLockUnlock: unlock_epoch: u64, ) -> EgldOrEsdtTokenPayment { let out_payment = self.lock_tokens(payment, unlock_epoch); - self.send().direct( - to, - &out_payment.token_identifier, - out_payment.token_nonce, - &out_payment.amount, - ); + self.tx() + .to(to) + .egld_or_single_esdt( + &out_payment.token_identifier, + out_payment.token_nonce, + &out_payment.amount, + ) + .transfer(); out_payment } @@ -97,12 +99,14 @@ pub trait BasicLockUnlock: payment: EsdtTokenPayment, ) -> EgldOrEsdtTokenPayment { let out_payment = self.unlock_tokens(payment); - self.send().direct( - to, - &out_payment.token_identifier, - out_payment.token_nonce, - &out_payment.amount, - ); + self.tx() + .to(to) + .egld_or_single_esdt( + &out_payment.token_identifier, + out_payment.token_nonce, + &out_payment.amount, + ) + .transfer(); out_payment } diff --git a/locked-asset/simple-lock/src/farm_interactions.rs b/locked-asset/simple-lock/src/farm_interactions.rs index 2579a7531..8b81d796b 100644 --- a/locked-asset/simple-lock/src/farm_interactions.rs +++ b/locked-asset/simple-lock/src/farm_interactions.rs @@ -1,15 +1,9 @@ -use common_structs::{RawResultWrapper, RawResultsType}; +use crate::farm_proxy; +use common_structs::RawResultWrapper; multiversx_sc::imports!(); multiversx_sc::derive_imports!(); -type EnterFarmResultType = - MultiValue2, EsdtTokenPayment>; -type ExitFarmResultType = - MultiValue2, EsdtTokenPayment>; -type ClaimRewardsResultType = - MultiValue2, EsdtTokenPayment>; - const ENTER_FARM_RESULTS_LEN: usize = 2; const EXIT_FARM_RESULTS_LEN: usize = 2; const CLAIM_REWARDS_RESULTS_LEN: usize = 2; @@ -33,35 +27,6 @@ pub struct FarmCompoundRewardsResultWrapper { pub new_farm_tokens: EsdtTokenPayment, } -mod farm_proxy { - multiversx_sc::imports!(); - use super::{ClaimRewardsResultType, EnterFarmResultType, ExitFarmResultType}; - - #[multiversx_sc::proxy] - pub trait FarmProxy { - #[payable("*")] - #[endpoint(enterFarm)] - fn enter_farm( - &self, - opt_orig_caller: OptionalValue, - ) -> EnterFarmResultType; - - #[payable("*")] - #[endpoint(exitFarm)] - fn exit_farm( - &self, - opt_orig_caller: OptionalValue, - ) -> ExitFarmResultType; - - #[payable("*")] - #[endpoint(claimRewards)] - fn claim_rewards( - &self, - opt_orig_caller: OptionalValue, - ) -> ClaimRewardsResultType; - } -} - #[multiversx_sc::module] pub trait FarmInteractionsModule { fn call_farm_enter( @@ -72,21 +37,23 @@ pub trait FarmInteractionsModule { additional_farm_tokens: ManagedVec>, caller: ManagedAddress, ) -> EnterFarmResultWrapper { - let mut contract_call = self - .farm_proxy(farm_address) - .enter_farm(caller) - .with_esdt_transfer(EsdtTokenPayment::new( - farming_token, - 0, - farming_token_amount, - )); - - for farm_token in &additional_farm_tokens { - contract_call = contract_call.with_esdt_transfer(farm_token); - } - - let raw_results: RawResultsType = contract_call.execute_on_dest_context(); - let mut results_wrapper = RawResultWrapper::new(raw_results); + let mut payment = ManagedVec::from_single_item(EsdtTokenPayment::new( + farming_token, + 0, + farming_token_amount, + )); + payment.extend(&additional_farm_tokens); + + let raw_results = self + .tx() + .to(&farm_address) + .typed(farm_proxy::FarmProxy) + .enter_farm(OptionalValue::Some(caller)) + .payment(payment) + .returns(ReturnsRawResult) + .sync_call(); + + let mut results_wrapper = RawResultWrapper::new(raw_results.into()); results_wrapper.trim_results_front(ENTER_FARM_RESULTS_LEN); let new_farm_tokens = results_wrapper.decode_next_result(); @@ -106,17 +73,16 @@ pub trait FarmInteractionsModule { farm_token_amount: BigUint, caller: ManagedAddress, ) -> ExitFarmResultWrapper { - let raw_results: RawResultsType = self - .farm_proxy(farm_address) - .exit_farm(caller) - .with_esdt_transfer(EsdtTokenPayment::new( - farm_token, - farm_token_nonce, - farm_token_amount, - )) - .execute_on_dest_context(); - - let mut results_wrapper = RawResultWrapper::new(raw_results); + let raw_results = self + .tx() + .to(&farm_address) + .typed(farm_proxy::FarmProxy) + .exit_farm(OptionalValue::Some(caller)) + .single_esdt(&farm_token, farm_token_nonce, &farm_token_amount) + .returns(ReturnsRawResult) + .sync_call(); + + let mut results_wrapper = RawResultWrapper::new(raw_results.into()); results_wrapper.trim_results_front(EXIT_FARM_RESULTS_LEN); let initial_farming_tokens = results_wrapper.decode_next_result(); @@ -136,17 +102,16 @@ pub trait FarmInteractionsModule { farm_token_amount: BigUint, caller: ManagedAddress, ) -> FarmClaimRewardsResultWrapper { - let raw_results: RawResultsType = self - .farm_proxy(farm_address) - .claim_rewards(caller) - .with_esdt_transfer(EsdtTokenPayment::new( - farm_token, - farm_token_nonce, - farm_token_amount, - )) - .execute_on_dest_context(); - - let mut results_wrapper = RawResultWrapper::new(raw_results); + let raw_results = self + .tx() + .to(&farm_address) + .typed(farm_proxy::FarmProxy) + .claim_rewards(OptionalValue::Some(caller)) + .single_esdt(&farm_token, farm_token_nonce, &farm_token_amount) + .returns(ReturnsRawResult) + .sync_call(); + + let mut results_wrapper = RawResultWrapper::new(raw_results.into()); results_wrapper.trim_results_front(CLAIM_REWARDS_RESULTS_LEN); let new_farm_tokens = results_wrapper.decode_next_result(); @@ -157,7 +122,4 @@ pub trait FarmInteractionsModule { reward_tokens, } } - - #[proxy] - fn farm_proxy(&self, sc_address: ManagedAddress) -> farm_proxy::Proxy; } diff --git a/locked-asset/simple-lock/src/farm_proxy.rs b/locked-asset/simple-lock/src/farm_proxy.rs new file mode 100644 index 000000000..8e8e111e9 --- /dev/null +++ b/locked-asset/simple-lock/src/farm_proxy.rs @@ -0,0 +1,75 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct FarmProxy; + +impl TxProxyTrait for FarmProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FarmProxyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FarmProxyProxyMethods { wrapped_tx: tx } + } +} + +pub struct FarmProxyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl FarmProxyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn enter_farm< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("enterFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn exit_farm< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("exitFarm") + .argument(&opt_orig_caller) + .original_result() + } + + pub fn claim_rewards< + Arg0: ProxyArg>>, + >( + self, + opt_orig_caller: Arg0, + ) -> TxProxyCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("claimRewards") + .argument(&opt_orig_caller) + .original_result() + } +} diff --git a/locked-asset/simple-lock/src/lib.rs b/locked-asset/simple-lock/src/lib.rs index fb59b792c..7f8248f21 100644 --- a/locked-asset/simple-lock/src/lib.rs +++ b/locked-asset/simple-lock/src/lib.rs @@ -5,8 +5,10 @@ multiversx_sc::imports!(); pub mod basic_lock_unlock; pub mod error_messages; pub mod farm_interactions; +pub mod farm_proxy; pub mod locked_token; pub mod lp_interactions; +pub mod lp_proxy; pub mod proxy_farm; pub mod proxy_lp; pub mod token_attributes; diff --git a/locked-asset/simple-lock/src/locked_token.rs b/locked-asset/simple-lock/src/locked_token.rs index dbb9c1a5d..f0e83ed54 100644 --- a/locked-asset/simple-lock/src/locked_token.rs +++ b/locked-asset/simple-lock/src/locked_token.rs @@ -105,12 +105,14 @@ pub trait LockedTokenModule: } } - self.send().direct_esdt( - to, - &payment.token_identifier, - payment.token_nonce, - &payment.amount, - ); + self.tx() + .to(to) + .single_esdt( + &payment.token_identifier, + payment.token_nonce, + &payment.amount, + ) + .transfer(); payment } diff --git a/locked-asset/simple-lock/src/lp_interactions.rs b/locked-asset/simple-lock/src/lp_interactions.rs index 4229cca53..1e71ae8c0 100644 --- a/locked-asset/simple-lock/src/lp_interactions.rs +++ b/locked-asset/simple-lock/src/lp_interactions.rs @@ -1,12 +1,7 @@ multiversx_sc::imports!(); multiversx_sc::derive_imports!(); -use crate::error_messages::*; - -type AddLiquidityResultType = - MultiValue3, EsdtTokenPayment, EsdtTokenPayment>; -type RemoveLiquidityResultType = - MultiValue2, EsdtTokenPayment>; +use crate::{error_messages::*, lp_proxy}; pub struct AddLiquidityResultWrapper { pub lp_tokens: EsdtTokenPayment, @@ -21,30 +16,6 @@ pub struct RemoveLiquidityResultWrapper { // Must manually declare, as Pair SC already depends on simple-lock // This avoids circular dependency -mod lp_proxy { - multiversx_sc::imports!(); - use super::{AddLiquidityResultType, RemoveLiquidityResultType}; - - #[multiversx_sc::proxy] - pub trait LpProxy { - #[payable("*")] - #[endpoint(addLiquidity)] - fn add_liquidity( - &self, - first_token_amount_min: BigUint, - second_token_amount_min: BigUint, - ) -> AddLiquidityResultType; - - #[payable("*")] - #[endpoint(removeLiquidity)] - fn remove_liquidity( - &self, - first_token_amount_min: BigUint, - second_token_amount_min: BigUint, - ) -> RemoveLiquidityResultType; - } -} - #[multiversx_sc::module] pub trait LpInteractionsModule { fn call_pair_add_liquidity( @@ -59,11 +30,15 @@ pub trait LpInteractionsModule { lp_payments_in.push(first_payment.clone()); lp_payments_in.push(second_payment.clone()); - let lp_payments_out: AddLiquidityResultType = self - .lp_proxy(lp_address) + let lp_payments_out = self + .tx() + .to(&lp_address) + .typed(lp_proxy::LpProxy) .add_liquidity(first_token_amount_min, second_token_amount_min) - .with_multi_token_transfer(lp_payments_in) - .execute_on_dest_context(); + .payment(lp_payments_in) + .returns(ReturnsResult) + .sync_call(); + let (lp_tokens, first_token_optimal_payment, second_token_optimal_payment) = lp_payments_out.into_tuple(); @@ -104,11 +79,14 @@ pub trait LpInteractionsModule { expected_first_token_id_out: &TokenIdentifier, expected_second_token_id_out: &TokenIdentifier, ) -> RemoveLiquidityResultWrapper { - let lp_payments_out: RemoveLiquidityResultType = self - .lp_proxy(lp_address) + let lp_payments_out = self + .tx() + .to(&lp_address) + .typed(lp_proxy::LpProxy) .remove_liquidity(first_token_amount_min, second_token_amount_min) - .with_esdt_transfer((lp_token_id, 0, lp_token_amount)) - .execute_on_dest_context(); + .single_esdt(&lp_token_id, 0, &lp_token_amount) + .returns(ReturnsResult) + .sync_call(); let (first_token_payment_out, second_token_payment_out) = lp_payments_out.into_tuple(); require!( @@ -122,7 +100,4 @@ pub trait LpInteractionsModule { second_token_payment_out, } } - - #[proxy] - fn lp_proxy(&self, sc_address: ManagedAddress) -> lp_proxy::Proxy; } diff --git a/locked-asset/simple-lock/src/lp_proxy.rs b/locked-asset/simple-lock/src/lp_proxy.rs new file mode 100644 index 000000000..369b83d9d --- /dev/null +++ b/locked-asset/simple-lock/src/lp_proxy.rs @@ -0,0 +1,69 @@ +#![allow(clippy::type_complexity)] + +use multiversx_sc::proxy_imports::*; + +pub struct LpProxy; + +impl TxProxyTrait for LpProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = LpProxyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + LpProxyProxyMethods { wrapped_tx: tx } + } +} + +pub struct LpProxyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl LpProxyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn add_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxProxyCall, EsdtTokenPayment, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("addLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } + + pub fn remove_liquidity< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + first_token_amount_min: Arg0, + second_token_amount_min: Arg1, + ) -> TxProxyCall, EsdtTokenPayment>> { + self.wrapped_tx + .raw_call("removeLiquidity") + .argument(&first_token_amount_min) + .argument(&second_token_amount_min) + .original_result() + } +} diff --git a/locked-asset/simple-lock/src/proxy_farm.rs b/locked-asset/simple-lock/src/proxy_farm.rs index 1d1a918d2..6ca92342e 100644 --- a/locked-asset/simple-lock/src/proxy_farm.rs +++ b/locked-asset/simple-lock/src/proxy_farm.rs @@ -179,12 +179,14 @@ pub trait ProxyFarmModule: ); if enter_farm_result.reward_tokens.amount > 0 { - self.send().direct_esdt( - &caller, - &enter_farm_result.reward_tokens.token_identifier, - enter_farm_result.reward_tokens.token_nonce, - &enter_farm_result.reward_tokens.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &enter_farm_result.reward_tokens.token_identifier, + enter_farm_result.reward_tokens.token_nonce, + &enter_farm_result.reward_tokens.amount, + ) + .transfer(); } (farm_tokens, enter_farm_result.reward_tokens).into() @@ -229,20 +231,24 @@ pub trait ProxyFarmModule: farm_proxy_token_attributes.farming_token_locked_nonce, exit_farm_result.initial_farming_tokens.amount, ); - self.send().direct_esdt( - &caller, - &lp_proxy_token_payment.token_identifier, - lp_proxy_token_payment.token_nonce, - &lp_proxy_token_payment.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &lp_proxy_token_payment.token_identifier, + lp_proxy_token_payment.token_nonce, + &lp_proxy_token_payment.amount, + ) + .transfer(); if exit_farm_result.reward_tokens.amount > 0 { - self.send().direct_esdt( - &caller, - &exit_farm_result.reward_tokens.token_identifier, - exit_farm_result.reward_tokens.token_nonce, - &exit_farm_result.reward_tokens.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &exit_farm_result.reward_tokens.token_identifier, + exit_farm_result.reward_tokens.token_nonce, + &exit_farm_result.reward_tokens.amount, + ) + .transfer(); } (lp_proxy_token_payment, exit_farm_result.reward_tokens).into() @@ -292,12 +298,14 @@ pub trait ProxyFarmModule: ); if claim_rewards_result.reward_tokens.amount > 0 { - self.send().direct_esdt( - &caller, - &claim_rewards_result.reward_tokens.token_identifier, - claim_rewards_result.reward_tokens.token_nonce, - &claim_rewards_result.reward_tokens.amount, - ); + self.tx() + .to(&caller) + .single_esdt( + &claim_rewards_result.reward_tokens.token_identifier, + claim_rewards_result.reward_tokens.token_nonce, + &claim_rewards_result.reward_tokens.amount, + ) + .transfer(); } (new_proxy_token_payment, claim_rewards_result.reward_tokens).into() diff --git a/locked-asset/simple-lock/wasm/Cargo.lock b/locked-asset/simple-lock/wasm/Cargo.lock index b09697870..f5ef723dc 100644 --- a/locked-asset/simple-lock/wasm/Cargo.lock +++ b/locked-asset/simple-lock/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_structs" @@ -72,32 +72,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -107,9 +109,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -120,18 +122,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -147,27 +149,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -201,15 +203,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -222,6 +224,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/simple-lock/wasm/Cargo.toml b/locked-asset/simple-lock/wasm/Cargo.toml index df38efee7..87ea89c71 100644 --- a/locked-asset/simple-lock/wasm/Cargo.toml +++ b/locked-asset/simple-lock/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.simple-lock] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/simple-lock/wasm/src/lib.rs b/locked-asset/simple-lock/wasm/src/lib.rs index 4e1b87c7d..eeafb6cb1 100644 --- a/locked-asset/simple-lock/wasm/src/lib.rs +++ b/locked-asset/simple-lock/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 20 +// Upgrade: 1 +// Endpoints: 19 // Async Callback: 1 // Total number of exported functions: 22 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/locked-asset/token-unstake/Cargo.toml b/locked-asset/token-unstake/Cargo.toml index e98adb1a8..9a7aea4e8 100644 --- a/locked-asset/token-unstake/Cargo.toml +++ b/locked-asset/token-unstake/Cargo.toml @@ -9,7 +9,7 @@ publish = false path = "src/lib.rs" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.mergeable] @@ -39,7 +39,7 @@ num-traits = "0.2" hex = "0.4" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" diff --git a/locked-asset/token-unstake/meta/Cargo.toml b/locked-asset/token-unstake/meta/Cargo.toml index 217e2f67f..9c4a63a6e 100644 --- a/locked-asset/token-unstake/meta/Cargo.toml +++ b/locked-asset/token-unstake/meta/Cargo.toml @@ -9,5 +9,5 @@ publish = false path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/locked-asset/token-unstake/src/cancel_unstake.rs b/locked-asset/token-unstake/src/cancel_unstake.rs index 0d6150ff4..a6ee93f3c 100644 --- a/locked-asset/token-unstake/src/cancel_unstake.rs +++ b/locked-asset/token-unstake/src/cancel_unstake.rs @@ -1,9 +1,8 @@ multiversx_sc::imports!(); -use energy_factory::unstake::ProxyTrait as _; use simple_lock::locked_token::LockedTokenAttributes; -use crate::events; +use crate::{energy_factory_unstake_proxy, events}; #[multiversx_sc::module] pub trait CancelUnstakeModule: @@ -54,13 +53,14 @@ pub trait CancelUnstakeModule: entries_mapper.clear(); - self.send().direct_multi(&caller, &output_payments); + self.tx().to(&caller).payment(&output_payments).transfer(); let sc_address = self.energy_factory_address().get(); - let _: IgnoreValue = self - .energy_factory_proxy(sc_address) + self.tx() + .to(&sc_address) + .typed(energy_factory_unstake_proxy::SimpleLockEnergyProxy) .revert_unstake(caller.clone(), energy) - .execute_on_dest_context(); + .sync_call(); self.emit_unlocked_tokens_event(&caller, ManagedVec::new()); output_payments.into() diff --git a/locked-asset/token-unstake/src/energy_factory_unstake_proxy.rs b/locked-asset/token-unstake/src/energy_factory_unstake_proxy.rs new file mode 100644 index 000000000..5721a5f73 --- /dev/null +++ b/locked-asset/token-unstake/src/energy_factory_unstake_proxy.rs @@ -0,0 +1,53 @@ +use energy_query::Energy; +use multiversx_sc::proxy_imports::*; + +pub struct SimpleLockEnergyProxy; + +impl TxProxyTrait for SimpleLockEnergyProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = SimpleLockEnergyProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + SimpleLockEnergyProxyMethods { wrapped_tx: tx } + } +} + +pub struct SimpleLockEnergyProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl SimpleLockEnergyProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn revert_unstake< + Arg0: ProxyArg>, + Arg1: ProxyArg>, + >( + self, + user: Arg0, + new_energy: Arg1, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("revertUnstake") + .argument(&user) + .argument(&new_energy) + .original_result() + } +} diff --git a/locked-asset/token-unstake/src/fees_collector_proxy.rs b/locked-asset/token-unstake/src/fees_collector_proxy.rs new file mode 100644 index 000000000..fcbadf918 --- /dev/null +++ b/locked-asset/token-unstake/src/fees_collector_proxy.rs @@ -0,0 +1,44 @@ +use multiversx_sc::proxy_imports::*; + +pub struct FeesCollectorProxy; + +impl TxProxyTrait for FeesCollectorProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = FeesCollectorProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + FeesCollectorProxyMethods { wrapped_tx: tx } + } +} + +pub struct FeesCollectorProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +impl FeesCollectorProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + /// Pair SC will deposit the fees through this endpoint + /// Deposits for current week are accessible starting next week + pub fn deposit_swap_fees(self) -> TxProxyCall { + self.wrapped_tx + .raw_call("depositSwapFees") + .original_result() + } +} diff --git a/locked-asset/token-unstake/src/fees_handler.rs b/locked-asset/token-unstake/src/fees_handler.rs index 803ef5345..2b66d2877 100644 --- a/locked-asset/token-unstake/src/fees_handler.rs +++ b/locked-asset/token-unstake/src/fees_handler.rs @@ -2,19 +2,9 @@ multiversx_sc::imports!(); pub const MAX_PENALTY_PERCENTAGE: u64 = 10_000; +use crate::fees_collector_proxy; use crate::{events, tokens_per_user::UnstakePair}; -pub mod fees_collector_proxy { - multiversx_sc::imports!(); - - #[multiversx_sc::proxy] - pub trait FeesCollectorProxy { - #[payable("*")] - #[endpoint(depositSwapFees)] - fn deposit_swap_fees(&self); - } -} - #[multiversx_sc::module] pub trait FeesHandlerModule: crate::tokens_per_user::TokensPerUserModule @@ -88,19 +78,14 @@ pub trait FeesHandlerModule: } let fees_collector_addr = self.fees_collector_address().get(); - let _: IgnoreValue = self - .fees_collector_proxy_builder(fees_collector_addr) + self.tx() + .to(&fees_collector_addr) + .typed(fees_collector_proxy::FeesCollectorProxy) .deposit_swap_fees() - .with_esdt_transfer(payment) - .execute_on_dest_context(); + .payment(payment) + .sync_call(); } - #[proxy] - fn fees_collector_proxy_builder( - &self, - sc_address: ManagedAddress, - ) -> fees_collector_proxy::Proxy; - #[view(getFeesBurnPercentage)] #[storage_mapper("feesBurnPercentage")] fn fees_burn_percentage(&self) -> SingleValueMapper; diff --git a/locked-asset/token-unstake/src/lib.rs b/locked-asset/token-unstake/src/lib.rs index 985e91be9..e95b9edca 100644 --- a/locked-asset/token-unstake/src/lib.rs +++ b/locked-asset/token-unstake/src/lib.rs @@ -3,7 +3,9 @@ multiversx_sc::imports!(); pub mod cancel_unstake; +pub mod energy_factory_unstake_proxy; pub mod events; +pub mod fees_collector_proxy; pub mod fees_handler; pub mod tokens_per_user; pub mod unbond_tokens; diff --git a/locked-asset/token-unstake/src/unbond_tokens.rs b/locked-asset/token-unstake/src/unbond_tokens.rs index 20aeb1843..1955a26cf 100644 --- a/locked-asset/token-unstake/src/unbond_tokens.rs +++ b/locked-asset/token-unstake/src/unbond_tokens.rs @@ -57,7 +57,7 @@ pub trait UnbondTokensModule: self.burn_penalty(token); } - self.send().direct_multi(&caller, &output_payments); + self.tx().to(&caller).payment(&output_payments).transfer(); let new_unlocked_tokens = self.unlocked_tokens_for_user(&caller).get(); self.emit_unlocked_tokens_event(&caller, new_unlocked_tokens); diff --git a/locked-asset/token-unstake/wasm/Cargo.lock b/locked-asset/token-unstake/wasm/Cargo.lock index 87bea6198..153f367ea 100644 --- a/locked-asset/token-unstake/wasm/Cargo.lock +++ b/locked-asset/token-unstake/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common-types" @@ -119,32 +119,34 @@ dependencies = [ [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -154,9 +156,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -167,18 +169,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -194,27 +196,27 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -248,15 +250,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -291,6 +293,12 @@ version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" + [[package]] name = "unwrappable" version = "0.0.0" diff --git a/locked-asset/token-unstake/wasm/Cargo.toml b/locked-asset/token-unstake/wasm/Cargo.toml index cba43e2e5..a1a6d9986 100644 --- a/locked-asset/token-unstake/wasm/Cargo.toml +++ b/locked-asset/token-unstake/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.token-unstake] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/locked-asset/token-unstake/wasm/src/lib.rs b/locked-asset/token-unstake/wasm/src/lib.rs index 396d02ba0..ea93ce423 100644 --- a/locked-asset/token-unstake/wasm/src/lib.rs +++ b/locked-asset/token-unstake/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 11 +// Upgrade: 1 +// Endpoints: 10 // Async Callback (empty): 1 // Total number of exported functions: 13 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!(); diff --git a/pause-all/Cargo.toml b/pause-all/Cargo.toml index 4428bd4ea..232603d7c 100644 --- a/pause-all/Cargo.toml +++ b/pause-all/Cargo.toml @@ -12,14 +12,14 @@ path = "src/lib.rs" path = "../common/modules/pausable" [dependencies.multiversx-sc] -version = "=0.48.1" +version = "=0.50.3" features = ["esdt-token-payment-legacy-decode"] [dependencies.multiversx-sc-modules] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.multiversx-sc-scenario] -version = "=0.48.1" +version = "=0.50.3" [dev-dependencies.farm] path = "../dex/farm" diff --git a/pause-all/meta/Cargo.toml b/pause-all/meta/Cargo.toml index 204a54967..1f9fac822 100644 --- a/pause-all/meta/Cargo.toml +++ b/pause-all/meta/Cargo.toml @@ -11,5 +11,5 @@ authors = ["MultiversX "] path = ".." [dependencies.multiversx-sc-meta] -version = "0.48.1" +version = "0.50.3" default-features = false diff --git a/pause-all/src/lib.rs b/pause-all/src/lib.rs index 05f7fe541..eea5aea17 100644 --- a/pause-all/src/lib.rs +++ b/pause-all/src/lib.rs @@ -5,20 +5,8 @@ use ongoing_pause_operation::{OngoingOperation, MIN_GAS_TO_SAVE_PROGRESS}; multiversx_sc::imports!(); -mod pause_proxy { - multiversx_sc::imports!(); - - #[multiversx_sc::proxy] - pub trait Pausable { - #[endpoint] - fn pause(&self); - - #[endpoint] - fn resume(&self); - } -} - pub mod ongoing_pause_operation; +pub mod pause_proxy; #[multiversx_sc::contract] pub trait PauseAll: @@ -95,7 +83,11 @@ pub trait PauseAll: } fn call_pause(&self, sc_addr: ManagedAddress) { - let _: IgnoreValue = self.pause_proxy(sc_addr).pause().execute_on_dest_context(); + self.tx() + .to(&sc_addr) + .typed(pause_proxy::PausableProxy) + .pause() + .sync_call(); } /// Will unpause the given list of contracts. @@ -143,12 +135,13 @@ pub trait PauseAll: } fn call_resume(&self, sc_addr: ManagedAddress) { - let _: IgnoreValue = self.pause_proxy(sc_addr).resume().execute_on_dest_context(); + self.tx() + .to(&sc_addr) + .typed(pause_proxy::PausableProxy) + .resume() + .sync_call(); } - #[proxy] - fn pause_proxy(&self, addr: ManagedAddress) -> pause_proxy::Proxy; - #[view(getPausableContracts)] #[storage_mapper("pausableContracts")] fn pausable_contracts(&self) -> UnorderedSetMapper; diff --git a/pause-all/src/pause_proxy.rs b/pause-all/src/pause_proxy.rs new file mode 100644 index 000000000..f00bec1b9 --- /dev/null +++ b/pause-all/src/pause_proxy.rs @@ -0,0 +1,53 @@ +use multiversx_sc::proxy_imports::*; + +pub struct PausableProxy; + +impl TxProxyTrait for PausableProxy +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + type TxProxyMethods = PausableProxyMethods; + + fn proxy_methods(self, tx: Tx) -> Self::TxProxyMethods { + PausableProxyMethods { wrapped_tx: tx } + } +} + +pub struct PausableProxyMethods +where + Env: TxEnv, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + wrapped_tx: Tx, +} + +#[rustfmt::skip] +impl PausableProxyMethods +where + Env: TxEnv, + Env::Api: VMApi, + From: TxFrom, + To: TxTo, + Gas: TxGas, +{ + pub fn pause( + self, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("pause") + .original_result() + } + + pub fn resume( + self, + ) -> TxProxyCall { + self.wrapped_tx + .raw_call("resume") + .original_result() + } +} diff --git a/pause-all/wasm/Cargo.lock b/pause-all/wasm/Cargo.lock index 1f61fcf8f..e52cdf845 100644 --- a/pause-all/wasm/Cargo.lock +++ b/pause-all/wasm/Cargo.lock @@ -10,15 +10,15 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "bitflags" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" [[package]] name = "common_errors" @@ -47,32 +47,34 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" [[package]] name = "multiversx-sc" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23f5fa49bfb4505465784dc6b8b1d5e52ffcdafedfc2c6f5e9ba54b4bcf5cee8" +checksum = "1d79d1cea2d23e8f2545749c9b31952305b54c415af88b224b985784d3d6529d" dependencies = [ "bitflags", "hex-literal", "multiversx-sc-codec", "multiversx-sc-derive", "num-traits", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7711088da6b140257f35a25d90dc4f78bc4e2be324d1096f7f5842dd397cda" +checksum = "35c94397b2fba14e40edfa55905b3f453ed57aa06c9b1960ad6a0ca6bfb7a236" dependencies = [ "arrayvec", "multiversx-sc-codec-derive", + "unwrap-infallible", ] [[package]] name = "multiversx-sc-codec-derive" -version = "0.18.7" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc92c79e975de4b4f956d54d2c31aaca5e18310e1c36d37593fe856a07b8130" +checksum = "cf72a8042da0bc19da0b8f0d4f61b4c66ae853560fefc69cd8fea87bf1aa8c14" dependencies = [ "hex", "proc-macro2", @@ -82,9 +84,9 @@ dependencies = [ [[package]] name = "multiversx-sc-derive" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f114e0cd72950ae1f0dc1bca2da7d2a02f6ce51bcbee7721980340436bfe63a" +checksum = "54e6926e181f6306b69aa805b8d24aa33084497e38ac03e37df457456b6757cc" dependencies = [ "hex", "proc-macro2", @@ -95,18 +97,18 @@ dependencies = [ [[package]] name = "multiversx-sc-modules" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c9e2000b81f241706a080291f6a7791e221a6ba292cec93687feae53592c9c" +checksum = "7f9a8c10ddadc7adfc04edbdd1ea80a9ae9a7e11202fc4cfb2e08c8e27f17aa5" dependencies = [ "multiversx-sc", ] [[package]] name = "multiversx-sc-wasm-adapter" -version = "0.48.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c50d29ab99fab424227c181b6a918ca4ee234c4f18ea5fbbf2853b2ccb0ebc" +checksum = "4350e286afce68bb2448d30572f68dd344b2e98e160404dd7f7d13f185e7acfd" dependencies = [ "multiversx-sc", ] @@ -122,9 +124,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -165,18 +167,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.78" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -193,15 +195,15 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "syn" -version = "2.0.48" +version = "2.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +checksum = "c993ed8ccba56ae856363b1845da7266a7cb78e1d146c8a32d54b45a8b831fc9" dependencies = [ "proc-macro2", "quote", @@ -213,3 +215,9 @@ name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unwrap-infallible" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb" diff --git a/pause-all/wasm/Cargo.toml b/pause-all/wasm/Cargo.toml index 6bbe809bc..f352458d0 100644 --- a/pause-all/wasm/Cargo.toml +++ b/pause-all/wasm/Cargo.toml @@ -21,11 +21,14 @@ debug = false panic = "abort" overflow-checks = false +[profile.dev] +panic = "abort" + [dependencies.pause-all] path = ".." [dependencies.multiversx-sc-wasm-adapter] -version = "=0.48.1" +version = "=0.50.3" [workspace] members = ["."] diff --git a/pause-all/wasm/src/lib.rs b/pause-all/wasm/src/lib.rs index 2302b1e6a..88f01cb87 100644 --- a/pause-all/wasm/src/lib.rs +++ b/pause-all/wasm/src/lib.rs @@ -5,13 +5,12 @@ //////////////////////////////////////////////////// // Init: 1 -// Endpoints: 8 +// Upgrade: 1 +// Endpoints: 7 // Async Callback (empty): 1 // Total number of exported functions: 10 #![no_std] -#![allow(internal_features)] -#![feature(lang_items)] multiversx_sc_wasm_adapter::allocator!(); multiversx_sc_wasm_adapter::panic_handler!();