diff --git a/Cargo.lock b/Cargo.lock index 1b3fa017..bd897fa6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ "getrandom", "once_cell", @@ -21,9 +21,9 @@ checksum = "9a03eb4d55fa21466cac727930be07f82581223ee04bcaf61f934e98b7ecb859" [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "base16ct" @@ -33,15 +33,15 @@ checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" -version = "1.5.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bech32" @@ -49,6 +49,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" +[[package]] +name = "bech32" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" + [[package]] name = "bitvec" version = "1.0.1" @@ -72,9 +78,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] @@ -101,15 +107,15 @@ checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.3.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" [[package]] name = "cfg-if" @@ -119,18 +125,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "const-oid" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "cosmwasm-crypto" -version = "1.5.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b4c3f9c4616d6413d4b5fc4c270a4cc32a374b9be08671e80e1a019f805d8f" +checksum = "c7a339f6b59ff7ad4ae05a70512a4f3c19bf8fcc845d46bfef90f4ec0810f72c" dependencies = [ "digest 0.10.7", - "ecdsa", "ed25519-zebra", "k256", "rand_core 0.6.4", @@ -139,18 +144,18 @@ dependencies = [ [[package]] name = "cosmwasm-derive" -version = "1.5.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c586ced10c3b00e809ee664a895025a024f60d65d34fe4c09daed4a4db68a3f3" +checksum = "7d3bfea6af94a83880fb05478135ed0c256d9a2fcde58c595a10d64dcb9c925d" dependencies = [ - "syn 1.0.105", + "syn 1.0.109", ] [[package]] name = "cosmwasm-schema" -version = "1.5.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8467874827d384c131955ff6f4d47d02e72a956a08eb3c0ff24f8c903a5517b4" +checksum = "101d0739564bd34cba9b84bf73665f0822487ae3b29b2dd59930608ed3aafd43" dependencies = [ "cosmwasm-schema-derive", "schemars", @@ -161,23 +166,23 @@ dependencies = [ [[package]] name = "cosmwasm-schema-derive" -version = "1.5.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6db85d98ac80922aef465e564d5b21fa9cfac5058cb62df7f116c3682337393" +checksum = "cf4be75f60158478da2c5d319ed59295bca1687ad50c18215a0485aa91a995ea" dependencies = [ "proc-macro2", "quote", - "syn 1.0.105", + "syn 1.0.109", ] [[package]] name = "cosmwasm-std" -version = "1.5.4" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712fe58f39d55c812f7b2c84e097cdede3a39d520f89b6dc3153837e31741927" +checksum = "ded932165de44cd0717979c34fc3b84d8e8066b8dde4f5bd78f96a643b090f90" dependencies = [ "base64", - "bech32", + "bech32 0.9.1", "bnum", "cosmwasm-crypto", "cosmwasm-derive", @@ -194,18 +199,18 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crypto-bigint" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", "rand_core 0.6.4", @@ -238,11 +243,12 @@ dependencies = [ [[package]] name = "cw-multi-test" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e2c2f2c0877b839c5cad85e67811074e854a50c1ff3085eb8290b1c27809c" +checksum = "e403ad6ec62c8bcbcb75f7f4940712d0142b6103310da2a9375252b942358caa" dependencies = [ "anyhow", + "bech32 0.11.0", "cosmwasm-std", "cw-storage-plus", "cw-utils", @@ -257,9 +263,9 @@ dependencies = [ [[package]] name = "cw-storage-plus" -version = "1.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0e92a069d62067f3472c62e30adedb4cab1754725c0f2a682b3128d2bf3c79" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" dependencies = [ "cosmwasm-std", "schemars", @@ -268,38 +274,37 @@ dependencies = [ [[package]] name = "cw-utils" -version = "1.0.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9f351a4e4d81ef7c890e44d903f8c0bdcdc00f094fd3a181eaf70c0eec7a3a" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" dependencies = [ "cosmwasm-schema", "cosmwasm-std", - "cw2", "schemars", - "semver", "serde", "thiserror", ] [[package]] name = "cw2" -version = "1.1.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9431d14f64f49e41c6ef5561ed11a5391c417d0cb16455dea8cdcb9037a8d197" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus", "schemars", + "semver", "serde", "thiserror", ] [[package]] name = "der" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ "const-oid", "zeroize", @@ -313,7 +318,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" dependencies = [ "proc-macro2", "quote", - "syn 1.0.105", + "syn 1.0.109", ] [[package]] @@ -331,7 +336,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "const-oid", "crypto-common", "subtle", @@ -357,15 +362,15 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.9" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f94fa09c2aeea5b8839e414b7b841bf429fd25b9c522116ac97ee87856d88b2" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[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 0.10.7", @@ -392,15 +397,15 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" -version = "0.13.5" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ "base16ct", "crypto-bigint", @@ -440,9 +445,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -451,9 +456,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -497,24 +502,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "k256" -version = "0.13.1" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" dependencies = [ "cfg-if", "ecdsa", @@ -526,15 +531,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.138" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "misc" version = "0.15.4" dependencies = [ - "bech32", + "bech32 0.9.1", "cosmwasm-std", "hex", "nois", @@ -542,9 +547,9 @@ dependencies = [ [[package]] name = "nois" -version = "0.7.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f2f7aff53bda03e2f301e6a53aa4e76bb992b599c3163a3f18c1d3169e6341a" +checksum = "fdccfb08f1341b4477f430df82e635a5f4efeeb199826d9c872e9bb27c877997" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -552,6 +557,7 @@ dependencies = [ "rand", "rand_xoshiro", "serde", + "sha2 0.10.8", "thiserror", "xxhash-rust", ] @@ -705,15 +711,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "pairing" @@ -736,18 +742,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "ec96c6a92621310b51366f1e28d05ef11489516e93be030060e5fc12024a49d6" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", "prost-derive", @@ -755,22 +761,22 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.66", ] [[package]] name = "quote" -version = "1.0.33" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -826,15 +832,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schemars" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" dependencies = [ "dyn-clone", "schemars_derive", @@ -844,21 +850,21 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.15" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 1.0.105", + "syn 2.0.66", ] [[package]] name = "sec1" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" dependencies = [ "base16ct", "der", @@ -870,55 +876,55 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.192" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde-json-wasm" -version = "0.5.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e9213a07d53faa0b8dd81e767a54a8188a242fdb9be99ab75ec576a774bfdd7" +checksum = "f05da0d153dd4595bdffd5099dc0e9ce425b205ee648eb93437ff7302af8c9a5" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.192" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.66", ] [[package]] name = "serde_derive_internals" -version = "0.26.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 1.0.105", + "syn 2.0.66", ] [[package]] name = "serde_json" -version = "1.0.89" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -951,9 +957,9 @@ dependencies = [ [[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 0.10.7", "rand_core 0.6.4", @@ -961,9 +967,9 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", @@ -977,15 +983,15 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" -version = "1.0.105" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b9b43d45702de4c839cb9b51d9f529c5dd26a4aff255b42b1ebc03e88ee908" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -994,9 +1000,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -1011,35 +1017,35 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.39", + "syn 2.0.66", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "version_check" @@ -1064,12 +1070,12 @@ dependencies = [ [[package]] name = "xxhash-rust" -version = "0.8.6" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" +checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" [[package]] name = "zeroize" -version = "1.5.7" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index 29a5833e..236ca720 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,8 +4,8 @@ resolver = "2" [workspace.dependencies] # nois = { git = "https://github.com/noislabs/nois", branch = "add-published-time" } -nois = "0.7.0" -cw2 = "1.1.1" +nois = "2.0.0" +cw2 = "2" [profile.release.package.nois-protocol] codegen-units = 1 diff --git a/contracts/nois-demo/Cargo.toml b/contracts/nois-demo/Cargo.toml index a962ae6e..39a72072 100644 --- a/contracts/nois-demo/Cargo.toml +++ b/contracts/nois-demo/Cargo.toml @@ -12,14 +12,11 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["iterator"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["iterator"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } nois.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } thiserror = { version = "1.0.23" } diff --git a/contracts/nois-demo/src/contract.rs b/contracts/nois-demo/src/contract.rs index daaa980f..7eec15ea 100644 --- a/contracts/nois-demo/src/contract.rs +++ b/contracts/nois-demo/src/contract.rs @@ -123,7 +123,7 @@ fn query_result(deps: Deps, job_id: String) -> StdResult> { mod tests { use super::*; use cosmwasm_std::{ - testing::{mock_dependencies, mock_env, mock_info, MockApi, MockQuerier, MockStorage}, + testing::{message_info, mock_dependencies, mock_env, MockApi, MockQuerier, MockStorage}, Empty, HexBinary, OwnedDeps, Timestamp, }; @@ -133,10 +133,11 @@ mod tests { #[test] fn instantiate_works() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); let msg = InstantiateMsg { - nois_proxy: "address123".to_string(), + nois_proxy: deps.api.addr_make("address123").into(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); } @@ -144,20 +145,22 @@ mod tests { #[test] fn instantiate_fails_for_invalid_proxy_address() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); let msg = InstantiateMsg { nois_proxy: "".to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert_eq!(res, ContractError::InvalidProxyAddress); } fn instantiate_proxy() -> OwnedDeps { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); let msg = InstantiateMsg { - nois_proxy: PROXY_ADDRESS.to_string(), + nois_proxy: deps.api.addr_make(PROXY_ADDRESS).into(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); deps } @@ -165,17 +168,19 @@ mod tests { #[test] fn execute_estimate_pi_works() { let mut deps = instantiate_proxy(); + let guest = deps.api.addr_make("guest"); let msg = ExecuteMsg::EstimatePi { job_id: "123".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } #[test] fn execute_receive_works() { let mut deps = instantiate_proxy(); + let proxy = deps.api.addr_make(PROXY_ADDRESS); let msg = ExecuteMsg::NoisReceive { callback: NoisCallback { @@ -187,13 +192,14 @@ mod tests { .unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } #[test] fn execute_receive_fails_for_wrong_sender() { let mut deps = instantiate_proxy(); + let guest = deps.api.addr_make("guest"); let msg = ExecuteMsg::NoisReceive { callback: NoisCallback { @@ -205,7 +211,7 @@ mod tests { .unwrap(), }, }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedReceive)); } diff --git a/contracts/nois-drand/Cargo.toml b/contracts/nois-drand/Cargo.toml index 429919a2..8927b022 100644 --- a/contracts/nois-drand/Cargo.toml +++ b/contracts/nois-drand/Cargo.toml @@ -12,18 +12,15 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] [dependencies] nois.workspace = true drand-common = { path = "../../packages/drand-common" } -cosmwasm-std = { version = "1.5.4", features = ["iterator", "ibc3"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["iterator"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } thiserror = { version = "1.0.23" } diff --git a/contracts/nois-drand/src/contract.rs b/contracts/nois-drand/src/contract.rs index c015c324..356c8b93 100644 --- a/contracts/nois-drand/src/contract.rs +++ b/contracts/nois-drand/src/contract.rs @@ -1,7 +1,7 @@ use cosmwasm_std::{ - ensure_eq, to_json_binary, Addr, Attribute, BankMsg, Coin, CosmosMsg, Deps, DepsMut, Empty, - Env, HexBinary, MessageInfo, Order, QueryResponse, Response, StdError, StdResult, Uint128, - WasmMsg, + coin, ensure_eq, to_json_binary, Addr, Attribute, BankMsg, Coin, CosmosMsg, Deps, DepsMut, + Empty, Env, HexBinary, MessageInfo, Order, QueryResponse, Response, StdError, StdResult, + Uint128, WasmMsg, }; use cw2::set_contract_version; use cw_storage_plus::Bound; @@ -462,10 +462,10 @@ fn execute_add_round( denom: config.incentive_denom, } } else { - Coin::new(0, config.incentive_denom) + coin(0, config.incentive_denom) } } else { - Coin::new(0, config.incentive_denom) + coin(0, config.incentive_denom) }; attributes.push(Attribute::new(ATTR_REWARD_PAYOUT, payout.to_string())); @@ -550,11 +550,13 @@ fn is_incentivized(deps: Deps, sender: &Addr, round: u64, min_round: u64) -> Std #[cfg(test)] mod tests { + use std::collections::HashSet; + use super::*; use crate::msg::ExecuteMsg; use cosmwasm_std::testing::{ - mock_dependencies, mock_dependencies_with_balance, mock_env, mock_info, + message_info, mock_dependencies, mock_dependencies_with_balance, mock_env, MockApi, }; use cosmwasm_std::{coins, from_json, Addr, Timestamp, Uint128}; use drand_common::testing::testing_signature; @@ -576,10 +578,12 @@ mod tests { } /// Adds round 72750, 72775, 72800, 72825 - fn add_test_rounds(mut deps: DepsMut, bot_addr: &str) { + /// using bot address `sender`. + fn add_test_rounds(mut deps: DepsMut, sender: &Addr) { for round in [72750, 72775, 72800, 72825] { + let info = message_info(sender, &[]); let msg = make_add_round_msg(round); - execute(deps.branch(), mock_env(), mock_info(bot_addr, &[]), msg).unwrap(); + execute(deps.branch(), mock_env(), info, msg).unwrap(); } } @@ -602,13 +606,16 @@ mod tests { fn instantiate_works() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let env = mock_env(); let res = instantiate(deps.as_mut(), env, info, msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -618,7 +625,7 @@ mod tests { assert_eq!( config, ConfigResponse { - manager: Addr::unchecked(TESTING_MANAGER), + manager: manager.clone(), gateway: None, min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), @@ -630,39 +637,43 @@ mod tests { // // Execute tests // - fn register_bot(deps: DepsMut, sender_addr: impl AsRef) { - let info = mock_info(sender_addr.as_ref(), &[]); + fn register_bot(deps: DepsMut, sender_addr: &Addr) { + let info = message_info(sender_addr, &[]); let register_bot_msg = ExecuteMsg::RegisterBot { moniker: "Best Bot".to_string(), }; execute(deps, mock_env(), info, register_bot_msg).unwrap(); } - fn allowlist_bot(deps: DepsMut, addr: impl Into) { + fn allowlist_bot(deps: DepsMut, addr: &Addr) { let msg = ExecuteMsg::UpdateAllowlistBots { - add: vec![addr.into()], + add: vec![addr.to_string()], remove: vec![], }; - execute(deps, mock_env(), mock_info(TESTING_MANAGER, &[]), msg).unwrap(); + let manager = MockApi::default().addr_make(TESTING_MANAGER); + execute(deps, mock_env(), message_info(&manager, &[]), msg).unwrap(); } #[test] fn add_round_verifies_and_stores_randomness() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let anyone = deps.api.addr_make("anyone"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - register_bot(deps.as_mut(), "anyone"); + register_bot(deps.as_mut(), &anyone); let msg = make_add_round_msg(72780); - let info = mock_info("anyone", &[]); + let info = message_info(&anyone, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let BeaconResponse { beacon } = @@ -676,33 +687,37 @@ mod tests { #[test] fn add_round_not_divisible_by_15_succeeds() { - let mut deps = mock_dependencies_with_balance(&[Coin::new(9999999, "unois")]); + let mut deps = mock_dependencies_with_balance(&[coin(9999999, "unois")]); + + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let gateway = deps.api.addr_make(GATEWAY); + let bot1 = deps.api.addr_make("mr_bot"); + let bot2 = deps.api.addr_make("mrs_bot"); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(res.messages.len(), 0); const ROUND: u64 = 72762; // https://api3.drand.sh/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493/public/72762 const EXPECTED_RANDOMNESS: &str = "528bb3e953412bea63dff0f86ad44aeda64953cd50040279e7b1aba4b9196f28"; - const BOT1: &str = "mr_bot"; - const BOT2: &str = "mrs_bot"; - register_bot(deps.as_mut(), BOT1); - register_bot(deps.as_mut(), BOT2); - allowlist_bot(deps.as_mut(), BOT1); - allowlist_bot(deps.as_mut(), BOT2); + register_bot(deps.as_mut(), &bot1); + register_bot(deps.as_mut(), &bot2); + allowlist_bot(deps.as_mut(), &bot1); + allowlist_bot(deps.as_mut(), &bot2); // succeeds but not incentivized let msg: ExecuteMsg = make_add_round_msg(ROUND); let response: Response = - execute(deps.as_mut(), mock_env(), mock_info(BOT1, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&bot1, &[]), msg).unwrap(); assert_eq!(response.messages.len(), 0); let attrs = response.attributes; let randomness = first_attr(&attrs, "randomness").unwrap(); @@ -713,28 +728,22 @@ mod tests { // Set gateway let msg = ExecuteMsg::SetConfig { manager: None, - gateway: Some(GATEWAY.to_string()), + gateway: Some(gateway.to_string()), min_round: None, incentive_point_price: None, incentive_denom: None, }; - let _res = execute( - deps.as_mut(), - mock_env(), - mock_info(TESTING_MANAGER, &[]), - msg, - ) - .unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); // Set incentivized let msg = ExecuteMsg::SetIncentivized { round: ROUND }; let _response: Response = - execute(deps.as_mut(), mock_env(), mock_info(GATEWAY, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&gateway, &[]), msg).unwrap(); // succeeds and incentivized let msg: ExecuteMsg = make_add_round_msg(ROUND); let response: Response = - execute(deps.as_mut(), mock_env(), mock_info(BOT2, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&bot2, &[]), msg).unwrap(); assert_eq!(response.messages.len(), 2); assert!(matches!(response.messages[0].msg, CosmosMsg::Wasm(_))); assert!(matches!( @@ -755,13 +764,17 @@ mod tests { fn add_round_fails_when_round_too_low() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let anyone = deps.api.addr_make("anyone"); + let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -770,7 +783,7 @@ mod tests { assert_eq!(min_round, TESTING_MIN_ROUND); let msg = make_add_round_msg(10); - let err = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&anyone, &[]), msg).unwrap_err(); assert!(matches!( err, ContractError::RoundTooLow { @@ -784,12 +797,15 @@ mod tests { fn unregistered_bot_does_not_get_incentives() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let managers = deps.api.addr_make(TESTING_MANAGER); + let unregistered = deps.api.addr_make("unregistered_bot"); + let info = message_info(&creator, &[]); let env = mock_env(); let contract = env.contract.address; //add balance to this contract - deps.querier.update_balance( + deps.querier.bank.update_balance( contract, vec![Coin { denom: "unois".to_string(), @@ -798,7 +814,7 @@ mod tests { ); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: managers.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -810,7 +826,7 @@ mod tests { "2f3a6976baf6847d75b5eae60c0e460bb55ab6034ee28aef2f0d10b0b5cc57c1"; let msg = make_add_round_msg(ROUND); - let info = mock_info("unregistered_bot", &[]); + let info = message_info(&unregistered, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let attrs = response.attributes; let randomness = first_attr(&attrs, "randomness").unwrap(); @@ -824,13 +840,18 @@ mod tests { fn set_incentivized_works() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let gateway = deps.api.addr_make(GATEWAY); + let anyone = deps.api.addr_make("anyone"); + let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -843,36 +864,30 @@ mod tests { // Gateway not set, unauthorized let msg = ExecuteMsg::SetIncentivized { round: GOOD_ROUND }; - let err = execute(deps.as_mut(), mock_env(), mock_info(GATEWAY, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&gateway, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized {})); // Set gateway let msg = ExecuteMsg::SetConfig { manager: None, - gateway: Some(GATEWAY.to_string()), + gateway: Some(gateway.to_string()), min_round: None, incentive_point_price: None, incentive_denom: None, }; - let _res = execute( - deps.as_mut(), - mock_env(), - mock_info(TESTING_MANAGER, &[]), - msg, - ) - .unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); // Gateway can set now let msg = ExecuteMsg::SetIncentivized { round: GOOD_ROUND }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(GATEWAY, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&gateway, &[]), msg).unwrap(); // Someone else is unauthoized let msg = ExecuteMsg::SetIncentivized { round: GOOD_ROUND }; - let err = execute(deps.as_mut(), mock_env(), mock_info("anyone", &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&anyone, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized {})); let msg = ExecuteMsg::SetIncentivized { round: BAD_ROUND }; - let err = execute(deps.as_mut(), mock_env(), mock_info(GATEWAY, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&gateway, &[]), msg).unwrap_err(); assert!(matches!( err, ContractError::RoundTooLow { @@ -892,22 +907,24 @@ mod tests { // because the same bot operator is not allowed to submit the same randomness let mut deps = mock_dependencies(); - const BOT: &str = "bobbybot"; + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let bot = deps.api.addr_make("bobbybot"); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; - instantiate(deps.as_mut(), mock_env(), mock_info("creator", &[]), msg).unwrap(); + instantiate(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); let IsAllowlistedResponse { listed } = from_json( query( deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: BOT.to_string(), + bot: bot.to_string(), }, ) .unwrap(), @@ -917,18 +934,18 @@ mod tests { // allowlist let msg = ExecuteMsg::UpdateAllowlistBots { - add: vec![BOT.to_string()], + add: vec![bot.to_string()], remove: vec![], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); // adding same address again is fine let msg = ExecuteMsg::UpdateAllowlistBots { - add: vec![BOT.to_string()], + add: vec![bot.to_string()], remove: vec![], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let IsAllowlistedResponse { listed } = from_json( @@ -936,7 +953,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: BOT.to_string(), + bot: bot.to_string(), }, ) .unwrap(), @@ -947,9 +964,9 @@ mod tests { // deallowlist let msg = ExecuteMsg::UpdateAllowlistBots { add: vec![], - remove: vec![BOT.to_string()], + remove: vec![bot.to_string()], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let IsAllowlistedResponse { listed } = from_json( @@ -957,7 +974,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: BOT.to_string(), + bot: bot.to_string(), }, ) .unwrap(), @@ -967,10 +984,10 @@ mod tests { // removal takes precendence over additions (better safe than sorry) let msg = ExecuteMsg::UpdateAllowlistBots { - add: vec![BOT.to_string()], - remove: vec![BOT.to_string()], + add: vec![bot.to_string()], + remove: vec![bot.to_string()], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let IsAllowlistedResponse { listed } = from_json( @@ -978,7 +995,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: BOT.to_string(), + bot: bot.to_string(), }, ) .unwrap(), @@ -991,10 +1008,12 @@ mod tests { fn updateallowlistbots_handles_invalid_addresses() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1006,11 +1025,11 @@ mod tests { add: vec!["".to_string()], remove: vec![], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { - ContractError::Std(StdError::GenericErr { msg }) => { - assert_eq!(msg, "Invalid input: human address too short for this mock implementation (must be >= 3).") + ContractError::Std(StdError::GenericErr { msg, backtrace: _ }) => { + assert_eq!(msg, "Error decoding bech32") } _ => panic!("Unexpected error: {err:?}"), } @@ -1020,11 +1039,11 @@ mod tests { add: vec!["theADDRESS".to_string()], remove: vec![], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { - ContractError::Std(StdError::GenericErr { msg }) => { - assert_eq!(msg, "Invalid input: address not normalized") + ContractError::Std(StdError::GenericErr { msg, backtrace: _ }) => { + assert_eq!(msg, "Error decoding bech32"); } _ => panic!("Unexpected error: {err:?}"), } @@ -1034,11 +1053,11 @@ mod tests { add: vec![], remove: vec!["".to_string()], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { - ContractError::Std(StdError::GenericErr { msg }) => { - assert_eq!(msg, "Invalid input: human address too short for this mock implementation (must be >= 3).") + ContractError::Std(StdError::GenericErr { msg, backtrace: _ }) => { + assert_eq!(msg, "Error decoding bech32"); } _ => panic!("Unexpected error: {err:?}"), } @@ -1048,11 +1067,11 @@ mod tests { add: vec![], remove: vec!["theADDRESS".to_string()], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { - ContractError::Std(StdError::GenericErr { msg }) => { - assert_eq!(msg, "Invalid input: address not normalized") + ContractError::Std(StdError::GenericErr { msg, backtrace: _ }) => { + assert_eq!(msg, "Error decoding bech32"); } _ => panic!("Unexpected error: {err:?}"), } @@ -1062,33 +1081,35 @@ mod tests { fn when_contract_does_not_have_enough_funds_no_bot_incentives_are_sent() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let bot_address = deps.api.addr_make("mybot_12"); // eligable for odd rounds + let info = message_info(&creator, &[]); let env = mock_env(); let contract = env.contract.address; //add balance to the contract deps.querier - .update_balance(contract, vec![Coin::new(10_000, "unois")]); + .bank + .update_balance(contract, vec![coin(10_000, "unois")]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const MYBOT: &str = "mybot_12"; // eligable for odd rounds - - register_bot(deps.as_mut(), MYBOT); - allowlist_bot(deps.as_mut(), MYBOT); + register_bot(deps.as_mut(), &bot_address); + allowlist_bot(deps.as_mut(), &bot_address); const ROUND: u64 = 72775; const EXPECTED_RANDOMNESS: &str = "b84506d4342f4ec2506baa60a6b611ab006cf45e870d069ebb1b6a051c9e9acf"; let msg = make_add_round_msg(ROUND); - let info = mock_info(MYBOT, &[]); + let info = message_info(&bot_address, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(response.messages.len(), 0); let attrs = response.attributes; @@ -1104,11 +1125,14 @@ mod tests { fn only_top_x_bots_receive_incentive() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[Coin::new(100_000_000, "unois")]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + + let info = message_info(&creator, &[coin(100_000_000, "unois")]); let env = mock_env(); let contract = env.contract.address; // add balance to the drand contract - deps.querier.update_balance( + deps.querier.bank.update_balance( contract, vec![Coin { denom: "unois".to_string(), @@ -1117,28 +1141,28 @@ mod tests { ); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - let bot1 = "registered_bot_761826381"; - let bot2 = "registered_bot_98787233"; - let bot3 = "registered_bot_12618926371"; - let bot4 = "registered_bot_21739812"; - let bot5 = "registered_bot_26737162"; - let bot6 = "registered_bot_34216397"; - let bot7 = "registered_bot_0821738"; - - register_bot(deps.as_mut(), bot1); - register_bot(deps.as_mut(), bot2); - register_bot(deps.as_mut(), bot3); - register_bot(deps.as_mut(), bot4); - register_bot(deps.as_mut(), bot5); - register_bot(deps.as_mut(), bot6); - register_bot(deps.as_mut(), bot7); + let bot1 = deps.api.addr_make("registered_bot_761826382"); + let bot2 = deps.api.addr_make("registered_bot_98787233"); + let bot3 = deps.api.addr_make("registered_bot_12618926371"); + let bot4 = deps.api.addr_make("registered_bot_21739812"); + let bot5 = deps.api.addr_make("registered_bot_26737167"); + let bot6 = deps.api.addr_make("registered_bot_34216397"); + let bot7 = deps.api.addr_make("registered_bot_0821738"); + + register_bot(deps.as_mut(), &bot1); + register_bot(deps.as_mut(), &bot2); + register_bot(deps.as_mut(), &bot3); + register_bot(deps.as_mut(), &bot4); + register_bot(deps.as_mut(), &bot5); + register_bot(deps.as_mut(), &bot6); + register_bot(deps.as_mut(), &bot7); // add bots to allowlist let msg = ExecuteMsg::UpdateAllowlistBots { @@ -1153,7 +1177,7 @@ mod tests { ], remove: vec![], }; - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); // Same msg for all submissions @@ -1161,79 +1185,79 @@ mod tests { let msg = make_add_round_msg(ROUND); // 1st - let info = mock_info(bot1, &[]); + let info = message_info(&bot1, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_761826381".to_string(), + to_address: bot1.to_string(), amount: coins(1000000, "unois"), // verification + fast }) ); // 2nd - let info = mock_info(bot2, &[]); + let info = message_info(&bot2, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_98787233".to_string(), + to_address: bot2.to_string(), amount: coins(1000000, "unois"), // verification + fast }) ); // 3rd - let info = mock_info(bot3, &[]); + let info = message_info(&bot3, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_12618926371".to_string(), + to_address: bot3.to_string(), amount: coins(1000000, "unois"), // verification + fast }) ); // 4th - let info = mock_info(bot4, &[]); + let info = message_info(&bot4, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_21739812".to_string(), + to_address: bot4.to_string(), amount: coins(300_000, "unois"), // fast, no verification }) ); // 5th - let info = mock_info(bot5, &[]); + let info = message_info(&bot5, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_26737162".to_string(), + to_address: bot5.to_string(), amount: coins(300_000, "unois"), // fast, no verification }) ); // 6th - let info = mock_info(bot6, &[]); + let info = message_info(&bot6, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); assert_eq!(response.messages.len(), 1); assert_eq!( response.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "registered_bot_34216397".to_string(), + to_address: bot6.to_string(), amount: coins(300_000, "unois"), // fast, no verification }) ); // 7th, here no message is emitted - let info = mock_info(bot7, &[]); + let info = message_info(&bot7, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(response.messages.len(), 0); } @@ -1242,9 +1266,12 @@ mod tests { fn unregistered_bot_can_add_round() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let unregistered = deps.api.addr_make("unregistered_bot"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1252,7 +1279,7 @@ mod tests { instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = make_add_round_msg(72780); - let info = mock_info("unregistered_bot", &[]); + let info = message_info(&unregistered, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let randomness = first_attr(response.attributes, "randomness").unwrap(); assert_eq!( @@ -1265,17 +1292,20 @@ mod tests { fn add_round_fails_for_broken_signature() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let anyone = deps.api.addr_make("anyone"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - register_bot(deps.as_mut(), "anyone"); - let info = mock_info("anyone", &[]); + register_bot(deps.as_mut(), &anyone); + let info = message_info(&anyone, &[]); let msg = ExecuteMsg::AddRound { round: 72780, signature: hex::decode("3cc6f6cdf59e95526d5a5d82aaa84fa6f181e4") @@ -1293,9 +1323,12 @@ mod tests { fn add_round_fails_for_invalid_signature() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let anon = deps.api.addr_make("anon"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1306,7 +1339,7 @@ mod tests { round: 72790, // wrong round signature: testing_signature(72780).unwrap(), }; - let result = execute(deps.as_mut(), mock_env(), mock_info("anon", &[]), msg); + let result = execute(deps.as_mut(), mock_env(), message_info(&anon, &[]), msg); match result.unwrap_err() { ContractError::InvalidSignature {} => {} err => panic!("Unexpected error: {:?}", err), @@ -1318,7 +1351,7 @@ mod tests { // wrong signature (first two bytes swapped) signature: hex::decode("ac86005aaffa5e9de34b558c470a111c862e976922e8da34f9dce1a78507dbd53badd554862bc54bd8e44f44ddd8b100").unwrap().into(), }; - let result = execute(deps.as_mut(), mock_env(), mock_info("anon", &[]), msg); + let result = execute(deps.as_mut(), mock_env(), message_info(&anon, &[]), msg); match result.unwrap_err() { ContractError::InvalidSignature {} => {} err => panic!("Unexpected error: {:?}", err), @@ -1329,11 +1362,12 @@ mod tests { fn add_round_succeeds_multiple_times() { let mut deps = mock_dependencies(); - register_bot(deps.as_mut(), "creator"); + let creator = deps.api.addr_make("creator"); + register_bot(deps.as_mut(), &creator); - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1343,8 +1377,9 @@ mod tests { let msg = make_add_round_msg(72780); // Execute 1 - register_bot(deps.as_mut(), "anyone"); - let info = mock_info("anyone", &[]); + let anyone = deps.api.addr_make("anyone"); + register_bot(deps.as_mut(), &anyone); + let info = message_info(&anyone, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); let randomness = first_attr(response.attributes, "randomness").unwrap(); assert_eq!( @@ -1353,8 +1388,9 @@ mod tests { ); // Execute 2 - register_bot(deps.as_mut(), "someone else"); - let info = mock_info("someone else", &[]); + let someone_else = deps.api.addr_make("someone else"); + register_bot(deps.as_mut(), &someone_else); + let info = message_info(&someone_else, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let randomness = first_attr(response.attributes, "randomness").unwrap(); assert_eq!( @@ -1367,11 +1403,13 @@ mod tests { fn add_round_fails_when_same_bot_submits_multiple_times() { let mut deps = mock_dependencies(); - register_bot(deps.as_mut(), "creator"); + let creator = deps.api.addr_make("creator"); + + register_bot(deps.as_mut(), &creator); - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1380,24 +1418,24 @@ mod tests { let msg = make_add_round_msg(72780); - const A: &str = "bot_alice"; - const B: &str = "bot_bob"; - register_bot(deps.as_mut(), A); - register_bot(deps.as_mut(), B); + let a = deps.api.addr_make("bot_alice"); + let b = deps.api.addr_make("bot_bob"); + register_bot(deps.as_mut(), &a); + register_bot(deps.as_mut(), &b); // Execute A1 - let info = mock_info(A, &[]); + let info = message_info(&a, &[]); execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); // Execute B1 - let info = mock_info(B, &[]); + let info = message_info(&b, &[]); execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap(); // Execute A2 - let info = mock_info(A, &[]); + let info = message_info(&a, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap_err(); assert!(matches!(err, ContractError::SubmissionExists)); // Execute B2 - let info = mock_info(B, &[]); + let info = message_info(&b, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::SubmissionExists)); } @@ -1405,11 +1443,12 @@ mod tests { #[test] fn register_bot_works_for_updates() { let mut deps = mock_dependencies(); - let bot_addr = "bot_addr".to_string(); + + let bot_addr = deps.api.addr_make("bot_addr"); // first registration - let info = mock_info(&bot_addr, &[]); + let info = message_info(&bot_addr, &[]); let register_bot_msg = ExecuteMsg::RegisterBot { moniker: "Nickname1".to_string(), }; @@ -1419,7 +1458,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::Bot { - address: bot_addr.clone(), + address: bot_addr.to_string(), }, ) .unwrap(), @@ -1430,7 +1469,7 @@ mod tests { bot, QueriedBot { moniker: "Nickname1".to_string(), - address: Addr::unchecked(&bot_addr), + address: bot_addr.clone(), rounds_added: 0, reward_points: 0, } @@ -1438,7 +1477,7 @@ mod tests { // re-register - let info = mock_info(&bot_addr, &[]); + let info = message_info(&bot_addr, &[]); let register_bot_msg = ExecuteMsg::RegisterBot { moniker: "Another nickname".to_string(), }; @@ -1448,7 +1487,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::Bot { - address: bot_addr.clone(), + address: bot_addr.to_string(), }, ) .unwrap(), @@ -1459,7 +1498,7 @@ mod tests { bot, QueriedBot { moniker: "Another nickname".to_string(), - address: Addr::unchecked(&bot_addr), + address: bot_addr.clone(), rounds_added: 0, reward_points: 0, } @@ -1474,17 +1513,20 @@ mod tests { fn query_beacons_asc_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - register_bot(deps.as_mut(), "anyone"); - add_test_rounds(deps.as_mut(), "anyone"); + let anyone = deps.api.addr_make("anyone"); + register_bot(deps.as_mut(), &anyone); + add_test_rounds(deps.as_mut(), &anyone); // Unlimited let BeaconsResponse { beacons } = from_json( @@ -1571,18 +1613,21 @@ mod tests { fn query_beacons_desc_works() { let mut deps = mock_dependencies(); - register_bot(deps.as_mut(), "creator"); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + + register_bot(deps.as_mut(), &creator); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - register_bot(deps.as_mut(), "anyone"); - add_test_rounds(deps.as_mut(), "anyone"); + let anyone = deps.api.addr_make("anyone"); + register_bot(deps.as_mut(), &anyone); + add_test_rounds(deps.as_mut(), &anyone); // Unlimited let BeaconsResponse { beacons } = from_json( @@ -1669,17 +1714,19 @@ mod tests { fn query_is_incentivized_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const BOT1: &str = "beta1"; - const BOT2: &str = "gamma2"; + let bot1 = deps.api.addr_make("beta1"); + let bot2 = deps.api.addr_make("gamma2"); // No rounds let response: IsIncentivizedResponse = from_json( @@ -1687,7 +1734,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: vec![], }, ) @@ -1702,7 +1749,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: vec![TESTING_MIN_ROUND], }, ) @@ -1716,7 +1763,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: vec![TESTING_MIN_ROUND + 15], }, ) @@ -1736,7 +1783,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: rounds.into(), }, ) @@ -1751,7 +1798,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT2.to_string(), + sender: bot2.to_string(), rounds: rounds.into(), }, ) @@ -1766,7 +1813,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: vec![ TESTING_MIN_ROUND, TESTING_MIN_ROUND + 10, @@ -1802,7 +1849,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: (TESTING_MIN_ROUND..TESTING_MIN_ROUND + 999).collect(), }, ) @@ -1817,7 +1864,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsIncentivized { - sender: BOT1.to_string(), + sender: bot1.to_string(), rounds: (TESTING_MIN_ROUND - 200..TESTING_MIN_ROUND).collect(), }, ) @@ -1830,11 +1877,11 @@ mod tests { #[test] fn query_submissions_works() { let mut deps = mock_dependencies(); - - register_bot(deps.as_mut(), "creator"); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + register_bot(deps.as_mut(), &creator); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1842,12 +1889,12 @@ mod tests { instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // Address order is not submission order - let bot1 = "beta1"; - let bot2 = "gamma2"; - let bot3 = "alpha3"; + let bot1 = deps.api.addr_make("beta1"); + let bot2 = deps.api.addr_make("gamma2"); + let bot3 = deps.api.addr_make("alpha3"); - register_bot(deps.as_mut(), bot1); - add_test_rounds(deps.as_mut(), bot1); + register_bot(deps.as_mut(), &bot1); + add_test_rounds(deps.as_mut(), &bot1); let test_round = 72775; @@ -1880,14 +1927,14 @@ mod tests { assert_eq!( response.submissions, [QueriedSubmission { - bot: Addr::unchecked(bot1), + bot: bot1.clone(), time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, }] ); - add_test_rounds(deps.as_mut(), bot2); + add_test_rounds(deps.as_mut(), &bot2); // Two submissions let response: SubmissionsResponse = from_json( @@ -1904,13 +1951,13 @@ mod tests { response.submissions, [ QueriedSubmission { - bot: Addr::unchecked(bot1), + bot: bot1.clone(), time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, }, QueriedSubmission { - bot: Addr::unchecked(bot2), + bot: bot2.clone(), time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, @@ -1918,7 +1965,7 @@ mod tests { ] ); - add_test_rounds(deps.as_mut(), bot3); + add_test_rounds(deps.as_mut(), &bot3); // Three submissions let response: SubmissionsResponse = from_json( @@ -1935,19 +1982,19 @@ mod tests { response.submissions, [ QueriedSubmission { - bot: Addr::unchecked(bot1), + bot: bot1, time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, }, QueriedSubmission { - bot: Addr::unchecked(bot2), + bot: bot2, time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, }, QueriedSubmission { - bot: Addr::unchecked(bot3), + bot: bot3, time: DEFAULT_TIME, height: DEFAULT_HEIGHT, tx_index: DEFAULT_TX_INDEX, @@ -1960,9 +2007,15 @@ mod tests { fn query_allowlist_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let bot_a = deps.api.addr_make("bot_a"); + let bot_b = deps.api.addr_make("bot_b"); + let bot_c = deps.api.addr_make("bot_c"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -1974,13 +2027,13 @@ mod tests { assert_eq!(allowed, Vec::::new()); // Add one entry - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute( deps.as_mut(), mock_env(), info, ExecuteMsg::UpdateAllowlistBots { - add: vec!["bot_b".to_string()], + add: vec![bot_b.to_string()], remove: vec![], }, ) @@ -1988,16 +2041,16 @@ mod tests { let AllowlistResponse { allowed } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Allowlist {}).unwrap()).unwrap(); - assert_eq!(allowed, vec!["bot_b".to_string()]); + assert_eq!(allowed, vec![bot_b.to_string()]); // Add two more entries - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute( deps.as_mut(), mock_env(), info, ExecuteMsg::UpdateAllowlistBots { - add: vec!["bot_a".to_string(), "bot_c".to_string()], + add: vec![bot_a.to_string(), bot_c.to_string()], remove: vec![], }, ) @@ -2006,12 +2059,8 @@ mod tests { let AllowlistResponse { allowed } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Allowlist {}).unwrap()).unwrap(); assert_eq!( - allowed, - vec![ - "bot_a".to_string(), - "bot_b".to_string(), - "bot_c".to_string() - ] + allowed.into_iter().collect::>(), + HashSet::from([bot_a.to_string(), bot_b.to_string(), bot_c.to_string()]) ); } @@ -2019,22 +2068,24 @@ mod tests { fn query_bot_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: deps.api.addr_make(TESTING_MANAGER).into(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const UNREGISTERED: &str = "unregistered_bot"; - const REGISTERED: &str = "registered_bot"; - const ALLOWLISTED: &str = "allowlisted_bot"; + let unregistered = deps.api.addr_make("unregistered_bot"); + let registered = deps.api.addr_make("registered_bot"); + let allowlisted = deps.api.addr_make("allowlisted_bot"); - register_bot(deps.as_mut(), REGISTERED); - register_bot(deps.as_mut(), ALLOWLISTED); - allowlist_bot(deps.as_mut(), ALLOWLISTED); + register_bot(deps.as_mut(), ®istered); + register_bot(deps.as_mut(), &allowlisted); + allowlist_bot(deps.as_mut(), &allowlisted); // Unregisrered let BotResponse { bot } = from_json( @@ -2042,7 +2093,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::Bot { - address: UNREGISTERED.to_string(), + address: unregistered.into(), }, ) .unwrap(), @@ -2056,7 +2107,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::Bot { - address: REGISTERED.to_string(), + address: registered.to_string(), }, ) .unwrap(), @@ -2065,21 +2116,21 @@ mod tests { assert_eq!( bot.unwrap(), QueriedBot { - address: Addr::unchecked(REGISTERED), + address: registered.clone(), moniker: "Best Bot".to_string(), rounds_added: 0, reward_points: 0, } ); - add_test_rounds(deps.as_mut(), REGISTERED); + add_test_rounds(deps.as_mut(), ®istered); let BotResponse { bot } = from_json( query( deps.as_ref(), mock_env(), QueryMsg::Bot { - address: REGISTERED.to_string(), + address: registered.to_string(), }, ) .unwrap(), @@ -2088,7 +2139,7 @@ mod tests { assert_eq!( bot.unwrap(), QueriedBot { - address: Addr::unchecked(REGISTERED), + address: registered, moniker: "Best Bot".to_string(), rounds_added: 4, reward_points: 0, // Not allowlisted @@ -2101,7 +2152,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::Bot { - address: ALLOWLISTED.to_string(), + address: allowlisted.to_string(), }, ) .unwrap(), @@ -2110,21 +2161,21 @@ mod tests { assert_eq!( bot.unwrap(), QueriedBot { - address: Addr::unchecked(ALLOWLISTED), + address: allowlisted.clone(), moniker: "Best Bot".to_string(), rounds_added: 0, reward_points: 0, } ); - add_test_rounds(deps.as_mut(), ALLOWLISTED); + add_test_rounds(deps.as_mut(), &allowlisted); let BotResponse { bot } = from_json( query( deps.as_ref(), mock_env(), QueryMsg::Bot { - address: ALLOWLISTED.to_string(), + address: allowlisted.to_string(), }, ) .unwrap(), @@ -2133,7 +2184,7 @@ mod tests { assert_eq!( bot.unwrap(), QueriedBot { - address: Addr::unchecked(ALLOWLISTED), + address: allowlisted, moniker: "Best Bot".to_string(), rounds_added: 4, reward_points: 2 @@ -2146,9 +2197,14 @@ mod tests { fn is_query_allowlisted_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let bot_a = deps.api.addr_make("bot_a"); + let bot_b = deps.api.addr_make("bot_b"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -2156,13 +2212,13 @@ mod tests { instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // Add one entry - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); execute( deps.as_mut(), mock_env(), info, ExecuteMsg::UpdateAllowlistBots { - add: vec!["bot_b".to_string()], + add: vec![bot_b.to_string()], remove: vec![], }, ) @@ -2174,7 +2230,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: "bot_b".to_string(), + bot: bot_b.to_string(), }, ) .unwrap(), @@ -2188,7 +2244,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - bot: "bot_a".to_string(), + bot: bot_a.to_string(), }, ) .unwrap(), @@ -2201,10 +2257,15 @@ mod tests { fn only_manager_can_set_manager() { let mut deps = mock_dependencies(); - register_bot(deps.as_mut(), "creator"); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let manager = deps.api.addr_make(TESTING_MANAGER); + let new_manager = deps.api.addr_make("new manager"); + let guest = deps.api.addr_make("guest"); + + register_bot(deps.as_mut(), &creator); + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: TESTING_MANAGER.to_string(), + manager: manager.to_string(), min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), @@ -2212,9 +2273,9 @@ mod tests { instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // A random addr cannot set a new manager - let info = mock_info("some_random_person", &[]); + let info = message_info(&guest, &[]); let msg = ExecuteMsg::SetConfig { - manager: Some("new_manager".to_string()), + manager: Some(new_manager.to_string()), gateway: None, incentive_denom: None, incentive_point_price: None, @@ -2224,9 +2285,9 @@ mod tests { assert!(matches!(err, ContractError::Unauthorized)); // Creator cannot set a new manager - let info = mock_info("CREATOR", &[]); + let info = message_info(&creator, &[]); let msg = ExecuteMsg::SetConfig { - manager: Some("new_manager".to_string()), + manager: Some(new_manager.to_string()), gateway: None, incentive_denom: None, incentive_point_price: None, @@ -2237,9 +2298,9 @@ mod tests { assert!(matches!(err, ContractError::Unauthorized)); // Manager can set a new manager - let info = mock_info(TESTING_MANAGER, &[]); + let info = message_info(&manager, &[]); let msg = ExecuteMsg::SetConfig { - manager: Some("new_manager".to_string()), + manager: Some(new_manager.to_string()), gateway: None, incentive_denom: None, incentive_point_price: None, @@ -2251,7 +2312,7 @@ mod tests { assert_eq!( config, ConfigResponse { - manager: Addr::unchecked("new_manager"), + manager: new_manager, gateway: None, min_round: TESTING_MIN_ROUND, incentive_point_price: Uint128::new(20_000), diff --git a/contracts/nois-drand/src/msg.rs b/contracts/nois-drand/src/msg.rs index 197d2744..0e9f8438 100644 --- a/contracts/nois-drand/src/msg.rs +++ b/contracts/nois-drand/src/msg.rs @@ -120,7 +120,8 @@ pub struct BotsResponse { #[cw_serde] pub struct AllowlistResponse { - /// List of bot addresses + /// List of bot addresses. The result is unsorted and depends + /// on the behaviour of the underlying database. pub allowed: Vec, } diff --git a/contracts/nois-gateway/Cargo.toml b/contracts/nois-gateway/Cargo.toml index f04a6080..92339391 100644 --- a/contracts/nois-gateway/Cargo.toml +++ b/contracts/nois-gateway/Cargo.toml @@ -12,9 +12,6 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] [dependencies] nois-drand = { path = "../../contracts/nois-drand", features = ["library"] } @@ -22,9 +19,9 @@ nois-payment = { path = "../../contracts/nois-payment", features = ["library"] } nois-protocol = { path = "../../packages/nois-protocol" } drand-common = { path = "../../packages/drand-common" } nois.workspace = true -cosmwasm-std = { version = "1.5.4", features = ["iterator", "ibc3", "cosmwasm_1_2"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["iterator", "cosmwasm_1_2"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } thiserror = { version = "1.0.23" } diff --git a/contracts/nois-gateway/src/contract.rs b/contracts/nois-gateway/src/contract.rs index ac16fda9..66ab6d3a 100644 --- a/contracts/nois-gateway/src/contract.rs +++ b/contracts/nois-gateway/src/contract.rs @@ -284,7 +284,7 @@ pub fn ibc_channel_connect( deps.querier.query_wasm_code_info(config.payment_code_id)?; let salt = hash_channel(&chan_id); #[allow(unused)] - let address = instantiate2_address(&checksum, &creator, &salt) + let address = instantiate2_address(checksum.as_slice(), &creator, &salt) .map_err(|e| StdError::generic_err(format!("Cound not generate address: {}", e)))?; let address = { @@ -390,8 +390,7 @@ pub fn ibc_packet_receive( // we try to capture all app-level errors and convert them into // acknowledgement packets that contain an error code. let acknowledgement = StdAck::error(format!("Error processing packet: {e}")); - Ok(IbcReceiveResponse::new() - .set_ack(acknowledgement) + Ok(IbcReceiveResponse::new(acknowledgement) .add_event(Event::new("ibc").add_attribute("packet", "receive"))) }) } @@ -455,8 +454,7 @@ fn receive_request_beacon( }; msgs.push(msg.into()); - Ok(IbcReceiveResponse::new() - .set_ack(acknowledgement) + Ok(IbcReceiveResponse::new(acknowledgement) .add_messages(msgs) .add_attribute("action", "receive_request_beacon")) } @@ -470,9 +468,7 @@ fn receive_pull_beacon_price(deps: DepsMut, env: Env) -> Result OwnedDeps { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); deps @@ -808,6 +807,16 @@ mod tests { format!("job {job}").into_bytes().into() } + fn addr(input: &str) -> Addr { + MockApi::default().addr_make(input) + } + + fn mock_env_addr() -> Env { + let mut env = mock_env(); + env.contract.address = addr(MOCK_CONTRACT_ADDR); + env + } + fn connect(mut deps: DepsMut, channel_id: &str) { let handshake_open = mock_ibc_channel_open_try(channel_id, APP_ORDER, IBC_APP_VERSION); // first we try to open with a valid handshake @@ -816,7 +825,8 @@ mod tests { // then we connect (with counter-party version set) let handshake_connect = mock_ibc_channel_connect_confirm(channel_id, APP_ORDER, IBC_APP_VERSION); - let res = ibc_channel_connect(deps.branch(), mock_env(), handshake_connect).unwrap(); + let env = mock_env_addr(); + let res = ibc_channel_connect(deps.branch(), env, handshake_connect).unwrap(); assert_eq!(res.messages.len(), 3); assert!(matches!(res.messages[0].msg, CosmosMsg::Wasm(_))); assert!(matches!( @@ -856,23 +866,14 @@ mod tests { } WasmQuery::CodeInfo { code_id, .. } => match *code_id { PAYMENT => { - let mut resp = CodeInfoResponse::default(); - resp.code_id = PAYMENT; - resp.creator = "whoever".to_string(); - resp.checksum = HexBinary::from_hex( - "04b59c31429dcc5bdc58fb1ded3894797a0f0c324f5db40e1fa2c7812a300b83", - ) - .unwrap(); + let resp = CodeInfoResponse::new(PAYMENT, Addr::unchecked("whoever"), Checksum::from_hex("04b59c31429dcc5bdc58fb1ded3894797a0f0c324f5db40e1fa2c7812a300b83").unwrap()); SystemResult::Ok(ContractResult::Ok(to_json_binary(&resp).unwrap())) } PAYMENT2 => { - let mut resp = CodeInfoResponse::default(); - resp.code_id = PAYMENT2; - resp.creator = "anotherone".to_string(); - resp.checksum = HexBinary::from_hex( + let resp = CodeInfoResponse::new(PAYMENT2, Addr::unchecked("anotherone"), Checksum::from_hex( "f9ed2a2e7c03937004a2079747e79e508288e721bfe63f441f3e1c397c55b88d", ) - .unwrap(); + .unwrap()); SystemResult::Ok(ContractResult::Ok(to_json_binary(&resp).unwrap())) } _ => SystemResult::Err(SystemError::NoSuchCode { code_id: *code_id }), @@ -891,16 +892,19 @@ mod tests { fn instantiate_works() { let mut deps = mock_dependencies(); - // Without payment_initial_funds + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); + // Without payment_initial_funds let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: None, - sink: SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); let config: ConfigResponse = @@ -910,24 +914,24 @@ mod tests { ConfigResponse { drand: None, trusted_sources: None, - manager: Addr::unchecked(MANAGER), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: None, - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); // With payment_initial_funds let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let _res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); let config: ConfigResponse = @@ -937,11 +941,11 @@ mod tests { ConfigResponse { drand: None, trusted_sources: None, - manager: Addr::unchecked(MANAGER), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); } @@ -950,14 +954,18 @@ mod tests { fn instantiate_with_non_existing_code_id_fails() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); + let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: 654321, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let env = mock_env(); let err = instantiate(deps.as_mut(), env, info, msg).unwrap_err(); match err { @@ -974,30 +982,36 @@ mod tests { fn execute_set_config_works() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let manager2 = deps.api.addr_make(MANAGER2); + let sink = deps.api.addr_make(SINK); + let somewhere = deps.api.addr_make("somewhere"); + let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: None, - sink: SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let env = mock_env(); instantiate(deps.as_mut(), env, info, msg).unwrap(); let msg = ExecuteMsg::SetConfig { - manager: Some(MANAGER2.to_string()), - price: Some(Coin::new(123, "unois")), - drand_addr: Some("somewhere".to_string()), - trusted_sources: Some(vec!["somewhere".to_string(), MANAGER2.to_string()]), - payment_initial_funds: Some(Coin::new(500, "unois")), + manager: Some(manager2.to_string()), + price: Some(coin(123, "unois")), + drand_addr: Some(somewhere.to_string()), + trusted_sources: Some(vec![somewhere.to_string(), manager2.to_string()]), + payment_initial_funds: Some(coin(500, "unois")), }; // Fails for incorrect manager let err = execute( deps.as_mut(), mock_env(), - mock_info(MANAGER2, &[]), + message_info(&manager2, &[]), msg.clone(), ) .unwrap_err(); @@ -1007,23 +1021,20 @@ mod tests { } // Works for correct manager - execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); let config: ConfigResponse = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); assert_eq!( config, ConfigResponse { - manager: Addr::unchecked(MANAGER2), - price: Coin::new(123, "unois"), - drand: Some(Addr::unchecked("somewhere")), - trusted_sources: Some(vec![ - Addr::unchecked("somewhere"), - Addr::unchecked(MANAGER2) - ]), + manager: manager2.clone(), + price: coin(123, "unois"), + drand: Some(somewhere.clone()), + trusted_sources: Some(vec![somewhere.clone(), manager2.clone()]), payment_code_id: PAYMENT, - payment_initial_funds: Some(Coin::new(500, "unois")), - sink: Addr::unchecked(SINK), + payment_initial_funds: Some(coin(500, "unois")), + sink, } ) } @@ -1032,40 +1043,44 @@ mod tests { fn add_round_verified_must_only_be_called_by_drand() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let manager2 = deps.api.addr_make(MANAGER2); + let sink = deps.api.addr_make(SINK); + let anon = deps.api.addr_make("anon"); + let drand = deps.api.addr_make("drand_verifier_7"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const ANON: &str = "anon"; - const DRAND: &str = "drand_verifier_7"; - // drand contract unset, i.e. noone can submit let msg = make_add_verified_round_msg(2183668, true); - let err = execute(deps.as_mut(), mock_env(), mock_info(ANON, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&anon, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedAddVerifiedRound)); let msg = make_add_verified_round_msg(2183668, true); - let err = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedAddVerifiedRound)); // Set drand contract let msg = ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), + drand_addr: Some(drand.to_string()), trusted_sources: None, payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); // drand cannot add let msg = make_add_verified_round_msg(2183668, true); - let err = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedAddVerifiedRound)); // Set trusted sources @@ -1073,48 +1088,51 @@ mod tests { manager: None, price: None, drand_addr: None, - trusted_sources: Some(vec![DRAND.to_string(), MANAGER2.to_string()]), + trusted_sources: Some(vec![drand.to_string(), manager2.to_string()]), payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); // Anon still cannot add round let msg = make_add_verified_round_msg(2183668, true); - let err = execute(deps.as_mut(), mock_env(), mock_info(ANON, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&anon, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedAddVerifiedRound)); // But drand and manager2 can let msg = make_add_verified_round_msg(2183668, true); - let _res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); let msg = make_add_verified_round_msg(2183668, true); - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER2, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager2, &[]), msg).unwrap(); } #[test] fn add_round_verified_processes_jobs() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); + let drand = deps.api.addr_make("drand_verifier_7"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const DRAND: &str = "drand_verifier_7"; - // Set drand contract let msg = ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); // Create one job let msg = mock_ibc_packet_recv( @@ -1129,14 +1147,14 @@ mod tests { // Previous round processes no job let msg = make_add_verified_round_msg(ROUND1, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 0); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "0"); // Process one job let msg = make_add_verified_round_msg(ROUND2, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); assert_eq!(res.messages[0].gas_limit, None); assert!(matches!( @@ -1161,7 +1179,7 @@ mod tests { // Process first jobs let msg = make_add_verified_round_msg(ROUND3, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); assert_eq!(res.messages[0].gas_limit, None); assert!(matches!( @@ -1173,7 +1191,7 @@ mod tests { // Process second job let msg = make_add_verified_round_msg(ROUND3, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); assert_eq!(res.messages[0].gas_limit, None); assert!(matches!( @@ -1199,42 +1217,42 @@ mod tests { // Process first job let msg = make_add_verified_round_msg(ROUND4, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "1"); // Process next job let msg = make_add_verified_round_msg(ROUND4, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "1"); // Process next job let msg = make_add_verified_round_msg(ROUND4, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "1"); // Process next 10 jobs let msg = make_add_verified_round_msg(ROUND4, false); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 10); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "10"); // Process remaining jobs let msg = make_add_verified_round_msg(ROUND4, false); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 8); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "8"); // No jobs left for later submissions let msg = make_add_verified_round_msg(ROUND4, true); - let res = execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 0); let jobs_processed = first_attr(&res.attributes, "jobs_processed").unwrap(); assert_eq!(jobs_processed, "0"); @@ -1248,27 +1266,30 @@ mod tests { fn query_job_stats_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); + let drand = deps.api.addr_make("drand_verifier_7"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - const DRAND: &str = "drand_verifier_7"; - // Set drand contract let msg = ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); fn job_stats(deps: Deps, round: u64) -> DrandJobStatsResponse { from_json(query(deps, mock_env(), QueryMsg::DrandJobStats { round }).unwrap()).unwrap() @@ -1306,7 +1327,7 @@ mod tests { ); let msg = make_add_verified_round_msg(ROUND1, true); - execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); // 1 processed job, no unprocessed jobs assert_eq!( @@ -1364,7 +1385,7 @@ mod tests { // process some let msg = make_add_verified_round_msg(ROUND2, true); - execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); // Some processed, rest unprocessed assert_eq!( @@ -1381,13 +1402,18 @@ mod tests { fn query_requests_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let sink = deps.api.addr_make(SINK); + let drand = deps.api.addr_make(DRAND); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg { - manager: MANAGER.to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }; instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); @@ -1398,11 +1424,11 @@ mod tests { let msg = ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); fn requests_asc(deps: Deps, channel_id: &str) -> RequestsLogResponse { from_json( @@ -1585,7 +1611,8 @@ mod tests { // then we connect (with counter-party version set) let handshake_connect = mock_ibc_channel_connect_confirm(channel_id, APP_ORDER, IBC_APP_VERSION); - let _res = ibc_channel_connect(deps.as_mut(), mock_env(), handshake_connect).unwrap(); + let env = mock_env_addr(); + let _res = ibc_channel_connect(deps.as_mut(), env, handshake_connect).unwrap(); } #[test] @@ -1599,7 +1626,7 @@ mod tests { connect(deps.as_mut(), channel_id); // assign it some funds let funds = vec![coin(123456, "uatom"), coin(7654321, "tgrd")]; - deps.querier.update_balance(account, funds); + deps.querier.bank.update_balance(account, funds); // close the channel let channel = mock_ibc_channel_close_init(channel_id, APP_ORDER, IBC_APP_VERSION); @@ -1699,7 +1726,9 @@ mod tests { fn query_customer_requested_beacons_works() { let mut deps = setup(); - const DRAND: &str = "drand_verifier_7"; + let manager = deps.api.addr_make(MANAGER); + let drand = deps.api.addr_make("drand_verifier_7"); + const CHANNEL_ID: &str = "the-channel"; // register the channel @@ -1709,11 +1738,11 @@ mod tests { let msg = ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; - let _res = execute(deps.as_mut(), mock_env(), mock_info(MANAGER, &[]), msg).unwrap(); + let _res = execute(deps.as_mut(), mock_env(), message_info(&manager, &[]), msg).unwrap(); fn customer(deps: Deps, channel_id: &str) -> QueriedCustomer { let res: CustomerResponse = from_json( @@ -1748,7 +1777,7 @@ mod tests { assert_eq!(customer(deps.as_ref(), CHANNEL_ID).requested_beacons, 1); let msg = make_add_verified_round_msg(ROUND1, true); - execute(deps.as_mut(), mock_env(), mock_info(DRAND, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&drand, &[]), msg).unwrap(); // New job for existing round gets processed immediately let msg = mock_ibc_packet_recv( diff --git a/contracts/nois-gateway/src/state/requests_log.rs b/contracts/nois-gateway/src/state/requests_log.rs index 50febc7e..bc3c30da 100644 --- a/contracts/nois-gateway/src/state/requests_log.rs +++ b/contracts/nois-gateway/src/state/requests_log.rs @@ -26,7 +26,7 @@ pub fn requests_log_add( request_log_entry: &RequestLogEntry, ) -> StdResult<()> { let prefix = requests_log_key(channel_id); - Deque::new(&prefix).push_back(storage, request_log_entry) + Deque::new_dyn(prefix).push_back(storage, request_log_entry) } pub fn requests_log_asc( @@ -36,7 +36,7 @@ pub fn requests_log_asc( limit: usize, ) -> StdResult> { let prefix = requests_log_key(channel_id); - Deque::new(&prefix) + Deque::new_dyn(prefix) .iter(storage)? .skip(offset) .take(limit) @@ -50,7 +50,7 @@ pub fn requests_log_desc( limit: usize, ) -> StdResult> { let prefix = requests_log_key(channel_id); - Deque::new(&prefix) + Deque::new_dyn(prefix) .iter(storage)? .rev() .skip(offset) diff --git a/contracts/nois-icecube/Cargo.toml b/contracts/nois-icecube/Cargo.toml index d7d1b450..8aa7b78b 100644 --- a/contracts/nois-icecube/Cargo.toml +++ b/contracts/nois-icecube/Cargo.toml @@ -12,14 +12,11 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["staking"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["staking"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } thiserror = { version = "1.0.23" } diff --git a/contracts/nois-icecube/src/contract.rs b/contracts/nois-icecube/src/contract.rs index 7fddf3c7..efd764b1 100644 --- a/contracts/nois-icecube/src/contract.rs +++ b/contracts/nois-icecube/src/contract.rs @@ -230,9 +230,9 @@ mod tests { use super::*; use cosmwasm_std::{ - from_json, - testing::{mock_dependencies, mock_env, mock_info, MockApi, MockQuerier, MockStorage}, - Addr, CosmosMsg, Empty, OwnedDeps, Uint128, + coin, from_json, + testing::{message_info, mock_dependencies, mock_env, MockApi, MockQuerier, MockStorage}, + CosmosMsg, Empty, OwnedDeps, Uint128, }; const CREATOR: &str = "creator"; @@ -241,10 +241,12 @@ mod tests { #[test] fn instantiate_works() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); let msg = InstantiateMsg { - manager: MANAGER.to_string(), + manager: manager.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); let config: ConfigResponse = @@ -252,7 +254,7 @@ mod tests { assert_eq!( config, ConfigResponse { - manager: Addr::unchecked(MANAGER), + manager: manager.clone(), drand: None, } ); @@ -260,17 +262,21 @@ mod tests { fn setup() -> OwnedDeps { let mut deps = mock_dependencies(); + + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let drand = deps.api.addr_make("the-drand-address"); + let msg = InstantiateMsg { - manager: MANAGER.to_string(), + manager: manager.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::SetDrandAddr { - addr: "the-drand-address".to_string(), + addr: drand.to_string(), }; - - let info = mock_info(MANAGER, &[]); + let info = message_info(&manager, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); deps } @@ -278,11 +284,12 @@ mod tests { #[test] fn anyone_can_claim_rewards() { let mut deps = setup(); + let random = deps.api.addr_make("some_random_person"); let msg = ExecuteMsg::ClaimRewards { addr: "valoper123".to_string(), }; - let info = mock_info("some_random_person", &[]); + let info = message_info(&random, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(response.messages.len(), 1); assert!(matches!( @@ -294,11 +301,12 @@ mod tests { #[test] fn anyone_can_send_to_drand() { let mut deps = setup(); + let random = deps.api.addr_make("some_random_person"); let msg = ExecuteMsg::SendFundsToDrand { - funds: Coin::new(123, "foocoin"), + funds: coin(123, "foocoin"), }; - let info = mock_info("some_random_person", &[]); + let info = message_info(&random, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(response.messages.len(), 1); assert!(matches!( @@ -310,16 +318,19 @@ mod tests { #[test] fn only_manager_can_delegate_undelegate_redelegate() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let not_manager = deps.api.addr_make("not-manager"); let msg = InstantiateMsg { - manager: MANAGER.to_string(), + manager: manager.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // check manager operations work // delegate for manager works - let info = mock_info(MANAGER, &[]); + let info = message_info(&manager, &[]); let msg = ExecuteMsg::Delegate { addr: "validator".to_string(), amount: Uint128::new(1_000), @@ -378,7 +389,7 @@ mod tests { // check non-manager operations are unothorized // delegate for non-manager unauthorized - let info = mock_info("not_manager", &[]); + let info = message_info(¬_manager, &[]); let msg = ExecuteMsg::Delegate { addr: "validator".to_string(), amount: Uint128::new(1_000), @@ -407,32 +418,38 @@ mod tests { #[test] fn only_manager_can_set_manager() { let mut deps = mock_dependencies(); + + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER); + let new_manager = deps.api.addr_make("new manager"); + let random = deps.api.addr_make("some_random_person"); + let msg = InstantiateMsg { - manager: MANAGER.to_string(), + manager: manager.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // A random addr cannot set a new manager - let info = mock_info("some_random_person", &[]); + let info = message_info(&random, &[]); let msg = ExecuteMsg::SetManagerAddr { - manager: "new_manager".to_string(), + manager: new_manager.to_string(), }; let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); // Creator cannot set a new manager - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let msg = ExecuteMsg::SetManagerAddr { - manager: "new_manager".to_string(), + manager: new_manager.to_string(), }; let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); // Manager can set a new manager - let info = mock_info(MANAGER, &[]); + let info = message_info(&manager, &[]); let msg = ExecuteMsg::SetManagerAddr { - manager: "new_manager".to_string(), + manager: new_manager.to_string(), }; execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let config: ConfigResponse = @@ -440,7 +457,7 @@ mod tests { assert_eq!( config, ConfigResponse { - manager: Addr::unchecked("new_manager"), + manager: new_manager, drand: None, } ); diff --git a/contracts/nois-monitoring/Cargo.toml b/contracts/nois-monitoring/Cargo.toml index 0d12f14a..52563201 100644 --- a/contracts/nois-monitoring/Cargo.toml +++ b/contracts/nois-monitoring/Cargo.toml @@ -11,9 +11,9 @@ publish = false crate-type = ["cdylib", "rlib"] [dependencies] -cosmwasm-std = { version = "1.5.4" } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4" } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } nois.workspace = true serde = { version = "1.0.137", default-features = false, features = ["derive"] } thiserror = { version = "1.0.31" } diff --git a/contracts/nois-monitoring/src/contract.rs b/contracts/nois-monitoring/src/contract.rs index c2a69b5c..9f8f097e 100644 --- a/contracts/nois-monitoring/src/contract.rs +++ b/contracts/nois-monitoring/src/contract.rs @@ -183,7 +183,7 @@ fn query_history(deps: Deps) -> StdResult> { mod tests { use super::*; use cosmwasm_std::testing::{ - mock_dependencies, mock_env, mock_info, MockApi, MockQuerier, MockStorage, + message_info, mock_dependencies, mock_env, MockApi, MockQuerier, MockStorage, }; use cosmwasm_std::{coins, Empty, HexBinary, OwnedDeps, Timestamp}; @@ -194,10 +194,13 @@ mod tests { fn proper_initialization() { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let proxy = deps.api.addr_make("address123"); + let msg = InstantiateMsg { - nois_proxy: "address123".to_string(), + nois_proxy: proxy.to_string(), }; - let info = mock_info("creator", &coins(1000, "earth")); + let info = message_info(&creator, &coins(1000, "earth")); // we can just call .unwrap() to assert this was a success let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); @@ -206,10 +209,12 @@ mod tests { fn instantiate_proxy() -> OwnedDeps { let mut deps = mock_dependencies(); + let creator = deps.api.addr_make(CREATOR); + let proxy = deps.api.addr_make(PROXY_ADDRESS); let msg = InstantiateMsg { - nois_proxy: PROXY_ADDRESS.to_string(), + nois_proxy: proxy.to_string(), }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); deps } @@ -217,22 +222,24 @@ mod tests { #[test] fn execute_roll_dice_works() { let mut deps = instantiate_proxy(); + let guest = deps.api.addr_make("guest"); let msg = ExecuteMsg::RollDice { job_id: "1".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } #[test] fn job_id_too_long() { let mut deps = instantiate_proxy(); + let guest = deps.api.addr_make("guest"); let msg = ExecuteMsg::RollDice { job_id: "abcabcabcabcabca_asfsdfsdgsdgbcbcabcabcabc234t34t3t34gabcabcabc49".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::JobIdTooLong)); } @@ -241,10 +248,13 @@ mod tests { fn proxy_cannot_bring_an_existing_job_id() { let mut deps = instantiate_proxy(); + let proxy = deps.api.addr_make(PROXY_ADDRESS); + let guest = deps.api.addr_make("guest"); + let msg = ExecuteMsg::RollDice { job_id: "round_1".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::NoisReceive { @@ -257,7 +267,7 @@ mod tests { .unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::NoisReceive { @@ -270,7 +280,7 @@ mod tests { .unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::JobIdAlreadyPresent)); @@ -282,6 +292,8 @@ mod tests { fn execute_receive_fails_for_invalid_randomness() { let mut deps = instantiate_proxy(); + let proxy = deps.api.addr_make(PROXY_ADDRESS); + let msg = ExecuteMsg::NoisReceive { callback: NoisCallback { job_id: "round_1".to_string(), @@ -289,19 +301,24 @@ mod tests { randomness: HexBinary::from_hex("ffffffff").unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::InvalidRandomness)); // we can just call .unwrap() to assert this was a success } + #[test] fn players_cannot_request_an_existing_job_id() { let mut deps = instantiate_proxy(); + + let proxy = deps.api.addr_make(PROXY_ADDRESS); + let guest = deps.api.addr_make("guest"); + let msg = ExecuteMsg::RollDice { job_id: "111".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::NoisReceive { @@ -314,13 +331,13 @@ mod tests { .unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::RollDice { job_id: "111".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::JobIdAlreadyPresent)); @@ -330,6 +347,7 @@ mod tests { #[test] fn execute_receive_fails_for_wrong_sender() { let mut deps = instantiate_proxy(); + let guest = deps.api.addr_make("guest"); let msg = ExecuteMsg::NoisReceive { callback: NoisCallback { @@ -341,7 +359,7 @@ mod tests { .unwrap(), }, }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); assert!(matches!(err, ContractError::UnauthorizedReceive)); } @@ -349,10 +367,13 @@ mod tests { fn execute_receive_works() { let mut deps = instantiate_proxy(); + let proxy = deps.api.addr_make(PROXY_ADDRESS); + let guest = deps.api.addr_make("guest"); + let msg = ExecuteMsg::RollDice { job_id: "123".to_owned(), }; - let info = mock_info("guest", &[]); + let info = message_info(&guest, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); let msg = ExecuteMsg::NoisReceive { @@ -365,7 +386,7 @@ mod tests { .unwrap(), }, }; - let info = mock_info(PROXY_ADDRESS, &[]); + let info = message_info(&proxy, &[]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } } diff --git a/contracts/nois-payment/Cargo.toml b/contracts/nois-payment/Cargo.toml index 7ae7a889..a79db97e 100644 --- a/contracts/nois-payment/Cargo.toml +++ b/contracts/nois-payment/Cargo.toml @@ -12,17 +12,14 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] [dependencies] anybuf = "0.3.0" -cosmwasm-std = { version = "1.5.4", features = ["stargate"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["stargate"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true nois.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } diff --git a/contracts/nois-payment/src/contract.rs b/contracts/nois-payment/src/contract.rs index 7720d6ce..2857a674 100644 --- a/contracts/nois-payment/src/contract.rs +++ b/contracts/nois-payment/src/contract.rs @@ -127,6 +127,7 @@ fn execute_pay( // Send to community pool if !community_pool.amount.is_zero() { + #[allow(deprecated)] out_msgs.push(CosmosMsg::Stargate { type_url: "/cosmos.distribution.v1beta1.MsgFundCommunityPool".to_string(), value: encode_msg_fund_community_pool(&community_pool, &env.contract.address).into(), @@ -160,8 +161,8 @@ mod tests { use crate::msg::{ConfigResponse, QueryMsg}; use cosmwasm_std::{ - coins, from_json, - testing::{mock_dependencies, mock_env, mock_info}, + coin, coins, from_json, + testing::{message_info, mock_dependencies, mock_env}, Addr, Attribute, Binary, Uint128, }; use hex; @@ -183,33 +184,32 @@ mod tests { #[test] fn instantiate_works() { let mut deps = mock_dependencies(); + let gateway = deps.api.addr_make(NOIS_GATEWAY); + let sink = deps.api.addr_make(NOIS_SINK); let msg = InstantiateMsg { - sink: NOIS_SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info(NOIS_GATEWAY, &[]); + let info = message_info(&gateway, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); let config: ConfigResponse = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); - assert_eq!( - config, - ConfigResponse { - sink: Addr::unchecked(NOIS_SINK), - gateway: Addr::unchecked(NOIS_GATEWAY), - } - ); + assert_eq!(config, ConfigResponse { sink, gateway }); } #[test] fn cannot_send_funds() { let mut deps = mock_dependencies(); + let sink = deps.api.addr_make(NOIS_SINK); + let gateway = deps.api.addr_make(NOIS_GATEWAY); + let relayer = deps.api.addr_make("some-relayer"); let msg = InstantiateMsg { - sink: NOIS_SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info(NOIS_GATEWAY, &[]); - let _result = instantiate(deps.as_mut(), mock_env(), info, msg); + let info = message_info(&gateway, &[]); + let _response = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - let info = mock_info(NOIS_GATEWAY, &coins(12345, "unoisx")); + let info = message_info(&gateway, &coins(12345, "unoisx")); let msg = ExecuteMsg::Pay { burn: Coin { denom: "unois".to_string(), @@ -220,7 +220,7 @@ mod tests { amount: Uint128::new(450_000), }, relayer: ( - "some-relayer".to_string(), + relayer.to_string(), Coin { denom: "unois".to_string(), amount: Uint128::new(50_000), @@ -235,13 +235,16 @@ mod tests { #[test] fn only_gateway_can_pay() { let mut deps = mock_dependencies(); + let sink = deps.api.addr_make(NOIS_SINK); + let gateway = deps.api.addr_make(NOIS_GATEWAY); + let malicious = deps.api.addr_make("a-malicious-person"); let msg = InstantiateMsg { - sink: NOIS_SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info(NOIS_GATEWAY, &[]); - let _result = instantiate(deps.as_mut(), mock_env(), info, msg); + let info = message_info(&gateway, &[]); + let _response = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - let info = mock_info("a-malicious-person", &[]); + let info = message_info(&malicious, &[]); let msg = ExecuteMsg::Pay { burn: Coin { denom: "unois".to_string(), @@ -264,16 +267,20 @@ mod tests { assert!(matches!(err, ContractError::Unauthorized)); } + #[allow(deprecated)] #[test] fn pay_fund_send_works() { let mut deps = mock_dependencies(); + let sink = deps.api.addr_make(NOIS_SINK); + let gateway = deps.api.addr_make(NOIS_GATEWAY); + let relayer = deps.api.addr_make("some-relayer"); let msg = InstantiateMsg { - sink: NOIS_SINK.to_string(), + sink: sink.to_string(), }; - let info = mock_info(NOIS_GATEWAY, &[]); - let _result = instantiate(deps.as_mut(), mock_env(), info, msg); + let info = message_info(&gateway, &[]); + let _response = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); - let info = mock_info(NOIS_GATEWAY, &[]); + let info = message_info(&gateway, &[]); let msg = ExecuteMsg::Pay { burn: Coin { denom: "unois".to_string(), @@ -284,7 +291,7 @@ mod tests { amount: Uint128::new(450_000), }, relayer: ( - "some-relayer".to_string(), + relayer.to_string(), Coin { denom: "unois".to_string(), amount: Uint128::new(50_000), @@ -297,15 +304,15 @@ mod tests { assert_eq!( response.messages[0].msg, CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "sink".to_string(), + contract_addr: sink.to_string(), msg: Binary::from(br#"{"burn":{}}"#), - funds: vec![Coin::new(500_000, "unois")], + funds: vec![coin(500_000, "unois")], }) ); assert_eq!( response.messages[1].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "some-relayer".to_string(), + to_address: relayer.to_string(), amount: coins(50_000, "unois"), }) ); @@ -327,11 +334,11 @@ mod tests { ); // Zero amount is supported - let info = mock_info(NOIS_GATEWAY, &[]); + let info = message_info(&gateway, &[]); let msg = ExecuteMsg::Pay { - burn: Coin::new(0, "unois"), - community_pool: Coin::new(0, "unois"), - relayer: ("some-relayer".to_string(), Coin::new(0, "unois")), + burn: coin(0, "unois"), + community_pool: coin(0, "unois"), + relayer: (relayer.to_string(), coin(0, "unois")), }; let response = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); // 0 because sink does not like empty funds array and bank send does not like zero coins @@ -353,7 +360,7 @@ mod tests { // tx from https://stargaze-rpc.polkachu.com/tx?hash=0x0F52332EA355E306363FE321C218A3873730A6C20748425D2888063B36DCFAFB // "Cr0BCroBCjEvY29zbW9zLmRpc3RyaWJ1dGlvbi52MWJldGExLk1zZ0Z1bmRDb21tdW5pdHlQb29sEoQBClQKRGliYy8wRjE4MUQ5RjVCQjE4QTg0OTYxNTNDMTY2NkU5MzQxNjk1MTU1OTJDMTM1RThFOUZDQ0MzNTU4ODk4NThFQUY5Egw3OTk5OTk5OTk5OTkSLHN0YXJzMTh4c3AzN3pjNjU2OTBobHEwem0zcTVzeGN1MnJwbTRtcnR4NmVjElgKUApGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQMP/0ZvxxP7PnrW5662nEqW6GMqA1k4sWiLzoFvws+o9xIECgIIARgBEgQQwJoMGkAQ0WA71nUCX0QoOFL6KRqWrGnYsZRn9T0TtpLI6YQVVzoqat5sRdoVkNyN7HP04mzc3nZxXxJZ9//JKUx0wDXP" - let amount = Coin::new( + let amount = coin( 799999999999, "ibc/0F181D9F5BB18A8496153C1666E934169515592C135E8E9FCCC355889858EAF9", ); diff --git a/contracts/nois-proxy-governance-owned/Cargo.toml b/contracts/nois-proxy-governance-owned/Cargo.toml index 2468edef..6fcdc306 100644 --- a/contracts/nois-proxy-governance-owned/Cargo.toml +++ b/contracts/nois-proxy-governance-owned/Cargo.toml @@ -12,9 +12,6 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["nois-proxy/backtraces"] # use library feature to disable all instantiate/execute/query exports library = ["nois-proxy/library"] @@ -22,4 +19,4 @@ library = ["nois-proxy/library"] nois-proxy = { path = "../../contracts/nois-proxy", features = ["governance_owned"]} [dev-dependencies] -cosmwasm-schema = { version = "1.4.0" } +cosmwasm-schema = { version = "2.0.4" } diff --git a/contracts/nois-proxy/Cargo.toml b/contracts/nois-proxy/Cargo.toml index 3fcb986e..d2f9f8c4 100644 --- a/contracts/nois-proxy/Cargo.toml +++ b/contracts/nois-proxy/Cargo.toml @@ -12,9 +12,6 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -25,9 +22,9 @@ governance_owned = [] [dependencies] anybuf = "0.3.0" nois-protocol = { path = "../../packages/nois-protocol"} -cosmwasm-std = { version = "1.5.4", features = ["iterator", "ibc3"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["iterator", "stargate"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true nois.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } diff --git a/contracts/nois-proxy/src/contract.rs b/contracts/nois-proxy/src/contract.rs index 36757503..f730c6aa 100644 --- a/contracts/nois-proxy/src/contract.rs +++ b/contracts/nois-proxy/src/contract.rs @@ -266,6 +266,7 @@ pub fn execute_get_randomness_impl( denom: unois_denom.denom, }, timeout: env.block.time.plus_seconds(TRANSFER_PACKET_LIFETIME).into(), + memo: None, } .into(), ); @@ -520,6 +521,7 @@ fn withdraw_to_community_pool_unchecked( .query_balance(env.contract.address.clone(), denom)?, }; + #[allow(deprecated)] let msg = CosmosMsg::Stargate { type_url: "/cosmos.distribution.v1beta1.MsgFundCommunityPool".to_string(), value: encode_msg_fund_community_pool(&amount, &env.contract.address).into(), @@ -802,8 +804,7 @@ pub fn ibc_packet_receive( // we try to capture all app-level errors and convert them into // acknowledgement packets that contain an error code. let acknowledgement = StdAck::error(format!("Error processing packet: {e}")); - Ok(IbcReceiveResponse::new() - .set_ack(acknowledgement) + Ok(IbcReceiveResponse::new(acknowledgement) .add_event(Event::new("ibc").add_attribute("packet", "receive"))) }) } @@ -843,8 +844,7 @@ fn receive_deliver_beacon( .with_gas_limit(callback_gas_limit); let ack = StdAck::success(to_json_binary(&OutPacketAck::DeliverBeacon {})?); - Ok(IbcReceiveResponse::new() - .set_ack(ack) + Ok(IbcReceiveResponse::new(ack) .add_attribute(ATTR_ACTION, "receive_deliver_beacon") .add_attribute("job_id", job_id) .add_submessage(msg)) @@ -859,9 +859,7 @@ fn receive_welcome( config.payment = Some(payment); CONFIG.save(deps.storage, &config)?; let ack = StdAck::success(to_json_binary(&OutPacketAck::Welcome {})?); - Ok(IbcReceiveResponse::new() - .set_ack(ack) - .add_attribute(ATTR_ACTION, "receive_welcome")) + Ok(IbcReceiveResponse::new(ack).add_attribute(ATTR_ACTION, "receive_welcome")) } fn receive_push_beacon_price( @@ -873,9 +871,7 @@ fn receive_push_beacon_price( ) -> Result { update_nois_beacon_price(deps, timestamp, amount, denom)?; let ack = StdAck::success(to_json_binary(&OutPacketAck::PushBeaconPrice {})?); - Ok(IbcReceiveResponse::new() - .set_ack(ack) - .add_attribute(ATTR_ACTION, "receive_push_beacon_price")) + Ok(IbcReceiveResponse::new(ack).add_attribute(ATTR_ACTION, "receive_push_beacon_price")) } #[cfg_attr(not(feature = "library"), ::cosmwasm_std::entry_point)] @@ -956,17 +952,18 @@ pub fn ibc_packet_timeout( #[cfg(test)] mod tests { + use std::collections::HashSet; + use crate::state::OperationalMode; use super::*; use cosmwasm_std::{ - coins, + coin, coins, testing::{ - mock_dependencies, mock_dependencies_with_balance, mock_env, + message_info, mock_dependencies, mock_dependencies_with_balance, mock_env, mock_ibc_channel_close_confirm, mock_ibc_channel_close_init, mock_ibc_channel_connect_ack, mock_ibc_channel_connect_confirm, - mock_ibc_channel_open_init, mock_ibc_packet_ack, mock_info, MockApi, MockQuerier, - MockStorage, + mock_ibc_channel_open_init, mock_ibc_packet_ack, MockApi, MockQuerier, MockStorage, }, CosmosMsg, IbcAcknowledgement, OwnedDeps, ReplyOn, Uint128, }; @@ -977,27 +974,34 @@ mod tests { const MANAGER_ADDRESS: &str = "some-manager"; const DAPP_ADDRESS: &str = "dapp1"; + fn addr(input: &str) -> Addr { + MockApi::default().addr_make(input) + } + fn setup( instantiate_msg: Option, ) -> OwnedDeps { let initial_funds = vec![ - Coin::new(22334455, "unoisx"), - Coin::new( + coin(22334455, "unoisx"), + coin( 123321, "ibc/CB480EB3697F39DB828D9EFA021ABE681BFCD72E23894019B8DDB1AB94039081", ), ]; let mut deps = mock_dependencies_with_balance(&initial_funds); + + let creator = deps.api.addr_make(CREATOR); + let msg = instantiate_msg.unwrap_or_else(|| InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(creator.to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: None, allowlist: None, }); - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); deps @@ -1025,16 +1029,17 @@ mod tests { #[test] fn instantiate_works() { let mut deps = mock_dependencies(); + let manager = deps.api.addr_make(CREATOR); let msg = InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(manager.to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: None, allowlist: None, }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&manager, &[]); let res = instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(0, res.messages.len()); } @@ -1050,10 +1055,12 @@ mod tests { // Requires a channel to forward requests to setup_channel(deps.as_mut()); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let msg = ExecuteMsg::GetNextRandomness { job_id: "foo".to_string(), }; - let info = mock_info(DAPP_ADDRESS, &coins(22334455, "unoisx")); + let info = message_info(&dapp, &coins(22334455, "unoisx")); let res = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(res.messages.len(), 1); let out_msg = &res.messages[0]; @@ -1070,26 +1077,28 @@ mod tests { let mut deps = setup(None); setup_channel(deps.as_mut()); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + // Job ID too long let msg = ExecuteMsg::GetNextRandomness { job_id: "cb480eb3697f39db828d9efa021abe681bfcd72e23894019b8ddb1ab94039081-and-counting" .to_string(), }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::JobIdTooLong)); } #[test] fn get_next_randomness_for_allowed_address() { + let creator = addr(CREATOR); let mut deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(creator.to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: Some(true), - allowlist: Some(vec![CREATOR.to_string()]), + allowlist: Some(vec![creator.to_string()]), })); setup_channel(deps.as_mut()); @@ -1098,7 +1107,7 @@ mod tests { let res = execute( deps.as_mut(), mock_env(), - mock_info(CREATOR, &coins(22334455, "unoisx")), + message_info(&creator, &coins(22334455, "unoisx")), msg, ) .unwrap(); @@ -1114,23 +1123,26 @@ mod tests { #[test] fn get_next_randomness_for_disallowed_address() { + let creator = addr(CREATOR); let mut deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(creator.to_string()), + prices: vec![Coin::new(1_000000u128, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: Some(true), - allowlist: Some(vec![CREATOR.to_string()]), + allowlist: Some(vec![creator.to_string()]), })); setup_channel(deps.as_mut()); + let anon = deps.api.addr_make("anon"); + // Sender in allowlist let msg = ExecuteMsg::GetNextRandomness { job_id: "1".into() }; let err = execute( deps.as_mut(), mock_env(), - mock_info("disallowed", &coins(22334455, "unoisx")), + message_info(&anon, &coins(22334455, "unoisx")), msg, ); assert!(matches!(err, Err(ContractError::SenderNotAllowed))); @@ -1143,11 +1155,13 @@ mod tests { // Requires a channel to forward requests to setup_channel(deps.as_mut()); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let msg = ExecuteMsg::GetRandomnessAfter { after: Timestamp::from_seconds(1666343642), job_id: "foo".to_string(), }; - let info = mock_info(DAPP_ADDRESS, &coins(22334455, "unoisx")); + let info = message_info(&dapp, &coins(22334455, "unoisx")); let res = execute(deps.as_mut(), mock_env(), info, msg).unwrap(); assert_eq!(res.messages.len(), 1); let out_msg = &res.messages[0]; @@ -1164,14 +1178,15 @@ mod tests { let mut deps = setup(None); setup_channel(deps.as_mut()); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + // Job ID too long let msg = ExecuteMsg::GetRandomnessAfter { after: Timestamp::from_seconds(1666343642), job_id: "cb480eb3697f39db828d9efa021abe681bfcd72e23894019b8ddb1ab94039081-and-counting" .to_string(), }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::JobIdTooLong)); } @@ -1182,6 +1197,8 @@ mod tests { // Requires a channel to forward requests to setup_channel(deps.as_mut()); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let instantiate_time = mock_env().block.time; // after == instantiate_time works @@ -1189,7 +1206,7 @@ mod tests { after: instantiate_time, job_id: "foo".to_string(), }; - let info = mock_info(DAPP_ADDRESS, &coins(22334455, "unoisx")); + let info = message_info(&dapp, &coins(22334455, "unoisx")); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); // after < instantiate_time fails @@ -1197,7 +1214,7 @@ mod tests { after: instantiate_time.minus_nanos(1), job_id: "foo".to_string(), }; - let info = mock_info(DAPP_ADDRESS, &coins(22334455, "unoisx")); + let info = message_info(&dapp, &coins(22334455, "unoisx")); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { ContractError::AfterTooLow { min_after, after } => { @@ -1212,7 +1229,7 @@ mod tests { after: Timestamp::from_nanos(15717974198793055330), job_id: "foo".to_string(), }; - let info = mock_info(DAPP_ADDRESS, &coins(22334455, "unoisx")); + let info = message_info(&dapp, &coins(22334455, "unoisx")); let err = execute(deps.as_mut(), mock_env(), info, msg).unwrap_err(); match err { ContractError::AfterTooHigh { max_after, after } => { @@ -1227,10 +1244,12 @@ mod tests { fn set_config_works() { let mut deps = setup(None); + let creator = deps.api.addr_make(CREATOR); + // Check original config let ConfigResponse { config: original } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); - assert_eq!(original.manager, Some(Addr::unchecked(CREATOR))); + assert_eq!(original.manager, Some(creator.clone())); assert_eq!(original.callback_gas_limit, 500_000); assert_eq!(original.allowlist_enabled, Some(false)); @@ -1246,7 +1265,7 @@ mod tests { min_after: None, max_after: None, }; - execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); let ConfigResponse { config } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); assert_eq!(config, original); @@ -1263,7 +1282,7 @@ mod tests { min_after: None, max_after: None, }; - execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); let ConfigResponse { config } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); // Updated @@ -1286,7 +1305,7 @@ mod tests { min_after: None, max_after: None, }; - execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); let ConfigResponse { config } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); // Updated @@ -1309,7 +1328,7 @@ mod tests { min_after: None, max_after: None, }; - execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); let ConfigResponse { config } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); // Updated @@ -1324,16 +1343,20 @@ mod tests { #[test] fn set_config_only_allowed_for_manager() { let mut deps = mock_dependencies(); + + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let creator = deps.api.addr_make(CREATOR); + let msg = InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(creator.to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: None, allowlist: None, }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // Edit config @@ -1348,8 +1371,7 @@ mod tests { min_after: None, max_after: None, }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); } @@ -1357,25 +1379,29 @@ mod tests { fn withdraw_works() { let mut deps = setup(None); + let creator = deps.api.addr_make(CREATOR); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let some = deps.api.addr_make("some-address"); + let msg = ExecuteMsg::Withdraw { denom: "unoisx".to_string(), amount: Some(Uint128::new(12)), - address: "some-address".to_string(), + address: some.to_string(), }; let err = execute( deps.as_mut(), mock_env(), - mock_info(DAPP_ADDRESS, &[]), + message_info(&dapp, &[]), msg.clone(), ) .unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); - let res = execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); assert_eq!( res.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "some-address".to_string(), + to_address: some.to_string(), amount: coins(12, "unoisx"), }) ); @@ -1385,29 +1411,33 @@ mod tests { fn withdraw_all_works() { let mut deps = setup(None); + let creator = deps.api.addr_make(CREATOR); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let some = deps.api.addr_make("some-address"); + let msg = ExecuteMsg::Withdraw { denom: "unoisx".to_string(), amount: None, - address: "some-address".to_string(), + address: some.to_string(), }; // Withdraw by dapp let err = execute( deps.as_mut(), mock_env(), - mock_info(DAPP_ADDRESS, &[]), + message_info(&dapp, &[]), msg.clone(), ) .unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); // Withdraw by manager - let res = execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + let res = execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); assert_eq!(res.messages.len(), 1); assert_eq!( res.messages[0].msg, CosmosMsg::Bank(BankMsg::Send { - to_address: "some-address".to_string(), + to_address: some.to_string(), amount: coins(22334455, "unoisx"), }) ); @@ -1417,41 +1447,45 @@ mod tests { fn withdraw_when_manager_is_not_set_withdraws_are_unauthorised() { // Check that if manager not set, a random person cannot execute manager-like operations. let mut deps = mock_dependencies(); + + let creator = deps.api.addr_make(CREATOR); + let manager = deps.api.addr_make(MANAGER_ADDRESS); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let some = deps.api.addr_make("some-address"); + let msg = InstantiateMsg { manager: None, - prices: vec![Coin::new(1_000000, "unoisx")], + prices: vec![coin(1_000000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: None, allowlist: None, }; - let info = mock_info(CREATOR, &[]); + let info = message_info(&creator, &[]); instantiate(deps.as_mut(), mock_env(), info, msg).unwrap(); // withdraw let msg = ExecuteMsg::Withdraw { denom: "unoisx".to_string(), amount: Some(Uint128::new(12)), - address: "some-address".to_string(), + address: some.to_string(), }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); // withdraw all let msg = ExecuteMsg::Withdraw { denom: "unoisx".to_string(), amount: None, - address: "some-address".to_string(), + address: some.to_string(), }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); // Edit config let msg = ExecuteMsg::SetConfig { - manager: Some(MANAGER_ADDRESS.to_string()), + manager: Some(manager.to_string()), prices: None, payment: None, nois_beacon_price: None, @@ -1462,39 +1496,45 @@ mod tests { max_after: None, }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); } #[test] fn update_allowlist_works() { let mut deps = setup(None); + + let creator = deps.api.addr_make(CREATOR); + let aaa = deps.api.addr_make("aaa"); + let bbb = deps.api.addr_make("bbb"); + let ccc = deps.api.addr_make("ccc"); + let msg = ExecuteMsg::UpdateAllowlist { - add: vec!["aaa".to_owned(), "ccc".to_owned()], - remove: vec!["aaa".to_owned(), "bbb".to_owned()], + add: vec![aaa.to_string(), ccc.to_string()], + remove: vec![aaa.to_string(), bbb.to_string()], }; - execute(deps.as_mut(), mock_env(), mock_info(CREATOR, &[]), msg).unwrap(); + execute(deps.as_mut(), mock_env(), message_info(&creator, &[]), msg).unwrap(); - assert!(!ALLOWLIST.has(&deps.storage, &Addr::unchecked("bbb"))); - assert!(ALLOWLIST.has(&deps.storage, &Addr::unchecked("ccc"))); + assert!(!ALLOWLIST.has(&deps.storage, &bbb)); + assert!(ALLOWLIST.has(&deps.storage, &ccc)); // If an address is both added and removed, err on the side or removing it, // hence, here we check that "aaa" is indeed not found. - assert!(!ALLOWLIST.has(&deps.storage, &Addr::unchecked("aaa"))); + assert!(!ALLOWLIST.has(&deps.storage, &aaa)); } #[test] fn update_allowlist_fails_for_non_manager() { let mut deps = setup(None); + let dapp = deps.api.addr_make(DAPP_ADDRESS); + let msg = ExecuteMsg::UpdateAllowlist { add: vec!["aaa".to_owned(), "ccc".to_owned()], remove: vec!["aaa".to_owned(), "bbb".to_owned()], }; - let err = - execute(deps.as_mut(), mock_env(), mock_info(DAPP_ADDRESS, &[]), msg).unwrap_err(); + let err = execute(deps.as_mut(), mock_env(), message_info(&dapp, &[]), msg).unwrap_err(); assert!(matches!(err, ContractError::Unauthorized)); } @@ -1545,10 +1585,10 @@ mod tests { #[test] fn query_allowlist_works() { // some list - let addr_in_allowlist = vec![String::from("addr2"), String::from("addr1")]; + let addr_in_allowlist = vec![addr("addr2").to_string(), addr("addr1").to_string()]; let deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(addr(CREATOR).to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, @@ -1558,12 +1598,15 @@ mod tests { let AllowlistResponse { allowed } = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Allowlist {}).unwrap()).unwrap(); - assert_eq!(allowed, ["addr1", "addr2"]); + assert_eq!( + allowed.into_iter().collect::>(), + HashSet::from([addr("addr1").to_string(), addr("addr2").to_string()]) + ); // empty list let deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(addr(CREATOR).to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, @@ -1578,16 +1621,16 @@ mod tests { #[test] fn query_is_allowed_works_when_allowlist_enabled() { - let addr_in_allowlist = String::from("addr1"); - let addr_not_in_allowlist = String::from("addr2"); + let addr_in_allowlist = addr("addr1"); + let addr_not_in_allowlist = addr("addr2"); let deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(addr(CREATOR).to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: Some(true), - allowlist: Some(vec![addr_in_allowlist.clone()]), + allowlist: Some(vec![addr_in_allowlist.to_string()]), })); // expect the address IN allow list to return true @@ -1596,7 +1639,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - address: addr_in_allowlist, + address: addr_in_allowlist.to_string(), }, ) .unwrap(), @@ -1610,7 +1653,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - address: addr_not_in_allowlist, + address: addr_not_in_allowlist.to_string(), }, ) .unwrap(), @@ -1621,16 +1664,17 @@ mod tests { #[test] fn query_is_allowed_works_when_allowlist_disabled() { - let addr_in_allowlist = String::from("addr1"); - let addr_not_in_allowlist = String::from("addr2"); + let creator = addr(CREATOR); + let addr_in_allowlist = addr("addr1"); + let addr_not_in_allowlist = addr("addr2"); let deps = setup(Some(InstantiateMsg { - manager: Some(CREATOR.to_string()), - prices: vec![Coin::new(1_000000, "unoisx")], + manager: Some(creator.to_string()), + prices: vec![coin(1_000000, "unoisx")], test_mode: Some(true), callback_gas_limit: 500_000, mode: OperationalMode::Funded {}, allowlist_enabled: Some(false), - allowlist: Some(vec![addr_in_allowlist.clone()]), + allowlist: Some(vec![addr_in_allowlist.to_string()]), })); // expect the address IN allow list to return true @@ -1639,7 +1683,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - address: addr_in_allowlist, + address: addr_in_allowlist.to_string(), }, ) .unwrap(), @@ -1653,7 +1697,7 @@ mod tests { deps.as_ref(), mock_env(), QueryMsg::IsAllowlisted { - address: addr_not_in_allowlist, + address: addr_not_in_allowlist.to_string(), }, ) .unwrap(), diff --git a/contracts/nois-sink/Cargo.toml b/contracts/nois-sink/Cargo.toml index 0cc0b0a8..eed78b6c 100644 --- a/contracts/nois-sink/Cargo.toml +++ b/contracts/nois-sink/Cargo.toml @@ -12,14 +12,11 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["iterator"] } -cosmwasm-schema = { version = "1.5.4" } -cw-storage-plus = { version = "1.1.0" } +cosmwasm-std = { version = "2.0.4", features = ["iterator"] } +cosmwasm-schema = { version = "2.0.4" } +cw-storage-plus = { version = "2" } cw2.workspace = true nois.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } diff --git a/contracts/nois-sink/src/contract.rs b/contracts/nois-sink/src/contract.rs index e45ce2c0..df71683d 100644 --- a/contracts/nois-sink/src/contract.rs +++ b/contracts/nois-sink/src/contract.rs @@ -180,8 +180,8 @@ mod tests { use super::*; use crate::msg::{ExecuteMsg, QueriedAsh}; - use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; - use cosmwasm_std::{from_json, Addr, Attribute, Coin, Timestamp, Uint128}; + use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env}; + use cosmwasm_std::{coin, from_json, Attribute, Coin, Timestamp, Uint128}; const DEFAULT_TIME: Timestamp = Timestamp::from_nanos(1_571_797_419_879_305_533); @@ -199,44 +199,53 @@ mod tests { fn burn_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let burner1 = deps.api.addr_make("burner-1"); + let burner2 = deps.api.addr_make("burner-2"); + let burner3 = deps.api.addr_make("burner-3"); + let burner4 = deps.api.addr_make("burner-4"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg {}; let env = mock_env(); instantiate(deps.as_mut(), env.clone(), info, msg).unwrap(); let msg = ExecuteMsg::Burn {}; - let info = mock_info("creator", &[Coin::new(1_000, "bitcoin".to_string())]); + let info = message_info(&creator, &[coin(1_000, "bitcoin".to_string())]); let err = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap_err(); assert_eq!(err, ContractError::WrongDenom); - let info = mock_info( - "creator", + let info = message_info( + &creator, &[ - Coin::new(1_000, "unois".to_string()), - Coin::new(1_000, "bitcoin".to_string()), + coin(1_000, "unois".to_string()), + coin(1_000, "bitcoin".to_string()), ], ); let err = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap_err(); assert_eq!(err, ContractError::TooManyCoins); - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap_err(); assert_eq!(err, ContractError::NoCoins); - let info = mock_info("burner-1", &[Coin::new(1_000, "unois".to_string())]); + let info = message_info(&burner1, &[coin(1_000, "unois".to_string())]); let resp = execute(deps.as_mut(), env.clone(), info, msg.clone()).unwrap(); assert_eq!( first_attr(&resp.attributes, "burnt_amount").unwrap(), "1000unois" ); - assert_eq!(first_attr(&resp.attributes, "burner").unwrap(), "burner-1"); + assert_eq!( + first_attr(&resp.attributes, "burner").unwrap(), + burner1.as_str() + ); assert_eq!( first_attr(&resp.attributes, "time").unwrap(), "1571797419.879305533" ); - let info = mock_info("burner-2", &[Coin::new(2_000, "unois".to_string())]); + let info = message_info(&burner2, &[coin(2_000, "unois".to_string())]); execute(deps.as_mut(), env.clone(), info, msg.clone()).unwrap(); - let info = mock_info("burner-3", &[Coin::new(3_000, "unois".to_string())]); + let info = message_info(&burner3, &[coin(3_000, "unois".to_string())]); execute(deps.as_mut(), env.clone(), info, msg.clone()).unwrap(); - let info = mock_info("burner-4", &[Coin::new(4_000, "unois".to_string())]); + let info = message_info(&burner4, &[coin(4_000, "unois".to_string())]); execute(deps.as_mut(), env, info, msg).unwrap(); // Test Query Asc @@ -257,26 +266,26 @@ mod tests { [ QueriedAsh { id: 1, - burner: Some(Addr::unchecked("burner-1")), - amount: Coin::new(1_000, "unois"), + burner: Some(burner1.clone()), + amount: coin(1_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 2, - burner: Some(Addr::unchecked("burner-2")), - amount: Coin::new(2_000, "unois"), + burner: Some(burner2.clone()), + amount: coin(2_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("burner-3")), - amount: Coin::new(3_000, "unois"), + burner: Some(burner3.clone()), + amount: coin(3_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 4, - burner: Some(Addr::unchecked("burner-4")), - amount: Coin::new(4_000, "unois"), + burner: Some(burner4.clone()), + amount: coin(4_000, "unois"), time: DEFAULT_TIME }, ] @@ -300,26 +309,26 @@ mod tests { [ QueriedAsh { id: 4, - burner: Some(Addr::unchecked("burner-4")), - amount: Coin::new(4_000, "unois"), + burner: Some(burner4.clone()), + amount: coin(4_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("burner-3")), - amount: Coin::new(3_000, "unois"), + burner: Some(burner3.clone()), + amount: coin(3_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 2, - burner: Some(Addr::unchecked("burner-2")), - amount: Coin::new(2_000, "unois"), + burner: Some(burner2.clone()), + amount: coin(2_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 1, - burner: Some(Addr::unchecked("burner-1")), - amount: Coin::new(1_000, "unois"), + burner: Some(burner1.clone()), + amount: coin(1_000, "unois"), time: DEFAULT_TIME }, ] @@ -330,22 +339,27 @@ mod tests { fn burn_native_works() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let burner1 = deps.api.addr_make("burner-1"); + let burner4 = deps.api.addr_make("burner-4"); + let joe = deps.api.addr_make("joe"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg {}; let env = mock_env(); instantiate(deps.as_mut(), env.to_owned(), info, msg).unwrap(); let msg = ExecuteMsg::BurnBalance {}; - let info = mock_info("creator", &[Coin::new(1_000, "unois".to_string())]); + let info = message_info(&creator, &[coin(1_000, "unois".to_string())]); let err = execute(deps.as_mut(), mock_env(), info, msg.clone()).unwrap_err(); assert_eq!(err, ContractError::NonPayableMessage); - let info = mock_info("creator", &[]); + let info = message_info(&creator, &[]); let err = execute(deps.as_mut(), mock_env(), info, msg.to_owned()).unwrap_err(); assert_eq!(err, ContractError::NoFundsToBurn); let contract = env.contract.address; - deps.querier.update_balance( + deps.querier.bank.update_balance( contract.to_owned(), vec![Coin { denom: "unois".to_string(), @@ -353,7 +367,7 @@ mod tests { }], ); - let info = mock_info("burner-1", &[]); + let info = message_info(&burner1, &[]); let response = execute(deps.as_mut(), mock_env(), info, msg.to_owned()).unwrap(); assert_eq!( response.messages[0].msg, @@ -365,13 +379,13 @@ mod tests { }) ); // Send 3 burn messages - for a in [1, 2] { + for a in [1u128, 2] { let msg = ExecuteMsg::Burn {}; - let info = mock_info("joe", &[Coin::new(a, "unois")]); + let info = message_info(&joe, &[Coin::new(a, "unois")]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } - let info = mock_info("burner-4", &[]); - deps.querier.update_balance( + let info = message_info(&burner4, &[]); + deps.querier.bank.update_balance( contract, vec![Coin { denom: "unois".to_string(), @@ -398,25 +412,25 @@ mod tests { QueriedAsh { id: 1, burner: None, - amount: Coin::new(100_000_000, "unois"), + amount: coin(100_000_000, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 2, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(1, "unois"), + burner: Some(joe.clone()), + amount: coin(1, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(2, "unois"), + burner: Some(joe.clone()), + amount: coin(2, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 4, burner: None, - amount: Coin::new(5000, "unois"), + amount: coin(5000, "unois"), time: DEFAULT_TIME }, ] @@ -427,15 +441,18 @@ mod tests { fn query_works_for_more_than_10_elements() { let mut deps = mock_dependencies(); - let info = mock_info("creator", &[]); + let creator = deps.api.addr_make("creator"); + let joe = deps.api.addr_make("joe"); + + let info = message_info(&creator, &[]); let msg = InstantiateMsg {}; let env = mock_env(); instantiate(deps.as_mut(), env, info, msg).unwrap(); // Send 12 burn messages - for a in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] { + for a in [1u128, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] { let msg = ExecuteMsg::Burn {}; - let info = mock_info("joe", &[Coin::new(a, "unois")]); + let info = message_info(&joe, &[Coin::new(a, "unois")]); execute(deps.as_mut(), mock_env(), info, msg).unwrap(); } @@ -457,20 +474,20 @@ mod tests { [ QueriedAsh { id: 1, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(1, "unois"), + burner: Some(joe.clone()), + amount: coin(1, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 2, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(2, "unois"), + burner: Some(joe.clone()), + amount: coin(2, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(3, "unois"), + burner: Some(joe.clone()), + amount: coin(3, "unois"), time: DEFAULT_TIME }, ] @@ -494,20 +511,20 @@ mod tests { [ QueriedAsh { id: 3, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(3, "unois"), + burner: Some(joe.clone()), + amount: coin(3, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 4, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(4, "unois"), + burner: Some(joe.clone()), + amount: coin(4, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 5, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(5, "unois"), + burner: Some(joe.clone()), + amount: coin(5, "unois"), time: DEFAULT_TIME }, ] @@ -531,74 +548,74 @@ mod tests { [ QueriedAsh { id: 1, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(1, "unois"), + burner: Some(joe.clone()), + amount: coin(1, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 2, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(2, "unois"), + burner: Some(joe.clone()), + amount: coin(2, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(3, "unois"), + burner: Some(joe.clone()), + amount: coin(3, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 4, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(4, "unois"), + burner: Some(joe.clone()), + amount: coin(4, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 5, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(5, "unois"), + burner: Some(joe.clone()), + amount: coin(5, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 6, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(6, "unois"), + burner: Some(joe.clone()), + amount: coin(6, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 7, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(7, "unois"), + burner: Some(joe.clone()), + amount: coin(7, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 8, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(8, "unois"), + burner: Some(joe.clone()), + amount: coin(8, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 9, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(9, "unois"), + burner: Some(joe.clone()), + amount: coin(9, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 10, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(10, "unois"), + burner: Some(joe.clone()), + amount: coin(10, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 11, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(11, "unois"), + burner: Some(joe.clone()), + amount: coin(11, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 12, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(12, "unois"), + burner: Some(joe.clone()), + amount: coin(12, "unois"), time: DEFAULT_TIME }, ] @@ -622,20 +639,20 @@ mod tests { [ QueriedAsh { id: 5, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(5, "unois"), + burner: Some(joe.clone()), + amount: coin(5, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 4, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(4, "unois"), + burner: Some(joe.clone()), + amount: coin(4, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 3, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(3, "unois"), + burner: Some(joe.clone()), + amount: coin(3, "unois"), time: DEFAULT_TIME }, ] @@ -659,14 +676,14 @@ mod tests { [ QueriedAsh { id: 2, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(2, "unois"), + burner: Some(joe.clone()), + amount: coin(2, "unois"), time: DEFAULT_TIME }, QueriedAsh { id: 1, - burner: Some(Addr::unchecked("joe")), - amount: Coin::new(1, "unois"), + burner: Some(joe.clone()), + amount: coin(1, "unois"), time: DEFAULT_TIME }, ] diff --git a/packages/drand-common/Cargo.toml b/packages/drand-common/Cargo.toml index 79ac40a4..fbec81f3 100644 --- a/packages/drand-common/Cargo.toml +++ b/packages/drand-common/Cargo.toml @@ -6,6 +6,6 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["iterator", "ibc3"] } +cosmwasm-std = { version = "2.0.4", features = ["iterator"] } [dev-dependencies] diff --git a/packages/misc/Cargo.toml b/packages/misc/Cargo.toml index e9063e37..ff669ddb 100644 --- a/packages/misc/Cargo.toml +++ b/packages/misc/Cargo.toml @@ -7,7 +7,7 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["ibc3"] } +cosmwasm-std = { version = "2.0.4" } nois.workspace = true hex = { version = "0.4" } bech32 = "0.9.1" diff --git a/packages/multitest/Cargo.toml b/packages/multitest/Cargo.toml index bc9e4e3c..02662091 100644 --- a/packages/multitest/Cargo.toml +++ b/packages/multitest/Cargo.toml @@ -12,9 +12,6 @@ license = "Apache-2.0" crate-type = ["cdylib", "rlib"] [features] -# for quicker tests, cargo test --lib -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] [dependencies] nois-drand = { path = "../../contracts/nois-drand"} @@ -24,7 +21,7 @@ nois-payment = { path = "../../contracts/nois-payment" } nois-proxy = { path = "../../contracts/nois-proxy" } nois-proxy-governance-owned = { path = "../../contracts/nois-proxy-governance-owned" } -cosmwasm-std = { version = "1.5.4", features = ["iterator", "ibc3"] } -cw-multi-test = "0.18.0" +cosmwasm-std = { version = "2.0.4", features = ["iterator"] } +cw-multi-test = "2" [dev-dependencies] diff --git a/packages/multitest/src/lib.rs b/packages/multitest/src/lib.rs index cc6f3e94..d1361241 100644 --- a/packages/multitest/src/lib.rs +++ b/packages/multitest/src/lib.rs @@ -1,11 +1,16 @@ // Testing utils. See tests folder for actual tests. +use cosmwasm_std::testing::MockApi; use cosmwasm_std::{ coin, from_json, to_json_binary, Addr, Attribute, BalanceResponse, BankQuery, Coin, Querier, QueryRequest, }; use cw_multi_test::App; +pub fn addr(input: &str) -> Addr { + MockApi::default().addr_make(input) +} + /// Gets the value of the first attribute with the given key pub fn first_attr(data: impl AsRef<[Attribute]>, search_key: &str) -> Option { data.as_ref().iter().find_map(|a| { @@ -31,15 +36,10 @@ pub fn query_balance_native(app: &App, address: &Addr, denom: &str) -> Coin { balance.amount } -pub fn mint_native( - app: &mut App, - beneficiary: impl Into, - denom: impl Into, - amount: u128, -) { +pub fn mint_native(app: &mut App, beneficiary: &Addr, denom: impl Into, amount: u128) { app.sudo(cw_multi_test::SudoMsg::Bank( cw_multi_test::BankSudo::Mint { - to_address: beneficiary.into(), + to_address: beneficiary.to_string(), amount: vec![Coin::new(amount, denom)], }, )) diff --git a/packages/multitest/tests/drand-gateway.rs b/packages/multitest/tests/drand-gateway.rs index 72f138b7..8e4e0960 100644 --- a/packages/multitest/tests/drand-gateway.rs +++ b/packages/multitest/tests/drand-gateway.rs @@ -1,12 +1,8 @@ // Testing nois-drand and nois-gateway interaction -use cosmwasm_std::{ - testing::mock_env, Addr, Coin, Decimal, HexBinary, Timestamp, Uint128, Validator, -}; +use cosmwasm_std::{coin, testing::mock_env, Decimal, HexBinary, Timestamp, Uint128, Validator}; use cw_multi_test::{AppBuilder, ContractWrapper, Executor, StakingInfo}; -use nois_multitest::{first_attr, mint_native, payment_initial, query_balance_native}; - -const SINK: &str = "sink"; +use nois_multitest::{addr, first_attr, mint_native, payment_initial, query_balance_native}; #[test] fn integration_test() { @@ -23,12 +19,12 @@ fn integration_test() { }, ) .unwrap(); - let valoper1 = Validator { - address: "noislabs".to_string(), - commission: Decimal::percent(1), - max_commission: Decimal::percent(100), - max_change_rate: Decimal::percent(1), - }; + let valoper1 = Validator::new( + addr("noislabs").to_string(), // TODO: this should not be an account address + Decimal::percent(1), + Decimal::percent(100), + Decimal::percent(1), + ); let block = mock_env().block; router .staking @@ -36,8 +32,13 @@ fn integration_test() { .unwrap(); }); + let owner = addr("owner"); + let bossman = addr("bossman"); + let manager = addr("manager"); + let sink = addr("sink"); + // Mint 1000 NOIS for owner - mint_native(&mut app, "owner", "unois", 1_000_000_000); + mint_native(&mut app, &owner, "unois", 1_000_000_000); // Storing nois-drand code let code_nois_drand = ContractWrapper::new( @@ -51,14 +52,14 @@ fn integration_test() { let addr_nois_drand = app .instantiate_contract( code_id_nois_drand, - Addr::unchecked("owner"), + owner.clone(), &nois_drand::msg::InstantiateMsg { - manager: "bossman".to_string(), + manager: bossman.to_string(), incentive_point_price: Uint128::new(1_500), incentive_denom: "unois".to_string(), min_round: 0, }, - &[Coin::new(600_000_000, "unois")], + &[coin(600_000_000, "unois")], "Nois-Drand", None, ) @@ -70,7 +71,7 @@ fn integration_test() { assert_eq!( resp, nois_drand::msg::ConfigResponse { - manager: Addr::unchecked("bossman"), + manager: bossman.clone(), gateway: None, min_round: 0, incentive_point_price: Uint128::new(1_500), @@ -98,13 +99,13 @@ fn integration_test() { let addr_nois_gateway = app .instantiate_contract( code_id_nois_gateway, - Addr::unchecked("owner"), + owner.clone(), &nois_gateway::msg::InstantiateMsg { - manager: "manager".to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: code_id_nois_payment, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }, &[], "Nois-Gateway", @@ -122,17 +123,17 @@ fn integration_test() { nois_gateway::msg::ConfigResponse { drand: None, trusted_sources: None, - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: code_id_nois_payment, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); // Set gateway address to drand app.execute_contract( - Addr::unchecked("bossman"), + bossman.clone(), addr_nois_drand.to_owned(), &nois_drand::msg::ExecuteMsg::SetConfig { manager: None, @@ -151,7 +152,7 @@ fn integration_test() { assert_eq!( resp, nois_drand::msg::ConfigResponse { - manager: Addr::unchecked("bossman"), + manager: bossman.clone(), gateway: Some(addr_nois_gateway.clone()), min_round: 0, incentive_point_price: Uint128::new(1_500), @@ -161,7 +162,7 @@ fn integration_test() { // Set drand address to gateway app.execute_contract( - Addr::unchecked("manager"), + manager.clone(), addr_nois_gateway.to_owned(), &nois_gateway::msg::ExecuteMsg::SetConfig { manager: None, @@ -182,11 +183,11 @@ fn integration_test() { nois_gateway::msg::ConfigResponse { drand: Some(addr_nois_drand.clone()), trusted_sources: Some(vec![addr_nois_drand.clone()]), - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: code_id_nois_payment, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); @@ -202,10 +203,10 @@ fn integration_test() { let addr_nois_proxy = app .instantiate_contract( code_id_nois_proxy, - Addr::unchecked("owner"), + owner.clone(), &nois_proxy::msg::InstantiateMsg { - manager: Some("manager".to_string()), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.to_string()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: nois_proxy::state::OperationalMode::Funded {}, @@ -228,8 +229,8 @@ fn integration_test() { resp, nois_proxy::msg::ConfigResponse { config: nois_proxy::state::Config { - manager: Some(Addr::unchecked("manager")), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.clone()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: false, callback_gas_limit: 500_000, payment: None, @@ -243,76 +244,72 @@ fn integration_test() { } ); - const BOT1: &str = "drand_bot_one"; - const BOT2: &str = "drand_bot_2"; - const BOT3: &str = "drand_bot_three33333"; - const BOT4: &str = "drand_bot_4"; - const BOT5: &str = "drand_bot_5"; - const BOT6: &str = "drand_bot_six_"; - const BOT7: &str = "drand_bot_7"; - const BOT8: &str = "drand_bot_8"; + let bot1 = addr("drand_bot_1"); + let bot2 = addr("drand_bot_two"); + let bot3 = addr("drand_bot_three33333"); + let bot4 = addr("drand_bot_4"); + let bot5 = addr("drand_bot_5"); + let bot6 = addr("drand_bot_six_"); + let bot7 = addr("drand_bot_7"); + let bot8 = addr("drand_bot_8"); + let new_bot = addr("new_bot"); // register bots let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT1.to_string(), + moniker: "bot1".to_string(), }; - app.execute_contract(Addr::unchecked(BOT1), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot1.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 2 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT2.to_string(), + moniker: "bot2".to_string(), }; - app.execute_contract(Addr::unchecked(BOT2), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot2.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 3 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT3.to_string(), + moniker: "bot3".to_string(), }; - app.execute_contract(Addr::unchecked(BOT3), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot3.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 4 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT4.to_string(), + moniker: "bot4".to_string(), }; - app.execute_contract(Addr::unchecked(BOT4), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot4.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 5 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT5.to_string(), + moniker: "bot5".to_string(), }; - app.execute_contract(Addr::unchecked(BOT5), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot5.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 6 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT6.to_string(), + moniker: "bot6".to_string(), }; - app.execute_contract(Addr::unchecked(BOT6), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot6.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 7 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT7.to_string(), + moniker: "bot7".to_string(), }; - app.execute_contract(Addr::unchecked(BOT7), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot7.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // register bot 8 let msg = nois_drand::msg::ExecuteMsg::RegisterBot { - moniker: BOT8.to_string(), + moniker: "bot8".to_string(), }; - app.execute_contract(Addr::unchecked(BOT8), addr_nois_drand.to_owned(), &msg, &[]) + app.execute_contract(bot8.clone(), addr_nois_drand.to_owned(), &msg, &[]) .unwrap(); // whitelist bot doesn't work by non admin let msg = nois_drand::msg::ExecuteMsg::UpdateAllowlistBots { - add: vec!["drand_bot".to_string()], + add: vec![new_bot.to_string()], remove: vec![], }; let err = app - .execute_contract( - Addr::unchecked("drand_bot"), - addr_nois_drand.to_owned(), - &msg, - &[], - ) + .execute_contract(new_bot, addr_nois_drand.to_owned(), &msg, &[]) .unwrap_err(); assert!(matches!( @@ -323,24 +320,19 @@ fn integration_test() { // add bot to allow list let msg = nois_drand::msg::ExecuteMsg::UpdateAllowlistBots { add: vec![ - BOT1.to_string(), - BOT2.to_string(), - BOT3.to_string(), - BOT4.to_string(), - BOT5.to_string(), - BOT6.to_string(), - BOT7.to_string(), - BOT8.to_string(), + bot1.to_string(), + bot2.to_string(), + bot3.to_string(), + bot4.to_string(), + bot5.to_string(), + bot6.to_string(), + bot7.to_string(), + bot8.to_string(), ], remove: vec![], }; - app.execute_contract( - Addr::unchecked("bossman"), - addr_nois_drand.to_owned(), - &msg, - &[], - ) - .unwrap(); + app.execute_contract(bossman.clone(), addr_nois_drand.to_owned(), &msg, &[]) + .unwrap(); // Add round const ROUND: u64 = 72775; @@ -351,7 +343,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT1), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot1.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -370,7 +362,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT2), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot2.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -389,7 +381,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT3), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot3.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -408,7 +400,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT4), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot4.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -427,7 +419,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT5), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot5.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -446,7 +438,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT6), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot6.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -465,7 +457,7 @@ fn integration_test() { signature: HexBinary::from_hex(SIGNATURE).unwrap(), }; let resp = app - .execute_contract(Addr::unchecked(BOT7), addr_nois_drand.clone(), &msg, &[]) + .execute_contract(bot7.clone(), addr_nois_drand.clone(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); @@ -487,7 +479,7 @@ fn integration_test() { signature: HexBinary::from_hex("886832ac1b059709a8966347fc447773e15ceff1eada944504fa541ab71c1d1c9ff4f2bbc69f90669a0cf936d018ab52").unwrap(), }; let err = app - .execute_contract(Addr::unchecked(BOT8), addr_nois_drand, &msg, &[]) + .execute_contract(bot8.clone(), addr_nois_drand, &msg, &[]) .unwrap_err(); assert!(matches!( diff --git a/packages/multitest/tests/icecube.rs b/packages/multitest/tests/icecube.rs index 872fa945..9b95d005 100644 --- a/packages/multitest/tests/icecube.rs +++ b/packages/multitest/tests/icecube.rs @@ -1,8 +1,8 @@ use cosmwasm_std::{ - coin, testing::mock_env, Addr, BlockInfo, Coin, Decimal, Delegation, Uint128, Validator, + coin, testing::mock_env, Addr, BlockInfo, Decimal, Delegation, Uint128, Validator, }; use cw_multi_test::{AppBuilder, ContractWrapper, Executor, StakingInfo}; -use nois_multitest::{first_attr, mint_native, query_balance_native}; +use nois_multitest::{addr, first_attr, mint_native, query_balance_native}; #[test] fn integration_test() { @@ -19,12 +19,12 @@ fn integration_test() { }, ) .unwrap(); - let valoper1 = Validator { - address: "noislabs".to_string(), - commission: Decimal::percent(1), - max_commission: Decimal::percent(100), - max_change_rate: Decimal::percent(1), - }; + let valoper1 = Validator::new( + addr("noislabs").to_string(), // TODO: this should not be an account address + Decimal::percent(1), + Decimal::percent(100), + Decimal::percent(1), + ); let block = mock_env().block; router .staking @@ -32,6 +32,9 @@ fn integration_test() { .unwrap(); }); + let owner = addr("owner"); + let bossman = addr("bossman"); + // Storing nois-drand code let code_nois_drand = ContractWrapper::new( nois_drand::contract::execute, @@ -44,9 +47,9 @@ fn integration_test() { let addr_nois_drand = app .instantiate_contract( code_id_nois_drand, - Addr::unchecked("owner"), + owner.clone(), &nois_drand::msg::InstantiateMsg { - manager: "bossman".to_string(), + manager: bossman.to_string(), incentive_point_price: Uint128::new(20_000), incentive_denom: "unois".to_string(), min_round: 0, @@ -66,17 +69,17 @@ fn integration_test() { let code_id_nois_icecube = app.store_code(Box::new(code_nois_icecube)); //Mint some coins for owner - mint_native(&mut app, "owner", "unois", 100_000_000); + mint_native(&mut app, &owner, "unois", 100_000_000); // Instantiating nois-icecube contract let addr_nois_icecube = app .instantiate_contract( code_id_nois_icecube, - Addr::unchecked("owner"), + owner.clone(), &nois_icecube::msg::InstantiateMsg { - manager: "boss".to_string(), + manager: bossman.to_string(), }, - &[Coin::new(1_000_000, "unois")], + &[coin(1_000_000, "unois")], "Nois-Icecube", None, ) @@ -90,7 +93,7 @@ fn integration_test() { assert_eq!( resp, nois_icecube::msg::ConfigResponse { - manager: Addr::unchecked("boss"), + manager: bossman.clone(), drand: None, } ); @@ -116,18 +119,13 @@ fn integration_test() { )); let resp = app - .execute_contract( - Addr::unchecked("boss"), - addr_nois_icecube.to_owned(), - &msg, - &[], - ) + .execute_contract(bossman.clone(), addr_nois_icecube.to_owned(), &msg, &[]) .unwrap(); let wasm = resp.events.iter().find(|ev| ev.ty == "wasm").unwrap(); // Make sure the the tx passed assert_eq!( first_attr(&wasm.attributes, "nois-drand-address").unwrap(), - "contract0" + addr_nois_drand.to_string() ); // Query the new config of nois-icecube containing the nois-drand contract @@ -138,8 +136,8 @@ fn integration_test() { assert_eq!( resp, nois_icecube::msg::ConfigResponse { - manager: Addr::unchecked("boss"), - drand: Option::Some(Addr::unchecked("contract0")) + manager: bossman.clone(), + drand: Some(addr_nois_drand.clone()) } ); @@ -168,16 +166,11 @@ fn integration_test() { // Make nois-icecube delegate let msg = nois_icecube::msg::ExecuteMsg::Delegate { - addr: "noislabs".to_string(), + addr: addr("noislabs").to_string(), // TODO: this should not be an account address amount: Uint128::new(500_000), }; - app.execute_contract( - Addr::unchecked("boss"), - addr_nois_icecube.to_owned(), - &msg, - &[], - ) - .unwrap(); + app.execute_contract(bossman.clone(), addr_nois_icecube.to_owned(), &msg, &[]) + .unwrap(); // Check balance nois-icecube let balance = query_balance_native(&app, &addr_nois_icecube, "unois").amount; assert_eq!( @@ -189,11 +182,11 @@ fn integration_test() { app.wrap() .query_all_delegations(&addr_nois_icecube) .unwrap()[0], - Delegation { - amount: Coin::new(500_000, "unois"), - delegator: Addr::unchecked("contract1"), - validator: "noislabs".to_string(), - } + Delegation::new( + addr_nois_icecube.clone(), + addr("noislabs").to_string(), // TODO: this should not be an account address + coin(500_000, "unois"), + ) ); let block = app.block_info(); @@ -207,10 +200,10 @@ fn integration_test() { // Make nois-icecube claim let msg = nois_icecube::msg::ExecuteMsg::ClaimRewards { - addr: "noislabs".to_string(), + addr: addr("noislabs").to_string(), // TODO: this should not be an account address }; let resp = app - .execute_contract(Addr::unchecked("owner"), addr_nois_icecube, &msg, &[]) + .execute_contract(owner.clone(), addr_nois_icecube, &msg, &[]) .unwrap(); let withdraw_event = resp .events diff --git a/packages/multitest/tests/multitest.rs b/packages/multitest/tests/multitest.rs index e31e4999..d663533a 100644 --- a/packages/multitest/tests/multitest.rs +++ b/packages/multitest/tests/multitest.rs @@ -1,11 +1,8 @@ -use cosmwasm_std::{ - testing::mock_env, Addr, Coin, Decimal, HexBinary, Timestamp, Uint128, Validator, -}; +use cosmwasm_std::{coin, testing::mock_env, Decimal, HexBinary, Timestamp, Uint128, Validator}; use cw_multi_test::{AppBuilder, ContractWrapper, Executor, StakingInfo}; -use nois_multitest::{mint_native, payment_initial}; +use nois_multitest::{addr, mint_native, payment_initial}; const PAYMENT: u64 = 17; -const SINK: &str = "sink"; #[test] fn integration_test() { @@ -22,12 +19,12 @@ fn integration_test() { }, ) .unwrap(); - let valoper1 = Validator { - address: "noislabs".to_string(), - commission: Decimal::percent(1), - max_commission: Decimal::percent(100), - max_change_rate: Decimal::percent(1), - }; + let valoper1 = Validator::new( + addr("noislabs").to_string(), // TODO: this should not be an account address + Decimal::percent(1), + Decimal::percent(100), + Decimal::percent(1), + ); let block = mock_env().block; router .staking @@ -35,8 +32,13 @@ fn integration_test() { .unwrap(); }); + let owner = addr("owner"); + let manager = addr("manager"); + let sink = addr("sink"); + let drand = addr("drand_verifier_7"); + //Mint some coins for owner - mint_native(&mut app, "owner", "unois", 100_000_000); + mint_native(&mut app, &owner, "unois", 100_000_000); // Storing nois-gateway code let code_nois_gateway = ContractWrapper::new( @@ -50,13 +52,13 @@ fn integration_test() { let addr_nois_gateway = app .instantiate_contract( code_id_nois_gateway, - Addr::unchecked("owner"), + owner.clone(), &nois_gateway::msg::InstantiateMsg { - manager: "manager".to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }, &[], "Nois-Gateway", @@ -74,31 +76,24 @@ fn integration_test() { nois_gateway::msg::ConfigResponse { drand: None, trusted_sources: None, - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); - const DRAND: &str = "drand_verifier_7"; - // Set drand let msg = nois_gateway::msg::ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; let _resp = app - .execute_contract( - Addr::unchecked("manager"), - addr_nois_gateway.clone(), - &msg, - &[], - ) + .execute_contract(manager.clone(), addr_nois_gateway.clone(), &msg, &[]) .unwrap(); // Check updated config @@ -109,13 +104,13 @@ fn integration_test() { assert_eq!( resp, nois_gateway::msg::ConfigResponse { - drand: Some(Addr::unchecked(DRAND)), - trusted_sources: Some(vec![Addr::unchecked(DRAND)]), - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + drand: Some(drand.clone()), + trusted_sources: Some(vec![drand.clone()]), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); @@ -131,10 +126,10 @@ fn integration_test() { let addr_nois_proxy = app .instantiate_contract( code_id_nois_proxy, - Addr::unchecked("owner"), + owner.clone(), &nois_proxy::msg::InstantiateMsg { - manager: Some("manager".to_string()), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.to_string()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: nois_proxy::state::OperationalMode::Funded {}, @@ -156,8 +151,8 @@ fn integration_test() { resp, nois_proxy::msg::ConfigResponse { config: nois_proxy::state::Config { - manager: Some(Addr::unchecked("manager")), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.clone()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: false, callback_gas_limit: 500_000, payment: None, @@ -182,6 +177,6 @@ fn integration_test() { is_verifying_tx: true, }; let _resp = app - .execute_contract(Addr::unchecked(DRAND), addr_nois_gateway, &msg, &[]) + .execute_contract(drand.clone(), addr_nois_gateway, &msg, &[]) .unwrap(); } diff --git a/packages/multitest/tests/proxy-governance-owned.rs b/packages/multitest/tests/proxy-governance-owned.rs index 9b8eb02b..96190747 100644 --- a/packages/multitest/tests/proxy-governance-owned.rs +++ b/packages/multitest/tests/proxy-governance-owned.rs @@ -1,11 +1,10 @@ use cosmwasm_std::{ - testing::mock_env, Addr, Coin, Decimal, HexBinary, Timestamp, Uint128, Validator, + coin, testing::mock_env, Addr, Decimal, HexBinary, Timestamp, Uint128, Validator, }; use cw_multi_test::{AppBuilder, ContractWrapper, Executor, StakingInfo}; -use nois_multitest::{mint_native, payment_initial}; +use nois_multitest::{addr, mint_native, payment_initial}; const PAYMENT: u64 = 17; -const SINK: &str = "sink"; #[test] fn integration_test() { @@ -22,12 +21,12 @@ fn integration_test() { }, ) .unwrap(); - let valoper1 = Validator { - address: "noislabs".to_string(), - commission: Decimal::percent(1), - max_commission: Decimal::percent(100), - max_change_rate: Decimal::percent(1), - }; + let valoper1 = Validator::new( + addr("noislabs").to_string(), // TODO: this should not be an account address + Decimal::percent(1), + Decimal::percent(100), + Decimal::percent(1), + ); let block = mock_env().block; router .staking @@ -35,8 +34,13 @@ fn integration_test() { .unwrap(); }); + let owner = addr("owner"); + let manager = addr("manager"); + let sink = addr("sink"); + let drand = addr("drand_verifier_7"); + //Mint some coins for owner - mint_native(&mut app, "owner", "unois", 100_000_000); + mint_native(&mut app, &owner, "unois", 100_000_000); // Storing nois-gateway code let code_nois_gateway = ContractWrapper::new( @@ -50,13 +54,13 @@ fn integration_test() { let addr_nois_gateway = app .instantiate_contract( code_id_nois_gateway, - Addr::unchecked("owner"), + owner.clone(), &nois_gateway::msg::InstantiateMsg { - manager: "manager".to_string(), - price: Coin::new(1, "unois"), + manager: manager.to_string(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: SINK.to_string(), + sink: sink.to_string(), }, &[], "Nois-Gateway", @@ -74,31 +78,24 @@ fn integration_test() { nois_gateway::msg::ConfigResponse { drand: None, trusted_sources: None, - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); - const DRAND: &str = "drand_verifier_7"; - // Set drand let msg = nois_gateway::msg::ExecuteMsg::SetConfig { manager: None, price: None, - drand_addr: Some(DRAND.to_string()), - trusted_sources: Some(vec![DRAND.to_string()]), + drand_addr: Some(drand.to_string()), + trusted_sources: Some(vec![drand.to_string()]), payment_initial_funds: None, }; let _resp = app - .execute_contract( - Addr::unchecked("manager"), - addr_nois_gateway.clone(), - &msg, - &[], - ) + .execute_contract(manager.clone(), addr_nois_gateway.clone(), &msg, &[]) .unwrap(); // Check updated config @@ -109,13 +106,13 @@ fn integration_test() { assert_eq!( resp, nois_gateway::msg::ConfigResponse { - drand: Some(Addr::unchecked(DRAND)), - trusted_sources: Some(vec![Addr::unchecked(DRAND)]), - manager: Addr::unchecked("manager"), - price: Coin::new(1, "unois"), + drand: Some(drand.clone()), + trusted_sources: Some(vec![drand.clone()]), + manager: manager.clone(), + price: coin(1, "unois"), payment_code_id: PAYMENT, payment_initial_funds: payment_initial(), - sink: Addr::unchecked(SINK), + sink: sink.clone(), } ); @@ -134,8 +131,8 @@ fn integration_test() { code_id_nois_proxy, Addr::unchecked("owner"), &nois_proxy_governance_owned::msg::InstantiateMsg { - manager: Some("manager".to_string()), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.to_string()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: None, callback_gas_limit: 500_000, mode: nois_proxy_governance_owned::state::OperationalMode::Funded {}, @@ -160,8 +157,8 @@ fn integration_test() { resp, nois_proxy_governance_owned::msg::ConfigResponse { config: nois_proxy_governance_owned::state::Config { - manager: Some(Addr::unchecked("manager")), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.clone()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: false, callback_gas_limit: 500_000, payment: None, @@ -205,8 +202,8 @@ fn integration_test() { resp, nois_proxy_governance_owned::msg::ConfigResponse { config: nois_proxy_governance_owned::state::Config { - manager: Some(Addr::unchecked("manager")), - prices: vec![Coin::new(1_000_000, "unoisx")], + manager: Some(manager.clone()), + prices: vec![coin(1_000_000, "unoisx")], test_mode: false, callback_gas_limit: 678_900, payment: None, @@ -231,6 +228,6 @@ fn integration_test() { is_verifying_tx: true, }; let _resp = app - .execute_contract(Addr::unchecked(DRAND), addr_nois_gateway, &msg, &[]) + .execute_contract(drand.clone(), addr_nois_gateway, &msg, &[]) .unwrap(); } diff --git a/packages/nois-protocol/Cargo.toml b/packages/nois-protocol/Cargo.toml index 78900fb2..366226d8 100644 --- a/packages/nois-protocol/Cargo.toml +++ b/packages/nois-protocol/Cargo.toml @@ -6,8 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -cosmwasm-std = { version = "1.5.4", features = ["ibc3"] } -cosmwasm-schema = { version = "1.5.4" } +cosmwasm-std = { version = "2.0.4" } +cosmwasm-schema = { version = "2.0.4" } nois.workspace = true serde = { version = "1.0.103", default-features = false, features = ["derive"] } thiserror = { version = "1.0.23" }