From 469a4afe2ecc566328e864a797ebdd44b90f9519 Mon Sep 17 00:00:00 2001 From: Vladas <146100@gmail.com> Date: Thu, 14 Mar 2024 16:38:31 +0200 Subject: [PATCH] refactor: use nitka crate --- Cargo.lock | 405 ++++++++++-------- Cargo.toml | 4 +- integration-tests/Cargo.toml | 13 +- integration-tests/src/callback_attack.rs | 2 +- integration-tests/src/defer.rs | 2 +- integration-tests/src/lib.rs | 2 +- integration-tests/src/measure/record_batch.rs | 2 +- integration-tests/src/mint.rs | 2 +- integration-tests/src/prepare.rs | 4 +- integration-tests/src/transfer.rs | 2 +- model/Cargo.toml | 8 +- model/src/lib.rs | 10 +- res/sweat.wasm | Bin 215967 -> 218763 bytes scripts/lint.sh | 2 +- sweat/Cargo.toml | 6 +- 15 files changed, 257 insertions(+), 207 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 67ea09e..63c4927 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.38", + "syn 2.0.52", ] [[package]] @@ -61,7 +61,16 @@ checksum = "7c7db3d5a9718568e4cf4a537cfd7070e6e6ff7481510d0237fb529ac850f6d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli 0.28.1", ] [[package]] @@ -92,18 +101,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "ahash" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" -dependencies = [ - "cfg-if 1.0.0", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.2" @@ -234,18 +231,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -265,6 +262,21 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.11.0" @@ -382,16 +394,6 @@ dependencies = [ "hashbrown 0.11.2", ] -[[package]] -name = "borsh" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4114279215a005bc675e386011e594e1d9b800918cea18fcadadcce864a2046b" -dependencies = [ - "borsh-derive 0.10.3", - "hashbrown 0.13.2", -] - [[package]] name = "borsh" version = "1.3.1" @@ -408,21 +410,8 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6441c552f230375d18e3cc377677914d2ca2b0d36e52129fe15450a2dce46775" dependencies = [ - "borsh-derive-internal 0.9.3", - "borsh-schema-derive-internal 0.9.3", - "proc-macro-crate 0.1.5", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "borsh-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0754613691538d51f329cce9af41d7b7ca150bc973056f1156611489475f54f7" -dependencies = [ - "borsh-derive-internal 0.10.3", - "borsh-schema-derive-internal 0.10.3", + "borsh-derive-internal", + "borsh-schema-derive-internal", "proc-macro-crate 0.1.5", "proc-macro2", "syn 1.0.109", @@ -438,7 +427,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "syn_derive", ] @@ -453,17 +442,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "borsh-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb438156919598d2c7bad7e1c0adf3d26ed3840dbc010db1a882a65583ca2fb" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "borsh-schema-derive-internal" version = "0.9.3" @@ -475,17 +453,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "borsh-schema-derive-internal" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634205cc43f74a1b9046ef87c4540ebda95696ec0f315024860cad7c5b0f5ccd" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "brownstone" version = "1.1.0" @@ -753,7 +720,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -918,7 +885,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -942,7 +909,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -953,7 +920,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -983,7 +950,7 @@ checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -1157,7 +1124,7 @@ checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -1193,7 +1160,7 @@ dependencies = [ name = "exploit-stub" version = "0.1.0" dependencies = [ - "near-sdk", + "near-sdk 4.1.1", ] [[package]] @@ -1372,7 +1339,7 @@ checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -1447,6 +1414,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + [[package]] name = "goblin" version = "0.5.4" @@ -1483,7 +1456,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" dependencies = [ - "ahash 0.7.7", + "ahash", ] [[package]] @@ -1492,15 +1465,6 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" -dependencies = [ - "ahash 0.8.6", -] - [[package]] name = "hashbrown" version = "0.14.2" @@ -1621,7 +1585,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.10", "tokio", "tower-service", "tracing", @@ -1755,13 +1719,12 @@ version = "1.0.0" dependencies = [ "anyhow", "async-trait", - "borsh 0.10.3", - "integration-utils", "maplit", "near-contract-standards", - "near-sdk", + "near-sdk 4.1.1", "near-units", "near-workspaces", + "nitka", "pkg-config", "sweat-model", "tokio", @@ -1769,32 +1732,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "integration-trait" -version = "0.1.0" -source = "git+https://github.com/sweatco/integration-utils.git?rev=e54dc392ef42837123dd2c0ad19b6d6b815192d7#e54dc392ef42837123dd2c0ad19b6d6b815192d7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - -[[package]] -name = "integration-utils" -version = "0.1.0" -source = "git+https://github.com/sweatco/integration-utils.git?rev=e54dc392ef42837123dd2c0ad19b6d6b815192d7#e54dc392ef42837123dd2c0ad19b6d6b815192d7" -dependencies = [ - "anyhow", - "async-trait", - "dotenv", - "fake", - "futures", - "near-sdk", - "near-units", - "near-workspaces", - "tokio", -] - [[package]] name = "ipnet" version = "2.9.0" @@ -2113,7 +2050,7 @@ name = "near-contract-standards" version = "4.1.1" source = "git+https://github.com/sweatco/near-sdk-rs?rev=8c48b26cc48d969c1e5f3162141fe9c824fccecd#8c48b26cc48d969c1e5f3162141fe9c824fccecd" dependencies = [ - "near-sdk", + "near-sdk 4.1.1", "schemars", "serde", "serde_json", @@ -2246,7 +2183,7 @@ dependencies = [ "prometheus", "serde", "serde_json", - "strum", + "strum 0.24.1", "thiserror", "tokio", "tracing", @@ -2270,7 +2207,7 @@ dependencies = [ "serde", "serde_repr", "serde_yaml", - "strum", + "strum 0.24.1", "thiserror", ] @@ -2299,7 +2236,7 @@ dependencies = [ "serde", "serde_json", "smart-default", - "strum", + "strum 0.24.1", "thiserror", ] @@ -2339,7 +2276,7 @@ dependencies = [ "serde_yaml", "sha3", "smart-default", - "strum", + "strum 0.24.1", "thiserror", "time", "tracing", @@ -2359,7 +2296,7 @@ dependencies = [ "num-rational", "serde", "sha2 0.10.8", - "strum", + "strum 0.24.1", ] [[package]] @@ -2380,7 +2317,7 @@ dependencies = [ "serde_repr", "serde_with", "sha2 0.10.8", - "strum", + "strum 0.24.1", "thiserror", ] @@ -2403,7 +2340,7 @@ checksum = "80fca203c51edd9595ec14db1d13359fb9ede32314990bf296b6c5c4502f6ab7" dependencies = [ "quote", "serde", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2426,7 +2363,7 @@ dependencies = [ "fs2", "near-rpc-error-core 0.20.1", "serde", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2455,8 +2392,8 @@ dependencies = [ "near-crypto 0.14.0", "near-primitives 0.14.0", "near-primitives-core 0.14.0", - "near-sdk-macros", - "near-sys", + "near-sdk-macros 4.1.1", + "near-sys 0.2.0", "near-vm-logic", "once_cell", "schemars", @@ -2465,6 +2402,26 @@ dependencies = [ "wee_alloc", ] +[[package]] +name = "near-sdk" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5c2e7c9524308b1b301cca05d875de13b3b20dc8b92e71f3890b380372e4c88" +dependencies = [ + "base64 0.21.5", + "borsh 1.3.1", + "bs58 0.5.0", + "near-account-id 1.0.0", + "near-gas", + "near-sdk-macros 5.0.0", + "near-sys 0.2.1", + "near-token", + "once_cell", + "serde", + "serde_json", + "wee_alloc", +] + [[package]] name = "near-sdk-macros" version = "4.1.1" @@ -2476,6 +2433,23 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "near-sdk-macros" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e9b23d9d7757ade258921c9cbc7923542e64d9d3b52a6cd91f746c77cb0a0f" +dependencies = [ + "Inflector", + "darling", + "proc-macro2", + "quote", + "serde", + "serde_json", + "strum 0.26.2", + "strum_macros 0.26.2", + "syn 2.0.52", +] + [[package]] name = "near-stdx" version = "0.20.1" @@ -2487,12 +2461,19 @@ name = "near-sys" version = "0.2.0" source = "git+https://github.com/sweatco/near-sdk-rs?rev=8c48b26cc48d969c1e5f3162141fe9c824fccecd#8c48b26cc48d969c1e5f3162141fe9c824fccecd" +[[package]] +name = "near-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "397688591acf8d3ebf2c2485ba32d4b24fc10aad5334e3ad8ec0b7179bfdf06b" + [[package]] name = "near-token" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b68f3f8a2409f72b43efdbeff8e820b81e70824c49fee8572979d789d1683fb" dependencies = [ + "borsh 1.3.1", "serde", ] @@ -2586,7 +2567,7 @@ dependencies = [ "serde_with", "sha2 0.10.8", "sha3", - "strum", + "strum 0.24.1", "thiserror", "tracing", "zeropool-bn", @@ -2633,6 +2614,33 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +[[package]] +name = "nitka" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eaa205f149de38d17bc5d9a648cd56040de40b0ecda4fd50c454ef8007d4cc" +dependencies = [ + "anyhow", + "dotenv", + "fake", + "futures", + "near-sdk 5.0.0", + "near-units", + "near-workspaces", + "tokio", +] + +[[package]] +name = "nitka-proc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58f943784b90b720e6596109e45e3400c2c2826dc13123aa8b831fe10fdf152c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + [[package]] name = "nom" version = "7.1.3" @@ -2729,6 +2737,15 @@ dependencies = [ "libc", ] +[[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.18.0" @@ -2764,7 +2781,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -2982,7 +2999,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -3104,9 +3121,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] @@ -3187,9 +3204,9 @@ checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -3429,6 +3446,12 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc-hex" version = "2.1.0" @@ -3553,7 +3576,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -3634,7 +3657,7 @@ checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -3667,7 +3690,7 @@ checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -3708,7 +3731,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -3841,6 +3864,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "spin" version = "0.5.2" @@ -3891,9 +3924,15 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" dependencies = [ - "strum_macros", + "strum_macros 0.24.3", ] +[[package]] +name = "strum" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" + [[package]] name = "strum_macros" version = "0.24.3" @@ -3907,6 +3946,19 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "strum_macros" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.52", +] + [[package]] name = "subtle" version = "2.5.0" @@ -3918,7 +3970,7 @@ name = "sweat" version = "1.2.1" dependencies = [ "near-contract-standards", - "near-sdk", + "near-sdk 4.1.1", "static_assertions", "sweat-model", ] @@ -3929,11 +3981,11 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "integration-trait", - "integration-utils", "near-contract-standards", - "near-sdk", + "near-sdk 4.1.1", "near-workspaces", + "nitka", + "nitka-proc", ] [[package]] @@ -3959,7 +4011,7 @@ dependencies = [ "elementtree", "fallible-iterator", "flate2", - "gimli", + "gimli 0.26.2", "goblin", "lazy_static", "lazycell", @@ -3991,9 +4043,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" dependencies = [ "proc-macro2", "quote", @@ -4009,7 +4061,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -4095,7 +4147,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -4154,11 +4206,11 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", "mio", @@ -4166,7 +4218,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.5", "tokio-macros", "windows-sys", ] @@ -4183,13 +4235,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -4395,7 +4447,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] @@ -4429,6 +4481,17 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + [[package]] name = "tracing-opentelemetry" version = "0.17.4" @@ -4439,15 +4502,15 @@ dependencies = [ "opentelemetry", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.1.4", "tracing-subscriber", ] [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -4458,7 +4521,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", ] [[package]] @@ -4633,7 +4696,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-shared", ] @@ -4667,7 +4730,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4879,26 +4942,6 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" -[[package]] -name = "zerocopy" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd66a62464e3ffd4e37bd09950c2b9dd6c4f8767380fabba0d523f9a775bc85a" -dependencies = [ - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255c4596d41e6916ced49cfafea18727b24d67878fa180ddfd69b9df34fd1726" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.38", -] - [[package]] name = "zeroize" version = "1.3.0" @@ -4916,7 +4959,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.52", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index f7c4544..8ad381c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ near-workspaces = "0.10.0" near-sdk = { git = "https://github.com/sweatco/near-sdk-rs", rev = "8c48b26cc48d969c1e5f3162141fe9c824fccecd" } near-contract-standards = { git = "https://github.com/sweatco/near-sdk-rs", rev = "8c48b26cc48d969c1e5f3162141fe9c824fccecd" } -integration-trait = { git = "https://github.com/sweatco/integration-utils.git", rev = "e54dc392ef42837123dd2c0ad19b6d6b815192d7" } -integration-utils = { git = "https://github.com/sweatco/integration-utils.git", rev = "e54dc392ef42837123dd2c0ad19b6d6b815192d7" } +nitka = "0.1.1" +nitka-proc = "0.1.1" sweat-model = { path = "model" } diff --git a/integration-tests/Cargo.toml b/integration-tests/Cargo.toml index eb0b457..292b1da 100644 --- a/integration-tests/Cargo.toml +++ b/integration-tests/Cargo.toml @@ -15,14 +15,13 @@ anyhow = { workspace = true } tokio = { workspace = true } near-units = { workspace = true } -borsh = "0.10.3" maplit = "1.0" -tracing = "0.1.37" -tracing-subscriber = { version = "0.3.11", features = ["env-filter"] } -pkg-config = "0.3.1" +tracing = "0.1.40" +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } +pkg-config = "0.3.27" [dependencies] -async-trait = "0.1.73" +async-trait = "0.1.77" -sweat-model = { workspace = true, features = ["integration-test"] } -integration-utils = { workspace = true } +sweat-model = { workspace = true, features = ["integration-api"] } +nitka = { workspace = true } diff --git a/integration-tests/src/callback_attack.rs b/integration-tests/src/callback_attack.rs index 2ad734d..8017d21 100644 --- a/integration-tests/src/callback_attack.rs +++ b/integration-tests/src/callback_attack.rs @@ -1,7 +1,7 @@ #![cfg(test)] -use integration_utils::misc::ToNear; use near_sdk::{json_types::U128, serde_json::json}; +use nitka::misc::ToNear; use sweat_model::FungibleTokenCoreIntegration; use crate::{ diff --git a/integration-tests/src/defer.rs b/integration-tests/src/defer.rs index 5a8df3f..75e15a0 100644 --- a/integration-tests/src/defer.rs +++ b/integration-tests/src/defer.rs @@ -1,6 +1,6 @@ #![cfg(test)] -use integration_utils::misc::ToNear; +use nitka::misc::ToNear; use sweat_model::{FungibleTokenCoreIntegration, IntegrationTestMethodsIntegration, SweatDeferIntegration}; use crate::prepare::{prepare_contract, IntegrationContext}; diff --git a/integration-tests/src/lib.rs b/integration-tests/src/lib.rs index e6d078b..120b520 100644 --- a/integration-tests/src/lib.rs +++ b/integration-tests/src/lib.rs @@ -1,6 +1,6 @@ #![cfg(test)] -use integration_utils::misc::ToNear; +use nitka::misc::ToNear; use sweat_model::{FungibleTokenCoreIntegration, SweatApiIntegration, SweatDeferIntegration}; use crate::prepare::{prepare_contract, IntegrationContext}; diff --git a/integration-tests/src/measure/record_batch.rs b/integration-tests/src/measure/record_batch.rs index 0f081f7..8afaf21 100644 --- a/integration-tests/src/measure/record_batch.rs +++ b/integration-tests/src/measure/record_batch.rs @@ -3,8 +3,8 @@ use std::future::IntoFuture; use anyhow::Result; -use integration_utils::measure::outcome_storage::OutcomeStorage; use near_workspaces::types::Gas; +use nitka::measure::outcome_storage::OutcomeStorage; use sweat_model::SweatApiIntegration; use crate::{prepare::IntegrationContext, prepare_contract}; diff --git a/integration-tests/src/mint.rs b/integration-tests/src/mint.rs index 512a6d2..1d86e79 100644 --- a/integration-tests/src/mint.rs +++ b/integration-tests/src/mint.rs @@ -1,5 +1,5 @@ -use integration_utils::misc::ToNear; use near_sdk::json_types::{U128, U64}; +use nitka::misc::ToNear; use sweat_model::{FungibleTokenCoreIntegration, Payout, SweatApiIntegration}; use crate::prepare::{prepare_contract, IntegrationContext}; diff --git a/integration-tests/src/prepare.rs b/integration-tests/src/prepare.rs index 430dccc..565287c 100644 --- a/integration-tests/src/prepare.rs +++ b/integration-tests/src/prepare.rs @@ -1,15 +1,15 @@ use anyhow::Result; use async_trait::async_trait; -use integration_utils::misc::ToNear; use near_sdk::serde_json::json; use near_workspaces::{Account, Contract}; +use nitka::misc::ToNear; use sweat_model::{StorageManagementIntegration, SweatApiIntegration, SweatContract}; const CLAIM_CONTRACT: &str = "sweat_claim"; const HOLDING_STUB_CONTRACT: &str = "exploit_stub"; const FT_CONTRACT: &str = "sweat"; -pub type Context = integration_utils::context::Context; +pub type Context = nitka::context::Context; #[async_trait] pub trait IntegrationContext { diff --git a/integration-tests/src/transfer.rs b/integration-tests/src/transfer.rs index 87e9e78..4402760 100644 --- a/integration-tests/src/transfer.rs +++ b/integration-tests/src/transfer.rs @@ -1,5 +1,5 @@ -use integration_utils::misc::ToNear; use near_sdk::json_types::U128; +use nitka::misc::ToNear; use sweat_model::{FungibleTokenCoreIntegration, StorageManagementIntegration, SweatApiIntegration}; use crate::prepare::{prepare_contract, IntegrationContext}; diff --git a/model/Cargo.toml b/model/Cargo.toml index 8435611..b177bd5 100644 --- a/model/Cargo.toml +++ b/model/Cargo.toml @@ -5,15 +5,17 @@ edition = "2021" [features] default = [] -integration-test = ["dep:integration-utils", "dep:near-workspaces"] +integration-test = ["dep:nitka", "dep:near-workspaces"] +integration-api = ["dep:nitka", "dep:near-workspaces"] +release-api = [] [dependencies] anyhow = { workspace = true } async-trait = { workspace = true } -integration-trait = { workspace = true } +nitka-proc = { workspace = true } near-sdk = { workspace = true } near-contract-standards = { workspace = true } -integration-utils = { workspace = true, optional = true } +nitka = { workspace = true, optional = true } near-workspaces = { workspace = true, optional = true } diff --git a/model/src/lib.rs b/model/src/lib.rs index 24e2617..76520ce 100644 --- a/model/src/lib.rs +++ b/model/src/lib.rs @@ -1,13 +1,17 @@ #![allow(clippy::new_ret_no_self, clippy::wrong_self_convention)] -use integration_trait::make_integration_version; use near_contract_standards::storage_management::{StorageBalance, StorageBalanceBounds}; +#[cfg(feature = "release-api")] +use near_sdk::AccountId; use near_sdk::{ json_types::{U128, U64}, - AccountId, PromiseOrValue, + PromiseOrValue, }; +#[cfg(feature = "integration-api")] +use nitka::AccountId; +use nitka_proc::make_integration_version; -#[cfg(feature = "integration-test")] +#[cfg(feature = "integration-api")] pub struct SweatContract<'a> { pub contract: &'a near_workspaces::Contract, } diff --git a/res/sweat.wasm b/res/sweat.wasm index 81f48047bcf19fa7a217359f7209cb9fba28c4d4..81d84a139ad3dc43eab18e0237d0127a0918e688 100755 GIT binary patch delta 41133 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 C!PiFs delta 38006 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 diff --git a/scripts/lint.sh b/scripts/lint.sh index d6e3e78..1691bdb 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -3,7 +3,7 @@ set -eox pipefail rustup component add clippy -cargo clippy --all \ +cargo clippy -p sweat \ -- \ \ -W clippy::all \ diff --git a/sweat/Cargo.toml b/sweat/Cargo.toml index 4adafd3..4a49781 100644 --- a/sweat/Cargo.toml +++ b/sweat/Cargo.toml @@ -9,8 +9,10 @@ publish = false crate-type = ["cdylib"] [features] -default = [] -integration-test = [] +default = ["release"] +release = ["sweat-model/release-api"] +integration-test = ["sweat-model/release-api"] +integration-api = ["sweat-model/integration-api"] [dependencies] sweat-model = { workspace = true }