diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0035c1c2..f4cd6ddb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -2,27 +2,26 @@ name: Linter and tests on: push: - branches: [ "master", "develop" ] + branches: ["master", "develop"] pull_request: - branches: [ "master", "develop" ] + branches: ["master", "develop"] env: CARGO_TERM_COLOR: always jobs: tests: - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Linter - run: make fmt-check - - name: Clippy - run: make clippy - - name: Test - run: | - rustup target add wasm32-unknown-unknown - make test - - name: Check - run: make check + - uses: actions/checkout@v3 + - name: Linter + run: make fmt-check + - name: Clippy + run: make clippy + - name: Test + run: | + rustup target add wasm32v1-none + make test + - name: Check + run: make check diff --git a/Cargo.lock b/Cargo.lock index b68039a5..dce1ba19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,28 +1,19 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "addr2line" -version = "0.21.0" +name = "ahash" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ - "gimli", + "cfg-if", + "once_cell", + "version_check", + "zerocopy", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_system_properties" version = "0.1.5" @@ -42,55 +33,146 @@ dependencies = [ ] [[package]] -name = "autocfg" -version = "1.1.0" +name = "ark-bls12-381" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] [[package]] -name = "backtrace" -version = "0.3.69" +name = "ark-ec" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", ] [[package]] -name = "base16ct" -version = "0.2.0" +name = "ark-ff" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] [[package]] -name = "base32" +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", +] [[package]] -name = "base64" -version = "0.13.1" +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + +[[package]] +name = "base16ct" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.21.7" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "block-buffer" @@ -103,9 +185,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes-lit" @@ -116,35 +198,46 @@ dependencies = [ "num-bigint", "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.2.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9" dependencies = [ - "libc", + "find-msvc-tools", + "shlex", ] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[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.106", +] [[package]] name = "chrono" -version = "0.4.33" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets", + "windows-link", ] [[package]] @@ -170,15 +263,15 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -218,26 +311,25 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "curve25519-dalek" -version = "4.1.1" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", - "platforms", "rustc_version", "subtle", "zeroize", @@ -251,44 +343,85 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "darling" -version = "0.20.5" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc5d6b04b3fd0ba9926f945895de7d806260a2d7431ba82e7edaecb043c4c6b8" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core 0.21.3", + "darling_macro 0.21.3", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.106", ] [[package]] name = "darling_core" -version = "0.20.5" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e48a959bcd5c761246f5d090ebc2fbf7b9cd527a492b07a67510c108f1e7e3" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.106", ] [[package]] name = "darling_macro" -version = "0.20.5" +version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d1545d67a2149e1d93b7e5c7752dce5a7426eb5d1357ddcfd89336b94444f77" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core", + "darling_core 0.20.11", "quote", - "syn", + "syn 2.0.106", ] +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core 0.21.3", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + [[package]] name = "debt-token" version = "0.1.0" @@ -316,9 +449,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "zeroize", @@ -326,12 +459,23 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", - "serde", + "serde_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -342,7 +486,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -359,15 +503,21 @@ dependencies = [ [[package]] name = "downcast-rs" -version = "1.2.0" +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 = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "ecdsa" -version = "0.16.7" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0997c976637b606099b9985693efa3581e84e41f5c11ba5255f88711058ad428" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" dependencies = [ "der", "digest", @@ -388,9 +538,9 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" dependencies = [ "curve25519-dalek", "ed25519", @@ -403,9 +553,9 @@ dependencies = [ [[package]] name = "either" -version = "1.9.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -427,9 +577,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "escape-bytes" @@ -439,15 +589,15 @@ checksum = "2bfcf67fea2815c2fc3b90873fae90957be12ff417335dfadc7f52927feb03b2" [[package]] name = "ethnum" -version = "1.5.0" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core", "subtle", @@ -455,9 +605,15 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.2.5" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "find-msvc-tools" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7" +checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959" [[package]] name = "flash-loan-receiver-interface" @@ -493,9 +649,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", @@ -504,12 +660,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - [[package]] name = "group" version = "0.13.0" @@ -529,9 +679,24 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" @@ -559,14 +724,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -599,13 +765,14 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.2" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824b2ae422412366ba479e8111fd301f7b5faece8149317bb81925979a53f520" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.16.0", "serde", + "serde_core", ] [[package]] @@ -616,33 +783,34 @@ checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" [[package]] name = "itertools" -version = "0.11.0" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "k256" -version = "0.13.1" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" dependencies = [ "cfg-if", "ecdsa", @@ -661,44 +829,45 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.153" +version = "0.2.176" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" +checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "log" -version = "0.4.20" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] -name = "memchr" -version = "2.7.1" +name = "macro-string" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] -name = "miniz_oxide" -version = "0.7.1" +name = "memchr" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "num-bigint" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ - "autocfg", "num-integer", "num-traits", ] @@ -711,48 +880,38 @@ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-derive" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "object" -version = "0.32.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "p256" @@ -768,9 +927,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pkcs8" @@ -782,12 +941,6 @@ dependencies = [ "spki", ] -[[package]] -name = "platforms" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" - [[package]] name = "pool" version = "0.1.0" @@ -819,18 +972,21 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.106", ] [[package]] @@ -860,18 +1016,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -906,6 +1062,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.106", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -916,26 +1092,26 @@ dependencies = [ "subtle", ] -[[package]] -name = "rustc-demangle" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" - [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "s-token" @@ -957,11 +1133,46 @@ dependencies = [ "soroban-sdk", ] +[[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" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", @@ -972,53 +1183,69 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.226" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.226" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" dependencies = [ "itoa", + "memchr", "ryu", "serde", + "serde_core", ] [[package]] name = "serde_with" -version = "3.6.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b0ed1662c5a68664f45b76d18deb0e234aff37207086803165c961eb695e981" +checksum = "c522100790450cf78eeac1507263d0a350d4d5b30df0c8e1fe051a10c22b376e" dependencies = [ - "base64 0.21.7", + "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.2", + "indexmap 2.11.4", + "schemars 0.8.22", + "schemars 0.9.0", + "schemars 1.0.4", "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -1026,21 +1253,21 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.6.0" +version = "3.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568577ff0ef47b879f736cd66740e022f3672788cdf002a05a4e609ea5a6fb15" +checksum = "327ada00f7d64abaac1e55a6911e90cf665aa051b9a561c7006c157f4633135e" dependencies = [ - "darling", + "darling 0.21.3", "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[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", @@ -1057,11 +1284,17 @@ dependencies = [ "keccak", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signature" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", "rand_core", @@ -1069,27 +1302,27 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "soroban-builtin-sdk-macros" -version = "21.2.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44877373b3dc6c662377cb1600e3a62706d75e484b6064f9cd22e467c676b159" +checksum = "d9336adeabcd6f636a4e0889c8baf494658ef5a3c4e7e227569acd2ce9091e85" dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "soroban-env-common" -version = "21.2.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "590add16843a61b01844e19e89bccaaee6aa21dc76809017b0662c17dc139ee9" +checksum = "00067f52e8bbf1abf0de03fe3e2fbb06910893cfbe9a7d9093d6425658833ff3" dependencies = [ "arbitrary", "crate-git-revision", @@ -1106,9 +1339,9 @@ dependencies = [ [[package]] name = "soroban-env-guest" -version = "21.2.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ec8dc43acdd6c7e7b371acf44fc1a7dac24934ae3b2f05fafd618818548176" +checksum = "ccd1e40963517b10963a8e404348d3fe6caf9c278ac47a6effd48771297374d6" dependencies = [ "soroban-env-common", "static_assertions", @@ -1116,11 +1349,14 @@ dependencies = [ [[package]] name = "soroban-env-host" -version = "21.2.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e25aaffe0c62eb65e0e349f725b4b8b13ad0764d78a15aab5bbccb5c4797726" +checksum = "b9766c5ad78e9d8ae10afbc076301f7d610c16407a1ebb230766dbe007a48725" dependencies = [ - "backtrace", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", "curve25519-dalek", "ecdsa", "ed25519-dalek", @@ -1149,9 +1385,9 @@ dependencies = [ [[package]] name = "soroban-env-macros" -version = "21.2.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e16b761459fdf3c4b62b24df3941498d14e5246e6fadfb4774ed8114d243aa4" +checksum = "b0e6a1c5844257ce96f5f54ef976035d5bd0ee6edefaf9f5e0bcb8ea4b34228c" dependencies = [ "itertools", "proc-macro2", @@ -1159,23 +1395,22 @@ dependencies = [ "serde", "serde_json", "stellar-xdr", - "syn", + "syn 2.0.106", ] [[package]] name = "soroban-fixed-point-math" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7ee8173a887e7c3a2e9c1f95e3944cdb2fad4009682efc4ad79e439c0e61bd" +version = "1.4.0" +source = "git+https://github.com/eq-lab/soroban-fixed-point-math?tag=soroban-sdk-23.0.2#e8966a8a0dab78bbd0ecabc3743ce4f349593e00" dependencies = [ "soroban-sdk", ] [[package]] name = "soroban-ledger-snapshot" -version = "21.4.0" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebb7961fc6d8f47e00d404d9240f51aba85df9d67a4f556ef1c6057b5327a8" +checksum = "3823372b72cab2e7ff2ced62bbffa11fce8da0713a224f122141558cab174647" dependencies = [ "serde", "serde_json", @@ -1187,15 +1422,18 @@ dependencies = [ [[package]] name = "soroban-sdk" -version = "21.4.0" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60cd55eb88cbe1d9e7fe3ab1845c7c10c26b27e2d226e973150e5b55580aa359" +checksum = "af0e5bf6702f5952d78c5b2bcd05b0349f9a570cc62028d90dac3710b40cbe65" dependencies = [ "arbitrary", "bytes-lit", + "crate-git-revision", "ctor", + "derive_arbitrary", "ed25519-dalek", "rand", + "rustc_version", "serde", "serde_json", "soroban-env-guest", @@ -1207,31 +1445,31 @@ dependencies = [ [[package]] name = "soroban-sdk-macros" -version = "21.4.0" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1916985d1871aa340d7eec834c387f74f80231c846801193c3252266a60a41e" +checksum = "b38abe20199c5d9fbff232381aa4e8e83302b34e82e38fbb090f41f1284fc920" dependencies = [ - "crate-git-revision", - "darling", + "darling 0.20.11", + "heck", "itertools", + "macro-string", "proc-macro2", "quote", - "rustc_version", "sha2", "soroban-env-common", "soroban-spec", "soroban-spec-rust", "stellar-xdr", - "syn", + "syn 2.0.106", ] [[package]] name = "soroban-spec" -version = "21.4.0" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439faff6a155975a9951f27aaa04ae8ef3fd8fe9413d202e2ea2ff094a593449" +checksum = "72526d30f8825b859afa7e0b94549dad05c58a6c928b0763620412744512d7e2" dependencies = [ - "base64 0.13.1", + "base64", "stellar-xdr", "thiserror", "wasmparser", @@ -1239,9 +1477,9 @@ dependencies = [ [[package]] name = "soroban-spec-rust" -version = "21.4.0" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20b2a571055f1ed15427ccb8d34ce4208b4135666eade124cfbecfc010fa2ea3" +checksum = "9088cb8307dad026cda494971c4f13c76f9427ab26becb7cd691da95dc5e9b1d" dependencies = [ "prettyplease", "proc-macro2", @@ -1249,15 +1487,15 @@ dependencies = [ "sha2", "soroban-spec", "stellar-xdr", - "syn", + "syn 2.0.106", "thiserror", ] [[package]] name = "soroban-token-sdk" -version = "21.0.1-preview.3" +version = "23.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167f126a89d05058cb0225da9593e6f36c442174745614d71be78afa44e5057e" +checksum = "4f6124c98e1919cd71186553a70b6bd7be8b032aacbb91dd033bf4b02616c3a9" dependencies = [ "soroban-sdk", ] @@ -1299,48 +1537,61 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "stellar-strkey" -version = "0.0.8" +version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12d2bf45e114117ea91d820a846fd1afbe3ba7d717988fee094ce8227a3bf8bd" +checksum = "ee1832fb50c651ad10f734aaf5d31ca5acdfb197a6ecda64d93fcdb8885af913" dependencies = [ - "base32", "crate-git-revision", - "thiserror", + "data-encoding", ] [[package]] name = "stellar-xdr" -version = "21.2.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2675a71212ed39a806e415b0dbf4702879ff288ec7f5ee996dda42a135512b50" +checksum = "89d2848e1694b0c8db81fd812bfab5ea71ee28073e09ccc45620ef3cf7a75a9b" dependencies = [ "arbitrary", - "base64 0.13.1", + "base64", + "cfg_eval", "crate-git-revision", "escape-bytes", + "ethnum", "hex", "serde", "serde_with", + "sha2", "stellar-strkey", ] [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] [[package]] name = "syn" -version = "2.0.39" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -1349,29 +1600,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.55" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3de26b0965292219b4287ff031fcba86837900fe9cd2b34ea8ad893c0953d2" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.55" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "268026685b2be38d7103e9e507c938a1fcb3d7e6eb15e87870b617bf37b6d581" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] name = "time" -version = "0.3.32" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe80ced77cbfb4cb91a94bf72b378b4b6791a0d9b7f09d0be747d1bdff4e68bd" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", "itoa", @@ -1384,15 +1635,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.17" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ "num-conv", "time-core", @@ -1400,58 +1651,60 @@ dependencies = [ [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", + "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.106", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1459,22 +1712,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasmi_arena" @@ -1500,87 +1756,114 @@ version = "0.116.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a58e28b80dd8340cb07b8242ae654756161f6fc8d0038123d679b7b99964fa50" dependencies = [ - "indexmap 2.2.2", + "indexmap 2.11.4", "semver", ] [[package]] name = "wasmparser-nostd" -version = "0.100.1" +version = "0.100.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724" +checksum = "d5a015fe95f3504a94bb1462c717aae75253e39b9dd6c3fb1062c934535c64aa" dependencies = [ "indexmap-nostd", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c" dependencies = [ - "windows-targets", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", ] [[package]] -name = "windows-targets" -version = "0.52.0" +name = "windows-implement" +version = "0.60.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "proc-macro2", + "quote", + "syn 2.0.106", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" +name = "windows-interface" +version = "0.59.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" +name = "windows-link" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" [[package]] -name = "windows_i686_gnu" -version = "0.52.0" +name = "windows-result" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f" +dependencies = [ + "windows-link", +] [[package]] -name = "windows_i686_msvc" -version = "0.52.0" +name = "windows-strings" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda" +dependencies = [ + "windows-link", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" +name = "zerocopy" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] [[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" +name = "zerocopy-derive" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] [[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" +name = "zeroize" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] [[package]] -name = "zeroize" -version = "1.7.0" +name = "zeroize_derive" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] diff --git a/Cargo.toml b/Cargo.toml index f292f5f2..74223345 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,10 +32,11 @@ inherits = "release" debug-assertions = true [workspace.dependencies.soroban-sdk] -version = "21.0.1-preview.3" +version = "23.0.2" [workspace.dependencies.soroban-token-sdk] -version = "21.0.1-preview.3" +version = "23.0.2" [workspace.dependencies.soroban-fixed-point-math] -version = "1.1.1" +git = "https://github.com/eq-lab/soroban-fixed-point-math" +tag = "soroban-sdk-23.0.2" \ No newline at end of file diff --git a/Makefile b/Makefile index 64b2d315..8982c69d 100644 --- a/Makefile +++ b/Makefile @@ -16,11 +16,11 @@ budget: build cargo test -p pool budget --features budget -- --test-threads=1 build: - cargo build --target wasm32-unknown-unknown --release - @ls -l target/wasm32-unknown-unknown/release/*.wasm + cargo build --target wasm32v1-none --release + @ls -l target/wasm32v1-none/release/*.wasm deploy-contracts: - (cd deploy/artifacts && shopt -s dotglob; rm -rf *) + (cd deploy/artifacts/$(env) && shopt -s dotglob; rm -rf *) ./deploy/scripts/deploy.sh $(env) init-contracts: @@ -36,7 +36,7 @@ upgrade-pool-contract: ./deploy/scripts/upgrade.sh $(env) check: - cargo check --target wasm32-unknown-unknown --release + cargo check --target wasm32v1-none --release fmt: cargo fmt --all diff --git a/README.md b/README.md index 4cab20ca..a610fde5 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ make test To run the tests you need to install **soroban-cli** version 20.0.2 ```shell -cargo install --locked --version 20.1.1 soroban-cli --features opt +cargo install --locked stellar-cli@23.1.3 --features opt ``` Run a local standalone (or Futurenet) network with the following command: diff --git a/contracts/common-token/Cargo.toml b/contracts/common-token/Cargo.toml index 9c09971a..5c263124 100644 --- a/contracts/common-token/Cargo.toml +++ b/contracts/common-token/Cargo.toml @@ -3,6 +3,7 @@ name = "common-token" authors = ["eq-lab"] version = "0.1.0" edition = "2021" +publish = false description = "Common stoken & debt-token implementation" [dependencies] diff --git a/contracts/common/Cargo.toml b/contracts/common/Cargo.toml index 2c449019..8bc2da86 100644 --- a/contracts/common/Cargo.toml +++ b/contracts/common/Cargo.toml @@ -3,7 +3,8 @@ name = "common" authors = ["eq-lab"] version = "0.1.0" edition = "2021" +publish = false description = "Common units" [dependencies] -soroban-fixed-point-math = { workspace = true } +soroban-fixed-point-math = { workspace = true } \ No newline at end of file diff --git a/contracts/debt-token/Cargo.toml b/contracts/debt-token/Cargo.toml index adbb0034..83ba10ef 100644 --- a/contracts/debt-token/Cargo.toml +++ b/contracts/debt-token/Cargo.toml @@ -3,6 +3,7 @@ name = "debt-token" version = "0.1.0" edition = "2021" authors = ["eq-lab"] +publish = false description = "Debt-token contract" [lib] diff --git a/contracts/debt-token/src/event.rs b/contracts/debt-token/src/event.rs index f4ad320e..c4f4f8ef 100644 --- a/contracts/debt-token/src/event.rs +++ b/contracts/debt-token/src/event.rs @@ -1,33 +1,42 @@ -use soroban_sdk::{symbol_short, Address, Env, String, Symbol}; +use soroban_sdk::{contractevent, Address, String}; -pub(crate) fn initialized( - e: &Env, - underlying_asset: Address, - pool: Address, - decimals: u32, - name: String, - symbol: String, -) { - let topics = (symbol_short!("init"), underlying_asset, pool); - e.events().publish(topics, (decimals, name, symbol)); +#[contractevent(topics=["init"], data_format = "map")] +pub(crate) struct InitializedEvent { + #[topic] + pub underlying_asset: Address, + #[topic] + pub pool: Address, + pub decimals: u32, + pub name: String, + pub symbol: String, } -pub(crate) fn set_authorized(e: &Env, id: Address, authorize: bool) { - let topics = (Symbol::new(e, "set_authorized"), id); - e.events().publish(topics, authorize); +#[contractevent(topics=["set_authorized"], data_format = "single-value")] +pub(crate) struct SetAuthorizedEvent { + #[topic] + pub id: Address, + pub authorize: bool, } -pub(crate) fn mint(e: &Env, admin: Address, to: Address, amount: i128) { - let topics = (symbol_short!("mint"), admin, to); - e.events().publish(topics, amount); +#[contractevent(topics=["mint"], data_format = "single-value")] +pub(crate) struct MintEvent { + #[topic] + pub admin: Address, + #[topic] + pub to: Address, + pub amount: i128, } -pub(crate) fn burn(e: &Env, from: Address, amount: i128) { - let topics = (symbol_short!("burn"), from); - e.events().publish(topics, amount); +#[contractevent(topics=["burn"], data_format = "single-value")] +pub(crate) struct BurnEvent { + #[topic] + pub from: Address, + pub amount: i128, } -pub(crate) fn clawback(e: &Env, from: Address, amount: i128) { - let topics = (symbol_short!("clawback"), from); - e.events().publish(topics, amount); +#[contractevent(topics=["clawback"], data_format = "single-value")] +pub(crate) struct ClawbackEvent { + #[topic] + pub from: Address, + pub amount: i128, } diff --git a/contracts/debt-token/src/lib.rs b/contracts/debt-token/src/lib.rs index 12898f48..05ca14e0 100644 --- a/contracts/debt-token/src/lib.rs +++ b/contracts/debt-token/src/lib.rs @@ -8,6 +8,8 @@ use debt_token_interface::DebtTokenTrait; use soroban_sdk::{contract, contractimpl, token, Address, BytesN, Env, String}; use soroban_token_sdk::metadata::TokenMetadata; +use crate::event::{BurnEvent, ClawbackEvent, InitializedEvent, MintEvent, SetAuthorizedEvent}; + mod event; mod test; @@ -48,18 +50,25 @@ impl DebtTokenTrait for DebtToken { // it can be optimized by passing decimals as argument let token = token::Client::new(&e, &underlying_asset); - let decimal = token.decimals(); + let decimals = token.decimals(); write_metadata( &e, TokenMetadata { - decimal, + decimal: decimals, name: name.clone(), symbol: symbol.clone(), }, ); - event::initialized(&e, underlying_asset, pool, decimal, name, symbol); + InitializedEvent { + underlying_asset, + pool, + decimals, + name, + symbol, + } + .publish(&e); } /// Upgrades the deployed contract wasm preserving the contract id. @@ -80,7 +89,7 @@ impl DebtTokenTrait for DebtToken { /// Returns the current version of the contract. fn version() -> u32 { - 1 + 2 } /// Returns the balance of tokens for a specified `id`. @@ -143,7 +152,7 @@ impl DebtTokenTrait for DebtToken { spend_balance(&env, from.clone(), amount); add_total_supply(&env, amount.checked_neg().expect("debt-token: no overflow")); - event::burn(&env, from, amount); + BurnEvent { from, amount }.publish(&env); } fn burn_from(_env: Env, _spender: Address, _from: Address, _amount: i128) { @@ -165,7 +174,8 @@ impl DebtTokenTrait for DebtToken { verify_caller_is_pool(&e); write_authorization(&e, id.clone(), authorize); - event::set_authorized(&e, id, authorize); + + SetAuthorizedEvent { id, authorize }.publish(&e); } /// Mints a specified amount of tokens for a given `id`. @@ -185,7 +195,13 @@ impl DebtTokenTrait for DebtToken { receive_balance(&env, to.clone(), amount); add_total_supply(&env, amount); - event::mint(&env, pool, to, amount); + + MintEvent { + admin: pool, + to, + amount, + } + .publish(&env); } /// Clawbacks a specified amount of tokens from the from account. @@ -206,7 +222,8 @@ impl DebtTokenTrait for DebtToken { spend_balance(&env, from.clone(), amount); add_total_supply(&env, amount.checked_neg().expect("debt-token: no overflow")); - event::clawback(&env, from, amount); + + ClawbackEvent { from, amount }.publish(&env); } /// Returns the number of decimal places used by the token. diff --git a/contracts/debt-token/src/test.rs b/contracts/debt-token/src/test.rs index f22c3bda..8ca25ffb 100644 --- a/contracts/debt-token/src/test.rs +++ b/contracts/debt-token/src/test.rs @@ -11,11 +11,12 @@ use crate::DebtToken; fn create_token<'a>(e: &Env) -> (DebtTokenClient<'a>, Address) { let pool = Address::generate(e); - let token = DebtTokenClient::new(e, &e.register_contract(None, DebtToken {})); + let token = DebtTokenClient::new(e, &e.register(DebtToken {}, ())); let underlying_asset = TokenClient::new( &e, - &e.register_stellar_asset_contract(Address::generate(&e)), + &e.register_stellar_asset_contract_v2(Address::generate(&e)) + .address(), ); token.initialize( @@ -34,11 +35,12 @@ fn initialize() { e.mock_all_auths(); let pool = Address::generate(&e); - let token = DebtTokenClient::new(&e, &e.register_contract(None, DebtToken {})); + let token = DebtTokenClient::new(&e, &e.register(DebtToken {}, ())); let underlying_asset = TokenClient::new( &e, - &e.register_stellar_asset_contract(Address::generate(&e)), + &e.register_stellar_asset_contract_v2(Address::generate(&e)) + .address(), ); token.initialize( diff --git a/contracts/deployer/src/lib.rs b/contracts/deployer/src/lib.rs index b69b484c..5c3af44d 100644 --- a/contracts/deployer/src/lib.rs +++ b/contracts/deployer/src/lib.rs @@ -22,7 +22,10 @@ impl Deployer { admin: Address, pool_config: PoolConfig, ) -> (Address, Val) { - let id = env.deployer().with_current_contract(salt).deploy(wasm_hash); + let id = env + .deployer() + .with_current_contract(salt) + .deploy_v2(wasm_hash, ()); let init_fn = Symbol::new(&env, "initialize"); let init_args = vec![&env, admin.into_val(&env), pool_config.into_val(&env)]; let res: Val = env.invoke_contract(&id, &init_fn, init_args); @@ -42,7 +45,10 @@ impl Deployer { pool: Address, underlying_asset: Address, ) -> (Address, Val) { - let id = env.deployer().with_current_contract(salt).deploy(wasm_hash); + let id = env + .deployer() + .with_current_contract(salt) + .deploy_v2(wasm_hash, ()); let init_fn = Symbol::new(&env, "initialize"); let init_args = vec![ &env, @@ -68,7 +74,10 @@ impl Deployer { pool: Address, underlying_asset: Address, ) -> (Address, Val) { - let id = env.deployer().with_current_contract(salt).deploy(wasm_hash); + let id = env + .deployer() + .with_current_contract(salt) + .deploy_v2(wasm_hash, ()); let init_fn = Symbol::new(&env, "initialize"); let init_args = vec![ &env, diff --git a/contracts/deployer/src/test.rs b/contracts/deployer/src/test.rs index 8b4cb2d6..d794ca26 100644 --- a/contracts/deployer/src/test.rs +++ b/contracts/deployer/src/test.rs @@ -8,23 +8,21 @@ use soroban_sdk::{ }; mod pool { - soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/pool.wasm"); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/pool.wasm"); } mod s_token { - soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/s_token.wasm"); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/s_token.wasm"); } mod debt_token { - soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/debt_token.wasm" - ); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/debt_token.wasm"); } #[test] fn deploy_pool_and_s_token() { let env = Env::default(); - let client = DeployerClient::new(&env, &env.register_contract(None, Deployer)); + let client = DeployerClient::new(&env, &env.register(Deployer, ())); let flash_loan_fee = 5; let initial_health = 2_500; @@ -63,13 +61,14 @@ fn deploy_pool_and_s_token() { contract_id }; - env.budget().reset_default(); + env.cost_estimate().budget().reset_default(); // Invoke contract to check that it is initialized. let pool_client = pool::Client::new(&env, &pool_contract_id); let underlying_asset = TokenClient::new( &env, - &env.register_stellar_asset_contract(Address::generate(&env)), + &env.register_stellar_asset_contract_v2(Address::generate(&env)) + .address(), ); // Deploy s-token let s_token_contract_id = { @@ -93,7 +92,7 @@ fn deploy_pool_and_s_token() { let _s_token_client = s_token::Client::new(&env, &s_token_contract_id); - env.budget().reset_default(); + env.cost_estimate().budget().reset_default(); // Deploy debt token let debt_token_contract_id = { diff --git a/contracts/pool/Cargo.toml b/contracts/pool/Cargo.toml index d1b52a78..aefc8649 100644 --- a/contracts/pool/Cargo.toml +++ b/contracts/pool/Cargo.toml @@ -3,6 +3,7 @@ name = "pool" authors = ["eq-lab"] version = "0.1.0" edition = "2021" +publish = false description = "Liquidity pool contract" [lib] diff --git a/contracts/pool/src/event.rs b/contracts/pool/src/event.rs index 5ea79700..679c4f56 100644 --- a/contracts/pool/src/event.rs +++ b/contracts/pool/src/event.rs @@ -1,107 +1,119 @@ -use pool_interface::types::{ - collateral_params_input::CollateralParamsInput, pool_config::PoolConfig, -}; -use soroban_sdk::{symbol_short, Address, Env, Symbol}; +use soroban_sdk::{contractevent, Address}; -pub(crate) fn initialized(e: &Env, admin: &Address, pool_config: &PoolConfig) { - let topics = ( - Symbol::new(e, "initialize"), - admin, - pool_config.base_asset_address.clone(), - ); - e.events().publish( - topics, - ( - pool_config.ir_alpha, - pool_config.ir_initial_rate, - pool_config.ir_max_rate, - pool_config.ir_scaling_coeff, - pool_config.base_asset_decimals, - pool_config.initial_health, - pool_config.grace_period, - pool_config.timestamp_window, - pool_config.flash_loan_fee, - pool_config.user_assets_limit, - pool_config.min_collat_amount, - pool_config.min_debt_amount, - pool_config.liquidation_protocol_fee, - ), - ); +#[contractevent(topics=["initialize"], data_format = "map")] +pub(crate) struct InitializedEvent { + #[topic] + pub admin: Address, + #[topic] + pub base_asset_address: Address, + pub ir_alpha: u32, + pub ir_initial_rate: u32, + pub ir_max_rate: u32, + pub ir_scaling_coeff: u32, + pub base_asset_decimals: u32, + pub initial_health: u32, + pub grace_period: u64, + pub timestamp_window: u64, + pub flash_loan_fee: u32, + pub user_assets_limit: u32, + pub min_collat_amount: i128, + pub min_debt_amount: i128, + pub liquidation_protocol_fee: u32, } -pub(crate) fn reserve_used_as_collateral_enabled(e: &Env, who: &Address, asset: &Address) { - let topics = (Symbol::new(e, "reserve_used_as_coll_enabled"), who.clone()); - e.events().publish(topics, asset.clone()); +#[contractevent(topics=["reserve_used_as_coll_enabled"], data_format = "single-value")] +pub(crate) struct ReserveUsedAsCollEnabledEvent { + #[topic] + pub who: Address, + pub asset: Address, } -pub(crate) fn reserve_used_as_collateral_disabled(e: &Env, who: &Address, asset: &Address) { - let topics = (Symbol::new(e, "reserve_used_as_coll_disabled"), who.clone()); - e.events().publish(topics, asset.clone()); +#[contractevent(topics=["reserve_used_as_coll_disabled"], data_format = "single-value")] +pub(crate) struct ReserveUsedAsCollDisabledEvent { + #[topic] + pub who: Address, + pub asset: Address, } -pub(crate) fn deposit(e: &Env, who: &Address, asset: &Address, amount: i128) { - let topics = (symbol_short!("deposit"), who.clone()); - e.events().publish(topics, (asset.clone(), amount)); +#[contractevent(topics=["deposit"], data_format = "map")] +pub(crate) struct DepositEvent { + #[topic] + pub who: Address, + pub asset: Address, + pub amount: i128, } -pub(crate) fn withdraw(e: &Env, who: &Address, asset: &Address, to: &Address, amount: i128) { - let topics = (symbol_short!("withdraw"), who.clone()); - e.events().publish(topics, (to, asset.clone(), amount)); +#[contractevent(topics=["withdraw"], data_format = "map")] +pub(crate) struct WithdrawEvent { + #[topic] + pub who: Address, + pub to: Address, + pub asset: Address, + pub amount: i128, } -pub(crate) fn borrow(e: &Env, who: &Address, asset: &Address, amount: i128) { - let topics = (symbol_short!("borrow"), who.clone()); - e.events().publish(topics, (asset.clone(), amount)); +#[contractevent(topics=["borrow"], data_format = "map")] +pub(crate) struct BorrowEvent { + #[topic] + pub who: Address, + pub asset: Address, + pub amount: i128, } -pub(crate) fn repay(e: &Env, who: &Address, asset: &Address, amount: i128) { - let topics = (symbol_short!("repay"), who.clone()); - e.events().publish(topics, (asset.clone(), amount)); +#[contractevent(topics=["repay"], data_format = "map")] +pub(crate) struct RepayEvent { + #[topic] + pub who: Address, + pub asset: Address, + pub amount: i128, } -pub(crate) fn collat_config_change(e: &Env, asset: &Address, params: &CollateralParamsInput) { - let topics = (Symbol::new(e, "collat_config_change"), asset.clone()); - e.events().publish( - topics, - ( - params.liq_cap, - params.pen_order, - params.util_cap, - params.discount, - ), - ); +#[contractevent(topics=["collat_config_change"], data_format = "map")] +pub(crate) struct CollatConfigChangeEvent { + #[topic] + pub asset: Address, + pub liq_cap: i128, + pub pen_order: u32, + pub util_cap: u32, + pub discount: u32, } -pub(crate) fn borrowing_enabled(e: &Env, asset: &Address) { - let topics = (Symbol::new(e, "borrowing_enabled"), asset.clone()); - e.events().publish(topics, ()); +#[contractevent(topics=["borrowing_enabled"], data_format = "single-value")] +pub(crate) struct BorrowingEnabledEvent { + #[topic] + pub asset: Address, } -pub(crate) fn borrowing_disabled(e: &Env, asset: &Address) { - let topics = (Symbol::new(e, "borrowing_disabled"), asset.clone()); - e.events().publish(topics, ()); +#[contractevent(topics=["borrowing_disabled"], data_format = "single-value")] +pub(crate) struct BorrowingDisabledEvent { + #[topic] + pub asset: Address, } -pub(crate) fn reserve_status_changed(e: &Env, asset: &Address, activated: bool) { - let topics = (asset.clone(),); - e.events().publish(topics, activated); +#[contractevent(topics=["reserve_status_changed"], data_format = "single-value")] +pub(crate) struct ReserveStatusChangedEvent { + #[topic] + pub asset: Address, + pub activated: bool, } -pub(crate) fn liquidation(e: &Env, who: &Address, covered_debt: i128, liquidated_collateral: i128) { - let topics = (Symbol::new(e, "liquidation"), who.clone()); - e.events() - .publish(topics, (covered_debt, liquidated_collateral)); +#[contractevent(topics=["liquidation"], data_format = "map")] +pub(crate) struct LiquidationEvent { + #[topic] + pub who: Address, + pub covered_debt: i128, + pub liquidated_collateral: i128, } -pub(crate) fn flash_loan( - e: &Env, - who: &Address, - receiver: &Address, - asset: &Address, - amount: i128, - premium: i128, - borrow: bool, -) { - let topics = (Symbol::new(e, "flash_loan"), who, receiver, asset); - e.events().publish(topics, (amount, premium, borrow)); +#[contractevent(topics=["flash_loan"], data_format = "map")] +pub(crate) struct FlashLoanEvent { + #[topic] + pub who: Address, + #[topic] + pub receiver: Address, + #[topic] + pub asset: Address, + pub amount: i128, + pub premium: i128, + pub borrow: bool, } diff --git a/contracts/pool/src/lib.rs b/contracts/pool/src/lib.rs index 792771f2..145e88dd 100644 --- a/contracts/pool/src/lib.rs +++ b/contracts/pool/src/lib.rs @@ -53,7 +53,7 @@ impl LendingPoolTrait for LendingPool { } fn version() -> u32 { - 1 + 2 } fn init_reserve(env: Env, asset: Address, reserve_type: ReserveType) -> Result<(), Error> { diff --git a/contracts/pool/src/methods/borrow.rs b/contracts/pool/src/methods/borrow.rs index 4b20c700..fd45a8df 100644 --- a/contracts/pool/src/methods/borrow.rs +++ b/contracts/pool/src/methods/borrow.rs @@ -7,7 +7,7 @@ use s_token_interface::STokenClient; use soroban_sdk::{Address, Env}; use crate::add_token_balance; -use crate::event; +use crate::event::BorrowEvent; use crate::read_pause_info; use crate::read_pool_config; use crate::storage::{ @@ -159,7 +159,12 @@ pub fn do_borrow( user_configurator.write(); - event::borrow(env, who, asset, amount); + BorrowEvent { + who: who.clone(), + asset: asset.clone(), + amount, + } + .publish(env); Ok(debt_token_supply_after) } diff --git a/contracts/pool/src/methods/configure_as_collateral.rs b/contracts/pool/src/methods/configure_as_collateral.rs index b799a07e..40339f2e 100644 --- a/contracts/pool/src/methods/configure_as_collateral.rs +++ b/contracts/pool/src/methods/configure_as_collateral.rs @@ -2,7 +2,7 @@ use pool_interface::types::collateral_params_input::CollateralParamsInput; use pool_interface::types::error::Error; use soroban_sdk::{Address, Env}; -use crate::event; +use crate::event::CollatConfigChangeEvent; use crate::storage::{read_reserve, write_reserve}; use super::utils::validation::{ @@ -22,7 +22,15 @@ pub fn configure_as_collateral( reserve.update_collateral_config(params); write_reserve(env, asset, &reserve); - event::collat_config_change(env, asset, params); + + CollatConfigChangeEvent { + asset: asset.clone(), + liq_cap: params.liq_cap, + pen_order: params.pen_order, + util_cap: params.util_cap, + discount: params.discount, + } + .publish(env); Ok(()) } diff --git a/contracts/pool/src/methods/deposit.rs b/contracts/pool/src/methods/deposit.rs index 3c9127d3..4a1f5a04 100644 --- a/contracts/pool/src/methods/deposit.rs +++ b/contracts/pool/src/methods/deposit.rs @@ -6,7 +6,7 @@ use s_token_interface::STokenClient; use soroban_sdk::{token, Address, Env}; use crate::add_token_balance; -use crate::event; +use crate::event::DepositEvent; use crate::read_pause_info; use crate::read_pool_config; use crate::storage::{ @@ -70,7 +70,12 @@ pub fn deposit(env: &Env, who: &Address, asset: &Address, amount: i128) -> Resul do_deposit_rwa(env, who, asset, amount)? }; - event::deposit(env, who, asset, amount); + DepositEvent { + who: who.clone(), + asset: asset.clone(), + amount, + } + .publish(env); user_configurator .deposit(reserve.get_id(), asset, is_first_deposit)? @@ -131,7 +136,7 @@ fn do_deposit_fungible( fn do_deposit_rwa(env: &Env, who: &Address, asset: &Address, amount: i128) -> Result { let balance_before = read_token_balance(env, asset, who); - token::Client::new(env, asset).transfer(who, &env.current_contract_address(), &amount); + token::Client::new(env, asset).transfer(who, env.current_contract_address(), &amount); let balance_after = balance_before .checked_add(amount) .ok_or(Error::MathOverflowError)?; diff --git a/contracts/pool/src/methods/enable_borrowing_on_reserve.rs b/contracts/pool/src/methods/enable_borrowing_on_reserve.rs index f55c3d40..5f947d24 100644 --- a/contracts/pool/src/methods/enable_borrowing_on_reserve.rs +++ b/contracts/pool/src/methods/enable_borrowing_on_reserve.rs @@ -1,7 +1,7 @@ use pool_interface::types::error::Error; use soroban_sdk::{Address, Env}; -use crate::event; +use crate::event::{BorrowingDisabledEvent, BorrowingEnabledEvent}; use crate::storage::{read_reserve, write_reserve}; use super::utils::validation::{require_admin, require_fungible_reserve}; @@ -19,9 +19,15 @@ pub fn enable_borrowing_on_reserve(env: &Env, asset: &Address, enabled: bool) -> write_reserve(env, asset, &reserve); if enabled { - event::borrowing_enabled(env, asset); + BorrowingEnabledEvent { + asset: asset.clone(), + } + .publish(env); } else { - event::borrowing_disabled(env, asset); + BorrowingDisabledEvent { + asset: asset.clone(), + } + .publish(env); } Ok(()) diff --git a/contracts/pool/src/methods/flash_loan.rs b/contracts/pool/src/methods/flash_loan.rs index f6f585cf..565994ff 100644 --- a/contracts/pool/src/methods/flash_loan.rs +++ b/contracts/pool/src/methods/flash_loan.rs @@ -5,9 +5,10 @@ use pool_interface::types::flash_loan_asset::FlashLoanAsset; use s_token_interface::STokenClient; use soroban_sdk::{assert_with_error, token, vec, Address, Bytes, Env, Vec}; +use crate::event::FlashLoanEvent; use crate::methods::utils::validation::require_not_in_grace_period; use crate::storage::{read_reserve, read_token_balance, read_token_total_supply}; -use crate::{add_protocol_fee_vault, event, read_pause_info, read_pool_config}; +use crate::{add_protocol_fee_vault, read_pause_info, read_pool_config}; use super::borrow::do_borrow; use super::utils::recalculate_reserve_data::recalculate_reserve_data; @@ -119,15 +120,15 @@ pub fn flash_loan( received_asset.premium }; - event::flash_loan( - env, - who, - receiver, - &received_asset.asset, - received_asset.amount, + FlashLoanEvent { + who: who.clone(), + receiver: receiver.clone(), + asset: received_asset.asset.clone(), + amount: received_asset.amount, premium, - loan_asset.borrow, - ); + borrow: loan_asset.borrow, + } + .publish(env); } Ok(()) diff --git a/contracts/pool/src/methods/initialize.rs b/contracts/pool/src/methods/initialize.rs index 66e63478..82837e5b 100644 --- a/contracts/pool/src/methods/initialize.rs +++ b/contracts/pool/src/methods/initialize.rs @@ -2,7 +2,7 @@ use pool_interface::types::error::Error; use pool_interface::types::pool_config::PoolConfig; use soroban_sdk::{Address, Env}; -use crate::event; +use crate::event::InitializedEvent; use crate::storage::write_admin; use super::set_pool_configuration::set_pool_configuration; @@ -15,7 +15,24 @@ pub fn initialize(env: &Env, admin: &Address, pool_config: &PoolConfig) -> Resul set_pool_configuration(env, pool_config, false)?; - event::initialized(env, admin, pool_config); + InitializedEvent { + admin: admin.clone(), + base_asset_address: pool_config.base_asset_address.clone(), + ir_alpha: pool_config.ir_alpha, + ir_initial_rate: pool_config.ir_initial_rate, + ir_max_rate: pool_config.ir_max_rate, + ir_scaling_coeff: pool_config.ir_scaling_coeff, + base_asset_decimals: pool_config.base_asset_decimals, + initial_health: pool_config.initial_health, + grace_period: pool_config.grace_period, + timestamp_window: pool_config.timestamp_window, + flash_loan_fee: pool_config.flash_loan_fee, + user_assets_limit: pool_config.user_assets_limit, + min_collat_amount: pool_config.min_collat_amount, + min_debt_amount: pool_config.min_debt_amount, + liquidation_protocol_fee: pool_config.liquidation_protocol_fee, + } + .publish(env); Ok(()) } diff --git a/contracts/pool/src/methods/liquidate.rs b/contracts/pool/src/methods/liquidate.rs index 87589728..c6121270 100644 --- a/contracts/pool/src/methods/liquidate.rs +++ b/contracts/pool/src/methods/liquidate.rs @@ -6,6 +6,7 @@ use pool_interface::types::reserve_type::ReserveType; use s_token_interface::STokenClient; use soroban_sdk::{assert_with_error, token, Address, Env}; +use crate::event::LiquidationEvent; use crate::methods::utils::recalculate_reserve_data::recalculate_reserve_data; use crate::methods::utils::validation::require_not_in_grace_period; use crate::types::account_data::AccountData; @@ -14,7 +15,7 @@ use crate::types::liquidation_asset::LiquidationAsset; use crate::types::price_provider::PriceProvider; use crate::types::user_configurator::UserConfigurator; use crate::{ - add_protocol_fee_vault, add_token_balance, event, read_pause_info, read_pool_config, + add_protocol_fee_vault, add_token_balance, read_pause_info, read_pool_config, read_token_balance, read_token_total_supply, write_token_balance, write_token_total_supply, }; @@ -56,7 +57,12 @@ pub fn liquidate(env: &Env, liquidator: &Address, who: &Address) -> Result<(), E &mut price_provider, )?; - event::liquidation(env, who, debt_covered_in_base, total_liq_in_base); + LiquidationEvent { + who: who.clone(), + covered_debt: debt_covered_in_base, + liquidated_collateral: total_liq_in_base, + } + .publish(env); Ok(()) } diff --git a/contracts/pool/src/methods/repay.rs b/contracts/pool/src/methods/repay.rs index 0851be6f..2510ef7b 100644 --- a/contracts/pool/src/methods/repay.rs +++ b/contracts/pool/src/methods/repay.rs @@ -5,6 +5,7 @@ use pool_interface::types::pool_config::PoolConfig; use pool_interface::types::reserve_data::ReserveData; use soroban_sdk::{token, Address, Env}; +use crate::event::RepayEvent; use crate::storage::{ read_reserve, read_token_balance, read_token_total_supply, write_token_balance, write_token_total_supply, @@ -12,7 +13,7 @@ use crate::storage::{ use crate::types::calc_account_data_cache::CalcAccountDataCache; use crate::types::price_provider::PriceProvider; use crate::types::user_configurator::UserConfigurator; -use crate::{add_protocol_fee_vault, add_token_balance, event, read_pause_info, read_pool_config}; +use crate::{add_protocol_fee_vault, add_token_balance, read_pause_info, read_pool_config}; use super::account_position::calc_account_data; use super::utils::get_collat_coeff::get_collat_coeff; @@ -168,7 +169,12 @@ pub fn do_repay( write_token_total_supply(env, debt_token_address, debt_token_supply_after)?; write_token_balance(env, debt_token_address, who, who_debt_after)?; - event::repay(env, who, asset, borrower_payback_amount); + RepayEvent { + who: who.clone(), + asset: asset.clone(), + amount: borrower_payback_amount, + } + .publish(env); user_configurator.write(); diff --git a/contracts/pool/src/methods/set_reserve_status.rs b/contracts/pool/src/methods/set_reserve_status.rs index 14d1065c..ab0adf78 100644 --- a/contracts/pool/src/methods/set_reserve_status.rs +++ b/contracts/pool/src/methods/set_reserve_status.rs @@ -1,8 +1,10 @@ use pool_interface::types::error::Error; use soroban_sdk::{Address, Env}; -use crate::event; -use crate::storage::{read_reserve, write_reserve}; +use crate::{ + event::ReserveStatusChangedEvent, + storage::{read_reserve, write_reserve}, +}; use super::utils::validation::require_admin; @@ -14,7 +16,11 @@ pub fn set_reserve_status(env: &Env, asset: &Address, is_active: bool) -> Result reserve.configuration.is_active = is_active; write_reserve(env, asset, &reserve); - event::reserve_status_changed(env, asset, is_active); + ReserveStatusChangedEvent { + asset: asset.clone(), + activated: is_active, + } + .publish(env); Ok(()) } diff --git a/contracts/pool/src/methods/withdraw.rs b/contracts/pool/src/methods/withdraw.rs index ae1e7257..87144bac 100644 --- a/contracts/pool/src/methods/withdraw.rs +++ b/contracts/pool/src/methods/withdraw.rs @@ -1,7 +1,9 @@ use crate::add_token_balance; +use crate::event::WithdrawEvent; use crate::methods::utils::get_collat_coeff::get_compounded_amount; use crate::methods::utils::get_collat_coeff::get_lp_amount; use crate::methods::utils::validation::require_gte_initial_health; +use crate::read_pause_info; use crate::read_pool_config; use crate::storage::{ read_reserve, read_token_balance, read_token_total_supply, write_token_balance, @@ -10,7 +12,6 @@ use crate::storage::{ use crate::types::calc_account_data_cache::CalcAccountDataCache; use crate::types::price_provider::PriceProvider; use crate::types::user_configurator::UserConfigurator; -use crate::{event, read_pause_info}; use pool_interface::types::asset_balance::AssetBalance; use pool_interface::types::error::Error; use pool_interface::types::reserve_type::ReserveType; @@ -201,7 +202,13 @@ pub fn withdraw( user_configurator.write(); - event::withdraw(env, who, asset, to, withdraw_amount); + WithdrawEvent { + who: who.clone(), + asset: asset.clone(), + to: to.clone(), + amount: withdraw_amount, + } + .publish(env); Ok(()) } diff --git a/contracts/pool/src/tests/borrow.rs b/contracts/pool/src/tests/borrow.rs index 530a8cca..5ca7ac88 100644 --- a/contracts/pool/src/tests/borrow.rs +++ b/contracts/pool/src/tests/borrow.rs @@ -2,7 +2,7 @@ use super::sut::DAY; use crate::tests::sut::{fill_pool, init_pool, set_time}; use pool_interface::types::pool_config::PoolConfig; use soroban_sdk::testutils::{Address as _, AuthorizedFunction, Events}; -use soroban_sdk::{symbol_short, vec, Address, Env, IntoVal, Symbol}; +use soroban_sdk::{symbol_short, vec, Address, Env, IntoVal, Map, Symbol, Val}; #[test] fn should_require_authorized_caller() { @@ -369,7 +369,14 @@ fn should_emit_events() { ( sut.pool.address.clone(), (Symbol::new(&env, "borrow"), borrower.clone()).into_val(&env), - (token_address.clone(), 20_000_000i128).into_val(&env) + Map::::from_array( + &env, + [ + (Symbol::new(&env, "asset"), token_address.into_val(&env)), + (Symbol::new(&env, "amount"), 20_000_000i128.into_val(&env),), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/budget.rs b/contracts/pool/src/tests/budget.rs index e3c9ab68..d12133d1 100644 --- a/contracts/pool/src/tests/budget.rs +++ b/contracts/pool/src/tests/budget.rs @@ -21,7 +21,7 @@ use super::sut::{ create_pool_contract, create_price_feed_contract, create_s_token_contract, create_token_contract, fill_pool, fill_pool_four, init_pool, set_time, DAY, }; -use super::upgrade::{debt_token_v2, pool_v2, s_token_v2}; +use super::upgrade::{debt_token_v100, pool_v100, s_token_v100}; const CPU_LIMIT: u64 = 100_000_000; const MEM_LIMIT: u64 = 40 * 1024 * 1024; @@ -644,10 +644,10 @@ fn upgrade() { env.mock_all_auths(); let sut = init_pool(&env, true); - let pool_v2_wasm = env.deployer().upload_contract_wasm(pool_v2::WASM); + let pool_v100_wasm = env.deployer().upload_contract_wasm(pool_v100::WASM); measure_budget(&env, function_name!(), || { - sut.pool.upgrade(&pool_v2_wasm); + sut.pool.upgrade(&pool_v100_wasm); }); } @@ -659,10 +659,10 @@ fn upgrade_s_token() { let sut = init_pool(&env, true); let asset = sut.reserves[0].token.address.clone(); - let s_token_v2_wasm = env.deployer().upload_contract_wasm(s_token_v2::WASM); + let s_token_v100_wasm = env.deployer().upload_contract_wasm(s_token_v100::WASM); measure_budget(&env, function_name!(), || { - sut.pool.upgrade_token(&asset, &true, &s_token_v2_wasm); + sut.pool.upgrade_token(&asset, &true, &s_token_v100_wasm); }); } @@ -672,11 +672,12 @@ fn upgrade_debt_token() { env.mock_all_auths(); let sut = init_pool(&env, true); - let debt_token_v2_wasm = env.deployer().upload_contract_wasm(debt_token_v2::WASM); + let debt_token_v100_wasm = env.deployer().upload_contract_wasm(debt_token_v100::WASM); let asset = sut.reserves[0].token.address.clone(); measure_budget(&env, function_name!(), || { - sut.pool.upgrade_token(&asset, &false, &debt_token_v2_wasm); + sut.pool + .upgrade_token(&asset, &false, &debt_token_v100_wasm); }); } @@ -702,16 +703,12 @@ fn s_token_transfer() { } fn measure_budget(env: &Env, function: &str, callback: impl FnOnce()) { - let cpu_before = env.budget().cpu_instruction_cost(); - let memory_before = env.budget().memory_bytes_cost(); + env.cost_estimate().budget().reset_unlimited(); callback(); - let cpu_after = env.budget().cpu_instruction_cost(); - let memory_after = env.budget().memory_bytes_cost(); - - let cpu = cpu_after - cpu_before; - let memory = memory_after - memory_before; + let cpu = env.cost_estimate().budget().cpu_instruction_cost(); + let memory = env.cost_estimate().budget().memory_bytes_cost(); let budget = &[ std::format!("['{}'] = {{\n", function), diff --git a/contracts/pool/src/tests/configure_as_collateral.rs b/contracts/pool/src/tests/configure_as_collateral.rs index ca597371..1c950444 100644 --- a/contracts/pool/src/tests/configure_as_collateral.rs +++ b/contracts/pool/src/tests/configure_as_collateral.rs @@ -4,7 +4,7 @@ extern crate std; use crate::{tests::sut::init_pool, *}; use soroban_sdk::{ testutils::{AuthorizedFunction, AuthorizedInvocation, Events}, - vec, IntoVal, Symbol, + vec, IntoVal, Map, Symbol, Val, }; #[test] @@ -156,14 +156,30 @@ fn should_emit_events() { &env, ( sut.pool.address.clone(), - (Symbol::new(&env, "collat_config_change"), &asset_address).into_val(&env), ( - params.liq_cap, - params.pen_order, - params.util_cap, - params.discount + Symbol::new(&env, "collat_config_change"), + asset_address.clone() ) - .into_val(&env) + .into_val(&env), + Map::::from_array( + &env, + [ + (Symbol::new(&env, "liq_cap"), params.liq_cap.into_val(&env),), + ( + Symbol::new(&env, "pen_order"), + params.pen_order.into_val(&env), + ), + ( + Symbol::new(&env, "util_cap"), + params.util_cap.into_val(&env), + ), + ( + Symbol::new(&env, "discount"), + params.discount.into_val(&env), + ), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/deposit.rs b/contracts/pool/src/tests/deposit.rs index 15db3f4a..c8ac6dcb 100644 --- a/contracts/pool/src/tests/deposit.rs +++ b/contracts/pool/src/tests/deposit.rs @@ -1,7 +1,7 @@ use crate::tests::sut::{fill_pool, init_pool, DAY}; use crate::*; use soroban_sdk::testutils::{Address as _, AuthorizedFunction, Events}; -use soroban_sdk::{symbol_short, vec, IntoVal, Symbol}; +use soroban_sdk::{symbol_short, vec, IntoVal, Map, Symbol, Val}; use tests::sut::set_time; #[test] @@ -237,7 +237,17 @@ fn should_emit_events() { ( sut.pool.address.clone(), (Symbol::new(&env, "deposit"), user.clone()).into_val(&env), - (token_address, 5_000_000_000i128).into_val(&env) + Map::::from_array( + &env, + [ + (Symbol::new(&env, "asset"), token_address.into_val(&env),), + ( + Symbol::new(&env, "amount"), + 5_000_000_000i128.into_val(&env), + ), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/flash_loan.rs b/contracts/pool/src/tests/flash_loan.rs index aadb2104..a706bf6c 100644 --- a/contracts/pool/src/tests/flash_loan.rs +++ b/contracts/pool/src/tests/flash_loan.rs @@ -2,7 +2,7 @@ use crate::tests::sut::{fill_pool, init_pool}; use pool_interface::types::flash_loan_asset::FlashLoanAsset; use pool_interface::types::pool_config::PoolConfig; use soroban_sdk::testutils::Events; -use soroban_sdk::{vec, Bytes, Env, IntoVal, Symbol, Val, Vec}; +use soroban_sdk::{vec, Bytes, Env, IntoVal, Map, Symbol, Val, Vec}; #[test] #[should_panic(expected = "HostError: Error(Contract, #307)")] @@ -216,7 +216,15 @@ fn should_emit_events() { &sut.reserves[0].token.address ) .into_val(&env), - (1000000i128, 500i128, false).into_val(&env) + Map::::from_array( + &env, + [ + (Symbol::new(&env, "amount"), 1000000i128.into_val(&env)), + (Symbol::new(&env, "premium"), 500i128.into_val(&env),), + (Symbol::new(&env, "borrow"), false.into_val(&env),), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/init_reserve.rs b/contracts/pool/src/tests/init_reserve.rs index 5f62ee75..d61e9678 100644 --- a/contracts/pool/src/tests/init_reserve.rs +++ b/contracts/pool/src/tests/init_reserve.rs @@ -83,7 +83,7 @@ fn should_fail_when_pool_not_initialized() { let (debt_token, _) = create_token_contract(&env, &token_admin); let pool: LendingPoolClient<'_> = - LendingPoolClient::new(&env, &env.register_contract(None, LendingPool)); + LendingPoolClient::new(&env, &env.register(LendingPool {}, ())); let s_token = create_s_token_contract(&env, &pool.address, &underlying_token.address); assert!(pool.get_reserve(&underlying_token.address).is_none()); diff --git a/contracts/pool/src/tests/liquidate.rs b/contracts/pool/src/tests/liquidate.rs index f2482e20..73d6d038 100644 --- a/contracts/pool/src/tests/liquidate.rs +++ b/contracts/pool/src/tests/liquidate.rs @@ -4,7 +4,7 @@ use common::FixedI128; use price_feed_interface::types::asset::Asset; use price_feed_interface::types::price_data::PriceData; use soroban_sdk::testutils::{Address as _, AuthorizedFunction, Events}; -use soroban_sdk::{symbol_short, vec, IntoVal, Symbol}; +use soroban_sdk::{symbol_short, vec, IntoVal, Map, Symbol, Val}; use tests::sut::set_time; use super::sut::fill_pool_six; @@ -791,7 +791,20 @@ fn should_emit_events() { ( sut.pool.address.clone(), (Symbol::new(&env, "liquidation"), borrower.clone()).into_val(&env), - (12_346_441_522i128, 15_434_514_766i128).into_val(&env) + Map::::from_array( + &env, + [ + ( + Symbol::new(&env, "covered_debt"), + 12_346_441_522i128.into_val(&env) + ), + ( + Symbol::new(&env, "liquidated_collateral"), + 15_434_514_766i128.into_val(&env), + ), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/repay.rs b/contracts/pool/src/tests/repay.rs index 8e39a605..6932d444 100644 --- a/contracts/pool/src/tests/repay.rs +++ b/contracts/pool/src/tests/repay.rs @@ -1,7 +1,7 @@ use crate::tests::sut::{fill_pool, init_pool, DAY}; use crate::*; use soroban_sdk::testutils::Events; -use soroban_sdk::{vec, IntoVal, Symbol}; +use soroban_sdk::{vec, IntoVal, Map, Symbol, Val}; use tests::sut::set_time; #[test] @@ -184,7 +184,14 @@ fn should_emit_events() { ( sut.pool.address.clone(), (Symbol::new(&env, "repay"), borrower.clone()).into_val(&env), - (debt_token, 40_009_097i128).into_val(&env) + Map::::from_array( + &env, + [ + (Symbol::new(&env, "asset"), debt_token.into_val(&env)), + (Symbol::new(&env, "amount"), 40_009_097i128.into_val(&env),), + ], + ) + .into_val(&env) ), ] ); diff --git a/contracts/pool/src/tests/rounding.rs b/contracts/pool/src/tests/rounding.rs index 86bf04b8..28242489 100644 --- a/contracts/pool/src/tests/rounding.rs +++ b/contracts/pool/src/tests/rounding.rs @@ -22,7 +22,7 @@ fn rounding_deposit_withdraw() { std::println!("debt coeff {:?}", sut.pool.debt_coeff(&token_address)); // i = 1 will panic with s-token: invalid mint amount, cause mint_amount would be equal to 0 for i in 2..101 { - env.budget().reset_unlimited(); + env.cost_estimate().budget().reset_unlimited(); let balance_before = sut.reserves[1].token.balance(&attacker); let s_balance_before = sut.reserves[1].s_token().balance(&attacker); @@ -88,7 +88,7 @@ fn rounding_borrow_repay() { std::println!("debt coeff {:?}", sut.pool.debt_coeff(&token_address)); // i = 1 will panic with zero or negative amount is not allowed, cause mint_amount would be equal to 0 for i in 2..101 { - env.budget().reset_unlimited(); + env.cost_estimate().budget().reset_unlimited(); let balance_before = sut.reserves[1].token.balance(&attacker); let d_balance_before = sut.reserves[1].debt_token().balance(&attacker); diff --git a/contracts/pool/src/tests/set_as_collateral.rs b/contracts/pool/src/tests/set_as_collateral.rs index f3e9a805..db493817 100644 --- a/contracts/pool/src/tests/set_as_collateral.rs +++ b/contracts/pool/src/tests/set_as_collateral.rs @@ -216,7 +216,7 @@ fn should_fail_when_collat_lt_min_position_amount() { /// Init for set_as_collateral tests. /// Returns Sut, user address, reserve index and token address -fn init(env: &Env) -> (Sut, Address, u8, Address) { +fn init(env: &'_ Env) -> (Sut<'_>, Address, u8, Address) { let sut = init_pool(env, false); let user = Address::generate(env); @@ -231,7 +231,7 @@ fn init(env: &Env) -> (Sut, Address, u8, Address) { } /// Returns Sut, user address, collat reserve index, debt reserve index, collat token address, debt token address -pub fn init_with_debt(env: &Env) -> (Sut, Address, (u8, u8), (Address, Address)) { +pub fn init_with_debt(env: &'_ Env) -> (Sut<'_>, Address, (u8, u8), (Address, Address)) { let (sut, user, collat_reserve_index, collat_address) = init(env); let lender = Address::generate(env); let token_admin = &sut.reserves[1].token_admin; diff --git a/contracts/pool/src/tests/set_reserve_status.rs b/contracts/pool/src/tests/set_reserve_status.rs index f5cd05eb..35660d69 100644 --- a/contracts/pool/src/tests/set_reserve_status.rs +++ b/contracts/pool/src/tests/set_reserve_status.rs @@ -81,7 +81,7 @@ fn should_emit_events() { &env, ( sut.pool.address.clone(), - (&asset,).into_val(&env), + (Symbol::new(&env, "reserve_status_changed"), asset.clone()).into_val(&env), (true).into_val(&env) ), ] @@ -97,7 +97,7 @@ fn should_emit_events() { &env, ( sut.pool.address.clone(), - (&asset,).into_val(&env), + (Symbol::new(&env, "reserve_status_changed"), &asset).into_val(&env), (false).into_val(&env) ), ] diff --git a/contracts/pool/src/tests/snapshots/budget_utilization.snap b/contracts/pool/src/tests/snapshots/budget_utilization.snap index 1af75d74..81000bc9 100644 --- a/contracts/pool/src/tests/snapshots/budget_utilization.snap +++ b/contracts/pool/src/tests/snapshots/budget_utilization.snap @@ -1,180 +1,180 @@ ['pool::tests::budget::account_position'] = { - "cpu_cost": 12081299, - "memory_cost": 5798758, + "cpu_cost": 4474187, + "memory_cost": 4117146, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::borrow'] = { - "cpu_cost": 16921234, - "memory_cost": 8939991, + "cpu_cost": 7166697, + "memory_cost": 6859780, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::collat_coeff'] = { - "cpu_cost": 8398842, - "memory_cost": 2972642, + "cpu_cost": 1622106, + "memory_cost": 1434496, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::configure_as_collateral'] = { - "cpu_cost": 8949676, - "memory_cost": 3090090, + "cpu_cost": 2169574, + "memory_cost": 1551597, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::debt_coeff'] = { - "cpu_cost": 8088641, - "memory_cost": 2918728, + "cpu_cost": 1302448, + "memory_cost": 1380365, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::deposit'] = { - "cpu_cost": 11711820, - "memory_cost": 4706143, + "cpu_cost": 3674687, + "memory_cost": 2924951, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::enable_borrowing_on_reserve'] = { - "cpu_cost": 8376228, - "memory_cost": 2991762, + "cpu_cost": 1588771, + "memory_cost": 1453137, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::flash_loan_with_borrow'] = { - "cpu_cost": 32054750, - "memory_cost": 19589834, + "cpu_cost": 15125596, + "memory_cost": 16202476, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::flash_loan_without_borrow'] = { - "cpu_cost": 18702751, - "memory_cost": 9495021, + "cpu_cost": 7591464, + "memory_cost": 7144825, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::get_reserve'] = { - "cpu_cost": 7915212, - "memory_cost": 2882514, + "cpu_cost": 1124568, + "memory_cost": 1343718, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::init_reserve'] = { - "cpu_cost": 235448, - "memory_cost": 46240, + "cpu_cost": 249861, + "memory_cost": 47924, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::liquidate_receive_underlying_when_borrower_has_one_debt'] = { - "cpu_cost": 18845425, - "memory_cost": 9202837, + "cpu_cost": 9181447, + "memory_cost": 7138407, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::liquidate_receive_underlying_when_borrower_has_two_debts'] = { - "cpu_cost": 19125918, - "memory_cost": 9201309, + "cpu_cost": 9476268, + "memory_cost": 7136171, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::pause_info'] = { - "cpu_cost": 7863072, - "memory_cost": 2881012, + "cpu_cost": 1071691, + "memory_cost": 1342113, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::price_feed'] = { - "cpu_cost": 7875236, - "memory_cost": 2881279, + "cpu_cost": 1084808, + "memory_cost": 1342371, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::repay_full'] = { - "cpu_cost": 13900500, - "memory_cost": 6174809, + "cpu_cost": 5981767, + "memory_cost": 4420457, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::repay_partial'] = { - "cpu_cost": 15291312, - "memory_cost": 7507482, + "cpu_cost": 6914030, + "memory_cost": 5678774, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::s_token_transfer'] = { - "cpu_cost": 14315021, - "memory_cost": 7369038, + "cpu_cost": 5316421, + "memory_cost": 5430156, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::set_as_collateral'] = { - "cpu_cost": 11635628, - "memory_cost": 5748051, + "cpu_cost": 3985534, + "memory_cost": 4063447, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::set_pause'] = { - "cpu_cost": 8313750, - "memory_cost": 2989617, + "cpu_cost": 1525887, + "memory_cost": 1450915, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::set_pool_configuration'] = { - "cpu_cost": 8530293, - "memory_cost": 3025860, + "cpu_cost": 1693058, + "memory_cost": 1477818, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::set_price_feed'] = { - "cpu_cost": 198318, - "memory_cost": 36408, + "cpu_cost": 208333, + "memory_cost": 38013, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::set_reserve_status'] = { - "cpu_cost": 8371304, - "memory_cost": 2991624, + "cpu_cost": 1587329, + "memory_cost": 1453142, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::stoken_underlying_balance'] = { - "cpu_cost": 7610392, - "memory_cost": 2841954, + "cpu_cost": 819829, + "memory_cost": 1300655, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::upgrade'] = { - "cpu_cost": 8091165, - "memory_cost": 2943026, + "cpu_cost": 1300859, + "memory_cost": 1404488, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::upgrade_debt_token'] = { - "cpu_cost": 9398991, - "memory_cost": 4298973, + "cpu_cost": 1689093, + "memory_cost": 2600588, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::upgrade_s_token'] = { - "cpu_cost": 9896182, - "memory_cost": 4399539, + "cpu_cost": 1730484, + "memory_cost": 2607287, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::user_configuration'] = { - "cpu_cost": 7618546, - "memory_cost": 2844949, + "cpu_cost": 827091, + "memory_cost": 1303753, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::withdraw_full'] = { - "cpu_cost": 15395769, - "memory_cost": 7488600, + "cpu_cost": 6564807, + "memory_cost": 5566723, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } ['pool::tests::budget::withdraw_partial'] = { - "cpu_cost": 15259759, - "memory_cost": 7504574, + "cpu_cost": 6386875, + "memory_cost": 5581247, "cpu_limit_exceeded": false, "memory_limit_exceeded": false, } diff --git a/contracts/pool/src/tests/sut.rs b/contracts/pool/src/tests/sut.rs index 6209ce00..708fb2ee 100644 --- a/contracts/pool/src/tests/sut.rs +++ b/contracts/pool/src/tests/sut.rs @@ -18,29 +18,25 @@ use soroban_sdk::IntoVal; use soroban_sdk::{vec, Env}; mod pool { - soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/pool.wasm"); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/pool.wasm"); } mod flash_loan_receiver { soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/flash_loan_receiver_mock.wasm" + file = "../../target/wasm32v1-none/release/flash_loan_receiver_mock.wasm" ); } mod s_token { - soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/s_token.wasm"); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/s_token.wasm"); } mod debt_token { - soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/debt_token.wasm" - ); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/debt_token.wasm"); } mod price_feed { - soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/price_feed_mock.wasm" - ); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/price_feed_mock.wasm"); } pub const DAY: u64 = 24 * 60 * 60; @@ -49,11 +45,11 @@ pub(crate) fn create_token_contract<'a>( e: &Env, admin: &Address, ) -> (TokenClient<'a>, TokenAdminClient<'a>) { - let stellar_asset_contract = e.register_stellar_asset_contract(admin.clone()); + let stellar_asset_contract = e.register_stellar_asset_contract_v2(admin.clone()); ( - TokenClient::new(e, &stellar_asset_contract), - TokenAdminClient::new(e, &stellar_asset_contract), + TokenClient::new(e, &stellar_asset_contract.address()), + TokenAdminClient::new(e, &stellar_asset_contract.address()), ) } @@ -64,9 +60,9 @@ pub(crate) fn create_pool_contract<'a>( base_token: &Address, ) -> LendingPoolClient<'a> { let client = if use_wasm { - LendingPoolClient::new(e, &e.register_contract_wasm(None, pool::WASM)) + LendingPoolClient::new(e, &e.register(pool::WASM, ())) } else { - LendingPoolClient::new(e, &e.register_contract(None, LendingPool)) + LendingPoolClient::new(e, &e.register(LendingPool {}, ())) }; let grace_period = 1; @@ -101,7 +97,7 @@ pub(crate) fn create_s_token_contract<'a>( pool: &Address, underlying_asset: &Address, ) -> STokenClient<'a> { - let client = STokenClient::new(&e, &e.register_contract_wasm(None, s_token::WASM)); + let client = STokenClient::new(&e, &e.register(s_token::WASM, ())); client.initialize( &"SToken".into_val(e), @@ -118,8 +114,7 @@ pub(crate) fn create_debt_token_contract<'a>( pool: &Address, underlying_asset: &Address, ) -> DebtTokenClient<'a> { - let client: DebtTokenClient<'_> = - DebtTokenClient::new(&e, &e.register_contract_wasm(None, debt_token::WASM)); + let client: DebtTokenClient<'_> = DebtTokenClient::new(&e, &e.register(debt_token::WASM, ())); client.initialize( &"DebtToken".into_val(e), @@ -132,18 +127,15 @@ pub(crate) fn create_debt_token_contract<'a>( } pub(crate) fn create_price_feed_contract<'a>(e: &Env) -> PriceFeedClient<'a> { - PriceFeedClient::new(&e, &e.register_contract_wasm(None, price_feed::WASM)) + PriceFeedClient::new(&e, &e.register(price_feed::WASM, ())) } pub(crate) fn create_flash_loan_receiver_contract<'a>(e: &Env) -> FlashLoanReceiverClient<'a> { - FlashLoanReceiverClient::new( - &e, - &e.register_contract_wasm(None, flash_loan_receiver::WASM), - ) + FlashLoanReceiverClient::new(&e, &e.register(flash_loan_receiver::WASM, ())) } pub(crate) fn init_pool<'a>(env: &Env, use_pool_wasm: bool) -> Sut<'a> { - env.budget().reset_unlimited(); + env.cost_estimate().budget().reset_unlimited(); let admin = Address::generate(&env); let token_admin = Address::generate(&env); diff --git a/contracts/pool/src/tests/upgrade.rs b/contracts/pool/src/tests/upgrade.rs index 7f0deae8..79cb03a8 100644 --- a/contracts/pool/src/tests/upgrade.rs +++ b/contracts/pool/src/tests/upgrade.rs @@ -7,16 +7,16 @@ use soroban_sdk::{symbol_short, vec, IntoVal}; use crate::tests::sut::init_pool; use crate::*; -pub mod pool_v2 { - soroban_sdk::contractimport!(file = "../../mocks/pool_v2_mock.wasm"); +pub mod pool_v100 { + soroban_sdk::contractimport!(file = "../../mocks/pool_v100_mock.wasm"); } -pub mod s_token_v2 { - soroban_sdk::contractimport!(file = "../../mocks/s_token_v2_mock.wasm"); +pub mod s_token_v100 { + soroban_sdk::contractimport!(file = "../../mocks/s_token_v100_mock.wasm"); } -pub mod debt_token_v2 { - soroban_sdk::contractimport!(file = "../../mocks/debt_token_v2_mock.wasm"); +pub mod debt_token_v100 { + soroban_sdk::contractimport!(file = "../../mocks/debt_token_v100_mock.wasm"); } #[test] @@ -25,7 +25,7 @@ fn should_require_admin() { env.mock_all_auths(); let sut = init_pool(&env, true); - let pool_v2_wasm = env.deployer().upload_contract_wasm(pool_v2::WASM); + let pool_v2_wasm = env.deployer().upload_contract_wasm(pool_v100::WASM); sut.pool.upgrade(&pool_v2_wasm); @@ -53,9 +53,9 @@ fn should_upgrade_contracts() { let sut = init_pool(&env, true); let asset = sut.reserves[0].token.address.clone(); - let pool_v2_wasm = env.deployer().upload_contract_wasm(pool_v2::WASM); - let s_token_v2_wasm = env.deployer().upload_contract_wasm(s_token_v2::WASM); - let debt_token_v2_wasm = env.deployer().upload_contract_wasm(debt_token_v2::WASM); + let pool_v2_wasm = env.deployer().upload_contract_wasm(pool_v100::WASM); + let s_token_v2_wasm = env.deployer().upload_contract_wasm(s_token_v100::WASM); + let debt_token_v2_wasm = env.deployer().upload_contract_wasm(debt_token_v100::WASM); let pool_version_before = sut.pool.version(); let s_token_version_before = sut.s_token().version(); @@ -69,10 +69,10 @@ fn should_upgrade_contracts() { let s_token_version_after = sut.s_token().version(); let debt_token_version_after = sut.debt_token().version(); - assert_eq!(pool_version_before, 1); - assert_eq!(pool_version_after, 2); - assert_eq!(s_token_version_before, 1); - assert_eq!(s_token_version_after, 2); - assert_eq!(debt_token_version_before, 1); - assert_eq!(debt_token_version_after, 2); + assert_eq!(pool_version_before, 2); + assert_eq!(pool_version_after, 100); + assert_eq!(s_token_version_before, 2); + assert_eq!(s_token_version_after, 100); + assert_eq!(debt_token_version_before, 2); + assert_eq!(debt_token_version_after, 100); } diff --git a/contracts/pool/src/tests/withdraw.rs b/contracts/pool/src/tests/withdraw.rs index 86df3caa..5a310a7e 100644 --- a/contracts/pool/src/tests/withdraw.rs +++ b/contracts/pool/src/tests/withdraw.rs @@ -1,8 +1,8 @@ use super::sut::fill_pool; use crate::tests::sut::{fill_pool_two, init_pool, DAY}; use crate::*; -use soroban_sdk::symbol_short; use soroban_sdk::testutils::{Address as _, AuthorizedFunction, Events}; +use soroban_sdk::{symbol_short, Map, Val}; use soroban_sdk::{vec, IntoVal, Symbol}; use tests::sut::set_time; @@ -360,12 +360,23 @@ fn should_emit_events() { ( sut.pool.address.clone(), (Symbol::new(&env, "withdraw"), user_1.clone()).into_val(&env), - (user_2.clone(), token_address.clone(), 1_000_000_000i128).into_val(&env) + Map::::from_array( + &env, + [ + (Symbol::new(&env, "to"), user_2.clone().into_val(&env)), + (Symbol::new(&env, "asset"), token_address.into_val(&env)), + ( + Symbol::new(&env, "amount"), + 1_000_000_000i128.into_val(&env), + ), + ], + ) + .into_val(&env) ), ] ); - let event = events.get(23).unwrap(); + let event = events.get(0).unwrap(); assert_eq!( vec![&env, event], diff --git a/contracts/pool/src/types/price_provider.rs b/contracts/pool/src/types/price_provider.rs index de385f05..523c7479 100644 --- a/contracts/pool/src/types/price_provider.rs +++ b/contracts/pool/src/types/price_provider.rs @@ -248,7 +248,7 @@ impl<'a> PriceProvider<'a> { let index = prices_len / 2; - let median_price = if prices_len % 2 == 0 { + let median_price = if prices_len.is_multiple_of(2) { let price_1 = prices.get_unchecked(index - 1); let price_2 = prices.get_unchecked(index); diff --git a/contracts/pool/src/types/user_configurator.rs b/contracts/pool/src/types/user_configurator.rs index d3d51f61..04fc30a0 100644 --- a/contracts/pool/src/types/user_configurator.rs +++ b/contracts/pool/src/types/user_configurator.rs @@ -2,7 +2,7 @@ use pool_interface::types::error::Error; use pool_interface::types::user_config::UserConfiguration; use soroban_sdk::{Address, Env}; -use crate::event; +use crate::event::{ReserveUsedAsCollDisabledEvent, ReserveUsedAsCollEnabledEvent}; use crate::methods::utils::validation::require_not_exceed_assets_limit; use crate::storage::{read_user_config, write_user_config}; @@ -47,7 +47,11 @@ impl<'a> UserConfigurator<'a> { user_config.set_using_as_collateral(env, reserve_id, false); - event::reserve_used_as_collateral_disabled(env, self.user, asset); + ReserveUsedAsCollDisabledEvent { + who: self.user.clone(), + asset: asset.clone(), + } + .publish(env); self.should_write = true; @@ -71,7 +75,11 @@ impl<'a> UserConfigurator<'a> { user_config.set_using_as_collateral(env, reserve_id, true); require_not_exceed_assets_limit(env, user_config.total_assets(), assets_limit); - event::reserve_used_as_collateral_enabled(env, self.user, asset); + ReserveUsedAsCollEnabledEvent { + who: self.user.clone(), + asset: asset.clone(), + } + .publish(env); self.should_write = true; diff --git a/contracts/s-token/Cargo.toml b/contracts/s-token/Cargo.toml index 60c8bad6..de73479a 100644 --- a/contracts/s-token/Cargo.toml +++ b/contracts/s-token/Cargo.toml @@ -3,6 +3,7 @@ name = "s-token" authors = ["eq-lab"] version = "0.1.0" edition = "2021" +publish = false description = "SToken contract" [lib] diff --git a/contracts/s-token/src/event.rs b/contracts/s-token/src/event.rs index cb85a866..9688f2e6 100644 --- a/contracts/s-token/src/event.rs +++ b/contracts/s-token/src/event.rs @@ -1,43 +1,61 @@ -use soroban_sdk::{symbol_short, Address, Env, String, Symbol}; +use soroban_sdk::{contractevent, Address, String}; -pub(crate) fn approve(e: &Env, from: Address, to: Address, amount: i128, expiration_ledger: u32) { - let topics = (Symbol::new(e, "approve"), from, to); - e.events().publish(topics, (amount, expiration_ledger)); +#[contractevent(topics=["approve"], data_format = "map")] +pub(crate) struct ApproveEvent { + #[topic] + pub from: Address, + #[topic] + pub to: Address, + pub amount: i128, + pub expiration_ledger: u32, } -pub(crate) fn transfer(e: &Env, from: Address, to: Address, amount: i128) { - let topics = (symbol_short!("transfer"), from, to); - e.events().publish(topics, amount); +#[contractevent(topics=["transfer"], data_format = "single-value")] +pub(crate) struct TransferEvent { + #[topic] + pub from: Address, + #[topic] + pub to: Address, + pub amount: i128, } -pub(crate) fn mint(e: &Env, admin: Address, to: Address, amount: i128) { - let topics = (symbol_short!("mint"), admin, to); - e.events().publish(topics, amount); +#[contractevent(topics=["mint"], data_format = "single-value")] +pub(crate) struct MintEvent { + #[topic] + pub admin: Address, + #[topic] + pub to: Address, + pub amount: i128, } -pub(crate) fn clawback(e: &Env, from: Address, amount: i128) { - let topics = (symbol_short!("clawback"), from); - e.events().publish(topics, amount); +#[contractevent(topics=["clawback"], data_format = "single-value")] +pub(crate) struct ClawbackEvent { + #[topic] + pub from: Address, + pub amount: i128, } -pub(crate) fn set_authorized(e: &Env, id: Address, authorize: bool) { - let topics = (Symbol::new(e, "set_authorized"), id); - e.events().publish(topics, authorize); +#[contractevent(topics=["set_authorized"], data_format = "single-value")] +pub(crate) struct SetAuthorizedEvent { + #[topic] + pub id: Address, + pub authorize: bool, } -pub(crate) fn burn(e: &Env, from: Address, amount: i128) { - let topics = (symbol_short!("burn"), from); - e.events().publish(topics, amount); +#[contractevent(topics=["burn"], data_format = "single-value")] +pub(crate) struct BurnEvent { + #[topic] + pub from: Address, + pub amount: i128, } -pub(crate) fn initialized( - e: &Env, - underlying_asset: Address, - pool: Address, - decimals: u32, - name: String, - symbol: String, -) { - let topics = (symbol_short!("init"), underlying_asset, pool); - e.events().publish(topics, (decimals, name, symbol)); +#[contractevent(topics=["initialized"], data_format = "map")] +pub(crate) struct InitializedEvent { + #[topic] + pub underlying_asset: Address, + #[topic] + pub pool: Address, + pub decimals: u32, + pub name: String, + pub symbol: String, } diff --git a/contracts/s-token/src/lib.rs b/contracts/s-token/src/lib.rs index 1371a5cf..3f464db2 100644 --- a/contracts/s-token/src/lib.rs +++ b/contracts/s-token/src/lib.rs @@ -1,7 +1,13 @@ #![deny(warnings)] #![no_std] -use crate::storage::*; +use crate::{ + event::{ + ApproveEvent, BurnEvent, ClawbackEvent, InitializedEvent, MintEvent, SetAuthorizedEvent, + TransferEvent, + }, + storage::*, +}; use common_token::{ balance::*, require_nonnegative_amount, require_positive_amount, storage::*, verify_caller_is_pool, @@ -66,7 +72,14 @@ impl STokenTrait for SToken { }, ); - event::initialized(&e, underlying_asset, pool, decimal, name, symbol); + InitializedEvent { + underlying_asset, + pool, + decimals: decimal, + name: name.clone(), + symbol: symbol.clone(), + } + .publish(&e); } fn upgrade(env: Env, new_wasm_hash: BytesN<32>) { @@ -76,7 +89,7 @@ impl STokenTrait for SToken { } fn version() -> u32 { - 1 + 2 } /// Returns the amount of tokens that the `spender` is allowed to withdraw from the `from` address. @@ -115,7 +128,14 @@ impl STokenTrait for SToken { require_nonnegative_amount(amount); write_allowance(&e, from.clone(), spender.clone(), amount, expiration_ledger); - event::approve(&e, from, spender, amount, expiration_ledger); + + ApproveEvent { + from, + to: spender, + amount, + expiration_ledger, + } + .publish(&e); } /// Returns the balance of tokens for a specified `id`. @@ -225,7 +245,12 @@ impl STokenTrait for SToken { spend_balance(&e, from.clone(), amount); add_total_supply(&e, amount.checked_neg().expect("s-token: no overflow")); - event::clawback(&e, from, amount); + + ClawbackEvent { + from: from.clone(), + amount, + } + .publish(&e); } /// Sets the authorization status for a specified `id`. @@ -243,7 +268,8 @@ impl STokenTrait for SToken { verify_caller_is_pool(&e); write_authorization(&e, id.clone(), authorize); - event::set_authorized(&e, id, authorize); + + SetAuthorizedEvent { id, authorize }.publish(&e); } /// Mints a specified amount of tokens for a given `id` and returns total supply @@ -262,7 +288,13 @@ impl STokenTrait for SToken { let pool = verify_caller_is_pool(&e); do_mint(&e, to.clone(), amount); - event::mint(&e, pool, to, amount); + + MintEvent { + admin: pool, + to, + amount, + } + .publish(&e); } /// Burns a specified amount of tokens from the from account and returns total supply @@ -283,7 +315,12 @@ impl STokenTrait for SToken { verify_caller_is_pool(&e); do_burn(&e, from.clone(), amount_to_burn, amount_to_withdraw, to); - event::burn(&e, from, amount_to_burn); + + BurnEvent { + from, + amount: amount_to_burn, + } + .publish(&e); } /// Returns the number of decimal places used by the token. @@ -367,7 +404,12 @@ impl STokenTrait for SToken { let token_client = token::Client::new(&e, &underlying_asset); token_client.transfer(¤t_address, &to, &amount); - event::transfer(&e, current_address, to, amount); + TransferEvent { + from: current_address, + to: to.clone(), + amount, + } + .publish(&e); } /// Retrieves the address of the underlying asset. @@ -413,7 +455,12 @@ fn do_transfer(e: &Env, from: Address, to: Address, amount: i128, validate: bool ); } - event::transfer(e, from, to, amount) + TransferEvent { + from: from.clone(), + to: to.clone(), + amount, + } + .publish(e); } fn spend_allowance(e: &Env, from: Address, spender: Address, amount: i128) { diff --git a/contracts/s-token/src/tests/test.rs b/contracts/s-token/src/tests/test.rs index d6090549..6bdbb8bd 100644 --- a/contracts/s-token/src/tests/test.rs +++ b/contracts/s-token/src/tests/test.rs @@ -15,38 +15,34 @@ use self::pool::{ }; mod pool { - soroban_sdk::contractimport!(file = "../../target/wasm32-unknown-unknown/release/pool.wasm"); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/pool.wasm"); } mod debt_token { - soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/debt_token.wasm" - ); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/debt_token.wasm"); } mod oracle { - soroban_sdk::contractimport!( - file = "../../target/wasm32-unknown-unknown/release/price_feed_mock.wasm" - ); + soroban_sdk::contractimport!(file = "../../target/wasm32v1-none/release/price_feed_mock.wasm"); } fn create_token<'a>( - e: &Env, + e: &'_ Env, ) -> ( STokenClient<'a>, DebtTokenClient<'a>, pool::Client<'a>, - TokenClient, - TokenAdminClient, + TokenClient<'_>, + TokenAdminClient<'_>, ) { let pool_admin = Address::generate(e); - let pool = pool::Client::new(e, &e.register_contract_wasm(None, pool::WASM)); - let s_token = STokenClient::new(e, &e.register_contract(None, SToken {})); - let stellar_asset = &e.register_stellar_asset_contract(pool_admin.clone()); + let pool = pool::Client::new(e, &e.register(pool::WASM, ())); + let s_token = STokenClient::new(e, &e.register(SToken {}, ())); + let stellar_asset = &e.register_stellar_asset_contract_v2(pool_admin.clone()); - let underlying_asset = TokenClient::new(e, stellar_asset); - let underlying_asset_admin = TokenAdminClient::new(e, stellar_asset); + let underlying_asset = TokenClient::new(e, &stellar_asset.address()); + let underlying_asset_admin = TokenAdminClient::new(e, &stellar_asset.address()); let flash_loan_fee = 5; let initial_health = 2_500; @@ -72,8 +68,8 @@ fn create_token<'a>( }, ); - e.budget().reset_default(); - let price_feed = oracle::Client::new(e, &e.register_contract_wasm(None, oracle::WASM)); + e.cost_estimate().budget().reset_default(); + let price_feed = oracle::Client::new(e, &e.register(oracle::WASM, ())); let feed_inputs = vec![ &e, @@ -105,10 +101,10 @@ fn create_token<'a>( &underlying_asset.address, ); - e.budget().reset_default(); + e.cost_estimate().budget().reset_default(); let debt_token: DebtTokenClient<'_> = - DebtTokenClient::new(&e, &e.register_contract_wasm(None, debt_token::WASM)); + DebtTokenClient::new(&e, &e.register(debt_token::WASM, ())); debt_token.initialize( &"DebtToken".into_val(e), @@ -136,7 +132,7 @@ fn test() { ReserveType::Fungible(s_token.address.clone(), debt_token.address.clone()); pool.init_reserve(&underlying.address, &init_reserve_input); - e.budget().reset_default(); + e.cost_estimate().budget().reset_default(); { let underlying_decimals = underlying.decimals(); diff --git a/deploy/artifacts/mainnet/.contracts b/deploy/artifacts/mainnet/.contracts index 4c51283e..db4c69f0 100644 --- a/deploy/artifacts/mainnet/.contracts +++ b/deploy/artifacts/mainnet/.contracts @@ -1,11 +1,11 @@ SLENDER_TOKEN_XLM=CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA SLENDER_TOKEN_XRP=CAAV3AE3VKD2P4TY7LWTQMMJHIJ4WOCZ5ANCIJPC3NRSERKVXNHBU2W7 SLENDER_TOKEN_USDC=CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75 -SLENDER_S_TOKEN_HASH=d14e8cf2e2c07ac4237e4804a50d02c717333ab2a1a4ed63cc63228e265b0a0d -SLENDER_DEBT_TOKEN_HASH=aab6f670caa14f0e428bb592487e3bdfb10cc906967bb3139111409715d46b80 +SLENDER_S_TOKEN_HASH=903bf59c7c6a9733543282e98136806dd4f5a9c775132ff5a42e9fcb4ddb6f2a +SLENDER_DEBT_TOKEN_HASH=004dc6f0eb924b7e4fcb51cc4680f97603ca2c4e20bab54865ba8efc0a7db33f SLENDER_DEPLOYER=CCDZI7OYKBLKSDZ3IGDSPMQPNOAYSPEONPOPZGLAVCVPZGQNUTPB7WCA SLENDER_PRICE_FEED=CALI2BYU2JE6WVRUFYTS6MSBNEHGJ35P4AVCZYF3B6QOE3QKOB2PLE6M -SLENDER_POOL_HASH=1d704331dda9871c03acd8b33cc27ea846e723d661fc27126b7e88e7fb924888 +SLENDER_POOL_HASH=75de44fc7f75f26d9fcc25c5e3fe15822afc94ad0074b6c35998a7b703ad153b SLENDER_POOL=CCL2KTHYOVMNNOFDT7PEAHACUBYVFLRH2LYWVQB6IPMHHAVUBC7ZUUC2 SLENDER_S_TOKEN_XRP=CD677VJOOQY5SMNQND7NYL64K4ZQYO24PXQSZKGTKSHXSGR2DHXWM2Q7 diff --git a/deploy/artifacts/mainnet/debt_token.wasm b/deploy/artifacts/mainnet/debt_token.wasm deleted file mode 100755 index a9d43a4b..00000000 Binary files a/deploy/artifacts/mainnet/debt_token.wasm and /dev/null differ diff --git a/deploy/artifacts/mainnet/debt_token_optimized.wasm b/deploy/artifacts/mainnet/debt_token_optimized.wasm new file mode 100644 index 00000000..56a3f626 Binary files /dev/null and b/deploy/artifacts/mainnet/debt_token_optimized.wasm differ diff --git a/deploy/artifacts/mainnet/deployer.wasm b/deploy/artifacts/mainnet/deployer.wasm deleted file mode 100755 index 64615c56..00000000 Binary files a/deploy/artifacts/mainnet/deployer.wasm and /dev/null differ diff --git a/deploy/artifacts/mainnet/flash_loan_receiver_mock.wasm b/deploy/artifacts/mainnet/flash_loan_receiver_mock.wasm deleted file mode 100755 index 4eaf81a8..00000000 Binary files a/deploy/artifacts/mainnet/flash_loan_receiver_mock.wasm and /dev/null differ diff --git a/deploy/artifacts/mainnet/pool.wasm b/deploy/artifacts/mainnet/pool.wasm deleted file mode 100755 index f51ef5b1..00000000 Binary files a/deploy/artifacts/mainnet/pool.wasm and /dev/null differ diff --git a/deploy/artifacts/mainnet/pool_optimized.wasm b/deploy/artifacts/mainnet/pool_optimized.wasm new file mode 100644 index 00000000..bc949e5f Binary files /dev/null and b/deploy/artifacts/mainnet/pool_optimized.wasm differ diff --git a/deploy/artifacts/mainnet/price_feed_mock.wasm b/deploy/artifacts/mainnet/price_feed_mock.wasm deleted file mode 100755 index 79589b7b..00000000 Binary files a/deploy/artifacts/mainnet/price_feed_mock.wasm and /dev/null differ diff --git a/deploy/artifacts/mainnet/s_token.wasm b/deploy/artifacts/mainnet/s_token_optimized.wasm old mode 100755 new mode 100644 similarity index 53% rename from deploy/artifacts/mainnet/s_token.wasm rename to deploy/artifacts/mainnet/s_token_optimized.wasm index 9d65a472..e8cc9419 Binary files a/deploy/artifacts/mainnet/s_token.wasm and b/deploy/artifacts/mainnet/s_token_optimized.wasm differ diff --git a/deploy/artifacts/testnet/.contracts b/deploy/artifacts/testnet/.contracts index dc1e8847..5032aedb 100644 --- a/deploy/artifacts/testnet/.contracts +++ b/deploy/artifacts/testnet/.contracts @@ -1,32 +1,41 @@ -SLENDER_TOKEN_XLM=CDLZFC3SYJYDZT7K67VZ75HPJVIEUVNIXF47ZG2FB2RMQQVU2HHGCYSC -SLENDER_TOKEN_XRP=CAOODR344VWG6LIL3J72IQ5CSJDAIQMBEO4DPRZMV3AYD36VCL47Y5OH -SLENDER_TOKEN_USDC=CDTDX7KSIDDAXYPCHOEVMAH5UYGUEZW3PB7PAQKAIPBBTJ4NVNYNDN4Q -SLENDER_TOKEN_RWA=CCA6W7VFNVWQHU5FQIZ6OHXABYZLNZ7MOL5CK2B2NFFN75OSRXCXINXK -SLENDER_S_TOKEN_HASH=d14e8cf2e2c07ac4237e4804a50d02c717333ab2a1a4ed63cc63228e265b0a0d -SLENDER_DEBT_TOKEN_HASH=aab6f670caa14f0e428bb592487e3bdfb10cc906967bb3139111409715d46b80 -SLENDER_DEPLOYER=CBSWEXMMPDKJOLMD2DC6SUDPRN7IAPN2VINLEJXQDOSNJ2PUAYPHF7AA -SLENDER_PRICE_FEED=CDMMDE753YAUOJMO7APDMJ6TLQTULATXG2WEKA27O66O4B6FM7Y6HUME -SLENDER_POOL_HASH=be78cd60a2470431696df2bac2ca7434306fb3c7ff1e91a2c94db76b71dfdc6c +SLENDER_TOKEN_XLM=CBYMQEDGWHRY2ROFW2BKBMYTM6WDT7YTU5E24HOXGFQDUNFDNPDPQFUM +SLENDER_TOKEN_XRP=CD46USRLMAS5HSFZ7IPSBZVSAPS7TOHW6UKFA5KBZFEIIBL2SDA4XH76 +SLENDER_TOKEN_USDC=CDNIXN3RLMHHUIIGJVU7UGYTQCH32N6R43VEG37AQHRGA5LMULJYQOPI +SLENDER_TOKEN_RWA=CAS6YPBDMC4HVRGIK4XKLALCLXRJGELD43A266KREXSEGHXKK6SVWIPY +SLENDER_S_TOKEN_HASH=6e093d8ed4893adb99a261a7160a773f64e2f5d4a9be664edab66be62b3c176e +SLENDER_DEBT_TOKEN_HASH=496e06547aee651210f7fb1a543e30afefb820160e42e6ddac808c18f25a5d89 +SLENDER_DEPLOYER=CCJZ4P5CAWQNDGE7PFZ4ENHJVN2NCJ2BBP57CD5ILTWHNQVB6BDEDUNV +SLENDER_PRICE_FEED=CDLDCB677CGION5CE3665P3HI4HWO5UO5GXYH7A6PVERY3RCHBYYWC6P +SLENDER_POOL_HASH=ef84b75b765edaf12dbc07c93965823e60802083fd42e9cf556c0114985841ce +SLENDER_TOKEN_XLM_INITIALIZED=TRUE SLENDER_TOKEN_XRP_INITIALIZED=TRUE SLENDER_TOKEN_USDC_INITIALIZED=TRUE -SLENDER_POOL=CDOWGSFIKIFAQ3S4AWMKAYD6CMBQ7GTLJS36Q5WJWO4CML4FY7VYOGC3 -SLENDER_S_TOKEN_XRP=CBXJI2JT3LXDDW3LE2S4XGFWMNGJX7RZ5667KH6IXRAZ4LMR365JJLPM -SLENDER_S_TOKEN_USDC=CC54UFYIGACHNJ5YUWCA4QV7BRFXTCKXURLU2LFIFRMBU5WXN2LV7EDG -SLENDER_S_TOKEN_XLM=CBQ2YPEPMH2JB5IX53NZVKJXPT3VGLOKME3XSX7MPXRPLVMHF5W4RYTR -SLENDER_DEBT_TOKEN_XLM=CD6LOPW3CY57SSTTBLTEWCVVK4ZIRNTNKFE6COULDA3ZSK2OBERF6C6R -SLENDER_DEBT_TOKEN_XRP=CBXNRH3LODCXPTSW4YDB2CNWMGQ6JTGG4TEW27OVG7C5DVMTGQVPXFX4 -SLENDER_DEBT_TOKEN_USDC=CBKPLSRWIWULHSJ3QW6WQSXM3N2TDEHLKFECS7HP2XGQFA5V2FYOTVFE +SLENDER_TOKEN_RWA_INITIALIZED=TRUE +SLENDER_POOL=CBAFJ4Q56TMXFT53VVWLKK75AD7YLKKRWK6AD7LMTR6VIP7F4BN4JIPC +SLENDER_S_TOKEN_XRP=CAUNVFRRZ2DNWTBUKLQKAX23MM4GN7X2QETKGAISYFM5SOQA2BALQSRJ +SLENDER_S_TOKEN_USDC=CCK4WRIGHP56J52B32U34KILUUJ4RZ3GWXSLIZXAIHTUK735SSTI6HU7 +SLENDER_S_TOKEN_XLM=CDTBGLHHI4T3SRWGIJLKHOH23D4DEBSVQETJ7XSMVYK2O5HAMYZMWS47 +SLENDER_DEBT_TOKEN_XLM=CCMDGNNQR4FT2PSLN5LPWVKIENOMZRWWBFANRWHN7ODDQDQEQN6VCD3D +SLENDER_DEBT_TOKEN_XRP=CDBOAXRXYJJH7P2UQAQ7LRWDYOQVQBPRQIYOTJZRST6F5MATPWUF7VUU +SLENDER_DEBT_TOKEN_USDC=CDFOGND7X4GXU2UXQYGH4HC4XXDMQVPU45UIGXUPANKY26WV4YRZKZEY SLENDER_POOL_XLM_RESERVE_INITIALIZED=TRUE SLENDER_POOL_XRP_RESERVE_INITIALIZED=TRUE SLENDER_POOL_USDC_RESERVE_INITIALIZED=TRUE +SLENDER_POOL_RWA_RESERVE_INITIALIZED=TRUE SLENDER_POOL_XRP_COLLATERAL_CONFIGURED=TRUE SLENDER_POOL_USDC_COLLATERAL_CONFIGURED=TRUE SLENDER_POOL_XLM_COLLATERAL_CONFIGURED=TRUE +SLENDER_POOL_RWA_COLLATERAL_CONFIGURED=TRUE SLENDER_POOL_XLM_BORROWING_ENABLED=TRUE SLENDER_POOL_XRP_BORROWING_ENABLED=TRUE SLENDER_POOL_USDC_BORROWING_ENABLED=TRUE SLENDER_POOL_PRICE_FEED_SET=TRUE +SLENDER_GCR7O7JRQ4GM5MIQLC4KWBY64WKWBPCBISHBMTSLM4BTMATYOBL4KNVD_XLM_MINTED=TRUE SLENDER_GDE5PTZHHL64OOIHOP6O6XVJCQCXTB6MXEKGJA4OHHAAOXQNHZCFPFKK_XRP_MINTED=TRUE SLENDER_GCPGCSXWDVXVTI3VZCU4TVF43XYSWZZYXPONPKPYZXH5KJSIPQ5K6Y57_USDC_MINTED=TRUE -SLENDER_GDLJFYGSJS6STVIWDVXT2GOM3BTNWGSMWHQF3CEIP633SOAS7KH3Q5N5_USDC_MINTED=TRUE \ No newline at end of file +SLENDER_GDLJFYGSJS6STVIWDVXT2GOM3BTNWGSMWHQF3CEIP633SOAS7KH3Q5N5_USDC_MINTED=TRUE +SLENDER_GCPGCSXWDVXVTI3VZCU4TVF43XYSWZZYXPONPKPYZXH5KJSIPQ5K6Y57_XLM_MINTED=TRUE +SLENDER_GDLJFYGSJS6STVIWDVXT2GOM3BTNWGSMWHQF3CEIP633SOAS7KH3Q5N5_XRP_MINTED=TRUE +SLENDER_GCR7O7JRQ4GM5MIQLC4KWBY64WKWBPCBISHBMTSLM4BTMATYOBL4KNVD_RWA_MINTED=TRUE +SLENDER_GCPGCSXWDVXVTI3VZCU4TVF43XYSWZZYXPONPKPYZXH5KJSIPQ5K6Y57_RWA_MINTED=TRUE \ No newline at end of file diff --git a/deploy/artifacts/testnet/contract-bindings.zip b/deploy/artifacts/testnet/contract-bindings.zip index 366eff0f..0858226d 100644 Binary files a/deploy/artifacts/testnet/contract-bindings.zip and b/deploy/artifacts/testnet/contract-bindings.zip differ diff --git a/deploy/artifacts/testnet/debt_token.wasm b/deploy/artifacts/testnet/debt_token.wasm index a9d43a4b..d2212870 100755 Binary files a/deploy/artifacts/testnet/debt_token.wasm and b/deploy/artifacts/testnet/debt_token.wasm differ diff --git a/deploy/artifacts/testnet/deployer.wasm b/deploy/artifacts/testnet/deployer.wasm index 64615c56..bbe8ca5b 100755 Binary files a/deploy/artifacts/testnet/deployer.wasm and b/deploy/artifacts/testnet/deployer.wasm differ diff --git a/deploy/artifacts/testnet/flash_loan_receiver_mock.wasm b/deploy/artifacts/testnet/flash_loan_receiver_mock.wasm index 4eaf81a8..39812ee5 100755 Binary files a/deploy/artifacts/testnet/flash_loan_receiver_mock.wasm and b/deploy/artifacts/testnet/flash_loan_receiver_mock.wasm differ diff --git a/deploy/artifacts/testnet/pool.wasm b/deploy/artifacts/testnet/pool.wasm index 40cf91fc..02a7d541 100755 Binary files a/deploy/artifacts/testnet/pool.wasm and b/deploy/artifacts/testnet/pool.wasm differ diff --git a/deploy/artifacts/testnet/price_feed_mock.wasm b/deploy/artifacts/testnet/price_feed_mock.wasm index 79589b7b..3c3847f5 100755 Binary files a/deploy/artifacts/testnet/price_feed_mock.wasm and b/deploy/artifacts/testnet/price_feed_mock.wasm differ diff --git a/deploy/artifacts/testnet/s_token.wasm b/deploy/artifacts/testnet/s_token.wasm index 9d65a472..9318c650 100755 Binary files a/deploy/artifacts/testnet/s_token.wasm and b/deploy/artifacts/testnet/s_token.wasm differ diff --git a/deploy/artifacts/testnet/token.wasm b/deploy/artifacts/testnet/token.wasm index ca2e6596..f1b9eddb 100755 Binary files a/deploy/artifacts/testnet/token.wasm and b/deploy/artifacts/testnet/token.wasm differ diff --git a/deploy/scripts/deploy.sh b/deploy/scripts/deploy.sh index 75327eb4..257490c3 100755 --- a/deploy/scripts/deploy.sh +++ b/deploy/scripts/deploy.sh @@ -1,7 +1,7 @@ #!/bin/bash BASEDIR=$(dirname $0) -BUILD=$BASEDIR/../../target/wasm32-unknown-unknown/release +BUILD=$BASEDIR/../../target/wasm32v1-none/release source $BASEDIR/.$1.env @@ -17,7 +17,7 @@ deploy() { install() { local hash - hash=$(stellar contract install \ + hash=$(stellar contract upload \ --wasm $1 \ --source $2 \ --rpc-url "$SOROBAN_RPC_URL" \ diff --git a/deploy/scripts/upgrade.sh b/deploy/scripts/upgrade.sh index 2ba42c5c..954ab251 100755 --- a/deploy/scripts/upgrade.sh +++ b/deploy/scripts/upgrade.sh @@ -22,7 +22,7 @@ invoke() { } install() { - local hash=$(stellar contract install \ + local hash=$(stellar contract upload \ --wasm $1 \ --source $2 \ --rpc-url "$SOROBAN_RPC_URL" \ @@ -30,7 +30,7 @@ install() { echo $hash } -POOL_HASH=$(install "../target/wasm32-unknown-unknown/release/pool.wasm" $ADMIN_SECRET) +POOL_HASH=$(install "../target/wasm32v1-none/release/pool.wasm" $ADMIN_SECRET) echo "Pool wasm hash: $POOL_HASH" echo "$POOL_HASH">$BASEDIR/../artifacts/pool.wasm.upgrades.hash diff --git a/integration-tests/package.json b/integration-tests/package.json index 47365dcf..d93fcf5b 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -13,20 +13,19 @@ "author": "EQ LAB", "license": "ISC", "devDependencies": { - "@types/chai": "^4.3.5", - "@types/chai-as-promised": "^7.1.6", - "@types/mocha": "^10.0.1", - "@types/node": "^20.4.1", - "@stellar/stellar-sdk": "12.0.1", - "stellar-sdk": "12.0.1", - "bigint-conversion": "^2.4.1", - "bignumber.js": "^9.1.1", - "chai": "^4.3.7", - "chai-as-promised": "^7.1.1", - "cross-env": "^7.0.3", - "dotenv": "^16.3.1", - "mocha": "^10.2.0", - "ts-node": "^10.9.1", - "typescript": "^5.1.6" + "@types/chai": "4.3.20", + "@types/chai-as-promised": "7.1.8", + "@types/mocha": "^10.0.10", + "@types/node": "20.19.17", + "@stellar/stellar-sdk": "14.2.0", + "bigint-conversion": "^2.4.3", + "bignumber.js": "^9.3.1", + "chai": "4.5.0", + "chai-as-promised": "7.1.2", + "cross-env": "7.0.3", + "dotenv": "16.6.1", + "mocha": "10.8.2", + "ts-node": "^10.9.2", + "typescript": "^5.9.2" } } \ No newline at end of file diff --git a/integration-tests/tests/pool.sut.ts b/integration-tests/tests/pool.sut.ts index 427c4bb7..b7bdc8bc 100644 --- a/integration-tests/tests/pool.sut.ts +++ b/integration-tests/tests/pool.sut.ts @@ -1,4 +1,4 @@ -import { Keypair, xdr } from "stellar-sdk"; +import { Keypair, xdr } from "@stellar/stellar-sdk"; import { SendTransactionResult, SorobanClient } from "./soroban.client"; import { adminKeys, contractsFilename, setEnv, treasuryKeys } from "./soroban.config"; import { @@ -80,7 +80,7 @@ export async function init(client: SorobanClient, customXlm = true): Promise { const generateSalt = (value: number): string => String(value).padStart(64, "0"); - await initPool(client, `${generateSalt(++salt)}`); + await initPool(client, `${generateSalt(++salt)}`, true); await initSToken(client, "XRP", `${generateSalt(++salt)}`); await initSToken(client, "USDC", `${generateSalt(++salt)}`); @@ -200,9 +200,9 @@ export async function releaseInit(client: SorobanClient): Promise { await initPoolReserve(client, "XRP"); await initPoolReserve(client, "USDC"); - await initPoolCollateral(client, "XRP", 1); - await initPoolCollateral(client, "USDC", 2); - await initPoolCollateral(client, "XLM", 3); + await initPoolCollateral(client, "XRP", 1, true); + await initPoolCollateral(client, "USDC", 2, true); + await initPoolCollateral(client, "XLM", 3, true); await initPoolBorrowing(client, "XLM"); await initPoolBorrowing(client, "XRP"); @@ -211,7 +211,7 @@ export async function releaseInit(client: SorobanClient): Promise { await initPoolPriceFeed(client, [ { asset: "XLM", - asset_decimals: +process.env['XLM_DECIMALS'] ?? 7, + asset_decimals: +(process.env['XLM_DECIMALS'] ?? 7), max_sanity_price_in_base: BigInt(+process.env['XLM_MAX_SANITY_PRICE_IN_BASE']), min_sanity_price_in_base: BigInt(+process.env['XLM_MIN_SANITY_PRICE_IN_BASE']), priceFeedConfig: { @@ -226,7 +226,7 @@ export async function releaseInit(client: SorobanClient): Promise { }, { asset: "XRP", - asset_decimals: +process.env['XRP_DECIMALS'] ?? 7, + asset_decimals: +(process.env['XRP_DECIMALS'] ?? 7), max_sanity_price_in_base: BigInt(+process.env['XRP_MAX_SANITY_PRICE_IN_BASE']), min_sanity_price_in_base: BigInt(+process.env['XRP_MIN_SANITY_PRICE_IN_BASE']), priceFeedConfig: { @@ -241,7 +241,7 @@ export async function releaseInit(client: SorobanClient): Promise { }, { asset: "USDC", - asset_decimals: +process.env['USDC_DECIMALS'] ?? 7, + asset_decimals: +(process.env['USDC_DECIMALS'] ?? 7), max_sanity_price_in_base: BigInt(+process.env['USDC_MAX_SANITY_PRICE_IN_BASE']), min_sanity_price_in_base: BigInt(+process.env['USDC_MIN_SANITY_PRICE_IN_BASE']), priceFeedConfig: { @@ -363,6 +363,19 @@ export async function sTokenUnderlyingBalanceOf( return parseScvToJs(xdrResponse); } +export async function protocolFee( + client: SorobanClient, + asset: SlenderAsset +): Promise { + const xdrResponse = await client.simulateTransaction( + process.env.SLENDER_POOL, + "protocol_fee", + convertToScvAddress(process.env[`SLENDER_TOKEN_${asset}`]), + ); + + return parseScvToJs(xdrResponse); +} + export async function sTokenTotalSupply( client: SorobanClient, asset: SlenderAsset @@ -467,8 +480,7 @@ export async function withdraw( export async function liquidate( client: SorobanClient, signer: Keypair, - who: string, - receiveStoken: boolean + who: string ): Promise { const txResult = await client.sendTransaction( process.env.SLENDER_POOL, @@ -477,7 +489,6 @@ export async function liquidate( 10, convertToScvAddress(signer.publicKey()), convertToScvAddress(who), - convertToScvBool(receiveStoken) ); return txResult; @@ -540,7 +551,7 @@ export async function deployReceiverMock(): Promise { (await new Promise((resolve, reject) => { exec( `stellar contract deploy \ - --wasm ../target/wasm32-unknown-unknown/release/flash_loan_receiver_mock.wasm \ + --wasm ../target/wasm32v1-none/release/flash_loan_receiver_mock.wasm \ --source ${adminKeys.secret()} \ --rpc-url "${process.env.SOROBAN_RPC_URL}" \ --network-passphrase "${process.env.PASSPHRASE}"`, @@ -565,8 +576,7 @@ export async function deployReceiverMock(): Promise { export async function liquidateCli( liquidatorKeys: Keypair, borrower: string, - debtAsset: SlenderAsset, - receiveStoken: boolean + debtAsset: SlenderAsset ): Promise { const liquidateResult = ( (await new Promise((resolve) => { @@ -580,8 +590,7 @@ export async function liquidateCli( liquidate \ --liquidator ${liquidatorKeys.publicKey()} \ --who ${borrower} \ - --debt_asset ${process.env[`SLENDER_TOKEN_${debtAsset}`]} \ - --receive_stoken ${receiveStoken}`, + --debt_asset ${process.env[`SLENDER_TOKEN_${debtAsset}`]}`, (error, stdout, stderr) => { if (error) { resolve(stderr); @@ -690,12 +699,12 @@ export function writeBudgetSnapshot( `${JSON.stringify( { [label]: { - cost: transactionResult.simulation.cost, + cost: transactionResult.simulation["cost"], events: transactionResult.simulation.events.reduce( (acc, e) => acc + e.event().toXDR().length, 0 ), - readBytes: resources.readBytes(), + readBytes: resources.diskReadBytes(), writeBytes: resources.writeBytes(), ledgerReads: resources.footprint().readOnly().length, ledgerWrites: resources.footprint().readWrite().length, @@ -828,36 +837,66 @@ async function initDToken( async function initPool( client: SorobanClient, - salt: string + salt: string, + isRelease: boolean ): Promise { await initContract>( "POOL", - () => - client.sendTransaction( - process.env.SLENDER_DEPLOYER, - "deploy_pool", - adminKeys, - 3, - convertToScvBytes(salt, "hex"), - convertToScvBytes(process.env.SLENDER_POOL_HASH, "hex"), - convertToScvAddress(adminKeys.publicKey()), - convertToScvMap({ - base_asset_address: convertToScvAddress(process.env[`SLENDER_TOKEN_${process.env[`BASE_ASSET`] ?? 'XLM'}`]), - base_asset_decimals: convertToScvU32(+process.env['BASE_ASSET_DECIMALS'] ?? 7), - flash_loan_fee: convertToScvU32(+process.env['FLASH_LOAN_FEE_BPS'] ?? 5), - grace_period: convertToScvU64(+process.env['GRACE_PERIOD_SEC'] ?? 1), - initial_health: convertToScvU32(+process.env['INITIAL_HEALTH_BPS'] ?? 2_500), - ir_alpha: convertToScvU32(+process.env['IR_ALPHA'] ?? 143), - ir_initial_rate: convertToScvU32(+process.env['IR_INITIAL_RATE_BPS'] ?? 200), - ir_max_rate: convertToScvU32(+process.env['IR_MAX_RATE_BPS'] ?? 50_000), - ir_scaling_coeff: convertToScvU32(+process.env['IR_SCALING_COEFF_BPS'] ?? 9_000), - liquidation_protocol_fee: convertToScvU32(+process.env['LIQUIDATION_PROTOCOL_FEE_BPS'] ?? 0), - min_collat_amount: convertToScvI128(process.env['MIN_COLLAT_AMOUNT_IN_BASE'] ? BigInt(process.env['MIN_COLLAT_AMOUNT_IN_BASE']) : 1n), - min_debt_amount: convertToScvI128(process.env['MIN_DEBT_AMOUNT_IN_BASE'] ? BigInt(process.env['MIN_DEBT_AMOUNT_IN_BASE']) : 1n), - timestamp_window: convertToScvU64(+process.env['TIMESTAMP_WINDOW_SEC'] ?? 20), - user_assets_limit: convertToScvU32(+process.env['USER_ASSET_LIMIT'] ?? 4), - }) - ), + () => { + if (isRelease) { + return client.sendTransaction( + process.env.SLENDER_DEPLOYER, + "deploy_pool", + adminKeys, + 3, + convertToScvBytes(salt, "hex"), + convertToScvBytes(process.env.SLENDER_POOL_HASH, "hex"), + convertToScvAddress(adminKeys.publicKey()), + convertToScvMap({ + base_asset_address: convertToScvAddress(process.env[`SLENDER_TOKEN_${process.env[`BASE_ASSET`]}`]), + base_asset_decimals: convertToScvU32(+(process.env['BASE_ASSET_DECIMALS'])), + flash_loan_fee: convertToScvU32(+(process.env['FLASH_LOAN_FEE_BPS'])), + grace_period: convertToScvU64(+(process.env['GRACE_PERIOD_SEC'])), + initial_health: convertToScvU32(+(process.env['INITIAL_HEALTH_BPS'])), + ir_alpha: convertToScvU32(+(process.env['IR_ALPHA'])), + ir_initial_rate: convertToScvU32(+(process.env['IR_INITIAL_RATE_BPS'])), + ir_max_rate: convertToScvU32(+(process.env['IR_MAX_RATE_BPS'])), + ir_scaling_coeff: convertToScvU32(+(process.env['IR_SCALING_COEFF_BPS'])), + liquidation_protocol_fee: convertToScvU32(+(process.env['LIQUIDATION_PROTOCOL_FEE_BPS'])), + min_collat_amount: convertToScvI128(BigInt(process.env['MIN_COLLAT_AMOUNT_IN_BASE'])), + min_debt_amount: convertToScvI128(BigInt(process.env['MIN_DEBT_AMOUNT_IN_BASE'])), + timestamp_window: convertToScvU64(+(process.env['TIMESTAMP_WINDOW_SEC'])), + user_assets_limit: convertToScvU32(+(process.env['USER_ASSET_LIMIT'])), + }) + ); + } else { + return client.sendTransaction( + process.env.SLENDER_DEPLOYER, + "deploy_pool", + adminKeys, + 3, + convertToScvBytes(salt, "hex"), + convertToScvBytes(process.env.SLENDER_POOL_HASH, "hex"), + convertToScvAddress(adminKeys.publicKey()), + convertToScvMap({ + base_asset_address: convertToScvAddress(process.env['SLENDER_TOKEN_XLM']), + base_asset_decimals: convertToScvU32(7), + flash_loan_fee: convertToScvU32(5), + grace_period: convertToScvU64(1), + initial_health: convertToScvU32(2_500), + ir_alpha: convertToScvU32(143), + ir_initial_rate: convertToScvU32(200), + ir_max_rate: convertToScvU32(50_000), + ir_scaling_coeff: convertToScvU32(9_000), + liquidation_protocol_fee: convertToScvU32(100), + min_collat_amount: convertToScvI128(1n), + min_debt_amount: convertToScvI128(1n), + timestamp_window: convertToScvU64(20), + user_assets_limit: convertToScvU32(4), + }) + ); + } + }, (result) => result[0] ); } @@ -885,23 +924,43 @@ async function initPoolReserve( async function initPoolCollateral( client: SorobanClient, asset: SlenderAsset, - order: number + order: number, + isRelease: boolean ): Promise { - await initContract(`POOL_${asset}_COLLATERAL_CONFIGURED`, () => - client.sendTransaction( - process.env.SLENDER_POOL, - "configure_as_collateral", - adminKeys, - 3, - convertToScvAddress(process.env[`SLENDER_TOKEN_${asset}`]), - convertToScvMap({ - // todo: trim to short string - discount: convertToScvU32(+process.env[`${asset}_DISCOUNT_BPS`] ?? 6000), - liq_cap: convertToScvI128(process.env[`${asset}_LIQUIDITY_CAP`] ? BigInt(process.env[`${asset}_LIQUIDITY_CAP`]) : 1000000000000000n), - pen_order: convertToScvU32(+process.env[`${asset}_PENALTY_ORDER`] ?? order), - util_cap: convertToScvU32(+process.env[`${asset}_UTILIZATION_CAP`] ?? 9000), - }) - ) + await initContract(`POOL_${asset}_COLLATERAL_CONFIGURED`, () => { + if (isRelease) { + return client.sendTransaction( + process.env.SLENDER_POOL, + "configure_as_collateral", + adminKeys, + 3, + convertToScvAddress(process.env[`SLENDER_TOKEN_${asset}`]), + convertToScvMap({ + // todo: trim to short string + discount: convertToScvU32(+(process.env[`${asset}_DISCOUNT_BPS`])), + liq_cap: convertToScvI128(BigInt(process.env[`${asset}_LIQUIDITY_CAP`])), + pen_order: convertToScvU32(+(process.env[`${asset}_PENALTY_ORDER`])), + util_cap: convertToScvU32(+(process.env[`${asset}_UTILIZATION_CAP`])), + }) + ); + } else { + + return client.sendTransaction( + process.env.SLENDER_POOL, + "configure_as_collateral", + adminKeys, + 3, + convertToScvAddress(process.env[`SLENDER_TOKEN_${asset}`]), + convertToScvMap({ + // todo: trim to short string + discount: convertToScvU32(6000), + liq_cap: convertToScvI128(1000000000000000n), + pen_order: convertToScvU32(order), + util_cap: convertToScvU32(9000), + }) + ); + } + } ); } diff --git a/integration-tests/tests/pool/1.borrower.spec.ts b/integration-tests/tests/pool/1.borrower.spec.ts index 8376a56a..ef1da469 100644 --- a/integration-tests/tests/pool/1.borrower.spec.ts +++ b/integration-tests/tests/pool/1.borrower.spec.ts @@ -11,6 +11,7 @@ import { inPoolBalanceOf, init, mintUnderlyingTo, + protocolFee, repay, sTokenBalanceOf, sTokenTotalSupply, @@ -22,8 +23,7 @@ import { borrower1Keys, borrower2Keys, lender1Keys, - lender2Keys, - treasuryKeys + lender2Keys } from "../soroban.config"; // import { main } from '../release'; import { assert, expect, use } from "chai"; @@ -36,7 +36,6 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", let borrower1Address: string; let lender2Address: string; let borrower2Address: string; - let treasuryAddress: string; before(async function () { client = new SorobanClient(); @@ -51,7 +50,6 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", lender2Address = lender2Keys.publicKey(); borrower1Address = borrower1Keys.publicKey(); borrower2Address = borrower2Keys.publicKey(); - treasuryAddress = treasuryKeys.publicKey(); // uncomment to resume test with existing contracts // require("dotenv").config({ path: contractsFilename }); @@ -248,17 +246,19 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", // Borrower1 repays 1.0 XLM await repay(client, borrower1Keys, "XLM", 10_000_000n); + const sXlmTokenBalance = await tokenBalanceOf(client, "XLM", process.env.SLENDER_S_TOKEN_XLM); const borrower1XlmBalance = await tokenBalanceOf(client, "XLM", borrower1Address); - const treasuryXlmBalance = await tokenBalanceOf(client, "XLM", treasuryAddress); const borrower1DXlmBalance = await debtTokenBalanceOf(client, "XLM", borrower1Address); const sXlmBalance = await sTokenUnderlyingBalanceOf(client, "XLM"); + const protocolFeeXlmBalance = await protocolFee(client, "XLM"); const dXlmSupply = await debtTokenTotalSupply(client, "XLM"); assert.equal(borrower1XlmBalance, 79_999_999n); - assert(treasuryXlmBalance > 0 && treasuryXlmBalance < 1_000n); + assert(protocolFeeXlmBalance > 0 && protocolFeeXlmBalance < 1_000n); assert(borrower1DXlmBalance > 80_000_000n && borrower1DXlmBalance < 80_010_000n); - assert.equal(sXlmBalance + treasuryXlmBalance, 10_000_000n); + assert.equal(sXlmBalance + protocolFeeXlmBalance, 10_000_000n); + assert.equal(sXlmTokenBalance, 10_000_000n); assert.equal(dXlmSupply, borrower1DXlmBalance); }); @@ -268,17 +268,17 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", await repay(client, borrower1Keys, "XLM", 90_000_000n); const borrower1XlmBalance = await tokenBalanceOf(client, "XLM", borrower1Address); - const treasuryXlmBalance = await tokenBalanceOf(client, "XLM", treasuryAddress); + const protocolFeeXlmBalance = await protocolFee(client, "XLM"); const borrower1DXlmBalance = await debtTokenBalanceOf(client, "XLM", borrower1Address); const sXlmBalance = await sTokenUnderlyingBalanceOf(client, "XLM"); const dXlmSupply = await debtTokenTotalSupply(client, "XLM"); assert(borrower1XlmBalance < 10_000_000n && borrower1XlmBalance > 9_990_000n); - assert(treasuryXlmBalance > 0 && treasuryXlmBalance < 1_000n); + assert(protocolFeeXlmBalance > 0 && protocolFeeXlmBalance < 1_000n); assert.equal(borrower1DXlmBalance, 0n); - assert(sXlmBalance + treasuryXlmBalance > 90_000_000n - && sXlmBalance + treasuryXlmBalance < 90_010_000n); + assert(sXlmBalance + protocolFeeXlmBalance > 90_000_000n + && sXlmBalance + protocolFeeXlmBalance < 90_010_000n); assert.equal(dXlmSupply, borrower1DXlmBalance); }); @@ -288,17 +288,17 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", await repay(client, borrower2Keys, "XRP", 10_000_000_000n); const borrower2XrpBalance = await tokenBalanceOf(client, "XRP", borrower2Address); - const treasuryXrpBalance = await tokenBalanceOf(client, "XRP", treasuryAddress); + const protocolFeeXrpBalance = await protocolFee(client, "XRP"); const borrower2DXrpBalance = await debtTokenBalanceOf(client, "XRP", borrower2Address); const sXrpBalance = await sTokenUnderlyingBalanceOf(client, "XRP"); const dXrpSupply = await debtTokenTotalSupply(client, "XRP"); assert(borrower2XrpBalance < 1_000_000_000n && borrower2XrpBalance > 999_000_000n); - assert(treasuryXrpBalance > 0 && treasuryXrpBalance < 100_000n); + assert(protocolFeeXrpBalance > 0 && protocolFeeXrpBalance < 100_000n); assert.equal(borrower2DXrpBalance, 0n); - assert(sXrpBalance + treasuryXrpBalance > 9_000_000_000n - && sXrpBalance + treasuryXrpBalance < 9_001_000_000n); + assert(sXrpBalance + protocolFeeXrpBalance > 9_000_000_000n + && sXrpBalance + protocolFeeXrpBalance < 9_001_000_000n); assert.equal(dXrpSupply, borrower2DXrpBalance); }); @@ -456,8 +456,9 @@ describe("LendingPool: Lenders get and borrowers pay interest when time passed", const borrower1InPoolBalanceAfter = await inPoolBalanceOf(client, "RWA", borrower1Address); const borrower1AccountPositionAfter = await accountPosition(client, borrower1Keys); - assert.equal(borrwer1RWABalanceAfter - borrwer1RWABalanceBefore, 0n); - assert.equal(borrower1InPoolBalanceBefore - borrower1InPoolBalanceAfter, 0n); + assert.equal(borrwer1RWABalanceBefore + toWithdraw, borrwer1RWABalanceAfter); + assert.equal(borrower1InPoolBalanceBefore - toWithdraw, 0n); + assert.equal(borrower1InPoolBalanceAfter, 0n); assert(borrower1AccountPositionBefore.npv > borrower1AccountPositionAfter.npv); }) diff --git a/integration-tests/tests/pool/2.liquidator.spec.ts b/integration-tests/tests/pool/2.liquidator.spec.ts index a1539c43..3aa90040 100644 --- a/integration-tests/tests/pool/2.liquidator.spec.ts +++ b/integration-tests/tests/pool/2.liquidator.spec.ts @@ -64,7 +64,6 @@ describe("LendingPool: Liquidation (receive underlying assets)", function () { await deposit(client, borrower1Keys, "XRP", 10_000_000_000n); // Borrower1 deposits 10_000_000_000 USDC await deposit(client, borrower1Keys, "USDC", 10_000_000_000n); - // Liquidator1 deposits 200_000_000n XLM await deposit(client, liquidator1Keys, "XLM", 200_000_000n); @@ -110,8 +109,8 @@ describe("LendingPool: Liquidation (receive underlying assets)", function () { it("Case 2: Borrower borrows XLM with health ~= initial_health", async function () { await delay(20_000); - // Borrower1 borrows 11_999_000_000n XLM - await borrow(client, borrower1Keys, "XLM", 90_000_000n); + // Borrower1 borrows 89_999_000n XLM + await borrow(client, borrower1Keys, "XLM", 89_999_000n); const borrower1XlmBalance = await tokenBalanceOf(client, "XLM", borrower1Address); const borrower1DXlmBalance = await debtTokenBalanceOf(client, "XLM", borrower1Address); @@ -119,16 +118,16 @@ describe("LendingPool: Liquidation (receive underlying assets)", function () { const dXlmSupply = await debtTokenTotalSupply(client, "XLM"); const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(borrower1XlmBalance, 90_000_000n); - assert.equal(borrower1DXlmBalance, 90_000_001n); - assert.equal(sXlmBalance, 210000000n); - assert.equal(dXlmSupply, 90_000_001n); + assert.equal(borrower1XlmBalance, 89_999_000n); + assert.equal(borrower1DXlmBalance, 89_999_001n); + assert.equal(sXlmBalance, 210001000n); + assert.equal(dXlmSupply, 89_999_001n); - assert(borrower1Position.debt > 90_000_000n - && borrower1Position.debt < 120_000_000n); + assert(borrower1Position.debt > 89_999_000n + && borrower1Position.debt < 90_000_000n); assert.equal(borrower1Position.discounted_collateral, 120_000_000n); - assert(borrower1Position.npv > 0 - && borrower1Position.npv < 90_000_000n); + assert(borrower1Position.npv > 30_000_000n + && borrower1Position.npv < 30_100_000n); }); it("Case 3: Liquidator borrows USDC with npv > 0", async function () { @@ -176,7 +175,7 @@ describe("LendingPool: Liquidation (receive underlying assets)", function () { console.log("liquidator1Address", liquidator1Address); console.log("borrower1Address", borrower1Address); - await liquidate(client, liquidator1Keys, borrower1Address, false); + await liquidate(client, liquidator1Keys, borrower1Address); const liquidator1XrpBalanceAfter = await tokenBalanceOf(client, "XRP", liquidator1Address); const liquidator1SXrpBalance = await sTokenBalanceOf(client, "XRP", liquidator1Address); @@ -227,7 +226,7 @@ describe("LendingPool: Liquidation (receive underlying assets)", function () { const borrower1DXlmBalanceBefore = await debtTokenBalanceOf(client, "XLM", borrower1Address); const dXlmSupplyBefore = await debtTokenTotalSupply(client, "XLM"); - await liquidate(client, liquidator1Keys, borrower1Address, false); + await liquidate(client, liquidator1Keys, borrower1Address); const liquidator1UsdcBalanceAfter = await tokenBalanceOf(client, "USDC", liquidator1Address); const liquidator1SUsdcBalance = await sTokenBalanceOf(client, "USDC", liquidator1Address); diff --git a/integration-tests/tests/pool/3.liquidator.spec.ts b/integration-tests/tests/pool/3.liquidator.spec.ts index f36aad8d..a6205d7d 100644 --- a/integration-tests/tests/pool/3.liquidator.spec.ts +++ b/integration-tests/tests/pool/3.liquidator.spec.ts @@ -38,11 +38,10 @@ describe("LendingPool: Liquidation (receive STokens)", function () { await deploy(); await init(client); - lender1Address = lender1Keys.publicKey(); borrower1Address = borrower1Keys.publicKey(); liquidator1Address = liquidator1Keys.publicKey(); - + // uncomment to resume test with existing contracts // require("dotenv").config({ path: contractsFilename }); // return; @@ -181,13 +180,7 @@ describe("LendingPool: Liquidation (receive STokens)", function () { && borrower1Position.npv > -210_000); }); - it("Case 5: Liquidator tries to liquidate Borrower's position", async function () { - await expect(liquidate(client, liquidator1Keys, borrower1Address, true)) - .to.eventually.rejected; - }); - - // TODO: requires optimization - it("Case 6: Liquidator liquidates Borrower's positions partialy", async function () { + it("Case 5: Liquidator liquidates Borrower's positions partialy", async function () { await mintUnderlyingTo(client, "XRP", liquidator1Address, 1_000_000_000n); await repay(client, liquidator1Keys, "XRP", I128_MAX); // Liquidator1 liquidates Borrower1's positions @@ -196,8 +189,8 @@ describe("LendingPool: Liquidation (receive STokens)", function () { const liquidator1SUsdcBalanceBefore = await sTokenBalanceOf(client, "USDC", liquidator1Address); const borrower1SXrpBalanceBefore = await sTokenBalanceOf(client, "XRP", borrower1Address); const borrower1SUsdcBalanceBefore = await sTokenBalanceOf(client, "USDC", borrower1Address); - - await liquidate(client, liquidator1Keys, borrower1Address, true); + + await liquidate(client, liquidator1Keys, borrower1Address); const liquidator1XrpBalanceAfter = await tokenBalanceOf(client, "XRP", liquidator1Address); const liquidator1SXrpBalanceAfter = await sTokenBalanceOf(client, "XRP", liquidator1Address); @@ -216,8 +209,8 @@ describe("LendingPool: Liquidation (receive STokens)", function () { const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(liquidator1XrpBalanceBefore, liquidator1XrpBalanceAfter); - assert(liquidator1SXrpBalanceBefore < liquidator1SXrpBalanceAfter); + assert.equal(liquidator1SXrpBalanceBefore, liquidator1SXrpBalanceAfter); + assert(liquidator1XrpBalanceBefore < liquidator1XrpBalanceAfter); assert.equal(liquidator1USDCBalance, 0n); assert(liquidator1SUsdcBalanceBefore <= liquidator1SUsdcBalanceAfter); @@ -225,7 +218,7 @@ describe("LendingPool: Liquidation (receive STokens)", function () { assert(borrower1SUsdcBalanceBefore >= borrower1SUsdcBalanceAfter); assert.notEqual(borrower1DXlmBalance, 0n); - assert.equal(sXrpSupply, 40_000_000_000n); + assert.equal(sXrpSupply, 40000000000n - (borrower1SXrpBalanceBefore - borrower1SXrpBalanceAfter)); assert.equal(sUsdcSupply, 40_000_000_000n); assert.notEqual(dXlmSupply, 0n); @@ -235,16 +228,19 @@ describe("LendingPool: Liquidation (receive STokens)", function () { assert(borrower1Position.npv > 0n); }); - it("Case 7: Borrower withdraw XRP partialy to NPV ~= 0", async function () { + it("Case 6: Borrower withdraw XRP partialy to NPV ~= 0", async function () { const borrower1SXrpBalanceBefore = await sTokenBalanceOf(client, "XRP", borrower1Address); // target balance ~3.3 XRP - const targetXRPBalance = 3_300_000_000n; + const targetXRPBalance = 1_000_000_000n; const toWithdraw = borrower1SXrpBalanceBefore - targetXRPBalance; + const borrower1Position = await accountPosition(client, borrower1Keys); - await withdraw(client, borrower1Keys, "XRP", toWithdraw < 0n ? 0n : toWithdraw); + assert(Number(borrower1Position.npv) / Number(borrower1Position.discounted_collateral) < 0.25); + + await expect(withdraw(client, borrower1Keys, "XRP", toWithdraw < 0n ? 0n : toWithdraw)).to.eventually.rejected; }); - it("Case 8: Drop the XRP price so Borrower's NPV <= 0", async function () { + it("Case 7: Drop the XRP price so Borrower's NPV <= 0", async function () { // XRP price is set to 0.4799999 await initPrice(client, "XRP", 4_799_999_000_000_000n, 0); @@ -253,7 +249,7 @@ describe("LendingPool: Liquidation (receive STokens)", function () { assert(borrower1Position.npv < 0n); }); - it("Case 9: Liquidator liquidates Borrower's position partialy 2", async function () { + it("Case 8: Liquidator liquidates Borrower's position partialy 2", async function () { // Liquidator1 liquidates Borrower1's positions const liquidator1XrpBalanceBefore = await tokenBalanceOf(client, "XRP", liquidator1Address); const liquidator1SXrpBalanceBefore = await sTokenBalanceOf(client, "XRP", liquidator1Address); @@ -267,7 +263,7 @@ describe("LendingPool: Liquidation (receive STokens)", function () { const sUsdcSupplyBefore = await sTokenTotalSupply(client, "USDC"); const borrower1PositionBefore = await accountPosition(client, borrower1Keys); - await liquidate(client, liquidator1Keys, borrower1Address, true); + await liquidate(client, liquidator1Keys, borrower1Address); const liquidator1XrpBalanceAfter = await tokenBalanceOf(client, "XRP", liquidator1Address); const liquidator1SXrpBalanceAfter = await sTokenBalanceOf(client, "XRP", liquidator1Address); @@ -288,26 +284,25 @@ describe("LendingPool: Liquidation (receive STokens)", function () { assert(borrower1SXrpBalanceBefore > borrower1SXrpBalanceAfter); assert(borrower1DXlmBalanceBefore > borrower1DXlmBalanceAfter); - assert(borrower1SUsdcBalanceBefore > borrower1SUsdcBalanceAfter, `borrower1SUsdcBalanceBefore ${borrower1SUsdcBalanceBefore} borrower1SUsdcBalanceAfter ${borrower1SUsdcBalanceAfter}`); + assert.equal(borrower1SUsdcBalanceBefore, borrower1SUsdcBalanceAfter); - assert.equal(liquidator1XrpBalanceAfter, liquidator1XrpBalanceBefore); - assert(liquidator1SXrpBalanceBefore < liquidator1SXrpBalanceAfter); + assert.equal(liquidator1SXrpBalanceBefore, liquidator1SXrpBalanceAfter); + assert(liquidator1XrpBalanceBefore < liquidator1XrpBalanceAfter); assert.equal(liquidator1USDCBalanceAfter, 0n); - assert(liquidator1SUsdcBalanceBefore < liquidator1SUsdcBalanceAfter, `liquidator1SUsdcBalanceBefore ${liquidator1SUsdcBalanceBefore} liquidator1SUsdcBalanceAfter ${liquidator1SUsdcBalanceAfter}`); - - assert.equal(sXrpSupplyBefore, sXrpSupplyAfter); + assert(sXrpSupplyAfter < sXrpSupplyBefore); assert.equal(sUsdcSupplyBefore, sUsdcSupplyAfter); assert.equal(dXlmSupply, borrower1DXlmBalanceAfter); assert(borrower1PositionBefore.npv <= borrower1PositionAfter.npv); + assert(borrower1PositionAfter.npv > 0n); }); - it("Case 10: Liquidator cannot liquidate borrower without collateral", async function () { + it("Case 9: Liquidator cannot liquidate borrower without collateral", async function () { const borrower1Position = await accountPosition(client, borrower1Keys); if (borrower1Position.discounted_collateral === 0n) { - await expect(liquidate(client, liquidator1Keys, borrower1Address, true)) + await expect(liquidate(client, liquidator1Keys, borrower1Address)) .to.eventually.rejected; } }); diff --git a/integration-tests/tests/pool/4.npv.spec.ts b/integration-tests/tests/pool/4.npv.spec.ts index 8a3abf09..99a785bb 100644 --- a/integration-tests/tests/pool/4.npv.spec.ts +++ b/integration-tests/tests/pool/4.npv.spec.ts @@ -134,7 +134,7 @@ describe("LendingPool: Borrower position", function () { const borrower1PositionBefore = await accountPosition(client, borrower1Keys); console.log(borrower1PositionBefore); - await withdraw(client, borrower1Keys, "XRP", 5_000_000_000n); + await withdraw(client, borrower1Keys, "XRP", 100_000n); const borrower1XrpBalance = await tokenBalanceOf(client, "XRP", borrower1Address); const borrower1SXrpBalance = await sTokenBalanceOf(client, "XRP", borrower1Address); @@ -142,21 +142,21 @@ describe("LendingPool: Borrower position", function () { const sXrpSupply = await sTokenTotalSupply(client, "XRP"); const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(borrower1XrpBalance, 85_000_000_000n); - assert.equal(borrower1SXrpBalance, 15_000_000_000n); - assert.equal(sXrpBalance, 15_000_000_000n); + assert.equal(borrower1XrpBalance, 80_000_100_000n); + assert.equal(borrower1SXrpBalance, 19_999_900_000n); + assert.equal(sXrpBalance, 19_999_900_000n); assert.equal(sXrpSupply, borrower1SXrpBalance); assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 89_000_100n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 90_000_000n); - assert(borrower1Position.npv > 999_000n - && borrower1Position.npv <= 1_000_000n, `borrower1Position.npv ${borrower1Position.npv}`); + assert.equal(borrower1Position.discounted_collateral, 119_999_400n); + assert(borrower1Position.npv > 30_999_000 + && borrower1Position.npv <= 31_000_000n, `borrower1Position.npv ${borrower1Position.npv}`); }); it("Case 5: Drop the XRP price so Borrower's NPV <= 0", async function () { // XRP price is set to 0.9 - await initPrice(client, "XRP", 9_000_000_000_000_000n, 0); + await initPrice(client, "XRP", 7_000_000_000_000_000n, 0); const borrower1Position = await accountPosition(client, borrower1Keys); @@ -182,7 +182,7 @@ describe("LendingPool: Borrower position", function () { assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 81_000_000n); + assert.equal(borrower1Position.discounted_collateral, 83_999_580n); assert(borrower1Position.npv < 0n && borrower1Position.npv > -10_000_000n); }); @@ -197,14 +197,14 @@ describe("LendingPool: Borrower position", function () { const sXrpSupply = await sTokenTotalSupply(client, "XRP"); const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(borrower1XrpBalance, 85_000_000_000n); - assert.equal(borrower1SXrpBalance, 15_000_000_000n); - assert.equal(sXrpBalance, 15_000_000_000n); + assert.equal(borrower1XrpBalance, 80_000_100_000n); + assert.equal(borrower1SXrpBalance, 19_999_900_000n); + assert.equal(sXrpBalance, 19_999_900_000n); assert.equal(sXrpSupply, borrower1SXrpBalance); assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 81_000_000n); + assert.equal(borrower1Position.discounted_collateral, 83_999_580n); assert(borrower1Position.npv < 0n && borrower1Position.npv > -10_000_000n); }); @@ -222,18 +222,18 @@ describe("LendingPool: Borrower position", function () { const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(borrower1XrpBalance, 81_500_000_000n); - assert.equal(borrower1SXrpBalance, 18_500_000_000n); + assert.equal(borrower1XrpBalance, 76_500_100_000n); + assert.equal(borrower1SXrpBalance, 23_499_900_000n); - assert.equal(sXrpBalance, 18_500_000_000n); + assert.equal(sXrpBalance, 23_499_900_000n); - assert.equal(sXrpSupply, 18_500_000_000n); + assert.equal(sXrpSupply, 23_499_900_000n); assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 99_900_000n); - assert(borrower1Position.npv < 11_000_000n - && borrower1Position.npv > 10_000_000n); + assert.equal(borrower1Position.discounted_collateral, 98_699_580n); + assert(borrower1Position.npv > 9_600_000n + && borrower1Position.npv < 10_000_000n); assert(healthFactor(borrower1Position) < 0.25); }); @@ -255,15 +255,15 @@ describe("LendingPool: Borrower position", function () { assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 99_900_000n); - assert(borrower1Position.npv < 11_000_000n - && borrower1Position.npv > 10_000_000n); + assert.equal(borrower1Position.discounted_collateral, 98_699_580n); + assert(borrower1Position.npv > 9_600_000n + && borrower1Position.npv < 10_000_000n); assert(healthFactor(borrower1Position) < 0.25); }); it("Case 10: Borrower deposits more to achieve health >= 0.25", async function () { - // Borrower1 deposits 3.5 XRP - await deposit(client, borrower1Keys, "XRP", 3_500_000_000n); + // Borrower1 deposits 7 XRP + await deposit(client, borrower1Keys, "XRP", 7_000_000_000n); const borrower1XrpBalance = await tokenBalanceOf(client, "XRP", borrower1Address); const borrower1SXrpBalance = await sTokenBalanceOf(client, "XRP", borrower1Address); @@ -274,18 +274,18 @@ describe("LendingPool: Borrower position", function () { const borrower1Position = await accountPosition(client, borrower1Keys); - assert.equal(borrower1XrpBalance, 78_000_000_000n); - assert.equal(borrower1SXrpBalance, 22_000_000_000n); + assert.equal(borrower1XrpBalance, 69_500_100_000n); + assert.equal(borrower1SXrpBalance, 30_499_900_000n); - assert.equal(sXrpBalance, 22_000_000_000n); + assert.equal(sXrpBalance, 30_499_900_000n); - assert.equal(sXrpSupply, 22_000_000_000n); + assert.equal(sXrpSupply, 30_499_900_000n); assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 118_800_000n); - assert(borrower1Position.npv < 30_000_000n - && borrower1Position.npv > 29_000_000n); + assert.equal(borrower1Position.discounted_collateral, 128_099_580n); + assert(borrower1Position.npv < 40_000_000n + && borrower1Position.npv > 39_000_000n); assert(healthFactor(borrower1Position) >= 0.25); }); @@ -307,9 +307,9 @@ describe("LendingPool: Borrower position", function () { assert(borrower1Position.debt >= 89_000_000n && borrower1Position.debt < 90_000_000n, `borrower1Position.debt ${borrower1Position.debt}`); - assert.equal(borrower1Position.discounted_collateral, 118_800_000n); - assert(borrower1Position.npv < 30_000_000n - && borrower1Position.npv > 29_000_000n); + assert.equal(borrower1Position.discounted_collateral, 128_099_580n); + assert(borrower1Position.npv < 40_000_000n + && borrower1Position.npv > 39_000_000n); assert(healthFactor(borrower1Position) > 0.25); }); }); \ No newline at end of file diff --git a/integration-tests/tests/pool/6.tx.budget.spec.ts b/integration-tests/tests/pool/6.tx.budget.spec.ts index 32e9696d..ea30301a 100644 --- a/integration-tests/tests/pool/6.tx.budget.spec.ts +++ b/integration-tests/tests/pool/6.tx.budget.spec.ts @@ -77,10 +77,10 @@ describe("LendingPool: methods must not exceed CPU/MEM limits", function () { await deposit(client, borrower1Keys, "XRP", 30_000_000_000n); await borrow(client, borrower1Keys, "USDC", 6_000_000_000n); - // Borrower2 deposits 20_000_000_000 USDC, borrows 60_000_000 XLM, 5_999_000_000 XRP + // Borrower2 deposits 20_000_000_000 USDC, borrows 60_000_000 XLM, 4_000_000_000 XRP await deposit(client, borrower2Keys, "USDC", 20_000_000_000n); await borrow(client, borrower2Keys, "XLM", 60_000_000n); - await borrow(client, borrower2Keys, "XRP", 5_900_000_000n); + await borrow(client, borrower2Keys, "XRP", 2_000_000_000n); try { fs.unlinkSync(BUDGET_SNAPSHOT_FILE); @@ -137,7 +137,7 @@ describe("LendingPool: methods must not exceed CPU/MEM limits", function () { await initPrice(client, "USDC", 15_000_000_000_000_000n, 0); await expect( - liquidate(client, liquidator1Keys, borrower1Address, false) + liquidate(client, liquidator1Keys, borrower1Address) .then((result) => writeBudgetSnapshot("liquidate", result)) ).to.not.eventually.rejected; // await expect( diff --git a/integration-tests/tests/pool/7.liquidate.budget.spec.ts b/integration-tests/tests/pool/7.liquidate.budget.spec.ts index 256cd303..71ee5245 100644 --- a/integration-tests/tests/pool/7.liquidate.budget.spec.ts +++ b/integration-tests/tests/pool/7.liquidate.budget.spec.ts @@ -1,4 +1,4 @@ -import { Keypair, xdr } from "stellar-sdk"; +import { Keypair, xdr } from "@stellar/stellar-sdk"; import { I128_MAX, accountPosition, diff --git a/integration-tests/tests/soroban.client.ts b/integration-tests/tests/soroban.client.ts index d29bc4b2..91984949 100644 --- a/integration-tests/tests/soroban.client.ts +++ b/integration-tests/tests/soroban.client.ts @@ -1,15 +1,15 @@ -import { Contract, TimeoutInfinite, TransactionBuilder, Keypair, xdr, SorobanRpc, BASE_FEE } from "stellar-sdk"; +import { Contract, TimeoutInfinite, TransactionBuilder, Keypair, rpc, xdr, BASE_FEE } from "@stellar/stellar-sdk"; import { promisify } from "util"; import "./soroban.config"; import { adminKeys } from "./soroban.config"; export class SendTransactionResult { - response: SorobanRpc.Api.GetTransactionResponse; - simulation?: SorobanRpc.Api.SimulateTransactionSuccessResponse + response: rpc.Api.GetTransactionResponse; + simulation?: rpc.Api.SimulateTransactionSuccessResponse constructor( - response: SorobanRpc.Api.GetTransactionResponse, - simulation?: SorobanRpc.Api.SimulateTransactionSuccessResponse + response: rpc.Api.GetTransactionResponse, + simulation?: rpc.Api.SimulateTransactionSuccessResponse ) { this.response = response; this.simulation = simulation; @@ -17,10 +17,10 @@ export class SendTransactionResult { } export class SorobanClient { - client: SorobanRpc.Server; + client: rpc.Server; constructor() { - this.client = new SorobanRpc.Server(process.env.SOROBAN_RPC_URL, { + this.client = new rpc.Server(process.env.SOROBAN_RPC_URL, { allowHttp: true }); this.client.getHealth(); @@ -49,21 +49,21 @@ export class SorobanClient { .setTimeout(TimeoutInfinite) .build(); - const simulated = await this.client.simulateTransaction(operation) as SorobanRpc.Api.SimulateTransactionSuccessResponse; + const simulated = await this.client.simulateTransaction(operation) as rpc.Api.SimulateTransactionSuccessResponse; - if (SorobanRpc.Api.isSimulationError(simulated)) { + if (rpc.Api.isSimulationError(simulated)) { throw new Error(simulated.error); } else if (!simulated.result) { throw new Error(`Invalid simulation: no result in ${simulated}`); } - const transaction = SorobanRpc.assembleTransaction(operation, simulated).build() + const transaction = rpc.assembleTransaction(operation, simulated).build() transaction.sign(signer); const response = await this.client.sendTransaction(transaction); - let result: SorobanRpc.Api.GetTransactionResponse; + let result: rpc.Api.GetTransactionResponse; let attempts = 15; if (response.status == "ERROR") { @@ -74,15 +74,15 @@ export class SorobanClient { await delay(1000); result = await this.client.getTransaction(response.hash); attempts--; - } while (result.status === SorobanRpc.Api.GetTransactionStatus.NOT_FOUND && attempts > 0); + } while (result.status === rpc.Api.GetTransactionStatus.NOT_FOUND && attempts > 0); - if (result.status == SorobanRpc.Api.GetTransactionStatus.NOT_FOUND) { + if (result.status == rpc.Api.GetTransactionStatus.NOT_FOUND) { throw Error("Submitted transaction was not found"); } if ("resultXdr" in result) { - const getResult = result as SorobanRpc.Api.GetTransactionResponse; - if (getResult.status !== SorobanRpc.Api.GetTransactionStatus.SUCCESS) { + const getResult = result as rpc.Api.GetTransactionResponse; + if (getResult.status !== rpc.Api.GetTransactionStatus.SUCCESS) { throw new Error('Transaction result is insuccessfull'); } @@ -121,7 +121,7 @@ export class SorobanClient { const simulated = await this.client.simulateTransaction(operation); - if (SorobanRpc.Api.isSimulationError(simulated)) { + if (rpc.Api.isSimulationError(simulated)) { throw new Error(simulated.error); } else if (!simulated.result) { throw new Error(`invalid simulation: no result in ${simulated}`); diff --git a/integration-tests/tests/soroban.config.ts b/integration-tests/tests/soroban.config.ts index 270c4793..2ffcd348 100644 --- a/integration-tests/tests/soroban.config.ts +++ b/integration-tests/tests/soroban.config.ts @@ -1,5 +1,5 @@ import { readFileSync, writeFileSync } from "fs"; -import { Keypair } from "stellar-sdk"; +import { Keypair } from "@stellar/stellar-sdk"; export const contractsFilename = `../deploy/artifacts/${process.env.NODE_ENV}/.contracts`; diff --git a/integration-tests/tests/soroban.converter.ts b/integration-tests/tests/soroban.converter.ts index 2e90e0cf..3311eaee 100644 --- a/integration-tests/tests/soroban.converter.ts +++ b/integration-tests/tests/soroban.converter.ts @@ -1,4 +1,4 @@ -import { Address, xdr } from 'stellar-sdk'; +import { Address, xdr } from '@stellar/stellar-sdk'; import { Buffer } from "node:buffer"; import { bufToBigint } from 'bigint-conversion'; @@ -67,7 +67,7 @@ export function convertToScvBytes(value: string, encoding: BufferEncoding): xdr. } export function parseMetaXdrToJs(meta: xdr.TransactionMeta): T { - const value = meta.v3() + const value = meta.v4() .sorobanMeta() .returnValue(); diff --git a/integration-tests/yarn.lock b/integration-tests/yarn.lock index c807e624..8fa8cd4f 100644 --- a/integration-tests/yarn.lock +++ b/integration-tests/yarn.lock @@ -10,14 +10,14 @@ "@jridgewell/trace-mapping" "0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -28,46 +28,57 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@juanelas/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@juanelas/base64/-/base64-1.1.2.tgz#968ff0f9c48adcfa79a0802385d56a2a661cb6cd" - integrity sha512-mr2pfRQpWap0Uq4tlrCgp3W+Yjx1/Bpq4QJsYeAQUh1mExgyQvXz7xUhmYT2HcLLspuAL5dpnos8P2QhaCSXsQ== + version "1.1.5" + resolved "https://registry.yarnpkg.com/@juanelas/base64/-/base64-1.1.5.tgz#d43b3c78e32e609d9b17a15e4f1b6342c9ca1238" + integrity sha512-mjAF27LzwfYobdwqnxZgeucbKT5wRRNvILg3h5OvCWK+3F7mw/A1tnjHnNiTYtLmTvT/bM1jA5AX7eQawDGs1w== + +"@noble/curves@^1.9.6": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" -"@stellar/js-xdr@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@stellar/js-xdr/-/js-xdr-3.1.1.tgz#be0ff90c8a861d6e1101bca130fa20e74d5599bb" - integrity sha512-3gnPjAz78htgqsNEDkEsKHKosV2BF2iZkoHCNxpmZwUxiPsw+2VaXMed8RRMe0rGk3d5GZe7RrSba8zV80J3Ag== +"@noble/hashes@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== -"@stellar/stellar-base@^12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@stellar/stellar-base/-/stellar-base-12.0.0.tgz#d46e2a45b756c3e5b4b8f82f224fcc467dac3ade" - integrity sha512-uGpahDFFXbE39myOmBnEZSjVys4yUkQ/ASNuYENGyS8MNdfA0TS7DPWkiO6t17P+rW+FRV1zmumJtjRHwxxMdw== +"@stellar/js-xdr@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@stellar/js-xdr/-/js-xdr-3.1.2.tgz#db7611135cf21e989602fd72f513c3bed621bc74" + integrity sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ== + +"@stellar/stellar-base@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@stellar/stellar-base/-/stellar-base-14.0.1.tgz#a1286a44da50ce903e6df8f4ab3a27df42212b49" + integrity sha512-mI6Kjh9hGWDA1APawQTtCbR7702dNT/8Te1uuRFPqqdoAKBk3WpXOQI3ZSZO+5olW7BSHpmVG5KBPZpIpQxIvw== dependencies: - "@stellar/js-xdr" "^3.1.1" + "@noble/curves" "^1.9.6" + "@stellar/js-xdr" "^3.1.2" base32.js "^0.1.0" - bignumber.js "^9.1.2" + bignumber.js "^9.3.1" buffer "^6.0.3" - sha.js "^2.3.6" - tweetnacl "^1.0.3" - optionalDependencies: - sodium-native "^4.1.1" + sha.js "^2.4.12" -"@stellar/stellar-sdk@12.0.1": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@stellar/stellar-sdk/-/stellar-sdk-12.0.1.tgz#0ded98bdd606cc2dc491ba6095a30530d690380d" - integrity sha512-0+YXUTS2LpZ+Of383hSYVpsRl9BJ3X9lHcj05ouS3VkVL9BH7w+Par8RHPkiHS6lLYn3gWRgaJauTebkamY/Jw== +"@stellar/stellar-sdk@14.2.0": + version "14.2.0" + resolved "https://registry.yarnpkg.com/@stellar/stellar-sdk/-/stellar-sdk-14.2.0.tgz#fb58f43e7b7cd33fd5bb31546be67c2cf6a1120b" + integrity sha512-7nh2ogzLRMhfkIC0fGjn1LHUzk3jqVw8tjAuTt5ADWfL9CSGBL18ILucE9igz2L/RU2AZgeAvhujAnW91Ut/oQ== dependencies: - "@stellar/stellar-base" "^12.0.0" - axios "^1.7.2" - bignumber.js "^9.1.2" + "@stellar/stellar-base" "^14.0.1" + axios "^1.12.2" + bignumber.js "^9.3.1" eventsource "^2.0.2" + feaxios "^0.0.23" randombytes "^2.1.0" toml "^3.0.0" urijs "^1.19.1" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -84,47 +95,58 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/chai-as-promised@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.6.tgz#3b08cbe1e7206567a480dc6538bade374b19e4e1" - integrity sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA== +"@types/chai-as-promised@7.1.8": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== dependencies: "@types/chai" "*" "@types/chai@*": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.6.tgz#7b489e8baf393d5dd1266fb203ddd4ea941259e6" - integrity sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw== - -"@types/chai@^4.3.5": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== + version "5.2.2" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.2.tgz#6f14cea18180ffc4416bc0fd12be05fdd73bdd6b" + integrity sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg== + dependencies: + "@types/deep-eql" "*" -"@types/mocha@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" - integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== +"@types/chai@4.3.20": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== -"@types/node@^20.4.1": - version "20.4.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" - integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/mocha@^10.0.10": + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== + +"@types/node@20.19.17": + version "20.19.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.17.tgz#41b52697373aef8a43b3b92f33b43f329b2d674b" + integrity sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ== + dependencies: + undici-types "~6.21.0" acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" -acorn@^8.4.1: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.11.0, acorn@^8.4.1: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-regex@^5.0.1: version "5.0.1" @@ -166,13 +188,20 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^1.12.2: + version "1.12.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" + integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== 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: @@ -190,51 +219,38 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bigint-conversion@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/bigint-conversion/-/bigint-conversion-2.4.1.tgz#b473c39edbba9f62922908b37fd3461bec3bc9cb" - integrity sha512-/DTRevseMZoqN4KLkN5BryOiom0KbwYajiXG5Vo+ZcEPAO0WBZyZoYyDZSgfeq/v/oegLo9bjdndDBlExvAhBQ== +bigint-conversion@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/bigint-conversion/-/bigint-conversion-2.4.3.tgz#cca2ff59033960be8ff517b8e931db82b6bb24fa" + integrity sha512-eM76IXlhXQD6HAoE6A7QLQ3jdC04EJdjH3zrlU1Jtt4/jj+O/pMGjGR5FY8/55FOIBsK25kly0RoG4GA4iKdvg== dependencies: "@juanelas/base64" "^1.1.2" -bignumber.js@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bignumber.js@^9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== +bignumber.js@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -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== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== 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== + 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" -browser-stdout@1.3.1: +browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== @@ -247,30 +263,56 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + camelcase@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== +chai-as-promised@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== dependencies: check-error "^1.0.2" -chai@^4.3.7: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== +chai@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.1.0" chalk@^4.1.0: version "4.1.2" @@ -280,15 +322,17 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -328,17 +372,12 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - create-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-env@^7.0.3: +cross-env@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== @@ -346,64 +385,109 @@ cross-env@^7.0.3: cross-spawn "^7.0.1" cross-spawn@^7.0.1: - 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.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@^4.3.5: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +dotenv@16.6.1: + 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" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + 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" + escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-string-regexp@4.0.0: +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== @@ -413,14 +497,21 @@ eventsource@^2.0.2: resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508" integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA== -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== +feaxios@^0.0.23: + version "0.0.23" + resolved "https://registry.yarnpkg.com/feaxios/-/feaxios-0.0.23.tgz#76f37a2666232377ce75354e46dd85cbceeb1758" + integrity sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g== + dependencies: + is-retry-allowed "^3.0.0" + +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" -find-up@5.0.0: +find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -434,17 +525,26 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 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" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + 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: @@ -453,19 +553,48 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +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== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" glob-parent@~5.1.2: version "5.1.2" @@ -474,24 +603,54 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -he@1.2.0: +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -509,7 +668,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1: +inherits@2, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -521,6 +680,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -548,17 +712,34 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-retry-allowed@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-3.0.0.tgz#ea79389fd350d156823c491bee9c69f485b1445c" + integrity sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A== + +is-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -js-yaml@4.1.0: +js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -572,7 +753,7 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -log-symbols@4.1.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -580,18 +761,23 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -604,67 +790,44 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -mocha@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -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== - -ms@2.1.3: +mocha@10.8.2: + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +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== -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -node-gyp-build@^4.8.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" - integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -696,11 +859,6 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -716,6 +874,11 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -740,25 +903,38 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -safe-buffer@^5.0.1, safe-buffer@^5.1.0: +safe-buffer@^5.1.0, safe-buffer@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" -sha.js@^2.3.6: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +sha.js@^2.4.12: + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" shebang-command@^2.0.0: version "2.0.0" @@ -772,26 +948,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -sodium-native@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-4.1.1.tgz#109bc924dd55c13db87c6dd30da047487595723c" - integrity sha512-LXkAfRd4FHtkQS4X6g+nRcVaN7mWVNepV06phIsC6+IZFvGh1voW5TNQiQp2twVaMf05gZqQjuS+uWLM6gHhNQ== - dependencies: - node-gyp-build "^4.8.0" - -stellar-sdk@12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/stellar-sdk/-/stellar-sdk-12.0.1.tgz#48fb76a5f44854ffb907e034eaae5f72d09adbdc" - integrity sha512-Bjx5XOPKDUoXXGdPqHScIcGWi2o/5idQdGEvCmaFTsmbuZIs80HfjJRqHJ2uEL4cSYd8FzNDtai4pgFgvRWSfg== - dependencies: - "@stellar/stellar-base" "^12.0.0" - axios "^1.7.2" - bignumber.js "^9.1.2" - eventsource "^2.0.2" - randombytes "^2.1.0" - toml "^3.0.0" - urijs "^1.19.1" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -808,24 +964,33 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1: +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +to-buffer@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== dependencies: - has-flag "^4.0.0" + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" to-regex-range@^5.0.1: version "5.0.1" @@ -839,10 +1004,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-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -858,20 +1023,29 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tweetnacl@^1.0.3: +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +typed-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +typescript@^5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== -typescript@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +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== urijs@^1.19.1: version "1.19.11" @@ -883,6 +1057,19 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +which-typed-array@^1.1.16: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -890,10 +1077,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== wrap-ansi@^7.0.0: version "7.0.0" @@ -914,17 +1101,12 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-unparser@2.0.0: +yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== @@ -934,7 +1116,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: +yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== diff --git a/mocks/debt_token_v100_mock.wasm b/mocks/debt_token_v100_mock.wasm new file mode 100755 index 00000000..ce5187b3 Binary files /dev/null and b/mocks/debt_token_v100_mock.wasm differ diff --git a/mocks/debt_token_v2_mock.wasm b/mocks/debt_token_v2_mock.wasm deleted file mode 100755 index 8627c802..00000000 Binary files a/mocks/debt_token_v2_mock.wasm and /dev/null differ diff --git a/mocks/flash-loan-receiver-mock/src/lib.rs b/mocks/flash-loan-receiver-mock/src/lib.rs index 679aca30..99726ef5 100644 --- a/mocks/flash-loan-receiver-mock/src/lib.rs +++ b/mocks/flash-loan-receiver-mock/src/lib.rs @@ -34,7 +34,7 @@ impl FlashLoanReceiverTrait for FlashLoanReceiver { let token_client = token::Client::new(&env, &asset.asset); - token_client.transfer(&initiator, &env.current_contract_address(), &asset.premium); + token_client.transfer(&initiator, env.current_contract_address(), &asset.premium); token_client.approve( &env.current_contract_address(), diff --git a/mocks/pool_v100_mock.wasm b/mocks/pool_v100_mock.wasm new file mode 100755 index 00000000..ec416c50 Binary files /dev/null and b/mocks/pool_v100_mock.wasm differ diff --git a/mocks/pool_v2_mock.wasm b/mocks/pool_v2_mock.wasm deleted file mode 100755 index 45a72259..00000000 Binary files a/mocks/pool_v2_mock.wasm and /dev/null differ diff --git a/mocks/s_token_v100_mock.wasm b/mocks/s_token_v100_mock.wasm new file mode 100755 index 00000000..81103123 Binary files /dev/null and b/mocks/s_token_v100_mock.wasm differ diff --git a/mocks/s_token_v2_mock.wasm b/mocks/s_token_v2_mock.wasm deleted file mode 100755 index 328c701b..00000000 Binary files a/mocks/s_token_v2_mock.wasm and /dev/null differ