From 7324a9630545534b03383005bc812b11feea8cc0 Mon Sep 17 00:00:00 2001 From: Alex Gonchar Date: Thu, 30 May 2024 12:20:42 +0100 Subject: [PATCH 1/2] chore: polish code and add unit tests --- Cargo.lock | 215 ++++++++++++++++---------------- Cargo.toml | 5 + README.md | 26 +++- account/Cargo.toml | 6 +- account/README.md | 1 + account/src/error.rs | 2 - account/src/lib.rs | 14 +-- account/src/types/account.rs | 8 +- account/src/types/account_db.rs | 6 +- controller/Cargo.toml | 6 +- controller/README.md | 3 + controller/src/lib.rs | 10 +- intent/Cargo.toml | 6 +- intent/README.md | 1 + intent/src/lib.rs | 36 ++++-- intent/src/types/intent/mod.rs | 64 +++++++--- tests/Cargo.toml | 6 +- 17 files changed, 238 insertions(+), 177 deletions(-) create mode 100644 account/README.md create mode 100644 controller/README.md create mode 100644 intent/README.md diff --git a/Cargo.lock b/Cargo.lock index 9710bbe..2305ef2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -40,7 +40,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -61,16 +61,16 @@ checksum = "7c7db3d5a9718568e4cf4a537cfd7070e6e6ff7481510d0237fb529ac850f6d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ - "gimli 0.28.1", + "gimli 0.29.0", ] [[package]] @@ -176,9 +176,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arbitrary" @@ -220,7 +220,7 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -231,7 +231,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -253,9 +253,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.71" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +checksum = "17c6a35df3749d2e8bb1b7b21a976d82b15548788d2735b9d82f329268f71a11" dependencies = [ "addr2line", "cc", @@ -395,7 +395,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "syn_derive", ] @@ -505,9 +505,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" dependencies = [ "serde", ] @@ -561,9 +561,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -683,7 +683,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -756,27 +756,27 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if 1.0.0", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" @@ -830,14 +830,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "darling" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ "darling_core", "darling_macro", @@ -845,27 +845,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.60", + "strsim 0.11.1", + "syn 2.0.66", ] [[package]] name = "darling_macro" -version = "0.20.8" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -928,7 +928,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1027,9 +1027,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elementtree" @@ -1067,7 +1067,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -1091,9 +1091,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1113,9 +1113,9 @@ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "fiat-crypto" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38793c55593b33412e3ae40c2c9781ffaa6f438f6f8c10f24e71846fbd7ae01e" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "filetime" @@ -1320,9 +1320,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "goblin" @@ -1706,9 +1706,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.154" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae743338b92ff9146ce83992f766a31066a91a8c84a45e0e9f21e7cf6de6d346" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" @@ -1732,9 +1732,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" @@ -1805,9 +1805,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -1831,11 +1831,10 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2105,7 +2104,7 @@ checksum = "80fca203c51edd9595ec14db1d13359fb9ede32314990bf296b6c5c4502f6ab7" dependencies = [ "quote", "serde", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2117,7 +2116,7 @@ dependencies = [ "fs2", "near-rpc-error-core", "serde", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2173,7 +2172,7 @@ dependencies = [ "serde_json", "strum 0.26.2", "strum_macros 0.26.2", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2362,9 +2361,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "b8ec7ab813848ba4522158d5517a6093db1ded27575b070f4177b8d12b41db5e" dependencies = [ "memchr", ] @@ -2404,7 +2403,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2487,9 +2486,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking_lot" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2550,9 +2549,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap 2.2.6", @@ -2584,7 +2583,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -2695,9 +2694,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" dependencies = [ "unicode-ident", ] @@ -3067,15 +3066,15 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51f344d206c5e1b010eec27349b815a4805f70a778895959d70b74b9b529b30a" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ "ring", "rustls-pki-types", @@ -3084,15 +3083,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schannel" @@ -3105,9 +3104,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc6e7ed6919cb46507fb01ff1654309219f62b4d603822501b0b80d42f6f21ef" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "schemars_derive", @@ -3117,14 +3116,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.19" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185f2b7aa7e02d418e453790dde16890256bbd2bcd04b7dc5348811052b53f49" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3156,7 +3155,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3212,40 +3211,40 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.199" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.199" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "serde_derive_internals" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -3260,7 +3259,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3302,7 +3301,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3504,7 +3503,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3568,9 +3567,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -3586,7 +3585,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3662,22 +3661,22 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3773,7 +3772,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -3846,9 +3845,9 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" [[package]] name = "toml_edit" @@ -3968,7 +3967,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", ] [[package]] @@ -4209,7 +4208,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -4243,7 +4242,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4529,9 +4528,9 @@ checksum = "791978798f0597cfc70478424c2b4fdc2b7a8024aaff78497ef00f24ef674193" [[package]] name = "zeroize" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zeropool-bn" diff --git a/Cargo.toml b/Cargo.toml index eadc0a2..032410d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,11 @@ members = [ "tests" ] +[workspace.lints.clippy] +all = "deny" +nursery = "deny" +pedantic = "deny" + [profile.release] codegen-units = 1 opt-level = "z" diff --git a/README.md b/README.md index 441c9e6..7f151c6 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,27 @@ # Set of contracts for the Defuse project -### Accounts contract +### Building and running -The purpose of the contract is to store user's owners of different tokens. +Build the smart contracts: -### Intent contract +```shell +cargo make build +``` + +Run integration tests: + +```shell +cargo make test +``` + +Run clippy linter: + +```shell +cargo make clippy +``` + +### Contracts + +- [Account contract](account/README.md) +- [Controller contract](controller/README.md) +- [Intent contract](intent/README.md) diff --git a/account/Cargo.toml b/account/Cargo.toml index 2213081..8c91bf7 100644 --- a/account/Cargo.toml +++ b/account/Cargo.toml @@ -6,10 +6,8 @@ edition.workspace = true [lib] crate-type = ["cdylib", "rlib"] -[lints.clippy] -all = "deny" -nursery = "deny" -pedantic = "deny" +[lints] +workspace = true [dependencies] near-sdk.workspace = true diff --git a/account/README.md b/account/README.md new file mode 100644 index 0000000..ddce6a2 --- /dev/null +++ b/account/README.md @@ -0,0 +1 @@ +# Account contract for the Defuse project diff --git a/account/src/error.rs b/account/src/error.rs index 710ebe9..5d47799 100644 --- a/account/src/error.rs +++ b/account/src/error.rs @@ -1,5 +1,3 @@ -// use near_sdk::env; - #[derive(Debug)] pub enum Error { AccountExist, diff --git a/account/src/lib.rs b/account/src/lib.rs index 04bad19..2698aa2 100644 --- a/account/src/lib.rs +++ b/account/src/lib.rs @@ -1,7 +1,6 @@ -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; use near_sdk::store::LookupSet; use near_sdk::{ - env, ext_contract, near_bindgen, AccountId, BorshStorageKey, PanicOnDefault, PromiseOrValue, + env, ext_contract, near, AccountId, BorshStorageKey, PanicOnDefault, PromiseOrValue, }; use crate::error::LogError; @@ -10,16 +9,15 @@ use crate::types::{Account, AccountDb}; mod error; mod types; -#[derive(BorshSerialize, BorshDeserialize, BorshStorageKey)] -#[borsh(crate = "near_sdk::borsh")] +#[derive(BorshStorageKey)] +#[near(serializers=[borsh])] enum Prefix { Accounts, Indexers, } -#[near_bindgen] -#[derive(BorshSerialize, BorshDeserialize, PanicOnDefault)] -#[borsh(crate = "near_sdk::borsh")] +#[near(contract_state)] +#[derive(PanicOnDefault)] pub struct AccountContract { owner_id: AccountId, /// MPC contract id. @@ -31,7 +29,7 @@ pub struct AccountContract { accounts: AccountDb, } -#[near_bindgen] +#[near] impl AccountContract { #[init] #[must_use] diff --git a/account/src/types/account.rs b/account/src/types/account.rs index 46fc269..75c3cb1 100644 --- a/account/src/types/account.rs +++ b/account/src/types/account.rs @@ -1,10 +1,8 @@ -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; -use near_sdk::serde::{Deserialize, Serialize}; +use near_sdk::near; -#[derive(Default, Clone, BorshSerialize, BorshDeserialize, Deserialize, Serialize)] +#[derive(Default, Clone)] #[cfg_attr(test, derive(Debug, Eq, PartialEq))] -#[borsh(crate = "near_sdk::borsh")] -#[serde(crate = "near_sdk::serde")] +#[near(serializers=[borsh, json])] pub struct Account { is_locked: bool, } diff --git a/account/src/types/account_db.rs b/account/src/types/account_db.rs index 8b380a7..ce01e21 100644 --- a/account/src/types/account_db.rs +++ b/account/src/types/account_db.rs @@ -1,6 +1,5 @@ -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; use near_sdk::store::LookupMap; -use near_sdk::{AccountId, IntoStorageKey}; +use near_sdk::{near, AccountId, IntoStorageKey}; use std::collections::HashMap; use crate::error::Error; @@ -9,8 +8,7 @@ use crate::types::Account; // Accounts that belong user. Key here is derivation path. type UserAccounts = HashMap; -#[derive(BorshSerialize, BorshDeserialize)] -#[borsh(crate = "near_sdk::borsh")] +#[near(serializers=[borsh])] pub struct AccountDb(LookupMap); impl AccountDb { diff --git a/controller/Cargo.toml b/controller/Cargo.toml index 1a74c83..dc8bd1b 100644 --- a/controller/Cargo.toml +++ b/controller/Cargo.toml @@ -6,10 +6,8 @@ edition.workspace = true [lib] crate-type = ["cdylib", "rlib"] -[lints.clippy] -all = "deny" -nursery = "deny" -pedantic = "deny" +[lints] +workspace = true [dependencies] near-sdk.workspace = true diff --git a/controller/README.md b/controller/README.md new file mode 100644 index 0000000..db97826 --- /dev/null +++ b/controller/README.md @@ -0,0 +1,3 @@ +# Controller contract for the Defuse project + +The main goal of the contract is to manage and update account and intent contracts. diff --git a/controller/src/lib.rs b/controller/src/lib.rs index 75478f6..f8c734f 100644 --- a/controller/src/lib.rs +++ b/controller/src/lib.rs @@ -1,14 +1,12 @@ -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; -use near_sdk::{near_bindgen, AccountId, PanicOnDefault}; +use near_sdk::{near, AccountId, PanicOnDefault}; -#[near_bindgen] -#[derive(BorshSerialize, BorshDeserialize, PanicOnDefault)] -#[borsh(crate = "near_sdk::borsh")] +#[near(contract_state)] +#[derive(PanicOnDefault)] pub struct ControllerContract { owner_id: AccountId, } -#[near_bindgen] +#[near] impl ControllerContract { #[init] #[must_use] diff --git a/intent/Cargo.toml b/intent/Cargo.toml index 83e99a5..37d88bc 100644 --- a/intent/Cargo.toml +++ b/intent/Cargo.toml @@ -6,10 +6,8 @@ edition.workspace = true [lib] crate-type = ["cdylib", "rlib"] -[lints.clippy] -all = "deny" -nursery = "deny" -pedantic = "deny" +[lints] +workspace = true [dependencies] near-sdk.workspace = true diff --git a/intent/README.md b/intent/README.md new file mode 100644 index 0000000..b9fd19c --- /dev/null +++ b/intent/README.md @@ -0,0 +1 @@ +# Intent contract for the Defuse project diff --git a/intent/src/lib.rs b/intent/src/lib.rs index 99573ae..f1e5ee7 100644 --- a/intent/src/lib.rs +++ b/intent/src/lib.rs @@ -1,10 +1,9 @@ -use near_sdk::borsh::{BorshDeserialize, BorshSerialize}; use near_sdk::env::panic_str; use near_sdk::json_types::U128; use near_sdk::store::{LookupMap, LookupSet}; use near_sdk::{ - env, ext_contract, log, near_bindgen, AccountId, BorshStorageKey, NearToken, PanicOnDefault, - Promise, PromiseOrValue, + env, ext_contract, log, near, AccountId, BorshStorageKey, NearToken, PanicOnDefault, Promise, + PromiseOrValue, }; use crate::{types::intent::Action, types::Intent}; @@ -12,17 +11,16 @@ use crate::{types::intent::Action, types::Intent}; pub mod error; pub mod types; -#[derive(BorshSerialize, BorshDeserialize, BorshStorageKey)] -#[borsh(crate = "near_sdk::borsh")] +#[derive(BorshStorageKey)] +#[near(serializers=[borsh])] enum Prefix { SupportedTokens, AllowedSolvers, Intents, } -#[near_bindgen] -#[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)] -#[borsh(crate = "near_sdk::borsh")] +#[near(contract_state)] +#[derive(PanicOnDefault)] pub struct IntentContract { owner_id: AccountId, supported_tokens: LookupSet, @@ -30,7 +28,7 @@ pub struct IntentContract { intents: LookupMap, } -#[near_bindgen] +#[near] impl IntentContract { /// Contract constructor. #[init] @@ -108,7 +106,7 @@ impl IntentContract { } } - /// Callback which remove executed intent. + /// Callback which removes an intent after successful execution. #[private] pub fn cleanup_intent(&mut self, intent_id: &String) { self.intents.remove(intent_id); @@ -131,7 +129,7 @@ impl IntentContract { predecessor_id == intent.initiator || predecessor_id == self.owner_id || predecessor_id == env::current_account_id(), - "Only initiator, self or owner can roll back intent" + "Only initiator, self or owner can roll back the intent" ); ext_ft::ext(intent.send.token_id.clone()) @@ -140,11 +138,27 @@ impl IntentContract { .then(Self::ext(env::current_account_id()).cleanup_intent(id)) } + /// Set a new owner of the contract. + pub fn set_owner(&mut self, owner_id: AccountId) { + self.assert_owner(); + self.owner_id = owner_id; + } + + /// Return owner of the contract. + pub const fn get_owner(&self) -> &AccountId { + &self.owner_id + } + /// Return pending intent by id. pub fn get_intent(&self, id: &String) -> Option<&Intent> { self.intents.get(id) } + /// Check if the provided solver is allowed. + pub fn is_allowed_solver(&self, solver_id: &AccountId) -> bool { + self.allowed_solvers.contains(solver_id) + } + fn assert_owner(&self) { assert_eq!( self.owner_id, diff --git a/intent/src/types/intent/mod.rs b/intent/src/types/intent/mod.rs index 0a2d90b..fc92367 100644 --- a/intent/src/types/intent/mod.rs +++ b/intent/src/types/intent/mod.rs @@ -1,16 +1,13 @@ use near_sdk::json_types::U128; -use near_sdk::serde::{Deserialize, Serialize}; use near_sdk::{ base64::{engine::general_purpose::STANDARD, Engine}, - borsh::{BorshDeserialize, BorshSerialize}, - env, AccountId, + borsh::BorshDeserialize, + env, near, AccountId, }; use crate::error::ContractError; -#[derive(BorshDeserialize, BorshSerialize, Deserialize, Serialize)] -#[borsh(crate = "near_sdk::borsh")] -#[serde(crate = "near_sdk::serde")] +#[near(serializers=[borsh, json])] pub struct Intent { pub initiator: AccountId, pub send: TokenAmount, @@ -29,8 +26,7 @@ impl Intent { } } -#[derive(BorshDeserialize, BorshSerialize)] -#[borsh(crate = "near_sdk::borsh")] +#[near(serializers=[borsh])] pub enum Action { CreateIntent((String, Intent)), ExecuteIntent(String), @@ -63,9 +59,8 @@ impl Action { } } -#[derive(Default, Debug, BorshDeserialize, BorshSerialize, Deserialize, Serialize)] -#[borsh(crate = "near_sdk::borsh")] -#[serde(crate = "near_sdk::serde")] +#[derive(Default, Debug)] +#[near(serializers=[borsh, json])] pub enum Expiration { #[default] None, @@ -75,10 +70,51 @@ pub enum Expiration { Block(u64), } -#[derive(Debug, Clone, BorshDeserialize, BorshSerialize, Deserialize, Serialize)] -#[borsh(crate = "near_sdk::borsh")] -#[serde(crate = "near_sdk::serde")] +#[derive(Debug, Clone)] +#[near(serializers=[borsh, json])] pub struct TokenAmount { pub token_id: AccountId, pub amount: U128, } + +#[test] +fn test_create_action_serialize() { + let action = Action::CreateIntent(( + "1".to_string(), + Intent { + initiator: "user.near".parse().unwrap(), + send: TokenAmount { + token_id: "token_a.near".parse().unwrap(), + amount: 1000.into(), + }, + receive: TokenAmount { + token_id: "token_b.near".parse().unwrap(), + amount: 2000.into(), + }, + expiration: Expiration::Block(123456), + }, + )); + + assert_eq!( + action.encode().unwrap(), + "AAEAAAAxCQAAAHVzZXIubmVhcgwAAAB0b2tlbl9hLm5lYXLoAwAAAAAAAAAAAAAAAAAADAAAAHRva2VuX2IubmVhctAHAAAAAAAAAAAAAAAAAAACQOIBAAAAAAA=" + ); +} + +#[test] +fn test_create_action_deserialize() { + let action = Action::decode("AAEAAAAxCQAAAHVzZXIubmVhcgwAAAB0b2tlbl9hLm5lYXLoAwAAAAAAAAAAAAAAAAAADAAAAHRva2VuX2IubmVhctAHAAAAAAAAAAAAAAAAAAACQOIBAAAAAAA=").unwrap(); + assert!(matches!(action, Action::CreateIntent((id, _)) if id == "1")); +} + +#[test] +fn test_execute_action_serialize() { + let action = Action::ExecuteIntent("1".to_string()); + assert_eq!(action.encode().unwrap(), "AQEAAAAx"); +} + +#[test] +fn test_execute_action_deserialize() { + let action = Action::decode("AQEAAAAx").unwrap(); + assert!(matches!(action, Action::ExecuteIntent(id) if id == "1")); +} diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 1cba2e2..7705233 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -3,10 +3,8 @@ name = "defuse-contract-tests" version = "0.1.0" edition.workspace = true -[lints.clippy] -all = "deny" -nursery = "deny" -pedantic = "deny" +[lints] +workspace = true [dependencies] defuse-intent-contract = { path = "../intent" } From 8f325c6d766dd89fae81a523831260d961eee609 Mon Sep 17 00:00:00 2001 From: Alex Gonchar Date: Thu, 30 May 2024 12:31:26 +0100 Subject: [PATCH 2/2] chore: make clippy happy --- intent/src/types/intent/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/intent/src/types/intent/mod.rs b/intent/src/types/intent/mod.rs index fc92367..27401f0 100644 --- a/intent/src/types/intent/mod.rs +++ b/intent/src/types/intent/mod.rs @@ -91,7 +91,7 @@ fn test_create_action_serialize() { token_id: "token_b.near".parse().unwrap(), amount: 2000.into(), }, - expiration: Expiration::Block(123456), + expiration: Expiration::Block(123_456), }, ));