diff --git a/README.md b/README.md
index 531af823..a2814f34 100644
--- a/README.md
+++ b/README.md
@@ -82,13 +82,13 @@ For Phoenix:
```
cd protocols/phoenix-contracts/
make build
-cp target/wasm32-unknown-unknown/release/*.wasm ../../contracts/adapters/phoenix/phoenix_contracts/
+cp target/wasm32v1-none/release/*.wasm ../../contracts/adapters/phoenix/phoenix_contracts/
# make sure the tests still pass
cd /workspace/contracts/adapters/phoenix
rustup install 1.79.0 # Phoenix needs to downgrade
rustup override set 1.79.0
-rustup target add wasm32-unknown-unknown
+rustup target add wasm32v1-none
make test
```
@@ -98,7 +98,7 @@ For Aqua:
cd protocols/aqua
npm install -g @go-task/cli
task build
-cp target/wasm32-unknown-unknown/release/*.wasm ../../contracts/adapters/aqua/aqua_contracts/
+cp target/wasm32v1-none/release/*.wasm ../../contracts/adapters/aqua/aqua_contracts/
```
## 2. Run Tests and Scout Audit
@@ -140,7 +140,7 @@ yarn build
yarn setup-phoenix testnet # To Setup Phoenix. Now you will have the new deployed addresses in .soroban/testnet.contrats.json
```
-### 4.2 Deploy the Aggregator Aggregator
+### 4.2 Deploy the Aggregator
To deploy the smart contracts you first would need to build the source with
```bash
@@ -148,7 +148,7 @@ cd /workspace/contracts
make build
```
The .wasm files will already be optimized and will be available in
-`/workspace/contracts/target/wasm32-unknown-unknown/release/` with a name like `[NAME-OF-CONTRACT].optimized.wasm`
+`/workspace/contracts/target/wasm32v1-none/release/` with a name like `[NAME-OF-CONTRACT].optimized.wasm`
after the WASMs are built you can run this to deploy, networks can be `testnet`, `standalone`, `futurenet`, `mainnet`. The RPCs will be taken from the `configs.json` file.
@@ -171,7 +171,7 @@ when deployment is completed you can find the addresses in ./.soroban directory
Run javascript tests
```
cd /workspace
-yarn test
+yarn test testnet
```
diff --git a/configs.json b/configs.json
index 0ecc9363..e5287489 100644
--- a/configs.json
+++ b/configs.json
@@ -1,7 +1,7 @@
{
- "protocolVersion": "22",
- "previewHash": "22.0.1@sha256:e020c9c3925bd83ddfbde7b69397a0e6aa1e68d4a4a78eb9fac5a37875f8961a",
- "quickstartHash": "latest@sha256:b7f5a1b2c8ec06cb30a1b79b377ad2bc762cf8cb69ce1fcf7b91185b2acd8a15",
+ "protocolVersion": "23",
+ "previewHash": "23@sha256:2981e593f04a0fa11f704c83d1a6a2fc86ae76ce9f74a4e365ed6da579430c1c",
+ "quickstartHash": "pr753-latest@sha256:563165b9891cc967cb99981ad3d9de1131d25120bcede931eaf3637ee257e349",
"networkConfig": [
{
"network": "mainnet",
diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock
index bd1a3da2..7c42fe68 100644
--- a/contracts/Cargo.lock
+++ b/contracts/Cargo.lock
@@ -2,13 +2,6 @@
# It is not intended for manual editing.
version = 4
-[[package]]
-name = "adapter-interface"
-version = "2.0.0"
-dependencies = [
- "soroban-sdk",
-]
-
[[package]]
name = "ahash"
version = "0.8.11"
@@ -36,14 +29,6 @@ dependencies = [
"libc",
]
-[[package]]
-name = "aqua-adapter"
-version = "0.1.0"
-dependencies = [
- "adapter-interface",
- "soroban-sdk",
-]
-
[[package]]
name = "arbitrary"
version = "1.3.2"
@@ -183,12 +168,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
-[[package]]
-name = "base64"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-
[[package]]
name = "base64"
version = "0.22.1"
@@ -240,6 +219,17 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+[[package]]
+name = "cfg_eval"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
[[package]]
name = "chrono"
version = "0.4.38"
@@ -253,14 +243,6 @@ dependencies = [
"windows-targets",
]
-[[package]]
-name = "comet-adapter"
-version = "0.1.0"
-dependencies = [
- "adapter-interface",
- "soroban-sdk",
-]
-
[[package]]
name = "const-oid"
version = "0.9.6"
@@ -354,9 +336,9 @@ dependencies = [
[[package]]
name = "darling"
-version = "0.20.9"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@@ -364,9 +346,9 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.9"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
@@ -378,9 +360,9 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.20.9"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
@@ -453,6 +435,12 @@ version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
+[[package]]
+name = "dyn-clone"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
+
[[package]]
name = "ecdsa"
version = "0.16.9"
@@ -611,6 +599,12 @@ version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
[[package]]
name = "hex"
version = "0.4.3"
@@ -755,6 +749,23 @@ version = "0.4.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+[[package]]
+name = "macro-string"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
+
[[package]]
name = "num-bigint"
version = "0.4.4"
@@ -826,15 +837,6 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
-[[package]]
-name = "phoenix-adapter"
-version = "0.1.0"
-dependencies = [
- "adapter-interface",
- "soroban-sdk",
- "test-utils",
-]
-
[[package]]
name = "pkcs8"
version = "0.10.2"
@@ -924,6 +926,26 @@ dependencies = [
"getrandom",
]
+[[package]]
+name = "ref-cast"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.100",
+]
+
[[package]]
name = "rfc6979"
version = "0.4.0"
@@ -949,6 +971,41 @@ version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+[[package]]
+name = "schemars"
+version = "0.8.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615"
+dependencies = [
+ "dyn-clone",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "sec1"
version = "0.7.2"
@@ -970,18 +1027,18 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]]
name = "serde"
-version = "1.0.192"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.192"
+version = "1.0.219"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [
"proc-macro2",
"quote",
@@ -990,26 +1047,30 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.108"
+version = "1.0.143"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
dependencies = [
"itoa",
+ "memchr",
"ryu",
"serde",
]
[[package]]
name = "serde_with"
-version = "3.8.3"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e73139bc5ec2d45e6c5fd85be5a46949c1c39a4c18e56915f5eb4c12f975e377"
+checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
dependencies = [
- "base64 0.22.1",
+ "base64",
"chrono",
"hex",
"indexmap 1.9.3",
"indexmap 2.2.6",
+ "schemars 0.8.22",
+ "schemars 0.9.0",
+ "schemars 1.0.4",
"serde",
"serde_derive",
"serde_json",
@@ -1019,9 +1080,9 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.8.3"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b80d3d6b56b64335c0180e5ffde23b3c5e08c14c585b51a15bd0e95393f46703"
+checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
dependencies = [
"darling",
"proc-macro2",
@@ -1031,9 +1092,9 @@ dependencies = [
[[package]]
name = "sha2"
-version = "0.10.8"
+version = "0.10.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -1068,9 +1129,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "soroban-builtin-sdk-macros"
-version = "22.1.3"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf2e42bf80fcdefb3aae6ff3c7101a62cf942e95320ed5b518a1705bc11c6b2f"
+checksum = "2ae7f1f1908c9cdb7740eb9bb7a467770ff26fa4c82e49fdb4de88027b5fb93c"
dependencies = [
"itertools",
"proc-macro2",
@@ -1080,9 +1141,9 @@ dependencies = [
[[package]]
name = "soroban-env-common"
-version = "22.1.3"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "027cd856171bfd6ad2c0ffb3b7dfe55ad7080fb3050c36ad20970f80da634472"
+checksum = "6c20fd873e412036f93916c946d497216d8a997a5f8c13a342127fe0043cde49"
dependencies = [
"arbitrary",
"crate-git-revision",
@@ -1099,9 +1160,9 @@ dependencies = [
[[package]]
name = "soroban-env-guest"
-version = "22.1.3"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a07dda1ae5220d975979b19ad4fd56bc86ec7ec1b4b25bc1c5d403f934e592e"
+checksum = "f18662e41bcfc9914ec365c3743ac040513403f1ca2cc7bad0a7a846f179391c"
dependencies = [
"soroban-env-common",
"static_assertions",
@@ -1109,9 +1170,9 @@ dependencies = [
[[package]]
name = "soroban-env-host"
-version = "22.1.3"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66e8b03a4191d485eab03f066336112b2a50541a7553179553dc838b986b94dd"
+checksum = "c1a03f55efb228e2b687276a4171291c814b7ee38d2aed926d7cb5a786bf269a"
dependencies = [
"ark-bls12-381",
"ark-ec",
@@ -1145,9 +1206,9 @@ dependencies = [
[[package]]
name = "soroban-env-macros"
-version = "22.1.3"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00eff744764ade3bc480e4909e3a581a240091f3d262acdce80b41f7069b2bd9"
+checksum = "273c716dcf8797dd70517cc79af7b788934a17ced73a156bd6511f51930d4cd7"
dependencies = [
"itertools",
"proc-macro2",
@@ -1160,9 +1221,9 @@ dependencies = [
[[package]]
name = "soroban-ledger-snapshot"
-version = "22.0.7"
+version = "23.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80bbe59497cb50e81861187e6bd2a2c805df253573d44ed56e7d373f79530758"
+checksum = "e4f055250bfa4c3f70d56c932ca0763321a44240ffe9549c5f61880e0cdd3e24"
dependencies = [
"serde",
"serde_json",
@@ -1174,12 +1235,13 @@ dependencies = [
[[package]]
name = "soroban-sdk"
-version = "22.0.7"
+version = "23.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85edd55eb09aa5dd7ba5ab595d2be7ac3f453e90e2f26d704ff26c130f2926f"
+checksum = "fefe46e9767014f74021e9d5461df6d87f2d55bde2d2fa85fae74bf774fcc995"
dependencies = [
"arbitrary",
"bytes-lit",
+ "crate-git-revision",
"ctor",
"derive_arbitrary",
"ed25519-dalek",
@@ -1196,16 +1258,16 @@ dependencies = [
[[package]]
name = "soroban-sdk-macros"
-version = "22.0.7"
+version = "23.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a141230aa65006d4b3eeee9d0589172d734a2abfbe15b84670e38e76e200b370"
+checksum = "e9f581c62211a70a02bfdc6a734fc91da49337831bd338bafb13678d6106ab98"
dependencies = [
- "crate-git-revision",
"darling",
+ "heck",
"itertools",
+ "macro-string",
"proc-macro2",
"quote",
- "rustc_version",
"sha2",
"soroban-env-common",
"soroban-spec",
@@ -1216,11 +1278,11 @@ dependencies = [
[[package]]
name = "soroban-spec"
-version = "22.0.7"
+version = "23.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b54326e9516b33be99c701b37242b27efb8e66cc1f1eff994b9d9a013a4be136"
+checksum = "cc25b2f35ce9e25af41003987cff4c4d679ec1c62f7664c5bd9f8d44e82aa3ae"
dependencies = [
- "base64 0.13.1",
+ "base64",
"stellar-xdr",
"thiserror",
"wasmparser",
@@ -1228,9 +1290,9 @@ dependencies = [
[[package]]
name = "soroban-spec-rust"
-version = "22.0.7"
+version = "23.0.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f009cab4dfd653bc94a06c5022f1ca9d30e198b0e451f84cf307231563d11de2"
+checksum = "30e253d697163fbbd8d2c88f702e7f5ccba191ccdc9d85d570e2f065060331bc"
dependencies = [
"prettyplease",
"proc-macro2",
@@ -1255,19 +1317,10 @@ dependencies = [
"wasmparser-nostd",
]
-[[package]]
-name = "soroswap-adapter"
-version = "0.1.0"
-dependencies = [
- "adapter-interface",
- "soroban-sdk",
-]
-
[[package]]
name = "soroswap-aggregator"
version = "2.0.0"
dependencies = [
- "adapter-interface",
"soroban-sdk",
"test-utils",
]
@@ -1276,7 +1329,6 @@ dependencies = [
name = "soroswap-aggregator-deployer"
version = "2.0.0"
dependencies = [
- "adapter-interface",
"soroban-sdk",
]
@@ -1304,28 +1356,30 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "stellar-strkey"
-version = "0.0.9"
+version = "0.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e3aa3ed00e70082cb43febc1c2afa5056b9bb3e348bbb43d0cd0aa88a611144"
+checksum = "ee1832fb50c651ad10f734aaf5d31ca5acdfb197a6ecda64d93fcdb8885af913"
dependencies = [
"crate-git-revision",
"data-encoding",
- "thiserror",
]
[[package]]
name = "stellar-xdr"
-version = "22.1.0"
+version = "23.0.0-rc.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ce69db907e64d1e70a3dce8d4824655d154749426a6132b25395c49136013e4"
+checksum = "632bf15309c2992c059fb499275a706f6afdfd68c690508d5d9bfa96c771477f"
dependencies = [
"arbitrary",
- "base64 0.13.1",
+ "base64",
+ "cfg_eval",
"crate-git-revision",
"escape-bytes",
+ "ethnum",
"hex",
"serde",
"serde_with",
+ "sha2",
"stellar-strkey",
]
diff --git a/contracts/Cargo.toml b/contracts/Cargo.toml
index f58bf6f8..94ea55e9 100644
--- a/contracts/Cargo.toml
+++ b/contracts/Cargo.toml
@@ -1,5 +1,5 @@
[workspace]
-members = ["adapters/*", "aggregator", "deployer", "test-utils"]
+members = ["aggregator", "deployer", "test-utils"]
resolver = "2"
[workspace.package]
@@ -10,8 +10,7 @@ repository = "https://github.com/soroswap/aggregator"
homepage = "https://github.com/soroswap/aggregator"
[workspace.dependencies]
-soroban-sdk = "22.0.7"
-adapter-interface={path="./adapters/interface", package="adapter-interface"}
+soroban-sdk = "23.0.0-rc.2.4"
test-utils = { path = "./test-utils" }
[profile.release]
diff --git a/contracts/Makefile b/contracts/Makefile
index c7ff76e0..8732d9b0 100644
--- a/contracts/Makefile
+++ b/contracts/Makefile
@@ -1,5 +1,5 @@
$MAKEFILES = $(shell find . -maxdepth 3 -type f -name Makefile)
-SUBDIRS = adapters aggregator deployer
+SUBDIRS = aggregator deployer
default: build
all: test
diff --git a/contracts/adapters/Makefile b/contracts/adapters/Makefile
deleted file mode 100644
index c3d01c6d..00000000
--- a/contracts/adapters/Makefile
+++ /dev/null
@@ -1,24 +0,0 @@
-SUBDIRS = $(shell find . -maxdepth 1 -mindepth 1 -type d | grep -v ./interface | xargs echo)
-default: build
-
-all: test
-
-build:
- @for dir in $(SUBDIRS) ; do \
- $(MAKE) -C $$dir build || break; \
- done
-
-test: build
- @for dir in $(SUBDIRS) ; do \
- $(MAKE) -C $$dir test || break; \
- done
-
-fmt:
- @for dir in $(SUBDIRS) ; do \
- $(MAKE) -C $$dir fmt || break; \
- done
-
-clean:
- @for dir in $(SUBDIRS) ; do \
- $(MAKE) -C $$dir clean || break; \
- done
\ No newline at end of file
diff --git a/contracts/adapters/aqua/Cargo.toml b/contracts/adapters/aqua/Cargo.toml
deleted file mode 100644
index d1b1b1cf..00000000
--- a/contracts/adapters/aqua/Cargo.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[package]
-name = "aqua-adapter"
-version = "0.1.0"
-edition = { workspace = true }
-description = "Aqua-Adapter is a smart contract on the Soroban platform, tailored for use with the Soroswap-Aggregator. It facilitates efficient transaction routing through the Aqua protocol."
-homepage = { workspace = true }
-repository = { workspace = true }
-authors = ["esteblock"]
-readme = "README.md"
-keywords = ["no_std", "wasm", "soroswap", "amm", "soroban"]
-publish = true
-
-[lib]
-crate-type = ["cdylib"]
-
-[dependencies]
-soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
diff --git a/contracts/adapters/aqua/Makefile b/contracts/adapters/aqua/Makefile
deleted file mode 100644
index 05060bd6..00000000
--- a/contracts/adapters/aqua/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-default: build
-
-all: test
-
-test: build
- cargo test
-
-build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../../target/wasm32-unknown-unknown/release/aqua_adapter.wasm
- @rm ../../target/wasm32-unknown-unknown/release/aqua_adapter.wasm
-
-fmt:
- cargo fmt --all --check
-
-clean:
- cargo clean
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/event.rs b/contracts/adapters/aqua/src/event.rs
deleted file mode 100644
index 1e522a44..00000000
--- a/contracts/adapters/aqua/src/event.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-//! Definition of the Events used in the contract
-use soroban_sdk::{contracttype, symbol_short, Env, Address, Vec, String};
-
-// INITIALIZED
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct InitializedEvent {
- pub state: bool,
- pub protocol_id: String,
- pub protocol_address: Address
-}
-
-pub(crate) fn initialized(e: &Env, state: bool, protocol_id: String, protocol_address: Address) {
-
- let event: InitializedEvent = InitializedEvent {
- state: state,
- protocol_id,
- protocol_address,
- };
- e.events().publish(("SoroswapAggregatorAquaAdapter", symbol_short!("init")), event);
-}
-
-// SWAP EVENT
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct SwapEvent {
- pub amount_in: i128,
- pub path: Vec
,
- pub to: Address
-}
-
-pub(crate) fn swap(
- e: &Env,
- amount_in: i128,
- path: Vec,
- to: Address
-) {
- let event = SwapEvent {
- amount_in,
- path,
- to,
- };
-
- e.events().publish(("SoroswapAggregatorAquaAdapter", symbol_short!("swap")), event);
-}
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/lib.rs b/contracts/adapters/aqua/src/lib.rs
deleted file mode 100644
index b94689dd..00000000
--- a/contracts/adapters/aqua/src/lib.rs
+++ /dev/null
@@ -1,146 +0,0 @@
-#![no_std]
-use soroban_sdk::{contract, contractimpl, Address, Env, Vec, String, BytesN};
-mod event;
-mod storage;
-mod protocol_interface;
-mod test;
-
-use storage::{
- extend_instance_ttl,
- set_initialized,
- is_initialized,
- set_protocol_id,
- get_protocol_id,
- set_protocol_address,
- get_protocol_address,
-};
-use adapter_interface::{
- AdapterTrait, AdapterError
-};
-use protocol_interface::{
- protocol_swap_exact_tokens_for_tokens,
- protocol_swap_tokens_for_exact_tokens
-};
-
-fn check_nonnegative_amount(amount: i128) -> Result<(), AdapterError> {
- if amount < 0 {
- Err(AdapterError::NegativeNotAllowed)
- } else {
- Ok(())
- }
-}
-
-fn check_initialized(e: &Env) -> Result<(), AdapterError> {
- if is_initialized(e) {
- Ok(())
- } else {
- Err(AdapterError::NotInitialized)
- }
-}
-
-#[contract]
-struct SoroswapAggregatorAquaAdapter;
-
-#[contractimpl]
-impl AdapterTrait for SoroswapAggregatorAquaAdapter {
-
- /// Initializes the contract and sets the Aqua multihop address.
- ///
- /// # Arguments
- ///
- /// * `e` - The contract environment.
- /// * `protocol_id` - The identifier for the protocol.
- /// * `protocol_address` - The address associated with the protocol.
- ///
- /// # Errors
- ///
- /// Returns an error if the contract is already initialized (`AdapterError::AlreadyInitialized`).
- fn initialize(
- e: Env,
- protocol_id: String,
- protocol_address: Address,
- ) -> Result<(), AdapterError> {
- if check_initialized(&e).is_ok() {
- return Err(AdapterError::AlreadyInitialized);
- }
-
- set_protocol_id(&e, protocol_id.clone());
- set_protocol_address(&e, protocol_address.clone());
-
- set_initialized(&e);
- event::initialized(&e, true, protocol_id, protocol_address);
- extend_instance_ttl(&e);
- Ok(())
- }
-
- fn swap_exact_tokens_for_tokens(
- e: Env,
- amount_in: i128,
- amount_out_min: i128,
- path: Vec,
- to: Address,
- _deadline: u64,
- bytes: Option>>,
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- check_nonnegative_amount(amount_in)?;
- check_nonnegative_amount(amount_out_min)?;
-
- let swap_result = protocol_swap_exact_tokens_for_tokens(
- &e,
- &amount_in,
- &amount_out_min,
- &path,
- &to,
- &bytes,
- )?;
-
- event::swap(&e, amount_in, path, to);
- Ok(swap_result)
- }
-
- fn swap_tokens_for_exact_tokens(
- e: Env,
- amount_out: i128,
- amount_in_max: i128,
- path: Vec,
- to: Address,
- _deadline: u64,
- bytes: Option>>,
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- check_nonnegative_amount(amount_out)?;
- check_nonnegative_amount(amount_in_max)?;
-
- let swap_result = protocol_swap_tokens_for_exact_tokens(
- &e,
- &amount_out,
- &amount_in_max,
- &path,
- &to,
- &bytes,
- )?;
-
- event::swap(&e, amount_in_max, path, to);
- Ok(swap_result)
- }
-
- /* *** Read only functions: *** */
- fn get_protocol_id(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_id(e)?)
- }
-
- fn get_protocol_address(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_address(e)?)
- }
-}
diff --git a/contracts/adapters/aqua/src/protocol_interface.rs b/contracts/adapters/aqua/src/protocol_interface.rs
deleted file mode 100644
index 0d37ca1d..00000000
--- a/contracts/adapters/aqua/src/protocol_interface.rs
+++ /dev/null
@@ -1,151 +0,0 @@
-use soroban_sdk::{Env, Address, Vec, token::Client as TokenClient, BytesN, vec};
-use crate::storage::{get_protocol_address};
-use adapter_interface::{AdapterError};
-
-soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
-);
-pub type AquaRouterClient<'a> = Client<'a>;
-
-/*
- This first version of the AquaAdapter, is written just for pools with 2 tokens, so we will build from
- path = (TokenA, TokenB, TokenC, TokenD)
- bytes = (pool_hash_0, pool_hash_1, pool_hash_2)
- where pool_hash_0 = hash of the pool with tokenA and tokenB
- where pool_hash_1 = hash of the pool with tokenB and tokenC
- where pool_hash_2 = hash of the pool with tokenC and tokenD
- where token_out = tokenD
- where token_in = tokenA
- where in_amount = amount_in
- where out_min = amount_out_min
-
- The interface is based on https://github.com/AquaToken/soroban-amm/
-*/
-
-
-fn convert_to_swaps_chain(
- e: &Env,
- path: &Vec,
- bytes: &Option>>,
-) -> Result<
- Vec<(Vec, BytesN<32>, Address)>, // (path, pool_hash, token_out)
- AdapterError
-> {
-
- // We check that bytes is not None
- let pool_hashes_vec = bytes.as_ref().ok_or(AdapterError::MissingPoolHashes)?;
-
- // path should have at least 2 elements. ifnot error WrongMinimumPathLength
- if path.len() < 2 {
- return Err(AdapterError::WrongMinimumPathLength);
- }
- // We check that the length of bytes is equal to the length of path - 1
- if pool_hashes_vec.len() != path.len().checked_sub(1).unwrap() { // unwrap safe as we checked the length of path
- return Err(AdapterError::WrongPoolHashesLength);
- }
-
- let mut swaps_chain = Vec::new(e);
- for i in 0..(path.len() - 1) {
- let token_in = path.get(i).unwrap(); // This should be safe as we checked the length of path
- let token_out = path.get(i + 1).unwrap(); // This should be safe as we checked the length of path
- let pool_hash = pool_hashes_vec.get(i).unwrap(); // This should be safe as we checked the length of pool_hashes_vec
-
- let swap_chain_path = if token_in < token_out {
- vec![&e, token_in.clone(), token_out.clone()]
- } else {
- vec![&e, token_out.clone(), token_in.clone()]
- };
-
- swaps_chain.push_back((swap_chain_path, pool_hash.clone(), token_out.clone()));
- }
-
- Ok(swaps_chain)
-}
-
-pub fn protocol_swap_exact_tokens_for_tokens(
- e: &Env,
- amount_in: &i128,
- amount_out_min: &i128,
- path: &Vec, // (TokenA, TokenB, TokenC, TokenD), being TokenC the token to get
- to: &Address,
- bytes: &Option>>, // (pool_hash_0, pool_hash_1, pool_hash_2)
-) -> Result, AdapterError> {
-
- let aqua_router_address = get_protocol_address(&e)?;
- let aqua_router_client = AquaRouterClient::new(&e, &aqua_router_address);
- let swaps_chain = convert_to_swaps_chain(e, path, bytes)?;
-
- let token_in = path.get(0).expect("Failed to get token in address"); // should be safe as we checked the length of path
- let token_out_address = path.get(path.len().checked_sub(1).unwrap()).expect("Failed to get token out address"); // should be safe as we checked the length of path
-
- // TODO Remove this if we remove the check
- let initial_token_out_balance = TokenClient::new(&e, &token_out_address).balance(&to);
-
- // let final_amount_out = aqua_router_client.swap_chained(
- aqua_router_client.swap_chained(
- &to, // user: Address
- &swaps_chain, // swaps_chain: Vec<(Vec, BytesN<32>, Address)>,
- &token_in, // token_in: Address,
- &(*amount_in as u128), // in_amount: i128,
- &(*amount_out_min as u128), // out_min: i128
- );
-
-
- // Check if the amount of token_out received is greater than the minimum amount expected
- // TODO: Remove this checks if we want to reduce the number of total instructions
- // TODO: Do benchmarking
- // We could get the final_amount_out from the aqua_router_client.swap_chained function
- let final_token_out_balance = TokenClient::new(&e, &token_out_address).balance(&to);
- let final_amount_out = final_token_out_balance.checked_sub(initial_token_out_balance).unwrap();
- if final_amount_out < *amount_out_min {
- // panic
- panic!("Amount of token out received is less than the minimum amount expected");
- }
-
- let mut swap_amounts: Vec = Vec::new(e);
- swap_amounts.push_back(*amount_in);
- swap_amounts.push_back(final_amount_out as i128);
-
- Ok(swap_amounts)
-}
-
-pub fn protocol_swap_tokens_for_exact_tokens(
- e: &Env,
- amount_out: &i128,
- amount_in_max: &i128,
- path: &Vec,
- to: &Address,
- bytes: &Option>>, // (pool_hash_0, pool_hash_1, pool_hash_2)
-) -> Result, AdapterError> {
-
- let aqua_router_address = get_protocol_address(&e)?;
- let aqua_router_client = AquaRouterClient::new(&e, &aqua_router_address);
- let swaps_chain = convert_to_swaps_chain(e, path, bytes)?;
- /*
- fn swap_chained_strict_receive(
- e: Env,
- user: Address,
- swaps_chain: Vec<(Vec, BytesN<32>, Address)>,
- token_in: Address,
- out_amount: u128, // fixed amount of output token to receive
- max_in: u128, // maximum input token amount allowed
- ) -> u128 // final_amount_in
- */
-
-
- let token_in = path.get(0).expect("Failed to get token in address");
-
- let final_amount_in = aqua_router_client.swap_chained_strict_receive(
- &to, // user: Address
- &swaps_chain, // swaps_chain: Vec<(Vec, BytesN<32>, Address)>,
- &token_in, // token_in: Address,
- &(*amount_out as u128), // out_amount: u128,
- &(*amount_in_max as u128), // max_in: u128,
- );
-
- let mut swap_amounts: Vec = Vec::new(e);
- swap_amounts.push_back(final_amount_in as i128);
- swap_amounts.push_back(*amount_out);
-
- Ok(swap_amounts)
-}
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/storage.rs b/contracts/adapters/aqua/src/storage.rs
deleted file mode 100644
index ce448618..00000000
--- a/contracts/adapters/aqua/src/storage.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use soroban_sdk::{contracttype, Env, Address, String};
-use adapter_interface::AdapterError;
-
-#[derive(Clone)]
-#[contracttype]
-
-enum DataKey {
- Initialized,
- ProtocolId,
- ProtocolAddress,
-}
-
-const DAY_IN_LEDGERS: u32 = 17280;
-const INSTANCE_BUMP_AMOUNT: u32 = 30 * DAY_IN_LEDGERS;
-const INSTANCE_LIFETIME_THRESHOLD: u32 = INSTANCE_BUMP_AMOUNT - DAY_IN_LEDGERS;
-
-pub fn extend_instance_ttl(e: &Env) {
- e.storage()
- .instance()
- .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT);
-}
-
-/* INITIALIZED */
-pub fn set_initialized(e: &Env) {
- e.storage().instance().set(&DataKey::Initialized, &true);
-}
-
-pub fn is_initialized(e: &Env) -> bool {
- e.storage().instance().has(&DataKey::Initialized)
-}
-
-
-/* PROTOCOL ID - STRING */
-pub fn set_protocol_id(e: &Env, protocol_id: String) {
- e.storage().instance().set(&DataKey::ProtocolId, &protocol_id);
-}
-
-pub fn get_protocol_id(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolId).ok_or(AdapterError::NotInitialized)
-}
-
-
-/* PROTOCOL ADDRESS */
-pub fn set_protocol_address(e: &Env, address: Address) {
- e.storage().instance().set(&DataKey::ProtocolAddress, &address);
-}
-
-pub fn get_protocol_address(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolAddress).ok_or(AdapterError::NotInitialized)
-}
-
diff --git a/contracts/adapters/aqua/src/test.rs b/contracts/adapters/aqua/src/test.rs
deleted file mode 100644
index 58a440a4..00000000
--- a/contracts/adapters/aqua/src/test.rs
+++ /dev/null
@@ -1,100 +0,0 @@
-#![cfg(test)]
-extern crate std;
-pub mod aqua_setup;
-
-use soroban_sdk::testutils::Address as _;
-
-use soroban_sdk::{
- Env,
- Address,
- BytesN,
- Symbol,
- String,
- Vec,
- Val,
- IntoVal
-};
-use crate::{SoroswapAggregatorAquaAdapter, SoroswapAggregatorAquaAdapterClient};
-use aqua_setup::{AquaTest, TokenClient, AquaRouter};
-
-mod deployer_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
- pub type DeployerClient<'a> = Client<'a>;
-}
-use deployer_contract::DeployerClient;
-
-fn create_deployer<'a>(e: &Env) -> DeployerClient<'a> {
- let deployer_address = &e.register(deployer_contract::WASM, ());
- let deployer = DeployerClient::new(e, deployer_address);
- deployer
-}
-
-// AquaAggregatorAdapter Contract
-fn create_soroswap_aggregator_aqua_adapter<'a>(e: &Env) -> SoroswapAggregatorAquaAdapterClient<'a> {
- SoroswapAggregatorAquaAdapterClient::new(e, &e.register(SoroswapAggregatorAquaAdapter, {}))
-}
-
-pub mod aqua_adapter_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/aqua_adapter.optimized.wasm");
- pub type SoroswapAggregatorAquaAdapterClientFromWasm<'a> = Client<'a>;
-}
-use aqua_adapter_contract::SoroswapAggregatorAquaAdapterClientFromWasm;
-
-pub struct AquaAggregatorAdapterTest<'a> {
- env: Env,
- adapter_client: SoroswapAggregatorAquaAdapterClientFromWasm<'a>,
- adapter_client_not_initialized: SoroswapAggregatorAquaAdapterClient<'a>,
- router: AquaRouter<'a>,
- tokens: [TokenClient<'a>; 4],
- user: Address,
- admin: Address,
- reward_token: TokenClient<'a>,
-}
-
-impl<'a> AquaAggregatorAdapterTest<'a> {
- fn setup() -> Self {
- let test = AquaTest::aqua_setup();
-
- let wasm_hash = test.env.deployer().upload_contract_wasm(aqua_adapter_contract::WASM);
- let deployer_client = create_deployer(&test.env);
-
- let adapter_client_not_initialized = create_soroswap_aggregator_aqua_adapter(&test.env);
- // Deploy contract using deployer, and include an init function to call.
- let salt = BytesN::from_array(&test.env, &[0; 32]);
- let init_fn = Symbol::new(&test.env, &("initialize"));
-
- let protocol_id = String::from_str(&test.env, "aqua");
- let protocol_address = test.router.address.clone();
-
- // Convert the arguments into a Vec
- let init_fn_args: Vec = (protocol_id.clone(), protocol_address.clone()).into_val(&test.env);
-
- test.env.mock_all_auths();
- let (contract_id, _init_result) = deployer_client.deploy(
- &deployer_client.address,
- &wasm_hash,
- &salt,
- &init_fn,
- &init_fn_args,
- );
-
- let adapter_client = aqua_adapter_contract::Client::new(&test.env, &contract_id);
-
- let user = Address::generate(&test.env);
-
- AquaAggregatorAdapterTest {
- env: test.env,
- adapter_client,
- adapter_client_not_initialized,
- router: test.router,
- tokens: test.tokens,
- user,
- admin: test.admin,
- reward_token: test.reward_token,
- }
- }
-}
-
-pub mod initialize;
-pub mod swap_exact_tokens_for_tokens;
-pub mod swap_tokens_for_exact_tokens;
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/test/aqua_setup.rs b/contracts/adapters/aqua/src/test/aqua_setup.rs
deleted file mode 100644
index 889fe6c2..00000000
--- a/contracts/adapters/aqua/src/test/aqua_setup.rs
+++ /dev/null
@@ -1,250 +0,0 @@
-#![cfg(test)]
-extern crate std;
-
-use soroban_sdk::testutils::Address as _;
-use soroban_sdk::{Address, BytesN, Env, Symbol, Vec};
-
-
-/* ************* AQUA FACTORY AND ROUTER IS THE SAME CONTRACT ************* */
-
-#[allow(clippy::too_many_arguments)]
-pub mod router {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
- );
-}
-
-
-pub use router::Client as AquaRouter;
-
-pub fn create_liqpool_router_contract<'a>(e: &Env) -> AquaRouter<'a> {
- AquaRouter::new(e, &e.register(router::WASM, ()))
-}
-
-/* ************* TOKEN ************* */
-
-pub mod test_token {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_token_contract.wasm"
- );
-}
-
-pub fn create_token_contract<'a>(e: &Env, admin: &Address) -> test_token::Client<'a> {
- test_token::Client::new(
- e,
- &e.register_stellar_asset_contract_v2(admin.clone())
- .address(),
- )
-}
-
-
-pub use test_token::Client as TokenClient;
-
-
-pub fn install_token_wasm(env: &Env) -> BytesN<32> {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_token_contract.wasm"
- );
- env.deployer().upload_contract_wasm(WASM)
-}
-
-// pub fn deploy_token_contract<'a>(env: & Env, admin: & Address) -> token_contract::Client<'a> {
-// test_token::Client::new(env, &env.register_stellar_asset_contract(admin.clone()))
-// }
-
-
-/* ************* POOL CONTRACTS ************* */
-
-pub mod standard_pool {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_contract.wasm"
- );
-}
-
-pub fn install_liq_pool_hash(e: &Env) -> BytesN<32> {
- e.deployer().upload_contract_wasm(standard_pool::WASM)
-}
-
-pub mod stableswap_pool {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm"
- );
-}
-
-pub fn install_stableswap_liq_pool_hash(e: &Env) -> BytesN<32> {
- e.deployer().upload_contract_wasm(stableswap_pool::WASM)
-}
-
-mod pool_plane {
- soroban_sdk::contractimport!(
- file =
- "./aqua_contracts/soroban_liquidity_pool_plane_contract.wasm"
- );
-}
-
-pub fn create_plane_contract<'a>(e: &Env) -> pool_plane::Client<'a> {
- pool_plane::Client::new(e, &e.register(pool_plane::WASM, ()))
-}
-
-mod liquidity_calculator {
- soroban_sdk::contractimport!(
- file =
- "./aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm"
- );
-}
-
-pub fn create_liquidity_calculator_contract<'a>(e: &Env) -> liquidity_calculator::Client<'a> {
- liquidity_calculator::Client::new(e, &e.register(liquidity_calculator::WASM, ()))
-}
-
-mod reward_boost_feed {
- soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_locker_feed_contract.wasm"
- );
-}
-
-pub(crate) fn create_reward_boost_feed_contract<'a>(
- e: &Env,
- admin: &Address,
- operations_admin: &Address,
- emergency_admin: &Address,
-) -> reward_boost_feed::Client<'a> {
- reward_boost_feed::Client::new(
- e,
- &e.register(
- reward_boost_feed::WASM,
- reward_boost_feed::Args::__constructor(admin, operations_admin, emergency_admin),
- ),
- )
-}
-
-pub struct AquaTest<'a> {
- pub env: Env,
-
- pub admin: Address,
-
- pub tokens: [test_token::Client<'a>; 4],
- pub reward_token: test_token::Client<'a>,
- // pub reward_boost_token: test_token::Client<'a>,
- // pub reward_boost_feed: reward_boost_feed::Client<'a>,
-
- pub router: AquaRouter<'a>,
-
- // pub emergency_admin: Address,
- // pub rewards_admin: Address,
- // pub operations_admin: Address,
- // pub pause_admin: Address,
- // pub emergency_pause_admin: Address,
-}
-
-impl<'a> AquaTest<'a> {
- pub fn aqua_setup() -> Self {
- let env = Env::default();
- env.mock_all_auths();
- env.cost_estimate().budget().reset_unlimited();
-
- let admin = Address::generate(&env);
-
- // let user = Address::generate(&env);
- // let initial_admin_balance = 10_000_000i128;
-
- let mut tokens = std::vec![
- create_token_contract(&env, &admin).address,
- create_token_contract(&env, &admin).address,
- create_token_contract(&env, &admin).address,
- create_token_contract(&env, &admin).address,
- ];
- tokens.sort();
- let tokens = [
- test_token::Client::new(&env, &tokens[0]),
- test_token::Client::new(&env, &tokens[1]),
- test_token::Client::new(&env, &tokens[2]),
- test_token::Client::new(&env, &tokens[3]),
- ];
-
- let reward_admin = Address::generate(&env);
- let admin = Address::generate(&env);
- let payment_for_creation_address = Address::generate(&env);
-
- let reward_token = create_token_contract(&env, &reward_admin);
- let reward_boost_token = create_token_contract(&env, &reward_admin);
-
- let pool_hash = install_liq_pool_hash(&env);
- let token_hash = install_token_wasm(&env);
- let router = create_liqpool_router_contract(&env);
-
- router.init_admin(&admin);
-
- let rewards_admin = soroban_sdk::Address::generate(&env);
- let operations_admin = soroban_sdk::Address::generate(&env);
- let pause_admin = soroban_sdk::Address::generate(&env);
- let emergency_pause_admin = soroban_sdk::Address::generate(&env);
- let reward_boost_feed = create_reward_boost_feed_contract(
- &env,
- &admin,
- &operations_admin,
- &emergency_pause_admin,
- );
- router.set_privileged_addrs(
- &admin,
- &rewards_admin,
- &operations_admin,
- &pause_admin,
- &Vec::from_array(&env, [emergency_pause_admin.clone()]),
- );
-
- router.set_pool_hash(&admin, &pool_hash);
- router.set_stableswap_pool_hash(&admin, &install_stableswap_liq_pool_hash(&env));
- router.set_token_hash(&admin, &token_hash);
- router.set_reward_token(&admin, &reward_token.address);
- router.configure_init_pool_payment(
- &admin,
- &reward_token.address,
- &1_0000000,
- &1_0000000,
- &payment_for_creation_address,
- );
- router.set_reward_boost_config(
- &admin,
- &reward_boost_token.address,
- &reward_boost_feed.address,
- );
-
- let emergency_admin = Address::generate(&env);
- router.commit_transfer_ownership(
- &admin,
- &Symbol::new(&env, "EmergencyAdmin"),
- &emergency_admin,
- );
- router.apply_transfer_ownership(&admin, &Symbol::new(&env, "EmergencyAdmin"));
-
- let plane = create_plane_contract(&env);
- router.set_pools_plane(&admin, &plane.address);
-
- let liquidity_calculator = create_liquidity_calculator_contract(&env);
- liquidity_calculator.init_admin(&admin);
- liquidity_calculator.set_pools_plane(&admin, &plane.address);
- router.set_liquidity_calculator(&admin, &liquidity_calculator.address);
-
-
- // assert_eq!(token_0.balance(&user), 1000i128);
- // assert_eq!(token_1.balance(&user), 0i128);
- // assert_eq!(token_2.balance(&user), 0i128);
- // assert_eq!(token_3.balance(&user), 0i128);
-
- AquaTest {
- env,
- admin,
- tokens,
- reward_token,
- router,
- // emergency_admin,
- // rewards_admin,
- // operations_admin,
- // pause_admin,
- // emergency_pause_admin,
- // reward_boost_token,
- // reward_boost_feed,
- }
- }
-}
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/test/initialize.rs b/contracts/adapters/aqua/src/test/initialize.rs
deleted file mode 100644
index 2562db2b..00000000
--- a/contracts/adapters/aqua/src/test/initialize.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-use soroban_sdk::String;
-use crate::test::AquaAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-use super::aqua_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-#[test]
-fn test_initialize_and_get_values() {
- let test = AquaAggregatorAdapterTest::setup();
-
- test.adapter_client_not_initialized.initialize(
- &String::from_str(&test.env, "aqua"),
- &test.router.address);
-
- let protocol_id = test.adapter_client_not_initialized.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "aqua"));
-
- let protocol_address = test.adapter_client_not_initialized.get_protocol_address();
- assert_eq!(protocol_address, test.router.address);
-}
-
-#[test]
-fn test_get_values() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let protocol_id = test.adapter_client.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "aqua"));
-
- let protocol_address = test.adapter_client.get_protocol_address();
- assert_eq!(protocol_address, test.router.address);
-}
-
-// test initialize twice
-#[test]
-fn test_initialize_twice() {
- let test = AquaAggregatorAdapterTest::setup();
-
- test.adapter_client_not_initialized.initialize(
- &String::from_str(&test.env, "aqua"),
- &test.router.address);
-
- let result = test.adapter_client_not_initialized.try_initialize(
- &String::from_str(&test.env, "aqua"),
- &test.router.address);
-
- assert_eq!(result,Err(Ok(AdapterError::AlreadyInitialized)));
-}
-
-#[test]
-fn test_initialize_twice_deployer() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let result = test.adapter_client.try_initialize(
- &String::from_str(&test.env, "aqua"),
- &test.router.address);
-
- assert_eq!(result,Err(Ok(AdapterErrorDeployer::AlreadyInitialized)));
-}
-
-// test get protocol id not initialized
-#[test]
-fn test_get_protocol_id_not_initialized() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let result = test.adapter_client_not_initialized.try_get_protocol_id();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
-
-// test get protocol address not initialized
-#[test]
-fn test_get_protocol_address_not_initialized() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let result = test.adapter_client_not_initialized.try_get_protocol_address();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
diff --git a/contracts/adapters/aqua/src/test/swap_exact_tokens_for_tokens.rs b/contracts/adapters/aqua/src/test/swap_exact_tokens_for_tokens.rs
deleted file mode 100644
index fec4b23d..00000000
--- a/contracts/adapters/aqua/src/test/swap_exact_tokens_for_tokens.rs
+++ /dev/null
@@ -1,487 +0,0 @@
-use soroban_sdk::testutils::{
- Address as _,
-};
-use soroban_sdk::{
- Address,
- vec, Vec, BytesN, Symbol, token::TokenClient, U256, FromVal};
-use crate::test::{AquaAggregatorAdapterTest, };
-use adapter_interface::AdapterError;
-use super::aqua_adapter_contract::AdapterError as AdapterErrorDeployer;
-use crate::test::aqua_setup::create_token_contract;
-
-#[test]
-fn swap_exact_tokens_for_tokens_not_initialized() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client_not_initialized.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline,
- &None,
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_amount_in_negative() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &-1, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_amount_out_min_negative() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &-1, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_missing_hash() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::MissingPoolHashes))
- );
-}
-
-
-#[test]
-fn try_swap_exact_tokens_for_tokens_invalid_path_lenght() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = vec![&test.env, test.tokens[0].address.clone()];
- // vec with dummy bytes
- let bytes_vec: Vec> = vec![&test.env, BytesN::from_array(&test.env, &[0; 32])];
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &Some(bytes_vec),
-
- );
-
- //WrongMinimumPathLength
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::WrongMinimumPathLength))
- );
-}
-
-#[test]
-fn try_swap_exact_tokens_for_tokens_invalid_bytes_lenght() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = vec![&test.env,
- test.tokens[0].address.clone(),
- test.tokens[1].address.clone(),
- test.tokens[2].address.clone()];
- // vec with dummy bytes
- let bytes_vec: Vec> = vec![&test.env, BytesN::from_array(&test.env, &[0; 32])];
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &Some(bytes_vec),
-
- );
-
- //WrongMinimumPathLength
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::WrongPoolHashesLength))
- );
-}
-
-#[test]
-// panic with error PoolNotFound = 404,
-#[should_panic(expected = "Error(Contract, #404)")]
-fn try_swap_exact_tokens_for_tokens_pool_not_found() {
- let test = AquaAggregatorAdapterTest::setup();
-
-
- let path: Vec = vec![&test.env,
- test.tokens[0].address.clone(),
- test.tokens[1].address.clone()];
-
- // vec with dummy bytes
- let bytes_vec: Vec> = vec![&test.env, BytesN::from_array(&test.env, &[0; 32])];
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_client.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline,
- &Some(bytes_vec),
- );
-}
-
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_constant_product_pool_1_hop() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let router = test.router;
- let [token1, token2, _, _] = test.tokens;
-
- let tokens = Vec::from_array(&test.env, [token1.address.clone(), token2.address.clone()]);
- let user1 = Address::generate(&test.env);
- test.reward_token.mint(&user1, &10_0000000);
-
- let (pool_hash, pool_address) = router.init_standard_pool(&user1, &tokens, &30);
- assert_eq!(
- router.pool_type(&tokens, &pool_hash),
- Symbol::new(&test.env, "constant_product")
- );
- let pool_info = router.get_info(&tokens, &pool_hash);
- assert_eq!(
- Symbol::from_val(&test.env, &pool_info.get(Symbol::new(&test.env, "pool_type")).unwrap()),
- Symbol::new(&test.env, "constant_product")
- );
-
- let token_share = TokenClient::new(&test.env, &router.share_id(&tokens, &pool_hash));
-
- token1.mint(&user1, &1000);
- assert_eq!(token1.balance(&user1), 1000);
-
- token2.mint(&user1, &1000);
- assert_eq!(token2.balance(&user1), 1000);
-
- assert_eq!(token_share.balance(&user1), 0);
-
- let desired_amounts = Vec::from_array(&test.env, [100, 100]);
- router.deposit(&user1, &tokens, &pool_hash, &desired_amounts, &0);
- assert_eq!(router.get_total_liquidity(&tokens), U256::from_u32(&test.env, 2));
-
- assert_eq!(token_share.balance(&user1), 100);
- assert_eq!(router.get_total_shares(&tokens, &pool_hash), 100);
- assert_eq!(token_share.balance(&pool_address), 0);
- assert_eq!(token1.balance(&user1), 900);
- assert_eq!(token1.balance(&pool_address), 100);
- assert_eq!(token2.balance(&user1), 900);
- assert_eq!(token2.balance(&pool_address), 100);
-
- assert_eq!(
- router.get_reserves(&tokens, &pool_hash),
- Vec::from_array(&test.env, [100, 100])
- );
-
- assert_eq!(
- router.estimate_swap(&tokens, &token1.address, &token2.address, &pool_hash, &97),
- 48
- );
-
- // Here we will swap using the adapter instead of directly using the pool:
- // assert_eq!(
- // router.swap(
- // &user1,
- // &tokens,
- // &token1.address,
- // &token2.address,
- // &pool_hash,
- // &97_u128, // amount_in
- // &48_u128, // amount_out_min
- // ),
- // 48
- // );
-
- let path: Vec = vec![&test.env,
- token1.address.clone(),
- token2.address.clone()];
-
- // vec pool hash
- let bytes_vec: Vec> = vec![&test.env, pool_hash.clone()];
-
- let executed_amounts = test.adapter_client.swap_exact_tokens_for_tokens(
- &97, // amount_in
- &48, // amount_out_min
- &path, // path
- &user1, // to
- &0, // deadline,
- &Some(bytes_vec),
- );
-
-
- assert_eq!(token1.balance(&user1), 803);
- assert_eq!(token1.balance(&pool_address), 197);
- assert_eq!(token2.balance(&user1), 948);
- assert_eq!(token2.balance(&pool_address), 52);
- assert_eq!(
- router.get_reserves(&tokens, &pool_hash),
- Vec::from_array(&test.env, [197, 52])
- );
-
-
- assert_eq!(executed_amounts.get(0).unwrap(), 97);
- assert_eq!(executed_amounts.get(1).unwrap(), 48);
-}
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_constant_product_pool_2_hops() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let router = test.router;
- let admin = test.admin;
- let [token1, token2, token3, _] = test.tokens;
- let reward_token = test.reward_token;
-
- let user1 = Address::generate(&test.env);
- reward_token.mint(&user1, &10_0000000);
- test.env.mock_auths(&[]);
-
- let tokens1 = Vec::from_array(&test.env, [token1.address.clone(), token2.address.clone()]);
- let tokens2 = Vec::from_array(&test.env, [token2.address.clone(), token3.address.clone()]);
-
- let swapper = Address::generate(&test.env);
-
- router.mock_all_auths().configure_init_pool_payment(
- &admin,
- &create_token_contract(&test.env, &admin).address,
- &0,
- &0,
- &router.address,
- );
-
- let (pool_index1, _pool_address1) = router
- .mock_all_auths()
- .init_standard_pool(&swapper, &tokens1, &30);
- let (pool_index2, _pool_address2) = router
- .mock_all_auths()
- .init_standard_pool(&swapper, &tokens2, &30);
- token1.mock_all_auths().mint(&admin, &10000);
- token2.mock_all_auths().mint(&admin, &20000);
- token3.mock_all_auths().mint(&admin, &10000);
- router.mock_all_auths().deposit(
- &admin,
- &tokens1,
- &pool_index1,
- &Vec::from_array(&test.env, [10000, 10000]),
- &0,
- );
- router.mock_all_auths().deposit(
- &admin,
- &tokens2,
- &pool_index2,
- &Vec::from_array(&test.env, [10000, 10000]),
- &0,
- );
-
- token1.mock_all_auths().mint(&swapper, &1000);
-
-
-
- assert_eq!(token1.balance(&swapper), 1000);
- assert_eq!(token2.balance(&swapper), 0);
- assert_eq!(token3.balance(&swapper), 0);
- assert_eq!(token1.balance(&router.address), 0);
- assert_eq!(token2.balance(&router.address), 0);
- assert_eq!(token3.balance(&router.address), 0);
-
- // swapping token 1 to 3 through combination of 2 pools as we don't have pool (1, 3)
- // Here we will swap using the adapter instead of directly using the pool:
-
- // let swap_root_args = vec![
- // &test.env,
- // swapper.clone().to_val(),
- // vec![
- // &test.env,
- // (tokens1.clone(), pool_index1.clone(), token2.address.clone()),
- // (tokens2.clone(), pool_index2.clone(), token3.address.clone()),
- // ]
- // .into_val(&test.env),
- // token1.address.clone().clone().to_val(),
- // 100_u128.into_val(&test.env),
- // 96_u128.into_val(&test.env),
- // ];
-
-
-
-
-
- let path: Vec = vec![&test.env,
- token1.address.clone(),
- token2.address.clone(),
- token3.address.clone()];
-
- // vec pool hash
- let bytes_vec: Vec> = vec![&test.env,
- pool_index1.clone(),
- pool_index2.clone()];
-
-
- let executed_amounts = test.adapter_client.mock_all_auths().swap_exact_tokens_for_tokens(
- &100, // amount_in
- &96, // amount_out_min
- &path, // path
- &swapper, // to
- &0, // deadline,
- &Some(bytes_vec.clone()),
- );
- // // Build the same call as above with mock auth
- // let swap_root_args = vec![
- // &test.env,
- // 100_i128.into_val(&test.env),
- // 96_i128.into_val(&test.env),
- // path.to_val(),
- // swapper.clone().to_val(),
- // 0_i128.into_val(&test.env),
- // bytes_vec.clone().into_val(&test.env),
-
- // ];
-
- // let swap_chained_args = vec![
- // &test.env,
- // swapper.clone().to_val(),
- // vec![
- // &test.env,
- // (tokens1.clone(), pool_index1.clone(), token2.address.clone()),
- // (tokens2.clone(), pool_index2.clone(), token3.address.clone()),
- // ]
- // .into_val(&test.env),
- // token1.address.clone().clone().to_val(),
- // 100_u128.into_val(&test.env),
- // 96_u128.into_val(&test.env),
- // ];
-
-
- // assert_eq!(
- // test.adapter_client
- // .mock_auths(&[MockAuth {
- // address: &swapper,
- // invoke: &MockAuthInvoke {
- // contract: &test.adapter_client.address,
- // fn_name: "swap_exact_tokens_for_tokens",
- // args: swap_root_args.into_val(&test.env),
- // sub_invokes: &[MockAuthInvoke {
- // contract: &router.address,
- // fn_name: "swap_chained",
- // args: swap_chained_args.into_val(&test.env),
- // sub_invokes: &[MockAuthInvoke {
- // contract: &token1.address.clone(),
- // fn_name: "transfer",
- // args: Vec::from_array(
- // &test.env,
- // [
- // swapper.to_val(),
- // router.address.to_val(),
- // 100_i128.into_val(&test.env),
- // ]
- // )
- // .into_val(&test.env),
- // sub_invokes: &[],
- // }],
- // }],
- // },
- // }])
- // .swap_exact_tokens_for_tokens(
- // &100, // amount_in
- // &96, // amount_out_min
- // &path, // path
- // &swapper.clone(), // to
- // &0, // deadline,
- // &Some(bytes_vec),
- // ),
- // vec![&test.env, 96, 0]
- // );
- // assert_eq!(
- // e.auths(),
- // std::vec![(
- // swapper.clone(),
- // AuthorizedInvocation {
- // function: AuthorizedFunction::Contract((
- // router.address.clone(),
- // Symbol::new(&e, "swap_chained"),
- // swap_root_args.into_val(&e)
- // )),
- // sub_invocations: std::vec![AuthorizedInvocation {
- // function: AuthorizedFunction::Contract((
- // token1.address.clone(),
- // Symbol::new(&e, "transfer"),
- // Vec::from_array(
- // &e,
- // [
- // swapper.to_val(),
- // router.address.to_val(),
- // 100_i128.into_val(&e),
- // ]
- // ),
- // )),
- // sub_invocations: std::vec![],
- // },],
- // }
- // ),]
- // );
-
-
-
- assert_eq!(token1.balance(&swapper), 900);
- assert_eq!(token2.balance(&swapper), 0);
- assert_eq!(token3.balance(&swapper), 96);
- assert_eq!(token1.balance(&router.address), 0);
- assert_eq!(token2.balance(&router.address), 0);
- assert_eq!(token3.balance(&router.address), 0);
-
-
- assert_eq!(executed_amounts.get(0).unwrap(), 100);
- assert_eq!(executed_amounts.get(1).unwrap(), 96);
-}
\ No newline at end of file
diff --git a/contracts/adapters/aqua/src/test/swap_tokens_for_exact_tokens.rs b/contracts/adapters/aqua/src/test/swap_tokens_for_exact_tokens.rs
deleted file mode 100644
index 7916b5fe..00000000
--- a/contracts/adapters/aqua/src/test/swap_tokens_for_exact_tokens.rs
+++ /dev/null
@@ -1,334 +0,0 @@
-use soroban_sdk::testutils::{
- Address as _,
-};
-use soroban_sdk::{
- Address,
- vec, Vec, BytesN, Symbol, token::TokenClient, U256, FromVal};
-use crate::test::{AquaAggregatorAdapterTest, };
-use adapter_interface::AdapterError;
-use super::aqua_adapter_contract::AdapterError as AdapterErrorDeployer;
-use crate::test::aqua_setup::create_token_contract;
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_not_initialized() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client_not_initialized.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_out_negative() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &-1, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_in_max_negative() {
- let test = AquaAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &-1, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None,
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_missing_hash() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None, // bytes
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::MissingPoolHashes))
- );
-}
-
-
-#[test]
-fn try_swap_tokens_for_exact_tokens_invalid_path_lenght() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = vec![&test.env, test.tokens[0].address.clone()];
- // vec with dummy bytes
- let bytes_vec: Vec> = vec![&test.env, BytesN::from_array(&test.env, &[0; 32])];
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &Some(bytes_vec),
-
- );
-
- //WrongMinimumPathLength
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::WrongMinimumPathLength))
- );
-}
-
-
-#[test]
-// panic with error PoolNotFound = 404,
-#[should_panic(expected = "Error(Contract, #404)")]
-fn try_swap_tokens_for_exact_tokens_pool_not_found() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let path: Vec = vec![&test.env,
- test.tokens[0].address.clone(),
- test.tokens[1].address.clone()];
-
- // vec with dummy bytes
- let bytes_vec: Vec> = vec![&test.env, BytesN::from_array(&test.env, &[0; 32])];
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_client.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline,
- &Some(bytes_vec),
- );
-}
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_constant_product_pool_1_hop() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let router = test.router;
- let [token1, token2, _, _] = test.tokens;
-
- let tokens = Vec::from_array(&test.env, [token1.address.clone(), token2.address.clone()]);
- let user1 = Address::generate(&test.env);
- test.reward_token.mint(&user1, &10_0000000);
-
- let (pool_hash, pool_address) = router.init_standard_pool(&user1, &tokens, &30);
- assert_eq!(
- router.pool_type(&tokens, &pool_hash),
- Symbol::new(&test.env, "constant_product")
- );
- let pool_info = router.get_info(&tokens, &pool_hash);
- assert_eq!(
- Symbol::from_val(&test.env, &pool_info.get(Symbol::new(&test.env, "pool_type")).unwrap()),
- Symbol::new(&test.env, "constant_product")
- );
-
- let token_share = TokenClient::new(&test.env, &router.share_id(&tokens, &pool_hash));
-
- token1.mint(&user1, &1000);
- assert_eq!(token1.balance(&user1), 1000);
-
- token2.mint(&user1, &1000);
- assert_eq!(token2.balance(&user1), 1000);
-
- assert_eq!(token_share.balance(&user1), 0);
-
- let desired_amounts = Vec::from_array(&test.env, [100, 100]);
- router.deposit(&user1, &tokens, &pool_hash, &desired_amounts, &0);
- assert_eq!(router.get_total_liquidity(&tokens), U256::from_u32(&test.env, 2));
-
- assert_eq!(token_share.balance(&user1), 100);
- assert_eq!(router.get_total_shares(&tokens, &pool_hash), 100);
- assert_eq!(token_share.balance(&pool_address), 0);
- assert_eq!(token1.balance(&user1), 900);
- assert_eq!(token1.balance(&pool_address), 100);
- assert_eq!(token2.balance(&user1), 900);
- assert_eq!(token2.balance(&pool_address), 100);
-
- assert_eq!(
- router.get_reserves(&tokens, &pool_hash),
- Vec::from_array(&test.env, [100, 100])
- );
-
- assert_eq!(
- router.estimate_swap(&tokens, &token1.address, &token2.address, &pool_hash, &97),
- 48
- );
-
-
- let path: Vec = vec![&test.env,
- token1.address.clone(),
- token2.address.clone()];
-
- // vec pool hash
- let bytes_vec: Vec> = vec![&test.env, pool_hash.clone()];
- // in 97, our 48
-
- let executed_amounts = test.adapter_client.swap_tokens_for_exact_tokens(
- &48, // amount_out
- &98, // amount_in_max
- &path, // path
- &user1, // to
- &0, // deadline,
- &Some(bytes_vec),
- );
-
- // error OutMinNotSatisfied = 2006,
-
- assert_eq!(token1.balance(&user1), 803);
- assert_eq!(token1.balance(&pool_address), 197);
- assert_eq!(token2.balance(&user1), 948);
- assert_eq!(token2.balance(&pool_address), 52);
- assert_eq!(
- router.get_reserves(&tokens, &pool_hash),
- Vec::from_array(&test.env, [197, 52])
- );
-
-
- assert_eq!(executed_amounts.get(0).unwrap(), 97);
- assert_eq!(executed_amounts.get(1).unwrap(), 48);
-}
-
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_constant_product_pool_2_hops() {
- let test = AquaAggregatorAdapterTest::setup();
-
- let router = test.router;
- let admin = test.admin;
- let [token1, token2, token3, _] = test.tokens;
- let reward_token = test.reward_token;
-
- let user1 = Address::generate(&test.env);
- reward_token.mint(&user1, &10_0000000);
- test.env.mock_auths(&[]);
-
- let tokens1 = Vec::from_array(&test.env, [token1.address.clone(), token2.address.clone()]);
- let tokens2 = Vec::from_array(&test.env, [token2.address.clone(), token3.address.clone()]);
-
- let swapper = Address::generate(&test.env);
-
- router.mock_all_auths().configure_init_pool_payment(
- &admin,
- &create_token_contract(&test.env, &admin).address,
- &0,
- &0,
- &router.address,
- );
-
- let (pool_index1, _pool_address1) = router
- .mock_all_auths()
- .init_standard_pool(&swapper, &tokens1, &30);
- let (pool_index2, _pool_address2) = router
- .mock_all_auths()
- .init_standard_pool(&swapper, &tokens2, &30);
- token1.mock_all_auths().mint(&admin, &10000);
- token2.mock_all_auths().mint(&admin, &20000);
- token3.mock_all_auths().mint(&admin, &10000);
- router.mock_all_auths().deposit(
- &admin,
- &tokens1,
- &pool_index1,
- &Vec::from_array(&test.env, [10000, 10000]),
- &0,
- );
- router.mock_all_auths().deposit(
- &admin,
- &tokens2,
- &pool_index2,
- &Vec::from_array(&test.env, [10000, 10000]),
- &0,
- );
-
- token1.mock_all_auths().mint(&swapper, &1000);
-
-
-
- assert_eq!(token1.balance(&swapper), 1000);
- assert_eq!(token2.balance(&swapper), 0);
- assert_eq!(token3.balance(&swapper), 0);
- assert_eq!(token1.balance(&router.address), 0);
- assert_eq!(token2.balance(&router.address), 0);
- assert_eq!(token3.balance(&router.address), 0);
-
-
- let path: Vec = vec![&test.env,
- token1.address.clone(),
- token2.address.clone(),
- token3.address.clone()];
-
- // vec pool hash
- let bytes_vec: Vec> = vec![&test.env,
- pool_index1.clone(),
- pool_index2.clone()];
-
-
- let executed_amounts = test.adapter_client.mock_all_auths().swap_tokens_for_exact_tokens(
- &96, // amount_out
- &100, // amount_in_max
- &path, // path
- &swapper, // to
- &0, // deadline,
- &Some(bytes_vec.clone()),
- );
-
-
-
- assert_eq!(token1.balance(&swapper), 900);
- assert_eq!(token2.balance(&swapper), 0);
- assert_eq!(token3.balance(&swapper), 96);
- assert_eq!(token1.balance(&router.address), 0);
- assert_eq!(token2.balance(&router.address), 0);
- assert_eq!(token3.balance(&router.address), 0);
-
-
- assert_eq!(executed_amounts.get(0).unwrap(), 100);
- assert_eq!(executed_amounts.get(1).unwrap(), 96);
-}
diff --git a/contracts/adapters/comet/Cargo.toml b/contracts/adapters/comet/Cargo.toml
deleted file mode 100644
index 3b4e2453..00000000
--- a/contracts/adapters/comet/Cargo.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[package]
-name = "comet-adapter"
-version = "0.1.0"
-edition = { workspace = true }
-description = "Comet-Adapter is a smart contract on the Soroban platform, tailored for use with the Soroswap-Aggregator. It facilitates efficient transaction routing through the Comet protocol."
-homepage = { workspace = true }
-repository = { workspace = true }
-authors = ["rahimklaber "]
-readme = "README.md"
-keywords = ["no_std", "wasm", "soroswap", "amm", "soroban"]
-publish = true
-
-[lib]
-crate-type = ["cdylib"]
-
-[dependencies]
-soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
\ No newline at end of file
diff --git a/contracts/adapters/comet/Makefile b/contracts/adapters/comet/Makefile
deleted file mode 100644
index dc20fa24..00000000
--- a/contracts/adapters/comet/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-default: build
-
-all: test
-
-test: build
- cargo test
-
-build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../../target/wasm32-unknown-unknown/release/comet_adapter.wasm
- @rm ../../target/wasm32-unknown-unknown/release/comet_adapter.wasm
-
-fmt:
- cargo fmt --all --check
-
-clean:
- cargo clean
\ No newline at end of file
diff --git a/contracts/adapters/comet/src/event.rs b/contracts/adapters/comet/src/event.rs
deleted file mode 100644
index bd5f10bc..00000000
--- a/contracts/adapters/comet/src/event.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-//! Definition of the Events used in the contract
-use soroban_sdk::{contracttype, symbol_short, Env, Address, Vec, String};
-
-// INITIALIZED
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct InitializedEvent {
- pub state: bool,
- pub protocol_id: String,
- pub protocol_address: Address
-}
-
-pub(crate) fn initialized(e: &Env, state: bool, protocol_id: String, protocol_address: Address) {
-
- let event: InitializedEvent = InitializedEvent {
- state: state,
- protocol_id,
- protocol_address,
- };
- e.events().publish(("SoroswapAggregatorAdapter", symbol_short!("init")), event);
-}
-
-// SWAP EVENT
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct SwapEvent {
- pub amount_in: i128,
- pub path: Vec,
- pub to: Address
-}
-
-pub(crate) fn swap(
- e: &Env,
- amount_in: i128,
- path: Vec,
- to: Address
-) {
- let event = SwapEvent {
- amount_in,
- path,
- to,
- };
-
- e.events().publish(("SoroswapAggregatorAdapter", symbol_short!("swap")), event);
-}
-
-// TODO IMPROVE EVENTS
\ No newline at end of file
diff --git a/contracts/adapters/comet/src/lib.rs b/contracts/adapters/comet/src/lib.rs
deleted file mode 100644
index fcacb81f..00000000
--- a/contracts/adapters/comet/src/lib.rs
+++ /dev/null
@@ -1,125 +0,0 @@
-#![no_std]
-use soroban_sdk::{contract, contractimpl, Address, BytesN, Env, String, Vec};
-
-mod event;
-mod storage;
-mod protocol_interface;
-mod test;
-
-use storage::{
- extend_instance_ttl,
- set_initialized,
- is_initialized,
- set_protocol_id,
- get_protocol_id,
- set_protocol_address,
- get_protocol_address,
-};
-use adapter_interface::{AdapterTrait, AdapterError};
-use protocol_interface::{protocol_swap_exact_tokens_for_tokens,
- protocol_swap_tokens_for_exact_tokens};
-
-fn check_initialized(e: &Env) -> Result<(), AdapterError> {
- if is_initialized(e) {
- Ok(())
- } else {
- Err(AdapterError::NotInitialized)
- }
-}
-
-fn check_deadline(e: &Env, deadline: u64) -> Result<(), AdapterError> {
- if e.ledger().timestamp() >= deadline{
- Err(AdapterError::DeadlineExpired)
- }else{
- Ok(())
- }
-}
-
-#[contract]
-struct CometAggregatorAdapter;
-
-#[contractimpl]
-impl AdapterTrait for CometAggregatorAdapter {
- fn initialize(
- e: Env,
- protocol_id: String,
- protocol_address: Address,
- ) -> Result<(), AdapterError> {
- if check_initialized(&e).is_ok() {
- return Err(AdapterError::AlreadyInitialized);
- }
-
- set_protocol_id(&e, protocol_id.clone());
- set_protocol_address(&e, protocol_address.clone());
-
- set_initialized(&e);
- event::initialized(&e, true, protocol_id, protocol_address);
- extend_instance_ttl(&e);
- Ok(())
- }
-
- fn swap_exact_tokens_for_tokens(
- e: Env,
- amount_in: i128,
- amount_out_min: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- check_deadline(&e, deadline)?;
- to.require_auth();
-
- let swap_result = protocol_swap_exact_tokens_for_tokens(
- &e,
- &amount_in,
- &amount_out_min,
- &path,
- &to,
- )?;
-
- event::swap(&e, amount_in, path, to);
- Ok(swap_result)
- }
-
- fn swap_tokens_for_exact_tokens(
- e: Env,
- amount_out: i128,
- amount_in_max: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- check_deadline(&e, deadline)?;
- to.require_auth();
-
- let swap_result = protocol_swap_tokens_for_exact_tokens(
- &e,
- &amount_out,
- &amount_in_max,
- &path,
- &to,
- )?;
-
- event::swap(&e, amount_in_max, path, to);
- Ok(swap_result)
- }
-
- /* *** Read only functions: *** */
- fn get_protocol_id(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_id(e)?)
- }
-
- fn get_protocol_address(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_address(e)?)
- }
-}
diff --git a/contracts/adapters/comet/src/protocol_interface.rs b/contracts/adapters/comet/src/protocol_interface.rs
deleted file mode 100644
index 0272ddce..00000000
--- a/contracts/adapters/comet/src/protocol_interface.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-use soroban_sdk::{vec, Address, Env, Vec};
-use crate::storage::get_protocol_address;
-use adapter_interface::AdapterError;
-
-soroban_sdk::contractimport!(
- file = "./comet_contracts/comet_pool.wasm"
-);
-pub type CometPoolClient<'a> = Client<'a>;
-
-pub fn protocol_swap_exact_tokens_for_tokens(
- e: &Env,
- amount_in: &i128,
- amount_out_min: &i128,
- path: &Vec,
- to: &Address,
-) -> Result, AdapterError> {
-
- let comet_pool_address = get_protocol_address(&e)?;
- let comet_client = CometPoolClient::new(&e, &comet_pool_address);
-
- let (amount_out, _) = comet_client.swap_exact_amount_in(
- &path.get(0).unwrap(),
- amount_in,
- &path.get(1).unwrap(),
- amount_out_min,
- &i128::MAX,
- to
- );
-
- Ok(vec![e, *amount_in, amount_out])
-}
-
-pub fn protocol_swap_tokens_for_exact_tokens(
- e: &Env,
- amount_out: &i128,
- amount_in_max: &i128,
- path: &Vec,
- to: &Address,
-) -> Result, AdapterError> {
-
- let comet_pool_address = get_protocol_address(&e)?;
- let comet_client = CometPoolClient::new(&e, &comet_pool_address);
-
- let (amount_in, _) = comet_client.swap_exact_amount_out(
- &path.get(0).unwrap(),
- amount_in_max,
- &path.get(1).unwrap(),
- amount_out,
- &i128::MAX,
- to
- );
-
- Ok(vec![e, amount_in, *amount_out])
-}
diff --git a/contracts/adapters/comet/src/storage.rs b/contracts/adapters/comet/src/storage.rs
deleted file mode 100644
index dee8a44a..00000000
--- a/contracts/adapters/comet/src/storage.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use soroban_sdk::{contracttype, Env, Address, String};
-use adapter_interface::AdapterError;
-
-#[derive(Clone)]
-#[contracttype]
-
-enum DataKey {
- Initialized,
- ProtocolId,
- ProtocolAddress,
-}
-
-const DAY_IN_LEDGERS: u32 = 17280;
-const INSTANCE_BUMP_AMOUNT: u32 = 60 * DAY_IN_LEDGERS;
-const INSTANCE_LIFETIME_THRESHOLD: u32 = INSTANCE_BUMP_AMOUNT - DAY_IN_LEDGERS;
-
-pub fn extend_instance_ttl(e: &Env) {
- e.storage()
- .instance()
- .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT);
-}
-
-/* INITIALIZED */
-pub fn set_initialized(e: &Env) {
- e.storage().instance().set(&DataKey::Initialized, &true);
-}
-
-pub fn is_initialized(e: &Env) -> bool {
- e.storage().instance().has(&DataKey::Initialized)
-}
-
-
-/* PROTOCOL ID - STRING */
-pub fn set_protocol_id(e: &Env, protocol_id: String) {
- e.storage().instance().set(&DataKey::ProtocolId, &protocol_id);
-}
-
-pub fn get_protocol_id(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolId).ok_or(AdapterError::NotInitialized)
-}
-
-
-/* PROTOCOL ADDRESS */
-pub fn set_protocol_address(e: &Env, address: Address) {
- e.storage().instance().set(&DataKey::ProtocolAddress, &address);
-}
-
-pub fn get_protocol_address(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolAddress).ok_or(AdapterError::NotInitialized)
-}
-
diff --git a/contracts/adapters/comet/src/test.rs b/contracts/adapters/comet/src/test.rs
deleted file mode 100644
index b3b67716..00000000
--- a/contracts/adapters/comet/src/test.rs
+++ /dev/null
@@ -1,119 +0,0 @@
-#![cfg(test)]
-extern crate std;
-pub mod comet_setup;
-
-use comet_adapter_contract::CometAggregatorAdapterClientFromWasm;
-use comet_setup::{create_comet_factory, create_token_contract, pair::CometPairClient};
-use soroban_sdk::{
- testutils::Address as _, token::TokenClient, vec, Address, BytesN, Env, IntoVal, String,
- Symbol, Val, Vec,
-};
-
-mod deployer_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
- pub type DeployerClient<'a> = Client<'a>;
-}
-use deployer_contract::DeployerClient;
-
-use crate::{CometAggregatorAdapter, CometAggregatorAdapterClient};
-
-fn create_deployer<'a>(e: &Env) -> DeployerClient<'a> {
- let deployer_address = &e.register(deployer_contract::WASM, ());
- let deployer = DeployerClient::new(e, deployer_address);
- deployer
-}
-
-fn create_comet_aggregator_adapter<'a>(e: &Env) -> CometAggregatorAdapterClient<'a> {
- CometAggregatorAdapterClient::new(e, &e.register(CometAggregatorAdapter {}, ()))
-}
-
-pub mod comet_adapter_contract {
- soroban_sdk::contractimport!(
- file = "../../target/wasm32-unknown-unknown/release/comet_adapter.optimized.wasm"
- );
- pub type CometAggregatorAdapterClientFromWasm<'a> = Client<'a>;
-}
-
-pub struct CometAggregatorAdapterTest<'a> {
- pub env: Env,
- pub adapter_contract: CometAggregatorAdapterClientFromWasm<'a>,
- pub adapter_contract_not_initialized: CometAggregatorAdapterClient<'a>,
- pub comet_contract: CometPairClient<'a>,
- // pub factory_contract: CometFactoryClient<'a>,
- pub token_0: TokenClient<'a>,
- pub token_1: TokenClient<'a>,
- pub user: Address,
- // pub admin: Address,
-}
-
-impl<'a> CometAggregatorAdapterTest<'a> {
- fn setup() -> Self {
- let e = Env::default();
- e.mock_all_auths();
-
- let admin = Address::generate(&e);
- let user = Address::generate(&e);
-
- let (token_a, admin_token_a) = create_token_contract(&e, &admin);
- let (token_b, admin_token_b) = create_token_contract(&e, &admin);
-
- admin_token_a.mint(&admin, &1000000_000_000_0);
- admin_token_b.mint(&admin, &1000000_000_000_0);
-
- admin_token_a.mint(&user, &1000000_000_000_0);
- admin_token_b.mint(&user, &1000000_000_000_0);
-
- let comet_factory_client = create_comet_factory(&e);
- let comet_address = comet_factory_client.new_c_pool(
- &BytesN::from_array(&e, &[0; 32]),
- &admin,
- &vec![&e, token_a.address.clone(), token_b.address.clone()],
- &vec![&e, 8000000, 2000000],
- &vec![&e, 800000000000, 200000000000], // these balances make the tokens have an equal value
- &30000,
- );
- let comet_client = CometPairClient::new(&e, &comet_address);
-
- let adapter_wasm_hash = e
- .deployer()
- .upload_contract_wasm(comet_adapter_contract::WASM);
- let deployer_client = create_deployer(&e);
-
- let adapter_contract_not_initialized = create_comet_aggregator_adapter(&e);
-
- // Deploy contract using deployer, and include an init function to call.
- let salt = BytesN::from_array(&e, &[0; 32]);
- let init_fn = Symbol::new(&e, &("initialize"));
-
- let protocol_id = String::from_str(&e, "comet_blend");
- let protocol_address = comet_address.clone();
-
- // Convert the arguments into a Vec
- let init_fn_args: Vec = (protocol_id.clone(), protocol_address.clone()).into_val(&e);
-
- let (adapter_address, _init_result) = deployer_client.deploy(
- &deployer_client.address,
- &adapter_wasm_hash,
- &salt,
- &init_fn,
- &init_fn_args,
- );
-
- let adapter_contract = CometAggregatorAdapterClientFromWasm::new(&e, &adapter_address);
-
- CometAggregatorAdapterTest {
- env: e.clone(),
- adapter_contract: adapter_contract,
- adapter_contract_not_initialized: adapter_contract_not_initialized,
- comet_contract: comet_client,
- // factory_contract: comet_factory_client,
- token_0: token_a,
- token_1: token_b,
- user: user,
- }
- }
-}
-
-pub mod initialize;
-pub mod swap_exact_tokens_for_tokens;
-pub mod swap_tokens_for_exact_tokens;
diff --git a/contracts/adapters/comet/src/test/comet_setup.rs b/contracts/adapters/comet/src/test/comet_setup.rs
deleted file mode 100644
index 62774bbf..00000000
--- a/contracts/adapters/comet/src/test/comet_setup.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-#![cfg(test)]
-extern crate std;
-use soroban_sdk::{
- token::{StellarAssetClient as TokenAdminClient, TokenClient}, Address, BytesN, Env
-};
-
-
-pub mod pair{
- soroban_sdk::contractimport!(file = "./comet_contracts/comet_pool.wasm");
- pub type CometPairClient<'a> = Client<'a>;
-}
-
-fn pair_contract_wasm(e: &Env) -> BytesN<32> {
- e.deployer().upload_contract_wasm(pair::WASM)
-}
-
-pub mod factory{
- soroban_sdk::contractimport!(file = "./comet_contracts/comet_factory.wasm");
- pub type CometFactoryClient<'a> = Client<'a>;
-}
-use factory::CometFactoryClient;
-
-pub fn create_comet_factory<'a>(e: &Env) -> CometFactoryClient{
- let pair_hash = pair_contract_wasm(e);
-
- let factory_address = e.register(factory::WASM, ());
- let factory_client = CometFactoryClient::new(&e.clone(), &factory_address);
-
- factory_client.init(&pair_hash);
-
- factory_client
-}
-
-pub fn create_token_contract<'a>(e: &Env, admin: & Address) -> (TokenClient<'a>, TokenAdminClient<'a>) {
- let stellar_asset_contract = e.register_stellar_asset_contract_v2(admin.clone());
-
- (TokenClient::new(&e, &stellar_asset_contract.address()), TokenAdminClient::new(&e, &stellar_asset_contract.address()))
-}
\ No newline at end of file
diff --git a/contracts/adapters/comet/src/test/initialize.rs b/contracts/adapters/comet/src/test/initialize.rs
deleted file mode 100644
index 45a04110..00000000
--- a/contracts/adapters/comet/src/test/initialize.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-use soroban_sdk::String;
-use crate::test::CometAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-use super::comet_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-#[test]
-fn test_initialize_and_get_values() {
- let test = CometAggregatorAdapterTest::setup();
-
- test.adapter_contract_not_initialized.initialize(
- &String::from_str(&test.env, "comet_blend"),
- &test.comet_contract.address);
-
- let protocol_id = test.adapter_contract_not_initialized.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "comet_blend"));
-
- let protocol_address = test.adapter_contract_not_initialized.get_protocol_address();
- assert_eq!(protocol_address, test.comet_contract.address);
-}
-
-#[test]
-fn test_get_values() {
- let test = CometAggregatorAdapterTest::setup();
-
- let protocol_id = test.adapter_contract.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "comet_blend"));
-
- let protocol_address = test.adapter_contract.get_protocol_address();
- assert_eq!(protocol_address, test.comet_contract.address);
-}
-
-// test initialize twice
-#[test]
-fn test_initialize_twice() {
- let test = CometAggregatorAdapterTest::setup();
-
- test.adapter_contract_not_initialized.initialize(
- &String::from_str(&test.env, "comet_blend"),
- &test.comet_contract.address);
-
- let result = test.adapter_contract_not_initialized.try_initialize(
- &String::from_str(&test.env, "comet_blend"),
- &test.comet_contract.address);
-
- assert_eq!(result,Err(Ok(AdapterError::AlreadyInitialized)));
-}
-
-#[test]
-fn test_initialize_twice_deployer() {
- let test = CometAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract.try_initialize(
- &String::from_str(&test.env, "comet_blend"),
- &test.comet_contract.address);
-
- assert_eq!(result,Err(Ok(AdapterErrorDeployer::AlreadyInitialized)));
-}
-
-// test get protocol id not initialized
-#[test]
-fn test_get_protocol_id_not_initialized() {
- let test = CometAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract_not_initialized.try_get_protocol_id();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
-
-// test get protocol address not initialized
-#[test]
-fn test_get_protocol_address_not_initialized() {
- let test = CometAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract_not_initialized.try_get_protocol_address();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
diff --git a/contracts/adapters/comet/src/test/swap_exact_tokens_for_tokens.rs b/contracts/adapters/comet/src/test/swap_exact_tokens_for_tokens.rs
deleted file mode 100644
index 120301b9..00000000
--- a/contracts/adapters/comet/src/test/swap_exact_tokens_for_tokens.rs
+++ /dev/null
@@ -1,220 +0,0 @@
-extern crate std;
-
-use soroban_sdk::{Address, vec, Vec};
-use crate::test::CometAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-
-#[test]
-fn swap_exact_tokens_for_tokens_not_initialized() {
- let test = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_contract_not_initialized.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #37)")]
-fn swap_exact_tokens_for_tokens_amount_in_negative() {
- let test = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = vec![&test.env, test.token_0.address, test.token_1.address];
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &-1, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &1, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #37)")]
-fn swap_exact_tokens_for_tokens_amount_out_min_negative() {
- let test: CometAggregatorAdapterTest<'_> = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = vec![&test.env, test.token_0.address, test.token_1.address];
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &-1, // amount_out_min
- &path, // path
- &test.user, // to
- &1, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #405)")]
-fn swap_exact_tokens_for_tokens_expired() {
- let test = CometAggregatorAdapterTest::setup();
-
- let path: Vec = vec![&test.env, test.token_0.address, test.token_1.address];
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &10000, // amount_in
- &1, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_invalid_path() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_insufficient_input_amount() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- test.env.cost_estimate().budget().reset_unlimited();
-
-
- let amount = 100_000;
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount, // amount_in
- &amount, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #20)")]
-fn swap_exact_tokens_for_tokens_insufficient_output_amount() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let amount_in = 1_000_000;
-
- let expected_amount_out = 996996;
-
-
- // bone = 10**18
- // fee_ratio = (10**7 - 30000) * 10**11 => 997000000000000000
- // scaled_reserve_(out|in) = token_(out|in)_reserve * 10**7
- // adjusted_in = amount_in * fee_ratio / BONE
- // base = (scaled_reserve_in * BONE) / (scaled_reserve_in) + adjusted_in)
- // weight_ratio = in_token_weight * 10**18 / out_token_weight
- // power = ((base / BONE) ** (weight_ratio / BONE)) * BONE // The code treats the numbers as 18 digit fixed point values. So code does it differently, but this is equivelant
- // balance_ratio = BONE - power
- // <= scaled_reserve_out * balance_ratio / BONE / 10**7
-
- // scaled_reserve_in = 800000000000 * 10**7 => 8000000000000000000
- // scaled_reserve_out = 200000000000 * 10**7 => 2000000000000000000
- // adjusted_in = 1_000_000 * 997000000000000000 / BONE => 99700000000000000
- // base = (8000000000000000000 * BONE) / (8000000000000000000 + 99700000000000000) => 999998753751553137
- // weight_ratio = 8000000 * bone / 2000000 => 4000000000000000000
- // power = ((999998753751553137 / BONE) ** (4000000000000000000 / BONE)) * 10**18 => 999995015015531351
- // balance_ratio = BONE - 999995015015531351 => 4984984468649
- // 2000000000000000000 * 4984984468649 / BONE / 10**7 => 996996
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount_in, // amount_in
- &(expected_amount_out + 1), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_enough_output_amount() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let amount_in = 1_000_000;
-
- let expected_amount_out = 996996;
-
- // bone = 10**18
- // fee_ratio = (10**7 - 30000) * 10**11 => 997000000000000000
- // scaled_reserve_(out|in) = token_(out|in)_reserve * 10**7
- // adjusted_in = amount_in * fee_ratio / BONE
- // base = (scaled_reserve_in * BONE) / (scaled_reserve_in) + adjusted_in)
- // weight_ratio = in_token_weight * 10**18 / out_token_weight
- // power = ((base / BONE) ** (weight_ratio / BONE)) * BONE // The code treats the numbers as 18 digit fixed point values. So code does it differently, but this is equivelant
- // balance_ratio = BONE - power
- // <= scaled_reserve_out * balance_ratio / BONE / 10**7
-
- // scaled_reserve_in = 800000000000 * 10**7 => 8000000000000000000
- // scaled_reserve_out = 200000000000 * 10**7 => 2000000000000000000
- // adjusted_in = 1_000_000 * 997000000000000000 / BONE => 99700000000000000
- // base = (8000000000000000000 * BONE) / (8000000000000000000 + 99700000000000000) => 999998753751553137
- // weight_ratio = 8000000 * bone / 2000000 => 4000000000000000000
- // power = ((999998753751553137 / BONE) ** (4000000000000000000 / BONE)) * 10**18 => 999995015015531351
- // balance_ratio = BONE - 999995015015531351 => 4984984468649
- // 2000000000000000000 * 4984984468649 / BONE / 10**7 => 996996
-
- test.env.cost_estimate().budget().reset_unlimited();
- let executed_amounts = test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount_in, //amount_in
- &(expected_amount_out), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
- assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), expected_amount_out);
-
-}
\ No newline at end of file
diff --git a/contracts/adapters/comet/src/test/swap_tokens_for_exact_tokens.rs b/contracts/adapters/comet/src/test/swap_tokens_for_exact_tokens.rs
deleted file mode 100644
index 123e6e12..00000000
--- a/contracts/adapters/comet/src/test/swap_tokens_for_exact_tokens.rs
+++ /dev/null
@@ -1,204 +0,0 @@
-extern crate std;
-
-use soroban_sdk::{Address, vec, Vec};
-use crate::test::CometAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-
-#[test]
-fn swap_tokens_for_exact_tokens_not_initialized() {
- let test = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_contract_not_initialized.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #37)")]
-fn swap_tokens_for_exact_tokens_amount_out_negative() {
- let test = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = vec![&test.env, test.token_0.address, test.token_1.address];
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &-1, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &1, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #37)")]
-fn swap_tokens_for_exact_tokens_amount_in_max_negative() {
- let test = CometAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = vec![&test.env, test.token_0.address, test.token_1.address];
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &1, // amount_out
- &-1, // amount_in_max
- &path, // path
- &test.user, // to
- &1, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #405)")]
-fn swap_tokens_for_exact_tokens_expired() {
- let test = CometAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_tokens_for_exact_tokens_invalid_path() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
-
- test.adapter_contract.swap_tokens_for_exact_tokens( // add try_ to test the error
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInvalidPath)));
-}
-
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #19)")]
-fn try_swap_tokens_for_exact_tokens_insufficient_input_amount() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
-
- test.env.cost_estimate().budget().reset_unlimited();
-
- let amount_out = 1_000_000;
- let expected_amount_in = 1_003_015;
-
- // bone = 10**18
- // fee_ratio = (10**7 - 30000) * 10**11 => 997000000000000000
- // scaled_reserve_(out|in) = token_(out|in)_reserve * 10**7
- // adjusted_out = amount_out * 10**7
- // base = (scaled_reserve_out * BONE) / (scaled_reserve_out) - adjusted_out)
- // weight_ratio = out_token_weight * 10**18 / out_token_weight
- // power = ((base / BONE) ** (weight_ratio / BONE)) * BONE // The code treats the numbers as 18 digit fixed point values. So code does it differently, but this is equivelant
- // balance_ratio = power - BONE
- // amount_in = scaled_reserve_in * balance_ratio / BONE
- // adjusted_in = amount_in * BONE / fee_ratio
- // <= adjusted_in / 10**7
-
- // scaled_reserve_in = 800000000000 * 10**7 => 8000000000000000000
- // scaled_reserve_out = 200000000000 * 10**7 => 2000000000000000000
- // adjusted_out = 1_000_000 * 10**7 => 10000000000000
- // base = (2000000000000000000 * BONE) / (2000000000000000000 - 10000000000000) => 1000005000025000125
- // weight_ratio = 2000000 * BONE / 8000000 => 250000000000000000
- // power = ((1000005000025000125 / BONE) ** (250000000000000000 / BONE)) * 10**18 => 1250006250031
- // balance_ratio = 1000001250006250031 - BONE => 1250006250031
- // amount_in = 8000000000000000000 * 1250006250031 / BONE = 10000050000248
- // adjusted_in = 10000050000248 * BONE / fee_ratio => 10030140421512
- // 10030140421512 / 10**7 => 1003015
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &amount_out, // amount_out
- &(expected_amount_in - 1), // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-#[test]
-fn try_swap_tokens_for_exact_tokens_sufficient_input_amount() {
- let test = CometAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
-
- test.env.cost_estimate().budget().reset_unlimited();
-
- let amount_out = 1_000_000;
- let expected_amount_in = 1_003_015;
-
-
- // bone = 10**18
- // fee_ratio = (10**7 - 30000) * 10**11 => 997000000000000000
- // scaled_reserve_(out|in) = token_(out|in)_reserve * 10**7
- // adjusted_out = amount_out * 10**7
- // base = (scaled_reserve_out * BONE) / (scaled_reserve_out) - adjusted_out)
- // weight_ratio = out_token_weight * 10**18 / out_token_weight
- // power = ((base / BONE) ** (weight_ratio / BONE)) * BONE // The code treats the numbers as 18 digit fixed point values. So code does it differently, but this is equivelant
- // balance_ratio = power - BONE
- // amount_in = scaled_reserve_in * balance_ratio / BONE
- // adjusted_in = amount_in * BONE / fee_ratio
- // <= adjusted_in / 10**7
-
- // scaled_reserve_in = 800000000000 * 10**7 => 8000000000000000000
- // scaled_reserve_out = 200000000000 * 10**7 => 2000000000000000000
- // adjusted_out = 1_000_000 * 10**7 => 10000000000000
- // base = (2000000000000000000 * BONE) / (2000000000000000000 - 10000000000000) => 1000005000025000125
- // weight_ratio = 2000000 * BONE / 8000000 => 250000000000000000
- // power = ((1000005000025000125 / BONE) ** (250000000000000000 / BONE)) * 10**18 => 1250006250031
- // balance_ratio = 1000001250006250031 - BONE => 1250006250031
- // amount_in = 8000000000000000000 * 1250006250031 / BONE = 10000050000248
- // adjusted_in = 10000050000248 * BONE / fee_ratio => 10030140421512
- // 10030140421512 / 10**7 => 1003015
-
-
- let executed_amounts = test.adapter_contract.swap_tokens_for_exact_tokens(
- &amount_out, // amount_out
- &expected_amount_in, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- assert_eq!(executed_amounts.get(0).unwrap(), expected_amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), amount_out);
-}
\ No newline at end of file
diff --git a/contracts/adapters/interface/Cargo.toml b/contracts/adapters/interface/Cargo.toml
deleted file mode 100644
index 691316ad..00000000
--- a/contracts/adapters/interface/Cargo.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[package]
-name = "adapter-interface"
-authors = ["coderipper , esteblock"]
-version = { workspace = true }
-edition = { workspace = true }
-repository = { workspace = true }
-publish = false
-
-[dependencies]
-soroban-sdk = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
\ No newline at end of file
diff --git a/contracts/adapters/interface/src/error.rs b/contracts/adapters/interface/src/error.rs
deleted file mode 100644
index 3f997810..00000000
--- a/contracts/adapters/interface/src/error.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-use soroban_sdk::{self, contracterror};
-
-#[contracterror]
-#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
-#[repr(u32)]
-pub enum AdapterError {
- NotInitialized = 401,
- AlreadyInitialized = 402,
- NegativeNotAllowed = 403,
- ProtocolAddressNotFound = 404,
- DeadlineExpired = 405,
- MissingPoolHashes = 406, // For AQUA
- WrongMinimumPathLength = 407,
- WrongPoolHashesLength = 408, // For AQUA
-
-}
-
diff --git a/contracts/adapters/interface/src/lib.rs b/contracts/adapters/interface/src/lib.rs
deleted file mode 100644
index 7fad9f8e..00000000
--- a/contracts/adapters/interface/src/lib.rs
+++ /dev/null
@@ -1,72 +0,0 @@
-// #![deny(warnings)]
-#![no_std]
-
-use soroban_sdk::{contractclient, contractspecfn, Address, Env, Vec, String, BytesN};
-pub struct Spec;
-
-mod error;
-pub use error::AdapterError;
-
-#[contractspecfn(name = "Spec", export = false)]
-#[contractclient(name = "AdapterClient")]
-
-pub trait AdapterTrait {
- fn initialize(
- e: Env,
- protocol_id: String,
- protocol_address: Address) -> Result<(), AdapterError>;
-
- /// Swaps an exact amount of input tokens for as many output tokens as possible
- /// along the specified trading route. The route is determined by the `path` vector,
- /// where the first element is the input token, the last is the output token,
- /// and any intermediate elements represent pairs to trade through if a direct pair does not exist.
- /// # Arguments
- /// * `amount_in` - The exact amount of input tokens to be swapped.
- /// * `amount_out_min` - The minimum required amount of output tokens to receive.
- /// * `path` - A vector representing the trading route, where the first element is the input token
- /// and the last is the output token. Intermediate elements represent pairs to trade through.
- /// * `to` - The address where the output tokens will be sent to.
- /// * `deadline` - The deadline for executing the operation.
- /// * `bytes` - Optional bytes containing additional data for the swap.
- /// # Returns
- /// A vector containing the amounts of tokens received at each step of the trading route.
- fn swap_exact_tokens_for_tokens(
- env: Env,
- amount_in: i128,
- amount_out_min: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- bytes: Option>>,
- ) -> Result, AdapterError>;
-
-
- /// Swaps tokens for an exact amount of output token, following the specified trading route.
- /// The route is determined by the `path` vector, where the first element is the input token,
- /// the last is the output token, and any intermediate elements represent pairs to trade through.
-
- /// # Arguments
- /// * `amount_out` - The exact amount of output token to be received.
- /// * `amount_in_max` - The maximum allowed amount of input tokens to be swapped.
- /// * `path` - A vector representing the trading route, where the first element is the input token
- /// and the last is the output token. Intermediate elements represent pairs to trade through.
- /// * `to` - The address where the output tokens will be sent to.
- /// * `deadline` - The deadline for executing the operation.
- /// * `bytes` - Optional bytes containing additional data for the swap.
-
- /// # Returns
- /// A vector containing the amounts of tokens used at each step of the trading route.
- fn swap_tokens_for_exact_tokens(
- e: Env,
- amount_out: i128,
- amount_in_max: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- bytes: Option>>,
- ) -> Result, AdapterError>;
-
- /* *** Read only functions: *** */
- fn get_protocol_id(e: &Env) -> Result;
- fn get_protocol_address(e: &Env) -> Result;
-}
diff --git a/contracts/adapters/phoenix/Cargo.toml b/contracts/adapters/phoenix/Cargo.toml
deleted file mode 100644
index e76803ac..00000000
--- a/contracts/adapters/phoenix/Cargo.toml
+++ /dev/null
@@ -1,22 +0,0 @@
-[package]
-name = "phoenix-adapter"
-version = "0.1.0"
-edition = { workspace = true }
-description = "Phoenix-Adapter is a smart contract on the Soroban platform, tailored for use with the Soroswap-Aggregator. It facilitates efficient transaction routing through the Phoenix protocol."
-homepage = { workspace = true }
-repository = { workspace = true }
-authors = ["coderipper "]
-readme = "README.md"
-keywords = ["no_std", "wasm", "soroswap", "amm", "soroban"]
-publish = true
-
-[lib]
-crate-type = ["cdylib"]
-
-[dependencies]
-soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
-test-utils = { workspace = true, features = ["testutils"] }
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/Makefile b/contracts/adapters/phoenix/Makefile
deleted file mode 100644
index e8fc34c2..00000000
--- a/contracts/adapters/phoenix/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-default: build
-
-all: test
-
-test: build
- cargo test
-
-build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../../target/wasm32-unknown-unknown/release/phoenix_adapter.wasm
- @rm ../../target/wasm32-unknown-unknown/release/phoenix_adapter.wasm
-
-fmt:
- cargo fmt --all --check
-
-clean:
- cargo clean
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/README.md b/contracts/adapters/phoenix/README.md
deleted file mode 100644
index 7d726629..00000000
--- a/contracts/adapters/phoenix/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# SoroswapAggregator: Phoenix Adapter
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/src/event.rs b/contracts/adapters/phoenix/src/event.rs
deleted file mode 100644
index ad71bf2c..00000000
--- a/contracts/adapters/phoenix/src/event.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-//! Definition of the Events used in the contract
-use soroban_sdk::{contracttype, symbol_short, Env, Address, Vec, String};
-
-// INITIALIZED
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct InitializedEvent {
- pub state: bool,
- pub protocol_id: String,
- pub protocol_address: Address
-}
-
-pub(crate) fn initialized(e: &Env, state: bool, protocol_id: String, protocol_address: Address) {
-
- let event: InitializedEvent = InitializedEvent {
- state: state,
- protocol_id,
- protocol_address,
- };
- e.events().publish(("SoroswapAggregatorPhoenixAdapter", symbol_short!("init")), event);
-}
-
-// SWAP EVENT
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct SwapEvent {
- pub amount_in: i128,
- pub path: Vec,
- pub to: Address
-}
-
-pub(crate) fn swap(
- e: &Env,
- amount_in: i128,
- path: Vec,
- to: Address
-) {
- let event = SwapEvent {
- amount_in,
- path,
- to,
- };
-
- e.events().publish(("SoroswapAggregatorPhoenixAdapter", symbol_short!("swap")), event);
-}
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/src/lib.rs b/contracts/adapters/phoenix/src/lib.rs
deleted file mode 100644
index 88379cbe..00000000
--- a/contracts/adapters/phoenix/src/lib.rs
+++ /dev/null
@@ -1,157 +0,0 @@
-#![no_std]
-use soroban_sdk::{contract, contractimpl, Address, BytesN, Env, String, Vec};
-mod event;
-mod storage;
-mod protocol_interface;
-mod test;
-
-use storage::{
- extend_instance_ttl,
- set_initialized,
- is_initialized,
- set_protocol_id,
- get_protocol_id,
- set_protocol_address,
- get_protocol_address,
-};
-use adapter_interface::{
- AdapterTrait, AdapterError
-};
-use protocol_interface::{
- protocol_swap_exact_tokens_for_tokens,
- protocol_swap_tokens_for_exact_tokens
-};
-
-fn check_nonnegative_amount(amount: i128) -> Result<(), AdapterError> {
- if amount < 0 {
- Err(AdapterError::NegativeNotAllowed)
- } else {
- Ok(())
- }
-}
-
-fn ensure_deadline(e: &Env, timestamp: u64) -> Result<(), AdapterError> {
- let ledger_timestamp = e.ledger().timestamp();
- if ledger_timestamp >= timestamp {
- Err(AdapterError::DeadlineExpired)
- } else {
- Ok(())
- }
-}
-
-fn check_initialized(e: &Env) -> Result<(), AdapterError> {
- if is_initialized(e) {
- Ok(())
- } else {
- Err(AdapterError::NotInitialized)
- }
-}
-
-#[contract]
-struct SoroswapAggregatorPhoenixAdapter;
-
-#[contractimpl]
-impl AdapterTrait for SoroswapAggregatorPhoenixAdapter {
-
- /// Initializes the contract and sets the Phoenix multihop address.
- ///
- /// # Arguments
- ///
- /// * `e` - The contract environment.
- /// * `protocol_id` - The identifier for the protocol.
- /// * `protocol_address` - The address associated with the protocol.
- ///
- /// # Errors
- ///
- /// Returns an error if the contract is already initialized (`AdapterError::AlreadyInitialized`).
- fn initialize(
- e: Env,
- protocol_id: String,
- protocol_address: Address,
- ) -> Result<(), AdapterError> {
- if check_initialized(&e).is_ok() {
- return Err(AdapterError::AlreadyInitialized);
- }
-
- set_protocol_id(&e, protocol_id.clone());
- set_protocol_address(&e, protocol_address.clone());
-
- set_initialized(&e);
- event::initialized(&e, true, protocol_id, protocol_address);
- extend_instance_ttl(&e);
- Ok(())
- }
-
- fn swap_exact_tokens_for_tokens(
- e: Env,
- amount_in: i128,
- amount_out_min: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- check_nonnegative_amount(amount_in)?;
- check_nonnegative_amount(amount_out_min)?;
- ensure_deadline(&e, deadline)?;
-
- let swap_result = protocol_swap_exact_tokens_for_tokens(
- &e,
- &amount_in,
- &amount_out_min,
- &path,
- &to,
- &deadline,
- )?;
-
- event::swap(&e, amount_in, path, to);
- Ok(swap_result)
- }
-
- fn swap_tokens_for_exact_tokens(
- e: Env,
- amount_out: i128,
- amount_in_max: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- check_nonnegative_amount(amount_out)?;
- check_nonnegative_amount(amount_in_max)?;
- ensure_deadline(&e, deadline)?;
-
- let swap_result = protocol_swap_tokens_for_exact_tokens(
- &e,
- &amount_out,
- &amount_in_max,
- &path,
- &to,
- &deadline,
- )?;
-
- event::swap(&e, amount_in_max, path, to);
- Ok(swap_result)
- }
-
- /* *** Read only functions: *** */
- fn get_protocol_id(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_id(e)?)
- }
-
- fn get_protocol_address(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_address(e)?)
- }
-}
diff --git a/contracts/adapters/phoenix/src/protocol_interface.rs b/contracts/adapters/phoenix/src/protocol_interface.rs
deleted file mode 100644
index 10988764..00000000
--- a/contracts/adapters/phoenix/src/protocol_interface.rs
+++ /dev/null
@@ -1,203 +0,0 @@
-// based on https://github.com/Phoenix-Protocol-Group/phoenix_contracts/tree/v1.0.0
-
-use soroban_sdk::{Env, Address, Vec, token::Client as TokenClient};
-use crate::storage::get_protocol_address;
-use adapter_interface::AdapterError;
-// use phoenix_contracts::PoolType;
-
-soroban_sdk::contractimport!(
- file = "./phoenix_contracts/phoenix_multihop.wasm"
-);
-pub type PhoenixMultihopClient<'a> = Client<'a>;
-
-fn convert_to_swaps(e: &Env, path: &Vec) -> Vec {
- let mut swaps = Vec::new(e);
-
- // Iterate through the addresses in the path, creating a Swap object for each pair
- // If path is [token0, token1, token2, token3], swaps should be
- // swap_0 = Swap{
- // offer_asset: token0,
- // ask_asset: token1,
- // ask_asset_min_amount: None,
- // },
- // swap_1 = Swap{
- // offer_asset: token1,
- // ask_asset: token2,
- // ask_asset_min_amount: None,
- // },
- // swap_2 = Swap{
- // offer_asset: token2,
- // ask_asset: token3,
- // ask_asset_min_amount: None,
- // }
-
- for i in 0..(path.len() - 1) {
- let offer_asset = path.get(i).expect("Failed to get offer asset");
- let ask_asset = path.get(i + 1).expect("Failed to get ask a sset");
-
- swaps.push_back(Swap {
- offer_asset: offer_asset.clone(), // asset being sold (token_in)
- ask_asset: ask_asset.clone(), // asset buying (token_out)
- ask_asset_min_amount: None,
- });
- }
-
- swaps
-}
-
-pub fn protocol_swap_exact_tokens_for_tokens(
- e: &Env,
- amount_in: &i128,
- amount_out_min: &i128,
- path: &Vec,
- to: &Address,
- _deadline: &u64,
-) -> Result, AdapterError> {
-
- let phoenix_multihop_address = get_protocol_address(&e)?;
- let phoenix_multihop_client = PhoenixMultihopClient::new(&e, &phoenix_multihop_address);
- let operations = convert_to_swaps(e, path);
-
- // TODO: Remove this checks if we want to reduce the number of total instructions
- // TODO: Do benchmarking
- let token_out_address = path.get(path.len() - 1).expect("Failed to get token out address");
- let initial_token_out_balance = TokenClient::new(&e, &token_out_address).balance(&to);
-
- let pool_type = PoolType::Xyk; // currently we only support XYK pools
-
- // By using max_spread_bps = None, the Phoenix LP will use the maximum allowed slippage
- // amount_in is the amount being sold of the first token in the operations.
-
- // fn swap(
- // env: Env,
- // recipient: Address,
- // // FIXM: Disable Referral struct
- // // referral: Option,
- // operations: Vec,
- // max_spread_bps: Option,
- // amount: i128,
- // pool_type: PoolType,
- // deadline: Option,
- // max_allowed_fee_bps: Option,
- // );
- phoenix_multihop_client.swap(
- &to, // recipient: Address,
- &operations, // operations: Vec,
- &None, // max_spread_bps: Option.
- &amount_in, //amout: i128. Amount being sold. Input from the user,
- &pool_type, // pool_type: PoolType,
- &None, // deadline: Option,
- &None, // max_allowed_fee_bps: Option,
- );
-
- let final_token_out_balance = TokenClient::new(&e, &token_out_address).balance(&to);
-
- // check if the amount of token_out received is greater than the minimum amount expected
- // TODO: Remove this checks if we want to reduce the number of total instructions
- // TODO: Do benchmarking
- let final_amount_out = final_token_out_balance.checked_sub(initial_token_out_balance).unwrap();
- if final_amount_out < *amount_out_min {
- // panic
- panic!("Amount of token out received is less than the minimum amount expected");
- }
-
- let mut swap_amounts: Vec = Vec::new(e);
- swap_amounts.push_back(amount_in.clone());
- swap_amounts.push_back(final_amount_out);
-
- Ok(swap_amounts)
-}
-
-pub fn protocol_swap_tokens_for_exact_tokens(
- e: &Env,
- amount_out: &i128,
- amount_in_max: &i128,
- path: &Vec,
- to: &Address,
- _deadline: &u64,
-) -> Result, AdapterError> {
-
- let phoenix_multihop_address = get_protocol_address(&e)?;
- let phoenix_multihop_client = PhoenixMultihopClient::new(&e, &phoenix_multihop_address);
- let operations = convert_to_swaps(e, path);
-
- // let pool_type = PoolType::Xyk; // currently we only support XYK pools
-
-
- // We first need to get the "reverse_amount from phoenix.simulate_reverse_swap"
- // however here, if the path is [t0, t1, t2, t3, t4], the operations should be
- // swap_0 = Swap{
- // offer_asset: t3,
- // ask_asset: t4,
- // ask_asset_min_amount: None,
- // },
- // swap_1 = Swap{
- // offer_asset: t2,
- // ask_asset: t3,
- // ask_asset_min_amount: None,
- // },
- // swap_2 = Swap{
- // offer_asset: t1,
- // ask_asset: t2,
- // ask_asset_min_amount: None,
- // },
- // swap_3 = Swap{
- // offer_asset: t0,
- // ask_asset: t1,
- // ask_asset_min_amount: None,
- // }
-
- let mut operations_reversed = soroban_sdk::Vec::new(&e);
- for op in operations.iter().rev() {
- operations_reversed.push_back(op.clone());
- }
-
- // fn simulate_reverse_swap(
- // env: Env,
- // operations: Vec,
- // amount: i128,
- // pool_type: PoolType,
- // ) -> SimulateReverseSwapResponse;
-
- let reverse_simulated_swap = phoenix_multihop_client.simulate_reverse_swap(
- &operations_reversed, //operations: Vec,
- amount_out, //amount: i128,
- &PoolType::Xyk //PoolType,
- );
-
- // TODO: Eliminate this check. The overall in max is checked by the Aggregator
- // Removing this check will reduce the amount of instructions/
- // TODO: Do Benchmarking
- if reverse_simulated_swap.offer_amount > *amount_in_max {
- panic!("Amount of token in required is greater than the maximum amount expected");
- }
-
- // fn swap(
- // env: Env,
- // recipient: Address,
- // // FIXM: Disable Referral struct
- // // referral: Option,
- // operations: Vec,
- // max_spread_bps: Option,
- // amount: i128,
- // pool_type: PoolType,
- // deadline: Option,
- // max_allowed_fee_bps: Option,
- // );
- phoenix_multihop_client.swap(
- &to, // recipient: Address,
- &operations, // operations: Vec,
- &None, // max_spread_bps: Option.
- &reverse_simulated_swap.offer_amount, //amout: i128. Amount being sold. Input from the user,
- &PoolType::Xyk, // pool_type: PoolType,
- &None, // deadline: Option,
- &None, // max_allowed_fee_bps: Option,
- );
-
- // Here we trust in the amounts returned by Phoenix contracts
- let mut swap_amounts: Vec = Vec::new(e);
- swap_amounts.push_back(reverse_simulated_swap.offer_amount);
- swap_amounts.push_back(*amount_out);
-
- Ok(swap_amounts)
-}
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/src/storage.rs b/contracts/adapters/phoenix/src/storage.rs
deleted file mode 100644
index ce448618..00000000
--- a/contracts/adapters/phoenix/src/storage.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use soroban_sdk::{contracttype, Env, Address, String};
-use adapter_interface::AdapterError;
-
-#[derive(Clone)]
-#[contracttype]
-
-enum DataKey {
- Initialized,
- ProtocolId,
- ProtocolAddress,
-}
-
-const DAY_IN_LEDGERS: u32 = 17280;
-const INSTANCE_BUMP_AMOUNT: u32 = 30 * DAY_IN_LEDGERS;
-const INSTANCE_LIFETIME_THRESHOLD: u32 = INSTANCE_BUMP_AMOUNT - DAY_IN_LEDGERS;
-
-pub fn extend_instance_ttl(e: &Env) {
- e.storage()
- .instance()
- .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT);
-}
-
-/* INITIALIZED */
-pub fn set_initialized(e: &Env) {
- e.storage().instance().set(&DataKey::Initialized, &true);
-}
-
-pub fn is_initialized(e: &Env) -> bool {
- e.storage().instance().has(&DataKey::Initialized)
-}
-
-
-/* PROTOCOL ID - STRING */
-pub fn set_protocol_id(e: &Env, protocol_id: String) {
- e.storage().instance().set(&DataKey::ProtocolId, &protocol_id);
-}
-
-pub fn get_protocol_id(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolId).ok_or(AdapterError::NotInitialized)
-}
-
-
-/* PROTOCOL ADDRESS */
-pub fn set_protocol_address(e: &Env, address: Address) {
- e.storage().instance().set(&DataKey::ProtocolAddress, &address);
-}
-
-pub fn get_protocol_address(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolAddress).ok_or(AdapterError::NotInitialized)
-}
-
diff --git a/contracts/adapters/phoenix/src/test.rs b/contracts/adapters/phoenix/src/test.rs
deleted file mode 100644
index 5a0ae18b..00000000
--- a/contracts/adapters/phoenix/src/test.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-#![cfg(test)]
-extern crate std;
-use soroban_sdk::{
- Env,
- Address,
- BytesN,
- Symbol,
- String,
- Vec,
- Val,
- IntoVal
-};
-use crate::{SoroswapAggregatorPhoenixAdapter, SoroswapAggregatorPhoenixAdapterClient};
-use test_utils::phoenix_setup::{PhoenixTest, MultihopClient, TokenClient, PhoenixFactory};
-// use factory::SoroswapFactoryClient;
-// use router::SoroswapRouterClient;
-
-mod deployer_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
- pub type DeployerClient<'a> = Client<'a>;
-}
-use deployer_contract::DeployerClient;
-
-fn create_deployer<'a>(e: &Env) -> DeployerClient<'a> {
- let deployer_address = &e.register(deployer_contract::WASM, ());
- let deployer = DeployerClient::new(e, deployer_address);
- deployer
-}
-
-// PhoenixAggregatorAdapter Contract
-fn create_soroswap_aggregator_phoenix_adapter<'a>(e: &Env) -> SoroswapAggregatorPhoenixAdapterClient<'a> {
- SoroswapAggregatorPhoenixAdapterClient::new(e, &e.register(SoroswapAggregatorPhoenixAdapter {}, ()))
-}
-
-pub mod phoenix_adapter_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/phoenix_adapter.optimized.wasm");
- pub type SoroswapAggregatorPhoenixAdapterClientFromWasm<'a> = Client<'a>;
-}
-use phoenix_adapter_contract::SoroswapAggregatorPhoenixAdapterClientFromWasm;
-
-pub struct PhoenixAggregatorAdapterTest<'a> {
- env: Env,
- adapter_client: SoroswapAggregatorPhoenixAdapterClientFromWasm<'a>,
- adapter_client_not_initialized: SoroswapAggregatorPhoenixAdapterClient<'a>,
- factory_client: PhoenixFactory<'a>,
- multihop_client: MultihopClient<'a>,
- token_0: TokenClient<'a>,
- token_1: TokenClient<'a>,
- token_2: TokenClient<'a>,
- token_3: TokenClient<'a>,
- user: Address,
- admin: Address
-}
-
-impl<'a> PhoenixAggregatorAdapterTest<'a> {
- fn setup() -> Self {
- let test = PhoenixTest::phoenix_setup();
-
- let wasm_hash = test.env.deployer().upload_contract_wasm(phoenix_adapter_contract::WASM);
- let deployer_client = create_deployer(&test.env);
-
- let adapter_client_not_initialized = create_soroswap_aggregator_phoenix_adapter(&test.env);
- // Deploy contract using deployer, and include an init function to call.
- let salt = BytesN::from_array(&test.env, &[0; 32]);
- let init_fn = Symbol::new(&test.env, &("initialize"));
-
- let protocol_id = String::from_str(&test.env, "phoenix");
- let protocol_address = test.multihop_client.address.clone();
-
- // Convert the arguments into a Vec
- let init_fn_args: Vec = (protocol_id.clone(), protocol_address.clone()).into_val(&test.env);
-
- test.env.mock_all_auths();
- let (contract_id, _init_result) = deployer_client.deploy(
- &deployer_client.address,
- &wasm_hash,
- &salt,
- &init_fn,
- &init_fn_args,
- );
-
- let adapter_client = phoenix_adapter_contract::Client::new(&test.env, &contract_id);
-
- PhoenixAggregatorAdapterTest {
- env: test.env,
- adapter_client,
- adapter_client_not_initialized,
- factory_client: test.factory_client,
- multihop_client: test.multihop_client,
- token_0: test.token_0,
- token_1: test.token_1,
- token_2: test.token_2,
- token_3: test.token_3,
- user: test.user,
- admin: test.admin
- }
- }
-}
-
-pub mod initialize;
-pub mod swap_exact_tokens_for_tokens;
-pub mod swap_tokens_for_exact_tokens;
\ No newline at end of file
diff --git a/contracts/adapters/phoenix/src/test/initialize.rs b/contracts/adapters/phoenix/src/test/initialize.rs
deleted file mode 100644
index 8f43e3a0..00000000
--- a/contracts/adapters/phoenix/src/test/initialize.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-use soroban_sdk::String;
-use crate::test::PhoenixAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-use super::phoenix_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-#[test]
-fn test_initialize_and_get_values() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- test.adapter_client_not_initialized.initialize(
- &String::from_str(&test.env, "phoenix"),
- &test.multihop_client.address);
-
- let protocol_id = test.adapter_client_not_initialized.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "phoenix"));
-
- let protocol_address = test.adapter_client_not_initialized.get_protocol_address();
- assert_eq!(protocol_address, test.multihop_client.address);
-}
-
-#[test]
-fn test_get_values() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let protocol_id = test.adapter_client.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "phoenix"));
-
- let protocol_address = test.adapter_client.get_protocol_address();
- assert_eq!(protocol_address, test.multihop_client.address);
-}
-
-// test initialize twice
-#[test]
-fn test_initialize_twice() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- test.adapter_client_not_initialized.initialize(
- &String::from_str(&test.env, "phoenix"),
- &test.multihop_client.address);
-
- let result = test.adapter_client_not_initialized.try_initialize(
- &String::from_str(&test.env, "phoenix"),
- &test.multihop_client.address);
-
- assert_eq!(result,Err(Ok(AdapterError::AlreadyInitialized)));
-}
-
-#[test]
-fn test_initialize_twice_deployer() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let result = test.adapter_client.try_initialize(
- &String::from_str(&test.env, "phoenix"),
- &test.multihop_client.address);
-
- assert_eq!(result,Err(Ok(AdapterErrorDeployer::AlreadyInitialized)));
-}
-
-// test get protocol id not initialized
-#[test]
-fn test_get_protocol_id_not_initialized() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let result = test.adapter_client_not_initialized.try_get_protocol_id();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
-
-// test get protocol address not initialized
-#[test]
-fn test_get_protocol_address_not_initialized() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let result = test.adapter_client_not_initialized.try_get_protocol_address();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
diff --git a/contracts/adapters/phoenix/src/test/swap_exact_tokens_for_tokens.rs b/contracts/adapters/phoenix/src/test/swap_exact_tokens_for_tokens.rs
deleted file mode 100644
index 6eb31d78..00000000
--- a/contracts/adapters/phoenix/src/test/swap_exact_tokens_for_tokens.rs
+++ /dev/null
@@ -1,1204 +0,0 @@
-#[cfg(test)]
-use soroban_sdk::{Address, vec, Vec};
-use crate::test::{PhoenixAggregatorAdapterTest};
-use test_utils::phoenix_setup::deploy_and_initialize_lp;
-use adapter_interface::AdapterError;
-use super::phoenix_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-#[test]
-fn swap_exact_tokens_for_tokens_not_initialized() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client_not_initialized.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_amount_in_negative() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &-1, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_amount_out_min_negative() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &-1, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_exact_tokens_for_tokens_expired() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::DeadlineExpired))
- );
-}
-
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_invalid_path() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
- test.adapter_client.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_insufficient_input_amount() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_client.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInsufficientInputAmount)));
-}
-
-
-
-#[test]
-// #[should_panic] // TODO: Change to an error object (If we dont delete this check)
-// TODO: Check why it fails with the adapter_client?
-// #[should_panic(expected = "Amount of token out received is less than the minimum amount expected")]
-#[should_panic(expected = "HostError: Error(WasmVm, InvalidAction)")] //TODO: Why it changed using the deployer?
-fn swap_exact_tokens_for_tokens_insufficient_output_amount() {
- let test = PhoenixAggregatorAdapterTest::setup();
- // test.adapter_client_not_initialized.initialize(
- // &String::from_str(&test.env, "phoenix"),
- // &test.multihop_client.address);
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
- path.push_back(test.token_3.address.clone());
-
- let amount_in = 50i128;
- // The next taken from phoenix contract tests
- let expected_amount_out = 50i128;
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_client.swap_exact_tokens_for_tokens(
- &amount_in, // amount_in
- &(expected_amount_out + 1), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_enough_output_amount() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
-
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
- path.push_back(test.token_3.address.clone());
-
- let amount_in = 500i128;
- // The next taken from phoenix contract tests
- // TODO: Check with future versions of phoenix
- let expected_amount_out = 500i128;
-
- let initial_user_balance_0 = test.token_0.balance(&test.user);
- let initial_user_balance_1 = test.token_1.balance(&test.user);
- let initial_user_balance_2 = test.token_2.balance(&test.user);
- let initial_user_balance_3 = test.token_3.balance(&test.user);
-
- let token_out_address = path.get(path.len() - 1).expect("Failed to get token out address");
-
- assert_eq!(token_out_address, test.token_3.address);
-
- test.env.cost_estimate().budget().reset_unlimited();
- let executed_amounts = test.adapter_client.swap_exact_tokens_for_tokens(
- &amount_in, // amount_in
- &(expected_amount_out), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance_0 - amount_in);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance_1);
- assert_eq!(test.token_2.balance(&test.user), initial_user_balance_2);
- assert_eq!(test.token_3.balance(&test.user), initial_user_balance_3 + expected_amount_out);
-
- // WE NEED TO RETURN THE VALUES
- assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), expected_amount_out);
-}
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_enough_output_amount_with_fees() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- // we will make a pool betwern token 0 and token 2 with fees
- deploy_and_initialize_lp(
- &test.env,
- &test.factory_client,
- test.admin.clone(),
- test.token_0.address.clone(),
- 1_000_000,
- test.token_2.address.clone(),
- 1_000_000,
- Some(2000),
- );
-
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
-
- path.push_back(test.token_0.address.clone());
- // path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
- // path.push_back(test.token_3.address.clone());
-
- let amount_in = 300i128;
- // The next taken from phoenix contract tests
- // TODO: Check with future versions of phoenix
- // 1000 tokens initially
- // swap 300 from token0 to token1 with 2000 bps (20%)
- // tokens1 will be 240
- let expected_amount_out = 240i128;
-
- let initial_user_balance_0 = test.token_0.balance(&test.user);
- // let initial_user_balance_1 = test.token_1.balance(&test.user);
- let initial_user_balance_2 = test.token_2.balance(&test.user);
- // let initial_user_balance_3 = test.token_3.balance(&test.user);
-
- test.env.cost_estimate().budget().reset_unlimited();
- let executed_amounts = test.adapter_client.swap_exact_tokens_for_tokens(
- &amount_in, // amount_in
- &(expected_amount_out), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance_0 - amount_in);
- assert_eq!(test.token_2.balance(&test.user), initial_user_balance_2 + expected_amount_out);
-
- // WE NEED TO RETURN THE VALUES
- assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), expected_amount_out);
-}
-
-
-// use crate::factory_contract::PoolType;
-// // FIXM: Disable Referral struct
-// // use crate::lp_contract::Referral;
-// use crate::storage::Swap;
-// use crate::tests::setup::{
-// deploy_and_initialize_factory, deploy_and_initialize_pool, deploy_and_mint_tokens,
-// deploy_multihop_contract, deploy_token_contract,
-// };
-
-// use soroban_sdk::contracterror;
-// use soroban_sdk::{testutils::Address as _, vec, Address, Env};
-
-// #[contracterror]
-// #[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
-// #[repr(u32)]
-// pub enum ContractError {
-// SpreadExceedsLimit = 1,
-// }
-
-// #[test]
-// fn swap_three_equal_pools_no_fees() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 1_000_000,
-// token3.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 1_000_000,
-// token4.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &50i128);
-// assert_eq!(token1.balance(&recipient), 50i128);
-// assert_eq!(token4.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &operations, &None, &None, &50i128);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &50i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // 5. check if it goes according to plan
-// assert_eq!(token1.balance(&recipient), 0i128);
-// assert_eq!(token4.balance(&recipient), 50i128);
-// }
-
-// // FIXM: Disable Referral struct
-// #[ignore]
-// #[test]
-// fn swap_three_equal_pools_no_fees_referral_fee() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 1_000_000,
-// token3.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 1_000_000,
-// token4.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &50i128);
-// assert_eq!(token1.balance(&recipient), 50i128);
-// assert_eq!(token4.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-// let referral_addr = Address::generate(&env);
-// // FIXM: Disable Referral struct
-// // let referral = Referral {
-// // address: referral_addr.clone(),
-// // fee: 1_000,
-// // };
-
-// // multihop.swap(
-// // &recipient,
-// // &Some(referral),
-// // &operations,
-// // &None,
-// // &None,
-// // &50i128,
-// // );
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &50i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // 5. check if it goes according to plan
-// assert_eq!(token1.balance(&recipient), 0i128);
-// assert_eq!(token4.balance(&recipient), 37i128);
-// // referral fee from first swap should be 5 (10% out of 50)
-// assert_eq!(token2.balance(&referral_addr), 5i128);
-// // referral fee from 2nd swap should be 4 (10% out of 45) rounded down
-// assert_eq!(token3.balance(&referral_addr), 4i128);
-// // referral fee from the last swap should also be 4 (10% out of 41) rounded down
-// assert_eq!(token4.balance(&referral_addr), 4i128);
-// }
-
-// #[test]
-// fn swap_single_pool_no_fees() {
-// let env = Env::default();
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &5_000i128); // mints 50 token0 to recipient
-// assert_eq!(token1.balance(&recipient), 5_000i128);
-// assert_eq!(token2.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, /*&None,*/ &operations, &None, &None, &50i128);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &1_000,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // 5. check if it goes according to plan
-// assert_eq!(token1.balance(&recipient), 4_000i128); // -1_000 token0
-// assert_eq!(token2.balance(&recipient), 1_000i128); // +1_000 token1
-// }
-
-// #[test]
-// /// Asserting HostError, because of panic messages are not propagated and IIUC are normally compiled out
-// #[should_panic(expected = "HostError: Error(Contract, #1)")]
-// fn swap_should_fail_when_spread_exceeds_the_limit() {
-// let env = Env::default();
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 3_001_000i128);
-
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 5_000,
-// token2.address.clone(),
-// 2_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &5_000i128); // mints 50 token0 to recipient
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &operations, &None, &Some(50), &50);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &Some(50),
-// &50,
-// &PoolType::Xyk,
-// &None::,
-// );
-// }
-
-// #[test]
-// fn swap_single_pool_with_fees() {
-// let env = Env::default();
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// Some(2000),
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &1000i128);
-// assert_eq!(token1.balance(&recipient), 1000i128);
-// assert_eq!(token2.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &operations, &None, &None, &300i128);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &300i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // 5. check if it goes according to plan
-// // 1000 tokens initially
-// // swap 300 from token0 to token1 with 2000 bps (20%)
-// // tokens1 will be 240
-// assert_eq!(token1.balance(&recipient), 700i128);
-// assert_eq!(token2.balance(&recipient), 240i128);
-// }
-
-// #[test]
-// fn swap_three_different_pools_no_fees() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 2_000_000,
-// token3.address.clone(),
-// 2_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 3_000_000,
-// token4.address.clone(),
-// 3_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &5_000i128);
-
-// assert_eq!(token1.balance(&recipient), 5_000i128);
-// assert_eq!(token4.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &operations, &None, &None, &5_000i128);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &5_000i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // 5. check if it goes according to plan
-// assert_eq!(token1.balance(&recipient), 0i128);
-// assert_eq!(
-// token4.balance(&recipient),
-// 4_956i128,
-// "token4 not as expected"
-// );
-// }
-
-// #[test]
-// fn swap_three_different_pools_with_fees() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// Some(1_000),
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 2_000_000,
-// token3.address.clone(),
-// 2_000_000,
-// Some(1_000),
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 3_000_000,
-// token4.address.clone(),
-// 3_000_000,
-// Some(1_000),
-// PoolType::Xyk,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &10_000i128);
-// assert_eq!(token1.balance(&recipient), 10_000i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &operations, &None, &None, &10_000i128);
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &10_000i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// // we start swapping 10_000 tokens
-
-// // token1 => token2
-// // (10_000 * 1_000_000) / (10_000 + 1_000_000)
-// // 10_000_000_000 / 1_010_000
-// // 9900.99009901
-// // 9901 - 10% = 8911
-
-// // token2 => token3
-// // (8911 * 2_000_000) / (8911 + 2_000_000)
-// // 17_822_000_000 / 2_008_911
-// // 8871.47315137
-// // 8872 - 10% = 7985
-
-// // token3 => token4
-// // (7985 * 3_000_000) / (7985 + 3_000_000)
-// // 23_955_000_000 / 3_007_985
-// // 7963.80301099
-// // 7964 - 10% = 7168
-// assert_eq!(token1.balance(&recipient), 0i128);
-// assert_eq!(token2.balance(&recipient), 0i128);
-// assert_eq!(token3.balance(&recipient), 0i128);
-// assert_eq!(token4.balance(&recipient), 7_168i128);
-// }
-
-// #[test]
-// #[should_panic(expected = "Multihop: Swap: operations is empty!")]
-// fn swap_panics_with_no_operations() {
-// let env = Env::default();
-// env.mock_all_auths();
-// let admin = Address::generate(&env);
-// let factory = Address::generate(&env);
-// let recipient = Address::generate(&env);
-
-// let token = deploy_token_contract(&env, &admin);
-// token.mint(&recipient, &50i128);
-
-// let multihop = deploy_multihop_contract(&env, admin, &factory);
-
-// let swap_vec = vec![&env];
-
-// // FIXM: Disable Referral struct
-// // multihop.swap(&recipient, &None, &swap_vec, &None, &None, &50i128);
-// multihop.swap(
-// &recipient,
-// &swap_vec,
-// &None,
-// &50i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-// }
-
-// #[test]
-// fn test_v_phx_vul_013_add_belief_price_for_every_swap() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 2_000_000,
-// token3.address.clone(),
-// 2_000_000,
-// None,
-// PoolType::Xyk,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 3_000_000,
-// token4.address.clone(),
-// 3_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &5_000i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: Some(1_050),
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: Some(2_100),
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: Some(3_150),
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &5_000i128,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// assert_eq!(
-// token1.balance(&recipient),
-// 0i128,
-// "token1 balance incorrect"
-// );
-// assert_eq!(
-// token4.balance(&recipient),
-// 4_956i128,
-// "token4 balance incorrect"
-// );
-// }
-
-// #[test]
-// #[should_panic(expected = "Error(Contract, #21)")]
-// fn test_swap_with_ask_asset_min_amount() {
-// let env = Env::default();
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 1_001_000i128);
-
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Xyk,
-// );
-
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &5_000i128);
-// assert_eq!(token1.balance(&recipient), 5_000i128);
-// assert_eq!(token2.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: Some(1_000),
-// };
-
-// let operations = vec![&env, swap1];
-
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &1_000,
-// &PoolType::Xyk,
-// &None::,
-// );
-
-// assert_eq!(token1.balance(&recipient), 4_000i128);
-// assert_eq!(token2.balance(&recipient), 1_000i128);
-
-// let greedy_swap = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: Some(10_000),
-// };
-// let operations = vec![&env, greedy_swap];
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &1_000,
-// &PoolType::Xyk,
-// &None::,
-// );
-// }
-
-// #[test]
-// #[ignore = "fails with NewtonMethodFailed "]
-// fn swap_three_equal_stable_pool() {
-// let env = Env::default();
-
-// let admin = Address::generate(&env);
-
-// env.mock_all_auths();
-// env.cost_estimate().budget().reset_unlimited();
-
-// let token1 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token2 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token3 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-// let token4 = deploy_and_mint_tokens(&env, &admin, 10_000_000i128);
-
-// // 1. deploy factory
-// let factory_client = deploy_and_initialize_factory(&env, admin.clone());
-
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token1.address.clone(),
-// 1_000_000,
-// token2.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Stable,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token2.address.clone(),
-// 1_000_000,
-// token3.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Stable,
-// );
-// deploy_and_initialize_pool(
-// &env,
-// &factory_client,
-// admin.clone(),
-// token3.address.clone(),
-// 1_000_000,
-// token4.address.clone(),
-// 1_000_000,
-// None,
-// PoolType::Stable,
-// );
-
-// // 4. swap with multihop
-// let multihop = deploy_multihop_contract(&env, admin.clone(), &factory_client.address);
-// let recipient = Address::generate(&env);
-// token1.mint(&recipient, &50i128);
-// assert_eq!(token1.balance(&recipient), 50i128);
-// assert_eq!(token4.balance(&recipient), 0i128);
-
-// let swap1 = Swap {
-// offer_asset: token1.address.clone(),
-// ask_asset: token2.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap2 = Swap {
-// offer_asset: token2.address.clone(),
-// ask_asset: token3.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-// let swap3 = Swap {
-// offer_asset: token3.address.clone(),
-// ask_asset: token4.address.clone(),
-// ask_asset_min_amount: None::,
-// };
-
-// let operations = vec![&env, swap1, swap2, swap3];
-
-// multihop.swap(
-// &recipient,
-// &operations,
-// &None,
-// &50i128,
-// &PoolType::Stable,
-// &None::,
-// );
-
-// assert_eq!(token1.balance(&recipient), 0i128);
-// assert_eq!(token4.balance(&recipient), 50i128);
-// }
-
-// #[test]
-// fn swap_exact_tokens_for_tokens_2_hops() {
-// let test = PhoenixAggregatorAdapterTest::setup();
-// test.env.cost_estimate().budget().reset_unlimited();
-// test.adapter_client.initialize(
-// &String::from_str(&test.env, "phoenix"),
-// &test.multihop_client.address);
-
-// let deadline: u64 = test.env.ledger().timestamp() + 1000;
-// let initial_user_balance = 20_000_000_000_000_000_000;
-// let amount_0: i128 = 1_000_000_000_000_000_000;
-// let amount_1: i128 = 4_000_000_000_000_000_000;
-// let amount_2: i128 = 8_000_000_000_000_000_000;
-
-
-// let mut path: Vec = Vec::new(&test.env);
-// path.push_back(test.token_0.address.clone());
-// path.push_back(test.token_1.address.clone());
-// path.push_back(test.token_2.address.clone());
-
-
-// let amount_in = 123_456_789;
-// // fee = 123456789 * 3 /1000 = 370370,367 = 370371 // USE CEILING
-// // amount_in less fee = 123456789- 370371 = 123086418
-// // First out = (123086418*4000000000000000000)/(1000000000000000000 + 123086418) = 492345671.939398935 = 492345671
-// let first_out = 492345671;
-// // fee = 492345671 * 3 /1000 = 1477037.013 = 1477038 // USE CEILING
-// // in less fee = 492345671 - 1477038 = 490868633
-// // Second out = (490868633*8000000000000000000)/(4000000000000000000 + 490868633) = 981737265.879523993 = 981737265
-// let expected_amount_out = 981737265;
-
-// let executed_amounts = test.adapter_client.swap_exact_tokens_for_tokens(
-// &amount_in, //amount_in
-// &0, // amount_out_min
-// &path, // path
-// &test.user, // to
-// &deadline); // deadline
-
-// assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
-// assert_eq!(executed_amounts.get(1).unwrap(), first_out);
-// assert_eq!(executed_amounts.get(2).unwrap(), expected_amount_out);
-
-// assert_eq!(test.token_0.balance(&test.user), initial_user_balance - amount_0 - amount_in);
-// assert_eq!(test.token_1.balance(&test.user), initial_user_balance - amount_1*2);
-// assert_eq!(test.token_2.balance(&test.user), initial_user_balance -amount_2 + expected_amount_out);
-// }
-
diff --git a/contracts/adapters/phoenix/src/test/swap_tokens_for_exact_tokens.rs b/contracts/adapters/phoenix/src/test/swap_tokens_for_exact_tokens.rs
deleted file mode 100644
index 23ae14e7..00000000
--- a/contracts/adapters/phoenix/src/test/swap_tokens_for_exact_tokens.rs
+++ /dev/null
@@ -1,281 +0,0 @@
-use soroban_sdk::{Address, vec, Vec};
-use crate::test::PhoenixAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-use soroban_sdk::testutils::Ledger;
-use super::phoenix_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_not_initialized() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client_not_initialized.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_out_negative() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &-1, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_in_max_negative() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &-1, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::NegativeNotAllowed))
- );
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_expired() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_client.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(
- result,
- Err(Ok(AdapterErrorDeployer::DeadlineExpired))
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_tokens_for_exact_tokens_invalid_path() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
-
- test.adapter_client.swap_tokens_for_exact_tokens( // add try_ to test the error
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInvalidPath)));
-}
-
-
-#[test]
-// Panics because LP does not exist; here panics with a Error(Storage, MissingValue)
-// We should implement a pair_address.exist() without needing to call the Factory
-#[should_panic]
-fn try_swap_tokens_for_exact_tokens_pair_does_not_exist() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_3.address.clone());
-
- test.adapter_client.swap_tokens_for_exact_tokens(
- &1, //amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_tokens_for_exact_tokens_insufficient_output_amount() {
- let test = PhoenixAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_client.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInsufficientOutputAmount)));
-}
-
-#[test]
-// #[should_panic(expected = "Amount of token in required is greater than the maximum amount expected")] // TODO: Test the imported error
-#[should_panic(expected = "HostError: Error(WasmVm, InvalidAction)")] //TODO: Why it changed using the deployer?
-fn try_swap_tokens_for_exact_tokens_amount_in_max_not_enough() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- // test.adapter_client_not_initialized.initialize(
- // &String::from_str(&test.env, "phoenix"),
- // &test.multihop_client.address);
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let expected_amount_out = 50;
- // From Phoenix tests
- let amount_in_should = 50;
-
- test.adapter_client.swap_tokens_for_exact_tokens(
- &expected_amount_out, // amount_out
- &(amount_in_should-1), // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
-
- // TODO: Evaluate if change panic message with error object (check benchmark)
- // assert_eq!(
- // result,
- // Err(Ok(AdapterError::NotInitialized))
- // );
-}
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_in_should() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let expected_amount_out = 50;
- // From Phoenix tests
- let amount_in_should = 50;
-
- let initial_user_balance_0 = test.token_0.balance(&test.user);
- let initial_user_balance_1 = test.token_1.balance(&test.user);
-
- let amounts = test.adapter_client.swap_tokens_for_exact_tokens(
- &expected_amount_out, //amount_out
- &(amount_in_should), // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- assert_eq!(amounts.get(0).unwrap(), amount_in_should);
- assert_eq!(amounts.get(1).unwrap(), expected_amount_out);
-
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance_0 - amount_in_should);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance_1 + expected_amount_out);
-
-}
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_3_hops() {
- let test = PhoenixAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let ledger_timestamp = 100;
- let desired_deadline = 1000;
- assert!(desired_deadline > ledger_timestamp);
- test.env.ledger().with_mut(|li| {
- li.timestamp = ledger_timestamp;
- });
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
- path.push_back(test.token_3.address.clone());
-
- let expected_amount_out = 50;
- // From Phoenix tests
- let amount_in_should =50;
-
- let initial_user_balance_0 = test.token_0.balance(&test.user);
- let initial_user_balance_1 = test.token_1.balance(&test.user);
- let initial_user_balance_2 = test.token_2.balance(&test.user);
- let initial_user_balance_3 = test.token_3.balance(&test.user);
-
- let amounts = test.adapter_client.swap_tokens_for_exact_tokens(
- &expected_amount_out, //amount_out
- &amount_in_should, // amount_in_max
- &path, // path
- &test.user, // to
- &desired_deadline, // deadline
- &None
- );
-
- assert_eq!(amounts.get(0).unwrap(), amount_in_should);
- assert_eq!(amounts.get(1).unwrap(), expected_amount_out);
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance_0 - amount_in_should);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance_1);
- assert_eq!(test.token_2.balance(&test.user), initial_user_balance_2);
- assert_eq!(test.token_3.balance(&test.user), initial_user_balance_3 + expected_amount_out);
-}
diff --git a/contracts/adapters/soroswap/Cargo.toml b/contracts/adapters/soroswap/Cargo.toml
deleted file mode 100644
index cb0b6c47..00000000
--- a/contracts/adapters/soroswap/Cargo.toml
+++ /dev/null
@@ -1,21 +0,0 @@
-[package]
-name = "soroswap-adapter"
-version = "0.1.0"
-edition = { workspace = true }
-description = "Soroswap-Adapter is a smart contract on the Soroban platform, tailored for use with the Soroswap-Aggregator. It facilitates efficient transaction routing through the Soroswap protocol."
-homepage = { workspace = true }
-repository = { workspace = true }
-authors = ["coderipper "]
-readme = "README.md"
-keywords = ["no_std", "wasm", "soroswap", "amm", "soroban"]
-publish = true
-
-[lib]
-crate-type = ["cdylib"]
-
-[dependencies]
-soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
-
-[dev-dependencies]
-soroban-sdk = { workspace = true, features = ["testutils"] }
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/Makefile b/contracts/adapters/soroswap/Makefile
deleted file mode 100644
index 4c57d94f..00000000
--- a/contracts/adapters/soroswap/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-default: build
-
-all: test
-
-test: build
- cargo test
-
-build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../../target/wasm32-unknown-unknown/release/soroswap_adapter.wasm
- @rm ../../target/wasm32-unknown-unknown/release/soroswap_adapter.wasm
-
-fmt:
- cargo fmt --all --check
-
-clean:
- cargo clean
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/README.md b/contracts/adapters/soroswap/README.md
deleted file mode 100644
index a6b7a8fd..00000000
--- a/contracts/adapters/soroswap/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# SoroswapAggregator: Soroswap Adapter
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/src/event.rs b/contracts/adapters/soroswap/src/event.rs
deleted file mode 100644
index bd5f10bc..00000000
--- a/contracts/adapters/soroswap/src/event.rs
+++ /dev/null
@@ -1,47 +0,0 @@
-//! Definition of the Events used in the contract
-use soroban_sdk::{contracttype, symbol_short, Env, Address, Vec, String};
-
-// INITIALIZED
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct InitializedEvent {
- pub state: bool,
- pub protocol_id: String,
- pub protocol_address: Address
-}
-
-pub(crate) fn initialized(e: &Env, state: bool, protocol_id: String, protocol_address: Address) {
-
- let event: InitializedEvent = InitializedEvent {
- state: state,
- protocol_id,
- protocol_address,
- };
- e.events().publish(("SoroswapAggregatorAdapter", symbol_short!("init")), event);
-}
-
-// SWAP EVENT
-#[contracttype]
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct SwapEvent {
- pub amount_in: i128,
- pub path: Vec,
- pub to: Address
-}
-
-pub(crate) fn swap(
- e: &Env,
- amount_in: i128,
- path: Vec,
- to: Address
-) {
- let event = SwapEvent {
- amount_in,
- path,
- to,
- };
-
- e.events().publish(("SoroswapAggregatorAdapter", symbol_short!("swap")), event);
-}
-
-// TODO IMPROVE EVENTS
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/src/lib.rs b/contracts/adapters/soroswap/src/lib.rs
deleted file mode 100644
index 7be47917..00000000
--- a/contracts/adapters/soroswap/src/lib.rs
+++ /dev/null
@@ -1,117 +0,0 @@
-#![no_std]
-use soroban_sdk::{contract, contractimpl, Address, Env, Vec, String, BytesN};
-
-mod event;
-mod storage;
-mod protocol_interface;
-mod test;
-
-use storage::{
- extend_instance_ttl,
- set_initialized,
- is_initialized,
- set_protocol_id,
- get_protocol_id,
- set_protocol_address,
- get_protocol_address,
-};
-use adapter_interface::{AdapterTrait, AdapterError};
-use protocol_interface::{protocol_swap_exact_tokens_for_tokens,
- protocol_swap_tokens_for_exact_tokens};
-
-fn check_initialized(e: &Env) -> Result<(), AdapterError> {
- if is_initialized(e) {
- Ok(())
- } else {
- Err(AdapterError::NotInitialized)
- }
-}
-
-#[contract]
-struct SoroswapAggregatorAdapter;
-
-#[contractimpl]
-impl AdapterTrait for SoroswapAggregatorAdapter {
- fn initialize(
- e: Env,
- protocol_id: String,
- protocol_address: Address,
- ) -> Result<(), AdapterError> {
- if check_initialized(&e).is_ok() {
- return Err(AdapterError::AlreadyInitialized);
- }
-
- set_protocol_id(&e, protocol_id.clone());
- set_protocol_address(&e, protocol_address.clone());
-
- set_initialized(&e);
- event::initialized(&e, true, protocol_id, protocol_address);
- extend_instance_ttl(&e);
- Ok(())
- }
-
- fn swap_exact_tokens_for_tokens(
- e: Env,
- amount_in: i128,
- amount_out_min: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>,
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- let swap_result = protocol_swap_exact_tokens_for_tokens(
- &e,
- &amount_in,
- &amount_out_min,
- &path,
- &to,
- &deadline,
- )?;
-
- event::swap(&e, amount_in, path, to);
- Ok(swap_result)
- }
-
- fn swap_tokens_for_exact_tokens(
- e: Env,
- amount_out: i128,
- amount_in_max: i128,
- path: Vec,
- to: Address,
- deadline: u64,
- _bytes: Option>>,
- ) -> Result, AdapterError> {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- to.require_auth();
-
- let swap_result = protocol_swap_tokens_for_exact_tokens(
- &e,
- &amount_out,
- &amount_in_max,
- &path,
- &to,
- &deadline,
- )?;
-
- event::swap(&e, amount_in_max, path, to);
- Ok(swap_result)
- }
-
- /* *** Read only functions: *** */
- fn get_protocol_id(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_id(e)?)
- }
-
- fn get_protocol_address(e: &Env) -> Result {
- check_initialized(&e)?;
- extend_instance_ttl(&e);
- Ok(get_protocol_address(e)?)
- }
-}
diff --git a/contracts/adapters/soroswap/src/protocol_interface.rs b/contracts/adapters/soroswap/src/protocol_interface.rs
deleted file mode 100644
index 6aa39072..00000000
--- a/contracts/adapters/soroswap/src/protocol_interface.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-use soroban_sdk::{Env, Address, Vec};
-use crate::storage::get_protocol_address;
-use adapter_interface::AdapterError;
-
-soroban_sdk::contractimport!(
- file = "./soroswap_contracts/soroswap_router.wasm"
-);
-pub type SoroswapRouterClient<'a> = Client<'a>;
-
-pub fn protocol_swap_exact_tokens_for_tokens(
- e: &Env,
- amount_in: &i128,
- amount_out_min: &i128,
- path: &Vec,
- to: &Address,
- deadline: &u64,
-) -> Result, AdapterError> {
-
- let soroswap_router_address = get_protocol_address(&e)?;
- let soroswap_router_client = SoroswapRouterClient::new(&e, &soroswap_router_address);
-
- Ok(soroswap_router_client.swap_exact_tokens_for_tokens(
- &amount_in,
- &amount_out_min,
- &path,
- &to,
- &deadline
- ))
-}
-
-pub fn protocol_swap_tokens_for_exact_tokens(
- e: &Env,
- amount_out: &i128,
- amount_in_max: &i128,
- path: &Vec,
- to: &Address,
- deadline: &u64,
-) -> Result, AdapterError> {
-
- let soroswap_router_address = get_protocol_address(&e)?;
- let soroswap_router_client = SoroswapRouterClient::new(&e, &soroswap_router_address);
-
- Ok(soroswap_router_client.swap_tokens_for_exact_tokens(
- &amount_out,
- &amount_in_max,
- &path,
- &to,
- &deadline
- ))
-}
diff --git a/contracts/adapters/soroswap/src/storage.rs b/contracts/adapters/soroswap/src/storage.rs
deleted file mode 100644
index dee8a44a..00000000
--- a/contracts/adapters/soroswap/src/storage.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use soroban_sdk::{contracttype, Env, Address, String};
-use adapter_interface::AdapterError;
-
-#[derive(Clone)]
-#[contracttype]
-
-enum DataKey {
- Initialized,
- ProtocolId,
- ProtocolAddress,
-}
-
-const DAY_IN_LEDGERS: u32 = 17280;
-const INSTANCE_BUMP_AMOUNT: u32 = 60 * DAY_IN_LEDGERS;
-const INSTANCE_LIFETIME_THRESHOLD: u32 = INSTANCE_BUMP_AMOUNT - DAY_IN_LEDGERS;
-
-pub fn extend_instance_ttl(e: &Env) {
- e.storage()
- .instance()
- .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT);
-}
-
-/* INITIALIZED */
-pub fn set_initialized(e: &Env) {
- e.storage().instance().set(&DataKey::Initialized, &true);
-}
-
-pub fn is_initialized(e: &Env) -> bool {
- e.storage().instance().has(&DataKey::Initialized)
-}
-
-
-/* PROTOCOL ID - STRING */
-pub fn set_protocol_id(e: &Env, protocol_id: String) {
- e.storage().instance().set(&DataKey::ProtocolId, &protocol_id);
-}
-
-pub fn get_protocol_id(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolId).ok_or(AdapterError::NotInitialized)
-}
-
-
-/* PROTOCOL ADDRESS */
-pub fn set_protocol_address(e: &Env, address: Address) {
- e.storage().instance().set(&DataKey::ProtocolAddress, &address);
-}
-
-pub fn get_protocol_address(e: &Env) -> Result {
- e.storage().instance().get(&DataKey::ProtocolAddress).ok_or(AdapterError::NotInitialized)
-}
-
diff --git a/contracts/adapters/soroswap/src/test.rs b/contracts/adapters/soroswap/src/test.rs
deleted file mode 100644
index 43e5e977..00000000
--- a/contracts/adapters/soroswap/src/test.rs
+++ /dev/null
@@ -1,105 +0,0 @@
-#![cfg(test)]
-extern crate std;
-pub mod soroswap_setup;
-
-use soroban_sdk::{
- Env,
- Address,
- BytesN,
- Symbol,
- String,
- Vec,
- Val,
- IntoVal
-};
-use crate::{SoroswapAggregatorAdapter, SoroswapAggregatorAdapterClient};
-use soroswap_setup::{SoroswapTest, router, factory, token::TokenClient};
-use factory::SoroswapFactoryClient;
-use router::SoroswapRouterClient;
-
-mod deployer_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
- pub type DeployerClient<'a> = Client<'a>;
-}
-use deployer_contract::DeployerClient;
-
-fn create_deployer<'a>(e: &Env) -> DeployerClient<'a> {
- let deployer_address = &e.register(deployer_contract::WASM, ());
- let deployer = DeployerClient::new(e, deployer_address);
- deployer
-}
-
-// SoroswapAggregatorAdapter Contract
-fn create_soroswap_aggregator_adapter<'a>(e: &Env) -> SoroswapAggregatorAdapterClient<'a> {
- SoroswapAggregatorAdapterClient::new(e, &e.register(SoroswapAggregatorAdapter {}, ()))
-}
-
-pub mod soroswap_adapter_contract {
- soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/soroswap_adapter.optimized.wasm");
- pub type SoroswapAggregatorAdapterClientFromWasm<'a> = Client<'a>;
-}
-use soroswap_adapter_contract::SoroswapAggregatorAdapterClientFromWasm;
-
-
-pub struct SoroswapAggregatorAdapterTest<'a> {
- env: Env,
- adapter_contract: SoroswapAggregatorAdapterClientFromWasm<'a>,
- adapter_contract_not_initialized: SoroswapAggregatorAdapterClient<'a>,
- router_contract: SoroswapRouterClient<'a>,
- factory_contract: SoroswapFactoryClient<'a>,
- token_0: TokenClient<'a>,
- token_1: TokenClient<'a>,
- token_2: TokenClient<'a>,
- user: Address,
- // admin: Address
-}
-
-impl<'a> SoroswapAggregatorAdapterTest<'a> {
- fn setup() -> Self {
- let test = SoroswapTest::soroswap_setup();
-
- let wasm_hash = test.env.deployer().upload_contract_wasm(soroswap_adapter_contract::WASM);
- let deployer_client = create_deployer(&test.env);
-
- let adapter_contract_not_initialized = create_soroswap_aggregator_adapter(&test.env);
-
- // Deploy contract using deployer, and include an init function to call.
- let salt = BytesN::from_array(&test.env, &[0; 32]);
- let init_fn = Symbol::new(&test.env, &("initialize"));
-
- let protocol_id = String::from_str(&test.env, "soroswap");
- let protocol_address = test.router_contract.address.clone();
-
- // Convert the arguments into a Vec
- let init_fn_args: Vec = (protocol_id.clone(), protocol_address.clone()).into_val(&test.env);
-
- test.env.mock_all_auths();
- let (contract_id, _init_result) = deployer_client.deploy(
- &deployer_client.address,
- &wasm_hash,
- &salt,
- &init_fn,
- &init_fn_args,
- );
-
- let adapter_contract = soroswap_adapter_contract::Client::new(&test.env, &contract_id);
-
-
- SoroswapAggregatorAdapterTest {
- env: test.env,
- adapter_contract,
- adapter_contract_not_initialized,
- router_contract: test.router_contract,
- factory_contract: test.factory_contract,
- token_0: test.token_0,
- token_1: test.token_1,
- token_2: test.token_2,
- user: test.user,
- // admin: test.admin
- }
- }
-}
-
-pub mod initialize;
-pub mod swap_exact_tokens_for_tokens;
-pub mod swap_tokens_for_exact_tokens;
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/src/test/initialize.rs b/contracts/adapters/soroswap/src/test/initialize.rs
deleted file mode 100644
index 8f2326e4..00000000
--- a/contracts/adapters/soroswap/src/test/initialize.rs
+++ /dev/null
@@ -1,75 +0,0 @@
-use soroban_sdk::String;
-use crate::test::SoroswapAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-use super::soroswap_adapter_contract::AdapterError as AdapterErrorDeployer;
-
-#[test]
-fn test_initialize_and_get_values() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- test.adapter_contract_not_initialized.initialize(
- &String::from_str(&test.env, "soroswap"),
- &test.router_contract.address);
-
- let protocol_id = test.adapter_contract_not_initialized.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "soroswap"));
-
- let protocol_address = test.adapter_contract_not_initialized.get_protocol_address();
- assert_eq!(protocol_address, test.router_contract.address);
-}
-
-#[test]
-fn test_get_values() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let protocol_id = test.adapter_contract.get_protocol_id();
- assert_eq!(protocol_id, String::from_str(&test.env, "soroswap"));
-
- let protocol_address = test.adapter_contract.get_protocol_address();
- assert_eq!(protocol_address, test.router_contract.address);
-}
-
-// test initialize twice
-#[test]
-fn test_initialize_twice() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- test.adapter_contract_not_initialized.initialize(
- &String::from_str(&test.env, "soroswap"),
- &test.router_contract.address);
-
- let result = test.adapter_contract_not_initialized.try_initialize(
- &String::from_str(&test.env, "soroswap"),
- &test.router_contract.address);
-
- assert_eq!(result,Err(Ok(AdapterError::AlreadyInitialized)));
-}
-
-#[test]
-fn test_initialize_twice_deployer() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract.try_initialize(
- &String::from_str(&test.env, "soroswap"),
- &test.router_contract.address);
-
- assert_eq!(result,Err(Ok(AdapterErrorDeployer::AlreadyInitialized)));
-}
-
-// test get protocol id not initialized
-#[test]
-fn test_get_protocol_id_not_initialized() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract_not_initialized.try_get_protocol_id();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
-
-// test get protocol address not initialized
-#[test]
-fn test_get_protocol_address_not_initialized() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let result = test.adapter_contract_not_initialized.try_get_protocol_address();
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-}
diff --git a/contracts/adapters/soroswap/src/test/soroswap_setup.rs b/contracts/adapters/soroswap/src/test/soroswap_setup.rs
deleted file mode 100644
index 6de8f55b..00000000
--- a/contracts/adapters/soroswap/src/test/soroswap_setup.rs
+++ /dev/null
@@ -1,185 +0,0 @@
-#![cfg(test)]
-extern crate std;
-use soroban_sdk::{
- Env,
- BytesN,
- Address,
- testutils::{
- Address as _,
- Ledger,
- },
-};
-
-// Token Contract
-pub mod token {
- soroban_sdk::contractimport!(file = "./soroswap_contracts/soroban_token_contract.wasm");
- pub type TokenClient<'a> = Client<'a>;
-}
-use token::TokenClient;
-
-pub fn create_token_contract<'a>(e: &Env, admin: & Address) -> TokenClient<'a> {
- TokenClient::new(&e, &e.register_stellar_asset_contract_v2(admin.clone()).address())
-}
-
-// Pair Contract
-pub mod pair {
- soroban_sdk::contractimport!(file = "./soroswap_contracts/soroswap_pair.wasm");
-// pub type SoroswapPairClient<'a> = Client<'a>;
-}
-// use pair::SoroswapPairClient;
-
-
-fn pair_contract_wasm(e: &Env) -> BytesN<32> {
- soroban_sdk::contractimport!(
- file = "./soroswap_contracts/soroswap_pair.wasm"
- );
- e.deployer().upload_contract_wasm(WASM)
-}
-
-// SoroswapFactory Contract
-pub mod factory {
- soroban_sdk::contractimport!(file = "./soroswap_contracts/soroswap_factory.wasm");
- pub type SoroswapFactoryClient<'a> = Client<'a>;
-}
-use factory::SoroswapFactoryClient;
-
-fn create_soroswap_factory<'a>(e: & Env, setter: & Address) -> SoroswapFactoryClient<'a> {
- let pair_hash = pair_contract_wasm(&e);
- let factory_address = &e.register(factory::WASM, ());
- let factory = SoroswapFactoryClient::new(e, factory_address);
- factory.initialize(&setter, &pair_hash);
- factory
-}
-
-// SoroswapRouter Contract
-pub mod router {
- soroban_sdk::contractimport!(file = "./soroswap_contracts/soroswap_router.wasm");
- pub type SoroswapRouterClient<'a> = Client<'a>;
-}
-use router::SoroswapRouterClient;
-
-// SoroswapRouter Contract
-fn create_soroswap_router<'a>(e: &Env) -> SoroswapRouterClient<'a> {
- let router_address = &e.register(router::WASM, ());
- let router = SoroswapRouterClient::new(e, router_address);
- router
-}
-
-pub struct SoroswapTest<'a> {
- pub env: Env,
- pub router_contract: SoroswapRouterClient<'a>,
- pub factory_contract: SoroswapFactoryClient<'a>,
- pub token_0: TokenClient<'a>,
- pub token_1: TokenClient<'a>,
- pub token_2: TokenClient<'a>,
- pub user: Address,
- // pub admin: Address
-}
-
-impl<'a> SoroswapTest<'a> {
- pub fn soroswap_setup() -> Self {
- let env = Env::default();
- env.mock_all_auths();
- let router_contract = create_soroswap_router(&env);
-
- let initial_user_balance = 20_000_000_000_000_000_000;
-
- let admin = Address::generate(&env);
- let user = Address::generate(&env);
- assert_ne!(admin, user);
-
- let token_0 = create_token_contract(&env, &admin);
- let token_1 = create_token_contract(&env, &admin);
- let token_2 = create_token_contract(&env, &admin);
-
- token_0.mint(&user, &initial_user_balance);
- token_1.mint(&user, &initial_user_balance);
- token_2.mint(&user, &initial_user_balance);
-
- let factory_contract = create_soroswap_factory(&env, &admin);
- env.cost_estimate().budget().reset_unlimited();
-
- let ledger_timestamp = 100;
- let desired_deadline = 1000;
-
- assert!(desired_deadline > ledger_timestamp);
-
- env.ledger().with_mut(|li| {
- li.timestamp = ledger_timestamp;
- });
-
- let amount_0: i128 = 1_000_000_000_000_000_000;
- let amount_1: i128 = 4_000_000_000_000_000_000;
- let amount_2: i128 = 8_000_000_000_000_000_000;
- let expected_liquidity: i128 = 2_000_000_000_000_000_000;
-
- // Check initial user value of every token:
- assert_eq!(token_0.balance(&user), initial_user_balance);
- assert_eq!(token_1.balance(&user), initial_user_balance);
- assert_eq!(token_2.balance(&user), initial_user_balance);
-
- router_contract.initialize(&factory_contract.address);
-
- assert_eq!(factory_contract.pair_exists(&token_0.address, &token_1.address), false);
- let (added_token_0_0, added_token_1_0, added_liquidity_0_1) = router_contract.add_liquidity(
- &token_0.address, // token_a: Address,
- &token_1.address, // token_b: Address,
- &amount_0, // amount_a_desired: i128,
- &amount_1, // amount_b_desired: i128,
- &0, // amount_a_min: i128,
- &0 , // amount_b_min: i128,
- &user, // to: Address,
- &desired_deadline// deadline: u64,
- );
-
- let (added_token_1_1, added_token_2_0, added_liquidity_1_2) = router_contract.add_liquidity(
- &token_1.address, // token_a: Address,
- &token_2.address, // token_b: Address,
- &amount_1, // amount_a_desired: i128,
- &amount_2, // amount_b_desired: i128,
- &0, // amount_a_min: i128,
- &0 , // amount_b_min: i128,
- &user, // to: Address,
- &desired_deadline// deadline: u64,
- );
-
- // let (added_token_0_1, added_token_2_1, added_liquidity_0_2) = router_contract.add_liquidity(
- // &token_0.address, // token_a: Address,
- // &token_2.address, // token_b: Address,
- // &amount_0, // amount_a_desired: i128,
- // &amount_1, // amount_b_desired: i128,
- // &0, // amount_a_min: i128,
- // &0 , // amount_b_min: i128,
- // &user, // to: Address,
- // &desired_deadline// deadline: u64,
- // );
-
- static MINIMUM_LIQUIDITY: i128 = 1000;
-
- assert_eq!(added_token_0_0, amount_0);
- assert_eq!(added_token_1_0, amount_1);
- assert_eq!(added_token_1_1, amount_1);
- assert_eq!(added_token_2_0, amount_2);
- // assert_eq!(added_token_0_1, amount_0);
- // assert_eq!(added_token_2_1, amount_1);
-
- assert_eq!(added_liquidity_0_1, expected_liquidity.checked_sub(MINIMUM_LIQUIDITY).unwrap());
- assert_eq!(added_liquidity_1_2, 5656854249492379195);
- // assert_eq!(added_liquidity_0_2, expected_liquidity.checked_sub(MINIMUM_LIQUIDITY).unwrap());
-
- assert_eq!(token_0.balance(&user), 19_000_000_000_000_000_000);
- assert_eq!(token_1.balance(&user), 12_000_000_000_000_000_000);
- assert_eq!(token_2.balance(&user), 12_000_000_000_000_000_000);
-
- SoroswapTest {
- env,
- router_contract,
- factory_contract,
- token_0,
- token_1,
- token_2,
- user,
- // admin
- }
- }
-}
\ No newline at end of file
diff --git a/contracts/adapters/soroswap/src/test/swap_exact_tokens_for_tokens.rs b/contracts/adapters/soroswap/src/test/swap_exact_tokens_for_tokens.rs
deleted file mode 100644
index ecd2d01e..00000000
--- a/contracts/adapters/soroswap/src/test/swap_exact_tokens_for_tokens.rs
+++ /dev/null
@@ -1,234 +0,0 @@
-use soroban_sdk::{Address, vec, Vec};
-use crate::test::SoroswapAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-
-#[test]
-fn swap_exact_tokens_for_tokens_not_initialized() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_contract_not_initialized.try_swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #502)")]
-fn swap_exact_tokens_for_tokens_amount_in_negative() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &-1, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #502)")]
-fn swap_exact_tokens_for_tokens_amount_out_min_negative() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &-1, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #503)")]
-fn swap_exact_tokens_for_tokens_expired() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_invalid_path() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_exact_tokens_for_tokens_insufficient_input_amount() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &0, // amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInsufficientInputAmount)));
-}
-
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn swap_exact_tokens_for_tokens_insufficient_output_amount() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let amount_in = 1_000_000;
-
- //(1000000×997×4000000000000000000)÷(1000000000000000000×1000+997×1000000) = 3987999,9
-
- let expected_amount_out = 3987999;
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount_in, // amount_in
- &(expected_amount_out + 1), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(
- // result,
- // Err(Ok(CombinedRouterError::RouterInsufficientOutputAmount))
- // );
-}
-
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_enough_output_amount_soroswap_protocol() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let amount_in = 1_000_000;
-
- //(1000000×997×4000000000000000000)÷(1000000000000000000×1000+997×1000000) = 3987999,9
-
- let expected_amount_out = 3987999;
-
- test.env.cost_estimate().budget().reset_unlimited();
- let executed_amounts = test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount_in, //amount_in
- &(expected_amount_out), // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), expected_amount_out);
-
-}
-
-
-#[test]
-fn swap_exact_tokens_for_tokens_2_hops_soroswap_protocol() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
- let initial_user_balance = 20_000_000_000_000_000_000;
- let amount_0: i128 = 1_000_000_000_000_000_000;
- let amount_1: i128 = 4_000_000_000_000_000_000;
- let amount_2: i128 = 8_000_000_000_000_000_000;
-
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
-
-
- let amount_in = 123_456_789;
- // fee = 123456789 * 3 /1000 = 370370,367 = 370371 // USE CEILING
- // amount_in less fee = 123456789- 370371 = 123086418
- // First out = (123086418*4000000000000000000)/(1000000000000000000 + 123086418) = 492345671.939398935 = 492345671
- let first_out = 492345671;
- // fee = 492345671 * 3 /1000 = 1477037.013 = 1477038 // USE CEILING
- // in less fee = 492345671 - 1477038 = 490868633
- // Second out = (490868633*8000000000000000000)/(4000000000000000000 + 490868633) = 981737265.879523993 = 981737265
- let expected_amount_out = 981737265;
-
- let executed_amounts = test.adapter_contract.swap_exact_tokens_for_tokens(
- &amount_in, //amount_in
- &0, // amount_out_min
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- assert_eq!(executed_amounts.get(0).unwrap(), amount_in);
- assert_eq!(executed_amounts.get(1).unwrap(), first_out);
- assert_eq!(executed_amounts.get(2).unwrap(), expected_amount_out);
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance - amount_0 - amount_in);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance - amount_1*2);
- assert_eq!(test.token_2.balance(&test.user), initial_user_balance -amount_2 + expected_amount_out);
-}
-
diff --git a/contracts/adapters/soroswap/src/test/swap_tokens_for_exact_tokens.rs b/contracts/adapters/soroswap/src/test/swap_tokens_for_exact_tokens.rs
deleted file mode 100644
index 14a88ecd..00000000
--- a/contracts/adapters/soroswap/src/test/swap_tokens_for_exact_tokens.rs
+++ /dev/null
@@ -1,344 +0,0 @@
-use soroban_sdk::{Address, vec, Vec};
-use soroban_sdk::testutils::Ledger;
-use crate::test::SoroswapAggregatorAdapterTest;
-use adapter_interface::AdapterError;
-
-#[test]
-fn swap_tokens_for_exact_tokens_not_initialized() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
- let path: Vec = Vec::new(&test.env);
-
- let result = test.adapter_contract_not_initialized.try_swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-
- assert_eq!(result,Err(Ok(AdapterError::NotInitialized)));
-
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #502)")]
-fn swap_tokens_for_exact_tokens_amount_out_negative() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &-1, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #502)")]
-fn swap_tokens_for_exact_tokens_amount_in_max_negative() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &-1, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-#[test]
-#[should_panic(expected = "HostError: Error(Contract, #503)")]
-fn swap_tokens_for_exact_tokens_expired() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let path: Vec = Vec::new(&test.env);
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &0, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_tokens_for_exact_tokens_invalid_path() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let path: Vec = vec![&test.env, test.token_0.address.clone()];
-
- test.adapter_contract.swap_tokens_for_exact_tokens( // add try_ to test the error
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInvalidPath)));
-}
-
-
-#[test]
-// Panics because LP does not exist; here panics with a Error(Storage, MissingValue)
-// We should implement a pair_address.exist() without needing to call the Factory
-#[should_panic]
-fn swap_tokens_for_exact_tokens_pair_does_not_exist() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &0, //amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-}
-
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn try_swap_tokens_for_exact_tokens_insufficient_output_amount() {
- let test = SoroswapAggregatorAdapterTest::setup();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
-
- test.env.cost_estimate().budget().reset_unlimited();
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &0, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
- // assert_eq!(result, Err(Ok(CombinedRouterError::LibraryInsufficientOutputAmount)));
-}
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn swap_tokens_for_exact_tokens_amount_in_max_not_enough() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let expected_amount_out = 5_000_000;
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &expected_amount_out, // amount_out
- &0, // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(
- // result,
- // Err(Ok(CombinedRouterError::RouterExcessiveInputAmount))
- // );
-}
-
-#[test]
-#[should_panic] // TODO: Test the imported error
-fn swap_tokens_for_exact_tokens_amount_in_max_not_enough_amount_in_should_minus_1() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
-
- let expected_amount_out = 5_000_000;
- let amount_in_should = test
- .router_contract
- .router_get_amounts_in(&expected_amount_out, &path)
- .get(0)
- .unwrap();
-
- test.adapter_contract.swap_tokens_for_exact_tokens(
- &expected_amount_out, // amount_out
- &(amount_in_should - 1), // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
- );
-
- // assert_eq!(
- // result,
- // Err(Ok(CombinedRouterError::RouterExcessiveInputAmount))
- // );
-}
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_amount_in_should() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let deadline: u64 = test.env.ledger().timestamp() + 1000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
-
- let amount_0: i128 = 1_000_000_000_000_000_000;
- let amount_1: i128 = 4_000_000_000_000_000_000;
-
- let expected_amount_out = 5_000_000;
- let amount_in_should = test.router_contract.router_get_amounts_in(&expected_amount_out, &path).get(0).unwrap();
-
- let amounts = test.adapter_contract.swap_tokens_for_exact_tokens(
- &expected_amount_out, //amount_out
- &(amount_in_should), // amount_in_max
- &path, // path
- &test.user, // to
- &deadline, // deadline
- &None
-
-
-); assert_eq!(amounts.get(0).unwrap(), amount_in_should);
- assert_eq!(amounts.get(1).unwrap(), expected_amount_out);
-
- let initial_user_balance = 20_000_000_000_000_000_000;
-
- // pub fn get_amount_in(amount_out: i128, reserve_in: i128, reserve_out: i128) -> Result {
- // if amount_out <= 0 {
- // return Err(SoroswapLibraryError::InsufficientOutputAmount);
- // }
- // if reserve_in <= 0 || reserve_out <= 0 {
- // return Err(SoroswapLibraryError::InsufficientLiquidity);
- // }
- // let numerator = reserve_in.checked_mul(amount_out).unwrap().checked_mul(1000).unwrap();
- // let denominator = reserve_out.checked_sub(amount_out).unwrap().checked_mul(997).unwrap();
- // Ok(numerator.checked_ceiling_div(denominator).unwrap().checked_add(1).unwrap())
- // }
-
- // numerator = 1_000_000_000_000_000_000 * 5_000_000 * 1_000 = 5_000_000_000_000_000_000_000_000_000
- // denominator = (4000000000000000000 - 5000000) * 997 = 3999999999995000000 * 997 = 3987999999995015000000
-
- // num/den +1 = 5000000000000000000000000000 / 3987999999995015000000 +1 = ceil(1253761.283853122) +1
- // = 1253762 + 1 = 1253763
-
- let expected_amount_0_in = 1253763;
- assert_eq!(amounts.get(0).unwrap(), expected_amount_0_in);
-
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance - amount_0 - expected_amount_0_in);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance - amount_1*2 + expected_amount_out);
-
- let pair_address = test.factory_contract.get_pair(&test.token_0.address, &test.token_1.address);
- assert_eq!(test.token_0.balance(&pair_address), amount_0 + expected_amount_0_in);
- assert_eq!(test.token_1.balance(&pair_address), amount_1 - expected_amount_out);
-
-}
-
-
-#[test]
-fn swap_tokens_for_exact_tokens_2_hops() {
- let test = SoroswapAggregatorAdapterTest::setup();
- test.env.cost_estimate().budget().reset_unlimited();
-
- let ledger_timestamp = 100;
- let desired_deadline = 1000;
- assert!(desired_deadline > ledger_timestamp);
- test.env.ledger().with_mut(|li| {
- li.timestamp = ledger_timestamp;
- });
-
- let initial_user_balance = 20_000_000_000_000_000_000;
-
- let amount_0: i128 = 1_000_000_000_000_000_000;
- let amount_1: i128 = 4_000_000_000_000_000_000;
- let amount_2: i128 = 8_000_000_000_000_000_000;
-
- let mut path: Vec = Vec::new(&test.env);
- path.push_back(test.token_0.address.clone());
- path.push_back(test.token_1.address.clone());
- path.push_back(test.token_2.address.clone());
-
- let expected_amount_out = 123_456_789;
- // pair token_1, token_2
- // token_1 is r_in, token_2 is r_out
- // (r_in*amount_out)*1000 / (r_out - amount_out)*997
- // (4_000_000_000_000_000_000*123456789)*1000 / ((8_000_000_000_000_000_000 - 123456789)*997) + 1 =
- // 493827156000000000000000000000 / (7999999999876543211 * 997) +1 =
- // 493827156000000000000000000000 / 7975999999876913581367 +1 = CEIL(61914136.911687662) +1 = 61914137 +1 = 61914138
- //
- let middle_amount_in =61914138;
-
- // pair token_0, token_1
- // token_0 is r_in, token_1 is r_out
- // first amount in =
- // (1_000_000_000_000_000_000*61914138)*1000 / ((4_000_000_000_000_000_000 - 61914138)*997) + 1 =
- // 61914138000000000000000000000 / (3999999999938085862 * 997) + 1 =
- // CEIL (61914138000000000000000000000 / 3987999999938271604414) +1 = ceil(15525109.8) +1 = 15525111
-
- let amount_in_should =15525111;
-
- let amounts = test.adapter_contract.swap_tokens_for_exact_tokens(
- &expected_amount_out, //amount_out
- &amount_in_should, // amount_in_max
- &path, // path
- &test.user, // to
- &desired_deadline, // deadline
- &None
-
-
-
-); assert_eq!(amounts.get(0).unwrap(), amount_in_should);
- assert_eq!(amounts.get(1).unwrap(), middle_amount_in);
- assert_eq!(amounts.get(2).unwrap(), expected_amount_out);
-
- assert_eq!(test.token_0.balance(&test.user), initial_user_balance - amount_0 - amount_in_should);
- assert_eq!(test.token_1.balance(&test.user), initial_user_balance - amount_1*2);
- assert_eq!(test.token_2.balance(&test.user), initial_user_balance - amount_2 + expected_amount_out);
-
- let pair_address_0_1 = test.factory_contract.get_pair(&test.token_0.address, &test.token_1.address);
- assert_eq!(test.token_0.balance(&pair_address_0_1), amount_0 + amount_in_should);
- assert_eq!(test.token_1.balance(&pair_address_0_1), amount_1 - middle_amount_in);
-
- let pair_address_1_2 = test.factory_contract.get_pair(&test.token_1.address, &test.token_2.address);
- assert_eq!(test.token_1.balance(&pair_address_1_2), amount_1 + middle_amount_in);
- assert_eq!(test.token_2.balance(&pair_address_1_2), amount_2 - expected_amount_out);
-}
diff --git a/contracts/aggregator/Cargo.toml b/contracts/aggregator/Cargo.toml
index ae5499c0..5de05358 100644
--- a/contracts/aggregator/Cargo.toml
+++ b/contracts/aggregator/Cargo.toml
@@ -16,7 +16,6 @@ crate-type = ["cdylib"]
[dependencies]
soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
[dev-dependencies]
soroban-sdk = { workspace = true, features = ["testutils"] }
diff --git a/contracts/aggregator/Makefile b/contracts/aggregator/Makefile
index 72cde85d..0e79aae8 100644
--- a/contracts/aggregator/Makefile
+++ b/contracts/aggregator/Makefile
@@ -6,9 +6,9 @@ test: build
cargo test
build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../target/wasm32-unknown-unknown/release/soroswap_aggregator.wasm
- @rm ../target/wasm32-unknown-unknown/release/soroswap_aggregator.wasm
+ cargo build --target wasm32v1-none --release
+ stellar contract optimize --wasm ../target/wasm32v1-none/release/soroswap_aggregator.wasm
+ @rm ../target/wasm32v1-none/release/soroswap_aggregator.wasm
fmt:
cargo fmt --all --check
diff --git a/contracts/aggregator/aqua_contracts/README.md b/contracts/aggregator/aqua_contracts/README.md
deleted file mode 100644
index cf3b738a..00000000
--- a/contracts/aggregator/aqua_contracts/README.md
+++ /dev/null
@@ -1,112 +0,0 @@
-# Aqua Contracts:
-- Router: https://stellar.expert/explorer/public/contract/CBQDHNBFBZYE4MKPWBSJOPIYLW4SFSXAXUTSXJN76GNKYVYPCKWC6QUK
-- Swap Chained
-- Swap directo tambien lo envia como swap chained
-
-Swap 3 hops variable
-https://stellar.expert/explorer/public/tx/aef69e0158e9fe689b123f1b174b2133b34f98da4a29f3b972b6b91fd9791b1c
-swap_chained(
- GA3C…T5SO,
- [
- [
- [CAS3…OWMA, CAUI…OJPK],
- suAvz8pslvitXL2E53hKd3s22clqJFlALE9FhGKqt/A=bytes,
- CAUI…OJPK // the next token in the hop
- ],
- [
- [CAUI…OJPK, CDOF…U2P4],
- suAvz8pslvitXL2E53hKd3s22clqJFlALE9FhGKqt/A=bytes,
- CDOF…U2P4 // the next token in the hop
- ],
- [
- [CCW6…MI75, CDOF…U2P4],
- bi7nVssQUCDL1liedhAVGYxMhfLoXh5NN/KAtit4gw4=bytes,
- CCW6…MI75 // the final token to obtain
- ]
-
- ],
- CAS3…OWMA,
- 100000000u128,
- 25701927u128) → 25961542u128
-
-Swap 1 hop variable
-https://stellar.expert/explorer/public/tx/4724ed29ae79bf3c8ca031e10564916a878df8a9e5215980e92d5a467ef4a622
-
-swap_chained(
- GA3C…T5SO,
- [
- [
- [CAS3…OWMA, CAUI…OJPK],
- suAvz8pslvitXL2E53hKd3s22clqJFlALE9FhGKqt/A=bytes,
- CAUI…OJPK // the final token to obtain
- ]
- ],
- CAS3…OWMA,
- 100000000u128,
- 37785920757u128) → 38167596724u12
-
-
-Swap 1 hop variable
-https://stellar.expert/explorer/public/tx/e066acf7f6eb3d3ecb7f0bca70b1fc64ad529f738352c6af3091325a382738e1
-swap_chained(
- GA3C…T5SO,
- [
- [
- [CCW6…MI75, CDIK…FJKP],
- yy5OG7xqTdImPNVSp7ZU4S499xjgaGS//WWSMG+HFb4=bytes,
- CDIK…FJKP]],
- CCW6…MI75,
- 100000000u128,
- 98918707u128) → 99917886u128
-
-This also works with stable pool with more than 2 tokens:
-https://stellar.expert/explorer/public/contract/CD6VHCKSUPGQVQPEQUI6EAEO6Z4PXMFTPHW3UTAOF7W4UF7TH7ZSKZBG
-swap_chained(
- GB3J…NDBC,
- [
- [
- [CAS3…OWMA, CCW6…MI75],
- suAvz8pslvitXL2E53hKd3s22clqJFlALE9FhGKqt/A=bytes,
- CCW6…MI75
- ],
- [
- [CCW6…MI75, CDIK…FJKP, CDOF…U2P4],
- 2AETnx8GUW8X4LAUztB8IFsEQUHi14aUE/60BCyHPss=bytes,
- CDIK…FJKP]
- ],
- CAS3…OWMA,
- 220000000u128,
- 57425672u128) → 57468384u128
-
-
-
- # Strict Receive
- https://stellar.expert/explorer/public/tx/7ee1805bce4fe383358c0387d9adaa56de9032b997a34cf5879ce528c846a124
-
- ```
- fn swap_chained_strict_receive(
- e: Env,
- user: Address,
- swaps_chain: Vec<(Vec, BytesN<32>, Address)>,
- token_in: Address,
- out_amount: u128, // fixed amount of output token to receive
- max_in: u128, // maximum input token amount allowed
- ) -> u128
-
- // Returns The amount of the input token spent after all swaps have been executed.
-
- ```
-
- swap_chained_strict_receive(
- GA3C…T5SO,
- [
- [
- [CAS3…OWMA, CAUI…OJPK],
- N7lV83CNrnSMrUZUQfytcLJv/icjhSJ6SnNyNK5Cm98=bytes,
- CAUI…OJPK
- ]
- ],
- CAS3…OWMA,
- 100000000u128,
- 263446u128) →
- 260838
\ No newline at end of file
diff --git a/contracts/aggregator/aqua_contracts/soroban_fees_collector_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_fees_collector_contract.wasm
deleted file mode 100755
index 794e211c..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_fees_collector_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_contract.wasm
deleted file mode 100755
index 17e1106f..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm
deleted file mode 100755
index e236dcd1..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm
deleted file mode 100755
index 04b4bb8e..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_router_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_router_contract.wasm
deleted file mode 100755
index 11c888f3..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_router_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm
deleted file mode 100755
index 6fcc38d0..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm
deleted file mode 100755
index f24094fe..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_locker_feed_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_locker_feed_contract.wasm
deleted file mode 100644
index e144dc9d..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_locker_feed_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/aqua_contracts/soroban_token_contract.wasm b/contracts/aggregator/aqua_contracts/soroban_token_contract.wasm
deleted file mode 100755
index 7f2509d1..00000000
Binary files a/contracts/aggregator/aqua_contracts/soroban_token_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/comet_contracts/comet_factory.wasm b/contracts/aggregator/comet_contracts/comet_factory.wasm
deleted file mode 100644
index 9db8020a..00000000
Binary files a/contracts/aggregator/comet_contracts/comet_factory.wasm and /dev/null differ
diff --git a/contracts/aggregator/comet_contracts/comet_pool.wasm b/contracts/aggregator/comet_contracts/comet_pool.wasm
deleted file mode 100644
index de1b1fa4..00000000
Binary files a/contracts/aggregator/comet_contracts/comet_pool.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_factory.wasm b/contracts/aggregator/phoenix_contracts/phoenix_factory.wasm
deleted file mode 100644
index e5de540c..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_factory.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_multihop.wasm b/contracts/aggregator/phoenix_contracts/phoenix_multihop.wasm
deleted file mode 100644
index eab42850..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_multihop.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_pool.wasm b/contracts/aggregator/phoenix_contracts/phoenix_pool.wasm
deleted file mode 100644
index 67b08217..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_pool.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_pool_stable.wasm b/contracts/aggregator/phoenix_contracts/phoenix_pool_stable.wasm
deleted file mode 100644
index 12c353ae..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_pool_stable.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_stake.wasm b/contracts/aggregator/phoenix_contracts/phoenix_stake.wasm
deleted file mode 100644
index 067070cd..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_stake.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/phoenix_vesting.wasm b/contracts/aggregator/phoenix_contracts/phoenix_vesting.wasm
deleted file mode 100644
index c20c3458..00000000
Binary files a/contracts/aggregator/phoenix_contracts/phoenix_vesting.wasm and /dev/null differ
diff --git a/contracts/aggregator/phoenix_contracts/soroban_token_contract.wasm b/contracts/aggregator/phoenix_contracts/soroban_token_contract.wasm
deleted file mode 100644
index c6303503..00000000
Binary files a/contracts/aggregator/phoenix_contracts/soroban_token_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/soroswap_contracts/soroban_token_contract.wasm b/contracts/aggregator/soroswap_contracts/soroban_token_contract.wasm
deleted file mode 100755
index 23805cc4..00000000
Binary files a/contracts/aggregator/soroswap_contracts/soroban_token_contract.wasm and /dev/null differ
diff --git a/contracts/aggregator/soroswap_contracts/soroswap_factory.wasm b/contracts/aggregator/soroswap_contracts/soroswap_factory.wasm
deleted file mode 100755
index 4d308164..00000000
Binary files a/contracts/aggregator/soroswap_contracts/soroswap_factory.wasm and /dev/null differ
diff --git a/contracts/aggregator/soroswap_contracts/soroswap_pair.wasm b/contracts/aggregator/soroswap_contracts/soroswap_pair.wasm
deleted file mode 100755
index d47b7cf5..00000000
Binary files a/contracts/aggregator/soroswap_contracts/soroswap_pair.wasm and /dev/null differ
diff --git a/contracts/aggregator/soroswap_contracts/soroswap_router.optimized.wasm b/contracts/aggregator/soroswap_contracts/soroswap_router.optimized.wasm
deleted file mode 100644
index bd621c59..00000000
Binary files a/contracts/aggregator/soroswap_contracts/soroswap_router.optimized.wasm and /dev/null differ
diff --git a/contracts/aggregator/soroswap_contracts/soroswap_router.wasm b/contracts/aggregator/soroswap_contracts/soroswap_router.wasm
deleted file mode 100755
index 88963310..00000000
Binary files a/contracts/aggregator/soroswap_contracts/soroswap_router.wasm and /dev/null differ
diff --git a/contracts/aggregator/src/adapters/aqua.rs b/contracts/aggregator/src/adapters/aqua.rs
index a57ed61b..47e3719b 100644
--- a/contracts/aggregator/src/adapters/aqua.rs
+++ b/contracts/aggregator/src/adapters/aqua.rs
@@ -5,7 +5,7 @@ use soroban_sdk::Symbol;
use crate::error::AggregatorError;
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
);
pub type AquaRouterClient<'a> = Client<'a>;
diff --git a/contracts/aggregator/src/adapters/comet.rs b/contracts/aggregator/src/adapters/comet.rs
index fb794ff3..df86de22 100644
--- a/contracts/aggregator/src/adapters/comet.rs
+++ b/contracts/aggregator/src/adapters/comet.rs
@@ -2,7 +2,7 @@ use soroban_sdk::{vec, Address, Env, Vec};
use crate::error::AggregatorError;
soroban_sdk::contractimport!(
- file = "./comet_contracts/comet_pool.wasm"
+ file = "../external_wasms/comet_contracts/comet_pool.wasm"
);
pub type CometPoolClient<'a> = Client<'a>;
diff --git a/contracts/aggregator/src/adapters/phoenix.rs b/contracts/aggregator/src/adapters/phoenix.rs
index 0261e5d9..0b7ab68c 100644
--- a/contracts/aggregator/src/adapters/phoenix.rs
+++ b/contracts/aggregator/src/adapters/phoenix.rs
@@ -6,7 +6,7 @@ use crate::error::AggregatorError;
// use phoenix_contracts::PoolType;
soroban_sdk::contractimport!(
- file = "./phoenix_contracts/phoenix_multihop.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_multihop.wasm"
);
pub type PhoenixMultihopClient<'a> = Client<'a>;
diff --git a/contracts/aggregator/src/adapters/soroswap.rs b/contracts/aggregator/src/adapters/soroswap.rs
index 7b17f793..5319339b 100644
--- a/contracts/aggregator/src/adapters/soroswap.rs
+++ b/contracts/aggregator/src/adapters/soroswap.rs
@@ -3,7 +3,7 @@ use soroban_sdk::{Env, Address, Vec};
use crate::error::AggregatorError;
soroban_sdk::contractimport!(
- file = "./soroswap_contracts/soroswap_router.wasm"
+ file = "../external_wasms/soroswap_contracts/soroswap_router.wasm"
);
pub type SoroswapRouterClient<'a> = Client<'a>;
diff --git a/contracts/aggregator/src/lib.rs b/contracts/aggregator/src/lib.rs
index 9101dd3d..9c577b4b 100644
--- a/contracts/aggregator/src/lib.rs
+++ b/contracts/aggregator/src/lib.rs
@@ -12,7 +12,6 @@ mod test;
use error::AggregatorError;
use models::{Protocol, Adapter, DexDistribution, MAX_DISTRIBUTION_LENGTH};
-use adapter_interface::AdapterClient;
use storage::{
extend_instance_ttl, get_adapter, get_admin, get_protocol_ids, has_adapter, is_initialized,
put_adapter, remove_adapter, set_admin, set_initialized, set_pause_protocol,
@@ -105,17 +104,6 @@ fn calculate_distribution_amounts_and_check_paths(
Ok(swap_amounts)
}
-pub fn get_adapter_client(
- e: &Env,
- protocol_id: Protocol,
-) -> Result {
- let adapter = get_adapter(&e, protocol_id.clone())?;
- if adapter.paused {
- return Err(AggregatorError::ProtocolPaused);
- }
- Ok(AdapterClient::new(&e, &adapter.router))
-}
-
/*
SOROSWAP AGGREGATOR SMART CONTRACT INTERFACE:
*/
diff --git a/contracts/aggregator/src/test.rs b/contracts/aggregator/src/test.rs
index 5a7d117c..62a609f3 100644
--- a/contracts/aggregator/src/test.rs
+++ b/contracts/aggregator/src/test.rs
@@ -46,7 +46,7 @@ use aqua_setup::{AquaSetup};
// mod deployer_contract {
-// soroban_sdk::contractimport!(file = "../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
+// soroban_sdk::contractimport!(file = "../target/wasm32v1-none/release/soroswap_aggregator_deployer.optimized.wasm");
// pub type DeployerClient<'a> = Client<'a>;
// }
// pub use deployer_contract::DeployerClient;
@@ -63,7 +63,7 @@ fn create_soroswap_aggregator<'a>(e: &Env) -> SoroswapAggregatorClient<'a> {
}
pub mod soroswap_aggregator_contract {
- soroban_sdk::contractimport!(file = "../target/wasm32-unknown-unknown/release/soroswap_aggregator.optimized.wasm");
+ soroban_sdk::contractimport!(file = "../target/wasm32v1-none/release/soroswap_aggregator.optimized.wasm");
pub type SoroswapAggregatorClientFromWasm<'a> = Client<'a>;
}
use soroswap_aggregator_contract::{SoroswapAggregatorClientFromWasm, Adapter as AdapterFromWasm};
@@ -71,7 +71,7 @@ use soroswap_aggregator_contract::{SoroswapAggregatorClientFromWasm, Adapter as
// Token Contract
mod token {
- soroban_sdk::contractimport!(file = "../adapters/soroswap/soroswap_contracts/soroban_token_contract.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/soroswap_contracts/soroban_token_contract.wasm");
pub type TokenClient<'a> = Client<'a>;
}
use token::TokenClient;
@@ -81,7 +81,7 @@ pub fn create_token_contract<'a>(e: &Env, admin: &Address) -> TokenClient<'a> {
// pub fn install_token_wasm(env: &Env) -> BytesN<32> {
// soroban_sdk::contractimport!(
-// file = "../adapters/soroswap/soroswap_contracts/soroban_token_contract.wasm"
+// file = "../external_wasms/soroswap_contracts/soroban_token_contract.wasm"
// );
// env.deployer().upload_contract_wasm(WASM)
// }
diff --git a/contracts/aggregator/src/test/aqua_setup.rs b/contracts/aggregator/src/test/aqua_setup.rs
index c2f68cce..da739c0c 100644
--- a/contracts/aggregator/src/test/aqua_setup.rs
+++ b/contracts/aggregator/src/test/aqua_setup.rs
@@ -10,7 +10,7 @@ use soroban_sdk::{Address, BytesN, Env, Symbol, Vec};
#[allow(clippy::too_many_arguments)]
pub mod router {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_liquidity_pool_router_contract.wasm"
);
}
@@ -25,7 +25,7 @@ pub fn create_liqpool_router_contract<'a>(e: &Env) -> AquaRouter<'a> {
pub mod test_token {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_token_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_token_contract.wasm"
);
}
@@ -43,7 +43,7 @@ pub fn create_token_contract<'a>(e: &Env, admin: &Address) -> test_token::Client
pub fn install_token_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_token_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_token_contract.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
@@ -57,7 +57,7 @@ pub fn install_token_wasm(env: &Env) -> BytesN<32> {
pub mod standard_pool {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_liquidity_pool_contract.wasm"
);
}
@@ -67,7 +67,7 @@ pub fn install_liq_pool_hash(e: &Env) -> BytesN<32> {
pub mod stableswap_pool {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm"
);
}
@@ -78,7 +78,7 @@ pub fn install_stableswap_liq_pool_hash(e: &Env) -> BytesN<32> {
mod pool_plane {
soroban_sdk::contractimport!(
file =
- "./aqua_contracts/soroban_liquidity_pool_plane_contract.wasm"
+ "../external_wasms/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm"
);
}
@@ -89,7 +89,7 @@ pub fn create_plane_contract<'a>(e: &Env) -> pool_plane::Client<'a> {
mod liquidity_calculator {
soroban_sdk::contractimport!(
file =
- "./aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm"
+ "../external_wasms/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm"
);
}
@@ -99,7 +99,7 @@ pub fn create_liquidity_calculator_contract<'a>(e: &Env) -> liquidity_calculator
mod reward_boost_feed {
soroban_sdk::contractimport!(
- file = "./aqua_contracts/soroban_locker_feed_contract.wasm"
+ file = "../external_wasms/aqua_contracts/soroban_locker_feed_contract.wasm"
);
}
diff --git a/contracts/aggregator/src/test/comet_setup.rs b/contracts/aggregator/src/test/comet_setup.rs
index a4a94654..cd7df277 100644
--- a/contracts/aggregator/src/test/comet_setup.rs
+++ b/contracts/aggregator/src/test/comet_setup.rs
@@ -5,7 +5,7 @@ use soroban_sdk::{vec, Address, BytesN, Env, IntoVal, String, Symbol, Val, Vec};
use test_utils::phoenix_setup::{generate_salt, DeployerClient};
pub mod pair {
- soroban_sdk::contractimport!(file = "../adapters/comet/comet_contracts/comet_pool.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/comet_contracts/comet_pool.wasm");
pub type CometPairClient<'a> = Client<'a>;
}
@@ -14,13 +14,13 @@ fn pair_contract_wasm(e: &Env) -> BytesN<32> {
}
pub mod factory {
- soroban_sdk::contractimport!(file = "../adapters/comet/comet_contracts/comet_factory.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/comet_contracts/comet_factory.wasm");
pub type CometFactoryClient<'a> = Client<'a>;
}
use factory::CometFactoryClient;
pub mod comet_adapter{
- soroban_sdk::contractimport!(file = "../target/wasm32-unknown-unknown/release/comet_adapter.optimized.wasm");
+ soroban_sdk::contractimport!(file = "../target/wasm32v1-none/release/comet_adapter.optimized.wasm");
pub type CometAdapterClient<'a> = Client<'a>;
}
diff --git a/contracts/aggregator/src/test/phoenix_setup.rs b/contracts/aggregator/src/test/phoenix_setup.rs
index e2df757b..af0a7449 100644
--- a/contracts/aggregator/src/test/phoenix_setup.rs
+++ b/contracts/aggregator/src/test/phoenix_setup.rs
@@ -4,7 +4,7 @@ use super::{generate_salt, DeployerClient};
mod phoenix_adapter {
soroban_sdk::contractimport!(
file =
- "../target/wasm32-unknown-unknown/release/phoenix_adapter.optimized.wasm"
+ "../target/wasm32v1-none/release/phoenix_adapter.optimized.wasm"
);
pub type SoroswapAggregatorAdapterForPhoenixClient<'a> = Client<'a>;
}
@@ -60,7 +60,7 @@ use soroban_sdk::{
#[allow(clippy::too_many_arguments)]
pub mod factory {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_factory.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_factory.wasm"
);
}
use factory::{LiquidityPoolInitInfo, StakeInitInfo, TokenInitInfo};
@@ -71,14 +71,14 @@ pub use factory::Client as PhoenixFactory;
/* ************* MULTIHOP ************* */
#[allow(clippy::too_many_arguments)]
pub mod multihop {
- soroban_sdk::contractimport!(file = "../adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/phoenix_contracts/phoenix_multihop.wasm");
pub type MultihopClient<'a> = Client<'a>;
}
pub use multihop::MultihopClient;
pub fn install_multihop_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_multihop.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
@@ -99,7 +99,7 @@ pub fn deploy_multihop_contract<'a>(
#[allow(clippy::too_many_arguments)]
pub mod stable_contract {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_pool_stable.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_pool_stable.wasm"
);
}
@@ -113,7 +113,7 @@ pub fn install_stable_contract(env: &Env) -> BytesN<32> {
#[allow(clippy::too_many_arguments)]
pub mod lp_contract {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_pool.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_pool.wasm"
);
}
@@ -127,7 +127,7 @@ pub fn install_lp_contract(env: &Env) -> BytesN<32> {
#[allow(clippy::too_many_arguments)]
pub fn install_stake_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_stake.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_stake.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
diff --git a/contracts/aggregator/src/test/soroswap_setup.rs b/contracts/aggregator/src/test/soroswap_setup.rs
index d54fb982..a5c95f1c 100644
--- a/contracts/aggregator/src/test/soroswap_setup.rs
+++ b/contracts/aggregator/src/test/soroswap_setup.rs
@@ -4,14 +4,14 @@ use soroban_sdk::{
use test_utils::phoenix_setup::{DeployerClient, generate_salt};
fn pair_contract_wasm(e: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/soroswap/soroswap_contracts/soroswap_pair.wasm"
+ file = "../external_wasms/soroswap_contracts/soroswap_pair.wasm"
);
e.deployer().upload_contract_wasm(WASM)
}
// SoroswapFactory Contract
mod factory {
- soroban_sdk::contractimport!(file = "../adapters/soroswap/soroswap_contracts/soroswap_factory.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/soroswap_contracts/soroswap_factory.wasm");
pub type SoroswapFactoryClient<'a> = Client<'a>;
}
use factory::SoroswapFactoryClient;
@@ -26,7 +26,7 @@ pub fn create_soroswap_factory<'a>(e: &Env, setter: &Address) -> SoroswapFactory
// SoroswapRouter Contract
mod router {
- soroban_sdk::contractimport!(file = "../adapters/soroswap/soroswap_contracts/soroswap_router.optimized.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/soroswap_contracts/soroswap_router.optimized.wasm");
pub type SoroswapRouterClient<'a> = Client<'a>;
}
pub use router::SoroswapRouterClient;
@@ -42,7 +42,7 @@ pub fn create_soroswap_router<'a>(e: &Env) -> SoroswapRouterClient<'a> {
// SoroswapAggregatorAdapter Contract
// For Soroswap
mod soroswap_adapter {
- soroban_sdk::contractimport!(file = "../target/wasm32-unknown-unknown/release/soroswap_adapter.optimized.wasm");
+ soroban_sdk::contractimport!(file = "../target/wasm32v1-none/release/soroswap_adapter.optimized.wasm");
pub type SoroswapAggregatorAdapterForSoroswapClient<'a> = Client<'a>;
}
pub use soroswap_adapter::SoroswapAggregatorAdapterForSoroswapClient;
diff --git a/contracts/deployer/Cargo.toml b/contracts/deployer/Cargo.toml
index eb99c822..40e62a9d 100644
--- a/contracts/deployer/Cargo.toml
+++ b/contracts/deployer/Cargo.toml
@@ -16,7 +16,6 @@ crate-type = ["cdylib"]
[dependencies]
soroban-sdk = { workspace = true }
-adapter-interface = { workspace = true }
[dev-dependencies]
soroban-sdk = { workspace = true, features = ["testutils"] }
\ No newline at end of file
diff --git a/contracts/deployer/Makefile b/contracts/deployer/Makefile
index dffb5a61..e7e2baef 100644
--- a/contracts/deployer/Makefile
+++ b/contracts/deployer/Makefile
@@ -6,9 +6,9 @@ test: build
cargo test
build:
- cargo build --target wasm32-unknown-unknown --release
- soroban contract optimize --wasm ../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.wasm
- @rm ../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.wasm
+ cargo build --target wasm32v1-none --release
+ stellar contract optimize --wasm ../target/wasm32v1-none/release/soroswap_aggregator_deployer.wasm
+ @rm ../target/wasm32v1-none/release/soroswap_aggregator_deployer.wasm
fmt:
cargo fmt --all --check
diff --git a/contracts/deployer/src/test.rs b/contracts/deployer/src/test.rs
index 40004a22..e1d2a5e5 100644
--- a/contracts/deployer/src/test.rs
+++ b/contracts/deployer/src/test.rs
@@ -14,21 +14,21 @@ use soroswap_aggregator_contract::Adapter;
mod soroswap_adapter_contract {
soroban_sdk::contractimport!(
file =
- "../target/wasm32-unknown-unknown/release/soroswap_adapter.optimized.wasm"
+ "../target/wasm32v1-none/release/soroswap_adapter.optimized.wasm"
);
}
mod phoenix_adapter_contract {
soroban_sdk::contractimport!(
file =
- "../target/wasm32-unknown-unknown/release/phoenix_adapter.optimized.wasm"
+ "../target/wasm32v1-none/release/phoenix_adapter.optimized.wasm"
);
}
mod soroswap_aggregator_contract {
soroban_sdk::contractimport!(
file =
- "../target/wasm32-unknown-unknown/release/soroswap_aggregator.optimized.wasm"
+ "../target/wasm32v1-none/release/soroswap_aggregator.optimized.wasm"
);
}
diff --git a/contracts/adapters/aqua/aqua_contracts/README.md b/contracts/external_wasms/aqua_contracts/README.md
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/README.md
rename to contracts/external_wasms/aqua_contracts/README.md
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_fees_collector_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_fees_collector_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_fees_collector_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_fees_collector_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_liquidity_calculator_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_plane_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_router_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_router_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_router_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_router_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_stableswap_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_liquidity_pool_swap_router_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_locker_feed_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_locker_feed_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_locker_feed_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_locker_feed_contract.wasm
diff --git a/contracts/adapters/aqua/aqua_contracts/soroban_token_contract.wasm b/contracts/external_wasms/aqua_contracts/soroban_token_contract.wasm
similarity index 100%
rename from contracts/adapters/aqua/aqua_contracts/soroban_token_contract.wasm
rename to contracts/external_wasms/aqua_contracts/soroban_token_contract.wasm
diff --git a/contracts/adapters/comet/comet_contracts/comet_factory.wasm b/contracts/external_wasms/comet_contracts/comet_factory.wasm
similarity index 100%
rename from contracts/adapters/comet/comet_contracts/comet_factory.wasm
rename to contracts/external_wasms/comet_contracts/comet_factory.wasm
diff --git a/contracts/adapters/comet/comet_contracts/comet_pool.wasm b/contracts/external_wasms/comet_contracts/comet_pool.wasm
similarity index 100%
rename from contracts/adapters/comet/comet_contracts/comet_pool.wasm
rename to contracts/external_wasms/comet_contracts/comet_pool.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_factory.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_factory.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_factory.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_factory.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_multihop.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_multihop.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_pool.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_pool.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_pool.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_pool.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_pool_stable.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_pool_stable.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_pool_stable.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_pool_stable.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_stake.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_stake.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_stake.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_stake.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/phoenix_vesting.wasm b/contracts/external_wasms/phoenix_contracts/phoenix_vesting.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/phoenix_vesting.wasm
rename to contracts/external_wasms/phoenix_contracts/phoenix_vesting.wasm
diff --git a/contracts/adapters/phoenix/phoenix_contracts/soroban_token_contract.wasm b/contracts/external_wasms/phoenix_contracts/soroban_token_contract.wasm
similarity index 100%
rename from contracts/adapters/phoenix/phoenix_contracts/soroban_token_contract.wasm
rename to contracts/external_wasms/phoenix_contracts/soroban_token_contract.wasm
diff --git a/contracts/adapters/soroswap/soroswap_contracts/soroban_token_contract.wasm b/contracts/external_wasms/soroswap_contracts/soroban_token_contract.wasm
similarity index 100%
rename from contracts/adapters/soroswap/soroswap_contracts/soroban_token_contract.wasm
rename to contracts/external_wasms/soroswap_contracts/soroban_token_contract.wasm
diff --git a/contracts/adapters/soroswap/soroswap_contracts/soroswap_factory.wasm b/contracts/external_wasms/soroswap_contracts/soroswap_factory.wasm
similarity index 100%
rename from contracts/adapters/soroswap/soroswap_contracts/soroswap_factory.wasm
rename to contracts/external_wasms/soroswap_contracts/soroswap_factory.wasm
diff --git a/contracts/adapters/soroswap/soroswap_contracts/soroswap_pair.wasm b/contracts/external_wasms/soroswap_contracts/soroswap_pair.wasm
similarity index 100%
rename from contracts/adapters/soroswap/soroswap_contracts/soroswap_pair.wasm
rename to contracts/external_wasms/soroswap_contracts/soroswap_pair.wasm
diff --git a/contracts/adapters/soroswap/soroswap_contracts/soroswap_router.optimized.wasm b/contracts/external_wasms/soroswap_contracts/soroswap_router.optimized.wasm
similarity index 100%
rename from contracts/adapters/soroswap/soroswap_contracts/soroswap_router.optimized.wasm
rename to contracts/external_wasms/soroswap_contracts/soroswap_router.optimized.wasm
diff --git a/contracts/adapters/soroswap/soroswap_contracts/soroswap_router.wasm b/contracts/external_wasms/soroswap_contracts/soroswap_router.wasm
similarity index 100%
rename from contracts/adapters/soroswap/soroswap_contracts/soroswap_router.wasm
rename to contracts/external_wasms/soroswap_contracts/soroswap_router.wasm
diff --git a/contracts/test-utils/src/phoenix_setup.rs b/contracts/test-utils/src/phoenix_setup.rs
index ccca41ae..ef0b3c57 100644
--- a/contracts/test-utils/src/phoenix_setup.rs
+++ b/contracts/test-utils/src/phoenix_setup.rs
@@ -22,7 +22,7 @@ use soroban_sdk::{
#[allow(clippy::too_many_arguments)]
pub mod factory {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_factory.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_factory.wasm"
);
}
use factory::{LiquidityPoolInitInfo, StakeInitInfo, TokenInitInfo};
@@ -34,14 +34,14 @@ pub use factory::PoolType;
/* ************* MULTIHOP ************* */
#[allow(clippy::too_many_arguments)]
pub mod multihop {
- soroban_sdk::contractimport!(file = "../adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm");
+ soroban_sdk::contractimport!(file = "../external_wasms/phoenix_contracts/phoenix_multihop.wasm");
pub type MultihopClient<'a> = Client<'a>;
}
pub use multihop::MultihopClient;
pub fn install_multihop_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_multihop.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
@@ -60,7 +60,7 @@ pub fn deploy_multihop_contract<'a>(
pub mod token_contract {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/soroban_token_contract.wasm"
+ file = "../external_wasms/phoenix_contracts/soroban_token_contract.wasm"
);
}
@@ -83,7 +83,7 @@ pub use token_contract::Client as TokenClient;
pub fn install_token_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/soroban_token_contract.wasm"
+ file = "../external_wasms/phoenix_contracts/soroban_token_contract.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
@@ -98,7 +98,7 @@ pub fn deploy_token_contract<'a>(env: & Env, admin: & Address) -> token_contract
#[allow(clippy::too_many_arguments)]
pub mod stable_contract {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_pool_stable.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_pool_stable.wasm"
);
}
@@ -111,7 +111,7 @@ pub fn install_stable_contract(env: &Env) -> BytesN<32> {
#[allow(clippy::too_many_arguments)]
pub mod lp_contract {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_pool.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_pool.wasm"
);
}
@@ -125,7 +125,7 @@ pub fn install_lp_contract(env: &Env) -> BytesN<32> {
#[allow(clippy::too_many_arguments)]
pub fn install_stake_wasm(env: &Env) -> BytesN<32> {
soroban_sdk::contractimport!(
- file = "../adapters/phoenix/phoenix_contracts/phoenix_stake.wasm"
+ file = "../external_wasms/phoenix_contracts/phoenix_stake.wasm"
);
env.deployer().upload_contract_wasm(WASM)
}
@@ -381,7 +381,7 @@ impl<'a> PhoenixTest<'a> {
mod deployer_contract {
- soroban_sdk::contractimport!(file = "../target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm");
+ soroban_sdk::contractimport!(file = "../target/wasm32v1-none/release/soroswap_aggregator_deployer.optimized.wasm");
pub type DeployerClient<'a> = Client<'a>;
}
pub use deployer_contract::DeployerClient;
@@ -404,7 +404,7 @@ pub fn create_deployer<'a>(e: &Env) -> DeployerClient<'a> {
mod phoenix_adapter {
soroban_sdk::contractimport!(
file =
- "../target/wasm32-unknown-unknown/release/phoenix_adapter.optimized.wasm"
+ "../target/wasm32v1-none/release/phoenix_adapter.optimized.wasm"
);
pub type SoroswapAggregatorAdapterForPhoenixClient<'a> = Client<'a>;
}
diff --git a/scripts/quickstart.sh b/scripts/quickstart.sh
index 8ed2c2fe..c4edb8bb 100644
--- a/scripts/quickstart.sh
+++ b/scripts/quickstart.sh
@@ -11,7 +11,7 @@ set -e
case "$1" in
standalone)
echo "Using standalone network"
- ARGS="--local --enable-soroban-diagnostic-events"
+ ARGS="--local"
;;
futurenet)
echo "Using Futurenet network"
@@ -83,6 +83,4 @@ docker run --rm -ti \
stellar/quickstart:${quickstartHash} \
$ARGS \
--enable-soroban-rpc \
- --protocol-version ${protocolVersion} \
- --enable-soroban-diagnostic-events \
- "$@" # Pass through args from the CLI
+ --protocol-version ${protocolVersion}
diff --git a/src/multi_test.ts b/src/multi_test.ts
index 16490856..a0cfe8bb 100644
--- a/src/multi_test.ts
+++ b/src/multi_test.ts
@@ -12,16 +12,16 @@ export async function testAggregator(addressBook: AddressBook) {
const usdc_address = "CCGCRYUTDRP52NOPS35FL7XIOZKKGQWSP3IYFE6B66KD4YOGJMWVC5PR"
const xtar_address = "CDPU5TPNUMZ5JY3AUSENSINOEB324WI65AHI7PJBUKR3DJP2ULCBWQCS"
- console.log("Getting protocols")
- const result = await invokeContract(
- 'aggregator',
- addressBook,
- 'get_protocols',
- [],
- loadedConfig.admin,
- true
- );
- console.log('🚀 « result:', scValToNative(result.result.retval));
+ // console.log("Getting protocols")
+ // const result = await invokeContract(
+ // 'aggregator',
+ // addressBook,
+ // 'get_protocols',
+ // [],
+ // loadedConfig.admin,
+ // true
+ // );
+ // console.log('🚀 « result:', scValToNative(result.result.retval));
console.log("-------------------------------------------------------");
console.log("Starting Balances");
diff --git a/src/test.ts b/src/test.ts
index 8f2902c3..9380e597 100644
--- a/src/test.ts
+++ b/src/test.ts
@@ -12,16 +12,16 @@ export async function testAggregator(addressBook: AddressBook) {
const usdc_address = "CCGCRYUTDRP52NOPS35FL7XIOZKKGQWSP3IYFE6B66KD4YOGJMWVC5PR"
const xtar_address = "CDPU5TPNUMZ5JY3AUSENSINOEB324WI65AHI7PJBUKR3DJP2ULCBWQCS"
- console.log("Getting protocols")
- const result = await invokeContract(
- 'aggregator',
- addressBook,
- 'get_protocols',
- [],
- loadedConfig.admin,
- true
- );
- console.log('🚀 « result:', scValToNative(result.result.retval));
+ // console.log("Getting protocols")
+ // const result = await invokeContract(
+ // 'aggregator',
+ // addressBook,
+ // 'get_protocols',
+ // [],
+ // loadedConfig.admin,
+ // true
+ // );
+ // console.log('🚀 « result:', scValToNative(result.result.retval));
console.log("-------------------------------------------------------");
console.log("Starting Balances");
diff --git a/src/utils/contract.ts b/src/utils/contract.ts
index 1e6ba410..b300f53d 100644
--- a/src/utils/contract.ts
+++ b/src/utils/contract.ts
@@ -21,21 +21,21 @@ import { createTxBuilder, invoke, invokeTransaction } from './tx.js';
// Relative paths from __dirname
const CONTRACT_REL_PATH: object = {
deployer:
- '../../contracts/target/wasm32-unknown-unknown/release/soroswap_aggregator_deployer.optimized.wasm',
+ '../../contracts/target/wasm32v1-none/release/soroswap_aggregator_deployer.optimized.wasm',
aggregator:
- '../../contracts/target/wasm32-unknown-unknown/release/soroswap_aggregator.optimized.wasm',
- soroswap_adapter: '../../contracts/target/wasm32-unknown-unknown/release/soroswap_adapter.optimized.wasm',
- phoenix_adapter: '../../contracts/target/wasm32-unknown-unknown/release/phoenix_adapter.optimized.wasm',
+ '../../contracts/target/wasm32v1-none/release/soroswap_aggregator.optimized.wasm',
+ soroswap_adapter: '../../contracts/target/wasm32v1-none/release/soroswap_adapter.optimized.wasm',
+ phoenix_adapter: '../../contracts/target/wasm32v1-none/release/phoenix_adapter.optimized.wasm',
phoenix_factory: '../../contracts/adapters/phoenix/phoenix_contracts/phoenix_factory.wasm',
phoenix_multihop: '../../contracts/adapters/phoenix/phoenix_contracts/phoenix_multihop.wasm',
phoenix_token: '../../contracts/adapters/phoenix/phoenix_contracts/soroban_token_contract.wasm',
phoenix_pool: '../../contracts/adapters/phoenix/phoenix_contracts/phoenix_pool.wasm',
phoenix_stake: '../../contracts/adapters/phoenix/phoenix_contracts/phoenix_stake.wasm',
phoenix_stable: '../../contracts/adapters/phoenix/phoenix_contracts/phoenix_pool_stable.wasm',
- comet_adapter: '../../contracts/target/wasm32-unknown-unknown/release/comet_adapter.optimized.wasm',
+ comet_adapter: '../../contracts/target/wasm32v1-none/release/comet_adapter.optimized.wasm',
comet_factory: '../../contracts/adapters/comet/comet_contracts/comet_factory.wasm',
comet_pool: '../../contracts/adapters/comet/comet_contracts/comet_pool.wasm',
- aqua_adapter: '../../contracts/target/wasm32-unknown-unknown/release/aqua_adapter.optimized.wasm',
+ aqua_adapter: '../../contracts/target/wasm32v1-none/release/aqua_adapter.optimized.wasm',
};
const network = process.argv[2];
diff --git a/yarn.lock b/yarn.lock
index da2bd4fe..31e75c6b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,22 +2,17 @@
# yarn lockfile v1
-"@aashutoshrathi/word-wrap@^1.2.3":
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf"
- integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
-
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
- integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.8.0.tgz#0e3b5e45566d1bce1ec47d8aae2fc2ad77ad0894"
+ integrity sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==
dependencies:
- eslint-visitor-keys "^3.3.0"
+ eslint-visitor-keys "^3.4.3"
-"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
- version "4.10.0"
- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63"
- integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
+ version "4.12.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
+ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
@@ -34,17 +29,17 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.56.0":
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
- integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
+"@eslint/js@8.57.1":
+ version "8.57.1"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
+ integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
-"@humanwhocodes/config-array@^0.11.13":
- version "0.11.14"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
- integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+"@humanwhocodes/config-array@^0.13.0":
+ version "0.13.0"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
+ integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==
dependencies:
- "@humanwhocodes/object-schema" "^2.0.2"
+ "@humanwhocodes/object-schema" "^2.0.3"
debug "^4.3.1"
minimatch "^3.0.5"
@@ -53,10 +48,10 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
-"@humanwhocodes/object-schema@^2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
- integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
+"@humanwhocodes/object-schema@^2.0.3":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
"@noble/curves@^1.9.6":
version "1.9.7"
@@ -91,10 +86,10 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
-"@pkgr/core@^0.1.0":
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
- integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
+"@pkgr/core@^0.2.9":
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b"
+ integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==
"@stellar/js-xdr@^3.1.2":
version "3.1.2"
@@ -114,9 +109,9 @@
sha.js "^2.4.12"
"@stellar/stellar-sdk@^14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@stellar/stellar-sdk/-/stellar-sdk-14.0.0.tgz#f4d7a4141da3afb3a8b15ea2a7a43d529bb2773e"
- integrity sha512-nZUxsxdCCF+YygS4ViUKjNUkCXY9Ly+En3Wsrd9jc5pdV9b+lWXiyv5AM5WLGLVB+qQrOeQWIBrQQuiYLsxTIQ==
+ version "14.1.1"
+ resolved "https://registry.yarnpkg.com/@stellar/stellar-sdk/-/stellar-sdk-14.1.1.tgz#b18f2a036221c4cb4a7690de7f465e144552b9c2"
+ integrity sha512-yu9E9fENEOgt26U/YaApQUUn6TRRhnEzzEOey3y43Nf4l08nbUmlzWYLMl9lcEzEilM68D3ENnEWxBuPylKLQQ==
dependencies:
"@stellar/stellar-base" "^14.0.0"
axios "^1.8.4"
@@ -132,113 +127,98 @@
resolved "https://registry.yarnpkg.com/@stellar/tsconfig/-/tsconfig-1.0.2.tgz#18e9b1a1d6076e116bb405d11fc034401155292d"
integrity sha512-lC51QSlYRM8K3oGe0/WGPq+p9+u+yPzwZXSKrZXKOe4sq79vzfiqFbQyp5enOffFzXlahcDyTgY67mBOkJytfw==
-"@types/json-schema@^7.0.12":
- version "7.0.15"
- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
- integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
-
"@types/node@^20.11.20":
- version "20.11.20"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.20.tgz#f0a2aee575215149a62784210ad88b3a34843659"
- integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==
+ version "20.19.12"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.12.tgz#1ce0874e557c4a2fee6285167a10a8a0b89f8ab8"
+ integrity sha512-lSOjyS6vdO2G2g2CWrETTV3Jz2zlCXHpu1rcubLKpz9oj+z/1CceHlj+yq53W+9zgb98nSov/wjEKYDNauD+Hw==
dependencies:
- undici-types "~5.26.4"
-
-"@types/semver@^7.5.0":
- version "7.5.7"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.7.tgz#326f5fdda70d13580777bcaa1bc6fa772a5aef0e"
- integrity sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==
+ undici-types "~6.21.0"
"@typescript-eslint/eslint-plugin@^7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.2.tgz#c13a34057be425167cc4a765158c46fdf2fd981d"
- integrity sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==
- dependencies:
- "@eslint-community/regexpp" "^4.5.1"
- "@typescript-eslint/scope-manager" "7.0.2"
- "@typescript-eslint/type-utils" "7.0.2"
- "@typescript-eslint/utils" "7.0.2"
- "@typescript-eslint/visitor-keys" "7.0.2"
- debug "^4.3.4"
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3"
+ integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==
+ dependencies:
+ "@eslint-community/regexpp" "^4.10.0"
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/type-utils" "7.18.0"
+ "@typescript-eslint/utils" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
graphemer "^1.4.0"
- ignore "^5.2.4"
+ ignore "^5.3.1"
natural-compare "^1.4.0"
- semver "^7.5.4"
- ts-api-utils "^1.0.1"
+ ts-api-utils "^1.3.0"
"@typescript-eslint/parser@^7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.0.2.tgz#95c31233d343db1ca1df8df7811b5b87ca7b1a68"
- integrity sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==
- dependencies:
- "@typescript-eslint/scope-manager" "7.0.2"
- "@typescript-eslint/types" "7.0.2"
- "@typescript-eslint/typescript-estree" "7.0.2"
- "@typescript-eslint/visitor-keys" "7.0.2"
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0"
+ integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==
+ dependencies:
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/typescript-estree" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
debug "^4.3.4"
-"@typescript-eslint/scope-manager@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.0.2.tgz#6ec4cc03752758ddd1fdaae6fbd0ed9a2ca4fe63"
- integrity sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==
+"@typescript-eslint/scope-manager@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83"
+ integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==
dependencies:
- "@typescript-eslint/types" "7.0.2"
- "@typescript-eslint/visitor-keys" "7.0.2"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
-"@typescript-eslint/type-utils@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.0.2.tgz#a7fc0adff0c202562721357e7478207d380a757b"
- integrity sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==
+"@typescript-eslint/type-utils@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b"
+ integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==
dependencies:
- "@typescript-eslint/typescript-estree" "7.0.2"
- "@typescript-eslint/utils" "7.0.2"
+ "@typescript-eslint/typescript-estree" "7.18.0"
+ "@typescript-eslint/utils" "7.18.0"
debug "^4.3.4"
- ts-api-utils "^1.0.1"
+ ts-api-utils "^1.3.0"
-"@typescript-eslint/types@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.0.2.tgz#b6edd108648028194eb213887d8d43ab5750351c"
- integrity sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==
+"@typescript-eslint/types@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
+ integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
-"@typescript-eslint/typescript-estree@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.2.tgz#3c6dc8a3b9799f4ef7eca0d224ded01974e4cb39"
- integrity sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==
+"@typescript-eslint/typescript-estree@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931"
+ integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==
dependencies:
- "@typescript-eslint/types" "7.0.2"
- "@typescript-eslint/visitor-keys" "7.0.2"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/visitor-keys" "7.18.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
- minimatch "9.0.3"
- semver "^7.5.4"
- ts-api-utils "^1.0.1"
+ minimatch "^9.0.4"
+ semver "^7.6.0"
+ ts-api-utils "^1.3.0"
-"@typescript-eslint/utils@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.0.2.tgz#8756123054cd934c8ba7db6a6cffbc654b10b5c4"
- integrity sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==
+"@typescript-eslint/utils@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
+ integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
- "@types/json-schema" "^7.0.12"
- "@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "7.0.2"
- "@typescript-eslint/types" "7.0.2"
- "@typescript-eslint/typescript-estree" "7.0.2"
- semver "^7.5.4"
-
-"@typescript-eslint/visitor-keys@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.2.tgz#2899b716053ad7094962beb895d11396fc12afc7"
- integrity sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==
- dependencies:
- "@typescript-eslint/types" "7.0.2"
- eslint-visitor-keys "^3.4.1"
+ "@typescript-eslint/scope-manager" "7.18.0"
+ "@typescript-eslint/types" "7.18.0"
+ "@typescript-eslint/typescript-estree" "7.18.0"
+
+"@typescript-eslint/visitor-keys@7.18.0":
+ version "7.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7"
+ integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==
+ dependencies:
+ "@typescript-eslint/types" "7.18.0"
+ eslint-visitor-keys "^3.4.3"
"@ungap/structured-clone@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
- integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
+ integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==
acorn-jsx@^5.3.2:
version "5.3.2"
@@ -246,9 +226,9 @@ acorn-jsx@^5.3.2:
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.9.0:
- version "8.11.3"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
- integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+ version "8.15.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
+ integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
ajv@^6.12.4:
version "6.12.6"
@@ -295,12 +275,12 @@ available-typed-arrays@^1.0.7:
possible-typed-array-names "^1.0.0"
axios@^1.8.4:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901"
- integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.11.0.tgz#c2ec219e35e414c025b2095e8b8280278478fdb6"
+ integrity sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==
dependencies:
follow-redirects "^1.15.6"
- form-data "^4.0.0"
+ form-data "^4.0.4"
proxy-from-env "^1.1.0"
balanced-match@^1.0.0:
@@ -324,26 +304,26 @@ bignumber.js@^9.3.1:
integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==
brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
+ integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
+ integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+braces@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
+ integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
dependencies:
- fill-range "^7.0.1"
+ fill-range "^7.1.1"
buffer@^6.0.3:
version "6.0.3"
@@ -417,20 +397,20 @@ concat-map@0.0.1:
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
cross-spawn@^7.0.2:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
+ integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==
dependencies:
- ms "2.1.2"
+ ms "^2.1.3"
deep-is@^0.1.3:
version "0.1.4"
@@ -466,9 +446,9 @@ doctrine@^3.0.0:
esutils "^2.0.2"
dotenv@^16.4.5:
- version "16.4.5"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
- integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
+ version "16.6.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020"
+ integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==
dunder-proto@^1.0.1:
version "1.0.1"
@@ -496,23 +476,33 @@ es-object-atoms@^1.0.0, es-object-atoms@^1.1.1:
dependencies:
es-errors "^1.3.0"
+es-set-tostringtag@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
+ integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
+ dependencies:
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.6"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-prettier@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f"
- integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==
+ version "9.1.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91"
+ integrity sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==
eslint-plugin-prettier@^5.1.3:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1"
- integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==
+ version "5.5.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c"
+ integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==
dependencies:
prettier-linter-helpers "^1.0.0"
- synckit "^0.8.6"
+ synckit "^0.11.7"
eslint-scope@^7.2.2:
version "7.2.2"
@@ -522,21 +512,21 @@ eslint-scope@^7.2.2:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
version "3.4.3"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@^8.56.0:
- version "8.56.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
- integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
+ version "8.57.1"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9"
+ integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.56.0"
- "@humanwhocodes/config-array" "^0.11.13"
+ "@eslint/js" "8.57.1"
+ "@humanwhocodes/config-array" "^0.13.0"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
"@ungap/structured-clone" "^1.2.0"
@@ -581,9 +571,9 @@ espree@^9.6.0, espree@^9.6.1:
eslint-visitor-keys "^3.4.1"
esquery@^1.4.2:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b"
- integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
+ integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
dependencies:
estraverse "^5.1.0"
@@ -620,15 +610,15 @@ fast-diff@^1.1.2:
integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
fast-glob@^3.2.9:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
- integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
dependencies:
"@nodelib/fs.stat" "^2.0.2"
"@nodelib/fs.walk" "^1.2.3"
glob-parent "^5.1.2"
merge2 "^1.3.0"
- micromatch "^4.0.4"
+ micromatch "^4.0.8"
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
@@ -641,9 +631,9 @@ fast-levenshtein@^2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0:
- version "1.17.1"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
- integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
dependencies:
reusify "^1.0.4"
@@ -661,10 +651,10 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+fill-range@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
+ integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
dependencies:
to-regex-range "^5.0.1"
@@ -686,14 +676,14 @@ flat-cache@^3.0.4:
rimraf "^3.0.2"
flatted@^3.2.9:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
- integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
+ integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
follow-redirects@^1.15.6:
- version "1.15.6"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
- integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+ version "1.15.11"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
+ integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==
for-each@^0.3.5:
version "0.3.5"
@@ -702,13 +692,15 @@ for-each@^0.3.5:
dependencies:
is-callable "^1.2.7"
-form-data@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+form-data@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
+ integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
+ es-set-tostringtag "^2.1.0"
+ hasown "^2.0.2"
mime-types "^2.1.12"
fs.realpath@^1.0.0:
@@ -721,7 +713,7 @@ function-bind@^1.1.2:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
-get-intrinsic@^1.2.4, get-intrinsic@^1.3.0:
+get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01"
integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==
@@ -836,15 +828,15 @@ ieee754@^1.2.1:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.2.0, ignore@^5.2.4:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
- integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+ignore@^5.2.0, ignore@^5.3.1:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
+ integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
import-fresh@^3.2.1:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
- integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
@@ -965,13 +957,6 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
math-intrinsics@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
@@ -982,12 +967,12 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-micromatch@^4.0.4:
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
- integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+micromatch@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
+ integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
dependencies:
- braces "^3.0.2"
+ braces "^3.0.3"
picomatch "^2.3.1"
mime-db@1.52.0:
@@ -1002,13 +987,6 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.52.0"
-minimatch@9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -1016,10 +994,17 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+minimatch@^9.0.4:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
+ integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+ms@^2.1.3:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
natural-compare@^1.4.0:
version "1.4.0"
@@ -1034,16 +1019,16 @@ once@^1.3.0:
wrappy "1"
optionator@^0.9.3:
- version "0.9.3"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64"
- integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
+ integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==
dependencies:
- "@aashutoshrathi/word-wrap" "^1.2.3"
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
+ word-wrap "^1.2.5"
p-limit@^3.0.2:
version "3.1.0"
@@ -1109,9 +1094,9 @@ prettier-linter-helpers@^1.0.0:
fast-diff "^1.1.2"
prettier@^3.2.5:
- version "3.2.5"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
- integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393"
+ integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==
proxy-from-env@^1.1.0:
version "1.1.0"
@@ -1141,9 +1126,9 @@ resolve-from@^4.0.0:
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
reusify@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
- integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
rimraf@^3.0.2:
version "3.0.2"
@@ -1164,12 +1149,10 @@ safe-buffer@^5.1.0, safe-buffer@^5.2.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-semver@^7.5.4:
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
- integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
- dependencies:
- lru-cache "^6.0.0"
+semver@^7.6.0:
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
+ integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
set-function-length@^1.2.2:
version "1.2.2"
@@ -1228,13 +1211,12 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
-synckit@^0.8.6:
- version "0.8.8"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7"
- integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==
+synckit@^0.11.7:
+ version "0.11.11"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0"
+ integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==
dependencies:
- "@pkgr/core" "^0.1.0"
- tslib "^2.6.2"
+ "@pkgr/core" "^0.2.9"
text-table@^0.2.0:
version "0.2.0"
@@ -1262,15 +1244,10 @@ toml@^3.0.0:
resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
-ts-api-utils@^1.0.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b"
- integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==
-
-tslib@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
- integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+ts-api-utils@^1.3.0:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
@@ -1294,14 +1271,14 @@ typed-array-buffer@^1.0.3:
is-typed-array "^1.1.14"
typescript@^5.3.3:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+ version "5.9.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6"
+ integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
uri-js@^4.2.2:
version "4.4.1"
@@ -1335,16 +1312,16 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
+word-wrap@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+ integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
yocto-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"