diff --git a/Cargo.lock b/Cargo.lock index c52816ca..ce00ac4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,40 +13,149 @@ dependencies = [ "version_check", ] +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy 0.7.35", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "anyhow" -version = "1.0.91" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] -name = "astroport" -version = "3.12.2" +name = "ark-bls12-381" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdebdf96895f363e121710cb84bbbfa659cea1bb1470260d4976d1a7206b3b16" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "astroport-circular-buffer", - "cosmwasm-schema", - "cosmwasm-std", - "cw-asset", - "cw-storage-plus 0.15.1", - "cw-utils 1.0.3", - "cw20 0.15.1", - "cw3", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", "itertools 0.10.5", - "uint", + "num-traits", + "rayon", + "zeroize", ] [[package]] -name = "astroport-circular-buffer" -version = "0.2.0" +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm", + "ark-ff-macros", + "ark-serialize", + "ark-std", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rayon", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-poly" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c7369d3c4126804f861620db2221c15b5fa7b7718f12180e265b087c933fb6" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 0.15.1", - "thiserror", + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand", + "rayon", ] [[package]] @@ -67,11 +176,17 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "base64ct" -version = "1.6.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +checksum = "bb97d56060ee67d285efb8001fec9d2a4c710c32efd2e14b5cbb5ba71930fc2d" [[package]] name = "bech32" @@ -109,6 +224,12 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56953345e39537a3e18bdaeba4cb0c58a78c1f61f361dc0fa7c5c7340ae87c5f" +[[package]] +name = "bnum" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e31ea183f6ee62ac8b8a8cf7feddd766317adfb13ff469de57ce033efd6a790" + [[package]] name = "byteorder" version = "1.5.0" @@ -117,9 +238,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "serde", ] @@ -130,6 +251,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +dependencies = [ + "num-traits", +] + [[package]] name = "const-oid" version = "0.9.6" @@ -142,68 +272,133 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32560304ab4c365791fd307282f76637213d8083c1a98490c35159cd67852237" dependencies = [ - "prost", + "prost 0.12.6", "prost-types", "tendermint-proto", ] +[[package]] +name = "cosmwasm-core" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b6dc17e7fd89d0a0a58f12ef33f0bbdf09a6a14c3dfb383eae665e5889250e" + +[[package]] +name = "cosmwasm-crypto" +version = "1.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c82e56962f0f18c9a292aa59940e03a82ce15ef79b93679d5838bb8143f0df" +dependencies = [ + "digest 0.10.7", + "ed25519-zebra 3.1.0", + "k256", + "rand_core 0.6.4", + "thiserror 1.0.69", +] + [[package]] name = "cosmwasm-crypto" -version = "1.5.9" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba94b9f3fb79b9f1101b3e0c61995a557828e2c0d3f5579c1d0bfbea333c19e" +checksum = "aa2f53285517db3e33d825b3e46301efe845135778527e1295154413b2f0469e" dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "cosmwasm-core", + "curve25519-dalek 4.1.3", "digest 0.10.7", - "ed25519-zebra", + "ecdsa", + "ed25519-zebra 4.0.3", "k256", + "num-traits", + "p256", "rand_core 0.6.4", - "thiserror", + "rayon", + "sha2 0.10.8", + "thiserror 1.0.69", ] [[package]] name = "cosmwasm-derive" -version = "1.5.9" +version = "1.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d67457e4acb04e738788d3489e343957455df2c4643f2b53050eb052ca631d19" +checksum = "d9b804ff15a0e059c88f85ae0e868cf8c7aba9d61221e46f1ad7250f270628c7" dependencies = [ "syn 1.0.109", ] +[[package]] +name = "cosmwasm-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a782b93fae93e57ca8ad3e9e994e784583f5933aeaaa5c80a545c4b437be2047" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "cosmwasm-schema" -version = "1.5.8" +version = "1.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d388adfa9cb449557a92e9318121ac1a481fc4f599213b03a5b62699b403b4" +checksum = "5526ea839acb47bbf8fff031ed9aad86e74d43f77b089255417328c3664367d5" dependencies = [ - "cosmwasm-schema-derive", + "cosmwasm-schema-derive 1.5.11", "schemars", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-schema" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6984ab21b47a096e17ae4c73cea2123a704d4b6686c39421247ad67020d76f95" +dependencies = [ + "cosmwasm-schema-derive 2.2.2", + "schemars", + "serde", + "serde_json", + "thiserror 1.0.69", ] [[package]] name = "cosmwasm-schema-derive" -version = "1.5.8" +version = "1.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2411b389e56e6484f81ba955b758d02522d620c98fc960c4bd2251d48b7aa19f" +checksum = "10f41b99f41f840765d02ae858956bb52af910755976312082e90493c67db512" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "cosmwasm-schema-derive" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01c9214319017f6ebd8e299036e1f717fa9bb6724e758f7d6fb2477599d1a29" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "cosmwasm-std" -version = "1.5.9" +version = "1.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3745e9fd9aad96236c3d6f1a6d844249ed3bb6b92fcdae16d8fe067c7a5121e8" +checksum = "763340055b84e5482ed90fec8194ff7d59112267a09bbf5819c9e3edca8c052e" dependencies = [ - "base64", + "base64 0.21.7", "bech32 0.9.1", - "bnum", - "cosmwasm-crypto", - "cosmwasm-derive", + "bnum 0.10.0", + "cosmwasm-crypto 1.5.11", + "cosmwasm-derive 1.5.11", "derivative", "forward_ref", "hex", @@ -212,23 +407,66 @@ dependencies = [ "serde-json-wasm 0.5.2", "sha2 0.10.8", "static_assertions", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "cosmwasm-std" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf82335c14bd94eeb4d3c461b7aa419ecd7ea13c2efe24b97cd972bdb8044e7d" +dependencies = [ + "base64 0.22.1", + "bech32 0.11.0", + "bnum 0.11.0", + "cosmwasm-core", + "cosmwasm-crypto 2.2.2", + "cosmwasm-derive 2.2.2", + "derive_more", + "hex", + "rand_core 0.6.4", + "rmp-serde", + "schemars", + "serde", + "serde-json-wasm 1.0.1", + "sha2 0.10.8", + "static_assertions", + "thiserror 1.0.69", ] [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] [[package]] -name = "crunchy" -version = "0.2.2" +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto-bigint" @@ -266,163 +504,135 @@ dependencies = [ ] [[package]] -name = "cw-address-like" -version = "1.0.4" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451a4691083a88a3c0630a8a88799e9d4cd6679b7ce8ff22b8da2873ff31d380" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "cosmwasm-std", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", ] [[package]] -name = "cw-asset" -version = "3.1.1" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c999a12f8cd8736f6f86e9a4ede5905530cb23cfdef946b9da1c506ad1b70799" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-address-like", - "cw-storage-plus 1.2.0", - "cw20 1.1.2", - "thiserror", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "cw-address-like" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73553ee4dad5b1678977ff603e72c3fdd41518ca2b0bd9b245b21e4c72eafa9e" +dependencies = [ + "cosmwasm-std 2.2.2", ] [[package]] name = "cw-multi-test" -version = "0.20.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc392a5cb7e778e3f90adbf7faa43c4db7f35b6623224b08886d796718edb875" +checksum = "533b31c94b9e10e77e2468a2b1559aa506505d18c4e52eb64cbfc624ca876ad2" dependencies = [ "anyhow", - "bech32 0.9.1", - "cosmwasm-std", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "derivative", - "itertools 0.12.1", - "prost", + "bech32 0.11.0", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "itertools 0.14.0", + "prost 0.13.5", "schemars", "serde", "sha2 0.10.8", - "thiserror", + "thiserror 2.0.12", ] [[package]] name = "cw-ownable" -version = "0.5.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093dfb4520c48b5848274dd88ea99e280a04bc08729603341c7fb0d758c74321" +checksum = "ed2f8ee96ac5342c795a0610410998fc075a95af8c796b6d16479cdffd2471f1" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-address-like", "cw-ownable-derive", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "thiserror", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "thiserror 1.0.69", ] [[package]] name = "cw-ownable-derive" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d3bf2e0f341bb6cc100d7d441d31cf713fbd3ce0c511f91e79f14b40a889af" +checksum = "0e69178d27793063dd13812777709cf7d7860ba35a598094d4bd89e1b30c9341" dependencies = [ "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "cw-storage-plus" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6cf70ef7686e2da9ad7b067c5942cd3e88dd9453f7af42f54557f8af300fb0" -dependencies = [ - "cosmwasm-std", - "schemars", - "serde", -] - [[package]] name = "cw-storage-plus" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b6f91c0b94481a3e9ef1ceb183c37d00764f8751e39b45fc09f4d9b970d469" dependencies = [ - "cosmwasm-std", + "cosmwasm-std 1.5.11", "schemars", "serde", ] [[package]] name = "cw-storage-plus" -version = "1.2.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5ff29294ee99373e2cd5fd21786a3c0ced99a52fec2ca347d565489c61b723c" +checksum = "f13360e9007f51998d42b1bc6b7fa0141f74feae61ed5fd1e5b0a89eec7b5de1" dependencies = [ - "cosmwasm-std", + "cosmwasm-std 2.2.2", "schemars", "serde", ] -[[package]] -name = "cw-utils" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae0b69fa7679de78825b4edeeec045066aa2b2c4b6e063d80042e565bb4da5c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2 0.15.1", - "schemars", - "semver", - "serde", - "thiserror", -] - [[package]] name = "cw-utils" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6a84c6c1c0acc3616398eba50783934bd6c964bad6974241eaee3460c8f5b26" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 1.5.11", + "cosmwasm-std 1.5.11", "cw2 0.16.0", "schemars", "semver", "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cw-utils" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4a657e5caacc3a0d00ee96ca8618745d050b8f757c709babafb81208d4239c" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2 1.1.2", - "schemars", - "semver", - "serde", - "thiserror", -] - -[[package]] -name = "cw2" -version = "0.15.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5abb8ecea72e09afff830252963cb60faf945ce6cef2c20a43814516082653da" +checksum = "07dfee7f12f802431a856984a32bce1cb7da1e6c006b5409e3981035ce562dec" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 0.15.1", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "schemars", "serde", + "thiserror 1.0.69", ] [[package]] @@ -431,8 +641,8 @@ version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91398113b806f4d2a8d5f8d05684704a20ffd5968bf87e3473e1973710b884ad" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 1.5.11", + "cosmwasm-std 1.5.11", "cw-storage-plus 0.16.0", "schemars", "serde", @@ -440,68 +650,26 @@ dependencies = [ [[package]] name = "cw2" -version = "1.1.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c120b24fbbf5c3bedebb97f2cc85fbfa1c3287e09223428e7e597b5293c1fa" +checksum = "b04852cd38f044c0751259d5f78255d07590d136b8a86d4e09efdd7666bd6d27" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 1.2.0", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw-storage-plus 2.0.0", "schemars", "semver", "serde", - "thiserror", -] - -[[package]] -name = "cw20" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6025276fb6e603e974c21f3e4606982cdc646080e8fba3198816605505e1d9a" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils 0.15.1", - "schemars", - "serde", -] - -[[package]] -name = "cw20" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "526e39bb20534e25a1cd0386727f0038f4da294e5e535729ba3ef54055246abd" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils 1.0.3", - "schemars", - "serde", -] - -[[package]] -name = "cw3" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2967fbd073d4b626dd9e7148e05a84a3bebd9794e71342e12351110ffbb12395" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils 1.0.3", - "cw20 1.1.2", - "schemars", - "serde", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "cw721" version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a1ea6e6277bdd6dfc043a9b1380697fe29d6e24b072597439523658d21d791" +source = "git+https://github.com/CosmWasm/cw-nfts?tag=v0.16.0#2cad1d3e15e0a34d466a0b51e02c58b82ebe5ecd" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 1.5.11", + "cosmwasm-std 1.5.11", "cw-utils 0.16.0", "schemars", "serde", @@ -509,51 +677,20 @@ dependencies = [ [[package]] name = "cw721" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3c4d286625ccadc957fe480dd3bdc54ada19e0e6b5b9325379db3130569e914" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-utils 1.0.3", - "schemars", - "serde", -] - -[[package]] -name = "cw721-base" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77518e27431d43214cff4cdfbd788a7508f68d9b1f32389e6fce513e7eaccbef" -dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 0.16.0", - "cw-utils 0.16.0", - "cw2 0.16.0", - "cw721 0.16.0", - "schemars", - "serde", - "thiserror", -] - -[[package]] -name = "cw721-base" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da518d9f68bfda7d972cbaca2e8fcf04651d0edc3de72b04ae2bcd9289c81614" +version = "0.20.0" +source = "git+https://github.com/public-awesome/cw-nfts?branch=main#99dbf7ee89fd1e13f72380e92ff95a456183b35d" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw2 1.1.2", - "cw721 0.18.0", - "cw721-base 0.16.0", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw2 2.0.0", + "cw721 0.16.0", "schemars", "serde", - "thiserror", + "thiserror 1.0.69", + "url", ] [[package]] @@ -586,6 +723,27 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "unicode-xid", +] + [[package]] name = "digest" version = "0.9.0" @@ -608,45 +766,41 @@ dependencies = [ ] [[package]] -name = "drop-astroport-exchange-handler" -version = "1.0.0" +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ - "astroport", - "cosmwasm-schema", - "cosmwasm-std", - "cw-multi-test", - "cw-ownable", - "cw2 1.1.2", - "drop-helpers", - "drop-staking-base", - "semver", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "drop-auto-withdrawer" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-core" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-puppeteer-base", "drop-staking-base", @@ -658,9 +812,9 @@ dependencies = [ name = "drop-distribution" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2 1.1.2", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", @@ -671,12 +825,12 @@ dependencies = [ name = "drop-factory" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-lsm-share-bond-provider", "drop-macros", @@ -691,7 +845,7 @@ dependencies = [ "drop-val-ref", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -699,32 +853,34 @@ name = "drop-helpers" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", - "cw-storage-plus 1.2.0", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw-storage-plus 2.0.0", "hex", "neutron-sdk", + "neutron-std", "once_cell", - "prost", + "prost 0.12.6", + "prost-types", "schemars", "serde", "serde-json-wasm 1.0.1", "sha3", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-hook-tester" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "drop-helpers", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -732,28 +888,28 @@ name = "drop-lsm-share-bond-provider" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-proto", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "semver", "serde-json-wasm 1.0.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-macros" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "proc-macro2", "quote", "syn 1.0.109", @@ -764,33 +920,37 @@ name = "drop-mirror" version = "1.0.0" dependencies = [ "bech32 0.11.0", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", + "neutron-std", + "prost 0.12.6", + "prost-types", "semver", "serde-json-wasm 1.0.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-native-bond-provider" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", + "prost 0.12.6", "semver", "serde-json-wasm 1.0.1", ] @@ -799,11 +959,11 @@ dependencies = [ name = "drop-native-sync-bond-provider" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-puppeteer-base", "drop-staking-base", @@ -816,9 +976,9 @@ dependencies = [ name = "drop-neutron-distribution-mock" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2 1.1.2", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw2 2.0.0", "drop-staking-base", "neutron-sdk", ] @@ -827,10 +987,10 @@ dependencies = [ name = "drop-price-provider" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "semver", @@ -843,31 +1003,31 @@ name = "drop-proposal-votes-poc" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "prost-types", "schemars", "semver", "serde", "serde-json-wasm 1.0.1", "tendermint-proto", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-proto" version = "1.0.0" dependencies = [ - "cosmwasm-std", - "prost", + "cosmwasm-std 2.2.2", + "prost 0.12.6", "prost-types", "tendermint-proto", ] @@ -877,23 +1037,23 @@ name = "drop-provider-proposals-poc" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "prost-types", "schemars", "semver", "serde", "serde-json-wasm 1.0.1", "tendermint-proto", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -901,17 +1061,17 @@ name = "drop-pump" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "semver", "serde-json-wasm 1.0.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -919,16 +1079,17 @@ name = "drop-puppeteer" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-proto", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", - "prost", + "neutron-std", + "prost 0.12.6", "prost-types", "semver", ] @@ -938,20 +1099,21 @@ name = "drop-puppeteer-base" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", "drop-helpers", "neutron-sdk", - "prost", + "neutron-std", + "prost 0.12.6", "prost-types", "schemars", "semver", "serde", "serde-json-wasm 1.0.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -959,16 +1121,16 @@ name = "drop-puppeteer-initia" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-proto", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "prost-types", "semver", ] @@ -978,16 +1140,16 @@ name = "drop-puppeteer-native" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-puppeteer-base", "drop-staking-base", "neutron-sdk", - "prost", + "prost 0.12.6", "semver", ] @@ -995,11 +1157,11 @@ dependencies = [ name = "drop-redemption-rate-adapter" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", @@ -1010,11 +1172,11 @@ dependencies = [ name = "drop-rewards-manager" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", @@ -1026,42 +1188,41 @@ name = "drop-splitter" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-staking-base" version = "1.0.0" dependencies = [ - "astroport", "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw721 0.18.0", - "cw721-base 0.18.0", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw721 0.20.0", "drop-helpers", "drop-macros", "drop-proto", "drop-puppeteer-base", "neutron-sdk", "optfield", - "prost", + "prost 0.12.6", + "schemars", "semver", "serde", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -1069,11 +1230,11 @@ dependencies = [ name = "drop-strategy" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-multi-test", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-distribution", "drop-factory", "drop-helpers", @@ -1081,7 +1242,7 @@ dependencies = [ "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1089,16 +1250,16 @@ name = "drop-token" version = "1.0.0" dependencies = [ "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-utils 1.0.3", - "cw2 1.1.2", + "cw-utils 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1106,45 +1267,48 @@ name = "drop-unbonding-mirror" version = "1.0.0" dependencies = [ "bech32 0.11.0", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw-utils 1.0.3", - "cw2 1.1.2", - "cw721 0.18.0", + "cw-storage-plus 2.0.0", + "cw-utils 2.0.0", + "cw2 2.0.0", + "cw721 0.20.0", "drop-helpers", "drop-staking-base", "neutron-sdk", + "neutron-std", + "prost 0.12.6", + "prost-types", "semver", "serde-json-wasm 1.0.1", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-val-ref" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw-storage-plus 1.2.0", - "cw2 1.1.2", + "cw-storage-plus 2.0.0", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-validators-set" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", @@ -1156,10 +1320,10 @@ name = "drop-validators-stats" version = "1.0.0" dependencies = [ "bech32 0.11.0", - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", + "cw2 2.0.0", "drop-helpers", "drop-staking-base", "neutron-sdk", @@ -1172,35 +1336,35 @@ dependencies = [ name = "drop-withdrawal-manager" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", "cw-ownable", - "cw2 1.1.2", - "cw721 0.18.0", + "cw2 2.0.0", + "cw721 0.20.0", "drop-helpers", "drop-staking-base", "neutron-sdk", "semver", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "drop-withdrawal-voucher" version = "1.0.0" dependencies = [ - "cosmwasm-schema", - "cosmwasm-std", - "cw2 1.1.2", - "cw721-base 0.18.0", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "cw2 2.0.0", + "cw721 0.20.0", "drop-staking-base", "semver", ] [[package]] name = "dyn-clone" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" [[package]] name = "ecdsa" @@ -1216,14 +1380,23 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature", +] + [[package]] name = "ed25519-zebra" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ - "curve25519-dalek", - "hashbrown", + "curve25519-dalek 3.2.0", + "hashbrown 0.12.3", "hex", "rand_core 0.6.4", "serde", @@ -1231,11 +1404,26 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ed25519-zebra" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9" +dependencies = [ + "curve25519-dalek 4.1.3", + "ed25519", + "hashbrown 0.14.5", + "hex", + "rand_core 0.6.4", + "sha2 0.10.8", + "zeroize", +] + [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "elliptic-curve" @@ -1258,14 +1446,20 @@ dependencies = [ [[package]] name = "ff" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" dependencies = [ "rand_core 0.6.4", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "flex-error" version = "0.4.4" @@ -1275,6 +1469,15 @@ dependencies = [ "paste", ] +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "forward_ref" version = "1.0.0" @@ -1320,7 +1523,26 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash", + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.11", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", ] [[package]] @@ -1344,6 +1566,145 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "itertools" version = "0.10.5" @@ -1362,11 +1723,20 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "k256" @@ -1393,9 +1763,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.161" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "memchr" @@ -1404,24 +1780,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "neutron-sdk" -version = "0.10.0" -source = "git+https://github.com/neutron-org/neutron-sdk?branch=feat/proposal-votes#2dfca1734dfc4cfba478b3067417648733d66cd9" +name = "neutron-sdk" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fcd104aa99d8078ee0ece835c3ee919f9972dc5295c741c08f4dd77093f9df8" +dependencies = [ + "bech32 0.9.1", + "cosmos-sdk-proto", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "prost 0.12.6", + "prost-types", + "protobuf", + "schemars", + "serde", + "serde-json-wasm 1.0.1", + "serde_json", + "speedate", + "tendermint-proto", + "thiserror 1.0.69", +] + +[[package]] +name = "neutron-std" +version = "5.1.2" +source = "git+https://github.com/neutron-org/neutron-std?branch=main#15d5fa8328cc55a6d3563268e67ff0206014681a" dependencies = [ "bech32 0.9.1", + "chrono", "cosmos-sdk-proto", - "cosmwasm-schema", - "cosmwasm-std", - "prost", + "cosmwasm-schema 2.2.2", + "cosmwasm-std 2.2.2", + "neutron-std-derive", + "prost 0.12.6", "prost-types", "protobuf", "schemars", "serde", + "serde-cw-value", "serde-json-wasm 1.0.1", "serde_json", "speedate", "tendermint-proto", - "thiserror", + "thiserror 1.0.69", +] + +[[package]] +name = "neutron-std-derive" +version = "0.20.1" +source = "git+https://github.com/neutron-org/neutron-std?branch=main#15d5fa8328cc55a6d3563268e67ff0206014681a" +dependencies = [ + "itertools 0.10.5", + "proc-macro2", + "prost-types", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", ] [[package]] @@ -1441,6 +1864,15 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1452,9 +1884,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" [[package]] name = "opaque-debug" @@ -1470,7 +1902,19 @@ checksum = "fa59f025cde9c698fcb4fcb3533db4621795374065bee908215263488f2d2a1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.100", +] + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.8", ] [[package]] @@ -1479,6 +1923,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + [[package]] name = "pkcs8" version = "0.10.2" @@ -1495,11 +1945,29 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy 0.8.23", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -1511,7 +1979,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.12.6", +] + +[[package]] +name = "prost" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" +dependencies = [ + "bytes", + "prost-derive 0.13.5", ] [[package]] @@ -1524,7 +2002,20 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.100", +] + +[[package]] +name = "prost-derive" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" +dependencies = [ + "anyhow", + "itertools 0.14.0", + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -1533,7 +2024,7 @@ version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost", + "prost 0.12.6", ] [[package]] @@ -1544,7 +2035,7 @@ checksum = "b65f4a8ec18723a734e5dc09c173e0abf9690432da5340285d536edcb4dac190" dependencies = [ "once_cell", "protobuf-support", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1553,18 +2044,38 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6872f4d4f4b98303239a2b5838f5bbbb77b01ffc892d627957f37a22d7cfe69c" dependencies = [ - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" dependencies = [ "proc-macro2", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_core" version = "0.5.1" @@ -1580,6 +2091,26 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -1590,23 +2121,54 @@ dependencies = [ "subtle", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "schemars" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", "schemars_derive", @@ -1616,14 +2178,14 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.85", + "syn 2.0.100", ] [[package]] @@ -1642,19 +2204,28 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.213" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] +[[package]] +name = "serde-cw-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75d32da6b8ed758b7d850b6c3c08f1d7df51a4df3cb201296e63e34a78e99d4" +dependencies = [ + "serde", +] + [[package]] name = "serde-json-wasm" version = "0.5.2" @@ -1675,22 +2246,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.15" +version = "0.11.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387cc504cb06bb40a96c8e04e951fe01854cf6bc921053c954e4a606d9675c6a" +checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.213" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.100", ] [[package]] @@ -1701,14 +2272,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.100", ] [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -1760,6 +2331,12 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "smallvec" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" + [[package]] name = "speedate" version = "0.13.0" @@ -1780,6 +2357,12 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -1805,7 +2388,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.85", + "syn 2.0.100", ] [[package]] @@ -1836,15 +2419,26 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.85" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "tendermint-proto" version = "0.34.1" @@ -1855,7 +2449,7 @@ dependencies = [ "flex-error", "num-derive", "num-traits", - "prost", + "prost 0.12.6", "prost-types", "serde", "serde_bytes", @@ -1865,29 +2459,49 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.65" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.12", ] [[package]] name = "thiserror-impl" -version = "1.0.65" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.100", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] name = "time" -version = "0.3.37" +version = "0.3.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" dependencies = [ "deranged", "num-conv", @@ -1899,43 +2513,70 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" [[package]] name = "time-macros" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" +checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "typenum" -version = "1.17.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] -name = "uint" -version = "0.9.5" +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] -name = "unicode-ident" -version = "1.0.13" +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "version_check" @@ -1949,8 +2590,141 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd97444d05a4328b90e75e503a34bad781f14e28a823ad3557f0750df1ebcbc6" +dependencies = [ + "zerocopy-derive 0.8.23", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + [[package]] name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] diff --git a/Cargo.toml b/Cargo.toml index ebe22132..95604d37 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,6 @@ resolver = "2" members = [ "contracts/unbonding-mirror", - "contracts/astroport-exchange-handler", "contracts/auto-withdrawer", "contracts/core", "contracts/distribution", @@ -39,26 +38,21 @@ members = [ ] [workspace.dependencies] -cosmwasm-std = { version = "1.5.9", default-features = false, features = [ - "stargate", - "cosmwasm_1_2", - "staking", -] } -neutron-sdk = { package = "neutron-sdk", git = "https://github.com/neutron-org/neutron-sdk", branch = "feat/proposal-votes" } - +cosmwasm-std = { version = "2.1.0", default-features = false, features = ["std", "cosmwasm_1_2", "cosmwasm_2_0", "staking"] } +neutron-sdk = { version = "0.11.0" } +neutron-std = { git = "https://github.com/neutron-org/neutron-std", branch = "main" } cosmos-sdk-proto = { version = "0.20.0", default-features = false } -cw-ownable = { version = "0.5.1", default-features = false } +cw-ownable = { version = "2.0.0", default-features = false } prost = { version = "0.12.3", default-features = false } prost-types = { version = "0.12.3", default-features = false } -tendermint-proto = { version = "0.34.0", default-features = false } +tendermint-proto = { version = "0.34.1", default-features = false } +cosmwasm-schema = { version = "2.1.0", default-features = false } +cw-storage-plus = { version = "2.0.0", default-features = false } +cw2 = { version = "2.0.0", default-features = false } +cw721 = { package = "cw721", git = "https://github.com/public-awesome/cw-nfts", branch = "main", default-features = false } +cw-multi-test = { version = "2.1.0", default-features = false } +cw-utils = { version = "2.0.0", default-features = false } time = "0.3.37" -cosmwasm-schema = { version = "1.5.4", default-features = false } -cw-storage-plus = { version = "1.2.0", default-features = false } -cw2 = { version = "1.1.2", default-features = false } -cw721 = { version = "0.18.0", default-features = false } -cw721-base = { version = "0.18.0", features = ["library"] } -cw-multi-test = { version = "0.20.0", default-features = false } -cw-utils = { version = "1.0.3", default-features = false } serde = { version = "1.0.195", default-features = false } serde-json-wasm = { version = "1.0.0", default-features = false } sha2 = { version = "0.10.8", default-features = false } @@ -67,7 +61,6 @@ bech32 = { version = "0.11.0", default-features = false, features = ["alloc"] } thiserror = { version = "1.0.56", default-features = false } optfield = { version = "0.3.0", default-features = false } schemars = { version = "0.8.16", default-features = false } -astroport = { version = "3.6.1", default-features = false } semver = { version = "1.0.22", default-features = false } hex = { version = "0.4.3", default-features = false } once_cell = { version = "1.20.2" } diff --git a/Makefile b/Makefile index 7505ff3e..c677fed2 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ compile_arm64: check_contracts: @cargo install cosmwasm-check --locked - @cosmwasm-check --available-capabilities iterator,staking,stargate,neutron,cosmwasm_1_1,cosmwasm_1_2 artifacts/*.wasm + @cosmwasm-check --available-capabilities iterator,staking,stargate,neutron,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3,cosmwasm_1_4,cosmwasm_2_0 artifacts/*.wasm build_arm64: schema clippy test fmt doc compile_arm64 check_contracts diff --git a/contracts/astroport-exchange-handler/Cargo.toml b/contracts/astroport-exchange-handler/Cargo.toml index a31707f4..9cee25b9 100644 --- a/contracts/astroport-exchange-handler/Cargo.toml +++ b/contracts/astroport-exchange-handler/Cargo.toml @@ -19,8 +19,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/auto-withdrawer/Cargo.toml b/contracts/auto-withdrawer/Cargo.toml index cd94eb45..0eaa6a21 100644 --- a/contracts/auto-withdrawer/Cargo.toml +++ b/contracts/auto-withdrawer/Cargo.toml @@ -9,7 +9,6 @@ version = "1.0.0" crate-type = ["cdylib", "rlib"] [features] -backtraces = ["cosmwasm-std/backtraces"] library = [] [dependencies] diff --git a/contracts/auto-withdrawer/src/store.rs b/contracts/auto-withdrawer/src/store.rs index 68d78217..c6723247 100644 --- a/contracts/auto-withdrawer/src/store.rs +++ b/contracts/auto-withdrawer/src/store.rs @@ -26,7 +26,7 @@ mod bondings { } } - pub fn map<'a>() -> IndexedMap<'a, &'a str, BondingRecord, BondingRecordIndexes<'a>> { + pub fn map() -> IndexedMap<&'static str, BondingRecord, BondingRecordIndexes<'static>> { IndexedMap::new( "bondings", BondingRecordIndexes { diff --git a/contracts/auto-withdrawer/src/tests.rs b/contracts/auto-withdrawer/src/tests.rs index 8df074f3..3884379a 100644 --- a/contracts/auto-withdrawer/src/tests.rs +++ b/contracts/auto-withdrawer/src/tests.rs @@ -6,27 +6,31 @@ use crate::{ }; use cosmwasm_std::{ attr, coin, - testing::{mock_env, mock_info}, - Event, + testing::{message_info, mock_env}, + Addr, Event, }; use drop_helpers::testing::{mock_dependencies, mock_state_query}; #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let factory_contract_address_msg = deps.api.addr_make("factory_contract").to_string(); let response = contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&Addr::unchecked("admin"), &[]), InstantiateMsg { - factory_contract: "factory_contract".to_string(), + factory_contract: factory_contract_address_msg.clone(), ld_token: "ld_token".to_string(), }, ) .unwrap(); - let factory_contract = FACTORY_CONTRACT.load(deps.as_ref().storage).unwrap(); - assert_eq!(factory_contract, "factory_contract"); + let factory_contract_address_storage = FACTORY_CONTRACT.load(deps.as_ref().storage).unwrap(); + assert_eq!( + factory_contract_address_storage.as_str(), + factory_contract_address_msg.as_str() + ); let ld_token = LD_TOKEN.load(deps.as_ref().storage).unwrap(); assert_eq!(ld_token, "ld_token"); assert_eq!(response.messages.len(), 0); @@ -34,7 +38,7 @@ fn instantiate() { response.events, vec![ Event::new("drop-auto-withdrawer-instantiate").add_attributes([ - attr("factory_contract", "factory_contract"), + attr("factory_contract", factory_contract_address_msg), attr("ld_token", "ld_token") ]) ] @@ -45,12 +49,11 @@ fn instantiate() { #[test] fn bond_missing_ld_assets() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); FACTORY_CONTRACT - .save( - deps.as_mut().storage, - &cosmwasm_std::Addr::unchecked("factory_contract".to_string()), - ) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); LD_TOKEN .save(deps.as_mut().storage, &"ld_token".into()) @@ -58,7 +61,10 @@ fn bond_missing_ld_assets() { let err = contract::execute( deps.as_mut(), mock_env(), - mock_info("sender", &[coin(10, "uatom"), coin(20, "untrn")]), + message_info( + &api.addr_make("sender"), + &[coin(10, "uatom"), coin(20, "untrn")], + ), ExecuteMsg::Bond(BondMsg::WithLdAssets {}), ) .unwrap_err(); @@ -86,19 +92,16 @@ fn test_migrate_wrong_contract() { } mod bond_missing_deposit { - use drop_helpers::testing::{mock_dependencies, mock_state_query}; - use super::*; #[test] fn with_ld_assets() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); FACTORY_CONTRACT - .save( - deps.as_mut().storage, - &cosmwasm_std::Addr::unchecked("factory_contract".to_string()), - ) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); LD_TOKEN .save(deps.as_mut().storage, &"ld_token".into()) @@ -106,7 +109,7 @@ mod bond_missing_deposit { let err = contract::execute( deps.as_mut(), mock_env(), - mock_info("sender", &[coin(10, "ld_token")]), + message_info(&api.addr_make("sender"), &[coin(10, "ld_token")]), ExecuteMsg::Bond(BondMsg::WithLdAssets {}), ) .unwrap_err(); @@ -120,7 +123,7 @@ mod bond_missing_deposit { let err = contract::execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&Addr::unchecked("sender"), &[]), ExecuteMsg::Bond(BondMsg::WithNFT { token_id: "token_id".into(), }), diff --git a/contracts/core/Cargo.toml b/contracts/core/Cargo.toml index 12af759c..9d301a28 100644 --- a/contracts/core/Cargo.toml +++ b/contracts/core/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/core/src/contract.rs b/contracts/core/src/contract.rs index ce997611..457db092 100644 --- a/contracts/core/src/contract.rs +++ b/contracts/core/src/contract.rs @@ -28,7 +28,7 @@ use drop_staking_base::{ UNBOND_BATCH_ID, }, validatorset::ValidatorInfo, - withdrawal_voucher::{Metadata, Trait}, + withdrawal_voucher::{NftExtensionMsg, Trait}, }, }; use neutron_sdk::bindings::{msg::NeutronMsg, query::NeutronQuery}; @@ -188,6 +188,7 @@ fn query_exchange_rate(deps: Deps, config: &Config) -> ContractRes let mut batch_id = UNBOND_BATCH_ID.load(deps.storage)?; let mut unprocessed_dasset_to_unbond = Uint128::zero(); let batch = unbond_batches_map().load(deps.storage, batch_id)?; + if batch.status == UnbondBatchStatus::New { unprocessed_dasset_to_unbond += batch.total_dasset_amount_to_withdraw; } @@ -458,7 +459,7 @@ fn execute_update_withdrawn_amount( let config = CONFIG.load(deps.storage)?; let addrs = drop_helpers::get_contracts!(deps, config.factory_contract, withdrawal_manager_contract); - if info.sender != addrs.withdrawal_manager_contract { + if info.sender.as_str() != addrs.withdrawal_manager_contract { return Err(ContractError::Unauthorized {}); } @@ -1142,7 +1143,7 @@ fn execute_unbond( unbond_batch.total_dasset_amount_to_withdraw += dasset_amount; unbond_batches_map().save(deps.storage, unbond_batch_id, &unbond_batch)?; - let extension = Some(Metadata { + let extension = Some(NftExtensionMsg { description: Some("Withdrawal voucher".into()), name: "LDV voucher".to_string(), batch_id: unbond_batch_id.to_string(), @@ -1261,8 +1262,9 @@ fn get_unbonding_msg( { let current_exchange_rate = query_exchange_rate(deps.as_ref(), config)?; attrs.push(attr("exchange_rate", current_exchange_rate.to_string())); - let expected_native_asset_amount = - unbond.total_dasset_amount_to_withdraw * current_exchange_rate; + let expected_native_asset_amount = unbond + .total_dasset_amount_to_withdraw + .mul_floor(current_exchange_rate); let calc_withdraw_query_result: Result, StdError> = deps.querier.query_wasm_smart( diff --git a/contracts/core/src/tests.rs b/contracts/core/src/tests.rs index 9c88f418..0cec1456 100644 --- a/contracts/core/src/tests.rs +++ b/contracts/core/src/tests.rs @@ -1,7 +1,7 @@ use crate::contract::{execute, query}; use cosmwasm_std::{ from_json, - testing::{mock_env, mock_info, MockApi, MockStorage}, + testing::{message_info, mock_env, MockApi, MockStorage}, to_json_binary, Addr, Coin, CosmosMsg, Decimal, Decimal256, Event, OwnedDeps, Response, SubMsg, Timestamp, Uint128, WasmMsg, }; @@ -32,19 +32,20 @@ use std::collections::HashMap; use std::vec; fn get_default_config( + api: MockApi, idle_min_interval: u64, unbonding_safe_period: u64, unbond_batch_switch_time: u64, ) -> Config { Config { - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), base_denom: "base_denom".to_string(), remote_denom: "remote_denom".to_string(), idle_min_interval, unbonding_period: 60, unbonding_safe_period, unbond_batch_switch_time, - pump_ica_address: Some("pump_address".to_string()), + pump_ica_address: Some(api.addr_make("pump_address").to_string()), emergency_address: None, icq_update_delay: 5, } @@ -66,15 +67,18 @@ fn get_default_unbond_batch_status_timestamps() -> UnbondBatchStatusTimestamps { #[test] fn test_update_config() { let mut deps = mock_dependencies(&[]); - deps.querier.add_wasm_query_response("token_contract", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&drop_staking_base::msg::token::ConfigResponse { - factory_contract: "factory_contract".to_string(), - denom: "ld_denom".to_string(), - }) - .unwrap(), - ) - }); + let api = deps.api; + + deps.querier + .add_wasm_query_response(api.addr_make("token_contract").as_str(), move |_| { + cosmwasm_std::ContractResult::Ok( + to_json_binary(&drop_staking_base::msg::token::ConfigResponse { + factory_contract: api.addr_make("factory_contract").to_string(), + denom: "ld_denom".to_string(), + }) + .unwrap(), + ) + }); deps.querier .add_wasm_query_response("old_token_contract", |_| { cosmwasm_std::ContractResult::Ok( @@ -85,25 +89,26 @@ fn test_update_config() { .unwrap(), ) }); + mock_state_query(&mut deps); let env = mock_env(); - let info = mock_info("admin", &[]); + let info = message_info(&api.addr_make("admin"), &[]); let mut deps_mut = deps.as_mut(); crate::contract::instantiate( deps_mut.branch(), env.clone(), info.clone(), InstantiateMsg { - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), base_denom: "old_base_denom".to_string(), remote_denom: "old_remote_denom".to_string(), idle_min_interval: 12, unbonding_period: 20, unbonding_safe_period: 120, unbond_batch_switch_time: 2000, - pump_ica_address: Some("old_pump_address".to_string()), - emergency_address: Some("old_emergency_address".to_string()), - owner: "admin".to_string(), + pump_ica_address: Some(api.addr_make("old_pump_address").to_string()), + emergency_address: Some(api.addr_make("old_emergency_address").to_string()), + owner: api.addr_make("admin").to_string(), icq_update_delay: 5, }, ) @@ -114,27 +119,27 @@ fn test_update_config() { ); let new_config = ConfigOptional { - factory_contract: Some("new_factory_contract".to_string()), + factory_contract: Some(api.addr_make("new_factory_contract").to_string()), base_denom: Some("new_base_denom".to_string()), remote_denom: Some("new_remote_denom".to_string()), idle_min_interval: Some(2), unbonding_period: Some(120), unbonding_safe_period: Some(20), unbond_batch_switch_time: Some(12000), - pump_ica_address: Some("new_pump_address".to_string()), - rewards_receiver: Some("new_rewards_receiver".to_string()), - emergency_address: Some("new_emergency_address".to_string()), + pump_ica_address: Some(api.addr_make("new_pump_address").to_string()), + rewards_receiver: Some(api.addr_make("new_rewards_receiver").to_string()), + emergency_address: Some(api.addr_make("new_emergency_address").to_string()), }; let expected_config = Config { - factory_contract: Addr::unchecked("new_factory_contract"), + factory_contract: api.addr_make("new_factory_contract"), base_denom: "new_base_denom".to_string(), remote_denom: "new_remote_denom".to_string(), idle_min_interval: 2, unbonding_period: 120, unbonding_safe_period: 20, unbond_batch_switch_time: 12000, - pump_ica_address: Some("new_pump_address".to_string()), - emergency_address: Some("new_emergency_address".to_string()), + pump_ica_address: Some(api.addr_make("new_pump_address").to_string()), + emergency_address: Some(api.addr_make("new_emergency_address").to_string()), icq_update_delay: 5, }; @@ -154,7 +159,8 @@ fn test_update_config() { #[test] fn test_query_config() { let mut deps = mock_dependencies(&[]); - let config = get_default_config(1000, 10, 6000); + let api = deps.api; + let config = get_default_config(api, 1000, 10, 6000); CONFIG.save(deps.as_mut().storage, &config).unwrap(); assert_eq!( from_json::(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()) @@ -166,15 +172,17 @@ fn test_query_config() { #[test] fn query_ownership() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some(owner_address.as_str())) + .unwrap(); assert_eq!( from_json::>( &query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap() ) .unwrap(), cw_ownable::Ownership:: { - owner: Some(Addr::unchecked("owner")), + owner: Some(owner_address), pending_owner: None, pending_expiry: None, } @@ -184,20 +192,24 @@ fn query_ownership() { #[test] fn test_bond_provider_has_any_tokens() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + let bond_provider_address = deps.api.addr_make("bond_provider"); + let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some(owner_address.as_str())) + .unwrap(); deps.querier - .add_wasm_query_response("bond_provider_address", |_| { + .add_wasm_query_response(bond_provider_address.as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&false).unwrap()) }); let error = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::RemoveBondProvider { - bond_provider_address: "bond_provider_address".to_string(), + bond_provider_address: bond_provider_address.to_string(), }, ) .unwrap_err(); @@ -208,23 +220,27 @@ fn test_bond_provider_has_any_tokens() { #[test] fn test_execute_add_bond_provider_max_limit_reached() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + let overflow_bond_provider_address = deps.api.addr_make("overflow_bond_provider"); + let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some(owner_address.as_str())) + .unwrap(); for i in 0..MAX_BOND_PROVIDERS { let mut provider: String = "provider".to_string(); provider.push_str(i.to_string().as_str()); BOND_PROVIDERS - .add(deps_mut.storage, cosmwasm_std::Addr::unchecked(provider)) + .add(deps_mut.storage, Addr::unchecked(provider)) .unwrap(); } let res = execute( deps_mut, mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::AddBondProvider { - bond_provider_address: "bond_provider_address".to_string(), + bond_provider_address: overflow_bond_provider_address.to_string(), }, ) .unwrap_err(); @@ -234,9 +250,13 @@ fn test_execute_add_bond_provider_max_limit_reached() { #[test] fn test_update_withdrawn_amount() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 10, 6000)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 10, 6000), + ) .unwrap(); mock_state_query(&mut deps); let withdrawn_batch = &UnbondBatch { @@ -274,7 +294,7 @@ fn test_update_withdrawn_amount() { let withdrawn_res = execute( deps.as_mut(), mock_env().clone(), - mock_info("withdrawal_manager_contract", &[]), + message_info(&api.addr_make("withdrawal_manager_contract"), &[]), ExecuteMsg::UpdateWithdrawnAmount { batch_id: 1, withdrawn_amount: Uint128::from(1001u128), @@ -291,7 +311,7 @@ fn test_update_withdrawn_amount() { let unbonding_err = execute( deps.as_mut(), mock_env().clone(), - mock_info("withdrawal_manager_contract", &[]), + message_info(&api.addr_make("withdrawal_manager_contract"), &[]), ExecuteMsg::UpdateWithdrawnAmount { batch_id: 0, withdrawn_amount: Uint128::from(2002u128), @@ -304,64 +324,72 @@ fn test_update_withdrawn_amount() { #[test] fn test_add_remove_bond_provider() { let mut deps = mock_dependencies(&[]); + let admin_address = deps.api.addr_make("admin"); + let bond_provider_address = deps.api.addr_make("bond_provider"); + mock_state_query(&mut deps); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("admin")).unwrap(); + cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some(admin_address.as_str())) + .unwrap(); - let bond_providers = - crate::contract::query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); + let bond_providers = query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); assert_eq!( bond_providers, to_json_binary::>(&vec![]).unwrap() ); - deps.querier.add_wasm_query_response("bond_provider", |_| { - cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) - }); + deps.querier + .add_wasm_query_response(bond_provider_address.as_str(), |_| { + cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) + }); let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&admin_address, &[]), ExecuteMsg::AddBondProvider { - bond_provider_address: "bond_provider".to_string(), + bond_provider_address: bond_provider_address.to_string(), }, ); assert_eq!( res, Ok(Response::new().add_event( Event::new("crates.io:drop-staking__drop-core-execute-add_bond_provider") - .add_attributes(vec![("bond_provider_address", "bond_provider")]) + .add_attributes(vec![( + "bond_provider_address", + bond_provider_address.clone() + )]) )) ); - let bond_providers = - crate::contract::query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); + let bond_providers = query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); assert_eq!( bond_providers, - to_json_binary(&vec![Addr::unchecked("bond_provider")]).unwrap() + to_json_binary(&vec![bond_provider_address.clone()]).unwrap() ); let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&admin_address, &[]), ExecuteMsg::RemoveBondProvider { - bond_provider_address: "bond_provider".to_string(), + bond_provider_address: bond_provider_address.to_string(), }, ); assert_eq!( res, Ok(Response::new().add_event( Event::new("crates.io:drop-staking__drop-core-execute-remove_bond_provider") - .add_attributes(vec![("bond_provider_address", "bond_provider")]) + .add_attributes(vec![( + "bond_provider_address", + bond_provider_address.clone() + )]) )) ); - let bond_providers = - crate::contract::query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); + let bond_providers = query(deps.as_ref(), mock_env(), QueryMsg::BondProviders {}).unwrap(); assert_eq!( bond_providers, @@ -372,16 +400,18 @@ fn test_add_remove_bond_provider() { #[test] fn test_execute_tick_idle_process_bondig_provider() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("lsm_provider_address", |_| { + .add_wasm_query_response(api.addr_make("lsm_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -393,7 +423,7 @@ fn test_execute_tick_idle_process_bondig_provider() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -408,14 +438,14 @@ fn test_execute_tick_idle_process_bondig_provider() { }); BOND_PROVIDERS - .add( - deps.as_mut().storage, - Addr::unchecked("lsm_provider_address"), - ) + .add(deps.as_mut().storage, api.addr_make("lsm_provider_address")) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 10, 6000)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 10, 6000), + ) .unwrap(); LAST_ICA_CHANGE_HEIGHT .save(deps.as_mut().storage, &0) @@ -435,7 +465,7 @@ fn test_execute_tick_idle_process_bondig_provider() { let res = execute( deps.as_mut(), env, - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -450,12 +480,15 @@ fn test_execute_tick_idle_process_bondig_provider() { ("knot", "002"), ("knot", "003"), ("knot", "036"), - ("used_bond_provider", "lsm_provider_address"), + ( + "used_bond_provider", + api.addr_make("lsm_provider_address").as_str() + ), ] ) ) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "lsm_provider_address".to_string(), + contract_addr: api.addr_make("lsm_provider_address").to_string(), msg: to_json_binary( &drop_staking_base::msg::bond_provider::ExecuteMsg::ProcessOnIdle {} ) @@ -468,9 +501,12 @@ fn test_execute_tick_idle_process_bondig_provider() { #[test] fn test_tick_idle_claim_wo_unbond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -482,7 +518,7 @@ fn test_tick_idle_claim_wo_unbond() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -497,7 +533,7 @@ fn test_tick_idle_claim_wo_unbond() { }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -513,12 +549,13 @@ fn test_tick_idle_claim_wo_unbond() { .unwrap(), ) }); - deps.querier - .add_wasm_query_response("validators_set_contract", |_| { + deps.querier.add_wasm_query_response( + api.addr_make("validators_set_contract").as_str(), + move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&vec![ drop_staking_base::state::validatorset::ValidatorInfo { - valoper_address: "valoper_address".to_string(), + valoper_address: api.addr_make("valoper_address").to_string(), weight: 1, on_top: Uint128::zero(), last_processed_remote_height: None, @@ -535,15 +572,16 @@ fn test_tick_idle_claim_wo_unbond() { ]) .unwrap(), ) - }); + }, + ); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { delegations: vec![DropDelegation { - delegator: Addr::unchecked("ica_address"), - validator: "valoper_address".to_string(), + delegator: api.addr_make("ica_address"), + validator: api.addr_make("valoper_address").to_string(), amount: Coin { denom: "remote_denom".to_string(), amount: Uint128::new(100_000), @@ -558,7 +596,7 @@ fn test_tick_idle_claim_wo_unbond() { .unwrap(), ) }); - let config = get_default_config(1000, 100, 6000); + let config = get_default_config(api, 1000, 100, 6000); CONFIG.save(deps.as_mut().storage, &config).unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -595,7 +633,7 @@ fn test_tick_idle_claim_wo_unbond() { let res = execute( deps.as_mut(), env, - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -614,7 +652,7 @@ fn test_tick_idle_claim_wo_unbond() { ("knot", "007"), ("knot", "009"), ("knot", "010"), - ("validators_to_claim", "valoper_address"), + ("validators_to_claim", api.addr_make("valoper_address").as_str()), ("knot", "011"), ("knot", "012"), ("state", "claiming"), @@ -622,13 +660,13 @@ fn test_tick_idle_claim_wo_unbond() { ) ) .add_submessage(SubMsg::new(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::puppeteer::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["valoper_address".to_string()], + validators: vec![api.addr_make("valoper_address").to_string()], transfer: None, - reply_to: "cosmos2contract".to_string() + reply_to: api.addr_make("cosmos2contract").to_string() }).unwrap(), - funds: vec![Coin::new(1000, "untrn")], + funds: vec![Coin::new(1000u128, "untrn")], }))) ); } @@ -636,9 +674,12 @@ fn test_tick_idle_claim_wo_unbond() { #[test] fn test_tick_idle_claim_with_unbond_transfer() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -650,7 +691,7 @@ fn test_tick_idle_claim_with_unbond_transfer() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -665,7 +706,7 @@ fn test_tick_idle_claim_with_unbond_transfer() { }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -681,12 +722,13 @@ fn test_tick_idle_claim_with_unbond_transfer() { .unwrap(), ) }); - deps.querier - .add_wasm_query_response("validators_set_contract", |_| { + deps.querier.add_wasm_query_response( + api.addr_make("validators_set_contract").as_str(), + move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&vec![ drop_staking_base::state::validatorset::ValidatorInfo { - valoper_address: "valoper_address".to_string(), + valoper_address: api.addr_make("valoper_address").to_string(), weight: 1, on_top: Uint128::zero(), last_processed_remote_height: None, @@ -703,15 +745,16 @@ fn test_tick_idle_claim_with_unbond_transfer() { ]) .unwrap(), ) - }); + }, + ); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { delegations: vec![DropDelegation { - delegator: Addr::unchecked("ica_address"), - validator: "valoper_address".to_string(), + delegator: api.addr_make("ica_address"), + validator: api.addr_make("valoper_address").to_string(), amount: Coin { denom: "remote_denom".to_string(), amount: Uint128::new(100_000), @@ -727,7 +770,10 @@ fn test_tick_idle_claim_with_unbond_transfer() { ) }); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 6000)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 6000), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -765,7 +811,7 @@ fn test_tick_idle_claim_with_unbond_transfer() { let res = execute( deps.as_mut(), env, - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -783,27 +829,33 @@ fn test_tick_idle_claim_with_unbond_transfer() { ("knot", "008"), ("knot", "009"), ("knot", "010"), - ("validators_to_claim", "valoper_address"), + ("validators_to_claim", api.addr_make("valoper_address").as_str()), ("knot", "011"), ("knot", "012"), ("state", "claiming"), ])) .add_submessage(SubMsg::new(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::puppeteer::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["valoper_address".to_string()], - transfer: Some(drop_puppeteer_base::msg::TransferReadyBatchesMsg{ batch_ids: vec![0u128], emergency: false, amount: Uint128::from(200u128), recipient: "pump_address".to_string() }), - reply_to: "cosmos2contract".to_string() - }).unwrap(), funds: vec![Coin::new(1000, "untrn")] }))) + validators: vec![api.addr_make("valoper_address").to_string()], + transfer: Some(TransferReadyBatchesMsg{ batch_ids: vec![0u128], emergency: false, amount: Uint128::from(200u128), recipient: api.addr_make("pump_address").to_string() }), + reply_to: api.addr_make("cosmos2contract").to_string() + }).unwrap(), funds: vec![Coin::new(1000u128, "untrn")] }))) ); } #[test] fn test_tick_no_puppeteer_response() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -816,7 +868,7 @@ fn test_tick_no_puppeteer_response() { .save(deps.as_mut().storage, &Pause::default()) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -828,7 +880,7 @@ fn test_tick_no_puppeteer_response() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -844,7 +896,7 @@ fn test_tick_no_puppeteer_response() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ); assert!(res.is_err()); @@ -855,9 +907,12 @@ fn test_tick_no_puppeteer_response() { fn test_tick_claiming_error_wo_transfer() { // no unbonded batch, no pending transfer for stake, some balance in ICA to stake let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -869,7 +924,7 @@ fn test_tick_claiming_error_wo_transfer() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -883,7 +938,7 @@ fn test_tick_claiming_error_wo_transfer() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -900,21 +955,28 @@ fn test_tick_claiming_error_wo_transfer() { ) }); deps.querier - .add_wasm_query_response("staker_contract", |_| { + .add_wasm_query_response(api.addr_make("staker_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::zero()).unwrap()) }); deps.querier - .add_wasm_query_response("strategy_contract", |msg| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |msg| { let q: StrategyQueryMsg = from_json(msg).unwrap(); match q { StrategyQueryMsg::CalcDeposit { deposit } => cosmwasm_std::ContractResult::Ok( - to_json_binary(&vec![("valoper_address".to_string(), deposit)]).unwrap(), + to_json_binary(&vec![( + api.addr_make("valoper_address").to_string(), + deposit, + )]) + .unwrap(), ), _ => unimplemented!(), } }); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -929,7 +991,7 @@ fn test_tick_claiming_error_wo_transfer() { transaction: drop_puppeteer_base::peripheral_hook::Transaction::ClaimRewardsAndOptionalyTransfer { interchain_account_id: "ica".to_string(), - validators: vec!["valoper_address".to_string()], + validators: vec![api.addr_make("valoper_address").to_string()], denom: "remote_denom".to_string(), transfer: None, }, @@ -946,7 +1008,7 @@ fn test_tick_claiming_error_wo_transfer() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -957,7 +1019,7 @@ fn test_tick_claiming_error_wo_transfer() { vec![ ("action", "tick_claiming"), ("knot", "012"), - ("error_on_claiming", "ResponseHookErrorMsg { transaction: ClaimRewardsAndOptionalyTransfer { interchain_account_id: \"ica\", validators: [\"valoper_address\"], denom: \"remote_denom\", transfer: None }, details: \"Some error\" }"), + ("error_on_claiming", "ResponseHookErrorMsg { transaction: ClaimRewardsAndOptionalyTransfer { interchain_account_id: \"ica\", validators: [\"cosmwasm1lf0u3zhca24ws690e5kc8unqjjy9va3ss0cqm0unfgqr7v77r6sq8hnj0p\"], denom: \"remote_denom\", transfer: None }, details: \"Some error\" }"), ("knot", "050"), ("knot", "000"), ] @@ -970,9 +1032,12 @@ fn test_tick_claiming_error_wo_transfer() { fn test_tick_claiming_error_with_transfer() { // no unbonded batch, no pending transfer for stake, some balance in ICA to stake let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -984,7 +1049,7 @@ fn test_tick_claiming_error_with_transfer() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -998,7 +1063,7 @@ fn test_tick_claiming_error_with_transfer() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&( Balances { @@ -1014,21 +1079,28 @@ fn test_tick_claiming_error_with_transfer() { ) }); deps.querier - .add_wasm_query_response("staker_contract", |_| { + .add_wasm_query_response(api.addr_make("staker_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::zero()).unwrap()) }); deps.querier - .add_wasm_query_response("strategy_contract", |msg| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |msg| { let q: StrategyQueryMsg = from_json(msg).unwrap(); match q { StrategyQueryMsg::CalcDeposit { deposit } => cosmwasm_std::ContractResult::Ok( - to_json_binary(&vec![("valoper_address".to_string(), deposit)]).unwrap(), + to_json_binary(&vec![( + api.addr_make("valoper_address").to_string(), + deposit, + )]) + .unwrap(), ), _ => unimplemented!(), } }); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -1069,13 +1141,13 @@ fn test_tick_claiming_error_with_transfer() { transaction: drop_puppeteer_base::peripheral_hook::Transaction::ClaimRewardsAndOptionalyTransfer { interchain_account_id: "ica".to_string(), - validators: vec!["valoper_address".to_string()], + validators: vec![api.addr_make("valoper_address").to_string()], denom: "remote_denom".to_string(), transfer: Some(TransferReadyBatchesMsg { batch_ids: vec![0u128], emergency: false, amount: Uint128::new(123123u128), - recipient: "recipient".to_string(), + recipient: api.addr_make("recipient").to_string(), }), }, }, @@ -1091,7 +1163,7 @@ fn test_tick_claiming_error_with_transfer() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -1102,7 +1174,7 @@ fn test_tick_claiming_error_with_transfer() { vec![ ("action", "tick_claiming"), ("knot", "012"), - ("error_on_claiming", "ResponseHookErrorMsg { transaction: ClaimRewardsAndOptionalyTransfer { interchain_account_id: \"ica\", validators: [\"valoper_address\"], denom: \"remote_denom\", transfer: Some(TransferReadyBatchesMsg { batch_ids: [0], emergency: false, amount: Uint128(123123), recipient: \"recipient\" }) }, details: \"Some error\" }"), + ("error_on_claiming", "ResponseHookErrorMsg { transaction: ClaimRewardsAndOptionalyTransfer { interchain_account_id: \"ica\", validators: [\"cosmwasm1lf0u3zhca24ws690e5kc8unqjjy9va3ss0cqm0unfgqr7v77r6sq8hnj0p\"], denom: \"remote_denom\", transfer: Some(TransferReadyBatchesMsg { batch_ids: [0], emergency: false, amount: Uint128(123123), recipient: \"cosmwasm1vewsdxxmeraett7ztsaym88jsrv85kzm0xvjg09xqz8aqvjcja0syapxq9\" }) }, details: \"Some error\" }"), ("knot", "050"), ("knot", "000"), ] @@ -1117,9 +1189,12 @@ fn test_tick_claiming_error_with_transfer() { fn test_tick_claiming_wo_transfer_unbonding() { // no unbonded batch, no pending transfer for stake, no balance on ICA, but we have unbond batch to switch let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1131,7 +1206,7 @@ fn test_tick_claiming_wo_transfer_unbonding() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -1145,7 +1220,7 @@ fn test_tick_claiming_wo_transfer_unbonding() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -1162,11 +1237,11 @@ fn test_tick_claiming_wo_transfer_unbonding() { ) }); deps.querier - .add_wasm_query_response("staker_contract", |_| { + .add_wasm_query_response(api.addr_make("staker_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::zero()).unwrap()) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -1183,17 +1258,24 @@ fn test_tick_claiming_wo_transfer_unbonding() { ) }); deps.querier - .add_wasm_query_response("strategy_contract", |msg| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |msg| { let q: StrategyQueryMsg = from_json(msg).unwrap(); match q { StrategyQueryMsg::CalcWithdraw { withdraw } => cosmwasm_std::ContractResult::Ok( - to_json_binary(&vec![("valoper_address".to_string(), withdraw)]).unwrap(), + to_json_binary(&vec![( + api.addr_make("valoper_address").to_string(), + withdraw, + )]) + .unwrap(), ), _ => unimplemented!(), } }); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -1209,7 +1291,7 @@ fn test_tick_claiming_wo_transfer_unbonding() { transaction: drop_puppeteer_base::peripheral_hook::Transaction::ClaimRewardsAndOptionalyTransfer { interchain_account_id: "ica".to_string(), - validators: vec!["valoper_address".to_string()], + validators: vec![api.addr_make("valoper_address").to_string()], denom: "remote_denom".to_string(), transfer: None, }, @@ -1256,7 +1338,7 @@ fn test_tick_claiming_wo_transfer_unbonding() { let res = execute( deps.as_mut(), env, - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -1284,11 +1366,14 @@ fn test_tick_claiming_wo_transfer_unbonding() { ]) ) .add_submessage(SubMsg::new(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::puppeteer::ExecuteMsg::Undelegate { - items: vec![("valoper_address".to_string(), Uint128::from(1000u128))], + items: vec![( + api.addr_make("valoper_address").to_string(), + Uint128::from(1000u128) + )], batch_id: 0u128, - reply_to: "cosmos2contract".to_string() + reply_to: api.addr_make("cosmos2contract").to_string() }) .unwrap(), funds: vec![Coin::new(1000u128, "untrn")], @@ -1307,12 +1392,15 @@ fn test_tick_claiming_wo_idle() { // no unbonded batch, no pending transfer for stake, no balance on ICA, // and no unbond batch to switch, so we go to idle let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + LAST_ICA_CHANGE_HEIGHT .save(deps.as_mut().storage, &0) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1324,7 +1412,7 @@ fn test_tick_claiming_wo_idle() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -1338,7 +1426,7 @@ fn test_tick_claiming_wo_idle() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { @@ -1355,21 +1443,28 @@ fn test_tick_claiming_wo_idle() { ) }); deps.querier - .add_wasm_query_response("staker_contract", |_| { + .add_wasm_query_response(api.addr_make("staker_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::zero()).unwrap()) }); deps.querier - .add_wasm_query_response("strategy_contract", |msg| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |msg| { let q: StrategyQueryMsg = from_json(msg).unwrap(); match q { StrategyQueryMsg::CalcWithdraw { withdraw } => cosmwasm_std::ContractResult::Ok( - to_json_binary(&vec![("valoper_address".to_string(), withdraw)]).unwrap(), + to_json_binary(&vec![( + api.addr_make("valoper_address").to_string(), + withdraw, + )]) + .unwrap(), ), _ => unimplemented!(), } }); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 60000)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 60000), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -1385,7 +1480,7 @@ fn test_tick_claiming_wo_idle() { transaction: drop_puppeteer_base::peripheral_hook::Transaction::ClaimRewardsAndOptionalyTransfer { interchain_account_id: "ica".to_string(), - validators: vec!["valoper_address".to_string()], + validators: vec![api.addr_make("valoper_address").to_string()], denom: "remote_denom".to_string(), transfer: None, }, @@ -1433,7 +1528,7 @@ fn test_tick_claiming_wo_idle() { let res = execute( deps.as_mut(), env, - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ) .unwrap(); @@ -1461,9 +1556,15 @@ fn test_tick_claiming_wo_idle() { #[test] fn test_execute_tick_guard_balance_outdated() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -1474,7 +1575,7 @@ fn test_execute_tick_guard_balance_outdated() { .save(deps.as_mut().storage, &Pause::default()) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1488,7 +1589,7 @@ fn test_execute_tick_guard_balance_outdated() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ); assert!(res.is_err()); @@ -1504,9 +1605,15 @@ fn test_execute_tick_guard_balance_outdated() { #[test] fn test_execute_tick_guard_delegations_outdated() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Idle) .unwrap(); @@ -1517,7 +1624,7 @@ fn test_execute_tick_guard_delegations_outdated() { .save(deps.as_mut().storage, &Pause::default()) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1529,7 +1636,7 @@ fn test_execute_tick_guard_delegations_outdated() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -1545,7 +1652,7 @@ fn test_execute_tick_guard_delegations_outdated() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ); assert!(res.is_err()); @@ -1561,9 +1668,15 @@ fn test_execute_tick_guard_delegations_outdated() { #[test] fn test_execute_tick_staking_no_puppeteer_response() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); FSM.set_initial_state(deps.as_mut().storage, ContractState::Unbonding) .unwrap(); @@ -1574,7 +1687,7 @@ fn test_execute_tick_staking_no_puppeteer_response() { .save(deps.as_mut().storage, &Pause::default()) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1586,7 +1699,7 @@ fn test_execute_tick_staking_no_puppeteer_response() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -1602,7 +1715,7 @@ fn test_execute_tick_staking_no_puppeteer_response() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ); assert!(res.is_err()); @@ -1612,9 +1725,14 @@ fn test_execute_tick_staking_no_puppeteer_response() { #[test] fn test_execute_tick_unbonding_no_puppeteer_response() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LAST_ICA_CHANGE_HEIGHT @@ -1624,7 +1742,7 @@ fn test_execute_tick_unbonding_no_puppeteer_response() { .save(deps.as_mut().storage, &Pause::default()) .unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&BalancesResponse { balances: Balances { coins: vec![] }, @@ -1636,7 +1754,7 @@ fn test_execute_tick_unbonding_no_puppeteer_response() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { @@ -1654,7 +1772,7 @@ fn test_execute_tick_unbonding_no_puppeteer_response() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[Coin::new(1000, "untrn")]), + message_info(&api.addr_make("admin"), &[Coin::new(1000u128, "untrn")]), ExecuteMsg::Tick {}, ); assert!(res.is_err()); @@ -1664,22 +1782,25 @@ fn test_execute_tick_unbonding_no_puppeteer_response() { #[test] fn test_bond_wo_receiver() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(1000u128)).unwrap()) }); BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider_address"), ) .unwrap(); @@ -1689,7 +1810,10 @@ fn test_bond_wo_receiver() { .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -1701,7 +1825,7 @@ fn test_bond_wo_receiver() { let res = execute( deps.as_mut(), env, - mock_info("some", &[Coin::new(1000, "base_denom")]), + message_info(&api.addr_make("some"), &[Coin::new(1000u128, "base_denom")]), ExecuteMsg::Bond { receiver: None, r#ref: None, @@ -1715,21 +1839,24 @@ fn test_bond_wo_receiver() { Event::new("crates.io:drop-staking__drop-core-execute-bond") .add_attribute("action", "bond") .add_attribute("exchange_rate", "1") - .add_attribute("used_bond_provider", "native_provider_address") + .add_attribute( + "used_bond_provider", + api.addr_make("native_provider_address").to_string() + ) .add_attribute("issue_amount", "1000") - .add_attribute("receiver", "some") + .add_attribute("receiver", api.addr_make("some")) ) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "native_provider_address".to_string(), + contract_addr: api.addr_make("native_provider_address").to_string(), msg: to_json_binary(&drop_staking_base::msg::bond_provider::ExecuteMsg::Bond {}) .unwrap(), - funds: vec![Coin::new(1000, "base_denom")], + funds: vec![Coin::new(1000u128, "base_denom")], })) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "token_contract".to_string(), + contract_addr: api.addr_make("token_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::token::ExecuteMsg::Mint { amount: Uint128::from(1000u128), - receiver: "some".to_string() + receiver: api.addr_make("some").to_string() }) .unwrap(), funds: vec![], @@ -1740,15 +1867,17 @@ fn test_bond_wo_receiver() { #[test] fn test_bond_with_receiver() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(1000u128)).unwrap()) }); @@ -1760,11 +1889,14 @@ fn test_bond_with_receiver() { BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider").clone(), ) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -1776,10 +1908,10 @@ fn test_bond_with_receiver() { let res = execute( deps.as_mut(), env, - mock_info("some", &[Coin::new(1000, "base_denom")]), + message_info(&api.addr_make("some"), &[Coin::new(1000u128, "base_denom")]), ExecuteMsg::Bond { - receiver: Some("receiver".to_string()), - r#ref: Some("ref".to_string()), + receiver: Some(api.addr_make("receiver").to_string()), + r#ref: Some(api.addr_make("ref").to_string()), }, ) .unwrap(); @@ -1790,22 +1922,22 @@ fn test_bond_with_receiver() { Event::new("crates.io:drop-staking__drop-core-execute-bond") .add_attribute("action", "bond") .add_attribute("exchange_rate", "1") - .add_attribute("used_bond_provider", "native_provider_address") + .add_attribute("used_bond_provider", api.addr_make("native_provider")) .add_attribute("issue_amount", "1000") - .add_attribute("receiver", "receiver") - .add_attribute("ref", "ref") + .add_attribute("receiver", api.addr_make("receiver")) + .add_attribute("ref", api.addr_make("ref")) ) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "native_provider_address".to_string(), + contract_addr: api.addr_make("native_provider").to_string(), msg: to_json_binary(&drop_staking_base::msg::bond_provider::ExecuteMsg::Bond {}) .unwrap(), - funds: vec![Coin::new(1000, "base_denom")], + funds: vec![Coin::new(1000u128, "base_denom")], })) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "token_contract".to_string(), + contract_addr: api.addr_make("token_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::token::ExecuteMsg::Mint { amount: Uint128::from(1000u128), - receiver: "receiver".to_string() + receiver: api.addr_make("receiver").to_string() }) .unwrap(), funds: vec![], @@ -1855,18 +1987,21 @@ fn test_bond_lsm_share_increase_exchange_rate() { denom: "ld_denom".to_string(), amount: Uint128::new(1001), }]); + let api = deps.api; + mock_state_query(&mut deps); + BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { delegations: vec![DropDelegation { - delegator: Addr::unchecked("delegator"), + delegator: api.addr_make("delegator"), validator: "valoper1".to_string(), - amount: Coin::new(1000, "remote_denom".to_string()), + amount: Coin::new(1000u128, "remote_denom".to_string()), share_ratio: Decimal256::one(), }], }, @@ -1878,14 +2013,14 @@ fn test_bond_lsm_share_increase_exchange_rate() { ) }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { delegations: vec![DropDelegation { - delegator: Addr::unchecked("delegator"), + delegator: api.addr_make("delegator"), validator: "valoper1".to_string(), - amount: Coin::new(1000, "remote_denom".to_string()), + amount: Coin::new(1000u128, "remote_denom".to_string()), share_ratio: Decimal256::one(), }], }, @@ -1897,22 +2032,22 @@ fn test_bond_lsm_share_increase_exchange_rate() { ) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(100u128)).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(100500u128)).unwrap()) }); BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider_address"), ) .unwrap(); @@ -1922,7 +2057,10 @@ fn test_bond_lsm_share_increase_exchange_rate() { .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -1952,7 +2090,10 @@ fn test_bond_lsm_share_increase_exchange_rate() { let res = execute( deps.as_mut(), env, - mock_info("some", &[Coin::new(100500, "lsm_share")]), + message_info( + &api.addr_make("some"), + &[Coin::new(100500u128, "lsm_share")], + ), ExecuteMsg::Bond { receiver: None, r#ref: None, @@ -1973,13 +2114,19 @@ fn test_bond_lsm_share_increase_exchange_rate() { #[test] fn test_unbond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let mut env = mock_env(); + deps.querier - .add_wasm_query_response("factory_contract", |_| { + .add_wasm_query_response("factory_contract", move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&HashMap::from([ - ("token_contract", "token_contract"), - ("withdrawal_voucher_contract", "withdrawal_voucher_contract"), + ("token_contract", api.addr_make("token_contract").as_str()), + ( + "withdrawal_voucher_contract", + api.addr_make("withdrawal_voucher_contract").as_str(), + ), ])) .unwrap(), ) @@ -2007,7 +2154,10 @@ fn test_unbond() { ) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -2018,38 +2168,43 @@ fn test_unbond() { let res = execute( deps.as_mut(), env, - mock_info("some_sender", &[Coin::new(1000, "ld_denom")]), + message_info( + &api.addr_make("some_sender"), + &[Coin::new(1000u128, "ld_denom")], + ), ExecuteMsg::Unbond {}, ) .unwrap(); let unbond_batch = unbond_batches_map().load(deps.as_ref().storage, 0).unwrap(); - let extension = Some(drop_staking_base::state::withdrawal_voucher::Metadata { - description: Some("Withdrawal voucher".into()), - name: "LDV voucher".to_string(), - batch_id: "0".to_string(), - amount: Uint128::from(1000u128), - attributes: Some(vec![ - drop_staking_base::state::withdrawal_voucher::Trait { - display_type: None, - trait_type: "unbond_batch_id".to_string(), - value: "0".to_string(), - }, - drop_staking_base::state::withdrawal_voucher::Trait { - display_type: None, - trait_type: "received_amount".to_string(), - value: "1000".to_string(), - }, - ]), - }); + let extension = Some( + drop_staking_base::state::withdrawal_voucher::NftExtensionMsg { + description: Some("Withdrawal voucher".into()), + name: "LDV voucher".to_string(), + batch_id: "0".to_string(), + amount: Uint128::from(1000u128), + attributes: Some(vec![ + drop_staking_base::state::withdrawal_voucher::Trait { + display_type: None, + trait_type: "unbond_batch_id".to_string(), + value: "0".to_string(), + }, + drop_staking_base::state::withdrawal_voucher::Trait { + display_type: None, + trait_type: "received_amount".to_string(), + value: "1000".to_string(), + }, + ]), + }, + ); assert_eq!( res, Response::new() .add_submessage(SubMsg::new(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "withdrawal_voucher_contract".to_string(), + contract_addr: api.addr_make("withdrawal_voucher_contract").to_string(), msg: to_json_binary( &drop_staking_base::msg::withdrawal_voucher::ExecuteMsg::Mint { - token_id: "0_some_sender_1".to_string(), - owner: "some_sender".to_string(), + token_id: "0_".to_string() + api.addr_make("some_sender").as_str() + "_1", + owner: api.addr_make("some_sender").to_string(), token_uri: None, extension, } @@ -2058,7 +2213,7 @@ fn test_unbond() { funds: vec![], }))) .add_submessage(SubMsg::new(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "token_contract".to_string(), + contract_addr: api.addr_make("token_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::token::ExecuteMsg::Burn {}).unwrap(), funds: vec![Coin::new(1000u128, "ld_denom")], }))) @@ -2113,10 +2268,16 @@ mod process_emergency_batch { status: UnbondBatchStatus, ) -> OwnedDeps { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + { let deps_as_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_as_mut.storage, deps_as_mut.api, Some("owner")) - .unwrap(); + cw_ownable::initialize_owner( + deps_as_mut.storage, + deps_as_mut.api, + Some(owner_address.as_str()), + ) + .unwrap(); } { unbond_batches_map() @@ -2146,7 +2307,7 @@ mod process_emergency_batch { let err = execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), + message_info(&Addr::unchecked("stranger"), &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(100), @@ -2162,10 +2323,11 @@ mod process_emergency_batch { #[test] fn not_in_withdrawn_emergency_state() { let mut deps = setup(UnbondBatchStatus::WithdrawingEmergency); + let owner_address = deps.api.addr_make("owner"); let err = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(100), @@ -2178,10 +2340,11 @@ mod process_emergency_batch { #[test] fn unbonded_amount_is_zero() { let mut deps = setup(UnbondBatchStatus::WithdrawnEmergency); + let owner_address = deps.api.addr_make("owner"); let err = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(0), @@ -2194,10 +2357,11 @@ mod process_emergency_batch { #[test] fn unbonded_amount_too_high() { let mut deps = setup(UnbondBatchStatus::WithdrawnEmergency); + let owner_address = deps.api.addr_make("owner"); let err = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(200), @@ -2210,11 +2374,12 @@ mod process_emergency_batch { #[test] fn no_slashing() { let mut deps = setup(UnbondBatchStatus::WithdrawnEmergency); + let owner_address = deps.api.addr_make("owner"); let shared_mock_env = mock_env(); execute( deps.as_mut(), shared_mock_env.clone(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(100), @@ -2251,11 +2416,12 @@ mod process_emergency_batch { #[test] fn some_slashing() { let mut deps = setup(UnbondBatchStatus::WithdrawnEmergency); + let owner_address = deps.api.addr_make("owner"); let shared_mock_env = mock_env(); execute( deps.as_mut(), shared_mock_env.clone(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::ProcessEmergencyBatch { batch_id: 2, unbonded_amount: Uint128::new(70), @@ -2292,7 +2458,7 @@ mod process_emergency_batch { mod bond_hooks { use super::*; - use cosmwasm_std::ReplyOn; + use cosmwasm_std::{Binary, ReplyOn}; use drop_helpers::testing::mock_state_query; use drop_staking_base::msg::core::{BondCallback, BondHook}; use neutron_sdk::bindings::msg::NeutronMsg; @@ -2300,16 +2466,22 @@ mod bond_hooks { #[test] fn set_bond_hooks_unauthorized() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(owner_address.as_str()), + ) + .unwrap(); } let error = execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), + message_info(&Addr::unchecked("stranger"), &[]), ExecuteMsg::SetBondHooks { hooks: vec![] }, ) .unwrap_err(); @@ -2323,32 +2495,39 @@ mod bond_hooks { #[test] fn set_bond_hooks() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + let val_ref_address = deps.api.addr_make("val_ref"); { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(owner_address.as_str()), + ) + .unwrap(); } let response = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::SetBondHooks { - hooks: vec![String::from("val_ref")], + hooks: vec![val_ref_address.to_string()], }, ) .unwrap(); assert_eq!( BOND_HOOKS.load(deps.as_ref().storage).unwrap(), - vec![Addr::unchecked("val_ref")] + vec![val_ref_address.clone()] ); assert_eq!( response, Response::new().add_event( Event::new("crates.io:drop-staking__drop-core-execute-set-bond-hooks") - .add_attribute("contract", "val_ref") + .add_attribute("contract", val_ref_address) ) ); } @@ -2356,10 +2535,17 @@ mod bond_hooks { #[test] fn set_bond_hooks_override() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + let validator_set_address = deps.api.addr_make("validator_set"); { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(owner_address.as_str()), + ) + .unwrap(); } BOND_HOOKS @@ -2369,23 +2555,23 @@ mod bond_hooks { let response = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::SetBondHooks { - hooks: vec![String::from("validator_set")], + hooks: vec![validator_set_address.to_string()], }, ) .unwrap(); assert_eq!( BOND_HOOKS.load(deps.as_ref().storage).unwrap(), - vec![Addr::unchecked("validator_set")] + vec![validator_set_address.clone()] ); assert_eq!( response, Response::new().add_event( Event::new("crates.io:drop-staking__drop-core-execute-set-bond-hooks") - .add_attribute("contract", "validator_set") + .add_attribute("contract", validator_set_address) ) ); } @@ -2394,9 +2580,16 @@ mod bond_hooks { fn set_bond_hooks_clear() { let mut deps = mock_dependencies(&[]); + let owner_address = deps.api.addr_make("owner"); + { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(owner_address.as_str()), + ) + .unwrap(); } BOND_HOOKS @@ -2406,7 +2599,7 @@ mod bond_hooks { let response = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&owner_address, &[]), ExecuteMsg::SetBondHooks { hooks: vec![] }, ) .unwrap(); @@ -2444,16 +2637,18 @@ mod bond_hooks { #[test] fn execute_bond_with_active_bond_hook_no_ref() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(1000u128)).unwrap()) }); @@ -2462,17 +2657,20 @@ mod bond_hooks { BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider_address"), ) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) .unwrap(); BOND_HOOKS - .save(deps.as_mut().storage, &vec![Addr::unchecked("val_ref")]) + .save(deps.as_mut().storage, &vec![api.addr_make("val_ref")]) .unwrap(); PAUSE .save(deps.as_mut().storage, &Pause::default()) @@ -2481,7 +2679,7 @@ mod bond_hooks { let response = execute( deps.as_mut(), mock_env(), - mock_info("user", &[Coin::new(1000, "base_denom")]), + message_info(&api.addr_make("user"), &[Coin::new(1000u128, "base_denom")]), ExecuteMsg::Bond { receiver: None, r#ref: None, @@ -2497,13 +2695,14 @@ mod bond_hooks { id: 0, gas_limit: None, reply_on: ReplyOn::Never, + payload: Binary::default(), msg: CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: String::from("val_ref"), + contract_addr: api.addr_make("val_ref").to_string(), funds: vec![], msg: to_json_binary(&BondCallback::BondCallback(BondHook { amount: Uint128::new(1000), dasset_minted: Uint128::new(1000), - sender: Addr::unchecked("user"), + sender: api.addr_make("user"), denom: String::from("base_denom"), r#ref: None, })) @@ -2516,16 +2715,18 @@ mod bond_hooks { #[test] fn execute_bond_with_active_bond_hook() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(1000u128)).unwrap()) }); @@ -2535,17 +2736,20 @@ mod bond_hooks { BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider_address"), ) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) .unwrap(); BOND_HOOKS - .save(deps.as_mut().storage, &vec![Addr::unchecked("val_ref")]) + .save(deps.as_mut().storage, &vec![api.addr_make("val_ref")]) .unwrap(); PAUSE .save(deps.as_mut().storage, &Pause::default()) @@ -2554,10 +2758,10 @@ mod bond_hooks { let response = execute( deps.as_mut(), mock_env(), - mock_info("user", &[Coin::new(1000, "base_denom")]), + message_info(&api.addr_make("user"), &[Coin::new(1000u128, "base_denom")]), ExecuteMsg::Bond { receiver: None, - r#ref: Some(String::from("valoper")), + r#ref: Some(api.addr_make("valoper").to_string()), }, ) .unwrap(); @@ -2570,15 +2774,16 @@ mod bond_hooks { id: 0, gas_limit: None, reply_on: ReplyOn::Never, + payload: Binary::default(), msg: CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: String::from("val_ref"), + contract_addr: api.addr_make("val_ref").to_string(), funds: vec![], msg: to_json_binary(&BondCallback::BondCallback(BondHook { amount: Uint128::new(1000), dasset_minted: Uint128::new(1000), - sender: Addr::unchecked("user"), + sender: api.addr_make("user"), denom: String::from("base_denom"), - r#ref: Some(String::from("valoper")), + r#ref: Some(api.addr_make("valoper").to_string()), })) .unwrap(), }) @@ -2589,15 +2794,16 @@ mod bond_hooks { #[test] fn execute_bond_with_active_bond_hooks() { let mut deps = mock_dependencies(&[]); + let api = deps.api; BOND_PROVIDERS.init(deps.as_mut().storage).unwrap(); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&true).unwrap()) }); mock_state_query(&mut deps); deps.querier - .add_wasm_query_response("native_provider_address", |_| { + .add_wasm_query_response(api.addr_make("native_provider_address").as_str(), |_| { cosmwasm_std::ContractResult::Ok(to_json_binary(&Uint128::from(1000u128)).unwrap()) }); @@ -2609,11 +2815,14 @@ mod bond_hooks { BOND_PROVIDERS .add( deps.as_mut().storage, - Addr::unchecked("native_provider_address"), + api.addr_make("native_provider_address"), ) .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config(1000, 100, 600)) + .save( + deps.as_mut().storage, + &get_default_config(api, 1000, 100, 600), + ) .unwrap(); LD_DENOM .save(deps.as_mut().storage, &"ld_denom".into()) @@ -2621,7 +2830,7 @@ mod bond_hooks { BOND_HOOKS .save( deps.as_mut().storage, - &hooks.iter().map(|hook| Addr::unchecked(*hook)).collect(), + &hooks.iter().map(|hook| api.addr_make(hook)).collect(), ) .unwrap(); PAUSE @@ -2631,10 +2840,10 @@ mod bond_hooks { let response = execute( deps.as_mut(), mock_env(), - mock_info("user", &[Coin::new(1000, "base_denom")]), + message_info(&api.addr_make("user"), &[Coin::new(1000u128, "base_denom")]), ExecuteMsg::Bond { receiver: None, - r#ref: Some(String::from("valoper")), + r#ref: Some(api.addr_make("valoper").to_string()), }, ) .unwrap(); @@ -2649,15 +2858,16 @@ mod bond_hooks { id: 0, gas_limit: None, reply_on: ReplyOn::Never, + payload: Binary::default(), msg: CosmosMsg::::Wasm(WasmMsg::Execute { - contract_addr: String::from(*hook), + contract_addr: api.addr_make(hook).to_string(), funds: vec![], msg: to_json_binary(&BondCallback::BondCallback(BondHook { amount: Uint128::new(1000), dasset_minted: Uint128::new(1000), - sender: Addr::unchecked("user"), + sender: api.addr_make("user"), denom: String::from("base_denom"), - r#ref: Some(String::from("valoper")), + r#ref: Some(api.addr_make("valoper").to_string()), })) .unwrap(), }) @@ -2726,7 +2936,7 @@ mod pause { let error = execute( deps.as_mut(), mock_env(), - mock_info("someone", &[]), + message_info(&Addr::unchecked("someone"), &[]), ExecuteMsg::Bond { receiver: None, r#ref: None, @@ -2791,7 +3001,7 @@ mod pause { let error = execute( deps.as_mut(), mock_env(), - mock_info("someone", &[]), + message_info(&Addr::unchecked("someone"), &[]), ExecuteMsg::Unbond {}, ) .unwrap_err(); @@ -2847,7 +3057,7 @@ mod pause { let error = execute( deps.as_mut(), mock_env(), - mock_info("someone", &[]), + message_info(&Addr::unchecked("someone"), &[]), ExecuteMsg::Tick {}, ) .unwrap_err(); diff --git a/contracts/distribution/Cargo.toml b/contracts/distribution/Cargo.toml index 3d9e4541..f466220c 100644 --- a/contracts/distribution/Cargo.toml +++ b/contracts/distribution/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/distribution/src/tests.rs b/contracts/distribution/src/tests.rs index 61d31dc4..26d54643 100644 --- a/contracts/distribution/src/tests.rs +++ b/contracts/distribution/src/tests.rs @@ -1,7 +1,7 @@ use super::contract::{calc_deposit, calc_withdraw}; use cosmwasm_std::{ - testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}, - to_json_binary, Empty, OwnedDeps, Querier, Uint128, + testing::{message_info, mock_env, MockApi, MockQuerier, MockStorage}, + to_json_binary, Addr, Empty, OwnedDeps, Querier, Uint128, }; use drop_staking_base::{ error::distribution::ContractError, @@ -47,7 +47,7 @@ fn test_instantiate() { let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&Addr::unchecked("owner"), &[]), drop_staking_base::msg::distribution::InstantiateMsg {}, ) .unwrap(); diff --git a/contracts/factory/Cargo.toml b/contracts/factory/Cargo.toml index b46c4f65..bd09df02 100644 --- a/contracts/factory/Cargo.toml +++ b/contracts/factory/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/factory/src/contract.rs b/contracts/factory/src/contract.rs index 789b1407..c9490099 100644 --- a/contracts/factory/src/contract.rs +++ b/contracts/factory/src/contract.rs @@ -2,7 +2,8 @@ use std::collections::HashMap; use cosmwasm_std::{ attr, from_json, instantiate2_address, to_json_binary, Addr, Binary, CodeInfoResponse, - CosmosMsg, Deps, DepsMut, Env, HexBinary, MessageInfo, Response, StdResult, Uint128, WasmMsg, + CosmosMsg, Deps, DepsMut, Empty, Env, HexBinary, MessageInfo, Response, StdResult, Uint128, + WasmMsg, }; use cw2::ContractVersion; use drop_helpers::answer::response; @@ -262,7 +263,10 @@ pub fn instantiate( msg: to_json_binary(&WithdrawalVoucherInstantiateMsg { name: "Drop Voucher".to_string(), symbol: "DROPV".to_string(), - minter: core_contract.to_string(), + collection_info_extension: Empty {}, + minter: Some(core_contract.to_string()), + creator: Some(core_contract.to_string()), + withdraw_address: None, })?, funds: vec![], salt: Binary::from(salt), @@ -442,7 +446,7 @@ fn get_proxied_message( fn get_code_checksum(deps: Deps, code_id: u64) -> NeutronResult { let CodeInfoResponse { checksum, .. } = deps.querier.query_wasm_code_info(code_id)?; - Ok(checksum) + Ok(HexBinary::from(checksum.as_slice())) } fn get_contract_label(base: &str) -> String { @@ -480,7 +484,7 @@ fn get_splitter_receivers( ) -> ContractResult> { match fee_params { Some(fee_params) => { - let fee_weight = PERCENT_PRECISION * fee_params.fee; + let fee_weight = PERCENT_PRECISION.mul_floor(fee_params.fee); let bond_provider_weight = PERCENT_PRECISION - fee_weight; Ok(vec![ (bond_provider_address, bond_provider_weight), @@ -527,7 +531,7 @@ pub fn validate_contract_metadata( } let contract_config_owner = get_contract_config_owner(deps, contract_addr)?; - if contract_config_owner != env.contract.address { + if contract_config_owner != env.contract.address.as_str() { return Err(ContractError::InvalidContractOwner { contract: contract_addr.to_string(), expected: env.contract.address.to_string(), diff --git a/contracts/factory/src/tests.rs b/contracts/factory/src/tests.rs index d545acc9..3a255171 100644 --- a/contracts/factory/src/tests.rs +++ b/contracts/factory/src/tests.rs @@ -5,8 +5,8 @@ use crate::contract::{ use cosmwasm_std::Binary; use cosmwasm_std::{ attr, from_json, - testing::{mock_env, mock_info}, - to_json_binary, Addr, BankMsg, DepsMut, Uint128, + testing::{message_info, mock_env, MockApi}, + to_json_binary, Addr, BankMsg, Checksum, DepsMut, Empty, HexBinary, Uint128, }; use drop_helpers::phonebook::{ CORE_CONTRACT, DISTRIBUTION_CONTRACT, LSM_SHARE_BOND_PROVIDER_CONTRACT, @@ -39,103 +39,98 @@ use drop_staking_base::{ ExecuteMsg as ValidatorSetExecuteMsg, InstantiateMsg as ValidatorsSetInstantiateMsg, }, withdrawal_manager::InstantiateMsg as WithdrawalManagerInstantiateMsg, - withdrawal_voucher::InstantiateMsg as WithdrawalVoucherInstantiateMsg, }, state::{core::Pause as CorePause, splitter::Config as SplitterConfig}, }; use neutron_sdk::bindings::query::NeutronQuery; use std::collections::HashMap; -fn set_default_factory_state(deps: DepsMut) { +fn set_default_factory_state(deps: DepsMut, api: MockApi) { STATE .save( deps.storage, TOKEN_CONTRACT, - &Addr::unchecked("token_contract"), + &api.addr_make("token_contract"), ) .unwrap(); STATE - .save( - deps.storage, - CORE_CONTRACT, - &Addr::unchecked("core_contract"), - ) + .save(deps.storage, CORE_CONTRACT, &api.addr_make("core_contract")) .unwrap(); STATE .save( deps.storage, PUPPETEER_CONTRACT, - &Addr::unchecked("puppeteer_contract"), + &api.addr_make("puppeteer_contract"), ) .unwrap(); STATE .save( deps.storage, WITHDRAWAL_MANAGER_CONTRACT, - &Addr::unchecked("withdrawal_manager_contract"), + &api.addr_make("withdrawal_manager_contract"), ) .unwrap(); STATE .save( deps.storage, WITHDRAWAL_VOUCHER_CONTRACT, - &Addr::unchecked("withdrawal_voucher_contract"), + &api.addr_make("withdrawal_voucher_contract"), ) .unwrap(); STATE .save( deps.storage, STRATEGY_CONTRACT, - &Addr::unchecked("strategy_contract"), + &api.addr_make("strategy_contract"), ) .unwrap(); STATE .save( deps.storage, VALIDATORS_SET_CONTRACT, - &Addr::unchecked("validators_set_contract"), + &api.addr_make("validators_set_contract"), ) .unwrap(); STATE .save( deps.storage, DISTRIBUTION_CONTRACT, - &Addr::unchecked("distribution_contract"), + &api.addr_make("distribution_contract"), ) .unwrap(); STATE .save( deps.storage, REWARDS_MANAGER_CONTRACT, - &Addr::unchecked("rewards_manager_contract"), + &api.addr_make("rewards_manager_contract"), ) .unwrap(); STATE .save( deps.storage, REWARDS_PUMP_CONTRACT, - &Addr::unchecked("rewards_pump_contract"), + &api.addr_make("rewards_pump_contract"), ) .unwrap(); STATE .save( deps.storage, SPLITTER_CONTRACT, - &Addr::unchecked("splitter_contract"), + &api.addr_make("splitter_contract"), ) .unwrap(); STATE .save( deps.storage, LSM_SHARE_BOND_PROVIDER_CONTRACT, - &Addr::unchecked("lsm_share_bond_provider_contract"), + &api.addr_make("lsm_share_bond_provider_contract"), ) .unwrap(); STATE .save( deps.storage, NATIVE_BOND_PROVIDER_CONTRACT, - &Addr::unchecked("native_bond_provider_contract"), + &api.addr_make("native_bond_provider_contract"), ) .unwrap(); } @@ -150,8 +145,8 @@ fn test_instantiate() { cosmwasm_std::ContractResult::Ok( to_json_binary(&cosmwasm_std::CodeInfoResponse::new( from_json(data).unwrap(), - "creator".to_string(), - cosmwasm_std::HexBinary::from(y.as_slice()), + Addr::unchecked("creator".to_string()), + Checksum::from_hex(HexBinary::from(y.as_slice()).to_hex().as_str()).unwrap(), )) .unwrap(), ) @@ -245,7 +240,7 @@ fn test_instantiate() { let res = instantiate( deps.as_mut().into_empty(), mocked_env, - mock_info("owner", &[]), + message_info(&Addr::unchecked("owner"), &[]), instantiate_msg, ) .unwrap(); @@ -345,11 +340,16 @@ fn test_instantiate() { admin: Some("factory_contract".to_string()), code_id: 5, label: "drop-staking-withdrawal-voucher".to_string(), - msg: to_json_binary(&WithdrawalVoucherInstantiateMsg { - name: "Drop Voucher".to_string(), - symbol: "DROPV".to_string(), - minter: "some_humanized_address".to_string(), - }) + msg: to_json_binary( + &drop_staking_base::msg::withdrawal_voucher::CW721InstantiateMsg { + name: "Drop Voucher".to_string(), + symbol: "DROPV".to_string(), + collection_info_extension: Empty {}, + minter: Some("some_humanized_address".to_string()), + creator: Some("some_humanized_address".to_string()), + withdraw_address: None, + } + ) .unwrap(), funds: vec![], salt: cosmwasm_std::Binary::from("salt".as_bytes()) @@ -426,8 +426,14 @@ fn test_instantiate() { #[test] fn test_update_config_core_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let new_core_config = drop_staking_base::state::core::ConfigOptional { factory_contract: None, base_denom: None, @@ -443,7 +449,7 @@ fn test_update_config_core_unauthorized() { let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), ExecuteMsg::UpdateConfig(Box::new(UpdateConfigMsg::Core(Box::new( new_core_config.clone(), )))), @@ -460,25 +466,31 @@ fn test_update_config_core_unauthorized() { #[test] fn test_update_config_core() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - set_default_factory_state(deps.as_mut()); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + set_default_factory_state(deps.as_mut(), api); let new_core_config = drop_staking_base::state::core::ConfigOptional { - factory_contract: Some("factory_contract1".to_string()), + factory_contract: Some(api.addr_make("factory_contract1").to_string()), base_denom: Some("base_denom1".to_string()), remote_denom: Some("remote_denom1".to_string()), idle_min_interval: Some(1u64), unbonding_period: Some(1u64), unbonding_safe_period: Some(1u64), unbond_batch_switch_time: Some(1u64), - pump_ica_address: Some("pump_ica_address1".to_string()), - rewards_receiver: Some("rewards_receiver1".to_string()), - emergency_address: Some("emergency_address1".to_string()), + pump_ica_address: Some(api.addr_make("pump_ica_address1").to_string()), + rewards_receiver: Some(api.addr_make("rewards_receiver1").to_string()), + emergency_address: Some(api.addr_make("emergency_address1").to_string()), }; let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig(Box::new(UpdateConfigMsg::Core(Box::new( new_core_config.clone(), )))), @@ -495,7 +507,7 @@ fn test_update_config_core() { ) .add_submessages(vec![cosmwasm_std::SubMsg::new( cosmwasm_std::CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "core_contract".to_string(), + contract_addr: api.addr_make("core_contract").to_string(), msg: to_json_binary(&CoreExecuteMsg::UpdateConfig { new_config: Box::new(new_core_config.clone()) }) @@ -509,17 +521,25 @@ fn test_update_config_core() { #[test] fn test_update_config_validators_set_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let new_validator_set_config = drop_staking_base::state::validatorset::ConfigOptional { - stats_contract: Some("validator_stats_contract".to_string()), - provider_proposals_contract: Some("provider_proposals_contract1".to_string()), - val_ref_contract: Some("val_ref_contract1".to_string()), + stats_contract: Some(api.addr_make("validator_stats_contract").to_string()), + provider_proposals_contract: Some( + api.addr_make("provider_proposals_contract1").to_string(), + ), + val_ref_contract: Some(api.addr_make("val_ref_contract1").to_string()), }; let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), ExecuteMsg::UpdateConfig(Box::new(UpdateConfigMsg::ValidatorsSet( new_validator_set_config.clone(), ))), @@ -536,19 +556,27 @@ fn test_update_config_validators_set_unauthorized() { #[test] fn test_update_config_validators_set() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - set_default_factory_state(deps.as_mut()); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + set_default_factory_state(deps.as_mut(), api); let new_validator_set_config = drop_staking_base::state::validatorset::ConfigOptional { - stats_contract: Some("validator_stats_contract".to_string()), - provider_proposals_contract: Some("provider_proposals_contract1".to_string()), - val_ref_contract: Some("val_ref_contract1".to_string()), + stats_contract: Some(api.addr_make("validator_stats_contract").to_string()), + provider_proposals_contract: Some( + api.addr_make("provider_proposals_contract1").to_string(), + ), + val_ref_contract: Some(api.addr_make("val_ref_contract1").to_string()), }; let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig(Box::new(UpdateConfigMsg::ValidatorsSet( new_validator_set_config.clone(), ))), @@ -565,7 +593,7 @@ fn test_update_config_validators_set() { ) .add_submessages(vec![cosmwasm_std::SubMsg::new( cosmwasm_std::CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "validators_set_contract".to_string(), + contract_addr: api.addr_make("validators_set_contract").to_string(), msg: to_json_binary(&ValidatorSetExecuteMsg::UpdateConfig { new_config: new_validator_set_config.clone() }) @@ -579,23 +607,29 @@ fn test_update_config_validators_set() { #[test] fn test_proxy_validators_set_update_validators_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - set_default_factory_state(deps.as_mut()); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + set_default_factory_state(deps.as_mut(), api); let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), ExecuteMsg::Proxy(drop_staking_base::msg::factory::ProxyMsg::ValidatorSet( ValidatorSetMsg::UpdateValidators { validators: vec![ drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address1".to_string(), + valoper_address: api.addr_make("valoper_address1").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address2".to_string(), + valoper_address: api.addr_make("valoper_address2").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, @@ -615,24 +649,30 @@ fn test_proxy_validators_set_update_validators_unauthorized() { #[test] fn test_proxy_validators_set_update_validators() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - set_default_factory_state(deps.as_mut()); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + set_default_factory_state(deps.as_mut(), api); let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::Proxy(drop_staking_base::msg::factory::ProxyMsg::ValidatorSet( ValidatorSetMsg::UpdateValidators { validators: vec![ drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address1".to_string(), + valoper_address: api.addr_make("valoper_address1").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address2".to_string(), + valoper_address: api.addr_make("valoper_address2").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, @@ -647,16 +687,16 @@ fn test_proxy_validators_set_update_validators() { .add_submessages(vec![ cosmwasm_std::SubMsg::new(cosmwasm_std::CosmosMsg::Wasm( cosmwasm_std::WasmMsg::Execute { - contract_addr: "validators_set_contract".to_string(), + contract_addr: api.addr_make("validators_set_contract").to_string(), msg: to_json_binary(&ValidatorSetExecuteMsg::UpdateValidators { validators: vec![ drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address1".to_string(), + valoper_address: api.addr_make("valoper_address1").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, drop_staking_base::msg::validatorset::ValidatorData { - valoper_address: "valoper_address2".to_string(), + valoper_address: api.addr_make("valoper_address2").to_string(), weight: 10u64, on_top: Some(Uint128::zero()), }, @@ -668,12 +708,12 @@ fn test_proxy_validators_set_update_validators() { )), cosmwasm_std::SubMsg::new(cosmwasm_std::CosmosMsg::Wasm( cosmwasm_std::WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary( &PuppeteerExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery { validators: vec![ - "valoper_address1".to_string(), - "valoper_address2".to_string() + api.addr_make("valoper_address1").to_string(), + api.addr_make("valoper_address2").to_string() ] } ) @@ -694,16 +734,22 @@ fn test_proxy_validators_set_update_validators() { #[test] fn test_admin_execute_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), ExecuteMsg::AdminExecute { msgs: vec![ cosmwasm_std::CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "core_contract".to_string(), + contract_addr: api.addr_make("core_contract").to_string(), msg: to_json_binary(&CoreExecuteMsg::SetPause(CorePause { tick: Interval { from: 1000, @@ -719,7 +765,7 @@ fn test_admin_execute_unauthorized() { funds: vec![], }), cosmwasm_std::CosmosMsg::Bank(BankMsg::Send { - to_address: "somebody".to_string(), + to_address: api.addr_make("somebody").to_string(), amount: vec![ cosmwasm_std::Coin { denom: "denom1".to_string(), @@ -746,16 +792,22 @@ fn test_admin_execute_unauthorized() { #[test] fn test_admin_execute() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - let _ = cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + let _ = cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::AdminExecute { msgs: vec![ cosmwasm_std::CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "core_contract".to_string(), + contract_addr: api.addr_make("core_contract").to_string(), msg: to_json_binary(&CoreExecuteMsg::SetPause(CorePause { tick: Interval { from: 1000, @@ -771,7 +823,7 @@ fn test_admin_execute() { funds: vec![], }), cosmwasm_std::CosmosMsg::Bank(BankMsg::Send { - to_address: "somebody".to_string(), + to_address: api.addr_make("somebody").to_string(), amount: vec![ cosmwasm_std::Coin { denom: "denom1".to_string(), @@ -792,7 +844,7 @@ fn test_admin_execute() { cosmwasm_std::Response::new() .add_submessage(cosmwasm_std::SubMsg::new(cosmwasm_std::CosmosMsg::Wasm( cosmwasm_std::WasmMsg::Execute { - contract_addr: "core_contract".to_string(), + contract_addr: api.addr_make("core_contract").to_string(), msg: to_json_binary(&CoreExecuteMsg::SetPause(CorePause { tick: Interval { from: 1000, @@ -809,8 +861,8 @@ fn test_admin_execute() { } ))) .add_submessage(cosmwasm_std::SubMsg::new(cosmwasm_std::CosmosMsg::Bank( - cosmwasm_std::BankMsg::Send { - to_address: "somebody".to_string(), + BankMsg::Send { + to_address: api.addr_make("somebody").to_string(), amount: vec![ cosmwasm_std::Coin { denom: "denom1".to_string(), @@ -835,57 +887,65 @@ fn test_admin_execute() { #[test] fn test_query_state() { let mut deps = mock_dependencies(&[]); - set_default_factory_state(deps.as_mut()); + let api = deps.api; + set_default_factory_state(deps.as_mut(), api); let query_res: HashMap = from_json(query(deps.as_ref(), mock_env(), QueryMsg::State {}).unwrap()).unwrap(); assert_eq!( query_res, HashMap::from([ - ("core_contract".to_string(), "core_contract".to_string()), - ("token_contract".to_string(), "token_contract".to_string()), + ( + "core_contract".to_string(), + api.addr_make("core_contract").to_string() + ), + ( + "token_contract".to_string(), + api.addr_make("token_contract").to_string() + ), ( "puppeteer_contract".to_string(), - "puppeteer_contract".to_string() + api.addr_make("puppeteer_contract").to_string() ), ( "withdrawal_voucher_contract".to_string(), - "withdrawal_voucher_contract".to_string() + api.addr_make("withdrawal_voucher_contract").to_string() ), ( "withdrawal_manager_contract".to_string(), - "withdrawal_manager_contract".to_string() + api.addr_make("withdrawal_manager_contract").to_string() ), ( "strategy_contract".to_string(), - "strategy_contract".to_string() + api.addr_make("strategy_contract").to_string() ), ( "validators_set_contract".to_string(), - "validators_set_contract".to_string() + api.addr_make("validators_set_contract").to_string() ), ( "distribution_contract".to_string(), - "distribution_contract".to_string() + api.addr_make("distribution_contract").to_string() ), ( "rewards_manager_contract".to_string(), - "rewards_manager_contract".to_string() + api.addr_make("rewards_manager_contract").to_string() ), ( "rewards_pump_contract".to_string(), - "rewards_pump_contract".to_string() + api.addr_make("rewards_pump_contract").to_string() ), ( "splitter_contract".to_string(), - "splitter_contract".to_string() + api.addr_make("splitter_contract").to_string() ), ( "lsm_share_bond_provider_contract".to_string(), - "lsm_share_bond_provider_contract".to_string() + api.addr_make("lsm_share_bond_provider_contract") + .to_string() ), ( "native_bond_provider_contract".to_string(), - "native_bond_provider_contract".to_string() + api.addr_make("native_bond_provider_contract").to_string() ) ]) ); @@ -894,21 +954,20 @@ fn test_query_state() { #[test] fn test_query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - let query_res: cw_ownable::Ownership = from_json( - query( - deps.as_ref(), - mock_env(), - drop_staking_base::msg::factory::QueryMsg::Ownership {}, - ) - .unwrap(), + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), ) .unwrap(); + let query_res: cw_ownable::Ownership = + from_json(query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap()).unwrap(); assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("owner".to_string())), + owner: Some(api.addr_make("owner")), pending_expiry: None, pending_owner: None } @@ -918,14 +977,20 @@ fn test_query_ownership() { #[test] fn test_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }), ) @@ -933,23 +998,16 @@ fn test_transfer_ownership() { execute( deps.as_mut().into_empty(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::AcceptOwnership {}), ) .unwrap(); - let query_res: cw_ownable::Ownership = from_json( - query( - deps.as_ref(), - mock_env(), - drop_staking_base::msg::factory::QueryMsg::Ownership {}, - ) - .unwrap(), - ) - .unwrap(); + let query_res: cw_ownable::Ownership = + from_json(query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap()).unwrap(); assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } @@ -1138,13 +1196,14 @@ fn test_validate_contract_metadata_wrong_contract_name() { #[test] fn test_validate_contract_metadata_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let contract_addr = "cosmos2contract"; + let contract_addr = api.addr_make("cosmos2contract"); let mocked_env = mock_env(); setup_contract_metadata( &mut deps.querier, - contract_addr, + contract_addr.as_str(), "contract_name".to_string(), "wrong_owner_address".to_string(), None, @@ -1153,7 +1212,7 @@ fn test_validate_contract_metadata_wrong_owner() { let error = validate_contract_metadata( deps.as_ref().into_empty(), &mocked_env, - &Addr::unchecked(contract_addr), + &contract_addr, &["contract_name"], ) .unwrap_err(); @@ -1161,7 +1220,7 @@ fn test_validate_contract_metadata_wrong_owner() { error, drop_staking_base::error::factory::ContractError::InvalidContractOwner { contract: String::from(contract_addr), - expected: "cosmos2contract".to_string(), + expected: api.addr_make("cosmos2contract").to_string(), actual: "wrong_owner_address".to_string() } ); @@ -1170,13 +1229,14 @@ fn test_validate_contract_metadata_wrong_owner() { #[test] fn test_validate_contract_metadata_wrong_admin() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let contract_addr = "cosmos2contract"; + let contract_addr = api.addr_make("cosmos2contract"); let mocked_env = mock_env(); setup_contract_metadata( &mut deps.querier, - contract_addr, + contract_addr.as_str(), "contract_name".to_string(), mocked_env.contract.address.to_string(), Some("wrong_contract_admin".to_string()), @@ -1185,7 +1245,7 @@ fn test_validate_contract_metadata_wrong_admin() { let error = validate_contract_metadata( deps.as_ref().into_empty(), &mocked_env, - &Addr::unchecked(contract_addr), + &contract_addr, &["contract_name"], ) .unwrap_err(); @@ -1193,7 +1253,7 @@ fn test_validate_contract_metadata_wrong_admin() { error, drop_staking_base::error::factory::ContractError::InvalidContractAdmin { contract: String::from(contract_addr), - expected: "cosmos2contract".to_string(), + expected: api.addr_make("cosmos2contract").to_string(), actual: "wrong_contract_admin".to_string() } ); @@ -1202,13 +1262,14 @@ fn test_validate_contract_metadata_wrong_admin() { #[test] fn test_validate_contract_metadata_empty_admin() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let contract_addr = "cosmos2contract"; + let contract_addr = api.addr_make("cosmos2contract"); let mocked_env = mock_env(); setup_contract_metadata( &mut deps.querier, - contract_addr, + contract_addr.as_str(), "contract_name".to_string(), mocked_env.contract.address.to_string(), None, @@ -1217,7 +1278,7 @@ fn test_validate_contract_metadata_empty_admin() { let error = validate_contract_metadata( deps.as_ref().into_empty(), &mocked_env, - &Addr::unchecked(contract_addr), + &contract_addr, &["contract_name"], ) .unwrap_err(); @@ -1225,7 +1286,7 @@ fn test_validate_contract_metadata_empty_admin() { error, drop_staking_base::error::factory::ContractError::InvalidContractAdmin { contract: String::from(contract_addr), - expected: "cosmos2contract".to_string(), + expected: api.addr_make("cosmos2contract").to_string(), actual: "None".to_string() } ); @@ -1259,9 +1320,15 @@ fn setup_contract_metadata( ) }); + let admin = contract_admin.clone().map(Addr::unchecked); querier.add_wasm_query_response(contract_addr, move |_| { - let mut response = cosmwasm_std::ContractInfoResponse::default(); - response.admin = contract_admin.clone(); + let response = cosmwasm_std::ContractInfoResponse::new( + 42, + Addr::unchecked("creator"), + admin.clone(), + false, + None, + ); cosmwasm_std::ContractResult::Ok(to_json_binary(&response).unwrap()) }); diff --git a/contracts/hook-tester/Cargo.toml b/contracts/hook-tester/Cargo.toml index e368f635..3d6782e9 100644 --- a/contracts/hook-tester/Cargo.toml +++ b/contracts/hook-tester/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/lsm-share-bond-provider/Cargo.toml b/contracts/lsm-share-bond-provider/Cargo.toml index f3f525b3..975994d9 100644 --- a/contracts/lsm-share-bond-provider/Cargo.toml +++ b/contracts/lsm-share-bond-provider/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/lsm-share-bond-provider/src/contract.rs b/contracts/lsm-share-bond-provider/src/contract.rs index 393d8f93..d554a47b 100644 --- a/contracts/lsm-share-bond-provider/src/contract.rs +++ b/contracts/lsm-share-bond-provider/src/contract.rs @@ -8,7 +8,7 @@ use cosmwasm_std::{Binary, DepsMut, Env, MessageInfo, Response}; use cw_ownable::{get_ownership, update_ownership}; use drop_helpers::answer::{attr_coin, response}; use drop_helpers::get_contracts; -use drop_helpers::ibc_client_state::query_client_state; +use drop_helpers::ibc_client_state::{extract_identified_client_state, query_client_state}; use drop_helpers::ibc_fee::query_ibc_fee; use drop_puppeteer_base::peripheral_hook::{ IBCTransferReason, ReceiverExecuteMsg, ResponseHookErrorMsg, ResponseHookMsg, @@ -58,7 +58,7 @@ pub fn instantiate( }; CONFIG.save(deps.storage, config)?; - TOTAL_LSM_SHARES_REAL_AMOUNT.save(deps.storage, &0)?; + TOTAL_LSM_SHARES_REAL_AMOUNT.save(deps.storage, &Uint128::zero())?; LAST_LSM_REDEEM.save(deps.storage, &env.block.time.seconds())?; TX_STATE.save(deps.storage, &TxState::default())?; @@ -108,6 +108,7 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> ContractResul } fn query_can_be_removed(deps: Deps, env: Env) -> ContractResult { + #[allow(deprecated)] let all_balances = deps.querier.query_all_balances(env.contract.address)?; let all_balances_except_untrn = all_balances .into_iter() @@ -145,6 +146,7 @@ fn query_config(deps: Deps, _env: Env) -> ContractResult { } fn query_can_bond(deps: Deps, denom: String) -> ContractResult { + deps.api.debug("WASMDEBUG: Entering can bond in LSM"); let config = CONFIG.load(deps.storage)?; let check_denom_result = check_denom::check_denom(&deps, &denom, &config); @@ -203,7 +205,10 @@ fn query_token_amount( check_denom.validator, )?; - let issue_amount = real_amount * (Decimal::one() / exchange_rate); + let issue_amount = real_amount.mul_floor(Decimal::one() / exchange_rate); + + deps.api + .debug(format!("WASMDEBUG: LSM issue_amount: {:?}", issue_amount).as_str()); Ok(to_json_binary(&issue_amount)?) } @@ -236,7 +241,7 @@ fn execute_process_on_idle( let addrs = get_contracts!(deps, config.factory_contract, core_contract); ensure_eq!( - info.sender, + info.sender.as_str(), addrs.core_contract, ContractError::Unauthorized {} ); @@ -341,9 +346,8 @@ fn execute_bond( }); } - TOTAL_LSM_SHARES_REAL_AMOUNT.update(deps.storage, |total| { - StdResult::Ok(total + real_amount.u128()) - })?; + TOTAL_LSM_SHARES_REAL_AMOUNT + .update(deps.storage, |total| StdResult::Ok(total + real_amount))?; PENDING_LSM_SHARES.update(deps.storage, denom.to_string(), |one| { let mut new = one.unwrap_or(( check_denom.remote_denom.to_string(), @@ -383,7 +387,7 @@ fn execute_puppeteer_hook( puppeteer_contract ); ensure_eq!( - info.sender, + info.sender.as_str(), addrs.puppeteer_contract, ContractError::Unauthorized {} ); @@ -399,7 +403,8 @@ fn execute_puppeteer_hook( sum += real_amount.u128(); LSM_SHARES_TO_REDEEM.remove(deps.storage, item.local_denom.to_string()); } - TOTAL_LSM_SHARES_REAL_AMOUNT.update(deps.storage, |one| StdResult::Ok(one - sum))?; + TOTAL_LSM_SHARES_REAL_AMOUNT + .update(deps.storage, |one| StdResult::Ok(one - Uint128::new(sum)))?; LAST_LSM_REDEEM.save(deps.storage, &env.block.time.seconds())?; TX_STATE.save(deps.storage, &TxState::default())?; @@ -516,9 +521,9 @@ fn get_pending_lsm_share_msg( deps, msg, Transaction::IBCTransfer { - real_amount: real_amount.u128(), + real_amount, denom: local_denom, - amount: share_amount.u128(), + amount: share_amount, recipient: ica_address.to_string(), reason: IBCTransferReason::LSMShare, }, @@ -693,11 +698,9 @@ fn sudo_response( .ok_or_else(|| StdError::generic_err("source_port not found"))?; let client_state = query_client_state(&deps.as_ref(), channel_id, port_id)?; + let identified_client_state = extract_identified_client_state(&deps.as_ref(), client_state)?; - let remote_height = client_state - .identified_client_state - .ok_or_else(|| StdError::generic_err("IBC client state identified_client_state not found"))? - .client_state + let remote_height = identified_client_state .latest_height .ok_or_else(|| StdError::generic_err("IBC client state latest_height not found"))? .revision_height; @@ -713,8 +716,8 @@ fn sudo_response( { let current_pending = PENDING_LSM_SHARES.may_load(deps.storage, denom.to_string())?; if let Some((remote_denom, shares_amount, _real_amount)) = current_pending { - let sent_amount = Uint128::from(amount); - let sent_real_amount = Uint128::from(real_amount); + let sent_amount = amount; + let sent_real_amount = real_amount; LSM_SHARES_TO_REDEEM.update(deps.storage, denom.to_string(), |one| { let mut new = one.unwrap_or((remote_denom, Uint128::zero(), Uint128::zero())); @@ -749,7 +752,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, },) ))? )); @@ -759,7 +762,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, }), ))?, funds: vec![], @@ -795,7 +798,7 @@ pub fn migrate( pub mod check_denom { use cosmwasm_schema::cw_serde; - use cosmwasm_std::{QueryRequest, StdError, StdResult}; + use cosmwasm_std::{StdError, StdResult}; use super::*; @@ -809,14 +812,17 @@ pub mod check_denom { // yet they don't derive serde::de::DeserializeOwned, // so I have to redefine them here manually >:( - #[cw_serde] + #[derive(Clone, PartialEq, ::prost::Message)] pub struct QueryDenomTraceResponse { - pub denom_trace: DenomTrace, + #[prost(message, optional, tag = "1")] + pub denom_trace: Option, } - #[cw_serde] + #[derive(Clone, PartialEq, ::prost::Message)] pub struct DenomTrace { + #[prost(string, tag = "1")] pub path: String, + #[prost(string, tag = "2")] pub base_denom: String, } @@ -825,20 +831,31 @@ pub mod check_denom { denom: impl Into, ) -> StdResult { let denom = denom.into(); - deps.querier - .query(&QueryRequest::Stargate { - path: "/ibc.applications.transfer.v1.Query/DenomTrace".to_string(), - data: cosmos_sdk_proto::ibc::applications::transfer::v1::QueryDenomTraceRequest { - hash: denom.clone(), - } - .encode_to_vec() - .into(), - }) + let raw = deps.querier.query_grpc( + "/ibc.applications.transfer.v1.Query/DenomTrace".to_string(), + cosmos_sdk_proto::ibc::applications::transfer::v1::QueryDenomTraceRequest { + hash: denom.clone(), + } + .encode_to_vec() + .into(), + ) .map_err(|e| { StdError::generic_err(format!( "Query denom trace for denom {denom} failed: {e}, perhaps, this is not an IBC denom?" )) - }) + })?; + + let response = QueryDenomTraceResponse::decode(raw.as_slice()).map_err(|e| { + deps.api.debug( + format!( + "WASMDEBUG: Failed to decode QueryDenomTraceResponse: {:?}", + e + ) + .as_str(), + ); + StdError::generic_err(format!("Failed to decode QueryDenomTraceResponse: {:?}", e)) + })?; + Ok(response) } pub fn check_denom( @@ -846,13 +863,33 @@ pub mod check_denom { denom: &str, config: &Config, ) -> ContractResult { + deps.api.debug("WASMDEBUG: Entering check_denom"); + let addrs = get_contracts!(deps, config.factory_contract, validators_set_contract); - let trace = query_denom_trace(deps, denom)?.denom_trace; + deps.api + .debug(format!("WASMDEBUG: Retrieved contracts: {:?}", addrs).as_str()); + + // Extract the trace value, converting the Option into a concrete value. + let trace = query_denom_trace(deps, denom)? + .denom_trace + .ok_or(ContractError::InvalidDenom {})?; + deps.api + .debug(format!("WASMDEBUG: Denom trace: {:?}", trace).as_str()); + let (port, channel) = trace .path .split_once('/') .ok_or(ContractError::InvalidDenom {})?; + deps.api.debug( + format!( + "WASMDEBUG: Parsed path - port: {:?}, channel: {:?}", + port, channel + ) + .as_str(), + ); + if port != "transfer" || channel != config.transfer_channel_id { + deps.api.debug("WASMDEBUG: Invalid port or channel"); return Err(ContractError::InvalidDenom {}); } @@ -860,9 +897,18 @@ pub mod check_denom { .base_denom .split_once('/') .ok_or(ContractError::InvalidDenom {})?; - unbonding_index - .parse::() - .map_err(|_| ContractError::InvalidDenom {})?; + deps.api.debug( + format!( + "WASMDEBUG: Parsed base_denom - validator: {:?}, unbonding_index: {:?}", + validator, unbonding_index + ) + .as_str(), + ); + + unbonding_index.parse::().map_err(|_| { + deps.api.debug("WASMDEBUG: Failed to parse unbonding_index"); + ContractError::InvalidDenom {} + })?; let validator_info = deps .querier @@ -873,12 +919,17 @@ pub mod check_denom { }, )? .validator; + deps.api + .debug(format!("WASMDEBUG: Retrieved validator info: {:?}", validator_info).as_str()); + if validator_info.is_none() { + deps.api.debug("WASMDEBUG: Validator info is none"); return Err(ContractError::InvalidDenom {}); } + deps.api.debug("WASMDEBUG: check_denom succeeded"); Ok(DenomData { - remote_denom: trace.base_denom.to_string(), + remote_denom: trace.base_denom.clone(), validator: validator.to_string(), }) } diff --git a/contracts/lsm-share-bond-provider/src/tests.rs b/contracts/lsm-share-bond-provider/src/tests.rs index 67bb3be4..9d924f41 100644 --- a/contracts/lsm-share-bond-provider/src/tests.rs +++ b/contracts/lsm-share-bond-provider/src/tests.rs @@ -3,9 +3,9 @@ use std::borrow::BorrowMut; use cosmwasm_schema::cw_serde; use cosmwasm_std::{ attr, coins, from_json, - testing::{mock_env, mock_info, MockApi}, - to_json_binary, Addr, Coin, Decimal, Decimal256, Event, MemoryStorage, OwnedDeps, Response, - SubMsg, Timestamp, Uint128, + testing::{message_info, mock_env, MockApi}, + to_json_binary, Addr, Binary, Coin, Decimal, Decimal256, Event, MemoryStorage, OwnedDeps, + Response, SubMsg, Timestamp, Uint128, }; use cw_ownable::{Action, Ownership}; use cw_utils::PaymentError; @@ -37,9 +37,13 @@ use crate::contract::check_denom::{DenomTrace, QueryDenomTraceResponse}; use prost::Message; -fn get_default_config(lsm_redeem_threshold: u64, lsm_redeem_maximum_interval: u64) -> Config { +fn get_default_config( + lsm_redeem_threshold: u64, + lsm_redeem_maximum_interval: u64, + api: MockApi, +) -> Config { Config { - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), port_id: "port_id".to_string(), transfer_channel_id: "transfer_channel_id".to_string(), timeout: 100u64, @@ -58,6 +62,7 @@ fn lsm_denom_query_config( deps: &mut OwnedDeps, unknown_validator: bool, ) { + let api = deps.api; deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |request| { @@ -67,31 +72,32 @@ fn lsm_denom_query_config( ) .unwrap(); if request.hash == "lsm_denom_1" { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "transfer/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) } else { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "wrong_denom".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) } }, ); - deps.querier - .add_wasm_query_response("validators_set_contract", move |request| { + deps.querier.add_wasm_query_response( + api.addr_make("validators_set_contract").as_str(), + move |request| { let request = from_json::(request).unwrap(); if let drop_staking_base::msg::validatorset::QueryMsg::Validator { valoper } = request { @@ -108,7 +114,7 @@ fn lsm_denom_query_config( to_json_binary(&drop_staking_base::msg::validatorset::ValidatorResponse { validator: Some( drop_staking_base::state::validatorset::ValidatorInfo { - valoper_address: "valoper12345".to_string(), + valoper_address: api.addr_make("valoper12345").to_string(), weight: 1u64, last_processed_remote_height: None, last_processed_local_height: None, @@ -130,17 +136,18 @@ fn lsm_denom_query_config( } else { unimplemented!() } - }); + }, + ); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&DelegationsResponse { delegations: Delegations { delegations: vec![DropDelegation { - delegator: Addr::unchecked("delegator"), + delegator: api.addr_make("delegator"), validator: "valoper12345".to_string(), - amount: Coin::new(1000, "remote_denom".to_string()), + amount: Coin::new(1000u128, "remote_denom".to_string()), share_ratio: Decimal256::one(), }], }, @@ -156,13 +163,14 @@ fn lsm_denom_query_config( #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::lsm_share_bond_provider::InstantiateMsg { - owner: "owner".to_string(), - factory_contract: "factory_contract".to_string(), + owner: api.addr_make("owner").to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), port_id: "port_id".to_string(), transfer_channel_id: "transfer_channel_id".to_string(), timeout: 100u64, @@ -177,7 +185,7 @@ fn test_instantiate() { .load(deps.as_ref().storage) .unwrap(); - assert_eq!(config, get_default_config(100u64, 200u64)); + assert_eq!(config, get_default_config(100u64, 200u64, api)); assert_eq!(response.messages.len(), 0); assert_eq!( @@ -185,7 +193,10 @@ fn test_instantiate() { vec![ Event::new("crates.io:drop-staking__drop-lsm-share-bond-provider-instantiate") .add_attributes([ - ("factory_contract", "factory_contract"), + ( + "factory_contract", + api.addr_make("factory_contract").as_str() + ), ("port_id", "port_id"), ("transfer_channel_id", "transfer_channel_id"), ("timeout", "100"), @@ -201,26 +212,27 @@ fn test_instantiate() { #[test] fn test_update_config_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + CONFIG + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - factory_contract: Some(Addr::unchecked("factory_contract_1")), + factory_contract: Some(api.addr_make("factory_contract_1")), port_id: Some("port_id_1".to_string()), transfer_channel_id: Some("transfer_channel_id_1".to_string()), timeout: Some(200u64), @@ -233,35 +245,37 @@ fn test_update_config_wrong_owner() { .unwrap_err(); assert_eq!( error, - drop_staking_base::error::lsm_share_bond_provider::ContractError::OwnershipError( - cw_ownable::OwnershipError::NotOwner - ) + ContractError::OwnershipError(cw_ownable::OwnershipError::NotOwner) ); } #[test] fn test_update_config_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + CONFIG + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - factory_contract: Some(Addr::unchecked("factory_contract_1")), + factory_contract: Some(api.addr_make("factory_contract_1")), port_id: Some("port_id_1".to_string()), transfer_channel_id: Some("transfer_channel_id_1".to_string()), timeout: Some(200u64), @@ -279,7 +293,10 @@ fn test_update_config_ok() { vec![ Event::new("crates.io:drop-staking__drop-lsm-share-bond-provider-update_config") .add_attributes([ - ("factory_contract", "factory_contract_1"), + ( + "factory_contract", + api.addr_make("factory_contract_1").as_str() + ), ("port_id", "port_id_1"), ("transfer_channel_id", "transfer_channel_id_1"), ("timeout", "200"), @@ -300,8 +317,8 @@ fn test_update_config_ok() { assert_eq!( config, - to_json_binary(&drop_staking_base::state::lsm_share_bond_provider::Config { - factory_contract: Addr::unchecked("factory_contract_1"), + to_json_binary(&Config { + factory_contract: api.addr_make("factory_contract_1"), port_id: "port_id_1".to_string(), transfer_channel_id: "transfer_channel_id_1".to_string(), timeout: 200u64, @@ -316,22 +333,23 @@ fn test_update_config_ok() { #[test] fn test_update_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::UpdateOwnership( Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: None, }, ), @@ -348,8 +366,8 @@ fn test_update_ownership() { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), - pending_owner: Some(Addr::unchecked("new_owner")), + owner: Some(api.addr_make("core")), + pending_owner: Some(api.addr_make("new_owner")), pending_expiry: None }) .unwrap() @@ -359,16 +377,21 @@ fn test_update_ownership() { #[test] fn process_on_idle_not_core_contract() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_core_contract", &[]), + message_info(&Addr::unchecked("not_core_contract"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -382,11 +405,14 @@ fn process_on_idle_not_core_contract() { #[test] fn test_process_on_idle_lsm_share_not_ready() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); LAST_LSM_REDEEM.save(deps_mut.storage, &0).unwrap(); @@ -398,21 +424,21 @@ fn test_process_on_idle_lsm_share_not_ready() { let error = crate::contract::execute( deps_mut, mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); - assert_eq!( - error, - drop_staking_base::error::lsm_share_bond_provider::ContractError::LSMSharesIsNotReady {} - ); + assert_eq!(error, ContractError::LSMSharesIsNotReady {}); } #[test] fn test_process_on_idle_supported() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: IbcFee { @@ -425,10 +451,10 @@ fn test_process_on_idle_supported() { }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port_id".to_string(), channel_id: "channel_id".to_string(), }) @@ -439,7 +465,7 @@ fn test_process_on_idle_supported() { let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); LAST_LSM_REDEEM.save(deps_mut.storage, &0).unwrap(); @@ -460,7 +486,7 @@ fn test_process_on_idle_supported() { let response = crate::contract::execute( deps_mut, mocked_env.clone(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap(); @@ -477,8 +503,8 @@ fn test_process_on_idle_supported() { source_port: "port_id".to_string(), source_channel: "transfer_channel_id".to_string(), token: Coin::new(1u128, "lsm_denom_1"), - sender: "cosmos2contract".to_string(), - receiver: "ica_address".to_string(), + sender: api.addr_make("cosmos2contract").to_string(), + receiver: api.addr_make("ica_address").to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, revision_height: None, @@ -499,17 +525,20 @@ fn test_process_on_idle_supported() { #[test] fn test_execute_bond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + lsm_denom_query_config(deps.borrow_mut(), false); let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); TOTAL_LSM_SHARES_REAL_AMOUNT - .save(deps_mut.storage, &0) + .save(deps_mut.storage, &Uint128::zero()) .unwrap(); let pending_lsm_shares = crate::contract::query( @@ -527,7 +556,10 @@ fn test_execute_bond() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, "lsm_denom_1")]), + message_info( + &Addr::unchecked("core"), + &[Coin::new(100u128, "lsm_denom_1")], + ), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::Bond {}, ) .unwrap(); @@ -555,7 +587,7 @@ fn test_execute_bond() { let total_lsm_shares = TOTAL_LSM_SHARES_REAL_AMOUNT .load(deps.as_ref().storage) .unwrap(); - assert_eq!(total_lsm_shares, 100u128); + assert_eq!(total_lsm_shares, Uint128::new(100)); assert_eq!( pending_lsm_shares, @@ -574,17 +606,26 @@ fn test_execute_bond() { #[test] fn test_execute_bond_wrong_denom() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + lsm_denom_query_config(deps.borrow_mut(), false); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + CONFIG + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, "wrong_denom")]), + message_info( + &Addr::unchecked("core"), + &[Coin::new(100u128, "wrong_denom")], + ), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -598,16 +639,21 @@ fn test_execute_bond_wrong_denom() { #[test] fn test_execute_bond_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + CONFIG + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&Addr::unchecked("core"), &[]), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -623,17 +669,26 @@ fn test_execute_bond_no_funds() { #[test] fn test_bond_lsm_share_wrong_validator() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + lsm_denom_query_config(deps.borrow_mut(), true); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + CONFIG + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(1000u128, "wrong_lsm_share")]), + message_info( + &Addr::unchecked("core"), + &[Coin::new(1000u128, "wrong_lsm_share")], + ), drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -664,8 +719,8 @@ fn test_execute_bond_multiple_denoms() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info( - "core", + message_info( + &Addr::unchecked("core"), &[ Coin::new(100u128, "base_denom"), Coin::new(100u128, "second_denom"), @@ -714,8 +769,13 @@ mod query { #[test] fn test_config() { let mut deps = mock_dependencies(&[]); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + let api = deps.api; + + CONFIG + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let response = crate::contract::query( @@ -726,7 +786,7 @@ mod query { .unwrap(); assert_eq!( response, - to_json_binary(&get_default_config(100u64, 200u64)).unwrap() + to_json_binary(&get_default_config(100u64, 200u64, api)).unwrap() ); } @@ -773,16 +833,19 @@ mod query { #[test] fn test_can_process_idle_with_enough_interval() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + let deps_mut = deps.as_mut(); let env = mock_env(); let lsm_redeem_maximum_interval = 100; - drop_staking_base::state::lsm_share_bond_provider::CONFIG + CONFIG .save( deps_mut.storage, - &get_default_config(2u64, lsm_redeem_maximum_interval), + &get_default_config(2u64, lsm_redeem_maximum_interval, api), ) .unwrap(); @@ -816,13 +879,15 @@ mod query { #[test] fn test_can_process_false_below_threshold() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); let deps_mut = deps.as_mut(); let env = mock_env(); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + CONFIG + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); LAST_LSM_REDEEM @@ -852,13 +917,14 @@ mod query { #[test] fn test_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ) .unwrap(); @@ -872,7 +938,7 @@ mod query { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), + owner: Some(api.addr_make("core")), pending_owner: None, pending_expiry: None }) @@ -883,13 +949,16 @@ mod query { #[test] fn test_can_bond_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + + mock_state_query(&mut deps); lsm_denom_query_config(deps.borrow_mut(), false); - drop_staking_base::state::lsm_share_bond_provider::CONFIG + CONFIG .save( deps.as_mut().storage, - &drop_staking_base::state::lsm_share_bond_provider::Config { - factory_contract: Addr::unchecked("factory_contract"), + &Config { + factory_contract: api.addr_make("factory_contract"), port_id: "port_id".to_string(), transfer_channel_id: "transfer_channel_id".to_string(), timeout: 100u64, @@ -915,13 +984,16 @@ mod query { #[test] fn test_can_bond_false() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + + mock_state_query(&mut deps); lsm_denom_query_config(deps.borrow_mut(), false); - drop_staking_base::state::lsm_share_bond_provider::CONFIG + CONFIG .save( deps.as_mut().storage, - &drop_staking_base::state::lsm_share_bond_provider::Config { - factory_contract: Addr::unchecked("factory_contract"), + &Config { + factory_contract: api.addr_make("factory_contract"), port_id: "port_id".to_string(), transfer_channel_id: "transfer_channel_id".to_string(), timeout: 100u64, @@ -1013,7 +1085,7 @@ mod query { let deps_mut = deps.as_mut(); drop_staking_base::state::lsm_share_bond_provider::TOTAL_LSM_SHARES_REAL_AMOUNT - .save(deps_mut.storage, &100u128) + .save(deps_mut.storage, &Uint128::new(100)) .unwrap(); let can_bond = crate::contract::query( @@ -1023,16 +1095,18 @@ mod query { ) .unwrap(); - assert_eq!(can_bond, to_json_binary(&100u128).unwrap()); + assert_eq!(can_bond, to_json_binary(&Uint128::from(100u128)).unwrap()); } #[test] fn test_can_process_idle_false_without_shares() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); LAST_LSM_REDEEM.save(deps_mut.storage, &0).unwrap(); @@ -1052,16 +1126,18 @@ mod query { #[test] fn test_can_process_idle_with_pending_shares() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let deps_mut = deps.as_mut(); - drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps_mut.storage, &get_default_config(100u64, 200u64)) + CONFIG + .save(deps_mut.storage, &get_default_config(100u64, 200u64, api)) .unwrap(); TX_STATE .save(deps_mut.storage, &TxState::default()) .unwrap(); - drop_staking_base::state::lsm_share_bond_provider::PENDING_LSM_SHARES + PENDING_LSM_SHARES .save( deps_mut.storage, "lsm_denom_1".to_string(), @@ -1081,10 +1157,11 @@ mod query { #[test] fn test_can_process_idle_with_enough_redeem_shares() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); drop_staking_base::state::lsm_share_bond_provider::CONFIG - .save(deps_mut.storage, &get_default_config(2u64, 200u64)) + .save(deps_mut.storage, &get_default_config(2u64, 200u64, api)) .unwrap(); LAST_LSM_REDEEM.save(deps_mut.storage, &0).unwrap(); @@ -1120,10 +1197,16 @@ mod query { #[test] fn test_token_amount() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + + mock_state_query(&mut deps); lsm_denom_query_config(deps.borrow_mut(), false); CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let token_amount = crate::contract::query( @@ -1139,17 +1222,23 @@ mod query { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&100u128).unwrap()); + assert_eq!(token_amount, to_json_binary(&Uint128::new(100)).unwrap()); } #[test] fn test_token_amount_half() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + lsm_denom_query_config(deps.borrow_mut(), false); CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let token_amount = crate::contract::query( @@ -1165,17 +1254,26 @@ mod query { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&200u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::new(200u128)).unwrap() + ); } #[test] fn test_token_amount_above_one() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + lsm_denom_query_config(deps.borrow_mut(), false); CONFIG - .save(deps.as_mut().storage, &get_default_config(100u64, 200u64)) + .save( + deps.as_mut().storage, + &get_default_config(100u64, 200u64, api), + ) .unwrap(); let token_amount = crate::contract::query( @@ -1191,12 +1289,12 @@ mod query { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&90u128).unwrap()); + assert_eq!(token_amount, to_json_binary(&Uint128::new(90u128)).unwrap()); } } mod check_denom { - + use cosmwasm_std::Binary; use drop_staking_base::error::lsm_share_bond_provider::ContractError; use crate::contract::check_denom::{DenomData, DenomTrace, QueryDenomTraceResponse}; @@ -1206,25 +1304,28 @@ mod check_denom { #[test] fn test_invalid_port() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "icahost/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1233,25 +1334,28 @@ mod check_denom { #[test] fn test_invalid_channel() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "transfer/unknown_channel".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1260,25 +1364,28 @@ mod check_denom { #[test] fn test_invalid_port_and_channel() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "icahost/unknown_channel".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1287,25 +1394,28 @@ mod check_denom { #[test] fn test_not_an_lsm_share() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "unknown_denom".to_string(), path: "transfer/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1314,25 +1424,29 @@ mod check_denom { #[test] fn test_unknown_validator() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper98765/1".to_string(), path: "transfer/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let query_called = std::rc::Rc::new(std::cell::RefCell::new(false)); let query_called_cb = std::rc::Rc::clone(&query_called); - deps.querier - .add_wasm_query_response("validators_set_contract", move |request| { + deps.querier.add_wasm_query_response( + api.addr_make("validators_set_contract").as_str(), + move |request| { let request = from_json::(request).unwrap(); if let drop_staking_base::msg::validatorset::QueryMsg::Validator { valoper } = @@ -1350,11 +1464,12 @@ mod check_denom { } else { unimplemented!() } - }); + }, + ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1364,25 +1479,27 @@ mod check_denom { #[test] fn test_invalid_validator_index() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1/2".to_string(), path: "transfer/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); let err = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap_err(); assert_eq!(err, ContractError::InvalidDenom {}); @@ -1391,23 +1508,27 @@ mod check_denom { #[test] fn test_known_validator() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); + deps.querier.add_stargate_query_response( "/ibc.applications.transfer.v1.Query/DenomTrace", |_| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&QueryDenomTraceResponse { - denom_trace: DenomTrace { + cosmwasm_std::ContractResult::Ok(Binary::from( + QueryDenomTraceResponse { + denom_trace: Some(DenomTrace { base_denom: "valoper12345/1".to_string(), path: "transfer/transfer_channel_id".to_string(), - }, - }) - .unwrap(), - ) + }), + } + .encode_to_vec(), + )) }, ); - deps.querier - .add_wasm_query_response("validators_set_contract", |request| { + deps.querier.add_wasm_query_response( + api.addr_make("validators_set_contract").as_str(), + move |request| { let request = from_json::(request).unwrap(); if let drop_staking_base::msg::validatorset::QueryMsg::Validator { valoper } = @@ -1418,7 +1539,7 @@ mod check_denom { to_json_binary(&drop_staking_base::msg::validatorset::ValidatorResponse { validator: Some( drop_staking_base::state::validatorset::ValidatorInfo { - valoper_address: "valoper12345".to_string(), + valoper_address: api.addr_make("valoper12345").to_string(), weight: 1u64, last_processed_remote_height: None, last_processed_local_height: None, @@ -1439,11 +1560,12 @@ mod check_denom { } else { unimplemented!() } - }); + }, + ); let denom_data = crate::contract::check_denom::check_denom( &deps.as_ref(), "ibc/12345678", - &get_default_config(100, 200), + &get_default_config(100, 200, api), ) .unwrap(); assert_eq!( @@ -1471,9 +1593,10 @@ mod pending_redeem_shares { #[test] fn no_pending_lsm_shares() { let mut deps = mock_dependencies(&[]); + let api = deps.api; mock_state_query(&mut deps); - let config = &get_default_config(100u64, 200u64); + let config = &get_default_config(100u64, 200u64, api); LAST_LSM_REDEEM.save(deps.as_mut().storage, &0).unwrap(); @@ -1486,9 +1609,10 @@ mod pending_redeem_shares { #[test] fn lsm_shares_below_threshold() { let mut deps = mock_dependencies(&[]); + let api = deps.api; mock_state_query(&mut deps); - let config = &get_default_config(100u64, 200u64); + let config = &get_default_config(100u64, 200u64, api); let env = &mock_env(); @@ -1517,11 +1641,13 @@ mod pending_redeem_shares { #[test] fn lsm_shares_pass_threshold() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); let lsm_redeem_maximum_interval = 100; - let config = &get_default_config(100u64, lsm_redeem_maximum_interval); + let config = &get_default_config(100u64, lsm_redeem_maximum_interval, api); let env = &mock_env(); @@ -1551,7 +1677,7 @@ mod pending_redeem_shares { redeem_res, Some(SubMsg::reply_always( CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: MOCK_PUPPETEER_CONTRACT_ADDR.to_string(), + contract_addr: api.addr_make(MOCK_PUPPETEER_CONTRACT_ADDR).to_string(), msg: to_json_binary( &drop_staking_base::msg::puppeteer::ExecuteMsg::RedeemShares { items: vec![RedeemShareItem { @@ -1573,9 +1699,11 @@ mod pending_redeem_shares { #[test] fn lsm_shares_limit_redeem() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); - let config = &get_default_config(2u64, 200u64); + let config = &get_default_config(2u64, 200u64, api); let env = &mock_env(); @@ -1624,7 +1752,7 @@ mod pending_redeem_shares { redeem_res, Some(SubMsg::reply_always( CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: MOCK_PUPPETEER_CONTRACT_ADDR.to_string(), + contract_addr: api.addr_make(MOCK_PUPPETEER_CONTRACT_ADDR).to_string(), msg: to_json_binary( &drop_staking_base::msg::puppeteer::ExecuteMsg::RedeemShares { items: vec![ diff --git a/contracts/mirror/Cargo.toml b/contracts/mirror/Cargo.toml index 75b4add2..2e5c8f97 100644 --- a/contracts/mirror/Cargo.toml +++ b/contracts/mirror/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -28,6 +26,7 @@ cosmwasm-std = { workspace = true } cw-ownable = { workspace = true } cw2 = { workspace = true } neutron-sdk = { workspace = true } +neutron-std = { workspace = true } drop-staking-base = { workspace = true } drop-helpers = { workspace = true } semver = { workspace = true } @@ -35,4 +34,6 @@ cw-storage-plus = { workspace = true } cw-utils = { workspace = true } bech32 = { workspace = true } thiserror = { workspace = true } -serde-json-wasm = { workspace = true } \ No newline at end of file +serde-json-wasm = { workspace = true } +prost = { workspace = true } +prost-types = { workspace = true } \ No newline at end of file diff --git a/contracts/mirror/src/contract.rs b/contracts/mirror/src/contract.rs index db60cad5..317f831a 100644 --- a/contracts/mirror/src/contract.rs +++ b/contracts/mirror/src/contract.rs @@ -14,11 +14,10 @@ use cosmwasm_std::{ use cw_ownable::update_ownership; use drop_helpers::answer::response; use drop_helpers::ibc_fee::query_ibc_fee; -use neutron_sdk::bindings::{ - msg::{MsgIbcTransferResponse, NeutronMsg}, - query::NeutronQuery, -}; +use neutron_sdk::bindings::{msg::NeutronMsg, query::NeutronQuery}; +use neutron_sdk::interchain_txs::helpers::decode_message_response; use neutron_sdk::sudo::msg::{RequestPacket, RequestPacketTimeoutHeight, TransferSudoMsg}; +use neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse; use std::str::FromStr; use std::{env, vec}; @@ -269,13 +268,15 @@ pub fn store_seq_id( deps: DepsMut, msg: Reply, ) -> ContractResult> { - let msg_ibc_transfer_response: MsgIbcTransferResponse = serde_json_wasm::from_slice( - msg.result + let msg_ibc_transfer_response: MsgSubmitTxResponse = decode_message_response( + &msg.result .into_result() .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), + .msg_responses + .first() + .ok_or_else(|| StdError::generic_err("no msg_responses found"))? + .value + .to_vec(), ) .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; let seq_id = msg_ibc_transfer_response.sequence_id; diff --git a/contracts/mirror/src/tests.rs b/contracts/mirror/src/tests.rs index f3a14b51..1240b82c 100644 --- a/contracts/mirror/src/tests.rs +++ b/contracts/mirror/src/tests.rs @@ -9,28 +9,32 @@ use crate::state::{ }; use cosmwasm_std::{ attr, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Binary, ChannelResponse, Coin, CosmosMsg, Event, IbcChannel, IbcEndpoint, - IbcOrder, Reply, ReplyOn, Response, SubMsg, SubMsgResponse, SubMsgResult, Uint128, WasmMsg, + IbcOrder, MsgResponse, Reply, ReplyOn, Response, SubMsg, SubMsgResponse, SubMsgResult, Uint128, + WasmMsg, }; use cw_ownable::OwnershipError; use cw_utils::PaymentError; use drop_helpers::testing::mock_dependencies; use drop_helpers::testing::MOCK_CONTRACT_ADDR; -use neutron_sdk::bindings::msg::{IbcFee, MsgIbcTransferResponse, NeutronMsg}; +use neutron_sdk::bindings::msg::{IbcFee, NeutronMsg}; use neutron_sdk::query::min_ibc_fee::MinIbcFeeResponse; use neutron_sdk::sudo::msg::{RequestPacket, RequestPacketTimeoutHeight, TransferSudoMsg}; +use neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse; +use prost::Message; #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let res = instantiate( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), InstantiateMsg { owner: None, - core_contract: "core_contract".to_string(), + core_contract: api.addr_make("core_contract").to_string(), source_channel: "source_channel".to_string(), source_port: "source_port".to_string(), ibc_timeout: 0u64, @@ -44,8 +48,8 @@ fn test_instantiate() { Response::new().add_event( Event::new("crates.io:drop-staking__drop-mirror-instantiate").add_attributes(vec![ attr("action", "instantiate"), - attr("owner", "owner"), - attr("core_contract", "core_contract"), + attr("owner", api.addr_make("owner")), + attr("core_contract", api.addr_make("core_contract")), attr("source_port", "source_port"), attr("source_channel", "source_channel"), attr("ibc_timeout", "0"), @@ -58,6 +62,7 @@ fn test_instantiate() { #[test] fn test_execute_bond_invalid_prefix() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -73,7 +78,7 @@ fn test_execute_bond_invalid_prefix() { let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::Bond { receiver: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), r#ref: None, @@ -86,6 +91,7 @@ fn test_execute_bond_invalid_prefix() { #[test] fn test_execute_bond_payment_error() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -101,7 +107,7 @@ fn test_execute_bond_payment_error() { let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::Bond { receiver: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), r#ref: None, @@ -114,6 +120,7 @@ fn test_execute_bond_payment_error() { #[test] fn test_execute_bond_wrong_receiver_address() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -129,7 +136,7 @@ fn test_execute_bond_wrong_receiver_address() { let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::Bond { receiver: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwrong_receiver_address".to_string(), r#ref: None, @@ -142,6 +149,7 @@ fn test_execute_bond_wrong_receiver_address() { #[test] fn test_execute_bond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -157,8 +165,8 @@ fn test_execute_bond() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "owner", + message_info( + &api.addr_make("owner"), &[Coin { denom: "denom".to_string(), amount: Uint128::from(123u128), @@ -179,6 +187,7 @@ fn test_execute_bond() { Response::new() .add_submessage(SubMsg { id: BOND_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: "core_contract".to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::Bond { @@ -210,13 +219,19 @@ fn test_execute_bond() { #[test] fn test_execute_update_config_unauthrozied() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract_0".to_string(), + core_contract: api.addr_make("core_contract_0").to_string(), source_channel: "source_channel_0".to_string(), source_port: "source_port_0".to_string(), ibc_timeout: 0u64, @@ -227,10 +242,10 @@ fn test_execute_update_config_unauthrozied() { let res = execute( deps.as_mut(), mock_env(), - mock_info("random_sender", &[]), + message_info(&api.addr_make("random_sender"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract_1".to_string()), + core_contract: Some(api.addr_make("core_contract_1").to_string()), source_channel: Some("source_channel_1".to_string()), source_port: Some("source_port_1".to_string()), ibc_timeout: Some(1), @@ -248,13 +263,19 @@ fn test_execute_update_config_unauthrozied() { #[test] fn test_execute_update_config_souce_channel_error() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract_0".to_string(), + core_contract: api.addr_make("core_contract_0").to_string(), source_channel: "source_channel_0".to_string(), source_port: "source_port_0".to_string(), ibc_timeout: 0u64, @@ -265,10 +286,10 @@ fn test_execute_update_config_souce_channel_error() { let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract_1".to_string()), + core_contract: Some(api.addr_make("core_contract_1").to_string()), source_channel: Some("source_channel_1".to_string()), source_port: Some("source_port_1".to_string()), ibc_timeout: Some(1), @@ -283,13 +304,19 @@ fn test_execute_update_config_souce_channel_error() { #[test] fn test_execute_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract_0".to_string(), + core_contract: api.addr_make("core_contract_0").to_string(), source_channel: "source_channel_0".to_string(), source_port: "source_port_0".to_string(), ibc_timeout: 0u64, @@ -300,29 +327,27 @@ fn test_execute_update_config() { deps.querier.add_ibc_channel_response( Some("source_channel_1".to_string()), Some("source_port_1".to_string()), - ChannelResponse { - channel: Some(IbcChannel::new( - IbcEndpoint { - port_id: "port_id".to_string(), - channel_id: "channel_id".to_string(), - }, - IbcEndpoint { - port_id: "port_id".to_string(), - channel_id: "channel_id".to_string(), - }, - IbcOrder::Unordered, - "version".to_string(), - "connection_id".to_string(), - )), - }, + ChannelResponse::new(Some(IbcChannel::new( + IbcEndpoint { + port_id: "port_id".to_string(), + channel_id: "channel_id".to_string(), + }, + IbcEndpoint { + port_id: "port_id".to_string(), + channel_id: "channel_id".to_string(), + }, + IbcOrder::Unordered, + "version".to_string(), + "connection_id".to_string(), + ))), ); let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract_1".to_string()), + core_contract: Some(api.addr_make("core_contract_1").to_string()), source_channel: Some("source_channel_1".to_string()), source_port: Some("source_port_1".to_string()), ibc_timeout: Some(1), @@ -337,7 +362,7 @@ fn test_execute_update_config() { Event::new("crates.io:drop-staking__drop-mirror-execute_update_config").add_attributes( vec![ attr("action", "execute_update_config"), - attr("core_contract", "core_contract_1"), + attr("core_contract", api.addr_make("core_contract_1")), attr("ibc_timeout", "1"), attr("prefix", "neutron_1"), attr("source_port", "source_port_1"), @@ -351,13 +376,19 @@ fn test_execute_update_config() { #[test] fn test_execute_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract_0".to_string(), + core_contract: api.addr_make("core_contract_0").to_string(), source_channel: "source_channel_0".to_string(), source_port: "source_port_0".to_string(), ibc_timeout: 0u64, @@ -368,29 +399,27 @@ fn test_execute_update_config_unauthorized() { deps.querier.add_ibc_channel_response( Some("source_channel_1".to_string()), Some("source_port_1".to_string()), - ChannelResponse { - channel: Some(IbcChannel::new( - IbcEndpoint { - port_id: "port_id".to_string(), - channel_id: "channel_id".to_string(), - }, - IbcEndpoint { - port_id: "port_id".to_string(), - channel_id: "channel_id".to_string(), - }, - IbcOrder::Unordered, - "version".to_string(), - "connection_id".to_string(), - )), - }, + ChannelResponse::new(Some(IbcChannel::new( + IbcEndpoint { + port_id: "port_id".to_string(), + channel_id: "channel_id".to_string(), + }, + IbcEndpoint { + port_id: "port_id".to_string(), + channel_id: "channel_id".to_string(), + }, + IbcOrder::Unordered, + "version".to_string(), + "connection_id".to_string(), + ))), ); let res = execute( deps.as_mut(), mock_env(), - mock_info("random_sender", &[]), + message_info(&api.addr_make("random_sender"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract_1".to_string()), + core_contract: Some(api.addr_make("core_contract_1").to_string()), source_channel: Some("source_channel_1".to_string()), source_port: Some("source_port_1".to_string()), ibc_timeout: Some(1), @@ -408,14 +437,20 @@ fn test_execute_update_config_unauthorized() { #[test] fn test_execute_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }), ) @@ -423,7 +458,7 @@ fn test_execute_transfer_ownership() { execute( deps.as_mut(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::AcceptOwnership {}), ) .unwrap(); @@ -432,7 +467,7 @@ fn test_execute_transfer_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } @@ -442,11 +477,12 @@ fn test_execute_transfer_ownership() { #[test] fn test_execute_retry_take_1_from_3() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), + core_contract: api.addr_make("core_contract").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -487,7 +523,7 @@ fn test_execute_retry_take_1_from_3() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -507,6 +543,7 @@ fn test_execute_retry_take_1_from_3() { ) .add_submessages(vec![SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), @@ -514,7 +551,7 @@ fn test_execute_retry_take_1_from_3() { denom: "denom2".to_string(), amount: Uint128::from(1u128) }, - sender: MOCK_CONTRACT_ADDR.to_string(), + sender: api.addr_make(MOCK_CONTRACT_ADDR).to_string(), receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, @@ -568,11 +605,12 @@ fn test_execute_retry_take_1_from_3() { #[test] fn test_execute_retry_take_one() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), + core_contract: api.addr_make("core_contract").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -603,7 +641,7 @@ fn test_execute_retry_take_one() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -623,6 +661,7 @@ fn test_execute_retry_take_one() { ) .add_submessages(vec![SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), @@ -630,7 +669,7 @@ fn test_execute_retry_take_one() { denom: "denom1".to_string(), amount: Uint128::from(1u128) }, - sender: MOCK_CONTRACT_ADDR.to_string(), + sender: api.addr_make(MOCK_CONTRACT_ADDR).to_string(), receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, @@ -672,6 +711,7 @@ fn test_execute_retry_take_one() { #[test] fn test_execute_retry_take_0() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -687,7 +727,7 @@ fn test_execute_retry_take_0() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -705,6 +745,7 @@ fn test_execute_retry_take_0() { #[test] fn test_execute_retry_take_empty() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -727,7 +768,7 @@ fn test_execute_retry_take_empty() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -745,6 +786,7 @@ fn test_execute_retry_take_empty() { #[test] fn test_execute_retry_none() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -760,7 +802,7 @@ fn test_execute_retry_none() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -778,14 +820,20 @@ fn test_execute_retry_none() { #[test] fn test_query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let query_res: cw_ownable::Ownership = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap()).unwrap(); assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("owner".to_string())), + owner: Some(api.addr_make("owner")), pending_expiry: None, pending_owner: None } @@ -907,11 +955,12 @@ fn test_query_failed_receiver_empty() { #[test] fn test_execute_reply_finalize_bond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract_0".to_string(), + core_contract: api.addr_make("core_contract_0").to_string(), source_channel: "source_channel_0".to_string(), source_port: "source_port_0".to_string(), ibc_timeout: 0u64, @@ -920,7 +969,10 @@ fn test_execute_reply_finalize_bond() { ) .unwrap(); BOND_REPLY_RECEIVER - .save(deps.as_mut().storage, &"reply_receiver".to_string()) + .save( + deps.as_mut().storage, + &api.addr_make("reply_receiver").to_string(), + ) .unwrap(); deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { @@ -937,9 +989,13 @@ fn test_execute_reply_finalize_bond() { mock_env(), Reply { id: BOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("tf_mint").add_attribute("amount", "100dasset")], data: None, + msg_responses: vec![], }), }, ) @@ -949,6 +1005,7 @@ fn test_execute_reply_finalize_bond() { Response::new() .add_submessage(SubMsg { id: 0, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port_0".to_string(), source_channel: "source_channel_0".to_string(), @@ -956,8 +1013,8 @@ fn test_execute_reply_finalize_bond() { denom: "dasset".to_string(), amount: Uint128::from(100u128) }, - sender: "cosmos2contract".to_string(), - receiver: "reply_receiver".to_string(), + sender: api.addr_make("cosmos2contract").to_string(), + receiver: api.addr_make("reply_receiver").to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, revision_height: None @@ -978,7 +1035,7 @@ fn test_execute_reply_finalize_bond() { .add_attributes(vec![ attr("action", "reply_finalize_bond"), attr("amount", "100dasset"), - attr("to_address", "reply_receiver"), + attr("to_address", api.addr_make("reply_receiver")), attr("source_port", "source_port_0"), attr("source_channel", "source_channel_0"), attr("ibc-timeout", "0") @@ -1017,9 +1074,13 @@ fn test_execute_reply_finalize_bond_no_tokens_minted() { mock_env(), Reply { id: BOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) @@ -1050,9 +1111,13 @@ fn test_execute_reply_finalize_bond_no_tokens_minted_amount_found() { mock_env(), Reply { id: BOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("tf_mint")], data: None, + msg_responses: vec![], }), }, ) @@ -1077,19 +1142,22 @@ fn test_reply_store_seq_id_invalid_type() { mock_env(), Reply { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("wasm").add_attribute("token_id", "1_neutron..._123")], - data: Some(to_json_binary(&"wrong_data".to_string()).unwrap()), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from("wrong_data".as_bytes()), + }], }), }, ) .unwrap_err(); - assert_eq!( - res, - ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "failed to parse response: InvalidType".to_string() - }) - ); + assert!(format!("{}", res).contains("failed to parse response")); + assert!(format!("{}", res).contains("failed to decode Protobuf message")); } #[test] @@ -1109,15 +1177,22 @@ fn test_reply_store_seq_id() { mock_env(), Reply { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![], - data: Some( - to_json_binary(&MsgIbcTransferResponse { - sequence_id: 0u64, - channel: "channel".to_string(), - }) - .unwrap(), - ), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + MsgSubmitTxResponse { + sequence_id: 0u64, + channel: "channel".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) diff --git a/contracts/native-bond-provider/Cargo.toml b/contracts/native-bond-provider/Cargo.toml index 795135a4..437d1610 100644 --- a/contracts/native-bond-provider/Cargo.toml +++ b/contracts/native-bond-provider/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -34,3 +32,4 @@ drop-puppeteer-base = { workspace = true } drop-helpers = { workspace = true } serde-json-wasm = { workspace = true } semver = { workspace = true } +prost = "0.12.6" diff --git a/contracts/native-bond-provider/src/contract.rs b/contracts/native-bond-provider/src/contract.rs index b02e14fb..f917c86e 100644 --- a/contracts/native-bond-provider/src/contract.rs +++ b/contracts/native-bond-provider/src/contract.rs @@ -7,7 +7,7 @@ use cosmwasm_std::{Binary, DepsMut, Env, MessageInfo, Response}; use cw_ownable::{get_ownership, update_ownership}; use drop_helpers::answer::{attr_coin, response}; use drop_helpers::get_contracts; -use drop_helpers::ibc_client_state::query_client_state; +use drop_helpers::ibc_client_state::{extract_identified_client_state, query_client_state}; use drop_helpers::ibc_fee::query_ibc_fee; use drop_puppeteer_base::peripheral_hook::{ IBCTransferReason, ReceiverExecuteMsg, ResponseHookErrorMsg, ResponseHookMsg, @@ -99,6 +99,7 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> ContractResul } fn query_can_be_removed(deps: Deps, env: Env) -> ContractResult { + #[allow(deprecated)] let all_balances = deps.querier.query_all_balances(env.contract.address)?; let all_balances_except_untrn = all_balances .into_iter() @@ -182,7 +183,7 @@ fn query_token_amount( let config = CONFIG.load(deps.storage)?; if can_bond(config.base_denom, coin.denom) { - let issue_amount = coin.amount * (Decimal::one() / exchange_rate); + let issue_amount = coin.amount.mul_floor(Decimal::one() / exchange_rate); return Ok(to_json_binary(&issue_amount)?); } @@ -290,7 +291,7 @@ fn execute_process_on_idle( let addrs = get_contracts!(deps, config.factory_contract, core_contract); ensure_eq!( - info.sender, + info.sender.as_str(), addrs.core_contract, ContractError::Unauthorized {} ); @@ -396,8 +397,8 @@ fn get_ibc_transfer_msg( msg, Transaction::IBCTransfer { denom: pending_coin.denom, - amount: pending_coin.amount.u128(), - real_amount: pending_coin.amount.u128(), + amount: pending_coin.amount, + real_amount: pending_coin.amount, recipient: ica_address.to_string(), reason: IBCTransferReason::Delegate, }, @@ -425,7 +426,7 @@ fn execute_puppeteer_hook( ); ensure_eq!( - info.sender, + info.sender.as_str(), addrs.puppeteer_contract, ContractError::Unauthorized {} ); @@ -517,9 +518,7 @@ fn transaction_reply(deps: DepsMut) -> ContractResult { TX_STATE.save(deps.storage, &tx_state)?; if let Some(Transaction::IBCTransfer { amount, .. }) = tx_state.transaction { - NON_STAKED_BALANCE.update(deps.storage, |balance| { - StdResult::Ok(balance + Uint128::from(amount)) - })?; + NON_STAKED_BALANCE.update(deps.storage, |balance| StdResult::Ok(balance + amount))?; } Ok(Response::new()) @@ -571,9 +570,7 @@ fn sudo_error( .ok_or_else(|| StdError::generic_err("transaction not found"))?; if let Transaction::IBCTransfer { amount, .. } = transaction.clone() { - NON_STAKED_BALANCE.update(deps.storage, |balance| { - StdResult::Ok(balance - Uint128::from(amount)) - })?; + NON_STAKED_BALANCE.update(deps.storage, |balance| StdResult::Ok(balance - amount))?; } TX_STATE.save(deps.storage, &TxState::default())?; @@ -624,11 +621,10 @@ fn sudo_response( .ok_or_else(|| StdError::generic_err("source_port not found"))?; let client_state = query_client_state(&deps.as_ref(), channel_id, port_id)?; + let identified_client_state = extract_identified_client_state(&deps.as_ref(), client_state)?; - let remote_height = client_state - .identified_client_state - .ok_or_else(|| StdError::generic_err("IBC client state identified_client_state not found"))? - .client_state + // Finally, extract the revision_height from latest_height. + let remote_height = identified_client_state .latest_height .ok_or_else(|| StdError::generic_err("IBC client state latest_height not found"))? .revision_height; @@ -646,7 +642,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, },) ))? )); @@ -656,7 +652,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, }), ))?, funds: vec![], diff --git a/contracts/native-bond-provider/src/tests.rs b/contracts/native-bond-provider/src/tests.rs index 19a97b5e..f095f0ff 100644 --- a/contracts/native-bond-provider/src/tests.rs +++ b/contracts/native-bond-provider/src/tests.rs @@ -1,6 +1,7 @@ +use cosmwasm_std::testing::MockApi; use cosmwasm_std::{ attr, coins, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Addr, BalanceResponse, Coin, CosmosMsg, Decimal, Event, Response, SubMsg, Uint128, WasmMsg, }; @@ -19,9 +20,9 @@ use neutron_sdk::{ sudo::msg::RequestPacketTimeoutHeight, }; -fn get_default_config() -> Config { +fn get_default_config(api: MockApi) -> Config { Config { - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), base_denom: "base_denom".to_string(), min_ibc_transfer: Uint128::from(100u128), min_stake_amount: Uint128::from(100u128), @@ -34,14 +35,16 @@ fn get_default_config() -> Config { #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::native_bond_provider::InstantiateMsg { - owner: "owner".to_string(), + owner: api.addr_make("owner").to_string(), base_denom: "base_denom".to_string(), - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), min_ibc_transfer: Uint128::from(100u128), min_stake_amount: Uint128::from(100u128), port_id: "port_id".to_string(), @@ -53,7 +56,7 @@ fn instantiate() { let config = CONFIG.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_default_config()); + assert_eq!(config, get_default_config(api)); assert_eq!(response.messages.len(), 0); assert_eq!( @@ -61,7 +64,7 @@ fn instantiate() { vec![ Event::new("crates.io:drop-staking__drop-native-bond-provider-instantiate") .add_attributes([ - attr("factory_contract", "factory_contract"), + attr("factory_contract", api.addr_make("factory_contract")), attr("min_ibc_transfer", Uint128::from(100u128)), attr("min_stake_amount", Uint128::from(100u128)), attr("base_denom", "base_denom"), @@ -77,8 +80,10 @@ fn instantiate() { #[test] fn query_config() { let mut deps = mock_dependencies(&[]); - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + let api = deps.api; + + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let response = crate::contract::query( @@ -87,33 +92,34 @@ fn query_config() { drop_staking_base::msg::native_bond_provider::QueryMsg::Config {}, ) .unwrap(); - assert_eq!(response, to_json_binary(&get_default_config()).unwrap()); + assert_eq!(response, to_json_binary(&get_default_config(api)).unwrap()); } #[test] fn update_config_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps_mut.storage, &get_default_config()) + CONFIG + .save(deps_mut.storage, &get_default_config(api)) .unwrap(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { base_denom: Some("base_denom".to_string()), - factory_contract: Some(Addr::unchecked("factory_contract")), + factory_contract: Some(api.addr_make("factory_contract")), min_ibc_transfer: Some(Uint128::from(100u128)), min_stake_amount: Some(Uint128::from(100u128)), port_id: Some("port_id".to_string()), @@ -134,27 +140,28 @@ fn update_config_wrong_owner() { #[test] fn update_config_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { base_denom: Some("base_denom_1".to_string()), - factory_contract: Some(Addr::unchecked("factory_contract_1")), + factory_contract: Some(api.addr_make("factory_contract_1")), min_ibc_transfer: Some(Uint128::from(90u128)), min_stake_amount: Some(Uint128::from(90u128)), port_id: Some("port_id_1".to_string()), @@ -170,7 +177,7 @@ fn update_config_ok() { vec![ Event::new("crates.io:drop-staking__drop-native-bond-provider-update_config") .add_attributes([ - attr("factory_contract", "factory_contract_1"), + attr("factory_contract", api.addr_make("factory_contract_1")), attr("base_denom", "base_denom_1"), attr("min_ibc_transfer", Uint128::from(90u128)), attr("min_stake_amount", Uint128::from(90u128)), @@ -190,8 +197,8 @@ fn update_config_ok() { .unwrap(); assert_eq!( config, - to_json_binary(&drop_staking_base::state::native_bond_provider::Config { - factory_contract: Addr::unchecked("factory_contract_1"), + to_json_binary(&Config { + factory_contract: api.addr_make("factory_contract_1"), base_denom: "base_denom_1".to_string(), min_ibc_transfer: Uint128::from(90u128), min_stake_amount: Uint128::from(90u128), @@ -206,13 +213,14 @@ fn update_config_ok() { #[test] fn query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ) .unwrap(); @@ -226,7 +234,7 @@ fn query_ownership() { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), + owner: Some(api.addr_make("core")), pending_owner: None, pending_expiry: None }) @@ -237,9 +245,10 @@ fn query_ownership() { #[test] fn query_can_bond_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let can_bond = crate::contract::query( @@ -257,9 +266,10 @@ fn query_can_bond_ok() { #[test] fn query_can_bond_false() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let can_bond = crate::contract::query( @@ -277,9 +287,10 @@ fn query_can_bond_false() { #[test] fn query_can_not_process_on_idle_not_in_idle_state() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -316,9 +327,10 @@ fn query_can_not_process_on_idle_not_in_idle_state() { #[test] fn query_can_process_on_idle_false_if_no_funds_to_process() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -331,9 +343,7 @@ fn query_can_process_on_idle_false_if_no_funds_to_process() { deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, "base_denom".to_string()), - }, + BalanceResponse::new(Coin::new(0u128, "base_denom".to_string())), ); let error = crate::contract::query( @@ -357,9 +367,10 @@ fn query_can_process_on_idle_false_if_no_funds_to_process() { #[test] fn query_can_process_on_idle_enough_non_staked_balance() { let mut deps = mock_dependencies(&[Coin::new(1000u128, "base_denom")]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -379,9 +390,7 @@ fn query_can_process_on_idle_enough_non_staked_balance() { deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, "base_denom".to_string()), - }, + BalanceResponse::new(Coin::new(0u128, "base_denom".to_string())), ); let res: bool = from_json(res).unwrap(); @@ -392,9 +401,10 @@ fn query_can_process_on_idle_enough_non_staked_balance() { #[test] fn query_can_process_on_idle_enough_contract_balance() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -414,9 +424,7 @@ fn query_can_process_on_idle_enough_contract_balance() { deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(100u128, "base_denom".to_string()), - }, + BalanceResponse::new(Coin::new(100u128, "base_denom".to_string())), ); let res: bool = from_json(res).unwrap(); @@ -427,9 +435,10 @@ fn query_can_process_on_idle_enough_contract_balance() { #[test] fn query_token_amount() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -445,15 +454,19 @@ fn query_token_amount() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&100u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::new(100u128)).unwrap() + ); } #[test] fn query_token_amount_half() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -469,15 +482,19 @@ fn query_token_amount_half() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&200u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::new(200u128)).unwrap() + ); } #[test] fn query_token_amount_above_one() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -493,15 +510,16 @@ fn query_token_amount_above_one() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&90u128).unwrap()); + assert_eq!(token_amount, to_json_binary(&Uint128::new(90u128)).unwrap()); } #[test] fn query_token_amount_wrong_denom() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::query( @@ -526,22 +544,23 @@ fn query_token_amount_wrong_denom() { #[test] fn update_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::UpdateOwnership( Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: None, }, ), @@ -558,8 +577,8 @@ fn update_ownership() { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), - pending_owner: Some(Addr::unchecked("new_owner")), + owner: Some(api.addr_make("core")), + pending_owner: Some(api.addr_make("new_owner")), pending_expiry: None }) .unwrap() @@ -569,10 +588,12 @@ fn update_ownership() { #[test] fn process_on_idle_not_in_idle_state() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -594,7 +615,7 @@ fn process_on_idle_not_in_idle_state() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -610,16 +631,18 @@ fn process_on_idle_not_in_idle_state() { #[test] fn process_on_idle_not_core_contract() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_core_contract", &[]), + message_info(&api.addr_make("not_core_contract"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -633,10 +656,12 @@ fn process_on_idle_not_core_contract() { #[test] fn process_on_idle_delegation() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -648,10 +673,10 @@ fn process_on_idle_delegation() { .unwrap(); deps.querier - .add_wasm_query_response("strategy_contract", |_| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&vec![( - "valoper_address".to_string(), + api.addr_make("valoper_address").to_string(), Uint128::from(1000u128), )]) .unwrap(), @@ -661,7 +686,7 @@ fn process_on_idle_delegation() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap(); @@ -675,10 +700,13 @@ fn process_on_idle_delegation() { )) .add_submessage(SubMsg::reply_always( CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::puppeteer::ExecuteMsg::Delegate { - items: vec![("valoper_address".to_string(), Uint128::from(1000u128))], - reply_to: "cosmos2contract".to_string() + items: vec![( + api.addr_make("valoper_address").to_string(), + Uint128::from(1000u128) + )], + reply_to: api.addr_make("cosmos2contract").to_string() }) .unwrap(), funds: vec![], @@ -691,10 +719,12 @@ fn process_on_idle_delegation() { #[test] fn process_on_idle_ibc_transfer() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -706,10 +736,8 @@ fn process_on_idle_ibc_transfer() { .unwrap(); deps.querier.add_bank_query_response( - "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(100u128, "base_denom".to_string()), - }, + api.addr_make("cosmos2contract").to_string(), + BalanceResponse::new(Coin::new(100u128, "base_denom".to_string())), ); deps.querier.add_custom_query_response(|_| { @@ -724,10 +752,10 @@ fn process_on_idle_ibc_transfer() { }); deps.querier - .add_wasm_query_response("puppeteer_contract", |_| { + .add_wasm_query_response(api.addr_make("puppeteer_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port_id".to_string(), channel_id: "channel_id".to_string(), }) @@ -740,7 +768,7 @@ fn process_on_idle_ibc_transfer() { let res = crate::contract::execute( deps.as_mut(), mocked_env.clone(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap(); @@ -757,8 +785,8 @@ fn process_on_idle_ibc_transfer() { source_port: "port_id".to_string(), source_channel: "transfer_channel_id".to_string(), token: Coin::new(100u128, "base_denom"), - sender: "cosmos2contract".to_string(), - receiver: "ica_address".to_string(), + sender: api.addr_make("cosmos2contract").to_string(), + receiver: api.addr_make("ica_address").to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, revision_height: None, @@ -779,10 +807,12 @@ fn process_on_idle_ibc_transfer() { #[test] fn process_on_idle_not_allowed_if_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + mock_state_query(&mut deps); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); NON_STAKED_BALANCE @@ -794,16 +824,14 @@ fn process_on_idle_not_allowed_if_no_funds() { .unwrap(); deps.querier.add_bank_query_response( - "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, "base_denom".to_string()), - }, + api.addr_make("cosmos2contract").to_string(), + BalanceResponse::new(Coin::new(0u128, "base_denom".to_string())), ); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -822,15 +850,19 @@ fn process_on_idle_not_allowed_if_no_funds() { #[test] fn execute_bond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, "base_denom")]), + message_info( + &Addr::unchecked("core"), + &[Coin::new(100u128, "base_denom")], + ), drop_staking_base::msg::native_bond_provider::ExecuteMsg::Bond {}, ) .unwrap(); @@ -848,15 +880,19 @@ fn execute_bond() { #[test] fn execute_bond_wrong_denom() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, "wrong_denom")]), + message_info( + &Addr::unchecked("core"), + &[Coin::new(100u128, "wrong_denom")], + ), drop_staking_base::msg::native_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -870,15 +906,16 @@ fn execute_bond_wrong_denom() { #[test] fn execute_bond_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&Addr::unchecked("core"), &[]), drop_staking_base::msg::native_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -894,16 +931,17 @@ fn execute_bond_no_funds() { #[test] fn execute_bond_multiple_denoms() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - drop_staking_base::state::native_bond_provider::CONFIG - .save(deps.as_mut().storage, &get_default_config()) + CONFIG + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info( - "core", + message_info( + &Addr::unchecked("core"), &[ Coin::new(100u128, "base_denom"), Coin::new(100u128, "second_denom"), diff --git a/contracts/native-sync-bond-provider/Cargo.toml b/contracts/native-sync-bond-provider/Cargo.toml index 8296d9dd..ae0b0b54 100644 --- a/contracts/native-sync-bond-provider/Cargo.toml +++ b/contracts/native-sync-bond-provider/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/native-sync-bond-provider/src/contract.rs b/contracts/native-sync-bond-provider/src/contract.rs index 6389f05b..93e1c9e4 100644 --- a/contracts/native-sync-bond-provider/src/contract.rs +++ b/contracts/native-sync-bond-provider/src/contract.rs @@ -128,7 +128,7 @@ fn query_can_process_on_idle(deps: Deps, env: &Env) -> ContractRes fn query_token_amount(coin: Coin, exchange_rate: Decimal) -> ContractResult { if can_bond(LOCAL_DENOM.to_string(), coin.denom) { - let issue_amount = coin.amount * (Decimal::one() / exchange_rate); + let issue_amount = coin.amount.mul_floor(Decimal::one() / exchange_rate); return Ok(to_json_binary(&issue_amount)?); } diff --git a/contracts/native-sync-bond-provider/src/tests.rs b/contracts/native-sync-bond-provider/src/tests.rs index 6c0a677f..11f8a62a 100644 --- a/contracts/native-sync-bond-provider/src/tests.rs +++ b/contracts/native-sync-bond-provider/src/tests.rs @@ -2,9 +2,8 @@ use std::collections::HashMap; use cosmwasm_std::{ attr, from_json, - testing::{mock_env, mock_info}, - to_json_binary, Addr, BalanceResponse, Coin, CosmosMsg, Decimal, Event, Response, Uint128, - WasmMsg, + testing::{message_info, mock_env, MockApi}, + to_json_binary, BalanceResponse, Coin, CosmosMsg, Decimal, Event, Response, Uint128, WasmMsg, }; use cw_ownable::{Action, Ownership}; use cw_utils::PaymentError; @@ -16,36 +15,37 @@ use drop_staking_base::{ use crate::contract::LOCAL_DENOM; -fn get_default_config() -> Config { +fn get_default_config(api: MockApi) -> Config { Config { - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), } } #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::native_sync_bond_provider::InstantiateMsg { - owner: "owner".to_string(), - factory_contract: "factory_contract".to_string(), + owner: api.addr_make("owner").to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), }, ) .unwrap(); let config = CONFIG.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_default_config()); + assert_eq!(config, get_default_config(api)); assert_eq!(response.messages.len(), 0); assert_eq!( response.events, vec![ Event::new("crates.io:drop-staking__drop-native-sync-bond-provider-instantiate") - .add_attributes([attr("factory_contract", "factory_contract"),]) + .add_attributes([attr("factory_contract", api.addr_make("factory_contract")),]) ] ); assert!(response.attributes.is_empty()); @@ -54,8 +54,10 @@ fn instantiate() { #[test] fn query_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let response = crate::contract::query( @@ -64,32 +66,33 @@ fn query_config() { drop_staking_base::msg::native_sync_bond_provider::QueryMsg::Config {}, ) .unwrap(); - assert_eq!(response, to_json_binary(&get_default_config()).unwrap()); + assert_eq!(response, to_json_binary(&get_default_config(api)).unwrap()); } #[test] fn update_config_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config()) + .save(deps_mut.storage, &get_default_config(api)) .unwrap(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - factory_contract: Some("factory_contract".to_string()), + factory_contract: Some(api.addr_make("factory_contract").to_string()), }, }, ) @@ -105,26 +108,27 @@ fn update_config_wrong_owner() { #[test] fn update_config_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - factory_contract: Some("factory_contract_1".to_string()), + factory_contract: Some(api.addr_make("factory_contract_1").to_string()), }, }, ) @@ -134,7 +138,10 @@ fn update_config_ok() { response.events, vec![ Event::new("crates.io:drop-staking__drop-native-sync-bond-provider-update_config") - .add_attributes([attr("factory_contract", "factory_contract_1"),]) + .add_attributes([attr( + "factory_contract", + api.addr_make("factory_contract_1") + ),]) ] ); assert!(response.attributes.is_empty()); @@ -148,7 +155,7 @@ fn update_config_ok() { assert_eq!( config, to_json_binary(&Config { - factory_contract: Addr::unchecked("factory_contract_1"), + factory_contract: api.addr_make("factory_contract_1"), }) .unwrap() ); @@ -157,13 +164,14 @@ fn update_config_ok() { #[test] fn query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ) .unwrap(); @@ -177,7 +185,7 @@ fn query_ownership() { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), + owner: Some(api.addr_make("core")), pending_owner: None, pending_expiry: None }) @@ -188,9 +196,10 @@ fn query_ownership() { #[test] fn query_can_bond_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let can_bond = crate::contract::query( @@ -208,9 +217,10 @@ fn query_can_bond_ok() { #[test] fn query_can_bond_false() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let can_bond = crate::contract::query( @@ -228,16 +238,15 @@ fn query_can_bond_false() { #[test] fn query_can_process_on_idle_false_if_no_funds_to_process() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, LOCAL_DENOM.to_string()), - }, + BalanceResponse::new(Coin::new(0u128, LOCAL_DENOM.to_string())), ); let error = crate::contract::query( @@ -261,9 +270,10 @@ fn query_can_process_on_idle_false_if_no_funds_to_process() { #[test] fn query_can_process_on_idle_enough_non_staked_balance() { let mut deps = mock_dependencies(&[Coin::new(1000u128, LOCAL_DENOM)]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let res = crate::contract::query( @@ -275,9 +285,7 @@ fn query_can_process_on_idle_enough_non_staked_balance() { deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, LOCAL_DENOM.to_string()), - }, + BalanceResponse::new(Coin::new(0u128, LOCAL_DENOM.to_string())), ); let res: bool = from_json(res).unwrap(); @@ -288,9 +296,10 @@ fn query_can_process_on_idle_enough_non_staked_balance() { #[test] fn query_can_process_on_idle_enough_contract_balance() { let mut deps = mock_dependencies(&[Coin::new(1000u128, LOCAL_DENOM)]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let res = crate::contract::query( @@ -302,9 +311,7 @@ fn query_can_process_on_idle_enough_contract_balance() { deps.querier.add_bank_query_response( "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(100u128, LOCAL_DENOM.to_string()), - }, + BalanceResponse::new(Coin::new(100u128, LOCAL_DENOM.to_string())), ); let res: bool = from_json(res).unwrap(); @@ -315,9 +322,10 @@ fn query_can_process_on_idle_enough_contract_balance() { #[test] fn query_token_amount() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -333,15 +341,19 @@ fn query_token_amount() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&100u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::from(100u128)).unwrap() + ); } #[test] fn query_token_amount_half() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -357,15 +369,19 @@ fn query_token_amount_half() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&200u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::from(200u128)).unwrap() + ); } #[test] fn query_token_amount_above_one() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let token_amount = crate::contract::query( @@ -381,15 +397,19 @@ fn query_token_amount_above_one() { ) .unwrap(); - assert_eq!(token_amount, to_json_binary(&90u128).unwrap()); + assert_eq!( + token_amount, + to_json_binary(&Uint128::from(90u128)).unwrap() + ); } #[test] fn query_token_amount_wrong_denom() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::query( @@ -414,22 +434,23 @@ fn query_token_amount_wrong_denom() { #[test] fn update_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::UpdateOwnership( Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: None, }, ), @@ -446,8 +467,8 @@ fn update_ownership() { assert_eq!( response, to_json_binary(&Ownership { - owner: Some(Addr::unchecked("core")), - pending_owner: Some(Addr::unchecked("new_owner")), + owner: Some(api.addr_make("core")), + pending_owner: Some(api.addr_make("new_owner")), pending_expiry: None }) .unwrap() @@ -457,25 +478,26 @@ fn update_ownership() { #[test] fn process_on_idle_not_core_contract() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier - .add_wasm_query_response("factory_contract", |_| { + .add_wasm_query_response(api.addr_make("factory_contract").as_str(), move |_| { to_json_binary(&HashMap::from([ - ("strategy_contract", "strategy_contract"), - ("core_contract", "core_contract"), - ("puppeteer_contract", "puppeteer_contract"), + ("strategy_contract", api.addr_make("strategy_contract")), + ("core_contract", api.addr_make("core_contract")), + ("puppeteer_contract", api.addr_make("puppeteer_contract")), ])) .into() }); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_core_contract", &[]), + message_info(&api.addr_make("not_core_contract"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -489,26 +511,27 @@ fn process_on_idle_not_core_contract() { #[test] fn process_on_idle_delegation() { let mut deps = mock_dependencies(&[Coin::new(1000u128, LOCAL_DENOM)]); + let api = deps.api; deps.querier - .add_wasm_query_response("factory_contract", |_| { + .add_wasm_query_response(api.addr_make("factory_contract").as_str(), move |_| { to_json_binary(&HashMap::from([ - ("strategy_contract", "strategy_contract"), - ("core_contract", "core_contract"), - ("puppeteer_contract", "puppeteer_contract"), + ("strategy_contract", api.addr_make("strategy_contract")), + ("core_contract", api.addr_make("core_contract")), + ("puppeteer_contract", api.addr_make("puppeteer_contract")), ])) .into() }); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); deps.querier - .add_wasm_query_response("strategy_contract", |_| { + .add_wasm_query_response(api.addr_make("strategy_contract").as_str(), move |_| { cosmwasm_std::ContractResult::Ok( to_json_binary(&vec![( - "valoper_address".to_string(), + api.addr_make("valoper_address").to_string(), Uint128::from(1000u128), )]) .unwrap(), @@ -518,7 +541,7 @@ fn process_on_idle_delegation() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap(); @@ -531,10 +554,13 @@ fn process_on_idle_delegation() { "crates.io:drop-staking__drop-native-sync-bond-provider-process_on_idle" )) .add_message(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "puppeteer_contract".to_string(), + contract_addr: api.addr_make("puppeteer_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::puppeteer::ExecuteMsg::Delegate { - items: vec![("valoper_address".to_string(), Uint128::from(1000u128))], - reply_to: "cosmos2contract".to_string() + items: vec![( + api.addr_make("valoper_address").to_string(), + Uint128::from(1000u128) + )], + reply_to: api.addr_make("cosmos2contract").to_string() }) .unwrap(), funds: vec![Coin::new(1000u128, LOCAL_DENOM)], @@ -545,32 +571,31 @@ fn process_on_idle_delegation() { #[test] fn process_on_idle_not_allowed_if_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier - .add_wasm_query_response("factory_contract", |_| { + .add_wasm_query_response(api.addr_make("factory_contract").as_str(), move |_| { to_json_binary(&HashMap::from([ - ("strategy_contract", "strategy_contract"), - ("core_contract", "core_contract"), - ("puppeteer_contract", "puppeteer_contract"), + ("strategy_contract", api.addr_make("strategy_contract")), + ("core_contract", api.addr_make("core_contract")), + ("puppeteer_contract", api.addr_make("puppeteer_contract")), ])) .into() }); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); deps.querier.add_bank_query_response( - "cosmos2contract".to_string(), - BalanceResponse { - amount: Coin::new(0u128, LOCAL_DENOM.to_string()), - }, + api.addr_make("cosmos2contract").to_string(), + BalanceResponse::new(Coin::new(0u128, LOCAL_DENOM.to_string())), ); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::ProcessOnIdle {}, ) .unwrap_err(); @@ -589,17 +614,18 @@ fn process_on_idle_not_allowed_if_no_funds() { #[test] fn execute_bond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); CONFIG - .save(deps_mut.storage, &get_default_config()) + .save(deps_mut.storage, &get_default_config(api)) .unwrap(); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, LOCAL_DENOM)]), + message_info(&api.addr_make("core"), &[Coin::new(100u128, LOCAL_DENOM)]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::Bond {}, ) .unwrap(); @@ -617,15 +643,16 @@ fn execute_bond() { #[test] fn execute_bond_wrong_denom() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[Coin::new(100u128, "wrong_denom")]), + message_info(&api.addr_make("core"), &[Coin::new(100u128, "wrong_denom")]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -639,15 +666,16 @@ fn execute_bond_wrong_denom() { #[test] fn execute_bond_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::native_sync_bond_provider::ExecuteMsg::Bond {}, ) .unwrap_err(); @@ -663,16 +691,17 @@ fn execute_bond_no_funds() { #[test] fn execute_bond_multiple_denoms() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info( - "core", + message_info( + &api.addr_make("core"), &[ Coin::new(100u128, LOCAL_DENOM), Coin::new(100u128, "second_denom"), diff --git a/contracts/neutron-distribution-mock/Cargo.toml b/contracts/neutron-distribution-mock/Cargo.toml index 71685cb7..41bd5326 100644 --- a/contracts/neutron-distribution-mock/Cargo.toml +++ b/contracts/neutron-distribution-mock/Cargo.toml @@ -9,7 +9,6 @@ version = "1.0.0" crate-type = ["cdylib", "rlib"] [features] -backtraces = ["cosmwasm-std/backtraces"] library = [] [dependencies] diff --git a/contracts/price-provider/Cargo.toml b/contracts/price-provider/Cargo.toml index 7d9b6b68..d96653c2 100644 --- a/contracts/price-provider/Cargo.toml +++ b/contracts/price-provider/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/proposal-votes-poc/Cargo.toml b/contracts/proposal-votes-poc/Cargo.toml index 7558be5f..19610069 100644 --- a/contracts/proposal-votes-poc/Cargo.toml +++ b/contracts/proposal-votes-poc/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/proposal-votes-poc/src/contract.rs b/contracts/proposal-votes-poc/src/contract.rs index fb53731a..84121d35 100644 --- a/contracts/proposal-votes-poc/src/contract.rs +++ b/contracts/proposal-votes-poc/src/contract.rs @@ -168,8 +168,8 @@ fn execute_update_active_proposals( let config = CONFIG.load(deps.storage)?; ensure_eq!( + info.sender.as_str(), config.provider_proposals_address, - info.sender, ContractError::Unauthorized {} ); diff --git a/contracts/proposal-votes-poc/src/tests.rs b/contracts/proposal-votes-poc/src/tests.rs index 7ca80a65..91befe09 100644 --- a/contracts/proposal-votes-poc/src/tests.rs +++ b/contracts/proposal-votes-poc/src/tests.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{ attr, - testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}, + testing::{message_info, mock_env, MockApi, MockQuerier, MockStorage}, to_json_binary, Addr, Event, OwnedDeps, Querier, }; use neutron_sdk::bindings::query::NeutronQuery; @@ -18,16 +18,18 @@ fn mock_dependencies() -> OwnedDeps(); + let api = deps.api; + let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::proposal_votes::InstantiateMsg { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - provider_proposals_address: "provider_proposals".to_string(), + core_address: api.addr_make("core").to_string(), + provider_proposals_address: api.addr_make("provider_proposals").to_string(), }, ) .unwrap(); @@ -41,8 +43,8 @@ fn instantiate() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - provider_proposals_address: "provider_proposals".to_string(), + core_address: api.addr_make("core").to_string(), + provider_proposals_address: api.addr_make("provider_proposals").to_string(), } ); @@ -55,8 +57,11 @@ fn instantiate() { attr("connection_id", "connection-0"), attr("port_id", "transfer"), attr("update_period", "100"), - attr("core_address", "core"), - attr("provider_proposals_address", "provider_proposals") + attr("core_address", api.addr_make("core")), + attr( + "provider_proposals_address", + api.addr_make("provider_proposals") + ) ]) ] ); @@ -101,6 +106,7 @@ fn query_config() { #[test] fn update_config_wrong_owner() { let mut deps = mock_dependencies::(); + let api = deps.api; drop_staking_base::state::proposal_votes::CONFIG .save( @@ -109,8 +115,8 @@ fn update_config_wrong_owner() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - provider_proposals_address: "provider_proposals".to_string(), + core_address: api.addr_make("core").to_string(), + provider_proposals_address: api.addr_make("provider_proposals").to_string(), }, ) .unwrap(); @@ -118,14 +124,14 @@ fn update_config_wrong_owner() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::state::proposal_votes::ConfigOptional { connection_id: Some("connection-0".to_string()), port_id: Some("transfer".to_string()), update_period: Some(100), - core_address: Some("core".to_string()), - provider_proposals_address: Some("provider_proposals".to_string()), + core_address: Some(api.addr_make("core").to_string()), + provider_proposals_address: Some(api.addr_make("provider_proposals").to_string()), }, }, ) @@ -133,9 +139,7 @@ fn update_config_wrong_owner() { assert_eq!( error, crate::error::ContractError::OwnershipError(cw_ownable::OwnershipError::Std( - cosmwasm_std::StdError::NotFound { - kind: "type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]".to_string() - } + cosmwasm_std::StdError::not_found("type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]") )) ); } @@ -143,13 +147,14 @@ fn update_config_wrong_owner() { #[test] fn update_config_ok() { let mut deps = mock_dependencies::(); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::proposal_votes::CONFIG @@ -159,8 +164,8 @@ fn update_config_ok() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - provider_proposals_address: "provider_proposals".to_string(), + core_address: api.addr_make("core").to_string(), + provider_proposals_address: api.addr_make("provider_proposals").to_string(), }, ) .unwrap(); @@ -168,14 +173,14 @@ fn update_config_ok() { let _response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::state::proposal_votes::ConfigOptional { connection_id: Some("connection-1".to_string()), port_id: Some("transfer1".to_string()), update_period: Some(200), - core_address: Some("core1".to_string()), - provider_proposals_address: Some("provider_proposals_1".to_string()), + core_address: Some(api.addr_make("core1").to_string()), + provider_proposals_address: Some(api.addr_make("provider_proposals_1").to_string()), }, }, ) @@ -194,8 +199,8 @@ fn update_config_ok() { connection_id: "connection-1".to_string(), port_id: "transfer1".to_string(), update_period: 200, - core_address: "core1".to_string(), - provider_proposals_address: "provider_proposals_1".to_string() + core_address: api.addr_make("core1").to_string(), + provider_proposals_address: api.addr_make("provider_proposals_1").to_string() }) .unwrap() ); @@ -204,11 +209,12 @@ fn update_config_ok() { #[test] fn update_voters_list_wrong_owner() { let mut deps = mock_dependencies::(); + let api = deps.api; let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateVotersList { voters: vec!["voter1".to_string(), "voter2".to_string()], }, @@ -217,9 +223,7 @@ fn update_voters_list_wrong_owner() { assert_eq!( error, crate::error::ContractError::OwnershipError(cw_ownable::OwnershipError::Std( - cosmwasm_std::StdError::NotFound { - kind: "type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]".to_string() - } + cosmwasm_std::StdError::not_found("type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]") )) ); } @@ -227,19 +231,20 @@ fn update_voters_list_wrong_owner() { #[test] fn update_voters_list_ok() { let mut deps = mock_dependencies::(); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateVotersList { voters: vec!["voter1".to_string(), "voter2".to_string()], }, @@ -274,7 +279,7 @@ fn update_active_proposals_wrong_owner() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("wrong_provider_proposals_address", &[]), + message_info(&Addr::unchecked("wrong_provider_proposals_address"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateActiveProposals { active_proposals: vec![1], }, @@ -318,7 +323,7 @@ fn update_active_proposals_ok() { let _response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("provider_proposals", &[]), + message_info(&Addr::unchecked("provider_proposals"), &[]), drop_staking_base::msg::proposal_votes::ExecuteMsg::UpdateActiveProposals { active_proposals: vec![1, 2], }, diff --git a/contracts/provider-proposals-poc/Cargo.toml b/contracts/provider-proposals-poc/Cargo.toml index bbdbc60b..3d862bc6 100644 --- a/contracts/provider-proposals-poc/Cargo.toml +++ b/contracts/provider-proposals-poc/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/provider-proposals-poc/src/tests.rs b/contracts/provider-proposals-poc/src/tests.rs index 540b5334..3eb4a762 100644 --- a/contracts/provider-proposals-poc/src/tests.rs +++ b/contracts/provider-proposals-poc/src/tests.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{ attr, - testing::{mock_env, mock_info, MockApi, MockQuerier, MockStorage}, + testing::{message_info, mock_env, MockApi, MockQuerier, MockStorage}, to_json_binary, Addr, Binary, Decimal, Event, OwnedDeps, Querier, SubMsg, }; use neutron_sdk::bindings::{msg::NeutronMsg, query::NeutronQuery, types::KVKey}; @@ -18,16 +18,18 @@ fn mock_dependencies() -> OwnedDeps(); + let api = deps.api; + let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::provider_proposals::InstantiateMsg { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - validators_set_address: "validators_set".to_string(), + core_address: api.addr_make("core").to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), init_proposal: 1, proposals_prefetch: 5, veto_spam_threshold: Decimal::from_atomics(1u64, 2).unwrap(), @@ -44,9 +46,9 @@ fn instantiate() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), + core_address: api.addr_make("core").to_string(), proposal_votes_address: None, - validators_set_address: "validators_set".to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), init_proposal: 1, proposals_prefetch: 5, veto_spam_threshold: Decimal::from_atomics(1u64, 2).unwrap(), @@ -60,23 +62,23 @@ fn instantiate() { keys: vec![ KVKey { path: "gov".to_string(), - key: Binary(vec![0, 0, 0, 0, 0, 0, 0, 0, 1]), + key: Binary::new(vec![0, 0, 0, 0, 0, 0, 0, 0, 1]), }, KVKey { path: "gov".to_string(), - key: Binary(vec![0, 0, 0, 0, 0, 0, 0, 0, 2]), + key: Binary::new(vec![0, 0, 0, 0, 0, 0, 0, 0, 2]), }, KVKey { path: "gov".to_string(), - key: Binary(vec![0, 0, 0, 0, 0, 0, 0, 0, 3]), + key: Binary::new(vec![0, 0, 0, 0, 0, 0, 0, 0, 3]), }, KVKey { path: "gov".to_string(), - key: Binary(vec![0, 0, 0, 0, 0, 0, 0, 0, 4]), + key: Binary::new(vec![0, 0, 0, 0, 0, 0, 0, 0, 4]), }, KVKey { path: "gov".to_string(), - key: Binary(vec![0, 0, 0, 0, 0, 0, 0, 0, 5]), + key: Binary::new(vec![0, 0, 0, 0, 0, 0, 0, 0, 5]), }, ], transactions_filter: "".to_string(), @@ -95,8 +97,8 @@ fn instantiate() { attr("connection_id", "connection-0"), attr("port_id", "transfer"), attr("update_period", "100"), - attr("core_address", "core"), - attr("validators_set_address", "validators_set"), + attr("core_address", api.addr_make("core")), + attr("validators_set_address", api.addr_make("validators_set")), attr("init_proposal", "1"), attr("proposals_prefetch", "5"), attr("veto_spam_threshold", "0.01") @@ -153,6 +155,7 @@ fn query_config() { #[test] fn update_config_wrong_owner() { let mut deps = mock_dependencies::(); + let api = deps.api; drop_staking_base::state::provider_proposals::CONFIG .save( @@ -161,9 +164,9 @@ fn update_config_wrong_owner() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - proposal_votes_address: Some("proposal_votes".to_string()), - validators_set_address: "validators_set".to_string(), + core_address: api.addr_make("core").to_string(), + proposal_votes_address: Some(api.addr_make("proposal_votes").to_string()), + validators_set_address: api.addr_make("validators_set").to_string(), init_proposal: 1, proposals_prefetch: 5, veto_spam_threshold: Decimal::from_atomics(1u64, 2).unwrap(), @@ -174,15 +177,15 @@ fn update_config_wrong_owner() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::provider_proposals::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::state::provider_proposals::ConfigOptional { connection_id: Some("connection-0".to_string()), port_id: Some("transfer".to_string()), update_period: Some(100), - core_address: Some("core".to_string()), - proposal_votes_address: Some("proposal_votes".to_string()), - validators_set_address: Some("validators_set".to_string()), + core_address: Some(api.addr_make("core").to_string()), + proposal_votes_address: Some(api.addr_make("proposal_votes").to_string()), + validators_set_address: Some(api.addr_make("validators_set").to_string()), init_proposal: None, proposals_prefetch: Some(5), veto_spam_threshold: Some(Decimal::from_atomics(1u64, 2).unwrap()), @@ -193,9 +196,7 @@ fn update_config_wrong_owner() { assert_eq!( error, crate::error::ContractError::OwnershipError(cw_ownable::OwnershipError::Std( - cosmwasm_std::StdError::NotFound { - kind: "type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]".to_string() - } + cosmwasm_std::StdError::not_found("type: cw_ownable::Ownership; key: [6F, 77, 6E, 65, 72, 73, 68, 69, 70]".to_string()) )) ); } @@ -203,13 +204,14 @@ fn update_config_wrong_owner() { #[test] fn update_config_ok() { let mut deps = mock_dependencies::(); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::provider_proposals::CONFIG @@ -219,9 +221,9 @@ fn update_config_ok() { connection_id: "connection-0".to_string(), port_id: "transfer".to_string(), update_period: 100, - core_address: "core".to_string(), - proposal_votes_address: Some("proposal_votes".to_string()), - validators_set_address: "validators_set".to_string(), + core_address: api.addr_make("core").to_string(), + proposal_votes_address: Some(api.addr_make("proposal_votes").to_string()), + validators_set_address: api.addr_make("validators_set").to_string(), init_proposal: 1, proposals_prefetch: 5, veto_spam_threshold: Decimal::from_atomics(1u64, 2).unwrap(), @@ -232,15 +234,15 @@ fn update_config_ok() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::provider_proposals::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::state::provider_proposals::ConfigOptional { connection_id: Some("connection-1".to_string()), port_id: Some("transfer1".to_string()), update_period: Some(200), - core_address: Some("core1".to_string()), - proposal_votes_address: Some("proposal_votes_1".to_string()), - validators_set_address: Some("validators_set_1".to_string()), + core_address: Some(api.addr_make("core1").to_string()), + proposal_votes_address: Some(api.addr_make("proposal_votes_1").to_string()), + validators_set_address: Some(api.addr_make("validators_set_1").to_string()), proposals_prefetch: Some(7), init_proposal: None, veto_spam_threshold: Some(Decimal::from_atomics(3u64, 2).unwrap()), @@ -262,9 +264,9 @@ fn update_config_ok() { connection_id: "connection-1".to_string(), port_id: "transfer1".to_string(), update_period: 200, - core_address: "core1".to_string(), - proposal_votes_address: Some("proposal_votes_1".to_string()), - validators_set_address: "validators_set_1".to_string(), + core_address: api.addr_make("core1").to_string(), + proposal_votes_address: Some(api.addr_make("proposal_votes_1").to_string()), + validators_set_address: api.addr_make("validators_set_1").to_string(), init_proposal: 1, proposals_prefetch: 7, veto_spam_threshold: Decimal::from_atomics(3u64, 2).unwrap(), @@ -297,7 +299,7 @@ fn update_votes_wrong_sender_address() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("proposal_votes_1", &[]), + message_info(&Addr::unchecked("proposal_votes_1"), &[]), drop_staking_base::msg::provider_proposals::ExecuteMsg::UpdateProposalVotes { votes: vec![neutron_sdk::interchain_queries::v045::types::ProposalVote { proposal_id: 1, @@ -335,7 +337,7 @@ fn update_votes_ok() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("proposal_votes", &[]), + message_info(&Addr::unchecked("proposal_votes"), &[]), drop_staking_base::msg::provider_proposals::ExecuteMsg::UpdateProposalVotes { votes: vec![neutron_sdk::interchain_queries::v045::types::ProposalVote { proposal_id: 1, @@ -405,7 +407,7 @@ fn update_votes_with_data() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("proposal_votes", &[]), + message_info(&Addr::unchecked("proposal_votes"), &[]), drop_staking_base::msg::provider_proposals::ExecuteMsg::UpdateProposalVotes { votes: vec![neutron_sdk::interchain_queries::v045::types::ProposalVote { proposal_id: 1, diff --git a/contracts/pump/Cargo.toml b/contracts/pump/Cargo.toml index 0d4cdb69..eb330820 100644 --- a/contracts/pump/Cargo.toml +++ b/contracts/pump/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/pump/src/tests.rs b/contracts/pump/src/tests.rs index c6b242d2..f28078af 100644 --- a/contracts/pump/src/tests.rs +++ b/contracts/pump/src/tests.rs @@ -2,9 +2,10 @@ use crate::{ contract::{execute, instantiate, query, sudo}, error::ContractError, }; +use cosmwasm_std::testing::MockApi; use cosmwasm_std::{ coins, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Addr, BankMsg, Binary, Coin, CosmosMsg, Event, Response, SubMsg, }; use drop_helpers::ica::IcaState; @@ -20,13 +21,13 @@ use neutron_sdk::{ }; use prost::Message; -fn get_default_config() -> Config { +fn get_default_config(api: MockApi) -> Config { Config { - dest_address: Some(Addr::unchecked("dest_address")), + dest_address: Some(api.addr_make("dest_address")), dest_channel: Some("dest_channel".to_string()), dest_port: Some("dest_port".to_string()), connection_id: "connection".to_string(), - refundee: Some(Addr::unchecked("refundee")), + refundee: Some(api.addr_make("refundee")), timeout: drop_staking_base::state::pump::PumpTimeout { local: Some(10u64), remote: 10u64, @@ -38,20 +39,28 @@ fn get_default_config() -> Config { #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let msg = drop_staking_base::msg::pump::InstantiateMsg { - dest_address: Some("dest_address".to_string()), + dest_address: Some(api.addr_make("dest_address").to_string()), dest_channel: Some("dest_channel".to_string()), dest_port: Some("dest_port".to_string()), connection_id: "connection".to_string(), - refundee: Some("refundee".to_string()), + refundee: Some(api.addr_make("refundee").to_string()), timeout: drop_staking_base::state::pump::PumpTimeout { local: Some(10u64), remote: 10u64, }, local_denom: "local_denom".to_string(), - owner: Some("owner".to_string()), + owner: Some(api.addr_make("owner").to_string()), }; - let res = instantiate(deps.as_mut(), mock_env(), mock_info("owner", &[]), msg).unwrap(); + let res = instantiate( + deps.as_mut(), + mock_env(), + message_info(&api.addr_make("owner"), &[]), + msg, + ) + .unwrap(); assert_eq!( res, Response::new().add_event(Event::new( @@ -59,49 +68,57 @@ fn test_instantiate() { ).add_attributes(vec![ ("contract_name", "crates.io:drop-neutron-contracts__drop-pump"), ("contract_version", "1.0.0"), - ("msg", "InstantiateMsg { dest_address: Some(\"dest_address\"), dest_channel: Some(\"dest_channel\"), dest_port: Some(\"dest_port\"), connection_id: \"connection\", refundee: Some(\"refundee\"), timeout: PumpTimeout { local: Some(10), remote: 10 }, local_denom: \"local_denom\", owner: Some(\"owner\") }"), - ("sender", "owner") + ("msg", "InstantiateMsg { dest_address: Some(\"cosmwasm1t32u3yaj9q3hkk0tld3tvemj9fgdt63krq55agm34unqhtk8cf2q8wcqy7\"), dest_channel: Some(\"dest_channel\"), dest_port: Some(\"dest_port\"), connection_id: \"connection\", refundee: Some(\"cosmwasm1qjzlg5f35pvnfjdgf0zpnmpaujc964jcekwqewqnj7q8u7s0klrsmh3dsm\"), timeout: PumpTimeout { local: Some(10), remote: 10 }, local_denom: \"local_denom\", owner: Some(\"cosmwasm1fsgzj6t7udv8zhf6zj32mkqhcjcpv52yph5qsdcl0qt94jgdckqs2g053y\") }"), + ("sender", api.addr_make("owner").as_str()) ])) ); assert_eq!( - "owner", + api.addr_make("owner").as_str(), cw_ownable::get_ownership(deps.as_ref().storage) .unwrap() .owner .unwrap() + .as_str() ); let config = CONFIG.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_default_config()); + assert_eq!(config, get_default_config(api)); } #[test] fn test_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let msg = drop_staking_base::msg::pump::InstantiateMsg { - dest_address: Some("dest_address".to_string()), + dest_address: Some(api.addr_make("dest_address").to_string()), dest_channel: Some("dest_channel".to_string()), dest_port: Some("dest_port".to_string()), connection_id: "connection".to_string(), - refundee: Some("refundee".to_string()), + refundee: Some(api.addr_make("refundee").to_string()), timeout: drop_staking_base::state::pump::PumpTimeout { local: Some(0u64), remote: 0u64, }, local_denom: "local_denom".to_string(), - owner: Some("owner".to_string()), + owner: Some(api.addr_make("owner").to_string()), }; - let _ = instantiate(deps.as_mut(), mock_env(), mock_info("owner", &[]), msg).unwrap(); + let _ = instantiate( + deps.as_mut(), + mock_env(), + message_info(&api.addr_make("owner"), &[]), + msg, + ) + .unwrap(); let res = execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), drop_staking_base::msg::pump::ExecuteMsg::UpdateConfig { new_config: Box::new(drop_staking_base::msg::pump::UpdateConfigMsg { - dest_address: Some("new_dest_address".to_string()), + dest_address: Some(api.addr_make("new_dest_address").to_string()), dest_channel: Some("new_dest_channel".to_string()), dest_port: Some("new_dest_port".to_string()), connection_id: Some("new_connection".to_string()), - refundee: Some("new_refundee".to_string()), + refundee: Some(api.addr_make("new_refundee").to_string()), timeout: Some(drop_staking_base::state::pump::PumpTimeout { local: Some(1u64), remote: 1u64, @@ -113,35 +130,47 @@ fn test_update_config_unauthorized() { .unwrap_err(); assert_eq!( res, - crate::error::ContractError::OwnershipError(cw_ownable::OwnershipError::NotOwner) + ContractError::OwnershipError(cw_ownable::OwnershipError::NotOwner) ) } #[test] fn test_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let msg = drop_staking_base::msg::pump::InstantiateMsg { - dest_address: Some("dest_address".to_string()), + dest_address: Some(api.addr_make("dest_address").to_string()), dest_channel: Some("dest_channel".to_string()), dest_port: Some("dest_port".to_string()), connection_id: "connection_id".to_string(), - refundee: Some("refundee".to_string()), + refundee: Some(api.addr_make("refundee").to_string()), timeout: drop_staking_base::state::pump::PumpTimeout { local: Some(0u64), remote: 0u64, }, local_denom: "local_denom".to_string(), - owner: Some("owner".to_string()), + owner: Some(api.addr_make("owner").to_string()), }; - let _ = instantiate(deps.as_mut(), mock_env(), mock_info("admin", &[]), msg).unwrap(); + let _ = instantiate( + deps.as_mut(), + mock_env(), + message_info(&api.addr_make("admin"), &[]), + msg, + ) + .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("admin")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("admin").as_str()), + ) + .unwrap(); let msg = drop_staking_base::msg::pump::UpdateConfigMsg { - dest_address: Some("new_dest_address".to_string()), + dest_address: Some(api.addr_make("new_dest_address").to_string()), dest_channel: Some("new_dest_channel".to_string()), dest_port: Some("new_dest_port".to_string()), connection_id: Some("new_connection_id".to_string()), - refundee: Some("new_refundee".to_string()), + refundee: Some(api.addr_make("new_refundee").to_string()), timeout: Some(drop_staking_base::state::pump::PumpTimeout { local: Some(1u64), remote: 1u64, @@ -151,7 +180,7 @@ fn test_update_config() { let res = execute( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::pump::ExecuteMsg::UpdateConfig { new_config: Box::new(msg.clone()), }, @@ -163,11 +192,11 @@ fn test_update_config() { Event::new("crates.io:drop-neutron-contracts__drop-pump-update_config").add_attributes( vec![ cosmwasm_std::attr("action", "update_config"), - cosmwasm_std::attr("dest_address", "new_dest_address"), + cosmwasm_std::attr("dest_address", api.addr_make("new_dest_address")), cosmwasm_std::attr("dest_channel", "new_dest_channel"), cosmwasm_std::attr("dest_port", "new_dest_port"), cosmwasm_std::attr("connection_id", "new_connection_id"), - cosmwasm_std::attr("refundee", "new_refundee"), + cosmwasm_std::attr("refundee", api.addr_make("new_refundee")), cosmwasm_std::attr("timeout", format!("{:?}", msg.timeout.unwrap())), cosmwasm_std::attr("local_denom", "new_local_denom"), ] @@ -178,11 +207,11 @@ fn test_update_config() { assert_eq!( config, Config { - dest_address: Some(Addr::unchecked("new_dest_address")), + dest_address: Some(api.addr_make("new_dest_address")), dest_channel: Some("new_dest_channel".to_string()), dest_port: Some("new_dest_port".to_string()), connection_id: "new_connection_id".to_string(), - refundee: Some(Addr::unchecked("new_refundee")), + refundee: Some(api.addr_make("new_refundee")), timeout: drop_staking_base::state::pump::PumpTimeout { local: Some(1u64), remote: 1u64, @@ -195,15 +224,17 @@ fn test_update_config() { #[test] fn test_register_ica_no_fee() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let msg = drop_staking_base::msg::pump::ExecuteMsg::RegisterICA {}; let err = execute( deps.as_mut(), mock_env(), - mock_info("nobody", &[]), + message_info(&Addr::unchecked("nobody"), &[]), msg.clone(), ) .unwrap_err(); @@ -219,14 +250,16 @@ fn test_register_ica_no_fee() { #[test] fn test_register_ica() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let msg = drop_staking_base::msg::pump::ExecuteMsg::RegisterICA {}; let res = execute( deps.as_mut(), mock_env(), - mock_info("nobody", &coins(1000, "local_denom")), + message_info(&Addr::unchecked("nobody"), &coins(1000, "local_denom")), msg.clone(), ) .unwrap(); @@ -253,7 +286,7 @@ fn test_register_ica() { let res = execute( deps.as_mut(), mock_env(), - mock_info("nobody", &coins(1000, "local_denom")), + message_info(&Addr::unchecked("nobody"), &coins(1000, "local_denom")), msg.clone(), ); assert_eq!( @@ -267,7 +300,7 @@ fn test_register_ica() { let res = execute( deps.as_mut(), mock_env(), - mock_info("nobody", &coins(1000, "local_denom")), + message_info(&Addr::unchecked("nobody"), &coins(1000, "local_denom")), msg.clone(), ) .unwrap(); @@ -302,10 +335,17 @@ fn test_execute_refund_no_refundee() { coins: coins(200, "untrn"), }; let mut deps = mock_dependencies(&[]); - let mut config = get_default_config(); + let api = deps.api; + let mut config = get_default_config(api); config.refundee = None; CONFIG.save(deps.as_mut().storage, &config).unwrap(); - let err = execute(deps.as_mut(), mock_env(), mock_info("nobody", &[]), msg).unwrap_err(); + let err = execute( + deps.as_mut(), + mock_env(), + message_info(&Addr::unchecked("nobody"), &[]), + msg, + ) + .unwrap_err(); assert_eq!(err, ContractError::RefundeeIsNotSet {}); } @@ -315,20 +355,31 @@ fn test_execute_refund_success_refundee() { coins: coins(200, "untrn"), }; let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); - let res = execute(deps.as_mut(), mock_env(), mock_info("refundee", &[]), msg).unwrap(); + let res = execute( + deps.as_mut(), + mock_env(), + message_info(&api.addr_make("refundee"), &[]), + msg, + ) + .unwrap(); assert_eq!( res, Response::new() .add_event( - Event::new("crates.io:drop-neutron-contracts__drop-pump-refund") - .add_attributes(vec![("action", "refund"), ("refundee", "refundee")]) + Event::new("crates.io:drop-neutron-contracts__drop-pump-refund").add_attributes( + vec![ + ("action", "refund"), + ("refundee", api.addr_make("refundee").as_str()) + ] + ) ) .add_message(CosmosMsg::Bank(BankMsg::Send { - to_address: "refundee".to_string(), - amount: vec![Coin::new(200, "untrn")] + to_address: api.addr_make("refundee").to_string(), + amount: vec![Coin::new(200u128, "untrn")] })) ); } @@ -339,22 +390,38 @@ fn test_execute_refund() { coins: coins(200, "untrn"), }; let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - let res = execute(deps.as_mut(), mock_env(), mock_info("owner", &[]), msg).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + let res = execute( + deps.as_mut(), + mock_env(), + message_info(&api.addr_make("owner"), &[]), + msg, + ) + .unwrap(); assert_eq!( res, Response::new() .add_event( - Event::new("crates.io:drop-neutron-contracts__drop-pump-refund") - .add_attributes(vec![("action", "refund"), ("refundee", "refundee")]) + Event::new("crates.io:drop-neutron-contracts__drop-pump-refund").add_attributes( + vec![ + ("action", "refund"), + ("refundee", api.addr_make("refundee").as_str()) + ] + ) ) .add_message(CosmosMsg::Bank(BankMsg::Send { - to_address: "refundee".to_string(), - amount: vec![Coin::new(200, "untrn")] + to_address: api.addr_make("refundee").to_string(), + amount: vec![Coin::new(200u128, "untrn")] })) ); } @@ -365,24 +432,31 @@ fn test_execute_refund_unauthorized() { coins: coins(200, "untrn"), }; let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let err = execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), msg, ) .unwrap_err(); - assert_eq!(err, crate::error::ContractError::Unauthorized {}); + assert_eq!(err, ContractError::Unauthorized {}); } #[test] fn test_push_no_destination_port() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: IbcFee { @@ -393,7 +467,7 @@ fn test_push_no_destination_port() { }) .unwrap() }); - let mut config = get_default_config(); + let mut config = get_default_config(api); config.dest_port = None; CONFIG.save(deps.as_mut().storage, &config).unwrap(); ICA.set_address(deps.as_mut().storage, "some", "port", "channel") @@ -401,7 +475,7 @@ fn test_push_no_destination_port() { let res = execute( deps.as_mut(), mock_env(), - mock_info("somebody", &[]), + message_info(&Addr::unchecked("somebody"), &[]), drop_staking_base::msg::pump::ExecuteMsg::Push { coins: vec![Coin::new(100u128, "remote_denom")], } @@ -414,6 +488,7 @@ fn test_push_no_destination_port() { #[test] fn test_push_no_destintation_channel() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: IbcFee { @@ -424,7 +499,7 @@ fn test_push_no_destintation_channel() { }) .unwrap() }); - let mut config = get_default_config(); + let mut config = get_default_config(api); config.dest_channel = None; CONFIG.save(deps.as_mut().storage, &config).unwrap(); ICA.set_address(deps.as_mut().storage, "some", "port", "channel") @@ -432,7 +507,7 @@ fn test_push_no_destintation_channel() { let res = execute( deps.as_mut(), mock_env(), - mock_info("somebody", &[]), + message_info(&Addr::unchecked("somebody"), &[]), drop_staking_base::msg::pump::ExecuteMsg::Push { coins: vec![Coin::new(100u128, "remote_denom")], } @@ -445,6 +520,7 @@ fn test_push_no_destintation_channel() { #[test] fn test_push_no_destintation_address() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: IbcFee { @@ -455,7 +531,7 @@ fn test_push_no_destintation_address() { }) .unwrap() }); - let mut config = get_default_config(); + let mut config = get_default_config(api); config.dest_address = None; CONFIG.save(deps.as_mut().storage, &config).unwrap(); ICA.set_address(deps.as_mut().storage, "some", "port", "channel") @@ -463,7 +539,7 @@ fn test_push_no_destintation_address() { let res = execute( deps.as_mut(), mock_env(), - mock_info("somebody", &[]), + message_info(&Addr::unchecked("somebody"), &[]), drop_staking_base::msg::pump::ExecuteMsg::Push { coins: vec![Coin::new(100u128, "remote_denom")], } @@ -476,6 +552,7 @@ fn test_push_no_destintation_address() { #[test] fn test_push() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: IbcFee { @@ -486,16 +563,21 @@ fn test_push() { }) .unwrap() }); - ICA.set_address(deps.as_mut().storage, "some", "port", "channel") - .unwrap(); + ICA.set_address( + deps.as_mut().storage, + api.addr_make("some"), + "port", + "channel", + ) + .unwrap(); CONFIG - .save(deps.as_mut().storage, &get_default_config()) + .save(deps.as_mut().storage, &get_default_config(api)) .unwrap(); let env = mock_env(); let res = execute( deps.as_mut(), env.clone(), - mock_info("somebody", &[]), + message_info(&api.addr_make("somebody"), &[]), drop_staking_base::msg::pump::ExecuteMsg::Push { coins: vec![Coin::new(100u128, "remote_denom")], } @@ -528,8 +610,8 @@ fn test_push() { denom: "remote_denom".to_string(), amount: "100".to_string(), }), - sender: "some".to_string(), - receiver: "dest_address".to_string(), + sender: api.addr_make("some").to_string(), + receiver: api.addr_make("dest_address").to_string(), timeout_height: None, timeout_timestamp: env.block.time.plus_seconds(10).nanos(), } @@ -573,9 +655,7 @@ fn test_sudo_response_sequence_not_found() { .unwrap_err(); assert_eq!( res, - crate::error::ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "sequence not found".to_string() - }) + crate::error::ContractError::Std(cosmwasm_std::StdError::generic_err("sequence not found")) ); } @@ -695,9 +775,7 @@ fn test_sudo_error_sequence_not_found() { .unwrap_err(); assert_eq!( res, - crate::error::ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "sequence not found".to_string() - }) + ContractError::Std(cosmwasm_std::StdError::generic_err("sequence not found")) ) } @@ -790,9 +868,9 @@ fn test_sudo_kv_query_result_not_supported() { .unwrap_err(); assert_eq!( res, - crate::error::ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "KVQueryResult and TxQueryResult are not supported".to_string() - }) + ContractError::Std(cosmwasm_std::StdError::generic_err( + "KVQueryResult and TxQueryResult are not supported" + )) ); } @@ -814,9 +892,9 @@ fn test_sudo_tx_query_result_not_supported() { .unwrap_err(); assert_eq!( res, - crate::error::ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "KVQueryResult and TxQueryResult are not supported".to_string() - }) + ContractError::Std(cosmwasm_std::StdError::generic_err( + "KVQueryResult and TxQueryResult are not supported".to_string() + )) ); } @@ -872,7 +950,8 @@ fn test_sudo_open_ack() { #[test] fn test_query_config() { let mut deps = mock_dependencies(&[]); - let config = get_default_config(); + let api = deps.api; + let config = get_default_config(api); CONFIG.save(deps.as_mut().storage, &config).unwrap(); let query_res: drop_staking_base::state::pump::Config = from_json( query( @@ -904,9 +983,15 @@ fn test_query_ica() { #[test] fn test_query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("admin")).unwrap(); - let query_res: cw_ownable::Ownership = from_json( + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("admin").as_str()), + ) + .unwrap(); + let query_res: cw_ownable::Ownership = from_json( query( deps.as_ref().into_empty(), mock_env(), @@ -918,7 +1003,7 @@ fn test_query_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("admin".to_string())), + owner: Some(api.addr_make("admin")), pending_expiry: None, pending_owner: None } @@ -928,15 +1013,21 @@ fn test_query_ownership() { #[test] fn test_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::pump::ExecuteMsg::UpdateOwnership( cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }, ), @@ -945,13 +1036,13 @@ fn test_transfer_ownership() { execute( deps.as_mut(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), drop_staking_base::msg::pump::ExecuteMsg::UpdateOwnership( cw_ownable::Action::AcceptOwnership {}, ), ) .unwrap(); - let query_res: cw_ownable::Ownership = from_json( + let query_res: cw_ownable::Ownership = from_json( query( deps.as_ref().into_empty(), mock_env(), @@ -963,7 +1054,7 @@ fn test_transfer_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } diff --git a/contracts/puppeteer-initia/.cargo/config.toml b/contracts/puppeteer-initia/.cargo/config.toml index edd5ef99..3fcab106 100644 --- a/contracts/puppeteer-initia/.cargo/config.toml +++ b/contracts/puppeteer-initia/.cargo/config.toml @@ -1,2 +1,2 @@ [alias] -schema = "run --bin drop-puppeteer-initia-schema" +schema = "run --bin drop-puppeteer-initia-schema" \ No newline at end of file diff --git a/contracts/puppeteer-initia/Cargo.toml b/contracts/puppeteer-initia/Cargo.toml index 9e4328fd..991ffc5d 100644 --- a/contracts/puppeteer-initia/Cargo.toml +++ b/contracts/puppeteer-initia/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/puppeteer-initia/src/contract.rs b/contracts/puppeteer-initia/src/contract.rs index a1a37e75..9397ea57 100644 --- a/contracts/puppeteer-initia/src/contract.rs +++ b/contracts/puppeteer-initia/src/contract.rs @@ -8,8 +8,9 @@ use cosmwasm_std::{ Timestamp, Uint128, WasmMsg, }; use cosmwasm_std::{Binary, DepsMut, Env, MessageInfo, Response, StdResult}; +use drop_helpers::ibc_client_state::{extract_identified_client_state, query_client_state}; use drop_helpers::{ - answer::response, get_contracts, ibc_client_state::query_client_state, ibc_fee::query_ibc_fee, + answer::response, get_contracts, ibc_fee::query_ibc_fee, icq_initia::new_delegations_and_balance_query_msg, interchain::prepare_any_msg, validation::validate_addresses, }; @@ -693,7 +694,7 @@ fn execute_redelegate( validator_from, validator_to, denom: config.remote_denom, - amount: amount.into(), + amount, }, reply_to, ReplyMsg::SudoPayload.to_reply_id(), @@ -827,10 +828,9 @@ fn sudo_response( )?; let client_state = query_client_state(&deps.as_ref(), channel_id, port_id)?; - let remote_height = client_state - .identified_client_state - .ok_or_else(|| StdError::generic_err("IBC client state identified_client_state not found"))? - .client_state + let identified_client_state = extract_identified_client_state(&deps.as_ref(), client_state)?; + + let remote_height = identified_client_state .latest_height .ok_or_else(|| StdError::generic_err("IBC client state latest_height not found"))? .revision_height; @@ -841,7 +841,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, },) ))? )); @@ -853,7 +853,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, }), ))?, funds: vec![], diff --git a/contracts/puppeteer-initia/src/tests.rs b/contracts/puppeteer-initia/src/tests.rs index 536ca3d8..e5a76d59 100644 --- a/contracts/puppeteer-initia/src/tests.rs +++ b/contracts/puppeteer-initia/src/tests.rs @@ -3,9 +3,9 @@ use cosmos_sdk_proto::traits::MessageExt; use cosmwasm_schema::schemars; use cosmwasm_std::{ coin, coins, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Addr, Binary, CosmosMsg, Decimal256, DepsMut, Event, Response, StdError, - SubMsg, Timestamp, Uint128, Uint64, + SubMsg, Timestamp, Uint128, }; use drop_helpers::{ ibc_client_state::{ @@ -33,8 +33,10 @@ use neutron_sdk::{ NeutronError, }; use prost::Message; +use prost_types::Duration; use schemars::_serde_json::to_string; +use cosmwasm_std::testing::MockApi; use std::vec; type PuppeteerBaseType = PuppeteerBase< @@ -76,36 +78,43 @@ fn build_interchain_query_response() -> Binary { #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let msg = InstantiateMsg { delegations_queries_chunk_size: Some(2u32), - owner: Some("owner".to_string()), + owner: Some(api.addr_make("owner").to_string()), connection_id: "connection_id".to_string(), - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), port_id: "port_id".to_string(), update_period: 60u64, remote_denom: "move/14a0fe8bd05c1f7b5abff610a768418dbdf573d1674fda114ebe651d4e2d3d4a" .to_string(), - allowed_senders: vec!["allowed_sender".to_string()], + allowed_senders: vec![api.addr_make("allowed_sender").to_string()], transfer_channel_id: "transfer_channel_id".to_string(), sdk_version: "0.47.10".to_string(), timeout: 100u64, }; let env = mock_env(); - let res = - crate::contract::instantiate(deps.as_mut(), env, mock_info("sender", &[]), msg).unwrap(); + let res = crate::contract::instantiate( + deps.as_mut(), + env, + message_info(&api.addr_make("sender"), &[]), + msg, + ) + .unwrap(); assert_eq!(res, Response::new()); let puppeteer_base = Puppeteer::default(); let config = puppeteer_base.config.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_base_config()); + assert_eq!(config, get_base_config(api)); } #[test] fn test_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let puppeteer_base = Puppeteer::default(); puppeteer_base .config - .save(deps.as_mut().storage, &get_base_config()) + .save(deps.as_mut().storage, &get_base_config(api)) .unwrap(); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { @@ -113,8 +122,8 @@ fn test_update_config() { remote_denom: Some( "move/24a0fe8bd05c1f7b5abff610a768418dbdf573d1674fda114ebe651d4e2d3d4a".to_string(), ), - factory_contract: Some(Addr::unchecked("factory_contract")), - allowed_senders: Some(vec!["new_allowed_sender".to_string()]), + factory_contract: Some(api.addr_make("factory_contract")), + allowed_senders: Some(vec![api.addr_make("new_allowed_sender").to_string()]), transfer_channel_id: Some("new_transfer_channel_id".to_string()), connection_id: Some("new_connection_id".to_string()), port_id: Some("new_port_id".to_string()), @@ -123,10 +132,20 @@ fn test_update_config() { }, }; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let env = mock_env(); - let res = - crate::contract::execute(deps.as_mut(), env, mock_info("owner", &[]), msg.clone()).unwrap(); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("owner"), &[]), + msg.clone(), + ) + .unwrap(); assert_eq!( res, Response::new().add_event( @@ -153,11 +172,11 @@ fn test_update_config() { delegations_queries_chunk_size: 2u32, port_id: "new_port_id".to_string(), connection_id: "new_connection_id".to_string(), - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), update_period: 121u64, remote_denom: "move/24a0fe8bd05c1f7b5abff610a768418dbdf573d1674fda114ebe651d4e2d3d4a" .to_string(), - allowed_senders: vec![Addr::unchecked("new_allowed_sender")], + allowed_senders: vec![api.addr_make("new_allowed_sender")], transfer_channel_id: "new_transfer_channel_id".to_string(), sdk_version: "0.47.0".to_string(), timeout: 101u64, @@ -168,20 +187,21 @@ fn test_update_config() { #[test] fn test_execute_setup_protocol() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut()); + let puppeteer_base = base_init(&mut deps.as_mut(), api); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::SetupProtocol { - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + rewards_withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), }; let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), msg.clone(), ); assert_eq!( @@ -191,15 +211,20 @@ fn test_execute_setup_protocol() { )) ); let env = mock_env(); - let res = crate::contract::execute(deps.as_mut(), env, mock_info("allowed_sender", &[]), msg) - .unwrap(); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("allowed_sender"), &[]), + msg, + ) + .unwrap(); let distribution_msg = { neutron_sdk::bindings::types::ProtobufAny { type_url: "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress".to_string(), value: Binary::from( cosmos_sdk_proto::cosmos::distribution::v1beta1::MsgSetWithdrawAddress { - delegator_address: "ica_address".to_string(), - withdraw_address: "rewards_withdraw_address".to_string(), + delegator_address: api.addr_make("ica_address").to_string(), + withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), } .encode_to_vec(), ), @@ -219,7 +244,7 @@ fn test_execute_setup_protocol() { ReplyMsg::SudoPayload.to_reply_id() )) ); - let tx_state = pupeteer_base.tx_state.load(deps.as_ref().storage).unwrap(); + let tx_state = puppeteer_base.tx_state.load(deps.as_ref().storage).unwrap(); assert_eq!( tx_state, drop_puppeteer_base::state::TxState { @@ -228,8 +253,8 @@ fn test_execute_setup_protocol() { reply_to: Some("".to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), } ) } @@ -239,23 +264,24 @@ fn test_execute_setup_protocol() { #[test] fn test_execute_undelegate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut()); + let puppeteer_base = base_init(&mut deps.as_mut(), api); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::Undelegate { batch_id: 0u128, items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }; let env = mock_env(); let res = crate::contract::execute( deps.as_mut(), env, - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), msg.clone(), ); assert_eq!( @@ -267,7 +293,7 @@ fn test_execute_undelegate() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), msg, ) .unwrap(); @@ -275,7 +301,7 @@ fn test_execute_undelegate() { let msg = cosmos_sdk_proto::Any { type_url: "/initia.mstaking.v1.MsgUndelegate".to_string(), value: cosmos_sdk_proto::cosmos::staking::v1beta1::MsgUndelegate { - delegator_address: "ica_address".to_string(), + delegator_address: api.addr_make("ica_address").to_string(), validator_address: "valoper1".to_string(), amount: Some(cosmos_sdk_proto::cosmos::base::v1beta1::Coin { denom: "move/14a0fe8bd05c1f7b5abff610a768418dbdf573d1674fda114ebe651d4e2d3d4a" @@ -288,7 +314,7 @@ fn test_execute_undelegate() { }; let grant_msg = cosmos_sdk_proto::cosmos::authz::v1beta1::MsgExec { - grantee: "ica_address".to_string(), + grantee: api.addr_make("ica_address").to_string(), msgs: vec![msg], }; let mut buf = Vec::with_capacity(grant_msg.encoded_len()); @@ -317,7 +343,7 @@ fn test_execute_undelegate() { drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("some_reply_to".to_string()), + reply_to: Some(api.addr_make("some_reply_to").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::Undelegate { batch_id: 0u128, @@ -335,7 +361,8 @@ fn test_execute_undelegate() { fn test_sudo_response_tx_state_wrong() { // Test that the contract returns an error if the tx state is not in progress let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), api); let msg = SudoMsg::Response { request: neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), @@ -374,13 +401,14 @@ fn test_sudo_response_tx_state_wrong() { #[test] fn test_sudo_kv_query_result() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let query_id = 1u64; deps.querier .add_query_response(query_id, build_interchain_query_response()); - let puppeteer_base = base_init(&mut deps.as_mut()); + let puppeteer_base = base_init(&mut deps.as_mut(), api); let msg = SudoMsg::KVQueryResult { query_id }; let env = mock_env(); @@ -392,7 +420,7 @@ fn test_sudo_kv_query_result() { &KVQueryType::DelegationsAndBalance {}, ) .unwrap(); - let mut config = get_base_config(); + let mut config = get_base_config(api); config.remote_denom = "uinit".to_string(); puppeteer_base .config @@ -459,47 +487,60 @@ fn test_sudo_kv_query_result() { #[test] fn test_sudo_response_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_stargate_query_response( "/ibc.core.channel.v1.Query/ChannelClientState", |_data| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&ChannelClientStateResponse { + cosmwasm_std::ContractResult::Ok(Binary::from( + ChannelClientStateResponse { identified_client_state: Some(IdentifiedClientState { client_id: "07-tendermint-0".to_string(), - client_state: ClientState { - chain_id: "test-1".to_string(), - type_url: "type_url".to_string(), - trust_level: Fraction { - numerator: Uint64::from(1u64), - denominator: Uint64::from(3u64), - }, - trusting_period: Some("1000".to_string()), - unbonding_period: Some("1500".to_string()), - max_clock_drift: Some("1000".to_string()), - frozen_height: None, - latest_height: Some(Height { - revision_number: Uint64::from(0u64), - revision_height: Uint64::from(54321u64), - }), - proof_specs: vec![], - upgrade_path: vec![], - allow_update_after_expiry: true, - allow_update_after_misbehaviour: true, - }, + client_state: Some(prost_types::Any { + type_url: "/ibc.lightclients.tendermint.v1.ClientState".to_string(), + value: ClientState { + chain_id: "test-1".to_string(), + trust_level: Some(Fraction { + numerator: 1u64, + denominator: 3u64, + }), + trusting_period: Some(Duration { + seconds: 1000, + nanos: 0, + }), + unbonding_period: Some(Duration { + seconds: 1500, + nanos: 0, + }), + max_clock_drift: Some(Duration { + seconds: 1000, + nanos: 0, + }), + frozen_height: None, + latest_height: Some(Height { + revision_number: 0u64, + revision_height: 54321u64, + }), + proof_specs: vec![], + upgrade_path: vec![], + allow_update_after_expiry: true, + allow_update_after_misbehaviour: true, + } + .encode_to_vec(), + }), }), proof: None, - proof_height: Height { - revision_number: Uint64::from(0u64), - revision_height: Uint64::from(33333u64), - }, - }) - .unwrap(), - ) + proof_height: Some(Height { + revision_number: 0u64, + revision_height: 33333u64, + }), + } + .encode_to_vec(), + )) }, ); - let puppeteer_base = base_init(&mut deps.as_mut()); + let puppeteer_base = base_init(&mut deps.as_mut(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -512,9 +553,9 @@ fn test_sudo_response_ok() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, - recipient: "recipient".to_string(), + amount: 1000u128.into(), + real_amount: 1000u128.into(), + recipient: api.addr_make("recipient").to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; let msg = SudoMsg::Response { @@ -529,7 +570,7 @@ fn test_sudo_response_ok() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::WaitingForAck, - reply_to: Some("reply_to_contract".to_string()), + reply_to: Some(api.addr_make("reply_to_contract").to_string()), transaction: Some(transaction.clone()), }, ) @@ -539,7 +580,7 @@ fn test_sudo_response_ok() { res, Response::new() .add_message(CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "reply_to_contract".to_string(), + contract_addr: api.addr_make("reply_to_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::PeripheralHook( Box::new( drop_puppeteer_base::peripheral_hook::ResponseHookMsg::Success( @@ -563,7 +604,7 @@ fn test_sudo_response_ok() { assert_eq!( ica, drop_helpers::ica::IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port".to_string(), channel_id: "channel".to_string(), } @@ -583,7 +624,8 @@ fn test_sudo_response_ok() { #[test] fn test_sudo_response_error() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -596,9 +638,9 @@ fn test_sudo_response_error() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, - recipient: "recipient".to_string(), + amount: 1000u128.into(), + real_amount: 1000u128.into(), + recipient: api.addr_make("recipient").to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; let msg = SudoMsg::Error { @@ -613,7 +655,7 @@ fn test_sudo_response_error() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::WaitingForAck, - reply_to: Some("reply_to_contract".to_string()), + reply_to: Some(api.addr_make("reply_to_contract").to_string()), transaction: Some(transaction.clone()), }, ) @@ -623,7 +665,7 @@ fn test_sudo_response_error() { res, Response::new() .add_message(CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "reply_to_contract".to_string(), + contract_addr: api.addr_make("reply_to_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::PeripheralHook( Box::new( drop_puppeteer_base::peripheral_hook::ResponseHookMsg::Error( @@ -647,7 +689,7 @@ fn test_sudo_response_error() { assert_eq!( ica, drop_helpers::ica::IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port".to_string(), channel_id: "channel".to_string(), } @@ -667,7 +709,8 @@ fn test_sudo_response_error() { #[test] fn test_sudo_open_ack() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), api); let msg = SudoMsg::OpenAck { port_id: "port_id_1".to_string(), channel_id: "channel_1".to_string(), @@ -691,7 +734,8 @@ fn test_sudo_open_ack() { #[test] fn test_sudo_response_timeout() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -704,8 +748,8 @@ fn test_sudo_response_timeout() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, + amount: 1000u128.into(), + real_amount: 1000u128.into(), recipient: "recipient".to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; @@ -787,6 +831,7 @@ fn test_migrate_wrong_contract() { } mod register_delegations_and_balance_query { + use cosmwasm_std::testing::message_info; use cosmwasm_std::{testing::MockApi, MemoryStorage, OwnedDeps, StdResult}; use drop_helpers::testing::WasmMockQuerier; use drop_puppeteer_base::error::ContractError; @@ -800,12 +845,13 @@ mod register_delegations_and_balance_query { PuppeteerBaseType, ) { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), api); let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked(owner.unwrap_or("owner")).as_ref()), + Some(api.addr_make(owner.unwrap_or("owner")).as_ref()), ) .unwrap(); (deps, puppeteer_base) @@ -814,9 +860,15 @@ mod register_delegations_and_balance_query { #[test] fn non_owner() { let (mut deps, _puppeteer_base) = setup(None); + let api = deps.api; let env = mock_env(); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery { validators: vec![] } ; - let res = crate::contract::execute(deps.as_mut(), env, mock_info("not_owner", &[]), msg); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("not_owner"), &[]), + msg, + ); assert!(res.is_err()); assert_eq!( res.unwrap_err(), @@ -827,6 +879,7 @@ mod register_delegations_and_balance_query { #[test] fn too_many_validators() { let (mut deps, _puppeteer_base) = setup(None); + let api = deps.api; let env = mock_env(); let mut validators = vec![]; for i in 0..=65536u32 { @@ -836,7 +889,12 @@ mod register_delegations_and_balance_query { let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery { validators }; - let res = crate::contract::execute(deps.as_mut(), env, mock_info("owner", &[]), msg); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("owner"), &[]), + msg, + ); assert!(res.is_err()); assert_eq!( res.unwrap_err(), @@ -846,8 +904,8 @@ mod register_delegations_and_balance_query { #[test] fn happy_path_validators_count_less_than_chunk_size() { - let (mut deps, puppeteer_base) = - setup(Some("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2")); + let (mut deps, puppeteer_base) = setup(Some("owner")); + let api = deps.api; let env = mock_env(); let validators = vec![ "cosmos1jy7lsk5pk38zjfnn6nt6qlaphy9uejn4hu65xa".to_string(), @@ -869,7 +927,7 @@ mod register_delegations_and_balance_query { let res = crate::contract::execute( deps.as_mut(), env, - mock_info("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", &[]), + message_info(&api.addr_make("owner"), &[]), msg, ) .unwrap(); @@ -895,8 +953,8 @@ mod register_delegations_and_balance_query { #[test] fn happy_path_validators_count_more_than_chunk_size() { - let (mut deps, puppeteer_base) = - setup(Some("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2")); + let (mut deps, puppeteer_base) = setup(Some("owner")); + let api = deps.api; let env = mock_env(); let validators = vec![ "cosmos1jy7lsk5pk38zjfnn6nt6qlaphy9uejn4hu65xa".to_string(), @@ -926,7 +984,7 @@ mod register_delegations_and_balance_query { let res = crate::contract::execute( deps.as_mut(), env, - mock_info("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", &[]), + message_info(&api.addr_make("owner"), &[]), msg, ) .unwrap(); @@ -984,16 +1042,16 @@ mod register_delegations_and_balance_query { } } -fn get_base_config() -> Config { +fn get_base_config(api: MockApi) -> Config { Config { delegations_queries_chunk_size: 2u32, port_id: "port_id".to_string(), connection_id: "connection_id".to_string(), - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), update_period: 60u64, remote_denom: "move/14a0fe8bd05c1f7b5abff610a768418dbdf573d1674fda114ebe651d4e2d3d4a" .to_string(), - allowed_senders: vec![Addr::unchecked("allowed_sender")], + allowed_senders: vec![api.addr_make("allowed_sender")], transfer_channel_id: "transfer_channel_id".to_string(), sdk_version: "0.47.10".to_string(), timeout: 100u64, @@ -1002,16 +1060,27 @@ fn get_base_config() -> Config { fn base_init( deps_mut: &mut DepsMut, + api: MockApi, ) -> PuppeteerBase<'static, Config, KVQueryType, BalancesAndDelegations> { let puppeteer_base = Puppeteer::default(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); puppeteer_base .config - .save(deps_mut.storage, &get_base_config()) + .save(deps_mut.storage, &get_base_config(api)) .unwrap(); puppeteer_base .ica - .set_address(deps_mut.storage, "ica_address", "port", "channel") + .set_address( + deps_mut.storage, + api.addr_make("ica_address"), + "port", + "channel", + ) .unwrap(); puppeteer_base } diff --git a/contracts/puppeteer-native/Cargo.toml b/contracts/puppeteer-native/Cargo.toml index e1b77db4..fd0cfd22 100644 --- a/contracts/puppeteer-native/Cargo.toml +++ b/contracts/puppeteer-native/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/puppeteer-native/src/contract.rs b/contracts/puppeteer-native/src/contract.rs index ac8d1024..c2e006a9 100644 --- a/contracts/puppeteer-native/src/contract.rs +++ b/contracts/puppeteer-native/src/contract.rs @@ -1,9 +1,9 @@ use cosmos_sdk_proto::cosmos::base::query::v1beta1::PageRequest; use cosmwasm_std::{ - attr, ensure, to_json_binary, Addr, Attribute, BankMsg, Coin as StdCoin, CosmosMsg, Deps, - QueryRequest, Reply, StakingMsg, StdError, SubMsg, Uint128, WasmMsg, + attr, ensure, to_json_binary, Addr, Attribute, BankMsg, Binary, Coin as StdCoin, CosmosMsg, + Deps, DepsMut, Env, GrpcQuery, MessageInfo, QueryRequest, Reply, Response, StakingMsg, + StdError, StdResult, SubMsg, Uint128, WasmMsg, }; -use cosmwasm_std::{Binary, DepsMut, Env, MessageInfo, Response, StdResult}; use drop_helpers::{answer::response, validation::validate_addresses}; use drop_puppeteer_base::{ @@ -115,7 +115,7 @@ fn query_delegations(deps: Deps, env: Env) -> ContractResult = - deps.querier.query(&QueryRequest::Stargate { + deps.querier.query(&QueryRequest::Grpc(GrpcQuery { path: "/cosmos.staking.v1beta1.Query/DelegatorDelegations".to_string(), data: cosmos_sdk_proto::cosmos::staking::v1beta1::QueryDelegatorDelegationsRequest { @@ -128,7 +128,7 @@ fn query_delegations(deps: Deps, env: Env) -> ContractResult { @@ -184,7 +184,7 @@ fn query_unbonding_delegations(deps: Deps, env: Env) -> ContractRe loop { let unbonding_response: QueryDelegatorUnbondingDelegationsResponse = deps .querier - .query(&QueryRequest::Stargate { + .query(&QueryRequest::Grpc(GrpcQuery { path: "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations".to_string(), data: cosmos_sdk_proto::cosmos::staking::v1beta1::QueryDelegatorUnbondingDelegationsRequest { @@ -197,7 +197,7 @@ fn query_unbonding_delegations(deps: Deps, env: Env) -> ContractRe } .encode_to_vec() .into(), - })?; + }))?; let unbonding_delegations: Vec = unbonding_response.clone().try_into()?; diff --git a/contracts/puppeteer-native/src/tests.rs b/contracts/puppeteer-native/src/tests.rs index 55643621..800041c2 100644 --- a/contracts/puppeteer-native/src/tests.rs +++ b/contracts/puppeteer-native/src/tests.rs @@ -2,7 +2,7 @@ use crate::contract::{CLAIM_REWARDS_REPLY_ID, CONTRACT_NAME}; use cosmwasm_std::{ coin, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env, MockApi}, to_json_binary, Addr, BankMsg, Coin, CosmosMsg, Decimal256, DepsMut, Event, Response, StakingMsg, StdError, SubMsg, Timestamp, Uint128, Uint64, WasmMsg, }; @@ -40,30 +40,48 @@ use crate::contract::DEFAULT_DENOM; #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let msg = InstantiateMsg { - owner: Some("owner".to_string()), - allowed_senders: vec!["allowed_sender1".to_string(), "allowed_sender2".to_string()], - distribution_module_contract: "distribution_module".to_string(), + owner: Some(api.addr_make("owner").to_string()), + allowed_senders: vec![ + api.addr_make("allowed_sender1").to_string(), + api.addr_make("allowed_sender2").to_string(), + ], + distribution_module_contract: api.addr_make("distribution_module").to_string(), }; let env = mock_env(); - let res = - crate::contract::instantiate(deps.as_mut(), env, mock_info("sender", &[]), msg).unwrap(); + let res = crate::contract::instantiate( + deps.as_mut(), + env, + message_info(&api.addr_make("sender"), &[]), + msg, + ) + .unwrap(); + + let allowed_senders_output = "allowed_sender2,allowed_sender1" + .split(',') + .map(|s| api.addr_make(s).to_string()) + .collect::>() + .join(","); assert_eq!( res, Response::new().add_event( Event::new("crates.io:drop-staking__drop-puppeteer-native-instantiate").add_attributes( vec![ - ("owner", "owner"), - ("distribution_module_contract", "distribution_module"), - ("allowed_senders", "allowed_sender1,allowed_sender2"), + ("owner", api.addr_make("owner").to_string()), + ( + "distribution_module_contract", + api.addr_make("distribution_module").to_string() + ), + ("allowed_senders", allowed_senders_output), ] ) ) ); let config = CONFIG.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_base_config()); + assert_eq!(config, get_base_config(api)); assert_eq!( - cosmwasm_std::Addr::unchecked("owner"), + api.addr_make("owner"), cw_ownable::get_ownership(deps.as_mut().storage) .unwrap() .owner @@ -74,22 +92,28 @@ fn test_instantiate() { #[test] fn test_execute_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_base_config()) + .save(deps.as_mut().storage, &get_base_config(api)) .unwrap(); let msg = drop_staking_base::msg::puppeteer_native::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - allowed_senders: Some(vec!["new_allowed_sender".to_string()]), - distribution_module_contract: Some("distribution_module".to_string()), + allowed_senders: Some(vec![api.addr_make("new_allowed_sender").to_string()]), + distribution_module_contract: Some(api.addr_make("distribution_module").to_string()), }, }; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), msg.clone(), ) .unwrap_err(); @@ -104,20 +128,28 @@ fn test_execute_update_config_unauthorized() { #[test] fn test_execute_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG - .save(deps.as_mut().storage, &get_base_config()) + .save(deps.as_mut().storage, &get_base_config(api)) .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - allowed_senders: Some(vec!["new_allowed_sender".to_string()]), - distribution_module_contract: Some("distribution_module".to_string()), + allowed_senders: Some(vec![api.addr_make("new_allowed_sender").to_string()]), + distribution_module_contract: Some( + api.addr_make("distribution_module").to_string(), + ), }, }, ) @@ -127,8 +159,11 @@ fn test_execute_update_config() { Response::new().add_event( Event::new("crates.io:drop-staking__drop-puppeteer-native-config_update") .add_attributes(vec![ - ("allowed_senders", "1"), - ("distribution_module_contract", "distribution_module"), + ("allowed_senders", "1".to_string()), + ( + "distribution_module_contract", + api.addr_make("distribution_module").to_string() + ), ]) ) ); @@ -137,8 +172,8 @@ fn test_execute_update_config() { assert_eq!( config, Config { - allowed_senders: vec![Addr::unchecked("new_allowed_sender")], - distribution_module_contract: Addr::unchecked("distribution_module"), + allowed_senders: vec![api.addr_make("new_allowed_sender")], + distribution_module_contract: api.addr_make("distribution_module"), } ); } @@ -146,11 +181,12 @@ fn test_execute_update_config() { #[test] fn test_execute_setup_protocol_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::SetupProtocol { rewards_withdraw_address: "rewards_withdraw_address".to_string(), }, @@ -166,24 +202,22 @@ fn test_execute_setup_protocol_sender_is_not_allowed() { #[test] fn test_execute_setup_protocol() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - base_init(&mut deps.as_mut()); + base_init(&mut deps.as_mut(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender1", &[]), + message_info(&api.addr_make("allowed_sender1"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::SetupProtocol { - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + rewards_withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), }, ) .unwrap(); let withdraw_address = REWARDS_WITHDRAW_ADDR.load(deps.as_mut().storage).unwrap(); - assert_eq!( - withdraw_address, - Addr::unchecked("rewards_withdraw_address") - ); + assert_eq!(withdraw_address, api.addr_make("rewards_withdraw_address")); assert_eq!( res, @@ -191,7 +225,7 @@ fn test_execute_setup_protocol() { Event::new("crates.io:drop-staking__drop-puppeteer-native-execute_setup_protocol") .add_attributes(vec![( "rewards_withdraw_address", - "rewards_withdraw_address" + api.addr_make("rewards_withdraw_address") ),]) ) ); @@ -200,15 +234,19 @@ fn test_execute_setup_protocol() { #[test] fn test_execute_undelegate_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::Undelegate { batch_id: 0u128, - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -223,18 +261,22 @@ fn test_execute_undelegate_sender_is_not_allowed() { #[test] fn test_execute_undelegate() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let env: cosmwasm_std::Env = mock_env(); let res = crate::contract::execute( deps.as_mut(), env.clone(), - mock_info("allowed_sender1", &[]), + message_info(&api.addr_make("allowed_sender1"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::Undelegate { batch_id: 0u128, - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -243,16 +285,19 @@ fn test_execute_undelegate() { res, Response::new().add_messages(vec![ CosmosMsg::Staking(StakingMsg::Undelegate { - validator: "valoper1".to_string(), + validator: api.addr_make("valoper1").to_string(), amount: cosmwasm_std::Coin::new(1000u128, DEFAULT_DENOM.to_string()), }), CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "some_reply_to".to_string(), + contract_addr: api.addr_make("some_reply_to").to_string(), msg: to_json_binary(&ReceiverExecuteMsg::PeripheralHook( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: Transaction::Undelegate { interchain_account_id: env.contract.address.to_string(), - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128) + )], denom: DEFAULT_DENOM.to_string(), batch_id: 0u128, }, @@ -270,23 +315,27 @@ fn test_execute_undelegate() { #[test] fn test_execute_delegate_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut()); + base_init(&mut deps.as_mut(), api); let env: cosmwasm_std::Env = mock_env(); let res = crate::contract::execute( deps.as_mut(), env.clone(), - mock_info("allowed_sender1", &[]), + message_info(&api.addr_make("allowed_sender1"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::Delegate { - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -300,26 +349,30 @@ fn test_execute_delegate_no_funds() { #[test] fn test_execute_delegate_diff_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut()); + base_init(&mut deps.as_mut(), api); let env: cosmwasm_std::Env = mock_env(); let res = crate::contract::execute( deps.as_mut(), env.clone(), - mock_info( - "allowed_sender1", + message_info( + &api.addr_make("allowed_sender1"), &[Coin::new(1001u128, DEFAULT_DENOM.to_string())], ), drop_staking_base::msg::puppeteer_native::ExecuteMsg::Delegate { - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -335,26 +388,30 @@ fn test_execute_delegate_diff_funds() { #[test] fn test_execute_delegate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut()); + base_init(&mut deps.as_mut(), api); let env: cosmwasm_std::Env = mock_env(); let res = crate::contract::execute( deps.as_mut(), env.clone(), - mock_info( - "allowed_sender1", + message_info( + &api.addr_make("allowed_sender1"), &[Coin::new(1000u128, DEFAULT_DENOM.to_string())], ), drop_staking_base::msg::puppeteer_native::ExecuteMsg::Delegate { - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -364,11 +421,11 @@ fn test_execute_delegate() { Response::new() .add_messages(vec![ CosmosMsg::Staking(StakingMsg::Delegate { - validator: "valoper1".to_string(), + validator: api.addr_make("valoper1").to_string(), amount: cosmwasm_std::Coin::new(1000u128, "untrn".to_string()), }), CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "some_reply_to".to_string(), + contract_addr: api.addr_make("some_reply_to").to_string(), msg: to_json_binary(&ReceiverExecuteMsg::PeripheralHook( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: Transaction::Stake { @@ -392,20 +449,24 @@ fn test_execute_delegate() { #[test] fn test_execute_claim_rewards_and_optionaly_transfer_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["validator1".to_string(), "validator2".to_string()], + validators: vec![ + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string(), + ], transfer: Some(drop_puppeteer_base::msg::TransferReadyBatchesMsg { batch_ids: vec![0u128, 1u128, 2u128], emergency: true, amount: Uint128::from(123u64), - recipient: "some_recipient".to_string(), + recipient: api.addr_make("some_recipient").to_string(), }), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -420,7 +481,8 @@ fn test_execute_claim_rewards_and_optionaly_transfer_sender_is_not_allowed() { #[test] fn test_execute_claim_rewards_and_optionaly_transfer() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let env = mock_env(); @@ -428,17 +490,20 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { batch_ids: vec![0u128, 1u128, 2u128], emergency: true, amount: Uint128::from(123u64), - recipient: "some_recipient".to_string(), + recipient: api.addr_make("some_recipient").to_string(), }); let res = crate::contract::execute( deps.as_mut(), env.clone(), - mock_info("allowed_sender1", &[]), + message_info(&api.addr_make("allowed_sender1"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["validator1".to_string(), "validator2".to_string()], + validators: vec![ + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string(), + ], transfer: transfer.clone(), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -448,18 +513,18 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { cosmwasm_std::Response::new() .add_messages(vec![ CosmosMsg::Bank(BankMsg::Send { - to_address: "some_recipient".to_string(), + to_address: api.addr_make("some_recipient").to_string(), amount: vec![cosmwasm_std::Coin::new(123u128, DEFAULT_DENOM.to_string())], }), CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "some_reply_to".to_string(), + contract_addr: api.addr_make("some_reply_to").to_string(), msg: to_json_binary(&ReceiverExecuteMsg::PeripheralHook( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: Transaction::ClaimRewardsAndOptionalyTransfer { interchain_account_id: env.contract.address.to_string(), validators: vec![ - "validator1".to_string(), - "validator2".to_string() + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string() ], denom: DEFAULT_DENOM.to_string(), transfer, @@ -473,10 +538,10 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { }) ]) .add_submessage(SubMsg::reply_on_error(CosmosMsg::Wasm(WasmMsg::Execute { - contract_addr: "distribution_module".to_string(), + contract_addr: api.addr_make("distribution_module").to_string(), msg: to_json_binary( &drop_staking_base::msg::neutron_distribution_mock::ExecuteMsg::ClaimRewards { - to_address: Some("rewards_withdraw_address".to_string()) + to_address: Some(api.addr_make("rewards_withdraw_address").to_string()) } ) .unwrap(), @@ -485,39 +550,49 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { ); } -fn get_base_config() -> Config { +fn get_base_config(api: MockApi) -> Config { Config { allowed_senders: vec![ - Addr::unchecked("allowed_sender1"), - Addr::unchecked("allowed_sender2"), + api.addr_make("allowed_sender2"), + api.addr_make("allowed_sender1"), ], - distribution_module_contract: Addr::unchecked("distribution_module"), + distribution_module_contract: api.addr_make("distribution_module"), } } -fn base_init(deps_mut: &mut DepsMut) { - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - CONFIG.save(deps_mut.storage, &get_base_config()).unwrap(); +fn base_init(deps_mut: &mut DepsMut, api: MockApi) { + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); + CONFIG + .save(deps_mut.storage, &get_base_config(api)) + .unwrap(); REWARDS_WITHDRAW_ADDR - .save( - deps_mut.storage, - &Addr::unchecked("rewards_withdraw_address"), - ) + .save(deps_mut.storage, &api.addr_make("rewards_withdraw_address")) .unwrap(); } #[test] fn test_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::UpdateOwnership( cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }, ), @@ -526,7 +601,7 @@ fn test_transfer_ownership() { crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), drop_staking_base::msg::puppeteer_native::ExecuteMsg::UpdateOwnership( cw_ownable::Action::AcceptOwnership {}, ), @@ -544,7 +619,7 @@ fn test_transfer_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } @@ -582,7 +657,8 @@ fn test_query_extension_delegations_none() { #[test] fn test_query_extension_delegations_some_one_page() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); deps.querier.add_stargate_query_response( "/cosmos.staking.v1beta1.Query/DelegatorDelegations", @@ -599,7 +675,7 @@ fn test_query_extension_delegations_some_one_page() { cosmwasm_std::Uint256::from(1u64), ), }, - balance: cosmwasm_std::Coin::new(100, "denom1"), + balance: cosmwasm_std::Coin::new(100u128, "denom1"), }, DelegationResponseNative { delegation: Delegation { @@ -610,7 +686,7 @@ fn test_query_extension_delegations_some_one_page() { cosmwasm_std::Uint256::from(1u64), ), }, - balance: cosmwasm_std::Coin::new(100, "denom2"), + balance: cosmwasm_std::Coin::new(100u128, "denom2"), }, ], pagination: PageResponse { @@ -644,7 +720,7 @@ fn test_query_extension_delegations_some_one_page() { DropDelegation { delegator: Addr::unchecked("delegator1"), validator: "validator1".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom1"), + amount: cosmwasm_std::Coin::new(100u128, "denom1"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -653,7 +729,7 @@ fn test_query_extension_delegations_some_one_page() { DropDelegation { delegator: Addr::unchecked("delegator2"), validator: "validator2".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom2"), + amount: cosmwasm_std::Coin::new(100u128, "denom2"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -671,7 +747,8 @@ fn test_query_extension_delegations_some_one_page() { #[test] fn test_query_extension_delegations_some_two_pages() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); deps.querier.add_stargate_query_response( "/cosmos.staking.v1beta1.Query/DelegatorDelegations", @@ -688,7 +765,7 @@ fn test_query_extension_delegations_some_two_pages() { cosmwasm_std::Uint256::from(1u64), ), }, - balance: cosmwasm_std::Coin::new(100, "denom1"), + balance: cosmwasm_std::Coin::new(100u128, "denom1"), }, DelegationResponseNative { delegation: Delegation { @@ -699,7 +776,7 @@ fn test_query_extension_delegations_some_two_pages() { cosmwasm_std::Uint256::from(1u64), ), }, - balance: cosmwasm_std::Coin::new(100, "denom2"), + balance: cosmwasm_std::Coin::new(100u128, "denom2"), }, ], pagination: PageResponse { @@ -726,7 +803,7 @@ fn test_query_extension_delegations_some_two_pages() { cosmwasm_std::Uint256::from(1u64), ), }, - balance: cosmwasm_std::Coin::new(100, "denom3"), + balance: cosmwasm_std::Coin::new(100u128, "denom3"), }], pagination: PageResponse { next_key: None, @@ -759,7 +836,7 @@ fn test_query_extension_delegations_some_two_pages() { DropDelegation { delegator: Addr::unchecked("delegator1"), validator: "validator1".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom1"), + amount: cosmwasm_std::Coin::new(100u128, "denom1"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -768,7 +845,7 @@ fn test_query_extension_delegations_some_two_pages() { DropDelegation { delegator: Addr::unchecked("delegator2"), validator: "validator2".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom2"), + amount: cosmwasm_std::Coin::new(100u128, "denom2"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -777,7 +854,7 @@ fn test_query_extension_delegations_some_two_pages() { DropDelegation { delegator: Addr::unchecked("delegator3"), validator: "validator3".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom3"), + amount: cosmwasm_std::Coin::new(100u128, "denom3"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -795,8 +872,9 @@ fn test_query_extension_delegations_some_two_pages() { #[test] fn test_query_extension_balances_none() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - base_init(&mut deps.as_mut()); + base_init(&mut deps.as_mut(), api); let env = mock_env(); @@ -829,7 +907,8 @@ fn test_query_extension_balances_some() { let coins = vec![cosmwasm_std::Coin::new(123u128, DEFAULT_DENOM.to_string())]; let mut deps = mock_dependencies(&coins); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); let env = mock_env(); @@ -906,7 +985,8 @@ fn test_query_extension_balances_some() { #[test] fn test_unbonding_delegations_one_page() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); deps.querier.add_stargate_query_response( "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", @@ -982,7 +1062,8 @@ fn test_unbonding_delegations_one_page() { #[test] fn test_unbonding_delegations_two_pages() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut()); + let api = deps.api; + base_init(&mut deps.as_mut(), api); deps.querier.add_stargate_query_response( "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", diff --git a/contracts/puppeteer/Cargo.toml b/contracts/puppeteer/Cargo.toml index b79e6fdb..255e5e43 100644 --- a/contracts/puppeteer/Cargo.toml +++ b/contracts/puppeteer/Cargo.toml @@ -17,14 +17,13 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] [dependencies] cosmos-sdk-proto = { workspace = true } neutron-sdk = { workspace = true } +neutron-std = { workspace = true } prost = { workspace = true } prost-types = { workspace = true } cosmwasm-schema = { workspace = true } diff --git a/contracts/puppeteer/src/contract.rs b/contracts/puppeteer/src/contract.rs index 3cf96066..38eca7b9 100644 --- a/contracts/puppeteer/src/contract.rs +++ b/contracts/puppeteer/src/contract.rs @@ -7,10 +7,10 @@ use cosmwasm_std::{ StdError, SubMsg, Timestamp, Uint128, WasmMsg, }; use cosmwasm_std::{Binary, DepsMut, Env, MessageInfo, Response, StdResult}; +use drop_helpers::ibc_client_state::{extract_identified_client_state, query_client_state}; use drop_helpers::{ answer::response, get_contracts, - ibc_client_state::query_client_state, ibc_fee::query_ibc_fee, icq::{ new_delegations_and_balance_query_msg, new_multiple_balances_query_msg, @@ -575,6 +575,7 @@ fn execute_setup_protocol( set_withdraw_address_msg, "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", )?); + let submsg = compose_submsg( deps.branch(), config.clone(), @@ -840,7 +841,7 @@ fn execute_redelegate( validator_from, validator_to, denom: config.remote_denom, - amount: amount.into(), + amount, }, reply_to, ReplyMsg::SudoPayload.to_reply_id(), @@ -882,7 +883,7 @@ fn execute_tokenize_share( interchain_account_id: ICA_ID.to_string(), validator, denom: config.remote_denom, - amount: amount.into(), + amount, }, reply_to, ReplyMsg::SudoPayload.to_reply_id(), @@ -1062,10 +1063,9 @@ fn sudo_response( )?; let client_state = query_client_state(&deps.as_ref(), channel_id, port_id)?; - let remote_height = client_state - .identified_client_state - .ok_or_else(|| StdError::generic_err("IBC client state identified_client_state not found"))? - .client_state + let identified_client_state = extract_identified_client_state(&deps.as_ref(), client_state)?; + + let remote_height = identified_client_state .latest_height .ok_or_else(|| StdError::generic_err("IBC client state latest_height not found"))? .revision_height; @@ -1076,10 +1076,11 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, },) ))? )); + let mut msgs = vec![]; if !reply_to.is_empty() { msgs.push(CosmosMsg::Wasm(WasmMsg::Execute { @@ -1088,7 +1089,7 @@ fn sudo_response( ResponseHookMsg::Success(ResponseHookSuccessMsg { transaction: transaction.clone(), local_height: env.block.height, - remote_height: remote_height.u64(), + remote_height, }), ))?, funds: vec![], diff --git a/contracts/puppeteer/src/tests.rs b/contracts/puppeteer/src/tests.rs index 10d89c7b..d4ffcb66 100644 --- a/contracts/puppeteer/src/tests.rs +++ b/contracts/puppeteer/src/tests.rs @@ -2,9 +2,9 @@ use crate::contract::{Puppeteer, CONTRACT_NAME}; use cosmwasm_schema::schemars; use cosmwasm_std::{ coin, coins, from_json, - testing::{mock_env, mock_info}, - to_json_binary, Addr, Binary, Coin, CosmosMsg, Decimal256, DepsMut, Event, Response, StdError, - SubMsg, Timestamp, Uint128, Uint64, + testing::{message_info, mock_env}, + to_json_binary, Addr, Binary, Coin, CosmosMsg, Decimal256, DepsMut, Event, MsgResponse, + Response, StdError, SubMsg, Timestamp, Uint128, }; use drop_helpers::{ ibc_client_state::{ @@ -35,14 +35,11 @@ use neutron_sdk::{ use prost::Message; use schemars::_serde_json::to_string; +use cosmwasm_std::testing::MockApi; +use prost_types::Duration; use std::vec; -type PuppeteerBaseType = PuppeteerBase< - 'static, - drop_staking_base::state::puppeteer::Config, - KVQueryType, - BalancesAndDelegations, ->; +type PuppeteerBaseType = PuppeteerBase<'static, Config, KVQueryType, BalancesAndDelegations>; fn build_interchain_query_response_celestia() -> Binary { let res: Vec = from_json( @@ -313,28 +310,34 @@ fn build_interchain_query_response() -> Binary { #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let msg = InstantiateMsg { delegations_queries_chunk_size: Some(2u32), - owner: Some("owner".to_string()), + owner: Some(api.addr_make("owner").to_string()), connection_id: "connection_id".to_string(), - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), port_id: "port_id".to_string(), update_period: 60u64, remote_denom: "remote_denom".to_string(), - allowed_senders: vec!["allowed_sender".to_string()], + allowed_senders: vec![api.addr_make("allowed_sender").to_string()], transfer_channel_id: "transfer_channel_id".to_string(), sdk_version: "0.47.10".to_string(), timeout: 100u64, }; let env = mock_env(); - let res = - crate::contract::instantiate(deps.as_mut(), env, mock_info("sender", &[]), msg).unwrap(); + let res = crate::contract::instantiate( + deps.as_mut(), + env, + message_info(&api.addr_make("sender"), &[]), + msg, + ) + .unwrap(); assert_eq!(res, Response::new()); let puppeteer_base = Puppeteer::default(); let config = puppeteer_base.config.load(deps.as_ref().storage).unwrap(); - assert_eq!(config, get_base_config("0.47.10".to_string())); + assert_eq!(config, get_base_config("0.47.10".to_string(), api)); assert_eq!( - cosmwasm_std::Addr::unchecked("owner"), + api.addr_make("owner"), cw_ownable::get_ownership(deps.as_mut().storage) .unwrap() .owner @@ -345,20 +348,21 @@ fn test_instantiate() { #[test] fn test_execute_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let puppeteer_base = Puppeteer::default(); puppeteer_base .config .save( deps.as_mut().storage, - &get_base_config("0.47.10".to_string()), + &get_base_config("0.47.10".to_string(), api), ) .unwrap(); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { update_period: Some(121u64), remote_denom: Some("new_remote_denom".to_string()), - factory_contract: Some(Addr::unchecked("factory_contract")), - allowed_senders: Some(vec!["new_allowed_sender".to_string()]), + factory_contract: Some(api.addr_make("factory_contract")), + allowed_senders: Some(vec![api.addr_make("new_allowed_sender").to_string()]), transfer_channel_id: Some("new_transfer_channel_id".to_string()), connection_id: Some("new_connection_id".to_string()), port_id: Some("new_port_id".to_string()), @@ -367,12 +371,17 @@ fn test_execute_update_config_unauthorized() { }, }; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), msg.clone(), ) .unwrap_err(); @@ -387,27 +396,33 @@ fn test_execute_update_config_unauthorized() { #[test] fn test_execute_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let puppeteer_base = Puppeteer::default(); puppeteer_base .config .save( deps.as_mut().storage, - &get_base_config("0.47.10".to_string()), + &get_base_config("0.47.10".to_string(), api), ) .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { update_period: Some(121u64), remote_denom: Some("new_remote_denom".to_string()), - factory_contract: Some(Addr::unchecked("factory_contract")), - allowed_senders: Some(vec!["new_allowed_sender".to_string()]), + factory_contract: Some(api.addr_make("factory_contract")), + allowed_senders: Some(vec![api.addr_make("new_allowed_sender").to_string()]), transfer_channel_id: Some("new_transfer_channel_id".to_string()), connection_id: Some("new_connection_id".to_string()), port_id: Some("new_port_id".to_string()), @@ -430,7 +445,10 @@ fn test_execute_update_config() { ("transfer_channel_id", "new_transfer_channel_id"), ("sdk_version", "0.47.0"), ("timeout", "101"), - ("factory_contract", "factory_contract"), + ( + "factory_contract", + api.addr_make("factory_contract").as_str() + ), ] ) ) @@ -443,10 +461,10 @@ fn test_execute_update_config() { delegations_queries_chunk_size: 2u32, port_id: "new_port_id".to_string(), connection_id: "new_connection_id".to_string(), - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), update_period: 121u64, remote_denom: "new_remote_denom".to_string(), - allowed_senders: vec![Addr::unchecked("new_allowed_sender")], + allowed_senders: vec![api.addr_make("new_allowed_sender")], transfer_channel_id: "new_transfer_channel_id".to_string(), sdk_version: "0.47.0".to_string(), timeout: 101u64, @@ -457,7 +475,8 @@ fn test_execute_update_config() { #[test] fn test_execute_setup_protocol_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), @@ -467,7 +486,7 @@ fn test_execute_setup_protocol_sender_is_not_allowed() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::SetupProtocol { rewards_withdraw_address: "rewards_withdraw_address".to_string(), }, @@ -483,19 +502,20 @@ fn test_execute_setup_protocol_sender_is_not_allowed() { #[test] fn test_execute_setup_protocol() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::SetupProtocol { - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + rewards_withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), }, ) .unwrap(); @@ -505,8 +525,8 @@ fn test_execute_setup_protocol() { type_url: "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress".to_string(), value: Binary::from( cosmos_sdk_proto::cosmos::distribution::v1beta1::MsgSetWithdrawAddress { - delegator_address: "ica_address".to_string(), - withdraw_address: "rewards_withdraw_address".to_string(), + delegator_address: api.addr_make("ica_address").to_string(), + withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), } .encode_to_vec(), ), @@ -535,8 +555,8 @@ fn test_execute_setup_protocol() { reply_to: Some("".to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api.addr_make("rewards_withdraw_address").to_string(), } ) } @@ -546,13 +566,14 @@ fn test_execute_setup_protocol() { #[test] fn test_execute_setup_protocol_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -573,7 +594,7 @@ fn test_execute_setup_protocol_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::SetupProtocol { rewards_withdraw_address: "rewards_withdraw_address".to_string(), }, @@ -592,21 +613,25 @@ fn test_execute_setup_protocol_not_idle() { #[test] fn test_execute_undelegate_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Undelegate { batch_id: 0u128, - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -621,13 +646,14 @@ fn test_execute_undelegate_sender_is_not_allowed() { #[test] fn test_execute_undelegate_sender_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -635,11 +661,13 @@ fn test_execute_undelegate_sender_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -648,20 +676,21 @@ fn test_execute_undelegate_sender_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Undelegate { batch_id: 0u128, - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -669,30 +698,34 @@ fn test_execute_undelegate_sender_not_idle() { #[test] fn test_execute_undelegate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Undelegate { batch_id: 0u128, - items: vec![("valoper1".to_string(), Uint128::from(1000u128))], - reply_to: "some_reply_to".to_string(), + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128), + )], + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); let undelegate_msg = drop_helpers::interchain::prepare_any_msg( cosmos_sdk_proto::cosmos::staking::v1beta1::MsgUndelegate { - delegator_address: "ica_address".to_string(), - validator_address: "valoper1".to_string(), + delegator_address: api.addr_make("ica_address").to_string(), + validator_address: api.addr_make("valoper1").to_string(), amount: Some(cosmos_sdk_proto::cosmos::base::v1beta1::Coin { denom: "remote_denom".to_string(), amount: "1000".to_string(), @@ -722,13 +755,16 @@ fn test_execute_undelegate() { drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("some_reply_to".to_string()), + reply_to: Some(api.addr_make("some_reply_to").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::Undelegate { batch_id: 0u128, interchain_account_id: "DROP".to_string(), denom: "remote_denom".to_string(), - items: vec![("valoper1".to_string(), Uint128::from(1000u128))] + items: vec![( + api.addr_make("valoper1").to_string(), + Uint128::from(1000u128) + )] } ) } @@ -738,22 +774,23 @@ fn test_execute_undelegate() { #[test] fn test_execute_redelegate_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Redelegate { - validator_from: "validator_from".to_string(), - validator_to: "validator_to".to_string(), + validator_from: api.addr_make("validator_from").to_string(), + validator_to: api.addr_make("validator_to").to_string(), amount: Uint128::from(0u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -768,13 +805,14 @@ fn test_execute_redelegate_sender_is_not_allowed() { #[test] fn test_execute_redelegate_sender_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -782,11 +820,13 @@ fn test_execute_redelegate_sender_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -795,21 +835,19 @@ fn test_execute_redelegate_sender_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Redelegate { - validator_from: "validator_from".to_string(), - validator_to: "validator_to".to_string(), + validator_from: api.addr_make("validator_from").to_string(), + validator_to: api.addr_make("validator_to").to_string(), amount: Uint128::from(0u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -817,31 +855,33 @@ fn test_execute_redelegate_sender_not_idle() { #[test] fn test_execute_redelegate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Redelegate { - validator_from: "validator_from".to_string(), - validator_to: "validator_to".to_string(), + validator_from: api.addr_make("validator_from").to_string(), + validator_to: api.addr_make("validator_to").to_string(), amount: Uint128::from(0u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 65536u64, - msg: cosmwasm_std::CosmosMsg::Custom(NeutronMsg::submit_tx( + payload: Binary::default(), + msg: CosmosMsg::Custom(NeutronMsg::submit_tx( "connection_id".to_string(), "DROP".to_string(), vec![drop_helpers::interchain::prepare_any_msg( @@ -850,8 +890,8 @@ fn test_execute_redelegate() { .ica .get_address(deps.as_mut().storage) .unwrap(), - validator_src_address: "validator_from".to_string(), - validator_dst_address: "validator_to".to_string(), + validator_src_address: api.addr_make("validator_from").to_string(), + validator_dst_address: api.addr_make("validator_to").to_string(), amount: Some(drop_proto::proto::cosmos::base::v1beta1::Coin { denom: puppeteer_base .config @@ -887,21 +927,22 @@ fn test_execute_redelegate() { #[test] fn test_execute_tokenize_share_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::TokenizeShare { - validator: "validator".to_string(), + validator: api.addr_make("validator").to_string(), amount: Uint128::from(123u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -916,13 +957,14 @@ fn test_execute_tokenize_share_sender_is_not_allowed() { #[test] fn test_execute_tokenize_share_sender_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -930,11 +972,13 @@ fn test_execute_tokenize_share_sender_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -943,20 +987,18 @@ fn test_execute_tokenize_share_sender_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::TokenizeShare { - validator: "validator".to_string(), + validator: api.addr_make("validator").to_string(), amount: Uint128::from(123u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -964,22 +1006,23 @@ fn test_execute_tokenize_share_sender_not_idle() { #[test] fn test_execute_tokenize_share() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::TokenizeShare { - validator: "validator".to_string(), + validator: api.addr_make("validator").to_string(), amount: Uint128::from(123u64), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -989,15 +1032,16 @@ fn test_execute_tokenize_share() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 65536u64, - msg: cosmwasm_std::CosmosMsg::Custom(NeutronMsg::submit_tx( + payload: Binary::default(), + msg: CosmosMsg::Custom(NeutronMsg::submit_tx( "connection_id".to_string(), "DROP".to_string(), vec![drop_helpers::interchain::prepare_any_msg( drop_proto::proto::liquidstaking::staking::v1beta1::MsgTokenizeShares { delegator_address: delegator.clone(), - validator_address: "validator".to_string(), + validator_address: api.addr_make("validator").to_string(), amount: Some(drop_proto::proto::cosmos::base::v1beta1::Coin { denom: puppeteer_base .config @@ -1034,24 +1078,25 @@ fn test_execute_tokenize_share() { #[test] fn test_execute_redeem_shares_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RedeemShares { items: vec![drop_puppeteer_base::state::RedeemShareItem { amount: Uint128::from(1000u128), remote_denom: "remote_denom".to_string(), local_denom: "local_denom".to_string(), }], - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -1066,13 +1111,14 @@ fn test_execute_redeem_shares_sender_is_not_allowed() { #[test] fn test_execute_redeeem_shares_sender_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -1080,11 +1126,13 @@ fn test_execute_redeeem_shares_sender_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -1093,23 +1141,21 @@ fn test_execute_redeeem_shares_sender_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RedeemShares { items: vec![drop_puppeteer_base::state::RedeemShareItem { amount: Uint128::from(1000u128), remote_denom: "remote_denom".to_string(), local_denom: "local_denom".to_string(), }], - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -1117,24 +1163,25 @@ fn test_execute_redeeem_shares_sender_not_idle() { #[test] fn test_execute_redeem_share() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RedeemShares { items: vec![drop_puppeteer_base::state::RedeemShareItem { amount: Uint128::from(1000u128), remote_denom: "remote_denom".to_string(), local_denom: "local_denom".to_string(), }], - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -1146,7 +1193,7 @@ fn test_execute_redeem_share() { denom: "remote_denom".to_string(), amount: "1000".to_string(), }), - delegator_address: "ica_address".to_string(), + delegator_address: api.addr_make("ica_address").to_string(), } .encode_to_vec(), ), @@ -1171,7 +1218,7 @@ fn test_execute_redeem_share() { drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("some_reply_to".to_string()), + reply_to: Some(api.addr_make("some_reply_to").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::RedeemShares { items: vec![drop_puppeteer_base::state::RedeemShareItem { @@ -1188,26 +1235,30 @@ fn test_execute_redeem_share() { #[test] fn test_execute_claim_rewards_and_optionaly_transfer_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["validator1".to_string(), "validator2".to_string()], + validators: vec![ + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string(), + ], transfer: Some(drop_puppeteer_base::msg::TransferReadyBatchesMsg { batch_ids: vec![0u128, 1u128, 2u128], emergency: true, amount: Uint128::from(123u64), - recipient: "some_recipient".to_string(), + recipient: api.addr_make("some_recipient").to_string(), }), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); @@ -1222,13 +1273,14 @@ fn test_execute_claim_rewards_and_optionaly_transfer_sender_is_not_allowed() { #[test] fn test_execute_claim_rewards_and_optionaly_transfer_not_idle() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -1236,11 +1288,13 @@ fn test_execute_claim_rewards_and_optionaly_transfer_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -1249,25 +1303,26 @@ fn test_execute_claim_rewards_and_optionaly_transfer_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["validator1".to_string(), "validator2".to_string()], + validators: vec![ + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string(), + ], transfer: Some(drop_puppeteer_base::msg::TransferReadyBatchesMsg { batch_ids: vec![0u128, 1u128, 2u128], emergency: true, amount: Uint128::from(123u64), - recipient: "some_recipient".to_string(), + recipient: api.addr_make("some_recipient").to_string(), }), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -1275,27 +1330,31 @@ fn test_execute_claim_rewards_and_optionaly_transfer_not_idle() { #[test] fn test_execute_claim_rewards_and_optionaly_transfer() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::ClaimRewardsAndOptionalyTransfer { - validators: vec!["validator1".to_string(), "validator2".to_string()], + validators: vec![ + api.addr_make("validator1").to_string(), + api.addr_make("validator2").to_string(), + ], transfer: Some(drop_puppeteer_base::msg::TransferReadyBatchesMsg { batch_ids: vec![0u128, 1u128, 2u128], emergency: true, amount: Uint128::from(123u64), - recipient: "some_recipient".to_string(), + recipient: api.addr_make("some_recipient").to_string(), }), - reply_to: "some_reply_to".to_string(), + reply_to: api.addr_make("some_reply_to").to_string(), }, ) .unwrap(); @@ -1305,16 +1364,17 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 65536u64, - msg: cosmwasm_std::CosmosMsg::Custom(NeutronMsg::submit_tx( + payload: Binary::default(), + msg: CosmosMsg::Custom(NeutronMsg::submit_tx( "connection_id".to_string(), "DROP".to_string(), vec![ drop_helpers::interchain::prepare_any_msg( cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend { from_address: ica_address.clone(), - to_address: "some_recipient".to_string(), + to_address: api.addr_make("some_recipient").to_string(), amount: vec![cosmos_sdk_proto::cosmos::base::v1beta1::Coin { amount: "123".to_string(), denom: puppeteer_base @@ -1330,7 +1390,7 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { drop_helpers::interchain::prepare_any_msg( drop_proto::proto::liquidstaking::distribution::v1beta1::MsgWithdrawDelegatorReward { delegator_address: ica_address.clone(), - validator_address: "validator1".to_string(), + validator_address: api.addr_make("validator1").to_string(), }, "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", ) @@ -1338,7 +1398,7 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { drop_helpers::interchain::prepare_any_msg( drop_proto::proto::liquidstaking::distribution::v1beta1::MsgWithdrawDelegatorReward { delegator_address: ica_address.clone(), - validator_address: "validator2".to_string(), + validator_address: api.addr_make("validator2").to_string(), }, "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", ) @@ -1348,11 +1408,11 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { 100u64, IbcFee { recv_fee: vec![], - ack_fee: vec![cosmwasm_std::Coin { + ack_fee: vec![Coin { denom: "untrn".to_string(), amount: Uint128::from(100u64), }], - timeout_fee: vec![cosmwasm_std::Coin { + timeout_fee: vec![Coin { denom: "untrn".to_string(), amount: Uint128::from(200u64), }], @@ -1367,14 +1427,15 @@ fn test_execute_claim_rewards_and_optionaly_transfer() { #[test] fn test_execute_register_balance_and_delegator_delegations_query_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1387,7 +1448,7 @@ fn test_execute_register_balance_and_delegator_delegations_query_unauthorized() let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery{ validators: vec!["neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(); 2] }, @@ -1404,14 +1465,15 @@ fn test_execute_register_balance_and_delegator_delegations_query_unauthorized() #[test] fn test_execute_register_balance_and_delegator_delegations_query_too_many_validators() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1424,7 +1486,7 @@ fn test_execute_register_balance_and_delegator_delegations_query_too_many_valida let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery{ validators: vec!["neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(); u16::MAX as usize] }, @@ -1441,14 +1503,15 @@ fn test_execute_register_balance_and_delegator_delegations_query_too_many_valida #[test] fn test_execute_register_balance_and_delegator_delegations_query() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1462,7 +1525,7 @@ fn test_execute_register_balance_and_delegator_delegations_query() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery{ validators: msg_validators.clone() }, @@ -1475,9 +1538,10 @@ fn test_execute_register_balance_and_delegator_delegations_query() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 196608u64, - msg: cosmwasm_std::CosmosMsg::Custom( + payload: Binary::default(), + msg: CosmosMsg::Custom( drop_helpers::icq::new_delegations_and_balance_query_msg( puppeteer_config.connection_id, puppeteer_ica, @@ -1497,14 +1561,15 @@ fn test_execute_register_balance_and_delegator_delegations_query() { #[test] fn test_execute_register_unbonding_delegations_query_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1517,7 +1582,7 @@ fn test_execute_register_unbonding_delegations_query_unauthorized() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery{ validators: vec!["neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(); 2] }, @@ -1534,14 +1599,15 @@ fn test_execute_register_unbonding_delegations_query_unauthorized() { #[test] fn test_execute_register_unbonding_delegations_query_too_many_validators() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1554,7 +1620,7 @@ fn test_execute_register_unbonding_delegations_query_too_many_validators() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterDelegatorUnbondingDelegationsQuery { validators: vec![ "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(); @@ -1574,14 +1640,15 @@ fn test_execute_register_unbonding_delegations_query_too_many_validators() { #[test] fn test_execute_register_unbonding_delegations_query() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1595,7 +1662,7 @@ fn test_execute_register_unbonding_delegations_query() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterDelegatorUnbondingDelegationsQuery { validators: msg_validators.clone(), }, @@ -1608,10 +1675,11 @@ fn test_execute_register_unbonding_delegations_query() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessages( + Response::new().add_submessages( msg_validators.into_iter().enumerate().map(|(i, validator)| { - cosmwasm_std::SubMsg { + SubMsg { id: 327680u64 + i as u64, + payload: Binary::default(), msg: cosmwasm_std::CosmosMsg::Custom( neutron_sdk::interchain_queries::v045::new_register_delegator_unbonding_delegations_query_msg( puppeteer_config.connection_id.clone(), @@ -1632,14 +1700,15 @@ fn test_execute_register_unbonding_delegations_query() { #[test] fn test_execute_register_non_native_rewards_balances_query_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1652,7 +1721,7 @@ fn test_execute_register_non_native_rewards_balances_query_unauthorized() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[]), + message_info(&api.addr_make("not_an_owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterNonNativeRewardsBalancesQuery { denoms: vec![], }, @@ -1669,14 +1738,15 @@ fn test_execute_register_non_native_rewards_balances_query_unauthorized() { #[test] fn test_execute_register_non_native_rewards_balances_query_empty_kv_queries() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1696,7 +1766,7 @@ fn test_execute_register_non_native_rewards_balances_query_empty_kv_queries() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterNonNativeRewardsBalancesQuery { denoms: msg_denoms.clone(), }, @@ -1704,9 +1774,10 @@ fn test_execute_register_non_native_rewards_balances_query_empty_kv_queries() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 262144u64, - msg: cosmwasm_std::CosmosMsg::Custom( + payload: Binary::default(), + msg: CosmosMsg::Custom( drop_helpers::icq::new_multiple_balances_query_msg( puppeteer_config.connection_id, puppeteer_ica, @@ -1724,14 +1795,15 @@ fn test_execute_register_non_native_rewards_balances_query_empty_kv_queries() { #[test] fn test_execute_register_non_native_rewards_balances_query_not_empty_kv_queries() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1758,7 +1830,7 @@ fn test_execute_register_non_native_rewards_balances_query_not_empty_kv_queries( let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterNonNativeRewardsBalancesQuery { denoms: msg_denoms.clone(), }, @@ -1766,9 +1838,10 @@ fn test_execute_register_non_native_rewards_balances_query_not_empty_kv_queries( .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 0u64, - msg: cosmwasm_std::CosmosMsg::Custom( + payload: Binary::default(), + msg: CosmosMsg::Custom( drop_helpers::icq::update_multiple_balances_query_msg( 0u64, puppeteer_ica, @@ -1785,14 +1858,15 @@ fn test_execute_register_non_native_rewards_balances_query_not_empty_kv_queries( #[test] fn test_execute_register_non_native_rewards_balances_query_has_non_native_rewards_balances() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1828,7 +1902,7 @@ fn test_execute_register_non_native_rewards_balances_query_has_non_native_reward let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterNonNativeRewardsBalancesQuery { denoms: msg_denoms.clone(), }, @@ -1836,9 +1910,10 @@ fn test_execute_register_non_native_rewards_balances_query_has_non_native_reward .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 0u64, - msg: cosmwasm_std::CosmosMsg::Custom( + payload: Binary::default(), + msg: CosmosMsg::Custom( drop_helpers::icq::update_multiple_balances_query_msg( 0u64, puppeteer_ica, @@ -1856,14 +1931,15 @@ fn test_execute_register_non_native_rewards_balances_query_has_non_native_reward fn test_execute_register_non_native_rewards_balances_query_has_several_non_native_rewards_balances() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( @@ -1915,7 +1991,7 @@ fn test_execute_register_non_native_rewards_balances_query_has_several_non_nativ let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterNonNativeRewardsBalancesQuery { denoms: msg_denoms.clone(), }, @@ -1923,9 +1999,10 @@ fn test_execute_register_non_native_rewards_balances_query_has_several_non_nativ .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessages(vec![ - cosmwasm_std::SubMsg { + Response::new().add_submessages(vec![ + SubMsg { id: 0u64, + payload: Binary::default(), msg: cosmwasm_std::CosmosMsg::Custom( drop_helpers::icq::update_multiple_balances_query_msg( 0u64, @@ -1937,8 +2014,9 @@ fn test_execute_register_non_native_rewards_balances_query_has_several_non_nativ gas_limit: None, reply_on: cosmwasm_std::ReplyOn::Never }, - cosmwasm_std::SubMsg { + SubMsg { id: 0u64, + payload: Binary::default(), msg: cosmwasm_std::CosmosMsg::Custom( drop_helpers::icq::update_multiple_balances_query_msg( 2u64, @@ -1957,20 +2035,21 @@ fn test_execute_register_non_native_rewards_balances_query_has_several_non_nativ #[test] fn test_execute_transfer_sender_is_not_allowed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - base_init(&mut deps.as_mut(), "0.47.10".to_string()); + base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_allowed_sender", &[]), + message_info(&api.addr_make("not_allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Transfer { items: vec![], - reply_to: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), + reply_to: api.addr_make("some").to_string(), }, ) .unwrap_err(); @@ -1985,7 +2064,8 @@ fn test_execute_transfer_sender_is_not_allowed() { #[test] fn test_execute_transfer_not_idle() { let mut deps = mock_dependencies(&[]); - let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let pupeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); pupeteer_base .tx_state .save( @@ -1993,11 +2073,13 @@ fn test_execute_transfer_not_idle() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::InProgress, - reply_to: Some("".to_string()), + reply_to: Some(api.addr_make("").to_string()), transaction: Some( drop_puppeteer_base::peripheral_hook::Transaction::SetupProtocol { - interchain_account_id: "ica_address".to_string(), - rewards_withdraw_address: "rewards_withdraw_address".to_string(), + interchain_account_id: api.addr_make("ica_address").to_string(), + rewards_withdraw_address: api + .addr_make("rewards_withdraw_address") + .to_string(), }, ), }, @@ -2006,19 +2088,17 @@ fn test_execute_transfer_not_idle() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("allowed_sender", &[]), + message_info(&api.addr_make("allowed_sender"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::Transfer { items: vec![], - reply_to: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), + reply_to: api.addr_make("owner").to_string(), }, ) .unwrap_err(); assert_eq!( res, drop_puppeteer_base::error::ContractError::NeutronError(NeutronError::Std( - cosmwasm_std::StdError::generic_err( - "Transaction txState is not equal to expected: Idle".to_string() - ) + StdError::generic_err("Transaction txState is not equal to expected: Idle".to_string()) )) ); } @@ -2026,18 +2106,19 @@ fn test_execute_transfer_not_idle() { #[test] fn test_execute_transfer() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_custom_query_response(|_| { to_json_binary(&MinIbcFeeResponse { min_fee: get_standard_fees(), }) .unwrap() }); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .ica .set_address( deps.as_mut().storage, - "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), + api.addr_make("some").to_string(), "transfer".to_string(), "channel-0".to_string(), ) @@ -2049,9 +2130,9 @@ fn test_execute_transfer() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info( - "allowed_sender", - &[cosmwasm_std::Coin { + message_info( + &api.addr_make("allowed_sender"), + &[Coin { denom: "uatom".to_string(), amount: Uint128::from(123u64), }], @@ -2059,37 +2140,37 @@ fn test_execute_transfer() { drop_staking_base::msg::puppeteer::ExecuteMsg::Transfer { items: vec![ ( - "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), - cosmwasm_std::Coin { + api.addr_make("owner").to_string(), + Coin { denom: "uatom".to_string(), amount: Uint128::from(123u64), }, ), ( - "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), - cosmwasm_std::Coin { + api.addr_make("owner").to_string(), + Coin { denom: "uatom".to_string(), amount: Uint128::from(321u64), }, ), ], - reply_to: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6".to_string(), + reply_to: api.addr_make("owner").to_string(), }, ) .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_submessage(cosmwasm_std::SubMsg { + Response::new().add_submessage(SubMsg { id: 65536u64, - msg: cosmwasm_std::CosmosMsg::Custom(NeutronMsg::submit_tx( + payload: Binary::default(), + msg: CosmosMsg::Custom(NeutronMsg::submit_tx( "connection_id".to_string(), "DROP".to_string(), vec![ drop_helpers::interchain::prepare_any_msg( cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend { from_address: puppeteer_ica.clone(), - to_address: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6" - .to_string(), + to_address: api.addr_make("owner").to_string(), amount: vec![cosmos_sdk_proto::cosmos::base::v1beta1::Coin { amount: "123".to_string(), denom: "uatom".to_string() @@ -2101,8 +2182,7 @@ fn test_execute_transfer() { drop_helpers::interchain::prepare_any_msg( cosmos_sdk_proto::cosmos::bank::v1beta1::MsgSend { from_address: puppeteer_ica.clone(), - to_address: "neutron1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqhufaa6" - .to_string(), + to_address: api.addr_make("owner").to_string(), amount: vec![cosmos_sdk_proto::cosmos::base::v1beta1::Coin { amount: "321".to_string(), denom: "uatom".to_string() @@ -2136,7 +2216,8 @@ fn test_execute_transfer() { fn test_sudo_response_tx_state_wrong() { // Test that the contract returns an error if the tx state is not in progress let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let msg = SudoMsg::Response { request: neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), @@ -2175,13 +2256,14 @@ fn test_sudo_response_tx_state_wrong() { #[test] fn test_sudo_delegations_and_balance_kv_query_result() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let query_id = 1u64; deps.querier .add_query_response(query_id, build_interchain_query_response()); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let msg = SudoMsg::KVQueryResult { query_id }; let env = mock_env(); @@ -2249,13 +2331,14 @@ fn test_sudo_delegations_and_balance_kv_query_result() { // #[allow(dead_code)] fn test_sudo_delegations_and_balance_kv_query_result_for_celestia() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let query_id = 1u64; deps.querier .add_query_response(query_id, build_interchain_query_response_celestia()); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.46.16".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.46.16".to_string(), api); let msg = SudoMsg::KVQueryResult { query_id }; let env = mock_env(); @@ -2322,47 +2405,60 @@ fn test_sudo_delegations_and_balance_kv_query_result_for_celestia() { #[test] fn test_sudo_response_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_stargate_query_response( "/ibc.core.channel.v1.Query/ChannelClientState", |_data| { - cosmwasm_std::ContractResult::Ok( - to_json_binary(&ChannelClientStateResponse { + cosmwasm_std::ContractResult::Ok(Binary::from( + ChannelClientStateResponse { identified_client_state: Some(IdentifiedClientState { client_id: "07-tendermint-0".to_string(), - client_state: ClientState { - chain_id: "test-1".to_string(), - type_url: "type_url".to_string(), - trust_level: Fraction { - numerator: Uint64::from(1u64), - denominator: Uint64::from(3u64), - }, - trusting_period: Some("1000".to_string()), - unbonding_period: Some("1500".to_string()), - max_clock_drift: Some("1000".to_string()), - frozen_height: None, - latest_height: Some(Height { - revision_number: Uint64::from(0u64), - revision_height: Uint64::from(54321u64), - }), - proof_specs: vec![], - upgrade_path: vec![], - allow_update_after_expiry: true, - allow_update_after_misbehaviour: true, - }, + client_state: Some(prost_types::Any { + type_url: "/ibc.lightclients.tendermint.v1.ClientState".to_string(), + value: ClientState { + chain_id: "test-1".to_string(), + trust_level: Some(Fraction { + numerator: 1u64, + denominator: 3u64, + }), + trusting_period: Some(Duration { + seconds: 1000, + nanos: 0, + }), + unbonding_period: Some(Duration { + seconds: 1500, + nanos: 0, + }), + max_clock_drift: Some(Duration { + seconds: 1000, + nanos: 0, + }), + frozen_height: None, + latest_height: Some(Height { + revision_number: 0u64, + revision_height: 54321u64, + }), + proof_specs: vec![], + upgrade_path: vec![], + allow_update_after_expiry: true, + allow_update_after_misbehaviour: true, + } + .encode_to_vec(), + }), }), proof: None, - proof_height: Height { - revision_number: Uint64::from(0u64), - revision_height: Uint64::from(33333u64), - }, - }) - .unwrap(), - ) + proof_height: Some(Height { + revision_number: 0u64, + revision_height: 33333u64, + }), + } + .encode_to_vec(), + )) }, ); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -2375,9 +2471,9 @@ fn test_sudo_response_ok() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, - recipient: "recipient".to_string(), + amount: 1000u128.into(), + real_amount: 1000u128.into(), + recipient: api.addr_make("recipient").to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; let msg = SudoMsg::Response { @@ -2392,7 +2488,7 @@ fn test_sudo_response_ok() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::WaitingForAck, - reply_to: Some("reply_to_contract".to_string()), + reply_to: Some(api.addr_make("reply_to_contract").to_string()), transaction: Some(transaction.clone()), }, ) @@ -2402,7 +2498,7 @@ fn test_sudo_response_ok() { res, Response::new() .add_message(CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "reply_to_contract".to_string(), + contract_addr: api.addr_make("reply_to_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::PeripheralHook( Box::new( drop_puppeteer_base::peripheral_hook::ResponseHookMsg::Success( @@ -2426,7 +2522,7 @@ fn test_sudo_response_ok() { assert_eq!( ica, drop_helpers::ica::IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port".to_string(), channel_id: "channel".to_string(), } @@ -2446,7 +2542,8 @@ fn test_sudo_response_ok() { #[test] fn test_sudo_response_error() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -2459,9 +2556,9 @@ fn test_sudo_response_error() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, - recipient: "recipient".to_string(), + amount: 1000u128.into(), + real_amount: 1000u128.into(), + recipient: api.addr_make("recipient").to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; let msg = SudoMsg::Error { @@ -2476,7 +2573,7 @@ fn test_sudo_response_error() { &drop_puppeteer_base::state::TxState { seq_id: None, status: drop_puppeteer_base::state::TxStateStatus::WaitingForAck, - reply_to: Some("reply_to_contract".to_string()), + reply_to: Some(api.addr_make("reply_to_contract").to_string()), transaction: Some(transaction.clone()), }, ) @@ -2486,7 +2583,7 @@ fn test_sudo_response_error() { res, Response::new() .add_message(CosmosMsg::Wasm(cosmwasm_std::WasmMsg::Execute { - contract_addr: "reply_to_contract".to_string(), + contract_addr: api.addr_make("reply_to_contract").to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::PeripheralHook( Box::new( drop_puppeteer_base::peripheral_hook::ResponseHookMsg::Error( @@ -2510,7 +2607,7 @@ fn test_sudo_response_error() { assert_eq!( ica, drop_helpers::ica::IcaState::Registered { - ica_address: "ica_address".to_string(), + ica_address: api.addr_make("ica_address").to_string(), port_id: "port".to_string(), channel_id: "channel".to_string(), } @@ -2530,7 +2627,8 @@ fn test_sudo_response_error() { #[test] fn test_sudo_open_ack() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let msg = SudoMsg::OpenAck { port_id: "port_id_1".to_string(), channel_id: "channel_1".to_string(), @@ -2554,7 +2652,8 @@ fn test_sudo_open_ack() { #[test] fn test_sudo_response_timeout() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let request = neutron_sdk::sudo::msg::RequestPacket { sequence: Some(1u64), source_port: Some("source_port".to_string()), @@ -2567,8 +2666,8 @@ fn test_sudo_response_timeout() { }; let transaction = drop_puppeteer_base::peripheral_hook::Transaction::IBCTransfer { denom: "remote_denom".to_string(), - amount: 1000u128, - real_amount: 1000u128, + amount: 1000u128.into(), + real_amount: 1000u128.into(), recipient: "recipient".to_string(), reason: drop_puppeteer_base::peripheral_hook::IBCTransferReason::Delegate, }; @@ -2634,14 +2733,18 @@ fn test_reply_sudo_payload_no_result() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::SUDO_PAYLOAD, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) .unwrap_err(); - assert_eq!(res, StdError::generic_err("no result")); + assert_eq!(res, StdError::generic_err("no msg_responses found")); } #[test] @@ -2653,31 +2756,41 @@ fn test_reply_sudo_payload_tx_state_error() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::SUDO_PAYLOAD, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some(Binary::from( - "{\"sequence_id\":0,\"channel\":\"channel-0\"}".as_bytes(), - )), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse { + sequence_id: 0, + channel: "channel-0".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) .unwrap_err(); assert_eq!( res, - StdError::NotFound { - kind: format!( - "type: drop_puppeteer_base::state::TxState; key: {:X?}", - "sudo_payload".as_bytes() - ) - } + StdError::not_found(format!( + "type: drop_puppeteer_base::state::TxState; key: {:X?}", + "sudo_payload".as_bytes() + )) ) } #[test] fn test_reply_sudo_payload() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .tx_state .save( @@ -2695,11 +2808,22 @@ fn test_reply_sudo_payload() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::SUDO_PAYLOAD, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some(Binary::from( - "{\"sequence_id\":0,\"channel\":\"channel-0\"}".as_bytes(), - )), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse { + sequence_id: 0, + channel: "channel-0".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) @@ -2735,14 +2859,18 @@ fn test_reply_ibc_transfer_no_result() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::SUDO_PAYLOAD, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) .unwrap_err(); - assert_eq!(res, StdError::generic_err("no result")) + assert_eq!(res, StdError::generic_err("no msg_responses found")) } #[test] @@ -2754,35 +2882,41 @@ fn test_reply_ibc_transfer_tx_state_error() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::SUDO_PAYLOAD, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary(&neutron_sdk::bindings::msg::MsgIbcTransferResponse { - sequence_id: 0, - channel: "channel-0".to_string(), - }) - .unwrap(), - ), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse { + sequence_id: 0, + channel: "channel-0".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) .unwrap_err(); assert_eq!( res, - StdError::NotFound { - kind: format!( - "type: drop_puppeteer_base::state::TxState; key: {:X?}", - "sudo_payload".as_bytes() - ) - } + StdError::not_found(format!( + "type: drop_puppeteer_base::state::TxState; key: {:X?}", + "sudo_payload".as_bytes() + )) ) } #[test] fn test_reply_ibc_transfer() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .tx_state .save( @@ -2800,15 +2934,22 @@ fn test_reply_ibc_transfer() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::IBC_TRANSFER, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary(&neutron_sdk::bindings::msg::MsgIbcTransferResponse { - sequence_id: 0, - channel: "channel-0".to_string(), - }) - .unwrap(), - ), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse { + sequence_id: 0, + channel: "channel-0".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) @@ -2849,14 +2990,21 @@ fn test_reply_kv_delegations_and_balance_no_result() { mock_env(), cosmwasm_std::Reply { id: i, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) .unwrap_err(); - assert_eq!(res, StdError::generic_err("no result")) + assert_eq!( + res, + StdError::generic_err("no msg_response found in result") + ) } } } @@ -2868,23 +3016,30 @@ fn test_reply_kv_delegations_and_balance() { ..(drop_puppeteer_base::state::reply_msg::KV_DELEGATIONS_AND_BALANCE_UPPER_BOUND + 1) { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::reply( deps.as_mut().into_empty(), mock_env(), cosmwasm_std::Reply { id: i, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary( - &neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse { + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgRegisterInterchainQueryResponse" + .to_string(), + value: Binary::from( + neutron_std::types::neutron::interchainqueries::MsgRegisterInterchainQueryResponse { id: response_id, - }, - ) - .unwrap(), - ), + } + .encode_to_vec(), + ), + }], }), }, ) @@ -2915,36 +3070,50 @@ fn test_reply_kv_non_native_rewards_balances_no_result() { mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::KV_NON_NATIVE_REWARDS_BALANCES, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) .unwrap_err(); - assert_eq!(res, StdError::generic_err("no result")) + assert_eq!( + res, + StdError::generic_err("no msg_response found in result") + ) } #[test] fn test_reply_kv_non_native_rewards_balances() { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let res = crate::contract::reply( deps.as_mut().into_empty(), mock_env(), cosmwasm_std::Reply { id: drop_puppeteer_base::state::reply_msg::KV_NON_NATIVE_REWARDS_BALANCES, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary( - &neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse { + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgRegisterInterchainQueryResponse" + .to_string(), + value: Binary::from( + neutron_std::types::neutron::interchainqueries::MsgRegisterInterchainQueryResponse { id: 0u64, - }, - ) - .unwrap(), - ), + } + .encode_to_vec(), + ), + }], }), }, ) @@ -2979,16 +3148,23 @@ fn test_reply_kv_unbonding_delegations_tx_state_error() { mock_env(), cosmwasm_std::Reply { id: i, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary( + data: None, + msg_responses: vec![MsgResponse { + type_url: + "/neutron.interchainquery.v1.MsgRegisterInterchainQueryResponse" + .to_string(), + value: to_json_binary( &neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse { id: response_id, }, ) .unwrap(), - ), + }], }), }, ) @@ -3003,8 +3179,9 @@ fn test_reply_kv_unbonding_delegations_no_result() { ..(drop_puppeteer_base::state::reply_msg::KV_UNBONDING_DELEGATIONS_UPPER_BOUND + 1) { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .unbonding_delegations_reply_id_storage .save( @@ -3023,14 +3200,21 @@ fn test_reply_kv_unbonding_delegations_no_result() { mock_env(), cosmwasm_std::Reply { id: i, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) .unwrap_err(); - assert_eq!(res, StdError::generic_err("no result")) + assert_eq!( + res, + StdError::generic_err("no msg_response found in result") + ) } } @@ -3041,8 +3225,9 @@ fn test_reply_kv_unbonding_delegations() { ..(drop_puppeteer_base::state::reply_msg::KV_UNBONDING_DELEGATIONS_UPPER_BOUND + 1) { let mut deps = mock_dependencies(&[]); + let api = deps.api; - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .unbonding_delegations_reply_id_storage .save( @@ -3061,16 +3246,22 @@ fn test_reply_kv_unbonding_delegations() { mock_env(), cosmwasm_std::Reply { id: i, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: cosmwasm_std::SubMsgResult::Ok(cosmwasm_std::SubMsgResponse { events: vec![], - data: Some( - to_json_binary( - &neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse { + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgRegisterInterchainQueryResponse" + .to_string(), + value: Binary::from( + neutron_std::types::neutron::interchainqueries::MsgRegisterInterchainQueryResponse { id: response_id, - }, - ) - .unwrap(), - ), + } + .encode_to_vec(), + ), + }], }), }, ) @@ -3105,7 +3296,10 @@ fn test_reply_kv_unbonding_delegations() { } mod register_delegations_and_balance_query { - use cosmwasm_std::{testing::MockApi, MemoryStorage, OwnedDeps, StdResult}; + use cosmwasm_std::{ + testing::{message_info, MockApi}, + MemoryStorage, OwnedDeps, StdResult, + }; use drop_helpers::testing::WasmMockQuerier; use drop_puppeteer_base::error::ContractError; @@ -3118,12 +3312,13 @@ mod register_delegations_and_balance_query { PuppeteerBaseType, ) { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked(owner.unwrap_or("owner")).as_ref()), + Some(api.addr_make(owner.unwrap_or("owner")).as_str()), ) .unwrap(); (deps, puppeteer_base) @@ -3132,9 +3327,15 @@ mod register_delegations_and_balance_query { #[test] fn non_owner() { let (mut deps, _puppeteer_base) = setup(None); + let api = deps.api; let env = mock_env(); let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery { validators: vec![] } ; - let res = crate::contract::execute(deps.as_mut(), env, mock_info("not_owner", &[]), msg); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("not_owner"), &[]), + msg, + ); assert!(res.is_err()); assert_eq!( res.unwrap_err(), @@ -3145,6 +3346,7 @@ mod register_delegations_and_balance_query { #[test] fn too_many_validators() { let (mut deps, _puppeteer_base) = setup(None); + let api = deps.api; let env = mock_env(); let mut validators = vec![]; for i in 0..=65536u32 { @@ -3154,7 +3356,12 @@ mod register_delegations_and_balance_query { let msg = drop_staking_base::msg::puppeteer::ExecuteMsg::RegisterBalanceAndDelegatorDelegationsQuery { validators }; - let res = crate::contract::execute(deps.as_mut(), env, mock_info("owner", &[]), msg); + let res = crate::contract::execute( + deps.as_mut(), + env, + message_info(&api.addr_make("owner"), &[]), + msg, + ); assert!(res.is_err()); assert_eq!( res.unwrap_err(), @@ -3164,8 +3371,8 @@ mod register_delegations_and_balance_query { #[test] fn happy_path_validators_count_less_than_chunk_size() { - let (mut deps, puppeteer_base) = - setup(Some("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2")); + let (mut deps, puppeteer_base) = setup(Some("owner")); + let api = deps.api; let env = mock_env(); let validators = vec![ "cosmos1jy7lsk5pk38zjfnn6nt6qlaphy9uejn4hu65xa".to_string(), @@ -3187,7 +3394,7 @@ mod register_delegations_and_balance_query { let res = crate::contract::execute( deps.as_mut(), env, - mock_info("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", &[]), + message_info(&api.addr_make("owner"), &[]), msg, ) .unwrap(); @@ -3213,8 +3420,8 @@ mod register_delegations_and_balance_query { #[test] fn happy_path_validators_count_more_than_chunk_size() { - let (mut deps, puppeteer_base) = - setup(Some("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2")); + let (mut deps, puppeteer_base) = setup(Some("owner")); + let api = deps.api; let env = mock_env(); let validators = vec![ "cosmos1jy7lsk5pk38zjfnn6nt6qlaphy9uejn4hu65xa".to_string(), @@ -3244,7 +3451,7 @@ mod register_delegations_and_balance_query { let res = crate::contract::execute( deps.as_mut(), env, - mock_info("neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2", &[]), + message_info(&api.addr_make("owner"), &[]), msg, ) .unwrap(); @@ -3302,31 +3509,45 @@ mod register_delegations_and_balance_query { } } -fn get_base_config(sdk_version: String) -> Config { +fn get_base_config(sdk_version: String, api: MockApi) -> Config { Config { delegations_queries_chunk_size: 2u32, port_id: "port_id".to_string(), connection_id: "connection_id".to_string(), - factory_contract: Addr::unchecked("factory_contract"), + factory_contract: api.addr_make("factory_contract"), update_period: 60u64, remote_denom: "remote_denom".to_string(), - allowed_senders: vec![Addr::unchecked("allowed_sender")], + allowed_senders: vec![api.addr_make("allowed_sender")], transfer_channel_id: "transfer_channel_id".to_string(), sdk_version, //: "0.47.10".to_string(), timeout: 100u64, } } -fn base_init(deps_mut: &mut DepsMut, sdk_version: String) -> PuppeteerBaseType { +fn base_init( + deps_mut: &mut DepsMut, + sdk_version: String, + api: MockApi, +) -> PuppeteerBaseType { let puppeteer_base = Puppeteer::default(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); puppeteer_base .config - .save(deps_mut.storage, &get_base_config(sdk_version)) + .save(deps_mut.storage, &get_base_config(sdk_version, api)) .unwrap(); puppeteer_base .ica - .set_address(deps_mut.storage, "ica_address", "port", "channel") + .set_address( + deps_mut.storage, + api.addr_make("ica_address"), + "port", + "channel", + ) .unwrap(); puppeteer_base } @@ -3342,15 +3563,21 @@ fn get_standard_fees() -> IbcFee { #[test] fn test_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::UpdateOwnership( cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }, ), @@ -3359,7 +3586,7 @@ fn test_transfer_ownership() { crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), drop_staking_base::msg::puppeteer::ExecuteMsg::UpdateOwnership( cw_ownable::Action::AcceptOwnership {}, ), @@ -3377,7 +3604,7 @@ fn test_transfer_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } @@ -3387,7 +3614,8 @@ fn test_transfer_ownership() { #[test] fn test_query_kv_query_ids() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .kv_queries .save( @@ -3441,25 +3669,26 @@ fn test_query_extension_delegations_none() { #[test] fn test_query_extension_delegations_some() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .last_complete_delegations_and_balances_key .save(deps.as_mut().storage, &0u64) .unwrap(); let delegations = vec![ DropDelegation { - delegator: Addr::unchecked("delegator1"), + delegator: api.addr_make("delegator1"), validator: "validator1".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom1"), + amount: cosmwasm_std::Coin::new(100u128, "denom1"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), ), }, DropDelegation { - delegator: Addr::unchecked("delegator2"), + delegator: api.addr_make("delegator2"), validator: "validator2".to_string(), - amount: cosmwasm_std::Coin::new(100, "denom2"), + amount: cosmwasm_std::Coin::new(100u128, "denom2"), share_ratio: Decimal256::from_ratio( cosmwasm_std::Uint256::from(0u64), cosmwasm_std::Uint256::from(1u64), @@ -3535,7 +3764,8 @@ fn test_query_extension_balances_none() { #[test] fn test_query_extension_balances_some() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); puppeteer_base .last_complete_delegations_and_balances_key .save(deps.as_mut().storage, &0u64) @@ -3633,7 +3863,8 @@ fn test_query_non_native_rewards_balances() { #[test] fn test_unbonding_delegations() { let mut deps = mock_dependencies(&[]); - let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string()); + let api = deps.api; + let puppeteer_base = base_init(&mut deps.as_mut(), "0.47.10".to_string(), api); let unbonding_delegations = vec![ drop_puppeteer_base::state::UnbondingDelegation { validator_address: "validator_address1".to_string(), diff --git a/contracts/redemption-rate-adapter/Cargo.toml b/contracts/redemption-rate-adapter/Cargo.toml index fac41baf..cc139474 100644 --- a/contracts/redemption-rate-adapter/Cargo.toml +++ b/contracts/redemption-rate-adapter/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/rewards-manager/Cargo.toml b/contracts/rewards-manager/Cargo.toml index 784c4022..0413def0 100644 --- a/contracts/rewards-manager/Cargo.toml +++ b/contracts/rewards-manager/Cargo.toml @@ -19,8 +19,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/rewards-manager/src/tests.rs b/contracts/rewards-manager/src/tests.rs index 2d740e2e..0ba0294c 100644 --- a/contracts/rewards-manager/src/tests.rs +++ b/contracts/rewards-manager/src/tests.rs @@ -1,6 +1,6 @@ use crate::contract::{instantiate, CONTRACT_NAME}; -use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info}; +use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env}; use cosmwasm_std::{ attr, coins, to_json_binary, Addr, Attribute, Coin, Empty, Event, Response, StdError, Uint128, }; @@ -21,10 +21,11 @@ fn instantiate_contract( contract: fn() -> Box>, label: String, ) -> Addr { + let deps = mock_dependencies(); let contract_id = app.store_code(contract()); app.instantiate_contract( contract_id, - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), &Empty {}, &[], label, @@ -89,12 +90,12 @@ fn instantiate_rewards_manager_contract(app: &mut App, id: u64, msg: Instantiate .unwrap() } -fn mock_app() -> App { +fn mock_app(sender_addr: Addr) -> App { custom_app(|r, _a, s| { r.bank .init_balance( s, - &Addr::unchecked(SENDER_ADDR), + &sender_addr, vec![ Coin { denom: "untrn".to_string(), @@ -114,10 +115,10 @@ fn mock_app() -> App { fn test_initialization() { let mut deps = mock_dependencies(); let msg = InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }; - let info = mock_info(OWNER_ADDR, &[]); + let info = message_info(&deps.api.addr_make(OWNER_ADDR), &[]); let res = instantiate(deps.as_mut(), mock_env(), info.clone(), msg.clone()).unwrap(); assert_eq!( @@ -126,7 +127,7 @@ fn test_initialization() { Event::new("crates.io:drop-staking__drop-rewards-manager-instantiate".to_string()) .add_attributes(vec![Attribute::new( "owner".to_string(), - OWNER_ADDR.to_string() + deps.api.addr_make(OWNER_ADDR).to_string() ),]) ] ); @@ -134,7 +135,10 @@ fn test_initialization() { #[test] fn test_handlers_query() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let rewards_manager_code_id = app.store_code(rewards_manager_contract()); @@ -142,7 +146,7 @@ fn test_handlers_query() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); @@ -156,7 +160,10 @@ fn test_handlers_query() { #[test] fn test_pause_query() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let rewards_manager_code_id = app.store_code(rewards_manager_contract()); @@ -164,7 +171,7 @@ fn test_pause_query() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); @@ -178,7 +185,10 @@ fn test_pause_query() { #[test] fn test_pause_handler_not_owner_error() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let rewards_manager_code_id = app.store_code(rewards_manager_contract()); @@ -186,13 +196,13 @@ fn test_pause_handler_not_owner_error() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); let error = app .execute_contract( - Addr::unchecked("WrongOwner"), + deps.api.addr_make("WrongOwner"), rewards_manager_contract.clone(), &ExecuteMsg::SetPause { pause: Pause { @@ -213,7 +223,10 @@ fn test_pause_handler_not_owner_error() { #[test] fn test_pause_handler() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let rewards_manager_code_id = app.store_code(rewards_manager_contract()); @@ -221,13 +234,13 @@ fn test_pause_handler() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); let res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::SetPause { pause: Pause { @@ -259,7 +272,7 @@ fn test_pause_handler() { let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::SetPause { pause: Pause { @@ -285,7 +298,10 @@ fn test_pause_handler() { #[test] fn test_paused_error() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let rewards_manager_code_id = app.store_code(rewards_manager_contract()); @@ -293,13 +309,13 @@ fn test_paused_error() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::SetPause { pause: Pause { @@ -330,7 +346,7 @@ fn test_paused_error() { let unwrapped_err = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::ExchangeRewards { denoms: vec!["ueth".to_string()], @@ -345,7 +361,10 @@ fn test_paused_error() { #[test] fn test_add_remove_handler() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); + + let mut app = mock_app(sender_address); let handler_contract = instantiate_handler_contract(&mut app); @@ -355,7 +374,7 @@ fn test_add_remove_handler() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); @@ -367,7 +386,7 @@ fn test_add_remove_handler() { let res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: handler_config.clone(), @@ -412,7 +431,7 @@ fn test_add_remove_handler() { ); let res = app.execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: handler_config.clone(), @@ -427,7 +446,7 @@ fn test_add_remove_handler() { let res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::RemoveHandler { denom: handler_config.denom.clone(), @@ -463,9 +482,10 @@ fn test_add_remove_handler() { #[test] fn test_handler_call() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); - let sender_address = Addr::unchecked(SENDER_ADDR); + let mut app = mock_app(sender_address.clone()); let handler_contract = instantiate_handler_contract(&mut app); @@ -475,13 +495,17 @@ fn test_handler_call() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); let amount = coins(100, "ueth"); let _ = app - .send_tokens(sender_address, rewards_manager_contract.clone(), &amount) + .send_tokens( + sender_address.clone(), + rewards_manager_contract.clone(), + &amount, + ) .unwrap(); let handler_config = HandlerConfig { @@ -492,7 +516,7 @@ fn test_handler_call() { let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: handler_config.clone(), @@ -503,7 +527,7 @@ fn test_handler_call() { let res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::ExchangeRewards { denoms: vec!["ueth".to_string()], @@ -529,9 +553,10 @@ fn test_handler_call() { #[test] fn test_empty_denoms_list() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); - let sender_address = Addr::unchecked(SENDER_ADDR); + let mut app = mock_app(sender_address.clone()); let handler_contract = instantiate_handler_contract(&mut app); @@ -541,13 +566,17 @@ fn test_empty_denoms_list() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); let amount = coins(100, "ueth"); let _ = app - .send_tokens(sender_address, rewards_manager_contract.clone(), &amount) + .send_tokens( + sender_address.clone(), + rewards_manager_contract.clone(), + &amount, + ) .unwrap(); let handler_config = HandlerConfig { @@ -558,7 +587,7 @@ fn test_empty_denoms_list() { let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: handler_config.clone(), @@ -572,7 +601,7 @@ fn test_empty_denoms_list() { .unwrap(); println!("{:?}", pause_info); let res = app.execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::ExchangeRewards { denoms: vec![] }, &[], @@ -588,9 +617,10 @@ fn test_empty_denoms_list() { #[test] fn test_two_handlers_call() { - let mut app = mock_app(); + let deps = mock_dependencies(); + let sender_address = deps.api.addr_make(SENDER_ADDR); - let sender_address = Addr::unchecked(SENDER_ADDR); + let mut app = mock_app(sender_address.clone()); let ueth_handler_contract = instantiate_handler_contract(&mut app); let untrn_handler_contract = instantiate_handler_contract(&mut app); @@ -601,7 +631,7 @@ fn test_two_handlers_call() { &mut app, rewards_manager_code_id, InstantiateMsg { - owner: OWNER_ADDR.to_string(), + owner: deps.api.addr_make(OWNER_ADDR).to_string(), }, ); @@ -616,7 +646,11 @@ fn test_two_handlers_call() { let amount = coins(55, "untrn"); let _ = app - .send_tokens(sender_address, rewards_manager_contract.clone(), &amount) + .send_tokens( + sender_address.clone(), + rewards_manager_contract.clone(), + &amount, + ) .unwrap(); let ueth_handler_config = HandlerConfig { @@ -633,7 +667,7 @@ fn test_two_handlers_call() { let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: ueth_handler_config.clone(), @@ -644,7 +678,7 @@ fn test_two_handlers_call() { let _res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::AddHandler { config: untrn_handler_config.clone(), @@ -655,7 +689,7 @@ fn test_two_handlers_call() { let res = app .execute_contract( - Addr::unchecked(OWNER_ADDR), + deps.api.addr_make(OWNER_ADDR), rewards_manager_contract.clone(), &ExecuteMsg::ExchangeRewards { denoms: vec!["ueth".to_string(), "untrn".to_string()], diff --git a/contracts/splitter/src/tests.rs b/contracts/splitter/src/tests.rs index dd061847..5907447c 100644 --- a/contracts/splitter/src/tests.rs +++ b/contracts/splitter/src/tests.rs @@ -1,14 +1,17 @@ -use cosmwasm_std::{ - attr, from_json, testing::mock_env, Addr, BankMsg, Coin, CosmosMsg, Event, Uint128, -}; +use cosmwasm_std::{attr, from_json, testing::mock_env, BankMsg, Coin, CosmosMsg, Event, Uint128}; use drop_helpers::testing::mock_dependencies; use drop_staking_base::state::splitter::Config; #[test] fn change_splitter_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let instantiate_config: Config = Config { - receivers: vec![("receiver1".to_string(), Uint128::from(1000000000u64))], + receivers: vec![( + api.addr_make("receiver1").to_string(), + Uint128::from(1000000000u64), + )], denom: "drop".to_string(), }; { @@ -16,7 +19,7 @@ fn change_splitter_config() { deps.as_mut().into_empty(), mock_env(), cosmwasm_std::MessageInfo { - sender: Addr::unchecked("arbitrary_owner"), + sender: api.addr_make("arbitrary_owner"), funds: vec![], }, drop_staking_base::msg::splitter::InstantiateMsg { @@ -32,7 +35,10 @@ fn change_splitter_config() { .unwrap(), ) .unwrap(); - assert_eq!(response.owner.unwrap(), "arbitrary_owner"); + assert_eq!( + response.owner.unwrap(), + api.addr_make("arbitrary_owner").as_str() + ); } { let response: Config = from_json( @@ -49,10 +55,10 @@ fn change_splitter_config() { { let new_config: Config = Config { receivers: vec![ - ("receiver1".to_string(), Uint128::from(1u64)), - ("receiver2".to_string(), Uint128::from(2u64)), - ("receiver3".to_string(), Uint128::from(3u64)), - ("receiver4".to_string(), Uint128::from(4u64)), + (api.addr_make("receiver1").to_string(), Uint128::from(1u64)), + (api.addr_make("receiver2").to_string(), Uint128::from(2u64)), + (api.addr_make("receiver3").to_string(), Uint128::from(3u64)), + (api.addr_make("receiver4").to_string(), Uint128::from(4u64)), ], denom: "drop".to_string(), }; @@ -60,7 +66,7 @@ fn change_splitter_config() { deps.as_mut().into_empty(), mock_env(), cosmwasm_std::MessageInfo { - sender: Addr::unchecked("arbitrary_owner"), + sender: api.addr_make("arbitrary_owner"), funds: vec![], }, drop_staking_base::msg::splitter::ExecuteMsg::UpdateConfig { @@ -83,12 +89,14 @@ fn change_splitter_config() { #[test] fn splitter_distribute() { let mut deps = mock_dependencies(&[Coin::new(10u128, "drop")]); + let api = deps.api; + let instantiate_config: Config = Config { receivers: vec![ - ("receiver1".to_string(), Uint128::from(1u64)), - ("receiver2".to_string(), Uint128::from(2u64)), - ("receiver3".to_string(), Uint128::from(3u64)), - ("receiver4".to_string(), Uint128::from(4u64)), + (api.addr_make("receiver1").to_string(), Uint128::from(1u64)), + (api.addr_make("receiver2").to_string(), Uint128::from(2u64)), + (api.addr_make("receiver3").to_string(), Uint128::from(3u64)), + (api.addr_make("receiver4").to_string(), Uint128::from(4u64)), ], denom: "drop".to_string(), }; @@ -97,7 +105,7 @@ fn splitter_distribute() { deps.as_mut().into_empty(), mock_env(), cosmwasm_std::MessageInfo { - sender: Addr::unchecked("arbitrary_owner"), + sender: api.addr_make("arbitrary_owner"), funds: vec![], }, drop_staking_base::msg::splitter::InstantiateMsg { @@ -110,7 +118,7 @@ fn splitter_distribute() { deps.as_mut().into_empty(), mock_env(), cosmwasm_std::MessageInfo { - sender: Addr::unchecked("arbitrary_owner"), + sender: api.addr_make("arbitrary_owner"), funds: vec![], }, drop_staking_base::msg::splitter::ExecuteMsg::Distribute {}, @@ -123,27 +131,27 @@ fn splitter_distribute() { Event::new("crates.io:drop-staking__drop-splitter-execute-distribute") .add_attributes(vec![ attr("total_shares", "10"), - attr("receiver1", "1"), - attr("receiver2", "2"), - attr("receiver3", "3"), - attr("receiver4", "4"), + attr(api.addr_make("receiver1"), "1"), + attr(api.addr_make("receiver2"), "2"), + attr(api.addr_make("receiver3"), "3"), + attr(api.addr_make("receiver4"), "4"), ]) ) .add_submessages(vec![ cosmwasm_std::SubMsg::new(CosmosMsg::Bank(BankMsg::Send { - to_address: "receiver1".to_string(), + to_address: api.addr_make("receiver1").to_string(), amount: vec![Coin::new(1u128, "drop")] })), cosmwasm_std::SubMsg::new(CosmosMsg::Bank(BankMsg::Send { - to_address: "receiver2".to_string(), + to_address: api.addr_make("receiver2").to_string(), amount: vec![Coin::new(2u128, "drop")] })), cosmwasm_std::SubMsg::new(CosmosMsg::Bank(BankMsg::Send { - to_address: "receiver3".to_string(), + to_address: api.addr_make("receiver3").to_string(), amount: vec![Coin::new(3u128, "drop")] })), cosmwasm_std::SubMsg::new(CosmosMsg::Bank(BankMsg::Send { - to_address: "receiver4".to_string(), + to_address: api.addr_make("receiver4").to_string(), amount: vec![Coin::new(4u128, "drop")] })) ]) diff --git a/contracts/strategy/Cargo.toml b/contracts/strategy/Cargo.toml index 14c1951e..200995cd 100644 --- a/contracts/strategy/Cargo.toml +++ b/contracts/strategy/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/strategy/src/tests.rs b/contracts/strategy/src/tests.rs index 4e9c5af6..5ee07f48 100644 --- a/contracts/strategy/src/tests.rs +++ b/contracts/strategy/src/tests.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use crate::contract::{execute, instantiate, query}; use cosmwasm_schema::cw_serde; -use cosmwasm_std::testing::{mock_env, mock_info}; +use cosmwasm_std::testing::{message_info, mock_env}; use cosmwasm_std::{ from_json, to_json_binary, Addr, Attribute, Binary, Decimal, Decimal256, Deps, Empty, Env, Event, Response, StdResult, Timestamp, Uint128, @@ -26,9 +26,6 @@ use drop_staking_base::state::strategy::{DENOM, FACTORY_CONTRACT}; const CORE_CONTRACT_ADDR: &str = "core_contract"; const FACTORY_CONTRACT_ADDR: &str = "factory_contract"; -const PUPPETEER_CONTRACT_ADDR: &str = "puppeteer_contract"; -const VALIDATOR_SET_CONTRACT_ADDR: &str = "validators_set_contract"; -const DISTRIBUTION_CONTRACT_ADDR: &str = "distribution_contract"; #[cw_serde] pub struct EmptyMsg {} @@ -38,10 +35,11 @@ fn instantiate_contract( contract: fn() -> Box>, label: String, ) -> Addr { + let deps = mock_dependencies(&[]); let contract_id = app.store_code(contract()); app.instantiate_contract( contract_id, - Addr::unchecked(CORE_CONTRACT_ADDR), + deps.api.addr_make(CORE_CONTRACT_ADDR), &EmptyMsg {}, &[], label, @@ -79,6 +77,7 @@ fn puppeteer_query( _env: Env, msg: PuppeteerQueryMsg, ) -> StdResult { + let deps = mock_dependencies(&[]); match msg { PuppeteerQueryMsg::Config {} => todo!(), PuppeteerQueryMsg::Ica {} => todo!(), @@ -91,8 +90,11 @@ fn puppeteer_query( let mut delegations_amount: Vec = Vec::new(); for i in 0..3 { let delegation = DropDelegation { - validator: format!("valoper{}", i), - delegator: Addr::unchecked("delegator".to_owned() + i.to_string().as_str()), + validator: deps + .api + .addr_make(format!("valoper{}", i).as_mut_str()) + .to_string(), + delegator: deps.api.addr_make(format!("delegator{}", i).as_mut_str()), amount: cosmwasm_std::Coin { denom: "uatom".to_string(), amount: Uint128::from(100u128), @@ -145,13 +147,16 @@ fn factory_query(_deps: Deps, _env: Env, msg: FactoryQueryMsg) -> StdResult { let out = HashMap::from([ ( - VALIDATOR_SET_CONTRACT_ADDR.to_string(), - "contract1".to_string(), + "validators_set_contract".to_string(), + "cosmwasm1wug8sewp6cedgkmrmvhl3lf3tulagm9hnvy8p0rppz9yjw0g4wtqlrtkzd", ), - (PUPPETEER_CONTRACT_ADDR.to_string(), "contract2".to_string()), ( - DISTRIBUTION_CONTRACT_ADDR.to_string(), - "contract3".to_string(), + "puppeteer_contract".to_string(), + "cosmwasm1qg5ega6dykkxc307y25pecuufrjkxkaggkkxh7nad0vhyhtuhw3sgetes3", + ), + ( + "distribution_contract".to_string(), + "cosmwasm1zwv6feuzhy6a9wekh96cd57lsarmqlwxdypdsplw6zhfncqw6ftqnzgsl6", ), ]); Ok(to_json_binary(&out).unwrap()) @@ -181,6 +186,7 @@ fn instantiate_factory_contract(app: &mut App) -> Addr { } fn validator_set_query(_deps: Deps, _env: Env, msg: ValidatorSetQueryMsg) -> StdResult { + let deps = mock_dependencies(&[]); match msg { ValidatorSetQueryMsg::Ownership {} => todo!(), ValidatorSetQueryMsg::Config {} => todo!(), @@ -189,7 +195,10 @@ fn validator_set_query(_deps: Deps, _env: Env, msg: ValidatorSetQueryMsg) -> Std let mut validators = Vec::new(); for i in 0..3 { let validator = drop_staking_base::state::validatorset::ValidatorInfo { - valoper_address: format!("valoper{}", i), + valoper_address: deps + .api + .addr_make(format!("valoper{}", i).as_mut_str()) + .to_string(), weight: 100, on_top: Uint128::zero(), last_processed_remote_height: None, @@ -235,18 +244,15 @@ fn instantiate_validator_set_contract(app: &mut App) -> Addr { } fn strategy_contract() -> Box> { - let contract = ContractWrapper::new( - crate::contract::execute, - crate::contract::instantiate, - crate::contract::query, - ); + let contract = ContractWrapper::new(execute, instantiate, query); Box::new(contract) } fn instantiate_strategy_contract(app: &mut App, id: u64, msg: InstantiateMsg) -> Addr { + let deps = mock_dependencies(&[]); app.instantiate_contract( id, - Addr::unchecked(CORE_CONTRACT_ADDR), + deps.api.addr_make(CORE_CONTRACT_ADDR), &msg, &[], "strategy contract", @@ -263,12 +269,12 @@ fn mock_app() -> App { fn test_initialization() { let mut deps = mock_dependencies(&[]); let msg = InstantiateMsg { - owner: CORE_CONTRACT_ADDR.to_string(), - factory_contract: "factory_contract".to_string(), + owner: deps.api.addr_make(CORE_CONTRACT_ADDR).to_string(), + factory_contract: deps.api.addr_make(FACTORY_CONTRACT_ADDR).to_string(), denom: "uatom".to_string(), }; - let info = mock_info(CORE_CONTRACT_ADDR, &[]); + let info = message_info(&deps.api.addr_make(CORE_CONTRACT_ADDR), &[]); let res = instantiate( deps.as_mut().into_empty(), mock_env(), @@ -282,10 +288,13 @@ fn test_initialization() { vec![ Event::new("crates.io:drop-staking__drop-strategy-instantiate".to_string()) .add_attributes(vec![ - Attribute::new("owner".to_string(), CORE_CONTRACT_ADDR.to_string()), + Attribute::new( + "owner".to_string(), + deps.api.addr_make(CORE_CONTRACT_ADDR).to_string() + ), Attribute::new( "factory_contract".to_string(), - "factory_contract".to_string(), + deps.api.addr_make(FACTORY_CONTRACT_ADDR).to_string(), ), Attribute::new("denom".to_string(), "uatom".to_string()), ]) @@ -295,6 +304,7 @@ fn test_initialization() { #[test] fn test_config_query() { + let deps = mock_dependencies(&[]); let mut app = mock_app(); let strategy_id = app.store_code(strategy_contract()); @@ -302,8 +312,8 @@ fn test_config_query() { &mut app, strategy_id, InstantiateMsg { - owner: CORE_CONTRACT_ADDR.to_string(), - factory_contract: "factory_contract".to_string(), + owner: deps.api.addr_make(CORE_CONTRACT_ADDR).to_string(), + factory_contract: deps.api.addr_make("factory_contract").to_string(), denom: "uatom".to_string(), }, ); @@ -316,7 +326,7 @@ fn test_config_query() { assert_eq!( config, drop_staking_base::msg::strategy::Config { - factory_contract: "factory_contract".to_string(), + factory_contract: deps.api.addr_make("factory_contract").to_string(), denom: "uatom".to_string(), } ); @@ -324,6 +334,7 @@ fn test_config_query() { #[test] fn test_ideal_deposit_calculation() { + let deps = mock_dependencies(&[]); let mut app = mock_app(); let factory_contract = instantiate_factory_contract(&mut app); let _validator_set_contract = instantiate_validator_set_contract(&mut app); @@ -336,7 +347,7 @@ fn test_ideal_deposit_calculation() { &mut app, strategy_id, InstantiateMsg { - owner: CORE_CONTRACT_ADDR.to_string(), + owner: deps.api.addr_make(CORE_CONTRACT_ADDR).to_string(), factory_contract: factory_contract.to_string(), denom: "uatom".to_string(), }, @@ -353,18 +364,28 @@ fn test_ideal_deposit_calculation() { .unwrap(); ideal_deposit.sort(); - assert_eq!( - ideal_deposit, - vec![ - ("valoper0".to_string(), Uint128::from(34u128)), - ("valoper1".to_string(), Uint128::from(34u128)), - ("valoper2".to_string(), Uint128::from(32u128)) - ] - ); + let mut expected_deposit = vec![ + ( + deps.api.addr_make("valoper0").to_string(), + Uint128::from(34u128), + ), + ( + deps.api.addr_make("valoper1").to_string(), + Uint128::from(34u128), + ), + ( + deps.api.addr_make("valoper2").to_string(), + Uint128::from(32u128), + ), + ]; + expected_deposit.sort(); + + assert_eq!(ideal_deposit, expected_deposit); } #[test] fn test_ideal_withdraw_calculation() { + let deps = mock_dependencies(&[]); let mut app = mock_app(); let factory_contract = instantiate_factory_contract(&mut app); let _validator_set_contract = instantiate_validator_set_contract(&mut app); @@ -377,7 +398,7 @@ fn test_ideal_withdraw_calculation() { &mut app, strategy_id, InstantiateMsg { - owner: CORE_CONTRACT_ADDR.to_string(), + owner: deps.api.addr_make(CORE_CONTRACT_ADDR).to_string(), factory_contract: factory_contract.to_string(), denom: "uatom".to_string(), }, @@ -394,28 +415,43 @@ fn test_ideal_withdraw_calculation() { .unwrap(); ideal_deposit.sort(); - assert_eq!( - ideal_deposit, - vec![ - ("valoper0".to_string(), Uint128::from(33u128)), - ("valoper1".to_string(), Uint128::from(33u128)), - ("valoper2".to_string(), Uint128::from(34u128)) - ] - ); + let mut expected_deposit = vec![ + ( + deps.api.addr_make("valoper0").to_string(), + Uint128::from(33u128), + ), + ( + deps.api.addr_make("valoper1").to_string(), + Uint128::from(33u128), + ), + ( + deps.api.addr_make("valoper2").to_string(), + Uint128::from(34u128), + ), + ]; + expected_deposit.sort(); + + assert_eq!(ideal_deposit, expected_deposit); } #[test] fn test_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = execute( deps.as_mut().into_empty(), mock_env(), - mock_info("not_owner", &[]), + message_info(&api.addr_make("not_owner"), &[]), drop_staking_base::msg::strategy::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::msg::strategy::ConfigOptional { - factory_contract: Some("new_factory_contract".to_string()), + factory_contract: Some(api.addr_make("new_factory_contract").to_string()), denom: Some("new_denom".to_string()), }, }, @@ -430,25 +466,28 @@ fn test_update_config_unauthorized() { #[test] fn test_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save( - deps.as_mut().storage, - &cosmwasm_std::Addr::unchecked(FACTORY_CONTRACT_ADDR.to_string()), - ) + .save(deps.as_mut().storage, &api.addr_make(FACTORY_CONTRACT_ADDR)) .unwrap(); DENOM .save(deps.as_mut().storage, &"denom".to_string()) .unwrap(); let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = execute( deps_mut.into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::strategy::ExecuteMsg::UpdateConfig { new_config: drop_staking_base::msg::strategy::ConfigOptional { - factory_contract: Some("new_factory_contract".to_string()), + factory_contract: Some(api.addr_make("new_factory_contract").to_string()), denom: Some("new_denom".to_string()), }, }, @@ -456,17 +495,15 @@ fn test_update_config() { .unwrap(); assert_eq!( res, - cosmwasm_std::Response::new().add_event( - cosmwasm_std::Event::new( - "crates.io:drop-staking__drop-strategy-config_update".to_string() - ) - .add_attributes(vec![ - cosmwasm_std::attr( - "factory_contract".to_string(), - "new_factory_contract".to_string() - ), - cosmwasm_std::attr("denom".to_string(), "new_denom".to_string()) - ]) + Response::new().add_event( + Event::new("crates.io:drop-staking__drop-strategy-config_update".to_string()) + .add_attributes(vec![ + cosmwasm_std::attr( + "factory_contract".to_string(), + api.addr_make("new_factory_contract").to_string() + ), + cosmwasm_std::attr("denom".to_string(), "new_denom".to_string()) + ]) ) ) } @@ -474,15 +511,21 @@ fn test_update_config() { #[test] fn test_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); execute( deps.as_mut().into_empty(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::strategy::ExecuteMsg::UpdateOwnership( cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }, ), @@ -491,7 +534,7 @@ fn test_transfer_ownership() { execute( deps.as_mut().into_empty(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), drop_staking_base::msg::strategy::ExecuteMsg::UpdateOwnership( cw_ownable::Action::AcceptOwnership {}, ), @@ -501,7 +544,7 @@ fn test_transfer_ownership() { query( deps.as_ref().into_empty(), mock_env(), - drop_staking_base::msg::strategy::QueryMsg::Ownership {}, + QueryMsg::Ownership {}, ) .unwrap(), ) @@ -509,7 +552,7 @@ fn test_transfer_ownership() { assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } diff --git a/contracts/token/Cargo.toml b/contracts/token/Cargo.toml index c3bddafd..6e9ae23b 100644 --- a/contracts/token/Cargo.toml +++ b/contracts/token/Cargo.toml @@ -9,7 +9,6 @@ version = "1.0.0" crate-type = ["cdylib", "rlib"] [features] -backtraces = ["cosmwasm-std/backtraces"] library = [] [dependencies] diff --git a/contracts/token/src/contract.rs b/contracts/token/src/contract.rs index 6d0ceea0..f4bf32ba 100644 --- a/contracts/token/src/contract.rs +++ b/contracts/token/src/contract.rs @@ -91,7 +91,7 @@ fn mint( let addrs = get_contracts!(deps, factory_contract, core_contract); ensure_eq!( - info.sender, + info.sender.as_str(), addrs.core_contract, ContractError::Unauthorized ); @@ -114,7 +114,7 @@ fn burn(deps: DepsMut, info: MessageInfo) -> ContractResult DenomMetadata { #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let response = contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), InstantiateMsg { - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), subdenom: "subdenom".to_string(), token_metadata: sample_metadata(), - owner: "admin".to_string(), + owner: api.addr_make("admin").to_string(), }, ) .unwrap(); assert_eq!( FACTORY_CONTRACT.load(deps.as_ref().storage).unwrap(), - Addr::unchecked("factory_contract") + api.addr_make("factory_contract") ); assert_eq!( TOKEN_METADATA.load(deps.as_ref().storage).unwrap(), @@ -75,7 +75,7 @@ fn instantiate() { assert_eq!( response.events, vec![Event::new("drop-token-instantiate").add_attributes([ - attr("factory_contract", "factory_contract"), + attr("factory_contract", api.addr_make("factory_contract")), attr("subdenom", "subdenom") ])] ); @@ -90,6 +90,8 @@ fn reply_unknown_id() { mock_env(), Reply { id: 215, + payload: Binary::default(), + gas_used: 1000, result: SubMsgResult::Err("".to_string()), }, ) @@ -101,7 +103,7 @@ fn reply_unknown_id() { fn reply() { let mut deps = mock_dependencies(&[]); deps.querier - .add_custom_query_response(|request| match request { + .add_custom_query_response(move |request| match request { QueryRequest::Custom(NeutronQuery::FullDenom { creator_addr, subdenom, @@ -127,6 +129,8 @@ fn reply() { mock_env(), Reply { id: CREATE_DENOM_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, result: SubMsgResult::Err("".to_string()), }, ) @@ -137,6 +141,7 @@ fn reply() { assert_eq!(response.messages.len(), 1); match response.messages[0].msg.clone() { + #[allow(deprecated)] CosmosMsg::Stargate { type_url, value } => { assert_eq!( type_url, @@ -186,8 +191,9 @@ fn reply() { #[test] fn mint_zero() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -197,7 +203,7 @@ fn mint_zero() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), ExecuteMsg::Mint { amount: Uint128::zero(), receiver: "receiver".to_string(), @@ -210,8 +216,9 @@ fn mint_zero() { #[test] fn mint() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -221,7 +228,7 @@ fn mint() { let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), ExecuteMsg::Mint { amount: Uint128::new(220), receiver: "receiver".to_string(), @@ -249,8 +256,9 @@ fn mint() { #[test] fn mint_stranger() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -260,7 +268,7 @@ fn mint_stranger() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), + message_info(&api.addr_make("stranger"), &[]), ExecuteMsg::Mint { amount: Uint128::new(220), receiver: "receiver".to_string(), @@ -274,8 +282,9 @@ fn mint_stranger() { #[test] fn burn_zero() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -285,7 +294,7 @@ fn burn_zero() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[]), + message_info(&api.addr_make("core_contract"), &[]), ExecuteMsg::Burn {}, ) .unwrap_err(); @@ -298,8 +307,9 @@ fn burn_zero() { #[test] fn burn_multiple_coins() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -309,7 +319,10 @@ fn burn_multiple_coins() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[coin(20, "coin1"), coin(10, "denom")]), + message_info( + &api.addr_make("core_contract"), + &[coin(20, "coin1"), coin(10, "denom")], + ), ExecuteMsg::Burn {}, ) .unwrap_err(); @@ -322,8 +335,9 @@ fn burn_multiple_coins() { #[test] fn burn_invalid_coin() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -333,7 +347,7 @@ fn burn_invalid_coin() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[coin(20, "coin1")]), + message_info(&api.addr_make("core_contract"), &[coin(20, "coin1")]), ExecuteMsg::Burn {}, ) .unwrap_err(); @@ -346,8 +360,9 @@ fn burn_invalid_coin() { #[test] fn burn() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -357,7 +372,7 @@ fn burn() { let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("core_contract", &[coin(140, "denom")]), + message_info(&api.addr_make("core_contract"), &[coin(140, "denom")]), ExecuteMsg::Burn {}, ) .unwrap(); @@ -381,8 +396,9 @@ fn burn() { #[test] fn burn_stranger() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -392,7 +408,7 @@ fn burn_stranger() { let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[coin(160, "denom")]), + message_info(&api.addr_make("stranger"), &[coin(160, "denom")]), ExecuteMsg::Burn {}, ) .unwrap_err(); @@ -403,8 +419,9 @@ fn burn_stranger() { #[test] fn query_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; FACTORY_CONTRACT - .save(deps.as_mut().storage, &Addr::unchecked("factory_contract")) + .save(deps.as_mut().storage, &api.addr_make("factory_contract")) .unwrap(); mock_state_query(&mut deps); DENOM @@ -415,7 +432,7 @@ fn query_config() { assert_eq!( response, to_json_binary(&ConfigResponse { - factory_contract: "factory_contract".to_string(), + factory_contract: api.addr_make("factory_contract").to_string(), denom: "denom".to_string() }) .unwrap() @@ -425,11 +442,12 @@ fn query_config() { #[test] fn test_set_token_metadata_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); DENOM @@ -447,7 +465,7 @@ fn test_set_token_metadata_unauthorized() { let res = contract::execute( deps.as_mut(), mock_env(), - mock_info("not_an_owner", &[coin(160, "denom")]), + message_info(&api.addr_make("not_an_owner"), &[coin(160, "denom")]), ExecuteMsg::SetTokenMetadata { token_metadata: denom_metadata.clone(), }, @@ -462,11 +480,12 @@ fn test_set_token_metadata_unauthorized() { #[test] fn test_set_token_metadata() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("owner").as_ref()), + Some(api.addr_make("owner").as_ref()), ) .unwrap(); DENOM @@ -484,7 +503,7 @@ fn test_set_token_metadata() { let res = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[coin(160, "denom")]), + message_info(&api.addr_make("owner"), &[coin(160, "denom")]), ExecuteMsg::SetTokenMetadata { token_metadata: denom_metadata.clone(), }, @@ -495,11 +514,13 @@ fn test_set_token_metadata() { cosmwasm_std::Response::new() .add_submessage(cosmwasm_std::SubMsg { id: 0u64, - msg: cosmwasm_std::CosmosMsg::Stargate { + payload: Binary::default(), + #[allow(deprecated)] + msg: CosmosMsg::Stargate { type_url: "/osmosis.tokenfactory.v1beta1.MsgSetDenomMetadata".to_string(), value: cosmwasm_std::Binary::from( MsgSetDenomMetadata { - sender: "cosmos2contract".to_string(), + sender: MOCK_CONTRACT_ADDR.to_string(), metadata: Some(Metadata { denom_units: vec![ DenomUnit { diff --git a/contracts/unbonding-mirror/Cargo.toml b/contracts/unbonding-mirror/Cargo.toml index bd2a8b69..3daaa1d2 100644 --- a/contracts/unbonding-mirror/Cargo.toml +++ b/contracts/unbonding-mirror/Cargo.toml @@ -9,12 +9,12 @@ version = "1.0.0" crate-type = ["cdylib", "rlib"] [features] -backtraces = ["cosmwasm-std/backtraces"] library = [] [dependencies] cosmwasm-std = { workspace = true } neutron-sdk = { workspace = true } +neutron-std = { workspace = true } drop-staking-base = { workspace = true } cw2 = { workspace = true } cw-ownable = { workspace = true } @@ -26,4 +26,6 @@ cosmwasm-schema = { workspace = true } cw-utils = { workspace = true } bech32 = { workspace = true } cw721 = { workspace = true } -serde-json-wasm = { workspace = true } \ No newline at end of file +serde-json-wasm = { workspace = true } +prost = { workspace = true } +prost-types = { workspace = true } \ No newline at end of file diff --git a/contracts/unbonding-mirror/src/contract.rs b/contracts/unbonding-mirror/src/contract.rs index 1a311281..f04f41a9 100644 --- a/contracts/unbonding-mirror/src/contract.rs +++ b/contracts/unbonding-mirror/src/contract.rs @@ -14,11 +14,10 @@ use cosmwasm_std::{ }; use drop_helpers::answer::response; use drop_helpers::ibc_fee::query_ibc_fee; -use neutron_sdk::bindings::{ - msg::{MsgIbcTransferResponse, NeutronMsg}, - query::NeutronQuery, -}; +use neutron_sdk::bindings::{msg::NeutronMsg, query::NeutronQuery}; +use neutron_sdk::interchain_txs::helpers::decode_message_response; use neutron_sdk::sudo::msg::{RequestPacket, RequestPacketTimeoutHeight, TransferSudoMsg}; +use neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse; use std::env; use std::str::FromStr; @@ -121,7 +120,7 @@ fn query_unbond_ready(deps: Deps, id: String) -> ContractResult = deps.querier.query_wasm_smart( withdrawal_voucher.clone(), @@ -380,13 +379,15 @@ pub fn store_seq_id( _env: Env, msg: Reply, ) -> ContractResult> { - let msg_ibc_transfer_response: MsgIbcTransferResponse = serde_json_wasm::from_slice( - msg.result + let msg_ibc_transfer_response: MsgSubmitTxResponse = decode_message_response( + &msg.result .into_result() .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), + .msg_responses + .first() + .ok_or_else(|| StdError::generic_err("no msg_responses found"))? + .value + .to_vec(), ) .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; let seq_id = msg_ibc_transfer_response.sequence_id; diff --git a/contracts/unbonding-mirror/src/tests.rs b/contracts/unbonding-mirror/src/tests.rs index bb2f8d32..992dc52e 100644 --- a/contracts/unbonding-mirror/src/tests.rs +++ b/contracts/unbonding-mirror/src/tests.rs @@ -11,50 +11,51 @@ use crate::state::{ use cosmwasm_std::{ attr, from_json, testing::MOCK_CONTRACT_ADDR, - testing::{mock_env, mock_info}, - to_json_binary, ChannelResponse, Coin, CosmosMsg, Event, IbcChannel, IbcEndpoint, IbcOrder, - Reply, ReplyOn, Response, SubMsg, SubMsgResponse, SubMsgResult, Uint128, WasmMsg, + testing::{message_info, mock_env}, + to_json_binary, Binary, ChannelResponse, Coin, CosmosMsg, Event, IbcChannel, IbcEndpoint, + IbcOrder, MsgResponse, Reply, ReplyOn, Response, SubMsg, SubMsgResponse, SubMsgResult, Uint128, + WasmMsg, }; use drop_helpers::testing::mock_dependencies; -use neutron_sdk::bindings::msg::MsgIbcTransferResponse; use neutron_sdk::sudo::msg::{RequestPacket, TransferSudoMsg}; use neutron_sdk::{ bindings::msg::{IbcFee, NeutronMsg}, query::min_ibc_fee::MinIbcFeeResponse, sudo::msg::RequestPacketTimeoutHeight, }; +use neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse; +use prost::Message; #[test] fn test_instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; deps.querier.add_ibc_channel_response( Some("source_channel".to_string()), Some("source_port".to_string()), - ChannelResponse { - channel: Some(IbcChannel::new( - IbcEndpoint { - port_id: "source_port".to_string(), - channel_id: "source_channel".to_string(), - }, - IbcEndpoint { - port_id: "source_port".to_string(), - channel_id: "source_channel".to_string(), - }, - IbcOrder::Ordered, - "version".to_string(), - "connection_id".to_string(), - )), - }, + ChannelResponse::new(Some(IbcChannel::new( + IbcEndpoint { + port_id: "source_port".to_string(), + channel_id: "source_channel".to_string(), + }, + IbcEndpoint { + port_id: "source_port".to_string(), + channel_id: "source_channel".to_string(), + }, + IbcOrder::Ordered, + "version".to_string(), + "connection_id".to_string(), + ))), ); let res = instantiate( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), InstantiateMsg { owner: None, - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager".to_string(), - withdrawal_voucher: "withdrawal_voucher".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -68,10 +69,10 @@ fn test_instantiate() { Event::new("crates.io:drop-staking__drop-unbonding-mirror-instantiate").add_attributes( vec![ attr("action", "instantiate"), - attr("owner", "owner"), - attr("core_contract", "core_contract"), - attr("withdrawal_manager", "withdrawal_manager"), - attr("withdrawal_voucher", "withdrawal_voucher"), + attr("owner", api.addr_make("owner")), + attr("core_contract", api.addr_make("core_contract")), + attr("withdrawal_manager", api.addr_make("withdrawal_manager")), + attr("withdrawal_voucher", api.addr_make("withdrawal_voucher")), attr("source_port", "source_port"), attr("source_channel", "source_channel"), attr("ibc_timeout", "12345"), @@ -83,9 +84,9 @@ fn test_instantiate() { assert_eq!( CONFIG.load(deps.as_ref().storage).unwrap(), Config { - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager".to_string(), - withdrawal_voucher: "withdrawal_voucher".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -97,15 +98,21 @@ fn test_instantiate() { #[test] fn test_execute_update_config_source_channel_not_found() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager1".to_string(), - withdrawal_voucher: "withdrawal_voucher1".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager1").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher1").to_string(), source_port: "source_port1".to_string(), source_channel: "source_channel1".to_string(), ibc_timeout: 12345, @@ -116,12 +123,12 @@ fn test_execute_update_config_source_channel_not_found() { let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract2".to_string()), - withdrawal_manager: Some("withdrawal_manager2".to_string()), - withdrawal_voucher: Some("withdrawal_voucher2".to_string()), + core_contract: Some(api.addr_make("core_contract2").to_string()), + withdrawal_manager: Some(api.addr_make("withdrawal_manager2").to_string()), + withdrawal_voucher: Some(api.addr_make("withdrawal_voucher2").to_string()), source_port: Some("source_port2".to_string()), source_channel: Some("source_channel2".to_string()), ibc_timeout: Some(54321), @@ -136,17 +143,23 @@ fn test_execute_update_config_source_channel_not_found() { #[test] fn test_execute_update_config_unauthrozied() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); let res = execute( deps.as_mut(), mock_env(), - mock_info("random_sender", &[]), + message_info(&api.addr_make("random_sender"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract2".to_string()), - withdrawal_manager: Some("withdrawal_manager2".to_string()), - withdrawal_voucher: Some("withdrawal_voucher2".to_string()), + core_contract: Some(api.addr_make("core_contract2").to_string()), + withdrawal_manager: Some(api.addr_make("withdrawal_manager2").to_string()), + withdrawal_voucher: Some(api.addr_make("withdrawal_voucher2").to_string()), source_port: Some("source_port2".to_string()), source_channel: Some("source_channel2".to_string()), ibc_timeout: Some(54321), @@ -164,15 +177,21 @@ fn test_execute_update_config_unauthrozied() { #[test] fn test_execute_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager1".to_string(), - withdrawal_voucher: "withdrawal_voucher1".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager1").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher1").to_string(), source_port: "source_port1".to_string(), source_channel: "source_channel1".to_string(), ibc_timeout: 12345, @@ -183,31 +202,29 @@ fn test_execute_update_config() { deps.querier.add_ibc_channel_response( Some("source_channel2".to_string()), Some("source_port2".to_string()), - ChannelResponse { - channel: Some(IbcChannel::new( - IbcEndpoint { - port_id: "source_port2".to_string(), - channel_id: "source_channel2".to_string(), - }, - IbcEndpoint { - port_id: "source_port2".to_string(), - channel_id: "source_channel2".to_string(), - }, - IbcOrder::Ordered, - "version".to_string(), - "connection_id".to_string(), - )), - }, + ChannelResponse::new(Some(IbcChannel::new( + IbcEndpoint { + port_id: "source_port2".to_string(), + channel_id: "source_channel2".to_string(), + }, + IbcEndpoint { + port_id: "source_port2".to_string(), + channel_id: "source_channel2".to_string(), + }, + IbcOrder::Ordered, + "version".to_string(), + "connection_id".to_string(), + ))), ); let res = execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - core_contract: Some("core_contract2".to_string()), - withdrawal_manager: Some("withdrawal_manager2".to_string()), - withdrawal_voucher: Some("withdrawal_voucher2".to_string()), + core_contract: Some(api.addr_make("core_contract2").to_string()), + withdrawal_manager: Some(api.addr_make("withdrawal_manager2").to_string()), + withdrawal_voucher: Some(api.addr_make("withdrawal_voucher2").to_string()), source_port: Some("source_port2".to_string()), source_channel: Some("source_channel2".to_string()), ibc_timeout: Some(54321), @@ -222,9 +239,9 @@ fn test_execute_update_config() { Event::new("crates.io:drop-staking__drop-unbonding-mirror-execute_update_config") .add_attributes(vec![ attr("action", "execute_update_config"), - attr("core_contract", "core_contract2"), - attr("withdrawal_manager", "withdrawal_manager2"), - attr("withdrawal_voucher", "withdrawal_voucher2"), + attr("core_contract", api.addr_make("core_contract2")), + attr("withdrawal_manager", api.addr_make("withdrawal_manager2")), + attr("withdrawal_voucher", api.addr_make("withdrawal_voucher2")), attr("ibc_timeout", "54321"), attr("prefix", "prefix2"), attr("source_port", "source_port2"), @@ -235,9 +252,9 @@ fn test_execute_update_config() { assert_eq!( CONFIG.load(&deps.storage).unwrap(), Config { - core_contract: "core_contract2".to_string(), - withdrawal_manager: "withdrawal_manager2".to_string(), - withdrawal_voucher: "withdrawal_voucher2".to_string(), + core_contract: api.addr_make("core_contract2").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager2").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher2").to_string(), source_port: "source_port2".to_string(), source_channel: "source_channel2".to_string(), ibc_timeout: 54321, @@ -249,10 +266,11 @@ fn test_execute_update_config() { #[test] fn test_execute_unbond_not_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let res = execute( deps.as_mut(), mock_env(), - mock_info("random_sender", &[]), + message_info(&api.addr_make("random_sender"), &[]), ExecuteMsg::Unbond { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -267,11 +285,12 @@ fn test_execute_unbond_not_no_funds() { #[test] fn test_execute_unbond_not_one_coin() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let res = execute( deps.as_mut(), mock_env(), - mock_info( - "random_sender", + message_info( + &api.addr_make("random_sender"), &[ Coin { denom: "denom1".to_string(), @@ -297,6 +316,7 @@ fn test_execute_unbond_not_one_coin() { #[test] fn test_execute_unbond_invalid_prefix() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -314,8 +334,8 @@ fn test_execute_unbond_invalid_prefix() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "random_sender", + message_info( + &api.addr_make("random_sender"), &[Coin { denom: "denom1".to_string(), amount: Uint128::from(100u128), @@ -332,6 +352,7 @@ fn test_execute_unbond_invalid_prefix() { #[test] fn test_execute_unbond_wrong_receiver_address() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -349,8 +370,8 @@ fn test_execute_unbond_wrong_receiver_address() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "random_sender", + message_info( + &api.addr_make("random_sender"), &[Coin { denom: "denom1".to_string(), amount: Uint128::from(100u128), @@ -367,6 +388,7 @@ fn test_execute_unbond_wrong_receiver_address() { #[test] fn test_execute_unbond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -384,8 +406,8 @@ fn test_execute_unbond() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "random_sender", + message_info( + &api.addr_make("random_sender"), &[Coin { denom: "dAsset".to_string(), amount: Uint128::from(100u128), @@ -405,6 +427,7 @@ fn test_execute_unbond() { ) .add_submessage(SubMsg { id: UNBOND_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: "core_contract".to_string(), msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::Unbond {}) @@ -427,6 +450,7 @@ fn test_execute_unbond() { #[test] fn test_execute_retry_invalid_prefix() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -444,7 +468,7 @@ fn test_execute_retry_invalid_prefix() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "invalid_prefix".to_string(), }, @@ -456,6 +480,7 @@ fn test_execute_retry_invalid_prefix() { #[test] fn test_execute_retry_wrong_receiver_address() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -473,7 +498,7 @@ fn test_execute_retry_wrong_receiver_address() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1invalid_address".to_string(), }, @@ -485,6 +510,7 @@ fn test_execute_retry_wrong_receiver_address() { #[test] fn test_execute_retry_take_1_from_3() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -532,7 +558,7 @@ fn test_execute_retry_take_1_from_3() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -551,6 +577,7 @@ fn test_execute_retry_take_1_from_3() { ) .add_submessages(vec![SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), @@ -612,6 +639,7 @@ fn test_execute_retry_take_1_from_3() { #[test] fn test_execute_retry_take_one() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -649,7 +677,7 @@ fn test_execute_retry_take_one() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -668,6 +696,7 @@ fn test_execute_retry_take_one() { ) .add_submessages(vec![SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), @@ -717,6 +746,7 @@ fn test_execute_retry_take_one() { #[test] fn test_execute_retry_take_0() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -734,7 +764,7 @@ fn test_execute_retry_take_0() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -752,6 +782,7 @@ fn test_execute_retry_take_0() { #[test] fn test_execute_retry_take_empty() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -776,7 +807,7 @@ fn test_execute_retry_take_empty() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -794,6 +825,7 @@ fn test_execute_retry_take_empty() { #[test] fn test_execute_retry_none() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -811,7 +843,7 @@ fn test_execute_retry_none() { let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Retry { receiver: "prefix1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqckwusc".to_string(), }, @@ -829,10 +861,11 @@ fn test_execute_retry_none() { #[test] fn test_execute_withdraw_no_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let res = execute( deps.as_mut(), mock_env(), - mock_info("sender", &[]), + message_info(&api.addr_make("sender"), &[]), ExecuteMsg::Withdraw { receiver: "receiver".to_string(), }, @@ -847,11 +880,12 @@ fn test_execute_withdraw_no_funds() { #[test] fn test_execute_withdraw_extra_funds() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let res = execute( deps.as_mut(), mock_env(), - mock_info( - "sender", + message_info( + &api.addr_make("sender"), &[ Coin { denom: "denom1".to_string(), @@ -877,6 +911,7 @@ fn test_execute_withdraw_extra_funds() { #[test] fn test_execute_withdraw_invalid_prefix() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -894,8 +929,8 @@ fn test_execute_withdraw_invalid_prefix() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "sender", + message_info( + &api.addr_make("sender"), &[Coin { denom: "denom1".to_string(), amount: Uint128::from(1u128), @@ -912,6 +947,7 @@ fn test_execute_withdraw_invalid_prefix() { #[test] fn test_execute_withdraw_wrong_receiver_address() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -929,8 +965,8 @@ fn test_execute_withdraw_wrong_receiver_address() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "sender", + message_info( + &api.addr_make("sender"), &[Coin { denom: "denom1".to_string(), amount: Uint128::from(1u128), @@ -947,6 +983,7 @@ fn test_execute_withdraw_wrong_receiver_address() { #[test] fn test_execute_withdraw() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, @@ -971,22 +1008,24 @@ fn test_execute_withdraw() { deps.querier .add_wasm_query_response("withdrawal_voucher", |_| { cosmwasm_std::ContractResult::Ok( - to_json_binary(&cw721::AllNftInfoResponse { - access: cw721::OwnerOfResponse { + to_json_binary(&cw721::msg::AllNftInfoResponse { + access: cw721::msg::OwnerOfResponse { owner: "owner".to_string(), approvals: vec![], }, - info: cw721::NftInfoResponse::< + info: cw721::msg::NftInfoResponse::< drop_staking_base::msg::withdrawal_voucher::Extension, > { token_uri: Some("token_uri".to_string()), - extension: Some(drop_staking_base::state::withdrawal_voucher::Metadata { - name: "name".to_string(), - description: None, - attributes: None, - batch_id: "batch_id".to_string(), - amount: Uint128::from(100u128), - }), + extension: Some( + drop_staking_base::state::withdrawal_voucher::NftExtension { + name: "name".to_string(), + description: None, + attributes: None, + batch_id: "batch_id".to_string(), + amount: Uint128::from(100u128), + }, + ), }, }) .unwrap(), @@ -995,8 +1034,8 @@ fn test_execute_withdraw() { let res = execute( deps.as_mut(), mock_env(), - mock_info( - "sender", + message_info( + &api.addr_make("sender"), &[Coin { denom: "denom".to_string(), amount: Uint128::from(1u128), @@ -1024,6 +1063,7 @@ fn test_execute_withdraw() { .add_submessages(vec![ SubMsg { id: 0, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::BurnTokens { denom: "denom".to_string(), amount: Uint128::from(1u128), @@ -1034,6 +1074,7 @@ fn test_execute_withdraw() { }, SubMsg { id: WITHDRAW_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Wasm(WasmMsg::Execute { contract_addr: "withdrawal_voucher".to_string(), msg: to_json_binary( @@ -1065,14 +1106,20 @@ fn test_execute_withdraw() { #[test] fn test_execute_transfer_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::TransferOwnership { - new_owner: "new_owner".to_string(), + new_owner: api.addr_make("new_owner").to_string(), expiry: Some(cw_ownable::Expiration::Never {}), }), ) @@ -1080,23 +1127,16 @@ fn test_execute_transfer_ownership() { execute( deps.as_mut(), mock_env(), - mock_info("new_owner", &[]), + message_info(&api.addr_make("new_owner"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::AcceptOwnership {}), ) .unwrap(); - let query_res: cw_ownable::Ownership = from_json( - query( - deps.as_ref(), - mock_env(), - crate::msg::QueryMsg::Ownership {}, - ) - .unwrap(), - ) - .unwrap(); + let query_res: cw_ownable::Ownership = + from_json(query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap()).unwrap(); assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("new_owner".to_string())), + owner: Some(api.addr_make("new_owner")), pending_expiry: None, pending_owner: None } @@ -1106,21 +1146,20 @@ fn test_execute_transfer_ownership() { #[test] fn test_query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); - let query_res: cw_ownable::Ownership = from_json( - query( - deps.as_ref(), - mock_env(), - crate::msg::QueryMsg::Ownership {}, - ) - .unwrap(), + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), ) .unwrap(); + let query_res: cw_ownable::Ownership = + from_json(query(deps.as_ref(), mock_env(), QueryMsg::Ownership {}).unwrap()).unwrap(); assert_eq!( query_res, cw_ownable::Ownership { - owner: Some(cosmwasm_std::Addr::unchecked("owner".to_string())), + owner: Some(api.addr_make("owner")), pending_expiry: None, pending_owner: None } @@ -1321,22 +1360,24 @@ fn test_query_unbond_ready_true() { deps.querier .add_wasm_query_response("withdrawal_voucher", |_| { cosmwasm_std::ContractResult::Ok( - to_json_binary(&cw721::AllNftInfoResponse { - access: cw721::OwnerOfResponse { + to_json_binary(&cw721::msg::AllNftInfoResponse { + access: cw721::msg::OwnerOfResponse { owner: "owner".to_string(), approvals: vec![], }, - info: cw721::NftInfoResponse::< + info: cw721::msg::NftInfoResponse::< drop_staking_base::msg::withdrawal_voucher::Extension, > { token_uri: Some("token_uri".to_string()), - extension: Some(drop_staking_base::state::withdrawal_voucher::Metadata { - name: "name".to_string(), - description: None, - attributes: None, - batch_id: "0".to_string(), - amount: Uint128::from(100u128), - }), + extension: Some( + drop_staking_base::state::withdrawal_voucher::NftExtension { + name: "name".to_string(), + description: None, + attributes: None, + batch_id: "0".to_string(), + amount: Uint128::from(100u128), + }, + ), }, }) .unwrap(), @@ -1408,22 +1449,24 @@ fn test_query_unbond_ready_false() { deps.querier .add_wasm_query_response("withdrawal_voucher", |_| { cosmwasm_std::ContractResult::Ok( - to_json_binary(&cw721::AllNftInfoResponse { - access: cw721::OwnerOfResponse { + to_json_binary(&cw721::msg::AllNftInfoResponse { + access: cw721::msg::OwnerOfResponse { owner: "owner".to_string(), approvals: vec![], }, - info: cw721::NftInfoResponse::< + info: cw721::msg::NftInfoResponse::< drop_staking_base::msg::withdrawal_voucher::Extension, > { token_uri: Some("token_uri".to_string()), - extension: Some(drop_staking_base::state::withdrawal_voucher::Metadata { - name: "name".to_string(), - description: None, - attributes: None, - batch_id: "0".to_string(), - amount: Uint128::from(100u128), - }), + extension: Some( + drop_staking_base::state::withdrawal_voucher::NftExtension { + name: "name".to_string(), + description: None, + attributes: None, + batch_id: "0".to_string(), + amount: Uint128::from(100u128), + }, + ), }, }) .unwrap(), @@ -1496,9 +1539,13 @@ fn test_reply_finalize_withdraw_no_transfer_amount() { mock_env(), Reply { id: WITHDRAW_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) @@ -1534,9 +1581,13 @@ fn test_reply_finalize_withdraw_no_transfer_amount_found() { mock_env(), Reply { id: WITHDRAW_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("transfer")], data: None, + msg_responses: vec![], }), }, ) @@ -1547,13 +1598,14 @@ fn test_reply_finalize_withdraw_no_transfer_amount_found() { #[test] fn test_reply_finalize_withdraw() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager".to_string(), - withdrawal_voucher: "withdrawal_voucher".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -1564,7 +1616,7 @@ fn test_reply_finalize_withdraw() { WITHDRAW_REPLY_RECEIVER .save( deps.as_mut().storage, - &"withdraw_reply_receiver".to_string(), + &api.addr_make("withdraw_reply_receiver").to_string(), ) .unwrap(); deps.querier.add_custom_query_response(|_| { @@ -1582,9 +1634,13 @@ fn test_reply_finalize_withdraw() { mock_env(), Reply { id: WITHDRAW_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("transfer").add_attribute("amount", "100ibc_denom")], data: None, + msg_responses: vec![], }), }, ) @@ -1597,13 +1653,14 @@ fn test_reply_finalize_withdraw() { .add_attributes(vec![ attr("source_port", "source_port"), attr("source_channel", "source_channel"), - attr("receiver", "withdraw_reply_receiver"), + attr("receiver", api.addr_make("withdraw_reply_receiver")), attr("timeout", "1571809764879305533"), attr("amount", "100ibc_denom"), ]) ) .add_submessages(vec![SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), @@ -1611,8 +1668,8 @@ fn test_reply_finalize_withdraw() { denom: "ibc_denom".to_string(), amount: Uint128::from(100u128) }, - sender: "cosmos2contract".to_string(), - receiver: "withdraw_reply_receiver".to_string(), + sender: api.addr_make("cosmos2contract").to_string(), + receiver: api.addr_make("withdraw_reply_receiver").to_string(), timeout_height: RequestPacketTimeoutHeight { revision_number: None, revision_height: None @@ -1672,9 +1729,13 @@ fn test_reply_finalize_unbond_no_nft_minted() { mock_env(), Reply { id: UNBOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![], data: None, + msg_responses: vec![], }), }, ) @@ -1710,9 +1771,13 @@ fn test_reply_finalize_unbond_no_nft_minted_found() { mock_env(), Reply { id: UNBOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("wasm")], data: None, + msg_responses: vec![], }), }, ) @@ -1723,13 +1788,14 @@ fn test_reply_finalize_unbond_no_nft_minted_found() { #[test] fn test_reply_finalize_unbond() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CONFIG .save( deps.as_mut().storage, &Config { - core_contract: "core_contract".to_string(), - withdrawal_manager: "withdrawal_manager".to_string(), - withdrawal_voucher: "withdrawal_voucher".to_string(), + core_contract: api.addr_make("core_contract").to_string(), + withdrawal_manager: api.addr_make("withdrawal_manager").to_string(), + withdrawal_voucher: api.addr_make("withdrawal_voucher").to_string(), source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), ibc_timeout: 12345, @@ -1740,7 +1806,7 @@ fn test_reply_finalize_unbond() { UNBOND_REPLY_RECEIVER .save( deps.as_mut().storage, - &"withdraw_reply_receiver".to_string(), + &api.addr_make("withdraw_reply_receiver").to_string(), ) .unwrap(); deps.querier.add_custom_query_response(|_| { @@ -1758,9 +1824,13 @@ fn test_reply_finalize_unbond() { mock_env(), Reply { id: UNBOND_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("wasm").add_attribute("token_id", "1_neutron..._123")], data: None, + msg_responses: vec![], }), }, ) @@ -1773,16 +1843,20 @@ fn test_reply_finalize_unbond() { .add_attributes(vec![ attr("action", "reply_finalize_bond"), attr("nft", "1_neutron..._123"), - attr("to_address", "withdraw_reply_receiver"), + attr("to_address", api.addr_make("withdraw_reply_receiver")), attr("source_port", "source_port"), attr("source_channel", "source_channel"), attr("ibc_timeout", "12345"), - attr("tf_denom", "factory/cosmos2contract/nft_1_123"), + attr( + "tf_denom", + format!("factory/{}/nft_1_123", api.addr_make("cosmos2contract")) + ), ]) ) .add_submessages(vec![ SubMsg { id: 0, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::CreateDenom { subdenom: "nft_1_123".to_string() }), @@ -1791,25 +1865,30 @@ fn test_reply_finalize_unbond() { }, SubMsg { id: 0, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::MintTokens { - denom: "factory/cosmos2contract/nft_1_123".to_string(), + denom: format!("factory/{}/nft_1_123", api.addr_make("cosmos2contract")), amount: Uint128::from(1u128), - mint_to_address: "cosmos2contract".to_string() + mint_to_address: api.addr_make("cosmos2contract").to_string() }), gas_limit: None, reply_on: ReplyOn::Never }, SubMsg { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), msg: CosmosMsg::Custom(NeutronMsg::IbcTransfer { source_port: "source_port".to_string(), source_channel: "source_channel".to_string(), token: Coin { - denom: "factory/cosmos2contract/nft_1_123".to_string(), + denom: format!( + "factory/{}/nft_1_123", + api.addr_make("cosmos2contract") + ), amount: Uint128::from(1u128) }, - sender: "cosmos2contract".to_string(), - receiver: "withdraw_reply_receiver".to_string(), + sender: api.addr_make("cosmos2contract").to_string(), + receiver: api.addr_make("withdraw_reply_receiver").to_string(), timeout_height: RequestPacketTimeoutHeight { revision_height: None, revision_number: None, @@ -1837,7 +1916,7 @@ fn test_reply_finalize_unbond() { TF_DENOM_TO_NFT_ID .load( &deps.storage, - "factory/cosmos2contract/nft_1_123".to_string(), + format!("factory/{}/nft_1_123", api.addr_make("cosmos2contract")), ) .unwrap(), "1_neutron..._123".to_string() @@ -1845,7 +1924,7 @@ fn test_reply_finalize_unbond() { assert_eq!( REPLY_TRANSFER_COIN.load(&deps.storage).unwrap(), Coin { - denom: "factory/cosmos2contract/nft_1_123".to_string(), + denom: format!("factory/{}/nft_1_123", api.addr_make("cosmos2contract")), amount: Uint128::from(1u128) } ); @@ -1868,19 +1947,22 @@ fn test_reply_store_seq_id_invalid_type() { mock_env(), Reply { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![Event::new("wasm").add_attribute("token_id", "1_neutron..._123")], - data: Some(to_json_binary(&"wrong_data".to_string()).unwrap()), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from("wrong_data".as_bytes()), + }], }), }, ) .unwrap_err(); - assert_eq!( - res, - ContractError::Std(cosmwasm_std::StdError::GenericErr { - msg: "failed to parse response: InvalidType".to_string() - }) - ); + assert!(format!("{}", res).contains("failed to parse response")); + assert!(format!("{}", res).contains("failed to decode Protobuf message")); } #[test] @@ -1900,15 +1982,22 @@ fn test_reply_store_seq_id() { mock_env(), Reply { id: IBC_TRANSFER_REPLY_ID, + payload: Binary::default(), + gas_used: 1000, + #[allow(deprecated)] result: SubMsgResult::Ok(SubMsgResponse { events: vec![], - data: Some( - to_json_binary(&MsgIbcTransferResponse { - sequence_id: 0u64, - channel: "channel".to_string(), - }) - .unwrap(), - ), + data: None, + msg_responses: vec![MsgResponse { + type_url: "/neutron.interchainquery.v1.MsgIbcTransferResponse".to_string(), + value: Binary::from( + MsgSubmitTxResponse { + sequence_id: 0u64, + channel: "channel".to_string(), + } + .encode_to_vec(), + ), + }], }), }, ) diff --git a/contracts/val-ref/Cargo.toml b/contracts/val-ref/Cargo.toml index febd4cc2..fa30ad35 100644 --- a/contracts/val-ref/Cargo.toml +++ b/contracts/val-ref/Cargo.toml @@ -9,7 +9,6 @@ version = "1.0.0" crate-type = ["cdylib", "rlib"] [features] -backtraces = ["cosmwasm-std/backtraces"] library = [] [dependencies] diff --git a/contracts/val-ref/src/contract.rs b/contracts/val-ref/src/contract.rs index 3443b1ce..ae361571 100644 --- a/contracts/val-ref/src/contract.rs +++ b/contracts/val-ref/src/contract.rs @@ -90,7 +90,7 @@ fn execute_bond_hook( core, &drop_staking_base::msg::core::QueryMsg::ExchangeRate {}, )?; - let on_top_increase = bond_hook.dasset_minted * exchange_rate; + let on_top_increase = bond_hook.dasset_minted.mul_floor(exchange_rate); messages.push(SubMsg::reply_on_error( WasmMsg::Execute { contract_addr: VALIDATORS_SET_ADDRESS.load(deps.storage)?.into_string(), diff --git a/contracts/val-ref/src/tests.rs b/contracts/val-ref/src/tests.rs index 091ef1d2..5a3065ae 100644 --- a/contracts/val-ref/src/tests.rs +++ b/contracts/val-ref/src/tests.rs @@ -2,9 +2,10 @@ use crate::{ contract::{self, EDIT_ON_TOP_REPLY_ID}, error::ContractError, }; +use cosmwasm_std::testing::MockApi; use cosmwasm_std::{ from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Addr, Decimal, Event, Order, Response, StdResult, SubMsg, Uint128, WasmMsg, }; use drop_helpers::testing::mock_dependencies; @@ -17,48 +18,49 @@ use drop_staking_base::{ state::val_ref::{CORE_ADDRESS, REFS, VALIDATORS_SET_ADDRESS}, }; -fn get_bond_hook_msg(amount: u128, r#ref: Option<&str>) -> BondHook { +fn get_bond_hook_msg(amount: u128, r#ref: Option<&str>, api: MockApi) -> BondHook { BondHook { dasset_minted: amount.into(), r#ref: r#ref.map(|r#ref| r#ref.into()), - amount: Uint128::zero(), // never used by contract - denom: String::from(""), // never used by contract - sender: Addr::unchecked(""), // never used by contract + amount: Uint128::zero(), // never used by contract + denom: String::from(""), // never used by contract + sender: api.addr_make(""), // never used by contract } } #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let response = contract::instantiate( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), InstantiateMsg { - owner: String::from("owner"), - core_address: String::from("core"), - validators_set_address: String::from("validators_set"), + owner: api.addr_make("owner").to_string(), + core_address: api.addr_make("core").to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), }, ) .unwrap(); - cw_ownable::assert_owner(deps.as_ref().storage, &Addr::unchecked("owner")).unwrap(); + cw_ownable::assert_owner(deps.as_ref().storage, &api.addr_make("owner")).unwrap(); assert_eq!( CORE_ADDRESS.load(deps.as_ref().storage).unwrap(), - Addr::unchecked("core") + api.addr_make("core") ); assert_eq!( VALIDATORS_SET_ADDRESS.load(deps.as_ref().storage).unwrap(), - Addr::unchecked("validators_set") + api.addr_make("validators_set") ); assert_eq!( response, Response::new().add_event(Event::new("drop-val-ref-instantiate").add_attributes([ - ("core_address", "core"), - ("validators_set_address", "validators_set") + ("core_address", api.addr_make("core")), + ("validators_set_address", api.addr_make("validators_set")) ])) ); } @@ -66,18 +68,24 @@ fn instantiate() { #[test] fn execute_update_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner1")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner1").as_str()), + ) + .unwrap(); } let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner1", &[]), + message_info(&api.addr_make("owner1"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::TransferOwnership { - new_owner: String::from("owner2"), + new_owner: api.addr_make("owner2").to_string(), expiry: None, }), ) @@ -90,7 +98,7 @@ fn execute_update_ownership() { let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner2", &[]), + message_info(&api.addr_make("owner2"), &[]), ExecuteMsg::UpdateOwnership(cw_ownable::Action::AcceptOwnership), ) .unwrap(); @@ -99,25 +107,31 @@ fn execute_update_ownership() { Response::new().add_event(Event::new("drop-val-ref-execute-update-ownership")) ); - cw_ownable::assert_owner(deps.as_mut().storage, &Addr::unchecked("owner2")).unwrap(); + cw_ownable::assert_owner(deps.as_mut().storage, &api.addr_make("owner2")).unwrap(); } #[test] fn execute_update_config_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), + message_info(&api.addr_make("stranger"), &[]), ExecuteMsg::UpdateConfig { - core_address: String::from("core"), - validators_set_address: String::from("validators_set"), + core_address: api.addr_make("core").to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), }, ) .unwrap_err(); @@ -131,38 +145,44 @@ fn execute_update_config_unauthorized() { #[test] fn execute_update_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::UpdateConfig { - core_address: String::from("core"), - validators_set_address: String::from("validators_set"), + core_address: api.addr_make("core").to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), }, ) .unwrap(); assert_eq!( CORE_ADDRESS.load(deps.as_ref().storage).unwrap(), - Addr::unchecked("core") + api.addr_make("core") ); assert_eq!( VALIDATORS_SET_ADDRESS.load(deps.as_ref().storage).unwrap(), - Addr::unchecked("validators_set") + api.addr_make("validators_set") ); assert_eq!( response, Response::new().add_event( Event::new("drop-val-ref-execute-update-config").add_attributes([ - ("core_address", "core"), - ("validators_set_address", "validators_set") + ("core_address", api.addr_make("core")), + ("validators_set_address", api.addr_make("validators_set")) ]) ) ); @@ -171,16 +191,17 @@ fn execute_update_config() { #[test] fn execute_bond_hook_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CORE_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("core")) + .save(deps.as_mut().storage, &api.addr_make("core")) .unwrap(); let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), - ExecuteMsg::BondCallback(get_bond_hook_msg(0, None)), + message_info(&api.addr_make("stranger"), &[]), + ExecuteMsg::BondCallback(get_bond_hook_msg(0, None, api)), ) .unwrap_err(); @@ -190,16 +211,17 @@ fn execute_bond_hook_unauthorized() { #[test] fn execute_bond_hook_no_ref() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CORE_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("core")) + .save(deps.as_mut().storage, &api.addr_make("core")) .unwrap(); let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), - ExecuteMsg::BondCallback(get_bond_hook_msg(0, None)), + message_info(&api.addr_make("core"), &[]), + ExecuteMsg::BondCallback(get_bond_hook_msg(0, None, api)), ) .unwrap(); @@ -212,16 +234,17 @@ fn execute_bond_hook_no_ref() { #[test] fn execute_bond_hook_unknown_validator() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CORE_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("core")) + .save(deps.as_mut().storage, &api.addr_make("core")) .unwrap(); let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), - ExecuteMsg::BondCallback(get_bond_hook_msg(0, Some("X"))), + message_info(&api.addr_make("core"), &[]), + ExecuteMsg::BondCallback(get_bond_hook_msg(0, Some("X"), api)), ) .unwrap(); @@ -237,30 +260,36 @@ fn execute_bond_hook_unknown_validator() { #[test] fn execute_bond_hook_known_validator() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CORE_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("core")) + .save(deps.as_mut().storage, &api.addr_make("core")) .unwrap(); VALIDATORS_SET_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("validators_set")) - .unwrap(); - REFS.save(deps.as_mut().storage, "X", &String::from("valoperX")) + .save(deps.as_mut().storage, &api.addr_make("validators_set")) .unwrap(); + REFS.save( + deps.as_mut().storage, + "X", + &api.addr_make("valoperX").to_string(), + ) + .unwrap(); - deps.querier.add_wasm_query_response("core", |req| { - let req = from_json::(req).unwrap(); - assert_eq!(req, CoreQueryMsg::ExchangeRate {}); + deps.querier + .add_wasm_query_response(api.addr_make("core").as_str(), |req| { + let req = from_json::(req).unwrap(); + assert_eq!(req, CoreQueryMsg::ExchangeRate {}); - cosmwasm_std::ContractResult::Ok( - to_json_binary(&Decimal::from_ratio(3u128, 2u128)).unwrap(), - ) - }); + cosmwasm_std::ContractResult::Ok( + to_json_binary(&Decimal::from_ratio(3u128, 2u128)).unwrap(), + ) + }); let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), - ExecuteMsg::BondCallback(get_bond_hook_msg(100, Some("X"))), + message_info(&api.addr_make("core"), &[]), + ExecuteMsg::BondCallback(get_bond_hook_msg(100, Some("X"), api)), ) .unwrap(); @@ -269,10 +298,10 @@ fn execute_bond_hook_known_validator() { Response::new() .add_submessage(SubMsg::reply_on_error( WasmMsg::Execute { - contract_addr: String::from("validators_set"), + contract_addr: api.addr_make("validators_set").to_string(), msg: to_json_binary(&ValidatorSetExecuteMsg::EditOnTop { operations: vec![OnTopEditOperation::Add { - validator_address: String::from("valoperX"), + validator_address: api.addr_make("valoperX").to_string(), amount: Uint128::new(150), }] }) @@ -284,7 +313,7 @@ fn execute_bond_hook_known_validator() { .add_event( Event::new("drop-val-ref-execute-bond-hook").add_attributes([ ("ref", "X"), - ("validator", "valoperX"), + ("validator", api.addr_make("valoperX").as_str()), ("on_top_increase", "150") ]) ) @@ -294,16 +323,22 @@ fn execute_bond_hook_known_validator() { #[test] fn execute_set_refs_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } let error = contract::execute( deps.as_mut(), mock_env(), - mock_info("stranger", &[]), + message_info(&api.addr_make("stranger"), &[]), ExecuteMsg::SetRefs { refs: vec![] }, ) .unwrap_err(); @@ -317,10 +352,16 @@ fn execute_set_refs_unauthorized() { #[test] fn execute_set_refs_empty() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } REFS.save(deps.as_mut().storage, "x", &String::from("X")) @@ -329,7 +370,7 @@ fn execute_set_refs_empty() { let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::SetRefs { refs: vec![] }, ) .unwrap(); @@ -351,28 +392,34 @@ fn execute_set_refs_empty() { #[test] fn execute_set_refs_override() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } - REFS.save(deps.as_mut().storage, "x", &String::from("X")) + REFS.save(deps.as_mut().storage, "x", &api.addr_make("X").to_string()) .unwrap(); let response = contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), ExecuteMsg::SetRefs { refs: vec![ Ref { r#ref: String::from("y"), - validator_address: String::from("valoperY"), + validator_address: api.addr_make("valoperY").to_string(), }, Ref { r#ref: String::from("z"), - validator_address: String::from("valoperZ"), + validator_address: api.addr_make("valoperZ").to_string(), }, ], }, @@ -384,8 +431,8 @@ fn execute_set_refs_override() { .collect::>>() .unwrap(), vec![ - (String::from("y"), String::from("valoperY")), - (String::from("z"), String::from("valoperZ")) + (String::from("y"), api.addr_make("valoperY").to_string()), + (String::from("z"), api.addr_make("valoperZ").to_string()) ] ); @@ -400,10 +447,16 @@ fn execute_set_refs_override() { #[test] fn query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } let response = from_json::>( @@ -414,7 +467,7 @@ fn query_ownership() { assert_eq!( response, cw_ownable::Ownership:: { - owner: Some(Addr::unchecked("owner")), + owner: Some(api.addr_make("owner")), pending_owner: None, pending_expiry: None, } @@ -424,12 +477,13 @@ fn query_ownership() { #[test] fn query_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; CORE_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("core")) + .save(deps.as_mut().storage, &api.addr_make("core")) .unwrap(); VALIDATORS_SET_ADDRESS - .save(deps.as_mut().storage, &Addr::unchecked("validators_set")) + .save(deps.as_mut().storage, &api.addr_make("validators_set")) .unwrap(); let response = from_json::( @@ -440,8 +494,8 @@ fn query_config() { assert_eq!( response, ConfigResponse { - core_address: String::from("core"), - validators_set_address: String::from("validators_set"), + core_address: api.addr_make("core").to_string(), + validators_set_address: api.addr_make("validators_set").to_string(), } ); } diff --git a/contracts/validators-set/Cargo.toml b/contracts/validators-set/Cargo.toml index 1db694eb..451a58b1 100644 --- a/contracts/validators-set/Cargo.toml +++ b/contracts/validators-set/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/validators-set/src/tests.rs b/contracts/validators-set/src/tests.rs index 17083b20..78f47593 100644 --- a/contracts/validators-set/src/tests.rs +++ b/contracts/validators-set/src/tests.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{ attr, from_json, - testing::{mock_env, mock_info}, + testing::{message_info, mock_env}, to_json_binary, Addr, Decimal, Event, Response, Uint128, }; use drop_helpers::testing::mock_dependencies; @@ -9,13 +9,15 @@ use drop_staking_base::state::{provider_proposals::ProposalInfo, validatorset::C #[test] fn instantiate() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + let response = crate::contract::instantiate( deps.as_mut(), mock_env(), - mock_info("admin", &[]), + message_info(&api.addr_make("admin"), &[]), drop_staking_base::msg::validatorset::InstantiateMsg { - owner: "owner".to_string(), - stats_contract: "stats_contract".to_string(), + owner: api.addr_make("owner").to_string(), + stats_contract: api.addr_make("stats_contract").to_string(), }, ) .unwrap(); @@ -26,7 +28,7 @@ fn instantiate() { assert_eq!( config, drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), + stats_contract: api.addr_make("stats_contract"), provider_proposals_contract: None, val_ref_contract: None, } @@ -36,8 +38,9 @@ fn instantiate() { assert_eq!( response.events, vec![ - Event::new("crates.io:drop-staking__drop-validators-set-instantiate") - .add_attributes([attr("stats_contract", "stats_contract")]) + Event::new("crates.io:drop-staking__drop-validators-set-instantiate").add_attributes([ + attr("stats_contract", api.addr_make("stats_contract").as_str()) + ]) ] ); assert!(response.attributes.is_empty()); @@ -46,13 +49,15 @@ fn instantiate() { #[test] fn query_config() { let mut deps = mock_dependencies(&[]); + let api = deps.api; + drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -66,9 +71,9 @@ fn query_config() { assert_eq!( response, to_json_binary(&drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }) .unwrap() ); @@ -77,14 +82,15 @@ fn query_config() { #[test] fn update_config_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -92,7 +98,7 @@ fn update_config_wrong_owner() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { stats_contract: Some("stats_contract1".to_string()), @@ -113,22 +119,23 @@ fn update_config_wrong_owner() { #[test] fn update_config_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -136,12 +143,14 @@ fn update_config_ok() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateConfig { new_config: ConfigOptional { - stats_contract: Some("stats_contract1".to_string()), - provider_proposals_contract: Some("provider_proposals_contract1".to_string()), - val_ref_contract: Some("val_ref_contract1".to_string()), + stats_contract: Some(api.addr_make("stats_contract1").to_string()), + provider_proposals_contract: Some( + api.addr_make("provider_proposals_contract1").to_string(), + ), + val_ref_contract: Some(api.addr_make("val_ref_contract1").to_string()), }, }, ) @@ -157,9 +166,9 @@ fn update_config_ok() { assert_eq!( config, to_json_binary(&drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract1"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract1")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract1")), + stats_contract: api.addr_make("stats_contract1"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract1")), + val_ref_contract: Some(api.addr_make("val_ref_contract1")), }) .unwrap() ); @@ -168,11 +177,12 @@ fn update_config_ok() { #[test] fn update_validators_wrong_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core1", &[]), + message_info(&api.addr_make("core1"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![drop_staking_base::msg::validatorset::ValidatorData { valoper_address: "valoper_address".to_string(), @@ -193,19 +203,20 @@ fn update_validators_wrong_owner() { #[test] fn update_validators_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![ drop_staking_base::msg::validatorset::ValidatorData { @@ -271,19 +282,20 @@ fn update_validators_ok() { #[test] fn update_validators_without_ontop_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![ drop_staking_base::msg::validatorset::ValidatorData { @@ -349,13 +361,14 @@ fn update_validators_without_ontop_ok() { #[test] fn update_validators_use_last_ontop() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::validatorset::VALIDATORS_SET @@ -383,7 +396,7 @@ fn update_validators_use_last_ontop() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![drop_staking_base::msg::validatorset::ValidatorData { valoper_address: "valoper_address1".to_string(), @@ -427,22 +440,23 @@ fn update_validators_use_last_ontop() { #[test] fn update_validators_info_wrong_sender() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::validatorset::CONFIG .save( deps_mut.storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -450,7 +464,7 @@ fn update_validators_info_wrong_sender() { let _response = crate::contract::execute( deps_mut, mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![drop_staking_base::msg::validatorset::ValidatorData { valoper_address: "valoper_address".to_string(), @@ -464,7 +478,7 @@ fn update_validators_info_wrong_sender() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("stats_contract1", &[]), + message_info(&api.addr_make("stats_contract1"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidatorsInfo { validators: vec![drop_staking_base::msg::validatorset::ValidatorInfoUpdate { valoper_address: "valoper_address".to_string(), @@ -488,22 +502,23 @@ fn update_validators_info_wrong_sender() { #[test] fn update_validators_info_ok() { let mut deps = mock_dependencies(&[]); + let api = deps.api; let deps_mut = deps.as_mut(); let _result = cw_ownable::initialize_owner( deps_mut.storage, deps_mut.api, - Some(Addr::unchecked("core").as_ref()), + Some(api.addr_make("core").as_ref()), ); drop_staking_base::state::validatorset::CONFIG .save( deps_mut.storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -511,7 +526,7 @@ fn update_validators_info_ok() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("core", &[]), + message_info(&api.addr_make("core"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidators { validators: vec![drop_staking_base::msg::validatorset::ValidatorData { valoper_address: "valoper_address".to_string(), @@ -526,7 +541,7 @@ fn update_validators_info_ok() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("stats_contract", &[]), + message_info(&api.addr_make("stats_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidatorsInfo { validators: vec![drop_staking_base::msg::validatorset::ValidatorInfoUpdate { valoper_address: "valoper_address".to_string(), @@ -578,20 +593,21 @@ fn update_validators_info_ok() { #[test] fn test_execute_update_validators_voting_unauthorized() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("not_provider_proposals_contract", &[]), + message_info(&api.addr_make("not_provider_proposals_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidatorsVoting { proposal: ProposalInfo { proposal: neutron_sdk::interchain_queries::v047::types::Proposal { @@ -620,20 +636,21 @@ fn test_execute_update_validators_voting_unauthorized() { #[test] fn test_execute_update_validators_voting_spam_proposal() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("provider_proposals_contract", &[]), + message_info(&api.addr_make("provider_proposals_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidatorsVoting { proposal: ProposalInfo { proposal: neutron_sdk::interchain_queries::v047::types::Proposal { @@ -667,13 +684,14 @@ fn test_execute_update_validators_voting_spam_proposal() { #[test] fn test_execute_update_validators_voting() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -701,7 +719,7 @@ fn test_execute_update_validators_voting() { let res = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("provider_proposals_contract", &[]), + message_info(&api.addr_make("provider_proposals_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateValidatorsVoting { proposal: ProposalInfo { proposal: neutron_sdk::interchain_queries::v047::types::Proposal { @@ -747,10 +765,16 @@ fn test_execute_update_validators_voting() { #[test] fn query_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } let response = from_json::>( @@ -766,7 +790,7 @@ fn query_ownership() { assert_eq!( response, cw_ownable::Ownership:: { - owner: Some(Addr::unchecked("owner")), + owner: Some(api.addr_make("owner")), pending_owner: None, pending_expiry: None, } @@ -776,19 +800,25 @@ fn query_ownership() { #[test] fn execute_update_ownership() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner1")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner1").as_str()), + ) + .unwrap(); } let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner1", &[]), + message_info(&api.addr_make("owner1"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateOwnership( cw_ownable::Action::TransferOwnership { - new_owner: String::from("owner2"), + new_owner: api.addr_make("owner2").to_string(), expiry: None, }, ), @@ -799,7 +829,7 @@ fn execute_update_ownership() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner2", &[]), + message_info(&api.addr_make("owner2"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::UpdateOwnership( cw_ownable::Action::AcceptOwnership, ), @@ -807,19 +837,20 @@ fn execute_update_ownership() { .unwrap(); assert_eq!(response, Response::new()); - cw_ownable::assert_owner(deps.as_mut().storage, &Addr::unchecked("owner2")).unwrap(); + cw_ownable::assert_owner(deps.as_mut().storage, &api.addr_make("owner2")).unwrap(); } #[test] fn execute_edit_on_top_unauthorized_no_authorizations() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), val_ref_contract: None, }, ) @@ -828,7 +859,7 @@ fn execute_edit_on_top_unauthorized_no_authorizations() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("someone", &[]), + message_info(&api.addr_make("someone"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![] }, ) .unwrap_err(); @@ -842,19 +873,25 @@ fn execute_edit_on_top_unauthorized_no_authorizations() { #[test] fn execute_edit_on_top_unauthorized_stranger() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -862,7 +899,7 @@ fn execute_edit_on_top_unauthorized_stranger() { let error = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("someone", &[]), + message_info(&api.addr_make("someone"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![] }, ) .unwrap_err(); @@ -876,19 +913,25 @@ fn execute_edit_on_top_unauthorized_stranger() { #[test] fn execute_edit_on_top_authorized_owner() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -896,7 +939,7 @@ fn execute_edit_on_top_authorized_owner() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("owner", &[]), + message_info(&api.addr_make("owner"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![] }, ) .unwrap(); @@ -912,19 +955,25 @@ fn execute_edit_on_top_authorized_owner() { #[test] fn execute_edit_on_top_authorized_val_ref_contract() { let mut deps = mock_dependencies(&[]); + let api = deps.api; { let deps_mut = deps.as_mut(); - cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("owner")).unwrap(); + cw_ownable::initialize_owner( + deps_mut.storage, + deps_mut.api, + Some(api.addr_make("owner").as_str()), + ) + .unwrap(); } drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -932,7 +981,7 @@ fn execute_edit_on_top_authorized_val_ref_contract() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("val_ref_contract", &[]), + message_info(&api.addr_make("val_ref_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![] }, ) .unwrap(); @@ -948,14 +997,15 @@ fn execute_edit_on_top_authorized_val_ref_contract() { #[test] fn execute_edit_on_top_add() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -985,7 +1035,7 @@ fn execute_edit_on_top_add() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("val_ref_contract", &[]), + message_info(&api.addr_make("val_ref_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![ drop_staking_base::msg::validatorset::OnTopEditOperation::Add { @@ -1030,14 +1080,15 @@ fn execute_edit_on_top_add() { #[test] fn execute_edit_on_top_subtract() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -1067,7 +1118,7 @@ fn execute_edit_on_top_subtract() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("val_ref_contract", &[]), + message_info(&api.addr_make("val_ref_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![ drop_staking_base::msg::validatorset::OnTopEditOperation::Set { @@ -1112,14 +1163,15 @@ fn execute_edit_on_top_subtract() { #[test] fn execute_edit_on_top_mixed() { let mut deps = mock_dependencies(&[]); + let api = deps.api; drop_staking_base::state::validatorset::CONFIG .save( deps.as_mut().storage, &drop_staking_base::state::validatorset::Config { - stats_contract: Addr::unchecked("stats_contract"), - provider_proposals_contract: Some(Addr::unchecked("provider_proposals_contract")), - val_ref_contract: Some(Addr::unchecked("val_ref_contract")), + stats_contract: api.addr_make("stats_contract"), + provider_proposals_contract: Some(api.addr_make("provider_proposals_contract")), + val_ref_contract: Some(api.addr_make("val_ref_contract")), }, ) .unwrap(); @@ -1170,7 +1222,7 @@ fn execute_edit_on_top_mixed() { let response = crate::contract::execute( deps.as_mut(), mock_env(), - mock_info("val_ref_contract", &[]), + message_info(&api.addr_make("val_ref_contract"), &[]), drop_staking_base::msg::validatorset::ExecuteMsg::EditOnTop { operations: vec![ drop_staking_base::msg::validatorset::OnTopEditOperation::Set { diff --git a/contracts/validators-stats/Cargo.toml b/contracts/validators-stats/Cargo.toml index cc4719c2..973be92d 100644 --- a/contracts/validators-stats/Cargo.toml +++ b/contracts/validators-stats/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/withdrawal-manager/Cargo.toml b/contracts/withdrawal-manager/Cargo.toml index a54f50f6..29fba058 100644 --- a/contracts/withdrawal-manager/Cargo.toml +++ b/contracts/withdrawal-manager/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] diff --git a/contracts/withdrawal-manager/src/contract.rs b/contracts/withdrawal-manager/src/contract.rs index cc8d8645..1b84de37 100644 --- a/contracts/withdrawal-manager/src/contract.rs +++ b/contracts/withdrawal-manager/src/contract.rs @@ -2,7 +2,7 @@ use cosmwasm_std::{ attr, ensure_eq, from_json, to_json_binary, Attribute, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, Env, MessageInfo, Response, StdResult, Uint128, WasmMsg, }; -use cw721::NftInfoResponse; +use cw721::msg::NftInfoResponse; use cw_ownable::{get_ownership, update_ownership}; use drop_helpers::answer::response; use drop_helpers::get_contracts; @@ -149,8 +149,8 @@ fn execute_receive_nft_withdraw( core_contract ); ensure_eq!( + info.sender.as_str(), addrs.withdrawal_voucher_contract, - info.sender, ContractError::Unauthorized {} ); let voucher: NftInfoResponse = deps.querier.query_wasm_smart( @@ -186,7 +186,10 @@ fn execute_receive_nft_withdraw( unbond_batch.total_dasset_amount_to_withdraw, ); - let payout_amount = user_share * unbond_batch.unbonded_amount.unwrap_or(Uint128::zero()); + let payout_amount = unbond_batch + .unbonded_amount + .unwrap_or(Uint128::zero()) + .mul_floor(user_share); let to_address = receiver.unwrap_or(sender); attrs.push(attr("batch_id", batch_id.to_string())); attrs.push(attr("payout_amount", payout_amount.to_string())); diff --git a/contracts/withdrawal-voucher/Cargo.toml b/contracts/withdrawal-voucher/Cargo.toml index 439955ea..0070c7c6 100644 --- a/contracts/withdrawal-voucher/Cargo.toml +++ b/contracts/withdrawal-voucher/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -26,6 +24,6 @@ library = [] cosmwasm-schema = { workspace = true } cosmwasm-std = { workspace = true } cw2 = { workspace = true } -cw721-base = { workspace = true } +cw721 = { workspace = true } drop-staking-base = { workspace = true } semver = { workspace = true } diff --git a/contracts/withdrawal-voucher/src/contract.rs b/contracts/withdrawal-voucher/src/contract.rs index 851c85e6..603d6cd9 100644 --- a/contracts/withdrawal-voucher/src/contract.rs +++ b/contracts/withdrawal-voucher/src/contract.rs @@ -1,20 +1,31 @@ use cosmwasm_std::Empty; -pub use cw721_base::{ContractError, MinterResponse}; -use drop_staking_base::msg::withdrawal_voucher::Extension; +pub use cw721::error::Cw721ContractError; +pub use cw721::msg::MinterResponse; +pub use cw721::traits::{Cw721Execute, Cw721Query}; +pub use drop_staking_base::msg::withdrawal_voucher::{ + ExecuteMsg, Extension, ExtensionMsg, InstantiateMsg, MigrateMsg, QueryMsg, +}; const CONTRACT_NAME: &str = concat!("crates.io:drop-staking__", env!("CARGO_PKG_NAME")); const CONTRACT_VERSION: &str = env!("CARGO_PKG_VERSION"); -pub type Cw721VoucherContract<'a> = cw721_base::Cw721Contract<'a, Extension, Empty, Empty, Empty>; +pub type Cw721VoucherContract<'a> = cw721::extension::Cw721Extensions< + 'a, + Extension, + ExtensionMsg, + Empty, + Empty, + Empty, + Empty, + Empty, +>; #[cfg(not(feature = "library"))] pub mod entry { use super::*; - use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError, StdResult}; - use drop_staking_base::msg::withdrawal_voucher::{ - ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg, - }; + use crate::contract::Cw721VoucherContract; + use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdError}; // This makes a conscious choice on the various generics used by the contract #[cosmwasm_std::entry_point] @@ -23,9 +34,9 @@ pub mod entry { env: Env, info: MessageInfo, msg: InstantiateMsg, - ) -> StdResult { + ) -> Result { cw2::set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; - Cw721VoucherContract::default().instantiate(deps.branch(), env, info, msg) + Cw721VoucherContract::default().instantiate(deps.branch(), &env, &info, msg) } #[cosmwasm_std::entry_point] @@ -34,17 +45,21 @@ pub mod entry { env: Env, info: MessageInfo, msg: ExecuteMsg, - ) -> Result { - Cw721VoucherContract::default().execute(deps, env, info, msg) + ) -> Result { + Cw721VoucherContract::default().execute(deps, &env, &info, msg) } #[cosmwasm_std::entry_point] - pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { - Cw721VoucherContract::default().query(deps, env, msg) + pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result { + Cw721VoucherContract::default().query(deps, &env, msg) } #[cosmwasm_std::entry_point] - pub fn migrate(deps: DepsMut, _env: Env, _msg: MigrateMsg) -> Result { + pub fn migrate( + deps: DepsMut, + _env: Env, + _msg: MigrateMsg, + ) -> Result { let contract_version_metadata = cw2::get_contract_version(deps.storage)?; let storage_contract_name = contract_version_metadata.contract.as_str(); if storage_contract_name != CONTRACT_NAME { diff --git a/integration_tests/src/testcases/bond-mirror.test.ts b/integration_tests/src/testcases/bond-mirror.test.ts index 7da58f7b..61208b38 100644 --- a/integration_tests/src/testcases/bond-mirror.test.ts +++ b/integration_tests/src/testcases/bond-mirror.test.ts @@ -114,7 +114,6 @@ describe('Mirror', () => { exchangeRate?: number; neutronIBCDenom?: string; gaiaIBCDenom?: string; - ldDenom?: string; } = { codeIds: {}, predefinedContractAddresses: {} }; beforeAll(async (t) => { @@ -773,7 +772,6 @@ describe('Mirror', () => { context.client, res.token_contract, ); - context.ldDenom = `factory/${res.token_contract}/drop`; }); it('register native bond provider in the core', async () => { @@ -854,16 +852,17 @@ describe('Mirror', () => { }); it('proper bond', async () => { - await context.mirrorContractClient.bond( + const { neutronIBCDenom, mirrorContractClient, gaiaUserAddress } = context; + await mirrorContractClient.bond( context.neutronUserAddress, { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, }, 1.6, undefined, [ { - denom: context.neutronIBCDenom, + denom: neutronIBCDenom, amount: '1000', }, ], @@ -951,16 +950,22 @@ describe('Mirror', () => { }); it('bond', async () => { - await context.mirrorContractClient.bond( - context.neutronUserAddress, + const { + mirrorContractClient, + gaiaUserAddress2, + neutronUserAddress, + neutronIBCDenom, + } = context; + await mirrorContractClient.bond( + neutronUserAddress, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, }, 1.6, undefined, [ { - denom: context.neutronIBCDenom, + denom: neutronIBCDenom, amount: '1000', }, ], @@ -975,10 +980,12 @@ describe('Mirror', () => { }); it("expect new assets to appear in contract's state", async () => { - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + const { mirrorContractClient, gaiaUserAddress, gaiaUserAddress2 } = + context; + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -987,7 +994,7 @@ describe('Mirror', () => { ], }, { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1029,10 +1036,12 @@ describe('Mirror', () => { }); it("expect new assets to appear in contract's state", async () => { - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + const { mirrorContractClient, gaiaUserAddress, gaiaUserAddress2 } = + context; + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1045,7 +1054,7 @@ describe('Mirror', () => { ], }, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1063,18 +1072,24 @@ describe('Mirror', () => { }); it('failed retry', async () => { - await context.mirrorContractClient.retry( - context.neutronUserAddress, + const { + mirrorContractClient, + gaiaUserAddress, + gaiaUserAddress2, + neutronUserAddress, + } = context; + + await mirrorContractClient.retry( + neutronUserAddress, { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, }, 1.6, ); - - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1083,7 +1098,7 @@ describe('Mirror', () => { ], }, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1102,16 +1117,19 @@ describe('Mirror', () => { }); it('restored values after sudo-timeout', async () => { + const { mirrorContractClient, gaiaUserAddress, gaiaUserAddress2 } = + context; + await waitFor( async () => - (await context.mirrorContractClient.queryAllFailed()).length === 2, + (await mirrorContractClient.queryAllFailed()).length === 2, 60_000, 5_000, ); - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1124,7 +1142,7 @@ describe('Mirror', () => { ], }, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1138,10 +1156,17 @@ describe('Mirror', () => { }); it('retry with the working relayer (1)', async () => { - await context.mirrorContractClient.retry( - context.neutronUserAddress, + const { + mirrorContractClient, + gaiaUserAddress, + gaiaUserAddress2, + neutronUserAddress, + } = context; + + await mirrorContractClient.retry( + neutronUserAddress, { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, }, 1.6, ); @@ -1156,10 +1181,10 @@ describe('Mirror', () => { 20000, 1000, ); - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1168,7 +1193,7 @@ describe('Mirror', () => { ], }, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1181,10 +1206,17 @@ describe('Mirror', () => { }); it('retry with the working relayer (2)', async () => { - await context.mirrorContractClient.retry( - context.neutronUserAddress, + const { + mirrorContractClient, + gaiaUserAddress, + gaiaUserAddress2, + neutronUserAddress, + } = context; + + await mirrorContractClient.retry( + neutronUserAddress, { - receiver: context.gaiaUserAddress2, + receiver: gaiaUserAddress2, }, 1.6, ); @@ -1199,10 +1231,10 @@ describe('Mirror', () => { 20000, 1000, ); - expect(await context.mirrorContractClient.queryAllFailed()).toEqual( + expect(await mirrorContractClient.queryAllFailed()).toEqual( expect.arrayContaining([ { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, failed_transfers: [ { denom: `factory/${context.tokenContractClient.contractAddress}/drop`, @@ -1215,10 +1247,13 @@ describe('Mirror', () => { }); it('retry with the working relayer (3)', async () => { - await context.mirrorContractClient.retry( - context.neutronUserAddress, + const { mirrorContractClient, gaiaUserAddress, neutronUserAddress } = + context; + + await mirrorContractClient.retry( + neutronUserAddress, { - receiver: context.gaiaUserAddress, + receiver: gaiaUserAddress, }, 1.6, ); @@ -1233,9 +1268,7 @@ describe('Mirror', () => { 20000, 1000, ); - expect(await context.mirrorContractClient.queryAllFailed()).toStrictEqual( - [], - ); + expect(await mirrorContractClient.queryAllFailed()).toStrictEqual([]); }); }); }); diff --git a/packages/base/Cargo.toml b/packages/base/Cargo.toml index 7afa3405..65cdfebe 100644 --- a/packages/base/Cargo.toml +++ b/packages/base/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -32,14 +30,13 @@ drop-puppeteer-base = { workspace = true } drop-helpers = { workspace = true } drop-macros = { workspace = true } drop-proto = { workspace = true } -cw721-base = { workspace = true } cw721 = { workspace = true } thiserror = { workspace = true } cw-ownable = { workspace = true } time = { workspace = true } optfield = { workspace = true } -astroport = { workspace = true } prost = { workspace = true } serde = { workspace = true } cw-utils = { workspace = true } semver = { workspace = true } +schemars = { workspace = true } diff --git a/packages/base/src/error/astroport_exchange_handler.rs b/packages/base/src/error/astroport_exchange_handler.rs deleted file mode 100644 index 00d07026..00000000 --- a/packages/base/src/error/astroport_exchange_handler.rs +++ /dev/null @@ -1,52 +0,0 @@ -use cosmwasm_std::{StdError, Uint128}; -use cw_ownable::OwnershipError; -use neutron_sdk::NeutronError; -use thiserror::Error; - -#[derive(Error, Debug, PartialEq)] -pub enum ContractError { - #[error("{0}")] - Std(#[from] StdError), - - #[error("{0}")] - NeutronError(#[from] NeutronError), - - #[error("{0}")] - OwnershipError(#[from] OwnershipError), - - #[error("unauthorized")] - Unauthorized, - - #[error("Max spread is zero")] - ZeroMaxSpread, - - #[error("Max spread is too big. Max: 0.1")] - MaxSpreadTooBig, - - #[error("Low balance to perform swap operation. Minimum: {min_amount}{denom}, current: {amount}{denom}")] - LowBalance { - min_amount: Uint128, - amount: Uint128, - denom: String, - }, - - #[error("Asset price query is failed {details}")] - AssetPriceQueryFailed { details: String }, - - #[error("Semver parsing error: {0}")] - SemVer(String), - - #[error("Can't migrate from {storage_contract_name} to {contract_name}")] - MigrationError { - storage_contract_name: String, - contract_name: String, - }, -} - -impl From for ContractError { - fn from(err: semver::Error) -> Self { - Self::SemVer(err.to_string()) - } -} - -pub type ContractResult = Result; diff --git a/packages/base/src/error/mod.rs b/packages/base/src/error/mod.rs index 036b4411..de212dd4 100644 --- a/packages/base/src/error/mod.rs +++ b/packages/base/src/error/mod.rs @@ -1,4 +1,3 @@ -pub mod astroport_exchange_handler; pub mod core; pub mod distribution; pub mod factory; diff --git a/packages/base/src/msg/astroport_exchange_handler.rs b/packages/base/src/msg/astroport_exchange_handler.rs deleted file mode 100644 index 6eb3e25c..00000000 --- a/packages/base/src/msg/astroport_exchange_handler.rs +++ /dev/null @@ -1,59 +0,0 @@ -use astroport::router::SwapOperation; -use cosmwasm_schema::{cw_serde, QueryResponses}; -use cosmwasm_std::{Decimal, Uint128}; -use cw_ownable::{cw_ownable_execute, cw_ownable_query}; - -#[cw_ownable_execute] -#[cw_serde] -pub enum ExecuteMsg { - UpdateConfig { - core_contract: Option, - price_provider_contract: Option, - cron_address: Option, - router_contract: Option, - pair_contract: Option, - from_denom: Option, - min_rewards: Option, - max_spread: Option, - }, - UpdateSwapOperations { - operations: Option>, - }, - Exchange {}, -} - -#[cw_ownable_query] -#[cw_serde] -#[derive(QueryResponses)] -pub enum QueryMsg { - #[returns(ConfigResponse)] - Config {}, -} - -#[cw_serde] -pub struct ConfigResponse { - pub price_provider_contract: String, - pub core_contract: String, - pub cron_address: String, - pub router_contract: String, - pub pair_contract: String, - pub from_denom: String, - pub min_rewards: Uint128, - pub swap_operations: Option>, -} - -#[cw_serde] -pub struct InstantiateMsg { - pub owner: String, - pub core_contract: String, - pub cron_address: String, - pub router_contract: String, - pub price_provider_contract: String, - pub pair_contract: String, - pub from_denom: String, - pub min_rewards: Uint128, - pub max_spread: Decimal, -} - -#[cw_serde] -pub struct MigrateMsg {} diff --git a/packages/base/src/msg/mod.rs b/packages/base/src/msg/mod.rs index 4d7bcf73..3ef4107d 100644 --- a/packages/base/src/msg/mod.rs +++ b/packages/base/src/msg/mod.rs @@ -1,4 +1,3 @@ -pub mod astroport_exchange_handler; pub mod bond_provider; pub mod core; pub mod distribution; diff --git a/packages/base/src/msg/withdrawal_manager.rs b/packages/base/src/msg/withdrawal_manager.rs index f1f2b097..280d0a01 100644 --- a/packages/base/src/msg/withdrawal_manager.rs +++ b/packages/base/src/msg/withdrawal_manager.rs @@ -1,6 +1,6 @@ use crate::state::withdrawal_manager::Pause; use cosmwasm_schema::{cw_serde, QueryResponses}; -use cw721::Cw721ReceiveMsg; +use cw721::receiver::Cw721ReceiveMsg; use cw_ownable::{cw_ownable_execute, cw_ownable_query}; #[cw_serde] diff --git a/packages/base/src/msg/withdrawal_voucher.rs b/packages/base/src/msg/withdrawal_voucher.rs index 8b35830e..2a895bef 100644 --- a/packages/base/src/msg/withdrawal_voucher.rs +++ b/packages/base/src/msg/withdrawal_voucher.rs @@ -1,13 +1,15 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::Empty; -pub use cw721_base::{ContractError, InstantiateMsg as CW721InstantiateMsg, MinterResponse}; +pub use cw721::msg::Cw721InstantiateMsg as CW721InstantiateMsg; +pub use cw721::msg::MinterResponse; -use crate::state::withdrawal_voucher::Metadata; +use crate::state::withdrawal_voucher::{NftExtension, NftExtensionMsg}; -pub type Extension = Option; -pub type InstantiateMsg = CW721InstantiateMsg; -pub type ExecuteMsg = cw721_base::ExecuteMsg; -pub type QueryMsg = cw721_base::QueryMsg; +pub type Extension = Option; +pub type ExtensionMsg = Option; +pub type InstantiateMsg = CW721InstantiateMsg; +pub type ExecuteMsg = cw721::msg::Cw721ExecuteMsg; +pub type QueryMsg = cw721::msg::Cw721QueryMsg; #[cw_serde] pub struct MigrateMsg {} diff --git a/packages/base/src/state/astroport_exchange_handler.rs b/packages/base/src/state/astroport_exchange_handler.rs deleted file mode 100644 index 1753d3a9..00000000 --- a/packages/base/src/state/astroport_exchange_handler.rs +++ /dev/null @@ -1,19 +0,0 @@ -use astroport::router::SwapOperation; -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Decimal, Uint128}; -use cw_storage_plus::Item; - -#[cw_serde] -pub struct Config { - pub core_contract: String, - pub price_provider_contract: String, - pub cron_address: String, - pub router_contract: String, - pub pair_contract: String, - pub from_denom: String, - pub min_rewards: Uint128, - pub max_spread: Decimal, -} -pub const CONFIG: Item = Item::new("config"); - -pub const SWAP_OPERATIONS: Item> = Item::new("swap_operations"); diff --git a/packages/base/src/state/bond_providers.rs b/packages/base/src/state/bond_providers.rs index abd96ef2..a255c393 100644 --- a/packages/base/src/state/bond_providers.rs +++ b/packages/base/src/state/bond_providers.rs @@ -2,13 +2,13 @@ use crate::error::core::{ContractError, ContractResult}; use cosmwasm_std::{Addr, Empty, StdResult, Storage}; use cw_storage_plus::{Item, Map}; -pub struct BondProviders<'a> { - pub providers: Map<'a, Addr, Empty>, - pub next_provider_ptr: Item<'a, u64>, +pub struct BondProviders { + pub providers: Map, + pub next_provider_ptr: Item, } -impl<'a> BondProviders<'a> { - pub const fn new(storage_key: &'a str, pointer_storage_key: &'a str) -> Self { +impl BondProviders { + pub const fn new(storage_key: &'static str, pointer_storage_key: &'static str) -> Self { Self { providers: Map::new(storage_key), next_provider_ptr: Item::new(pointer_storage_key), diff --git a/packages/base/src/state/core.rs b/packages/base/src/state/core.rs index e9dccc8c..d5d66d23 100644 --- a/packages/base/src/state/core.rs +++ b/packages/base/src/state/core.rs @@ -92,7 +92,7 @@ impl<'a> IndexList for UnbondBatchIndexes<'a> { } } -pub fn unbond_batches_map<'a>() -> IndexedMap<'a, u128, UnbondBatch, UnbondBatchIndexes<'a>> { +pub fn unbond_batches_map<'a>() -> IndexedMap> { IndexedMap::new( "batches", UnbondBatchIndexes { diff --git a/packages/base/src/state/lsm_share_bond_provider.rs b/packages/base/src/state/lsm_share_bond_provider.rs index b148ace3..36bd090b 100644 --- a/packages/base/src/state/lsm_share_bond_provider.rs +++ b/packages/base/src/state/lsm_share_bond_provider.rs @@ -34,7 +34,8 @@ pub struct TxState { pub const TX_STATE: Item = Item::new("tx_state"); pub const CONFIG: Item = Item::new("config"); -pub const TOTAL_LSM_SHARES_REAL_AMOUNT: Item = Item::new("total_lsm_shares_real_amount_v0"); +pub const TOTAL_LSM_SHARES_REAL_AMOUNT: Item = + Item::new("total_lsm_shares_real_amount_v0"); /// (local_denom, (remote_denom, shares_amount, real_amount)) pub const PENDING_LSM_SHARES: Map = Map::new("pending_lsm_shares_v0"); diff --git a/packages/base/src/state/mod.rs b/packages/base/src/state/mod.rs index 7b4fbdd4..6795b7a0 100644 --- a/packages/base/src/state/mod.rs +++ b/packages/base/src/state/mod.rs @@ -1,4 +1,3 @@ -pub mod astroport_exchange_handler; pub mod bond_providers; pub mod core; pub mod factory; diff --git a/packages/base/src/state/puppeteer.rs b/packages/base/src/state/puppeteer.rs index b029183b..579c3039 100644 --- a/packages/base/src/state/puppeteer.rs +++ b/packages/base/src/state/puppeteer.rs @@ -179,7 +179,11 @@ impl PuppeteerReconstruct for BalancesAndDelegations { .atomics() / Uint256::from(DECIMAL_FRACTIONAL), ) - .map_err(|err| NeutronError::Std(StdError::ConversionOverflow { source: err }))? + .map_err(|err| { + NeutronError::Std(StdError::generic_err(format!( + "conversion overflow error: {err:?}" + ))) + })? .u128(); delegation_std.share_ratio = validator_tokens / delegator_shares; delegation_std.amount = cosmwasm_std::Coin::new(delegated_tokens, &denom); diff --git a/packages/base/src/state/puppeteer_initia.rs b/packages/base/src/state/puppeteer_initia.rs index b53f6c98..798cb0bb 100644 --- a/packages/base/src/state/puppeteer_initia.rs +++ b/packages/base/src/state/puppeteer_initia.rs @@ -137,7 +137,11 @@ impl PuppeteerReconstruct for BalancesAndDelegations { .atomics() / Uint256::from(DECIMAL_FRACTIONAL), ) - .map_err(|err| NeutronError::Std(StdError::ConversionOverflow { source: err }))? + .map_err(|err| { + NeutronError::Std(StdError::generic_err(format!( + "conversion overflow error: {err:?}" + ))) + })? .u128(); delegation_std.share_ratio = validator_tokens / delegator_shares; delegation_std.amount = cosmwasm_std::Coin::new(delegated_tokens, denom); diff --git a/packages/base/src/state/withdrawal_manager.rs b/packages/base/src/state/withdrawal_manager.rs index 380d7acc..615918d5 100644 --- a/packages/base/src/state/withdrawal_manager.rs +++ b/packages/base/src/state/withdrawal_manager.rs @@ -9,12 +9,11 @@ pub struct Config { pub base_denom: String, } +pub type Cw721ReceiveMsg = cw721::receiver::Cw721ReceiveMsg; #[cw_serde] #[derive(Default)] pub struct Pause { pub receive_nft_withdraw: Interval, } - -pub type Cw721ReceiveMsg = cw721::Cw721ReceiveMsg; pub const PAUSE: Item = Item::new("pause"); pub const CONFIG: Item = Item::new("config"); diff --git a/packages/base/src/state/withdrawal_voucher.rs b/packages/base/src/state/withdrawal_voucher.rs index c634862e..b5629560 100644 --- a/packages/base/src/state/withdrawal_voucher.rs +++ b/packages/base/src/state/withdrawal_voucher.rs @@ -1,7 +1,12 @@ use cosmwasm_schema::cw_serde; -use cosmwasm_std::Uint128; +use cosmwasm_std::{Deps, Env, MessageInfo, Uint128}; +use cw721::error::Cw721ContractError; +use cw721::traits::Cw721CustomMsg; +use cw721::traits::Cw721State; +use cw721::traits::{Contains, StateFactory}; #[cw_serde] +#[derive(Default)] pub struct Trait { pub display_type: Option, pub trait_type: String, @@ -10,10 +15,87 @@ pub struct Trait { #[cw_serde] #[derive(Default)] -pub struct Metadata { +pub struct NftExtension { pub name: String, pub description: Option, pub attributes: Option>, pub batch_id: String, pub amount: Uint128, } + +impl Cw721State for NftExtension {} + +impl Contains for NftExtension { + fn contains(&self, other: &Self) -> bool { + if !other.name.is_empty() && self.name != other.name { + return false; + } + + if let Some(ref o_desc) = other.description { + if self.description.as_ref() != Some(o_desc) { + return false; + } + } + + if let Some(ref other_attrs) = other.attributes { + if let Some(ref self_attrs) = self.attributes { + for attr in other_attrs { + if !self_attrs.contains(attr) { + return false; + } + } + } else { + return false; + } + } + + if !other.batch_id.is_empty() && self.batch_id != other.batch_id { + return false; + } + + if other.amount != Uint128::zero() && self.amount != other.amount { + return false; + } + true + } +} + +#[cw_serde] +#[derive(Default)] +pub struct NftExtensionMsg { + pub name: String, + pub description: Option, + pub attributes: Option>, + pub batch_id: String, + pub amount: Uint128, +} + +impl Cw721CustomMsg for NftExtensionMsg {} + +impl StateFactory for NftExtensionMsg { + fn create( + &self, + _deps: Deps, + _env: &Env, + _info: Option<&MessageInfo>, + _current: Option<&NftExtension>, + ) -> Result { + Ok(NftExtension { + name: self.name.clone(), + description: self.description.clone(), + attributes: self.attributes.clone(), + batch_id: self.batch_id.clone(), + amount: self.amount, + }) + } + + fn validate( + &self, + _deps: Deps, + _env: &Env, + _info: Option<&MessageInfo>, + _current: Option<&NftExtension>, + ) -> Result<(), Cw721ContractError> { + Ok(()) + } +} diff --git a/packages/helpers/Cargo.toml b/packages/helpers/Cargo.toml index af677699..4e7842c2 100644 --- a/packages/helpers/Cargo.toml +++ b/packages/helpers/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] @@ -27,6 +25,7 @@ cosmos-sdk-proto = { workspace = true } cosmwasm-std = { workspace = true } serde-json-wasm = { workspace = true } neutron-sdk = { workspace = true } +neutron-std = { workspace = true } cosmwasm-schema = { workspace = true } thiserror = { workspace = true } cw-storage-plus = { workspace = true } @@ -36,3 +35,4 @@ prost = { workspace = true } sha3 = { workspace = true } hex = { workspace = true } once_cell = { workspace = true } +prost-types = "0.12.6" diff --git a/packages/helpers/src/fsm.rs b/packages/helpers/src/fsm.rs index 340ec369..387cb26e 100644 --- a/packages/helpers/src/fsm.rs +++ b/packages/helpers/src/fsm.rs @@ -8,13 +8,13 @@ pub struct Transition { pub to: T, } -pub struct Fsm<'a, T: 'static> { - pub state: Item<'a, T>, +pub struct Fsm { + pub state: Item, pub transitions: &'static [Transition], } -impl<'a, T: Serialize + DeserializeOwned + PartialEq> Fsm<'a, T> { - pub const fn new(storage_key: &'a str, transitions: &'static [Transition]) -> Self { +impl Fsm { + pub const fn new(storage_key: &'static str, transitions: &'static [Transition]) -> Self { Self { state: Item::new(storage_key), transitions, diff --git a/packages/helpers/src/ibc_client_state.rs b/packages/helpers/src/ibc_client_state.rs index b2b27d7c..899a0d17 100644 --- a/packages/helpers/src/ibc_client_state.rs +++ b/packages/helpers/src/ibc_client_state.rs @@ -1,107 +1,211 @@ +use cosmwasm_std::{Deps, StdError, StdResult}; +use neutron_sdk::bindings::query::NeutronQuery; use prost::Message; +use prost_types::{Any, Duration}; -use cosmwasm_schema::cw_serde; -use cosmwasm_std::{Deps, QueryRequest, StdError, StdResult, Uint64}; -use neutron_sdk::bindings::query::NeutronQuery; -// use schemars::JsonSchema; -// use serde::{Deserialize, Serialize}; //types::ProtobufAny +// These types are re‑defined here because cosmos_sdk_proto types +// don't derive DeserializeOwned, so we use Prost to decode the binary data. + +#[derive(Clone, Copy, Debug, PartialEq, Eq, ::prost::Enumeration)] +#[repr(i32)] +pub enum HashOp { + NoHash = 0, + Sha256 = 1, + Sha512 = 2, + Keccak = 3, + Ripemd160 = 4, +} -// XXX: cosmos_sdk_proto defines these structures for me, -// yet they don't derive serde::de::DeserializeOwned, -// so I have to redefine them here manually >:( +#[derive(Clone, Copy, Debug, PartialEq, Eq, ::prost::Enumeration)] +#[repr(i32)] +pub enum LengthOp { + NoPrefix = 0, + VarProto = 1, + VarRlp = 2, + Fixed = 3, +} -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct Fraction { - pub numerator: Uint64, - pub denominator: Uint64, + #[prost(uint64, tag = "1")] + pub numerator: u64, + #[prost(uint64, tag = "2")] + pub denominator: u64, } -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct InnerSpec { + #[prost(int32, repeated, tag = "1")] pub child_order: Vec, + #[prost(int32, tag = "2")] pub child_size: i32, + #[prost(int32, tag = "3")] pub min_prefix_length: i32, + #[prost(int32, tag = "4")] pub max_prefix_length: i32, - pub empty_child: Option>, - pub hash: String, + #[prost(bytes, tag = "5")] + pub empty_child: Vec, + #[prost(enumeration = "HashOp", tag = "6")] + pub hash: i32, } -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct LeafOp { - pub hash: String, - pub prehash_key: String, - pub prehash_value: String, - pub length: String, - pub prefix: String, + #[prost(enumeration = "HashOp", tag = "1")] + pub hash: i32, // Use i32 for the underlying representation; convert via HashOp::from_i32(...) + #[prost(enumeration = "HashOp", tag = "2")] + pub prehash_key: i32, + #[prost(enumeration = "HashOp", tag = "3")] + pub prehash_value: i32, + #[prost(enumeration = "LengthOp", tag = "4")] + pub length: i32, + #[prost(bytes, tag = "5")] + pub prefix: Vec, } -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ProofSpec { + #[prost(message, optional, tag = "1")] pub leaf_spec: Option, + #[prost(message, optional, tag = "2")] pub inner_spec: Option, + #[prost(int32, tag = "3")] pub max_depth: i32, + #[prost(int32, tag = "4")] pub min_depth: i32, + #[prost(bool, tag = "5")] pub prehash_key_before_comparison: bool, } -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ClientState { - #[serde(rename = "@type")] - pub type_url: String, + // We omit the original "@type" renaming here; you may choose to include it if needed. + #[prost(string, tag = "1")] pub chain_id: String, - pub trust_level: Fraction, - pub trusting_period: Option, - pub unbonding_period: Option, - pub max_clock_drift: Option, + #[prost(message, tag = "2")] + pub trust_level: Option, + #[prost(message, tag = "3")] + pub trusting_period: Option, + #[prost(message, tag = "4")] + pub unbonding_period: Option, + #[prost(message, tag = "5")] + pub max_clock_drift: Option, + #[prost(message, tag = "6")] pub frozen_height: Option, + #[prost(message, tag = "7")] pub latest_height: Option, + #[prost(message, repeated, tag = "8")] pub proof_specs: Vec, + #[prost(string, repeated, tag = "9")] pub upgrade_path: Vec, + // Deprecated fields; include them if necessary. + #[prost(bool, tag = "10")] pub allow_update_after_expiry: bool, + #[prost(bool, tag = "11")] pub allow_update_after_misbehaviour: bool, } -#[cw_serde] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct Height { - pub revision_number: Uint64, - pub revision_height: Uint64, + #[prost(uint64, tag = "1")] + pub revision_number: u64, + #[prost(uint64, tag = "2")] + pub revision_height: u64, } -#[cw_serde] +/// According to the IBC spec, IdentifiedClientState contains a google.protobuf.Any. +#[derive(Clone, PartialEq, ::prost::Message)] pub struct IdentifiedClientState { + #[prost(string, tag = "1")] pub client_id: String, - pub client_state: ClientState, + #[prost(message, optional, tag = "2")] + pub client_state: Option, } -#[cw_serde] + +/// The response to the ChannelClientState query. +#[derive(Clone, PartialEq, ::prost::Message)] pub struct ChannelClientStateResponse { + #[prost(message, optional, tag = "1")] pub identified_client_state: Option, + #[prost(bytes, optional, tag = "2")] pub proof: Option>, - pub proof_height: Height, + #[prost(message, optional, tag = "3")] + pub proof_height: Option, } +/// Queries the channel client state via gRPC. pub fn query_client_state( deps: &Deps, channel_id: String, port_id: String, ) -> StdResult { - let state = deps.querier - .query(&QueryRequest::Stargate { - path: "/ibc.core.channel.v1.Query/ChannelClientState".to_string(), - data: cosmos_sdk_proto::ibc::core::channel::v1::QueryChannelClientStateRequest { - port_id: port_id.clone(), - channel_id: channel_id.clone(), - } + let raw = deps + .querier + .query_grpc( + "/ibc.core.channel.v1.Query/ChannelClientState".to_string(), + cosmos_sdk_proto::ibc::core::channel::v1::QueryChannelClientStateRequest { + port_id: port_id.clone(), + channel_id: channel_id.clone(), + } .encode_to_vec() .into(), - }) - .map_err(|e| { - StdError::generic_err(format!( - "Query channel state for channel {channel_id} and port {port_id} failed: {e}, perhaps, this is wrong channel_id/port_id?" - )) - }); + ) + .map_err(|e| { + StdError::generic_err(format!( + "Query channel state for channel {} and port {} failed: {}, perhaps, this is wrong channel_id/port_id?", + channel_id, port_id, e + )) + })?; - deps.api - .debug(&format!("WASMDEBUG: query_client_state: {state:?}")); + let state = match ChannelClientStateResponse::decode(raw.as_slice()) { + Ok(s) => s, + Err(e) => { + deps.api + .debug(&format!("WASMDEBUG: failed to decode protobuf: {:?}", e)); + return Err(StdError::generic_err(format!( + "failed to decode protobuf: {:?}", + e + ))); + } + }; + + Ok(state) +} - state +pub fn extract_identified_client_state( + deps: &Deps, + state: ChannelClientStateResponse, +) -> StdResult { + if let Some(ref identified) = state.identified_client_state { + if let Some(ref any) = identified.client_state { + if any.type_url == "/ibc.lightclients.tendermint.v1.ClientState" { + let cs = ClientState::decode(any.value.as_slice()).map_err(|e| { + StdError::generic_err(format!( + "WASMDEBUG: failed to decode inner ClientState: {:?}", + e + )) + })?; + deps.api + .debug(&format!("WASMDEBUG: Decoded ClientState: {:?}", cs)); + return Ok(cs); + } else { + deps.api.debug(&format!( + "WASMDEBUG: Unexpected client_state type_url: {}", + any.type_url + )); + return Err(StdError::generic_err(format!( + "Unexpected client_state type_url: {}", + any.type_url + ))); + } + } else { + deps.api + .debug("WASMDEBUG: No client_state found in IdentifiedClientState"); + return Err(StdError::generic_err("No client_state found")); + } + } + + deps.api + .debug("WASMDEBUG: No identified_client_state found"); + Err(StdError::generic_err("No identified_client_state found")) } diff --git a/packages/helpers/src/ica.rs b/packages/helpers/src/ica.rs index f65aaa0f..54d31ebb 100644 --- a/packages/helpers/src/ica.rs +++ b/packages/helpers/src/ica.rs @@ -17,10 +17,10 @@ pub enum IcaState { }, } -pub struct Ica<'a>(Item<'a, IcaState>); +pub struct Ica(Item); -impl<'a> Ica<'a> { - pub const fn new(storage_key: &'a str) -> Self { +impl Ica { + pub const fn new(storage_key: &'static str) -> Self { Self(Item::new(storage_key)) } diff --git a/packages/helpers/src/icq.rs b/packages/helpers/src/icq.rs index e62323cb..828e207a 100644 --- a/packages/helpers/src/icq.rs +++ b/packages/helpers/src/icq.rs @@ -71,7 +71,7 @@ pub fn get_multiple_balances_keys( let balance_key = create_account_denom_balance_key(&addr, denom)?; keys.push(KVKey { path: BANK_STORE_KEY.to_string(), - key: Binary(balance_key), + key: Binary::new(balance_key), }); } Ok(keys) @@ -94,19 +94,19 @@ pub fn get_balance_and_delegations_keys( // // create KV key to get balance of the delegator keys.push(KVKey { path: BANK_STORE_KEY.to_string(), - key: Binary(balance_key), + key: Binary::new(balance_key), }); // create KV key to get BondDenom from staking module params if version_to_u32(sdk_version)? < version_to_u32("0.47.0")? { keys.push(KVKey { path: PARAMS_STORE_KEY.to_string(), - key: Binary(create_params_store_key(STAKING_STORE_KEY, KEY_BOND_DENOM)), + key: Binary::new(create_params_store_key(STAKING_STORE_KEY, KEY_BOND_DENOM)), }); } else { keys.push(KVKey { path: STAKING_STORE_KEY.to_string(), - key: Binary(vec![STAKING_PARAMS_KEY]), + key: Binary::new(vec![STAKING_PARAMS_KEY]), }); } @@ -116,13 +116,13 @@ pub fn get_balance_and_delegations_keys( // create delegation key to get delegation structure keys.push(KVKey { path: STAKING_STORE_KEY.to_string(), - key: Binary(create_delegation_key(&delegator_addr, &val_addr)?), + key: Binary::new(create_delegation_key(&delegator_addr, &val_addr)?), }); // create validator key to get validator structure keys.push(KVKey { path: STAKING_STORE_KEY.to_string(), - key: Binary(create_validator_key(&val_addr)?), + key: Binary::new(create_validator_key(&val_addr)?), }) } diff --git a/packages/helpers/src/icq_initia.rs b/packages/helpers/src/icq_initia.rs index e2d0756f..3407b660 100644 --- a/packages/helpers/src/icq_initia.rs +++ b/packages/helpers/src/icq_initia.rs @@ -36,7 +36,7 @@ pub fn get_balance_and_delegations_keys( // // create KV key to get balance of the delegator keys.push(KVKey { path: "move".to_string(), - key: Binary(balance_key.to_vec()), + key: Binary::new(balance_key.to_vec()), }); for v in validators { @@ -45,13 +45,13 @@ pub fn get_balance_and_delegations_keys( // create delegation key to get delegation structure keys.push(KVKey { path: store_key.to_string(), - key: Binary(create_delegation_key(&delegator_addr, &val_addr)?), + key: Binary::new(create_delegation_key(&delegator_addr, &val_addr)?), }); // create validator key to get validator structure keys.push(KVKey { path: store_key.to_string(), - key: Binary(create_validator_key(&val_addr)?), + key: Binary::new(create_validator_key(&val_addr)?), }) } diff --git a/packages/helpers/src/query_id.rs b/packages/helpers/src/query_id.rs index 9237f2fa..32a93b01 100644 --- a/packages/helpers/src/query_id.rs +++ b/packages/helpers/src/query_id.rs @@ -1,17 +1,21 @@ use cosmwasm_std::{StdError, StdResult, SubMsgResult}; -use neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse; -use serde_json_wasm::from_slice; +use neutron_sdk::interchain_txs::helpers::decode_message_response; +use neutron_std::types::neutron::interchainqueries::MsgRegisterInterchainQueryResponse; pub fn get_query_id(msg_result: SubMsgResult) -> StdResult { - let res: MsgRegisterInterchainQueryResponse = from_slice( - msg_result - .into_result() - .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), - ) - .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; - - Ok(res.id) + msg_result + .into_result() + .map_err(StdError::generic_err)? + .msg_responses + .first() + .ok_or_else(|| StdError::generic_err("no msg_response found in result")) + .and_then(|msg_response| { + decode_message_response::( + &msg_response.value.to_vec(), + ) + .map_err(|e| { + StdError::generic_err(format!("failed to decode response in query_id: {e:?}")) + }) + }) + .map(|res| res.id) } diff --git a/packages/helpers/src/reply.rs b/packages/helpers/src/reply.rs index bcfab52d..06bcdfea 100644 --- a/packages/helpers/src/reply.rs +++ b/packages/helpers/src/reply.rs @@ -1,16 +1,15 @@ use cosmwasm_std::{StdError, StdResult, SubMsgResult}; -use neutron_sdk::bindings::msg::MsgRegisterInterchainQueryResponse; +use neutron_std::types::neutron::interchainqueries::MsgRegisterInterchainQueryResponse; pub fn get_query_id(msg_result: SubMsgResult) -> StdResult { - let res: MsgRegisterInterchainQueryResponse = serde_json_wasm::from_slice( - msg_result - .into_result() - .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), - ) - .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; - - Ok(res.id) + msg_result + .into_result() + .map_err(StdError::generic_err)? + .data + .ok_or_else(|| StdError::generic_err("no result")) + .and_then(|data| { + decode_message_response::(&data.to_vec()) + .map_err(|e| StdError::generic_err(format!("failed to decode response in get_query_id: {e:?}"))) + }) + .map(|res| res.id) } diff --git a/packages/helpers/src/testing.rs b/packages/helpers/src/testing.rs index 98e44c8a..356e19a7 100644 --- a/packages/helpers/src/testing.rs +++ b/packages/helpers/src/testing.rs @@ -8,8 +8,8 @@ use cosmwasm_schema::cw_serde; use cosmwasm_std::testing::{MockApi, MockQuerier, MockStorage}; use cosmwasm_std::{ from_json, to_json_binary, AllBalanceResponse, Api, BalanceResponse, BankQuery, Binary, Coin, - ContractResult, CustomQuery, OwnedDeps, Querier, QuerierResult, QueryRequest, SystemError, - SystemResult, Uint128, + ContractResult, CustomQuery, GrpcQuery, OwnedDeps, Querier, QuerierResult, QueryRequest, + SystemError, SystemResult, Uint128, }; use neutron_sdk::bindings::query::NeutronQuery; @@ -92,9 +92,11 @@ impl Api for CustomMockApi { pub fn mock_dependencies_with_api( contract_balance: &[Coin], ) -> OwnedDeps { - let contract_addr = MOCK_CONTRACT_ADDR; - let custom_querier: WasmMockQuerier = - WasmMockQuerier::new(MockQuerier::new(&[(contract_addr, contract_balance)])); + let contract_addr = MockApi::default().addr_make(MOCK_CONTRACT_ADDR); + let custom_querier: WasmMockQuerier = WasmMockQuerier::new(MockQuerier::new(&[( + contract_addr.as_str(), + contract_balance, + )])); OwnedDeps { storage: MockStorage::default(), @@ -107,9 +109,11 @@ pub fn mock_dependencies_with_api( pub fn mock_dependencies( contract_balance: &[Coin], ) -> OwnedDeps { - let contract_addr = MOCK_CONTRACT_ADDR; - let custom_querier: WasmMockQuerier = - WasmMockQuerier::new(MockQuerier::new(&[(contract_addr, contract_balance)])); + let contract_addr = MockApi::default().addr_make(MOCK_CONTRACT_ADDR); + let custom_querier: WasmMockQuerier = WasmMockQuerier::new(MockQuerier::new(&[( + contract_addr.as_str(), + contract_balance, + )])); OwnedDeps { storage: MockStorage::default(), @@ -161,6 +165,7 @@ impl WasmMockQuerier { self.base.handle_query(request) } } + #[allow(deprecated)] BankQuery::AllBalances { address, .. } => { let custom_balance = self.bank_query_responses.get(address); @@ -186,22 +191,21 @@ impl WasmMockQuerier { SystemResult::Ok( ContractResult::Ok( (*self.ibc_query_responses.get(&channel_port).unwrap_or( - &to_json_binary(&cosmwasm_std::ChannelResponse { channel: None }) - .unwrap(), + &to_json_binary(&cosmwasm_std::ChannelResponse::new(None)).unwrap(), )) .clone(), ) .clone(), ) } - QueryRequest::Stargate { path, data } => { + QueryRequest::Grpc(GrpcQuery { path, data }) => { let mut stargate_query_responses = self.stargate_query_responses.borrow_mut(); let responses = match stargate_query_responses.get_mut(path) { None => Err(SystemError::UnsupportedRequest { kind: format!( "Stargate query is not mocked. Path: {} Data {}", path, - String::from_utf8(data.0.clone()).unwrap() + String::from_utf8(data.as_slice().to_vec()).unwrap() ), }), Some(responses) => Ok(responses), @@ -212,7 +216,7 @@ impl WasmMockQuerier { kind: format!( "Stargate query is not mocked. Path: {} Data {}", path, - String::from_utf8(data.0.clone()).unwrap() + String::from_utf8(data.as_slice().to_vec()).unwrap() ), }); } @@ -255,7 +259,7 @@ impl WasmMockQuerier { kind: format!( "Wasm contract {} query is not mocked. Query {}", contract_addr, - String::from_utf8(msg.0.clone()).unwrap() + String::from_utf8(msg.as_slice().to_vec()).unwrap() ), }), Some(responses) => Ok(responses), @@ -266,7 +270,7 @@ impl WasmMockQuerier { kind: format!( "Wasm contract {} query is not mocked. Query {}", contract_addr, - String::from_utf8(msg.0.clone()).unwrap() + String::from_utf8(msg.as_slice().to_vec()).unwrap() ), }); } @@ -438,54 +442,70 @@ impl WasmMockQuerier { } pub fn mock_state_query(deps: &mut OwnedDeps) { + let factory_contract_address = deps.api.addr_make("factory_contract"); + let core_contract_address = deps.api.addr_make("core_contract"); + let token_contract_address = deps.api.addr_make("token_contract"); + let withdrawal_voucher_contract_address = deps.api.addr_make("withdrawal_voucher_contract"); + let withdrawal_manager_contract_address = deps.api.addr_make("withdrawal_manager_contract"); + let strategy_contract_address = deps.api.addr_make("strategy_contract"); + let validators_set_contract_address = deps.api.addr_make("validators_set_contract"); + let distribution_contract_address = deps.api.addr_make("distribution_contract"); + let puppeteer_contract_address = deps.api.addr_make("puppeteer_contract"); + let rewards_manager_contract_address = deps.api.addr_make("rewards_manager_contract"); + let rewards_pump_contract_address = deps.api.addr_make("rewards_pump_contract"); + let splitter_contract_address = deps.api.addr_make("splitter_contract"); + let lsm_share_bond_provider_contract_address = + deps.api.addr_make("lsm_share_bond_provider_contract"); + let native_bond_provider_contract_address = deps.api.addr_make("native_bond_provider_contract"); + deps.querier - .add_wasm_query_response("factory_contract", |_| { + .add_wasm_query_response(factory_contract_address.as_str(), move |_| { let contracts = HashMap::from([ - ("core_contract".to_string(), "core_contract".to_string()), - ("token_contract".to_string(), "token_contract".to_string()), + ("core_contract".to_string(), core_contract_address.clone()), + ("token_contract".to_string(), token_contract_address.clone()), ( "withdrawal_voucher_contract".to_string(), - "withdrawal_voucher_contract".to_string(), + withdrawal_voucher_contract_address.clone(), ), ( "withdrawal_manager_contract".to_string(), - "withdrawal_manager_contract".to_string(), + withdrawal_manager_contract_address.clone(), ), ( "strategy_contract".to_string(), - "strategy_contract".to_string(), + strategy_contract_address.clone(), ), ( "validators_set_contract".to_string(), - "validators_set_contract".to_string(), + validators_set_contract_address.clone(), ), ( "distribution_contract".to_string(), - "distribution_contract".to_string(), + distribution_contract_address.clone(), ), ( "puppeteer_contract".to_string(), - "puppeteer_contract".to_string(), + puppeteer_contract_address.clone(), ), ( "rewards_manager_contract".to_string(), - "rewards_manager_contract".to_string(), + rewards_manager_contract_address.clone(), ), ( "rewards_pump_contract".to_string(), - "rewards_pump_contract".to_string(), + rewards_pump_contract_address.clone(), ), ( "splitter_contract".to_string(), - "splitter_contract".to_string(), + splitter_contract_address.clone(), ), ( "lsm_share_bond_provider_contract".to_string(), - "lsm_share_bond_provider_contract".to_string(), + lsm_share_bond_provider_contract_address.clone(), ), ( "native_bond_provider_contract".to_string(), - "native_bond_provider_contract".to_string(), + native_bond_provider_contract_address.clone(), ), ]); cosmwasm_std::ContractResult::Ok(to_json_binary(&contracts).unwrap()) diff --git a/packages/proto/Cargo.toml b/packages/proto/Cargo.toml index 87ccda61..92adc687 100644 --- a/packages/proto/Cargo.toml +++ b/packages/proto/Cargo.toml @@ -17,8 +17,6 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] grpc = [] diff --git a/packages/puppeteer-base/Cargo.toml b/packages/puppeteer-base/Cargo.toml index 25b76715..26d781ae 100644 --- a/packages/puppeteer-base/Cargo.toml +++ b/packages/puppeteer-base/Cargo.toml @@ -17,14 +17,13 @@ exclude = [ crate-type = ["cdylib", "rlib"] [features] -# for more explicit tests, cargo test --features=backtraces -backtraces = ["cosmwasm-std/backtraces"] # use library feature to disable all instantiate/execute/query exports library = [] [dependencies] cosmos-sdk-proto = { workspace = true } neutron-sdk = { workspace = true } +neutron-std = { workspace = true } prost = { workspace = true } prost-types = { workspace = true } thiserror = { workspace = true } diff --git a/packages/puppeteer-base/src/peripheral_hook.rs b/packages/puppeteer-base/src/peripheral_hook.rs index f0ebf2cf..0767154a 100644 --- a/packages/puppeteer-base/src/peripheral_hook.rs +++ b/packages/puppeteer-base/src/peripheral_hook.rs @@ -62,7 +62,7 @@ pub enum Transaction { validator_from: String, validator_to: String, denom: String, - amount: u128, + amount: Uint128, }, WithdrawReward { interchain_account_id: String, @@ -72,7 +72,7 @@ pub enum Transaction { interchain_account_id: String, validator: String, denom: String, - amount: u128, + amount: Uint128, }, RedeemShares { items: Vec, @@ -85,8 +85,8 @@ pub enum Transaction { }, IBCTransfer { denom: String, - amount: u128, - real_amount: u128, + amount: Uint128, + real_amount: Uint128, recipient: String, reason: IBCTransferReason, }, diff --git a/packages/puppeteer-base/src/reply.rs b/packages/puppeteer-base/src/reply.rs index 0515ecc7..d5ce936a 100644 --- a/packages/puppeteer-base/src/reply.rs +++ b/packages/puppeteer-base/src/reply.rs @@ -4,7 +4,8 @@ use crate::{ }; use cosmwasm_std::{attr, DepsMut, Reply, Response, StdError, StdResult}; use drop_helpers::{answer::response, query_id::get_query_id}; -use neutron_sdk::bindings::msg::{MsgIbcTransferResponse, MsgSubmitTxResponse}; +use neutron_sdk::interchain_txs::helpers::decode_message_response; +use neutron_std::types::neutron::interchaintxs::v1::MsgSubmitTxResponse; use serde::{de::DeserializeOwned, Serialize}; impl<'a, T, U, Z> PuppeteerBase<'a, T, U, Z> @@ -76,15 +77,21 @@ where } pub fn submit_tx_reply(&self, deps: DepsMut, msg: Reply) -> StdResult { - let resp: MsgSubmitTxResponse = serde_json_wasm::from_slice( - msg.result + deps.api + .debug(format!("WASMDEBUG: submit_tx_reply; resp: {msg:?}").as_str()); + + let resp: MsgSubmitTxResponse = decode_message_response( + &msg.result .into_result() .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), + .msg_responses + .first() + .ok_or_else(|| StdError::generic_err("no msg_responses found"))? + .value + .to_vec(), ) - .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; + .map_err(|e| StdError::generic_err(format!("failed to parse response: {:?}", e)))?; + deps.api .debug(format!("WASMDEBUG: prepare_sudo_payload received; resp: {resp:?}").as_str()); let seq_id = resp.sequence_id; @@ -101,15 +108,18 @@ where } pub fn submit_ibc_transfer_reply(&self, deps: DepsMut, msg: Reply) -> StdResult { - let resp: MsgIbcTransferResponse = serde_json_wasm::from_slice( - msg.result + let resp: MsgSubmitTxResponse = decode_message_response( + &msg.result .into_result() .map_err(StdError::generic_err)? - .data - .ok_or_else(|| StdError::generic_err("no result"))? - .as_slice(), + .msg_responses + .first() + .ok_or_else(|| StdError::generic_err("no msg_responses found"))? + .value + .to_vec(), ) - .map_err(|e| StdError::generic_err(format!("failed to parse response: {e:?}")))?; + .map_err(|e| StdError::generic_err(format!("failed to parse response: {:?}", e)))?; + deps.api .debug(format!("WASMDEBUG: prepare_sudo_payload received; resp: {resp:?}").as_str()); let seq_id = resp.sequence_id; diff --git a/packages/puppeteer-base/src/state.rs b/packages/puppeteer-base/src/state.rs index c80efb20..5534f40f 100644 --- a/packages/puppeteer-base/src/state.rs +++ b/packages/puppeteer-base/src/state.rs @@ -13,18 +13,18 @@ where U: Serialize + DeserializeOwned + Clone, Z: PuppeteerReconstruct + std::fmt::Debug + Serialize + Clone, { - pub config: Item<'a, T>, - pub ica: Ica<'a>, - pub recipient_transfers: Item<'a, Vec>, - pub transfer_channel_id: Item<'a, String>, - pub tx_state: Item<'a, TxState>, - pub kv_queries: Map<'a, u64, U>, - pub last_complete_delegations_and_balances_key: Item<'a, u64>, - pub delegations_and_balances: Map<'a, &'a u64, BalancesAndDelegationsState>, - pub delegations_and_balances_query_id_chunk: Map<'a, u64, u16>, // Map + pub config: Item, + pub ica: Ica, + pub recipient_transfers: Item>, + pub transfer_channel_id: Item, + pub tx_state: Item, + pub kv_queries: Map, + pub last_complete_delegations_and_balances_key: Item, + pub delegations_and_balances: Map<&'a u64, BalancesAndDelegationsState>, + pub delegations_and_balances_query_id_chunk: Map, // Map pub unbonding_delegations: - IndexedMap<'a, &'a str, UnbondingDelegation, UnbondingDelegationIndexes<'a>>, - pub unbonding_delegations_reply_id_storage: Map<'a, u16, UnbondingDelegation>, + IndexedMap<&'a str, UnbondingDelegation, UnbondingDelegationIndexes<'a>>, + pub unbonding_delegations_reply_id_storage: Map, } impl Default for PuppeteerBase<'static, T, U, Z> diff --git a/packages/puppeteer-base/src/sudo.rs b/packages/puppeteer-base/src/sudo.rs index 53c73746..ec57e7d3 100644 --- a/packages/puppeteer-base/src/sudo.rs +++ b/packages/puppeteer-base/src/sudo.rs @@ -103,7 +103,7 @@ where env: Env, query_id: u64, version: &str, - storage: cw_storage_plus::Item<'a, BalancesAndDelegationsState>, + storage: cw_storage_plus::Item>, ) -> NeutronResult> { let registered_query_result = get_raw_interchain_query_result(deps.as_ref(), query_id)?; let data = PuppeteerReconstruct::reconstruct( diff --git a/ts-client/lib/contractLib/dropAutoWithdrawer.d.ts b/ts-client/lib/contractLib/dropAutoWithdrawer.d.ts index 82d86eed..bafab87d 100644 --- a/ts-client/lib/contractLib/dropAutoWithdrawer.d.ts +++ b/ts-client/lib/contractLib/dropAutoWithdrawer.d.ts @@ -52,7 +52,6 @@ export interface BondingResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface InstantiateMsg { factory_contract: string; diff --git a/ts-client/lib/contractLib/dropCore.d.ts b/ts-client/lib/contractLib/dropCore.d.ts index e87b1a7f..54fea96e 100644 --- a/ts-client/lib/contractLib/dropCore.d.ts +++ b/ts-client/lib/contractLib/dropCore.d.ts @@ -47,7 +47,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -60,7 +60,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -78,9 +78,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -245,7 +245,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/lib/contractLib/dropFactory.d.ts b/ts-client/lib/contractLib/dropFactory.d.ts index 082c81ea..909f54c2 100644 --- a/ts-client/lib/contractLib/dropFactory.d.ts +++ b/ts-client/lib/contractLib/dropFactory.d.ts @@ -73,8 +73,9 @@ export type CosmosMsgFor_NeutronMsg = { stargate: { type_url: string; value: Binary; - [k: string]: unknown; }; +} | { + any: AnyMsg; } | { ibc: IbcMsg; } | { @@ -91,12 +92,10 @@ export type BankMsg = { send: { amount: Coin[]; to_address: string; - [k: string]: unknown; }; } | { burn: { amount: Coin[]; - [k: string]: unknown; }; }; /** @@ -116,7 +115,6 @@ export type NeutronMsg = { * *register_fee** is a fees required to be payed to register interchain account */ register_fee?: Coin[] | null; - [k: string]: unknown; }; } | { submit_tx: { @@ -144,7 +142,6 @@ export type NeutronMsg = { * *timeout** is a timeout in seconds after which the packet times out. */ timeout: number; - [k: string]: unknown; }; } | { register_interchain_query: { @@ -168,7 +165,6 @@ export type NeutronMsg = { * *update_period** is used to say how often the query must be updated. */ update_period: number; - [k: string]: unknown; }; } | { update_interchain_query: { @@ -188,7 +184,6 @@ export type NeutronMsg = { * *query_id** is the ID of the query we want to update. */ query_id: number; - [k: string]: unknown; }; } | { remove_interchain_query: { @@ -196,7 +191,6 @@ export type NeutronMsg = { * *query_id** is ID of the query we want to remove. */ query_id: number; - [k: string]: unknown; }; } | { ibc_transfer: { @@ -209,30 +203,25 @@ export type NeutronMsg = { timeout_height: RequestPacketTimeoutHeight; timeout_timestamp: number; token: Coin; - [k: string]: unknown; }; } | { submit_admin_proposal: { admin_proposal: AdminProposal; - [k: string]: unknown; }; } | { create_denom: { subdenom: string; - [k: string]: unknown; }; } | { change_admin: { denom: string; new_admin_address: string; - [k: string]: unknown; }; } | { mint_tokens: { amount: Uint128; denom: string; mint_to_address: string; - [k: string]: unknown; }; } | { burn_tokens: { @@ -242,13 +231,11 @@ export type NeutronMsg = { */ burn_from_address: string; denom: string; - [k: string]: unknown; }; } | { set_before_send_hook: { contract_addr: string; denom: string; - [k: string]: unknown; }; } | { force_transfer: { @@ -256,7 +243,6 @@ export type NeutronMsg = { denom: string; transfer_from_address: string; transfer_to_address: string; - [k: string]: unknown; }; } | { set_denom_metadata: { @@ -292,7 +278,6 @@ export type NeutronMsg = { * **uri_hash** is a sha256 hash of a document pointed by URI. It's used to verify that the document didn't change. Optional. */ uri_hash: string; - [k: string]: unknown; }; } | { add_schedule: { @@ -308,17 +293,14 @@ export type NeutronMsg = { * period in blocks with which `msgs` will be executed */ period: number; - [k: string]: unknown; }; } | { remove_schedule: { name: string; - [k: string]: unknown; }; } | { resubmit_failure: { failure_id: number; - [k: string]: unknown; }; } | { dex: DexMsg; @@ -389,7 +371,6 @@ export type DexMsg = { * Denom for the opposing side of the deposit */ token_b: string; - [k: string]: unknown; }; } | { withdrawal: { @@ -417,7 +398,6 @@ export type DexMsg = { * Denom for the opposing side of the deposit */ token_b: string; - [k: string]: unknown; }; } | { place_limit_order: { @@ -429,6 +409,10 @@ export type DexMsg = { * Expiration time for order. Only valid for GOOD_TIL_TIME limit orders */ expiration_time?: number | null; + /** + * Accepts standard decimals and decimals with scientific notation (ie. 1234.23E-7) + */ + limit_sell_price: string; /** * Maximum amount of TokenB can be bought. For everything except JUST_IN_TIME OrderType */ @@ -453,7 +437,6 @@ export type DexMsg = { * Token being “bought” */ token_out: string; - [k: string]: unknown; }; } | { withdraw_filled_limit_order: { @@ -461,7 +444,6 @@ export type DexMsg = { * TrancheKey for the target limit order */ tranche_key: string; - [k: string]: unknown; }; } | { cancel_limit_order: { @@ -469,7 +451,6 @@ export type DexMsg = { * TrancheKey for the target limit order */ tranche_key: string; - [k: string]: unknown; }; } | { multi_hop_swap: { @@ -493,7 +474,6 @@ export type DexMsg = { * Array of possible routes */ routes: MultiHopRoute[]; - [k: string]: unknown; }; }; export type LimitOrderType = "GOOD_TIL_CANCELLED" | "FILL_OR_KILL" | "IMMEDIATE_OR_CANCEL" | "JUST_IN_TIME" | "GOOD_TIL_TIME"; @@ -506,20 +486,17 @@ export type StakingMsg = { delegate: { amount: Coin; validator: string; - [k: string]: unknown; }; } | { undelegate: { amount: Coin; validator: string; - [k: string]: unknown; }; } | { redelegate: { amount: Coin; dst_validator: string; src_validator: string; - [k: string]: unknown; }; }; /** @@ -533,7 +510,6 @@ export type DistributionMsg = { * The `withdraw_address` */ address: string; - [k: string]: unknown; }; } | { withdraw_delegator_reward: { @@ -541,7 +517,13 @@ export type DistributionMsg = { * The `validator_address` */ validator: string; - [k: string]: unknown; + }; +} | { + fund_community_pool: { + /** + * The amount to spend + */ + amount: Coin[]; }; }; /** @@ -557,6 +539,14 @@ export type IbcMsg = { * existing channel to send the tokens over */ channel_id: string; + /** + * An optional memo. See the blog post ["Moving Beyond Simple Token Transfers"](https://medium.com/the-interchain-foundation/moving-beyond-simple-token-transfers-d42b2b1dc29b) for more information. + * + * There is no difference between setting this to `None` or an empty string. + * + * This field is only supported on chains with CosmWasm >= 2.0 and silently ignored on older chains. If you need support for both 1.x and 2.x chain with the same codebase, it is recommended to use `CosmosMsg::Stargate` with a custom MsgTransfer protobuf encoder instead. + */ + memo?: string | null; /** * when packet times out, measured on remote chain */ @@ -565,7 +555,6 @@ export type IbcMsg = { * address on the remote chain to receive these tokens */ to_address: string; - [k: string]: unknown; }; } | { send_packet: { @@ -575,12 +564,10 @@ export type IbcMsg = { * when packet times out, measured on remote chain */ timeout: IbcTimeout; - [k: string]: unknown; }; } | { close_channel: { channel_id: string; - [k: string]: unknown; }; }; /** @@ -596,7 +583,6 @@ export type WasmMsg = { * msg is the json-encoded ExecuteMsg struct (as raw Binary) */ msg: Binary; - [k: string]: unknown; }; } | { instantiate: { @@ -613,7 +599,6 @@ export type WasmMsg = { * msg is the JSON-encoded InstantiateMsg struct (as raw Binary) */ msg: Binary; - [k: string]: unknown; }; } | { instantiate2: { @@ -631,7 +616,6 @@ export type WasmMsg = { */ msg: Binary; salt: Binary; - [k: string]: unknown; }; } | { migrate: { @@ -644,18 +628,15 @@ export type WasmMsg = { * the code_id of the new logic to place in the given contract */ new_code_id: number; - [k: string]: unknown; }; } | { update_admin: { admin: string; contract_addr: string; - [k: string]: unknown; }; } | { clear_admin: { contract_addr: string; - [k: string]: unknown; }; }; /** @@ -669,7 +650,7 @@ export type WasmMsg = { * * ``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); use cosmwasm_std::{GovMsg, VoteOption}; * - * #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, vote: VoteOption::Yes, })) } ``` + * #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, option: VoteOption::Yes, })) } ``` * * Cast a weighted vote: * @@ -679,20 +660,18 @@ export type WasmMsg = { */ export type GovMsg = { vote: { - proposal_id: number; /** * The vote option. * - * This should be called "option" for consistency with Cosmos SDK. Sorry for that. See . + * This used to be called "vote", but was changed for consistency with Cosmos SDK. */ - vote: VoteOption; - [k: string]: unknown; + option: VoteOption; + proposal_id: number; }; } | { vote_weighted: { options: WeightedVoteOption[]; proposal_id: number; - [k: string]: unknown; }; }; export type VoteOption = "yes" | "no" | "abstain" | "no_with_veto"; @@ -745,7 +724,6 @@ export interface OwnershipForString { pending_owner?: string | null; } export interface MapOfString { - [k: string]: string; } export interface ConfigOptional { base_denom?: string | null; @@ -775,7 +753,6 @@ export interface AdminExecuteArgs { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * IbcFee defines struct for fees that refund the relayer for `SudoMsg` messages submission. Unused fee kind will be returned back to message sender. Please refer to these links for more information: IBC transaction structure - General mechanics of fee payments - @@ -793,7 +770,6 @@ export interface IbcFee { * *timeout_fee** amount of coins to refund relayer for submitting timeout message for a particular IBC packet. */ timeout_fee: Coin[]; - [k: string]: unknown; } /** * Type for wrapping any protobuf message @@ -807,7 +783,6 @@ export interface ProtobufAny { * *value** must be a valid serialized protocol buffer of the above specified type */ value: Binary; - [k: string]: unknown; } /** * Describes a KV key for which you want to get value from the storage on remote chain @@ -821,12 +796,10 @@ export interface KVKey { * *path** is a path to the storage (storage prefix) where you want to read value by key (usually name of cosmos-packages module: 'staking', 'bank', etc.) */ path: string; - [k: string]: unknown; } export interface RequestPacketTimeoutHeight { revision_height?: number | null; revision_number?: number | null; - [k: string]: unknown; } /** * ParamChangeProposal defines the struct for single parameter change proposal. @@ -844,7 +817,6 @@ export interface ParamChangeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * ParamChange defines the struct for parameter change request. @@ -862,9 +834,9 @@ export interface ParamChange { * *value** is a new value for given parameter. Non unique. */ value: string; - [k: string]: unknown; } /** + * @deprecated * UpgradeProposal defines the struct for IBC upgrade proposal. */ export interface UpgradeProposal { @@ -884,7 +856,6 @@ export interface UpgradeProposal { * *upgraded_client_state** is an upgraded client state. */ upgraded_client_state: ProtobufAny; - [k: string]: unknown; } /** * Plan defines the struct for planned upgrade. @@ -902,9 +873,9 @@ export interface Plan { * *name** is a name for the upgrade */ name: string; - [k: string]: unknown; } /** + * @deprecated * ClientUpdateProposal defines the struct for client update proposal. */ export interface ClientUpdateProposal { @@ -924,7 +895,6 @@ export interface ClientUpdateProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * ProposalExecuteMessage defines the struct for sdk47 compatible admin proposal. @@ -934,7 +904,6 @@ export interface ProposalExecuteMessage { * *message** is a json representing an sdk message passed to admin module to execute. */ message: string; - [k: string]: unknown; } /** * @deprecated @@ -953,7 +922,6 @@ export interface SoftwareUpgradeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -968,7 +936,6 @@ export interface CancelSoftwareUpgradeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -987,7 +954,6 @@ export interface PinCodesProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1006,7 +972,6 @@ export interface UnpinCodesProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1029,7 +994,6 @@ export interface SudoContractProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1052,7 +1016,6 @@ export interface UpdateAdminProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1071,7 +1034,6 @@ export interface ClearAdminProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * Replicates the cosmos-sdk bank module DenomUnit type @@ -1080,7 +1042,6 @@ export interface DenomUnit { aliases: string[]; denom: string; exponent: number; - [k: string]: unknown; } /** * MsgExecuteContract defines a call to the contract execution @@ -1094,19 +1055,22 @@ export interface MsgExecuteContract { * *msg** is a contract call message */ msg: string; - [k: string]: unknown; } export interface DepositOption { disable_swap: boolean; - [k: string]: unknown; } export interface PrecDec { i: string; - [k: string]: unknown; } export interface MultiHopRoute { hops: string[]; - [k: string]: unknown; +} +/** + * A message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md) + */ +export interface AnyMsg { + type_url: string; + value: Binary; } /** * In IBC each package must set at least one type of timeout: the timestamp or the block height. Using this rather complex enum instead of two timeout fields we ensure that at least one timeout is set. @@ -1114,7 +1078,6 @@ export interface MultiHopRoute { export interface IbcTimeout { block?: IbcTimeoutBlock | null; timestamp?: Timestamp | null; - [k: string]: unknown; } /** * IBCTimeoutHeight Height is a monotonically increasing data type that can be compared against another Height for the purposes of updating and freezing clients. Ordering is (revision_number, timeout_height) @@ -1128,12 +1091,10 @@ export interface IbcTimeoutBlock { * the version that the client is currently on (e.g. after resetting the chain this could increment 1 as height drops to 0) */ revision: number; - [k: string]: unknown; } export interface WeightedVoteOption { option: VoteOption; weight: Decimal; - [k: string]: unknown; } export interface InstantiateMsg { base_denom: string; diff --git a/ts-client/lib/contractLib/dropHookTester.d.ts b/ts-client/lib/contractLib/dropHookTester.d.ts index 9e027ce1..bd923d95 100644 --- a/ts-client/lib/contractLib/dropHookTester.d.ts +++ b/ts-client/lib/contractLib/dropHookTester.d.ts @@ -9,7 +9,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -22,7 +22,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -40,9 +40,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -112,7 +112,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/lib/contractLib/dropLsmShareBondProvider.d.ts b/ts-client/lib/contractLib/dropLsmShareBondProvider.d.ts index 99a6c91d..c59f80ed 100644 --- a/ts-client/lib/contractLib/dropLsmShareBondProvider.d.ts +++ b/ts-client/lib/contractLib/dropLsmShareBondProvider.d.ts @@ -56,7 +56,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -69,7 +69,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -87,9 +87,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -213,7 +213,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/lib/contractLib/dropMirror.d.ts b/ts-client/lib/contractLib/dropMirror.d.ts index c5906977..cef6df2d 100644 --- a/ts-client/lib/contractLib/dropMirror.d.ts +++ b/ts-client/lib/contractLib/dropMirror.d.ts @@ -73,7 +73,6 @@ export interface FailedReceiverResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface Config { core_contract: string; diff --git a/ts-client/lib/contractLib/dropNativeBondProvider.d.ts b/ts-client/lib/contractLib/dropNativeBondProvider.d.ts index 08cf3d56..14e6c128 100644 --- a/ts-client/lib/contractLib/dropNativeBondProvider.d.ts +++ b/ts-client/lib/contractLib/dropNativeBondProvider.d.ts @@ -55,7 +55,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -68,7 +68,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -86,9 +86,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -225,7 +225,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/lib/contractLib/dropNativeSyncBondProvider.d.ts b/ts-client/lib/contractLib/dropNativeSyncBondProvider.d.ts index bdb2bfa3..1b9ff5f3 100644 --- a/ts-client/lib/contractLib/dropNativeSyncBondProvider.d.ts +++ b/ts-client/lib/contractLib/dropNativeSyncBondProvider.d.ts @@ -41,7 +41,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -54,7 +54,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -72,9 +72,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -219,7 +219,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/lib/contractLib/dropProviderProposalsPoc.d.ts b/ts-client/lib/contractLib/dropProviderProposalsPoc.d.ts index 589ed56c..bc2e6fe4 100644 --- a/ts-client/lib/contractLib/dropProviderProposalsPoc.d.ts +++ b/ts-client/lib/contractLib/dropProviderProposalsPoc.d.ts @@ -57,7 +57,6 @@ export interface Proposal { total_deposit: Coin[]; voting_end_time?: number | null; voting_start_time?: number | null; - [k: string]: unknown; } /** * TallyResult defines a standard tally for a governance proposal. @@ -67,12 +66,10 @@ export interface TallyResult { no: Uint128; no_with_veto: Uint128; yes: Uint128; - [k: string]: unknown; } export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * Proposal vote defines the core field members of a governance proposal votes. @@ -81,7 +78,6 @@ export interface ProposalVote { options: WeightedVoteOption[]; proposal_id: number; voter: string; - [k: string]: unknown; } /** * Proposal vote option defines the members of a governance proposal vote option. @@ -89,7 +85,6 @@ export interface ProposalVote { export interface WeightedVoteOption { option: number; weight: string; - [k: string]: unknown; } export interface ProposalInfo1 { is_spam: boolean; diff --git a/ts-client/lib/contractLib/dropPump.d.ts b/ts-client/lib/contractLib/dropPump.d.ts index b8ec2bda..cd3765e7 100644 --- a/ts-client/lib/contractLib/dropPump.d.ts +++ b/ts-client/lib/contractLib/dropPump.d.ts @@ -116,7 +116,6 @@ export interface PushArgs { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface RefundArgs { coins: Coin[]; diff --git a/ts-client/lib/contractLib/dropPuppeteer.d.ts b/ts-client/lib/contractLib/dropPuppeteer.d.ts index 28697ccd..c805b3dc 100644 --- a/ts-client/lib/contractLib/dropPuppeteer.d.ts +++ b/ts-client/lib/contractLib/dropPuppeteer.d.ts @@ -57,7 +57,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -70,7 +70,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -88,9 +88,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -200,7 +200,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface TxState { reply_to?: string | null; diff --git a/ts-client/lib/contractLib/dropPuppeteerInitia.d.ts b/ts-client/lib/contractLib/dropPuppeteerInitia.d.ts index c84dd59e..f251bc0d 100644 --- a/ts-client/lib/contractLib/dropPuppeteerInitia.d.ts +++ b/ts-client/lib/contractLib/dropPuppeteerInitia.d.ts @@ -57,7 +57,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -70,7 +70,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -88,9 +88,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -200,7 +200,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface TxState { reply_to?: string | null; diff --git a/ts-client/lib/contractLib/dropPuppeteerNative.d.ts b/ts-client/lib/contractLib/dropPuppeteerNative.d.ts index adad4054..1febecf9 100644 --- a/ts-client/lib/contractLib/dropPuppeteerNative.d.ts +++ b/ts-client/lib/contractLib/dropPuppeteerNative.d.ts @@ -59,7 +59,7 @@ export type Transaction = { }; } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -72,7 +72,7 @@ export type Transaction = { }; } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -90,9 +90,9 @@ export type Transaction = { }; } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -189,7 +189,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface ExtensionArgs { msg: QueryExtMsg; diff --git a/ts-client/lib/contractLib/dropUnbondingMirror.d.ts b/ts-client/lib/contractLib/dropUnbondingMirror.d.ts index bb41c7c1..664afe87 100644 --- a/ts-client/lib/contractLib/dropUnbondingMirror.d.ts +++ b/ts-client/lib/contractLib/dropUnbondingMirror.d.ts @@ -75,7 +75,6 @@ export interface FailedReceiverResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface Config { core_contract: string; diff --git a/ts-client/lib/contractLib/dropValidatorsSet.d.ts b/ts-client/lib/contractLib/dropValidatorsSet.d.ts index 9a31b0b7..63355c25 100644 --- a/ts-client/lib/contractLib/dropValidatorsSet.d.ts +++ b/ts-client/lib/contractLib/dropValidatorsSet.d.ts @@ -185,7 +185,6 @@ export interface Proposal { total_deposit: Coin[]; voting_end_time?: number | null; voting_start_time?: number | null; - [k: string]: unknown; } /** * TallyResult defines a standard tally for a governance proposal. @@ -195,12 +194,10 @@ export interface TallyResult { no: Uint128; no_with_veto: Uint128; yes: Uint128; - [k: string]: unknown; } export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * Proposal vote defines the core field members of a governance proposal votes. @@ -209,7 +206,6 @@ export interface ProposalVote { options: WeightedVoteOption[]; proposal_id: number; voter: string; - [k: string]: unknown; } /** * Proposal vote option defines the members of a governance proposal vote option. @@ -217,7 +213,6 @@ export interface ProposalVote { export interface WeightedVoteOption { option: number; weight: string; - [k: string]: unknown; } export interface EditOnTopArgs { operations: OnTopEditOperation[]; diff --git a/ts-client/lib/contractLib/dropWithdrawalVoucher.d.ts b/ts-client/lib/contractLib/dropWithdrawalVoucher.d.ts index ed320916..60342dec 100644 --- a/ts-client/lib/contractLib/dropWithdrawalVoucher.d.ts +++ b/ts-client/lib/contractLib/dropWithdrawalVoucher.d.ts @@ -1,6 +1,5 @@ import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult, InstantiateResult } from "@cosmjs/cosmwasm-stargate"; import { StdFee } from "@cosmjs/amino"; -import { Coin } from "@cosmjs/amino"; /** * Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future) */ @@ -35,13 +34,16 @@ export type Timestamp = Uint64; * let b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ``` */ export type Uint64 = string; -export type Null = null; /** - * Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline. + * A human readable address. * - * This is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also . + * In Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length. + * + * This type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances. + * + * This type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance. */ -export type Binary = string; +export type Addr = string; /** * A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq. * @@ -56,6 +58,17 @@ export type Binary = string; * let c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ``` */ export type Uint128 = string; +export type Null = null; +/** + * Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline. + * + * This is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also . + */ +export type Binary = string; +export type Null1 = null; +export type ArrayOfAttribute = Attribute[]; +export type NullableNftInfoResponseForNullableNftExtension = NftInfoResponseFor_Nullable_NftExtension | null; +export type NullableString = string | null; /** * Actions that can be taken to alter the contract's ownership */ @@ -65,14 +78,32 @@ export type UpdateOwnershipArgs = { new_owner: string; }; } | "accept_ownership" | "renounce_ownership"; +/** + * Actions that can be taken to alter the contract's ownership + */ +export type UpdateMinterOwnershipArgs = { + transfer_ownership: { + expiry?: Expiration | null; + new_owner: string; + }; +} | "accept_ownership" | "renounce_ownership"; +/** + * Actions that can be taken to alter the contract's ownership + */ +export type UpdateCreatorOwnershipArgs = { + transfer_ownership: { + expiry?: Expiration | null; + new_owner: string; + }; +} | "accept_ownership" | "renounce_ownership"; export interface DropWithdrawalVoucherSchema { - responses: AllNftInfoResponseForEmpty | OperatorsResponse | TokensResponse | ApprovalResponse | ApprovalsResponse | ContractInfoResponse | Null | MinterResponse | NftInfoResponseForEmpty | NumTokensResponse | OperatorResponse | OwnerOfResponse1 | OwnershipForString | TokensResponse1; - query: OwnerOfArgs | ApprovalArgs | ApprovalsArgs | OperatorArgs | AllOperatorsArgs | NftInfoArgs | AllNftInfoArgs | TokensArgs | AllTokensArgs | ExtensionArgs; - execute: TransferNftArgs | SendNftArgs | ApproveArgs | RevokeArgs | ApproveAllArgs | RevokeAllArgs | MintArgs | BurnArgs | ExtensionArgs1 | UpdateOwnershipArgs; + responses: AllNftInfoResponseForNullableNftExtension | OperatorsResponse | TokensResponse | ApprovalResponse | ApprovalsResponse | CollectionInfoAndExtensionResponseForEmpty | Null | AllInfoResponse | Null1 | ArrayOfAttribute | CollectionInfoAndExtensionResponseForEmpty1 | ConfigResponseForEmpty | OwnershipForAddr | OwnershipForAddr1 | NullableNftInfoResponseForNullableNftExtension | NullableString | MinterResponse | NftInfoResponseForNullableNftExtension | NumTokensResponse | OperatorResponse | OwnerOfResponse1 | OwnershipForAddr2 | TokensResponse1; + query: OwnerOfArgs | ApprovalArgs | ApprovalsArgs | OperatorArgs | AllOperatorsArgs | NftInfoArgs | GetNftByExtensionArgs | AllNftInfoArgs | TokensArgs | AllTokensArgs | ExtensionArgs | GetCollectionExtensionArgs; + execute: UpdateOwnershipArgs | UpdateMinterOwnershipArgs | UpdateCreatorOwnershipArgs | UpdateCollectionInfoArgs | TransferNftArgs | SendNftArgs | ApproveArgs | RevokeArgs | ApproveAllArgs | RevokeAllArgs | MintArgs | BurnArgs | UpdateExtensionArgs | UpdateNftInfoArgs | SetWithdrawAddressArgs | WithdrawFundsArgs; instantiate?: InstantiateMsg; [k: string]: unknown; } -export interface AllNftInfoResponseForEmpty { +export interface AllNftInfoResponseForNullableNftExtension { /** * Who can transfer the token */ @@ -80,7 +111,7 @@ export interface AllNftInfoResponseForEmpty { /** * Data on the token itself, */ - info: NftInfoResponseFor_Empty; + info: NftInfoResponseFor_Nullable_NftExtension; } export interface OwnerOfResponse { /** @@ -100,25 +131,29 @@ export interface Approval { /** * Account that can transfer/send the token */ - spender: string; + spender: Addr; } -export interface NftInfoResponseFor_Empty { +export interface NftInfoResponseFor_Nullable_NftExtension { /** * You can add any custom metadata here when you extend cw721-base */ - extension: Empty; + extension?: NftExtension | null; /** * Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema */ token_uri?: string | null; } -/** - * An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message. - * - * It is designed to be expressable in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451) - */ -export interface Empty { - [k: string]: unknown; +export interface NftExtension { + amount: Uint128; + attributes?: Trait[] | null; + batch_id: string; + description?: string | null; + name: string; +} +export interface Trait { + display_type?: string | null; + trait_type: string; + value: string; } export interface OperatorsResponse { operators: Approval[]; @@ -135,21 +170,142 @@ export interface ApprovalResponse { export interface ApprovalsResponse { approvals: Approval[]; } +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface CollectionInfoAndExtensionResponseForEmpty { + extension: Empty; + name: string; + symbol: string; + updated_at: Timestamp; +} +/** + * An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message. + * + * It is designed to be expressible in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451) + */ +export interface Empty { +} +/** + * This is a wrapper around CollectionInfo that includes the extension, contract info, and number of tokens (supply). + */ +export interface AllInfoResponse { + collection_extension: Attribute[]; + collection_info: CollectionInfo; + contract_info: ContractInfoResponse; + num_tokens: number; +} +export interface Attribute { + key: string; + value: Binary; +} +export interface CollectionInfo { + name: string; + symbol: string; + updated_at: Timestamp; +} export interface ContractInfoResponse { + /** + * admin who can run migrations (if any) + */ + admin?: Addr | null; + code_id: number; + /** + * address that instantiated this contract + */ + creator: Addr; + /** + * set if this contract has bound an IBC port + */ + ibc_port?: string | null; + /** + * if set, the contract is pinned to the cache, and thus uses less gas when called + */ + pinned: boolean; +} +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface CollectionInfoAndExtensionResponseForEmpty1 { + extension: Empty; name: string; symbol: string; + updated_at: Timestamp; +} +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface ConfigResponseForEmpty { + collection_extension: Empty; + collection_info: CollectionInfo; + contract_info: ContractInfoResponse; + creator_ownership: OwnershipFor_Addr; + minter_ownership: OwnershipFor_Addr; + num_tokens: number; + withdraw_address?: string | null; +} +/** + * The contract's ownership info + */ +export interface OwnershipFor_Addr { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; +} +/** + * The contract's ownership info + */ +export interface OwnershipForAddr { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; } /** - * Shows who can mint these tokens + * The contract's ownership info + */ +export interface OwnershipForAddr1 { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; +} +/** + * Deprecated: use Cw721QueryMsg::GetMinterOwnership instead! Shows who can mint these tokens. */ export interface MinterResponse { minter?: string | null; } -export interface NftInfoResponseForEmpty { +export interface NftInfoResponseForNullableNftExtension { /** * You can add any custom metadata here when you extend cw721-base */ - extension: Empty; + extension?: NftExtension | null; /** * Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema */ @@ -174,11 +330,11 @@ export interface OwnerOfResponse1 { /** * The contract's ownership info */ -export interface OwnershipForString { +export interface OwnershipForAddr2 { /** * The contract's current owner. `None` if the ownership has been renounced. */ - owner?: string | null; + owner?: Addr | null; /** * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. */ @@ -186,7 +342,7 @@ export interface OwnershipForString { /** * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. */ - pending_owner?: string | null; + pending_owner?: Addr | null; } export interface TokensResponse1 { /** @@ -227,6 +383,11 @@ export interface AllOperatorsArgs { export interface NftInfoArgs { token_id: string; } +export interface GetNftByExtensionArgs { + extension?: NftExtension | null; + limit?: number | null; + start_after?: string | null; +} export interface AllNftInfoArgs { /** * unset or false will filter out expired approvals, you must set to true to see them @@ -246,6 +407,17 @@ export interface AllTokensArgs { export interface ExtensionArgs { msg: Empty; } +export interface GetCollectionExtensionArgs { + msg: Empty; +} +export interface UpdateCollectionInfoArgs { + collection_info: CollectionInfoMsgFor_Empty; +} +export interface CollectionInfoMsgFor_Empty { + extension: Empty; + name?: string | null; + symbol?: string | null; +} export interface TransferNftArgs { recipient: string; token_id: string; @@ -275,7 +447,7 @@ export interface MintArgs { /** * Any custom extension used by this contract */ - extension?: Metadata | null; + extension?: NftExtensionMsg | null; /** * The owner of the newly minter NFT */ @@ -289,29 +461,50 @@ export interface MintArgs { */ token_uri?: string | null; } -export interface Metadata { +export interface NftExtensionMsg { amount: Uint128; attributes?: Trait[] | null; batch_id: string; description?: string | null; name: string; } -export interface Trait { - display_type?: string | null; - trait_type: string; - value: string; -} export interface BurnArgs { token_id: string; } -export interface ExtensionArgs1 { +export interface UpdateExtensionArgs { msg: Empty; } +export interface UpdateNftInfoArgs { + extension?: NftExtensionMsg | null; + token_id: string; + /** + * NOTE: Empty string is handled as None + */ + token_uri?: string | null; +} +export interface SetWithdrawAddressArgs { + address: string; +} +export interface WithdrawFundsArgs { + amount: Coin; +} +export interface Coin { + amount: Uint128; + denom: string; +} export interface InstantiateMsg { + /** + * Optional extension of the collection metadata + */ + collection_info_extension: Empty; + /** + * Sets the creator of collection. The creator is the only one eligible to update `CollectionInfo`. + */ + creator?: string | null; /** * The minter is the only one who can create new NFTs. This is designed for a base NFT that is controlled by an external program or contract. You will likely replace this with custom logic in custom NFTs */ - minter: string; + minter?: string | null; /** * Name of the NFT contract */ @@ -320,6 +513,7 @@ export interface InstantiateMsg { * Symbol of the NFT contract */ symbol: string; + withdraw_address?: string | null; } export declare class Client { private readonly client; @@ -334,14 +528,39 @@ export declare class Client { queryOperator: (args: OperatorArgs) => Promise; queryAllOperators: (args: AllOperatorsArgs) => Promise; queryNumTokens: () => Promise; - queryContractInfo: () => Promise; - queryNftInfo: (args: NftInfoArgs) => Promise; - queryAllNftInfo: (args: AllNftInfoArgs) => Promise; + queryContractInfo: () => Promise; + queryGetConfig: () => Promise; + queryGetCollectionInfoAndExtension: () => Promise; + queryGetAllInfo: () => Promise; + queryGetCollectionExtensionAttributes: () => Promise; + queryOwnership: () => Promise; + queryMinter: () => Promise; + queryGetMinterOwnership: () => Promise; + queryGetCreatorOwnership: () => Promise; + queryNftInfo: (args: NftInfoArgs) => Promise; + queryGetNftByExtension: (args: GetNftByExtensionArgs) => Promise; + queryAllNftInfo: (args: AllNftInfoArgs) => Promise; queryTokens: (args: TokensArgs) => Promise; queryAllTokens: (args: AllTokensArgs) => Promise; - queryMinter: () => Promise; queryExtension: (args: ExtensionArgs) => Promise; - queryOwnership: () => Promise; + queryGetCollectionExtension: (args: GetCollectionExtensionArgs) => Promise; + queryGetWithdrawAddress: () => Promise; + updateOwnership: (sender: string, args: UpdateOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateOwnershipMsg: (args: UpdateOwnershipArgs) => { + update_ownership: UpdateOwnershipArgs; + }; + updateMinterOwnership: (sender: string, args: UpdateMinterOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateMinterOwnershipMsg: (args: UpdateMinterOwnershipArgs) => { + update_minter_ownership: UpdateMinterOwnershipArgs; + }; + updateCreatorOwnership: (sender: string, args: UpdateCreatorOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateCreatorOwnershipMsg: (args: UpdateCreatorOwnershipArgs) => { + update_creator_ownership: UpdateCreatorOwnershipArgs; + }; + updateCollectionInfo: (sender: string, args: UpdateCollectionInfoArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateCollectionInfoMsg: (args: UpdateCollectionInfoArgs) => { + update_collection_info: UpdateCollectionInfoArgs; + }; transferNft: (sender: string, args: TransferNftArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; transferNftMsg: (args: TransferNftArgs) => { transfer_nft: TransferNftArgs; @@ -374,12 +593,24 @@ export declare class Client { burnMsg: (args: BurnArgs) => { burn: BurnArgs; }; - extension: (sender: string, args: ExtensionArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; - extensionMsg: (args: ExtensionArgs) => { - extension: ExtensionArgs; + updateExtension: (sender: string, args: UpdateExtensionArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateExtensionMsg: (args: UpdateExtensionArgs) => { + update_extension: UpdateExtensionArgs; }; - updateOwnership: (sender: string, args: UpdateOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; - updateOwnershipMsg: (args: UpdateOwnershipArgs) => { - update_ownership: UpdateOwnershipArgs; + updateNftInfo: (sender: string, args: UpdateNftInfoArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + updateNftInfoMsg: (args: UpdateNftInfoArgs) => { + update_nft_info: UpdateNftInfoArgs; + }; + setWithdrawAddress: (sender: string, args: SetWithdrawAddressArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + setWithdrawAddressMsg: (args: SetWithdrawAddressArgs) => { + set_withdraw_address: SetWithdrawAddressArgs; + }; + removeWithdrawAddress: (sender: string, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + removeWithdrawAddressMsg: () => { + remove_withdraw_address: {}; + }; + withdrawFunds: (sender: string, args: WithdrawFundsArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise; + withdrawFundsMsg: (args: WithdrawFundsArgs) => { + withdraw_funds: WithdrawFundsArgs; }; } diff --git a/ts-client/lib/contractLib/dropWithdrawalVoucher.js b/ts-client/lib/contractLib/dropWithdrawalVoucher.js index 211069e1..678f3d26 100644 --- a/ts-client/lib/contractLib/dropWithdrawalVoucher.js +++ b/ts-client/lib/contractLib/dropWithdrawalVoucher.js @@ -47,9 +47,36 @@ class Client { queryContractInfo = async () => { return this.client.queryContractSmart(this.contractAddress, { contract_info: {} }); }; + queryGetConfig = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_config: {} }); + }; + queryGetCollectionInfoAndExtension = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_info_and_extension: {} }); + }; + queryGetAllInfo = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_all_info: {} }); + }; + queryGetCollectionExtensionAttributes = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_extension_attributes: {} }); + }; + queryOwnership = async () => { + return this.client.queryContractSmart(this.contractAddress, { ownership: {} }); + }; + queryMinter = async () => { + return this.client.queryContractSmart(this.contractAddress, { minter: {} }); + }; + queryGetMinterOwnership = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_minter_ownership: {} }); + }; + queryGetCreatorOwnership = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_creator_ownership: {} }); + }; queryNftInfo = async (args) => { return this.client.queryContractSmart(this.contractAddress, { nft_info: args }); }; + queryGetNftByExtension = async (args) => { + return this.client.queryContractSmart(this.contractAddress, { get_nft_by_extension: args }); + }; queryAllNftInfo = async (args) => { return this.client.queryContractSmart(this.contractAddress, { all_nft_info: args }); }; @@ -59,15 +86,43 @@ class Client { queryAllTokens = async (args) => { return this.client.queryContractSmart(this.contractAddress, { all_tokens: args }); }; - queryMinter = async () => { - return this.client.queryContractSmart(this.contractAddress, { minter: {} }); - }; queryExtension = async (args) => { return this.client.queryContractSmart(this.contractAddress, { extension: args }); }; - queryOwnership = async () => { - return this.client.queryContractSmart(this.contractAddress, { ownership: {} }); + queryGetCollectionExtension = async (args) => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_extension: args }); }; + queryGetWithdrawAddress = async () => { + return this.client.queryContractSmart(this.contractAddress, { get_withdraw_address: {} }); + }; + updateOwnership = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.updateOwnershipMsg(args), fee || "auto", memo, funds); + }; + updateOwnershipMsg = (args) => { return { update_ownership: args }; }; + updateMinterOwnership = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.updateMinterOwnershipMsg(args), fee || "auto", memo, funds); + }; + updateMinterOwnershipMsg = (args) => { return { update_minter_ownership: args }; }; + updateCreatorOwnership = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.updateCreatorOwnershipMsg(args), fee || "auto", memo, funds); + }; + updateCreatorOwnershipMsg = (args) => { return { update_creator_ownership: args }; }; + updateCollectionInfo = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.updateCollectionInfoMsg(args), fee || "auto", memo, funds); + }; + updateCollectionInfoMsg = (args) => { return { update_collection_info: args }; }; transferNft = async (sender, args, fee, memo, funds) => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); @@ -124,19 +179,40 @@ class Client { return this.client.execute(sender, this.contractAddress, this.burnMsg(args), fee || "auto", memo, funds); }; burnMsg = (args) => { return { burn: args }; }; - extension = async (sender, args, fee, memo, funds) => { + updateExtension = async (sender, args, fee, memo, funds) => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } - return this.client.execute(sender, this.contractAddress, this.extensionMsg(args), fee || "auto", memo, funds); + return this.client.execute(sender, this.contractAddress, this.updateExtensionMsg(args), fee || "auto", memo, funds); }; - extensionMsg = (args) => { return { extension: args }; }; - updateOwnership = async (sender, args, fee, memo, funds) => { + updateExtensionMsg = (args) => { return { update_extension: args }; }; + updateNftInfo = async (sender, args, fee, memo, funds) => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } - return this.client.execute(sender, this.contractAddress, this.updateOwnershipMsg(args), fee || "auto", memo, funds); + return this.client.execute(sender, this.contractAddress, this.updateNftInfoMsg(args), fee || "auto", memo, funds); }; - updateOwnershipMsg = (args) => { return { update_ownership: args }; }; + updateNftInfoMsg = (args) => { return { update_nft_info: args }; }; + setWithdrawAddress = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.setWithdrawAddressMsg(args), fee || "auto", memo, funds); + }; + setWithdrawAddressMsg = (args) => { return { set_withdraw_address: args }; }; + removeWithdrawAddress = async (sender, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.removeWithdrawAddressMsg(), fee || "auto", memo, funds); + }; + removeWithdrawAddressMsg = () => { return { remove_withdraw_address: {} }; }; + withdrawFunds = async (sender, args, fee, memo, funds) => { + if (!isSigningCosmWasmClient(this.client)) { + throw this.mustBeSigningClient(); + } + return this.client.execute(sender, this.contractAddress, this.withdrawFundsMsg(args), fee || "auto", memo, funds); + }; + withdrawFundsMsg = (args) => { return { withdraw_funds: args }; }; } exports.Client = Client; diff --git a/ts-client/src/contractLib/dropAutoWithdrawer.ts b/ts-client/src/contractLib/dropAutoWithdrawer.ts index d3e683ca..cec4a21d 100644 --- a/ts-client/src/contractLib/dropAutoWithdrawer.ts +++ b/ts-client/src/contractLib/dropAutoWithdrawer.ts @@ -55,7 +55,6 @@ export interface BondingResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface InstantiateMsg { factory_contract: string; diff --git a/ts-client/src/contractLib/dropCore.ts b/ts-client/src/contractLib/dropCore.ts index 63b4f968..1cd33cad 100644 --- a/ts-client/src/contractLib/dropCore.ts +++ b/ts-client/src/contractLib/dropCore.ts @@ -51,7 +51,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -66,7 +66,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -87,9 +87,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -300,7 +300,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/src/contractLib/dropFactory.ts b/ts-client/src/contractLib/dropFactory.ts index cb239756..2d869aec 100644 --- a/ts-client/src/contractLib/dropFactory.ts +++ b/ts-client/src/contractLib/dropFactory.ts @@ -83,9 +83,11 @@ export type CosmosMsgFor_NeutronMsg = stargate: { type_url: string; value: Binary; - [k: string]: unknown; }; } + | { + any: AnyMsg; + } | { ibc: IbcMsg; } @@ -105,13 +107,11 @@ export type BankMsg = send: { amount: Coin[]; to_address: string; - [k: string]: unknown; }; } | { burn: { amount: Coin[]; - [k: string]: unknown; }; }; /** @@ -132,7 +132,6 @@ export type NeutronMsg = * *register_fee** is a fees required to be payed to register interchain account */ register_fee?: Coin[] | null; - [k: string]: unknown; }; } | { @@ -161,7 +160,6 @@ export type NeutronMsg = * *timeout** is a timeout in seconds after which the packet times out. */ timeout: number; - [k: string]: unknown; }; } | { @@ -186,7 +184,6 @@ export type NeutronMsg = * *update_period** is used to say how often the query must be updated. */ update_period: number; - [k: string]: unknown; }; } | { @@ -207,7 +204,6 @@ export type NeutronMsg = * *query_id** is the ID of the query we want to update. */ query_id: number; - [k: string]: unknown; }; } | { @@ -216,7 +212,6 @@ export type NeutronMsg = * *query_id** is ID of the query we want to remove. */ query_id: number; - [k: string]: unknown; }; } | { @@ -230,26 +225,22 @@ export type NeutronMsg = timeout_height: RequestPacketTimeoutHeight; timeout_timestamp: number; token: Coin; - [k: string]: unknown; }; } | { submit_admin_proposal: { admin_proposal: AdminProposal; - [k: string]: unknown; }; } | { create_denom: { subdenom: string; - [k: string]: unknown; }; } | { change_admin: { denom: string; new_admin_address: string; - [k: string]: unknown; }; } | { @@ -257,7 +248,6 @@ export type NeutronMsg = amount: Uint128; denom: string; mint_to_address: string; - [k: string]: unknown; }; } | { @@ -268,14 +258,12 @@ export type NeutronMsg = */ burn_from_address: string; denom: string; - [k: string]: unknown; }; } | { set_before_send_hook: { contract_addr: string; denom: string; - [k: string]: unknown; }; } | { @@ -284,7 +272,6 @@ export type NeutronMsg = denom: string; transfer_from_address: string; transfer_to_address: string; - [k: string]: unknown; }; } | { @@ -321,7 +308,6 @@ export type NeutronMsg = * **uri_hash** is a sha256 hash of a document pointed by URI. It's used to verify that the document didn't change. Optional. */ uri_hash: string; - [k: string]: unknown; }; } | { @@ -338,19 +324,16 @@ export type NeutronMsg = * period in blocks with which `msgs` will be executed */ period: number; - [k: string]: unknown; }; } | { remove_schedule: { name: string; - [k: string]: unknown; }; } | { resubmit_failure: { failure_id: number; - [k: string]: unknown; }; } | { @@ -434,7 +417,6 @@ export type DexMsg = * Denom for the opposing side of the deposit */ token_b: string; - [k: string]: unknown; }; } | { @@ -463,7 +445,6 @@ export type DexMsg = * Denom for the opposing side of the deposit */ token_b: string; - [k: string]: unknown; }; } | { @@ -476,6 +457,10 @@ export type DexMsg = * Expiration time for order. Only valid for GOOD_TIL_TIME limit orders */ expiration_time?: number | null; + /** + * Accepts standard decimals and decimals with scientific notation (ie. 1234.23E-7) + */ + limit_sell_price: string; /** * Maximum amount of TokenB can be bought. For everything except JUST_IN_TIME OrderType */ @@ -500,7 +485,6 @@ export type DexMsg = * Token being “bought” */ token_out: string; - [k: string]: unknown; }; } | { @@ -509,7 +493,6 @@ export type DexMsg = * TrancheKey for the target limit order */ tranche_key: string; - [k: string]: unknown; }; } | { @@ -518,7 +501,6 @@ export type DexMsg = * TrancheKey for the target limit order */ tranche_key: string; - [k: string]: unknown; }; } | { @@ -543,7 +525,6 @@ export type DexMsg = * Array of possible routes */ routes: MultiHopRoute[]; - [k: string]: unknown; }; }; export type LimitOrderType = @@ -562,14 +543,12 @@ export type StakingMsg = delegate: { amount: Coin; validator: string; - [k: string]: unknown; }; } | { undelegate: { amount: Coin; validator: string; - [k: string]: unknown; }; } | { @@ -577,7 +556,6 @@ export type StakingMsg = amount: Coin; dst_validator: string; src_validator: string; - [k: string]: unknown; }; }; /** @@ -592,7 +570,6 @@ export type DistributionMsg = * The `withdraw_address` */ address: string; - [k: string]: unknown; }; } | { @@ -601,7 +578,14 @@ export type DistributionMsg = * The `validator_address` */ validator: string; - [k: string]: unknown; + }; + } + | { + fund_community_pool: { + /** + * The amount to spend + */ + amount: Coin[]; }; }; /** @@ -618,6 +602,14 @@ export type IbcMsg = * existing channel to send the tokens over */ channel_id: string; + /** + * An optional memo. See the blog post ["Moving Beyond Simple Token Transfers"](https://medium.com/the-interchain-foundation/moving-beyond-simple-token-transfers-d42b2b1dc29b) for more information. + * + * There is no difference between setting this to `None` or an empty string. + * + * This field is only supported on chains with CosmWasm >= 2.0 and silently ignored on older chains. If you need support for both 1.x and 2.x chain with the same codebase, it is recommended to use `CosmosMsg::Stargate` with a custom MsgTransfer protobuf encoder instead. + */ + memo?: string | null; /** * when packet times out, measured on remote chain */ @@ -626,7 +618,6 @@ export type IbcMsg = * address on the remote chain to receive these tokens */ to_address: string; - [k: string]: unknown; }; } | { @@ -637,13 +628,11 @@ export type IbcMsg = * when packet times out, measured on remote chain */ timeout: IbcTimeout; - [k: string]: unknown; }; } | { close_channel: { channel_id: string; - [k: string]: unknown; }; }; /** @@ -660,7 +649,6 @@ export type WasmMsg = * msg is the json-encoded ExecuteMsg struct (as raw Binary) */ msg: Binary; - [k: string]: unknown; }; } | { @@ -678,7 +666,6 @@ export type WasmMsg = * msg is the JSON-encoded InstantiateMsg struct (as raw Binary) */ msg: Binary; - [k: string]: unknown; }; } | { @@ -697,7 +684,6 @@ export type WasmMsg = */ msg: Binary; salt: Binary; - [k: string]: unknown; }; } | { @@ -711,20 +697,17 @@ export type WasmMsg = * the code_id of the new logic to place in the given contract */ new_code_id: number; - [k: string]: unknown; }; } | { update_admin: { admin: string; contract_addr: string; - [k: string]: unknown; }; } | { clear_admin: { contract_addr: string; - [k: string]: unknown; }; }; /** @@ -738,7 +721,7 @@ export type WasmMsg = * * ``` # use cosmwasm_std::{ # HexBinary, # Storage, Api, Querier, DepsMut, Deps, entry_point, Env, StdError, MessageInfo, # Response, QueryResponse, # }; # type ExecuteMsg = (); use cosmwasm_std::{GovMsg, VoteOption}; * - * #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, vote: VoteOption::Yes, })) } ``` + * #[entry_point] pub fn execute( deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg, ) -> Result { // ... Ok(Response::new().add_message(GovMsg::Vote { proposal_id: 4, option: VoteOption::Yes, })) } ``` * * Cast a weighted vote: * @@ -749,21 +732,19 @@ export type WasmMsg = export type GovMsg = | { vote: { - proposal_id: number; /** * The vote option. * - * This should be called "option" for consistency with Cosmos SDK. Sorry for that. See . + * This used to be called "vote", but was changed for consistency with Cosmos SDK. */ - vote: VoteOption; - [k: string]: unknown; + option: VoteOption; + proposal_id: number; }; } | { vote_weighted: { options: WeightedVoteOption[]; proposal_id: number; - [k: string]: unknown; }; }; export type VoteOption = "yes" | "no" | "abstain" | "no_with_veto"; @@ -819,9 +800,7 @@ export interface OwnershipForString { */ pending_owner?: string | null; } -export interface MapOfString { - [k: string]: string; -} +export interface MapOfString {} export interface ConfigOptional { base_denom?: string | null; emergency_address?: string | null; @@ -850,7 +829,6 @@ export interface AdminExecuteArgs { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * IbcFee defines struct for fees that refund the relayer for `SudoMsg` messages submission. Unused fee kind will be returned back to message sender. Please refer to these links for more information: IBC transaction structure - General mechanics of fee payments - @@ -868,7 +846,6 @@ export interface IbcFee { * *timeout_fee** amount of coins to refund relayer for submitting timeout message for a particular IBC packet. */ timeout_fee: Coin[]; - [k: string]: unknown; } /** * Type for wrapping any protobuf message @@ -882,7 +859,6 @@ export interface ProtobufAny { * *value** must be a valid serialized protocol buffer of the above specified type */ value: Binary; - [k: string]: unknown; } /** * Describes a KV key for which you want to get value from the storage on remote chain @@ -896,12 +872,10 @@ export interface KVKey { * *path** is a path to the storage (storage prefix) where you want to read value by key (usually name of cosmos-packages module: 'staking', 'bank', etc.) */ path: string; - [k: string]: unknown; } export interface RequestPacketTimeoutHeight { revision_height?: number | null; revision_number?: number | null; - [k: string]: unknown; } /** * ParamChangeProposal defines the struct for single parameter change proposal. @@ -919,7 +893,6 @@ export interface ParamChangeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * ParamChange defines the struct for parameter change request. @@ -937,9 +910,9 @@ export interface ParamChange { * *value** is a new value for given parameter. Non unique. */ value: string; - [k: string]: unknown; } /** + * @deprecated * UpgradeProposal defines the struct for IBC upgrade proposal. */ export interface UpgradeProposal { @@ -959,7 +932,6 @@ export interface UpgradeProposal { * *upgraded_client_state** is an upgraded client state. */ upgraded_client_state: ProtobufAny; - [k: string]: unknown; } /** * Plan defines the struct for planned upgrade. @@ -977,9 +949,9 @@ export interface Plan { * *name** is a name for the upgrade */ name: string; - [k: string]: unknown; } /** + * @deprecated * ClientUpdateProposal defines the struct for client update proposal. */ export interface ClientUpdateProposal { @@ -999,7 +971,6 @@ export interface ClientUpdateProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * ProposalExecuteMessage defines the struct for sdk47 compatible admin proposal. @@ -1009,7 +980,6 @@ export interface ProposalExecuteMessage { * *message** is a json representing an sdk message passed to admin module to execute. */ message: string; - [k: string]: unknown; } /** * @deprecated @@ -1028,7 +998,6 @@ export interface SoftwareUpgradeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1043,7 +1012,6 @@ export interface CancelSoftwareUpgradeProposal { * *title** is a text title of proposal. Non unique. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1062,7 +1030,6 @@ export interface PinCodesProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1081,7 +1048,6 @@ export interface UnpinCodesProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1104,7 +1070,6 @@ export interface SudoContractProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1127,7 +1092,6 @@ export interface UpdateAdminProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * @deprecated @@ -1146,7 +1110,6 @@ export interface ClearAdminProposal { * *title** is a text title of proposal. */ title: string; - [k: string]: unknown; } /** * Replicates the cosmos-sdk bank module DenomUnit type @@ -1155,7 +1118,6 @@ export interface DenomUnit { aliases: string[]; denom: string; exponent: number; - [k: string]: unknown; } /** * MsgExecuteContract defines a call to the contract execution @@ -1169,19 +1131,22 @@ export interface MsgExecuteContract { * *msg** is a contract call message */ msg: string; - [k: string]: unknown; } export interface DepositOption { disable_swap: boolean; - [k: string]: unknown; } export interface PrecDec { i: string; - [k: string]: unknown; } export interface MultiHopRoute { hops: string[]; - [k: string]: unknown; +} +/** + * A message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md) + */ +export interface AnyMsg { + type_url: string; + value: Binary; } /** * In IBC each package must set at least one type of timeout: the timestamp or the block height. Using this rather complex enum instead of two timeout fields we ensure that at least one timeout is set. @@ -1189,7 +1154,6 @@ export interface MultiHopRoute { export interface IbcTimeout { block?: IbcTimeoutBlock | null; timestamp?: Timestamp | null; - [k: string]: unknown; } /** * IBCTimeoutHeight Height is a monotonically increasing data type that can be compared against another Height for the purposes of updating and freezing clients. Ordering is (revision_number, timeout_height) @@ -1203,12 +1167,10 @@ export interface IbcTimeoutBlock { * the version that the client is currently on (e.g. after resetting the chain this could increment 1 as height drops to 0) */ revision: number; - [k: string]: unknown; } export interface WeightedVoteOption { option: VoteOption; weight: Decimal; - [k: string]: unknown; } export interface InstantiateMsg { base_denom: string; diff --git a/ts-client/src/contractLib/dropHookTester.ts b/ts-client/src/contractLib/dropHookTester.ts index 3127d2e7..877e4fd4 100644 --- a/ts-client/src/contractLib/dropHookTester.ts +++ b/ts-client/src/contractLib/dropHookTester.ts @@ -11,7 +11,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -26,7 +26,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -47,9 +47,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -127,7 +127,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/src/contractLib/dropLsmShareBondProvider.ts b/ts-client/src/contractLib/dropLsmShareBondProvider.ts index 7b4cdcca..1ece26de 100644 --- a/ts-client/src/contractLib/dropLsmShareBondProvider.ts +++ b/ts-client/src/contractLib/dropLsmShareBondProvider.ts @@ -60,7 +60,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -75,7 +75,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -96,9 +96,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -247,7 +247,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/src/contractLib/dropMirror.ts b/ts-client/src/contractLib/dropMirror.ts index 6d46bc40..1c0e2064 100644 --- a/ts-client/src/contractLib/dropMirror.ts +++ b/ts-client/src/contractLib/dropMirror.ts @@ -80,7 +80,6 @@ export interface FailedReceiverResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface Config { core_contract: string; diff --git a/ts-client/src/contractLib/dropNativeBondProvider.ts b/ts-client/src/contractLib/dropNativeBondProvider.ts index 0fae9344..e12c6651 100644 --- a/ts-client/src/contractLib/dropNativeBondProvider.ts +++ b/ts-client/src/contractLib/dropNativeBondProvider.ts @@ -59,7 +59,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -74,7 +74,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -95,9 +95,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -258,7 +258,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/src/contractLib/dropNativeSyncBondProvider.ts b/ts-client/src/contractLib/dropNativeSyncBondProvider.ts index 4aa39552..9e1e5f0b 100644 --- a/ts-client/src/contractLib/dropNativeSyncBondProvider.ts +++ b/ts-client/src/contractLib/dropNativeSyncBondProvider.ts @@ -45,7 +45,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator_from: string; @@ -60,7 +60,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint1281; denom: string; interchain_account_id: string; validator: string; @@ -81,9 +81,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint1281; denom: string; - real_amount: number; + real_amount: Uint1281; reason: IBCTransferReason; recipient: string; }; @@ -252,7 +252,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint1281; denom: string; - [k: string]: unknown; } export interface ResponseHookErrorMsg { details: string; diff --git a/ts-client/src/contractLib/dropProviderProposalsPoc.ts b/ts-client/src/contractLib/dropProviderProposalsPoc.ts index c3eea6b9..041afc3b 100644 --- a/ts-client/src/contractLib/dropProviderProposalsPoc.ts +++ b/ts-client/src/contractLib/dropProviderProposalsPoc.ts @@ -58,7 +58,6 @@ export interface Proposal { total_deposit: Coin[]; voting_end_time?: number | null; voting_start_time?: number | null; - [k: string]: unknown; } /** * TallyResult defines a standard tally for a governance proposal. @@ -68,12 +67,10 @@ export interface TallyResult { no: Uint128; no_with_veto: Uint128; yes: Uint128; - [k: string]: unknown; } export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * Proposal vote defines the core field members of a governance proposal votes. @@ -82,7 +79,6 @@ export interface ProposalVote { options: WeightedVoteOption[]; proposal_id: number; voter: string; - [k: string]: unknown; } /** * Proposal vote option defines the members of a governance proposal vote option. @@ -90,7 +86,6 @@ export interface ProposalVote { export interface WeightedVoteOption { option: number; weight: string; - [k: string]: unknown; } export interface ProposalInfo1 { is_spam: boolean; diff --git a/ts-client/src/contractLib/dropPump.ts b/ts-client/src/contractLib/dropPump.ts index 4a36c85e..e4a3b648 100644 --- a/ts-client/src/contractLib/dropPump.ts +++ b/ts-client/src/contractLib/dropPump.ts @@ -125,7 +125,6 @@ export interface PushArgs { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface RefundArgs { coins: Coin[]; diff --git a/ts-client/src/contractLib/dropPuppeteer.ts b/ts-client/src/contractLib/dropPuppeteer.ts index 6aff82da..a4a90617 100644 --- a/ts-client/src/contractLib/dropPuppeteer.ts +++ b/ts-client/src/contractLib/dropPuppeteer.ts @@ -64,7 +64,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -79,7 +79,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -100,9 +100,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -245,7 +245,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface TxState { reply_to?: string | null; diff --git a/ts-client/src/contractLib/dropPuppeteerInitia.ts b/ts-client/src/contractLib/dropPuppeteerInitia.ts index 2ffc65fc..cc28df5d 100644 --- a/ts-client/src/contractLib/dropPuppeteerInitia.ts +++ b/ts-client/src/contractLib/dropPuppeteerInitia.ts @@ -64,7 +64,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -79,7 +79,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -100,9 +100,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -245,7 +245,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface TxState { reply_to?: string | null; diff --git a/ts-client/src/contractLib/dropPuppeteerNative.ts b/ts-client/src/contractLib/dropPuppeteerNative.ts index df172079..4a688655 100644 --- a/ts-client/src/contractLib/dropPuppeteerNative.ts +++ b/ts-client/src/contractLib/dropPuppeteerNative.ts @@ -64,7 +64,7 @@ export type Transaction = } | { redelegate: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator_from: string; @@ -79,7 +79,7 @@ export type Transaction = } | { tokenize_share: { - amount: number; + amount: Uint128; denom: string; interchain_account_id: string; validator: string; @@ -100,9 +100,9 @@ export type Transaction = } | { i_b_c_transfer: { - amount: number; + amount: Uint128; denom: string; - real_amount: number; + real_amount: Uint128; reason: IBCTransferReason; recipient: string; }; @@ -218,7 +218,6 @@ export interface TransferReadyBatchesMsg { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface ExtensionArgs { msg: QueryExtMsg; diff --git a/ts-client/src/contractLib/dropUnbondingMirror.ts b/ts-client/src/contractLib/dropUnbondingMirror.ts index 2c236c2f..a869d004 100644 --- a/ts-client/src/contractLib/dropUnbondingMirror.ts +++ b/ts-client/src/contractLib/dropUnbondingMirror.ts @@ -88,7 +88,6 @@ export interface FailedReceiverResponse { export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } export interface Config { core_contract: string; diff --git a/ts-client/src/contractLib/dropValidatorsSet.ts b/ts-client/src/contractLib/dropValidatorsSet.ts index c02bea4c..ed592c9c 100644 --- a/ts-client/src/contractLib/dropValidatorsSet.ts +++ b/ts-client/src/contractLib/dropValidatorsSet.ts @@ -200,7 +200,6 @@ export interface Proposal { total_deposit: Coin[]; voting_end_time?: number | null; voting_start_time?: number | null; - [k: string]: unknown; } /** * TallyResult defines a standard tally for a governance proposal. @@ -210,12 +209,10 @@ export interface TallyResult { no: Uint128; no_with_veto: Uint128; yes: Uint128; - [k: string]: unknown; } export interface Coin { amount: Uint128; denom: string; - [k: string]: unknown; } /** * Proposal vote defines the core field members of a governance proposal votes. @@ -224,7 +221,6 @@ export interface ProposalVote { options: WeightedVoteOption[]; proposal_id: number; voter: string; - [k: string]: unknown; } /** * Proposal vote option defines the members of a governance proposal vote option. @@ -232,7 +228,6 @@ export interface ProposalVote { export interface WeightedVoteOption { option: number; weight: string; - [k: string]: unknown; } export interface EditOnTopArgs { operations: OnTopEditOperation[]; diff --git a/ts-client/src/contractLib/dropWithdrawalVoucher.ts b/ts-client/src/contractLib/dropWithdrawalVoucher.ts index c9ff971b..840a5ed3 100644 --- a/ts-client/src/contractLib/dropWithdrawalVoucher.ts +++ b/ts-client/src/contractLib/dropWithdrawalVoucher.ts @@ -1,6 +1,5 @@ import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult, InstantiateResult } from "@cosmjs/cosmwasm-stargate"; import { StdFee } from "@cosmjs/amino"; -import { Coin } from "@cosmjs/amino"; /** * Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future) */ @@ -38,13 +37,16 @@ export type Timestamp = Uint64; * let b = Uint64::from(70u32); assert_eq!(b.u64(), 70); ``` */ export type Uint64 = string; -export type Null = null; /** - * Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline. + * A human readable address. * - * This is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also . + * In Cosmos, this is typically bech32 encoded. But for multi-chain smart contracts no assumptions should be made other than being UTF-8 encoded and of reasonable length. + * + * This type represents a validated address. It can be created in the following ways 1. Use `Addr::unchecked(input)` 2. Use `let checked: Addr = deps.api.addr_validate(input)?` 3. Use `let checked: Addr = deps.api.addr_humanize(canonical_addr)?` 4. Deserialize from JSON. This must only be done from JSON that was validated before such as a contract's state. `Addr` must not be used in messages sent by the user because this would result in unvalidated instances. + * + * This type is immutable. If you really need to mutate it (Really? Are you sure?), create a mutable copy using `let mut mutable = Addr::to_string()` and operate on that `String` instance. */ -export type Binary = string; +export type Addr = string; /** * A thin wrapper around u128 that is using strings for JSON encoding/decoding, such that the full u128 range can be used for clients that convert JSON numbers to floats, like JavaScript and jq. * @@ -59,6 +61,17 @@ export type Binary = string; * let c = Uint128::from(70u32); assert_eq!(c.u128(), 70); ``` */ export type Uint128 = string; +export type Null = null; +/** + * Binary is a wrapper around Vec to add base64 de/serialization with serde. It also adds some helper methods to help encode inline. + * + * This is only needed as serde-json-{core,wasm} has a horrible encoding for Vec. See also . + */ +export type Binary = string; +export type Null1 = null; +export type ArrayOfAttribute = Attribute[]; +export type NullableNftInfoResponseForNullableNftExtension = NftInfoResponseFor_Nullable_NftExtension | null; +export type NullableString = string | null; /** * Actions that can be taken to alter the contract's ownership */ @@ -71,22 +84,55 @@ export type UpdateOwnershipArgs = } | "accept_ownership" | "renounce_ownership"; +/** + * Actions that can be taken to alter the contract's ownership + */ +export type UpdateMinterOwnershipArgs = + | { + transfer_ownership: { + expiry?: Expiration | null; + new_owner: string; + }; + } + | "accept_ownership" + | "renounce_ownership"; +/** + * Actions that can be taken to alter the contract's ownership + */ +export type UpdateCreatorOwnershipArgs = + | { + transfer_ownership: { + expiry?: Expiration | null; + new_owner: string; + }; + } + | "accept_ownership" + | "renounce_ownership"; export interface DropWithdrawalVoucherSchema { responses: - | AllNftInfoResponseForEmpty + | AllNftInfoResponseForNullableNftExtension | OperatorsResponse | TokensResponse | ApprovalResponse | ApprovalsResponse - | ContractInfoResponse + | CollectionInfoAndExtensionResponseForEmpty | Null + | AllInfoResponse + | Null1 + | ArrayOfAttribute + | CollectionInfoAndExtensionResponseForEmpty1 + | ConfigResponseForEmpty + | OwnershipForAddr + | OwnershipForAddr1 + | NullableNftInfoResponseForNullableNftExtension + | NullableString | MinterResponse - | NftInfoResponseForEmpty + | NftInfoResponseForNullableNftExtension | NumTokensResponse | OperatorResponse | OwnerOfResponse1 - | OwnershipForString + | OwnershipForAddr2 | TokensResponse1; query: | OwnerOfArgs @@ -95,11 +141,17 @@ export interface DropWithdrawalVoucherSchema { | OperatorArgs | AllOperatorsArgs | NftInfoArgs + | GetNftByExtensionArgs | AllNftInfoArgs | TokensArgs | AllTokensArgs - | ExtensionArgs; + | ExtensionArgs + | GetCollectionExtensionArgs; execute: + | UpdateOwnershipArgs + | UpdateMinterOwnershipArgs + | UpdateCreatorOwnershipArgs + | UpdateCollectionInfoArgs | TransferNftArgs | SendNftArgs | ApproveArgs @@ -108,12 +160,14 @@ export interface DropWithdrawalVoucherSchema { | RevokeAllArgs | MintArgs | BurnArgs - | ExtensionArgs1 - | UpdateOwnershipArgs; + | UpdateExtensionArgs + | UpdateNftInfoArgs + | SetWithdrawAddressArgs + | WithdrawFundsArgs; instantiate?: InstantiateMsg; [k: string]: unknown; } -export interface AllNftInfoResponseForEmpty { +export interface AllNftInfoResponseForNullableNftExtension { /** * Who can transfer the token */ @@ -121,7 +175,7 @@ export interface AllNftInfoResponseForEmpty { /** * Data on the token itself, */ - info: NftInfoResponseFor_Empty; + info: NftInfoResponseFor_Nullable_NftExtension; } export interface OwnerOfResponse { /** @@ -141,25 +195,29 @@ export interface Approval { /** * Account that can transfer/send the token */ - spender: string; + spender: Addr; } -export interface NftInfoResponseFor_Empty { +export interface NftInfoResponseFor_Nullable_NftExtension { /** * You can add any custom metadata here when you extend cw721-base */ - extension: Empty; + extension?: NftExtension | null; /** * Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema */ token_uri?: string | null; } -/** - * An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message. - * - * It is designed to be expressable in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451) - */ -export interface Empty { - [k: string]: unknown; +export interface NftExtension { + amount: Uint128; + attributes?: Trait[] | null; + batch_id: string; + description?: string | null; + name: string; +} +export interface Trait { + display_type?: string | null; + trait_type: string; + value: string; } export interface OperatorsResponse { operators: Approval[]; @@ -176,21 +234,141 @@ export interface ApprovalResponse { export interface ApprovalsResponse { approvals: Approval[]; } +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface CollectionInfoAndExtensionResponseForEmpty { + extension: Empty; + name: string; + symbol: string; + updated_at: Timestamp; +} +/** + * An empty struct that serves as a placeholder in different places, such as contracts that don't set a custom message. + * + * It is designed to be expressible in correct JSON and JSON Schema but contains no meaningful data. Previously we used enums without cases, but those cannot represented as valid JSON Schema (https://github.com/CosmWasm/cosmwasm/issues/451) + */ +export interface Empty {} +/** + * This is a wrapper around CollectionInfo that includes the extension, contract info, and number of tokens (supply). + */ +export interface AllInfoResponse { + collection_extension: Attribute[]; + collection_info: CollectionInfo; + contract_info: ContractInfoResponse; + num_tokens: number; +} +export interface Attribute { + key: string; + value: Binary; +} +export interface CollectionInfo { + name: string; + symbol: string; + updated_at: Timestamp; +} export interface ContractInfoResponse { + /** + * admin who can run migrations (if any) + */ + admin?: Addr | null; + code_id: number; + /** + * address that instantiated this contract + */ + creator: Addr; + /** + * set if this contract has bound an IBC port + */ + ibc_port?: string | null; + /** + * if set, the contract is pinned to the cache, and thus uses less gas when called + */ + pinned: boolean; +} +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface CollectionInfoAndExtensionResponseForEmpty1 { + extension: Empty; name: string; symbol: string; + updated_at: Timestamp; +} +/** + * This is a wrapper around CollectionInfo that includes the extension. + */ +export interface ConfigResponseForEmpty { + collection_extension: Empty; + collection_info: CollectionInfo; + contract_info: ContractInfoResponse; + creator_ownership: OwnershipFor_Addr; + minter_ownership: OwnershipFor_Addr; + num_tokens: number; + withdraw_address?: string | null; } /** - * Shows who can mint these tokens + * The contract's ownership info + */ +export interface OwnershipFor_Addr { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; +} +/** + * The contract's ownership info + */ +export interface OwnershipForAddr { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; +} +/** + * The contract's ownership info + */ +export interface OwnershipForAddr1 { + /** + * The contract's current owner. `None` if the ownership has been renounced. + */ + owner?: Addr | null; + /** + * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. + */ + pending_expiry?: Expiration | null; + /** + * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. + */ + pending_owner?: Addr | null; +} +/** + * Deprecated: use Cw721QueryMsg::GetMinterOwnership instead! Shows who can mint these tokens. */ export interface MinterResponse { minter?: string | null; } -export interface NftInfoResponseForEmpty { +export interface NftInfoResponseForNullableNftExtension { /** * You can add any custom metadata here when you extend cw721-base */ - extension: Empty; + extension?: NftExtension | null; /** * Universal resource identifier for this NFT Should point to a JSON file that conforms to the ERC721 Metadata JSON Schema */ @@ -215,11 +393,11 @@ export interface OwnerOfResponse1 { /** * The contract's ownership info */ -export interface OwnershipForString { +export interface OwnershipForAddr2 { /** * The contract's current owner. `None` if the ownership has been renounced. */ - owner?: string | null; + owner?: Addr | null; /** * The deadline for the pending owner to accept the ownership. `None` if there isn't a pending ownership transfer, or if a transfer exists and it doesn't have a deadline. */ @@ -227,7 +405,7 @@ export interface OwnershipForString { /** * The account who has been proposed to take over the ownership. `None` if there isn't a pending ownership transfer. */ - pending_owner?: string | null; + pending_owner?: Addr | null; } export interface TokensResponse1 { /** @@ -268,6 +446,11 @@ export interface AllOperatorsArgs { export interface NftInfoArgs { token_id: string; } +export interface GetNftByExtensionArgs { + extension?: NftExtension | null; + limit?: number | null; + start_after?: string | null; +} export interface AllNftInfoArgs { /** * unset or false will filter out expired approvals, you must set to true to see them @@ -287,6 +470,17 @@ export interface AllTokensArgs { export interface ExtensionArgs { msg: Empty; } +export interface GetCollectionExtensionArgs { + msg: Empty; +} +export interface UpdateCollectionInfoArgs { + collection_info: CollectionInfoMsgFor_Empty; +} +export interface CollectionInfoMsgFor_Empty { + extension: Empty; + name?: string | null; + symbol?: string | null; +} export interface TransferNftArgs { recipient: string; token_id: string; @@ -316,7 +510,7 @@ export interface MintArgs { /** * Any custom extension used by this contract */ - extension?: Metadata | null; + extension?: NftExtensionMsg | null; /** * The owner of the newly minter NFT */ @@ -330,29 +524,50 @@ export interface MintArgs { */ token_uri?: string | null; } -export interface Metadata { +export interface NftExtensionMsg { amount: Uint128; attributes?: Trait[] | null; batch_id: string; description?: string | null; name: string; } -export interface Trait { - display_type?: string | null; - trait_type: string; - value: string; -} export interface BurnArgs { token_id: string; } -export interface ExtensionArgs1 { +export interface UpdateExtensionArgs { msg: Empty; } +export interface UpdateNftInfoArgs { + extension?: NftExtensionMsg | null; + token_id: string; + /** + * NOTE: Empty string is handled as None + */ + token_uri?: string | null; +} +export interface SetWithdrawAddressArgs { + address: string; +} +export interface WithdrawFundsArgs { + amount: Coin; +} +export interface Coin { + amount: Uint128; + denom: string; +} export interface InstantiateMsg { + /** + * Optional extension of the collection metadata + */ + collection_info_extension: Empty; + /** + * Sets the creator of collection. The creator is the only one eligible to update `CollectionInfo`. + */ + creator?: string | null; /** * The minter is the only one who can create new NFTs. This is designed for a base NFT that is controlled by an external program or contract. You will likely replace this with custom logic in custom NFTs */ - minter: string; + minter?: string | null; /** * Name of the NFT contract */ @@ -361,6 +576,7 @@ export interface InstantiateMsg { * Symbol of the NFT contract */ symbol: string; + withdraw_address?: string | null; } @@ -429,13 +645,40 @@ export class Client { queryNumTokens = async(): Promise => { return this.client.queryContractSmart(this.contractAddress, { num_tokens: {} }); } - queryContractInfo = async(): Promise => { + queryContractInfo = async(): Promise => { return this.client.queryContractSmart(this.contractAddress, { contract_info: {} }); } - queryNftInfo = async(args: NftInfoArgs): Promise => { + queryGetConfig = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_config: {} }); + } + queryGetCollectionInfoAndExtension = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_info_and_extension: {} }); + } + queryGetAllInfo = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_all_info: {} }); + } + queryGetCollectionExtensionAttributes = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_extension_attributes: {} }); + } + queryOwnership = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { ownership: {} }); + } + queryMinter = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { minter: {} }); + } + queryGetMinterOwnership = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_minter_ownership: {} }); + } + queryGetCreatorOwnership = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_creator_ownership: {} }); + } + queryNftInfo = async(args: NftInfoArgs): Promise => { return this.client.queryContractSmart(this.contractAddress, { nft_info: args }); } - queryAllNftInfo = async(args: AllNftInfoArgs): Promise => { + queryGetNftByExtension = async(args: GetNftByExtensionArgs): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_nft_by_extension: args }); + } + queryAllNftInfo = async(args: AllNftInfoArgs): Promise => { return this.client.queryContractSmart(this.contractAddress, { all_nft_info: args }); } queryTokens = async(args: TokensArgs): Promise => { @@ -444,15 +687,35 @@ export class Client { queryAllTokens = async(args: AllTokensArgs): Promise => { return this.client.queryContractSmart(this.contractAddress, { all_tokens: args }); } - queryMinter = async(): Promise => { - return this.client.queryContractSmart(this.contractAddress, { minter: {} }); - } queryExtension = async(args: ExtensionArgs): Promise => { return this.client.queryContractSmart(this.contractAddress, { extension: args }); } - queryOwnership = async(): Promise => { - return this.client.queryContractSmart(this.contractAddress, { ownership: {} }); + queryGetCollectionExtension = async(args: GetCollectionExtensionArgs): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_collection_extension: args }); + } + queryGetWithdrawAddress = async(): Promise => { + return this.client.queryContractSmart(this.contractAddress, { get_withdraw_address: {} }); + } + updateOwnership = async(sender:string, args: UpdateOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.updateOwnershipMsg(args), fee || "auto", memo, funds); + } + updateOwnershipMsg = (args: UpdateOwnershipArgs): { update_ownership: UpdateOwnershipArgs } => { return { update_ownership: args }; } + updateMinterOwnership = async(sender:string, args: UpdateMinterOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.updateMinterOwnershipMsg(args), fee || "auto", memo, funds); + } + updateMinterOwnershipMsg = (args: UpdateMinterOwnershipArgs): { update_minter_ownership: UpdateMinterOwnershipArgs } => { return { update_minter_ownership: args }; } + updateCreatorOwnership = async(sender:string, args: UpdateCreatorOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.updateCreatorOwnershipMsg(args), fee || "auto", memo, funds); } + updateCreatorOwnershipMsg = (args: UpdateCreatorOwnershipArgs): { update_creator_ownership: UpdateCreatorOwnershipArgs } => { return { update_creator_ownership: args }; } + updateCollectionInfo = async(sender:string, args: UpdateCollectionInfoArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.updateCollectionInfoMsg(args), fee || "auto", memo, funds); + } + updateCollectionInfoMsg = (args: UpdateCollectionInfoArgs): { update_collection_info: UpdateCollectionInfoArgs } => { return { update_collection_info: args }; } transferNft = async(sender:string, args: TransferNftArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } return this.client.execute(sender, this.contractAddress, this.transferNftMsg(args), fee || "auto", memo, funds); @@ -493,14 +756,29 @@ export class Client { return this.client.execute(sender, this.contractAddress, this.burnMsg(args), fee || "auto", memo, funds); } burnMsg = (args: BurnArgs): { burn: BurnArgs } => { return { burn: args }; } - extension = async(sender:string, args: ExtensionArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + updateExtension = async(sender:string, args: UpdateExtensionArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } - return this.client.execute(sender, this.contractAddress, this.extensionMsg(args), fee || "auto", memo, funds); + return this.client.execute(sender, this.contractAddress, this.updateExtensionMsg(args), fee || "auto", memo, funds); } - extensionMsg = (args: ExtensionArgs): { extension: ExtensionArgs } => { return { extension: args }; } - updateOwnership = async(sender:string, args: UpdateOwnershipArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + updateExtensionMsg = (args: UpdateExtensionArgs): { update_extension: UpdateExtensionArgs } => { return { update_extension: args }; } + updateNftInfo = async(sender:string, args: UpdateNftInfoArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } - return this.client.execute(sender, this.contractAddress, this.updateOwnershipMsg(args), fee || "auto", memo, funds); + return this.client.execute(sender, this.contractAddress, this.updateNftInfoMsg(args), fee || "auto", memo, funds); } - updateOwnershipMsg = (args: UpdateOwnershipArgs): { update_ownership: UpdateOwnershipArgs } => { return { update_ownership: args }; } + updateNftInfoMsg = (args: UpdateNftInfoArgs): { update_nft_info: UpdateNftInfoArgs } => { return { update_nft_info: args }; } + setWithdrawAddress = async(sender:string, args: SetWithdrawAddressArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.setWithdrawAddressMsg(args), fee || "auto", memo, funds); + } + setWithdrawAddressMsg = (args: SetWithdrawAddressArgs): { set_withdraw_address: SetWithdrawAddressArgs } => { return { set_withdraw_address: args }; } + removeWithdrawAddress = async(sender: string, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.removeWithdrawAddressMsg(), fee || "auto", memo, funds); + } + removeWithdrawAddressMsg = (): { remove_withdraw_address: {} } => { return { remove_withdraw_address: {} } } + withdrawFunds = async(sender:string, args: WithdrawFundsArgs, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]): Promise => { + if (!isSigningCosmWasmClient(this.client)) { throw this.mustBeSigningClient(); } + return this.client.execute(sender, this.contractAddress, this.withdrawFundsMsg(args), fee || "auto", memo, funds); + } + withdrawFundsMsg = (args: WithdrawFundsArgs): { withdraw_funds: WithdrawFundsArgs } => { return { withdraw_funds: args }; } }