diff --git a/app/app.go b/app/app.go index 2c4253835..16776e9da 100644 --- a/app/app.go +++ b/app/app.go @@ -216,7 +216,6 @@ func NewSecretNetworkApp( bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) - // bApp.GRPCQueryRouter().RegisterSimulateService(bApp.Simulate, interfaceRegistry) // Initialize our application with the store keys it requires app := &SecretNetworkApp{ diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index 69ebcfac5..45d986097 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -282,6 +282,7 @@ func (ak *SecretAppKeepers) InitCustomKeepers( supportedFeatures, nil, nil, + &app.LastTxManager, ) ak.ComputeKeeper = &computeKeeper diff --git a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.lock b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.lock index f1d149ee9..9f9e46de9 100644 --- a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.lock +++ b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.lock @@ -2,6 +2,17 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + [[package]] name = "base16ct" version = "0.1.1" @@ -10,15 +21,15 @@ checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64ct" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdca834647821e0b13d9539a8634eb62d3501b6b6c2cec1722786ee6671b851" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "block-buffer" @@ -29,6 +40,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "byteorder" version = "1.4.3" @@ -37,9 +57,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" [[package]] name = "cfg-if" @@ -49,23 +69,62 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "const-oid" -version = "0.7.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3" +checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" + +[[package]] +name = "cosmwasm-crypto" +version = "1.1.9" +source = "git+https://github.com/scrtlabs/cosmwasm?rev=20c9294e03f9c65327f889822738cd822a7317eb#20c9294e03f9c65327f889822738cd822a7317eb" +dependencies = [ + "digest 0.10.6", + "ed25519-zebra", + "k256", + "rand_core 0.6.4", + "thiserror", +] [[package]] name = "cosmwasm-derive" -version = "1.0.0" -source = "git+https://github.com/scrtlabs/cosmwasm?branch=secret#ca0cbb1b7813594822b6993cf7c6b09ffb04acae" +version = "1.1.9" +source = "git+https://github.com/scrtlabs/cosmwasm?rev=20c9294e03f9c65327f889822738cd822a7317eb#20c9294e03f9c65327f889822738cd822a7317eb" +dependencies = [ + "syn 1.0.109", +] + +[[package]] +name = "cosmwasm-std" +version = "1.1.9" +source = "git+https://github.com/scrtlabs/cosmwasm?rev=20c9294e03f9c65327f889822738cd822a7317eb#20c9294e03f9c65327f889822738cd822a7317eb" +dependencies = [ + "base64", + "cosmwasm-crypto", + "cosmwasm-derive", + "derivative", + "forward_ref", + "hex", + "schemars", + "serde", + "serde-json-wasm 0.4.1", + "thiserror", + "uint", +] + +[[package]] +name = "cosmwasm-storage" +version = "1.1.9" +source = "git+https://github.com/scrtlabs/cosmwasm?rev=20c9294e03f9c65327f889822738cd822a7317eb#20c9294e03f9c65327f889822738cd822a7317eb" dependencies = [ - "syn", + "cosmwasm-std", + "serde", ] [[package]] name = "cpufeatures" -version = "0.2.2" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -78,24 +137,24 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-bigint" -version = "0.3.2" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c6a1d5fa1de37e071642dfa44ec552ca5b299adb128fab16138e24b548fd21" +checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ "generic-array", - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", "zeroize", ] [[package]] -name = "crypto-mac" -version = "0.11.1" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "subtle", + "typenum", ] [[package]] @@ -105,7 +164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" dependencies = [ "byteorder", - "digest", + "digest 0.9.0", "rand_core 0.5.1", "subtle", "zeroize", @@ -113,11 +172,23 @@ dependencies = [ [[package]] name = "der" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ "const-oid", + "zeroize", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -129,17 +200,28 @@ dependencies = [ "generic-array", ] +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + [[package]] name = "dyn-clone" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d07a982d1fb29db01e5a59b1918e03da4df7297eaeee7686ac45542fd4e59c8" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" [[package]] name = "ecdsa" -version = "0.13.4" +version = "0.14.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d69ae62e0ce582d56380743515fefaf1a8c70cec685d9677636d7e30ae9dc9" +checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c" dependencies = [ "der", "elliptic-curve", @@ -149,32 +231,34 @@ dependencies = [ [[package]] name = "ed25519-zebra" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "403ef3e961ab98f0ba902771d29f842058578bb1ce7e3c59dad5a6a93e784c69" +checksum = "7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6" dependencies = [ "curve25519-dalek", + "hashbrown", "hex", - "rand_core 0.6.3", + "rand_core 0.6.4", "serde", - "sha2", - "thiserror", + "sha2 0.9.9", "zeroize", ] [[package]] name = "elliptic-curve" -version = "0.11.12" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25b477563c2bfed38a3b7a60964c49e058b2510ad3f12ba3483fd8f62c2306d6" +checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3" dependencies = [ "base16ct", "crypto-bigint", "der", + "digest 0.10.6", "ff", "generic-array", "group", - "rand_core 0.6.3", + "pkcs8", + "rand_core 0.6.4", "sec1", "subtle", "zeroize", @@ -182,11 +266,11 @@ dependencies = [ [[package]] name = "ff" -version = "0.11.1" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "131655483be284720a17d74ff97592b8e76576dc25563148601df2d7c9080924" +checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160" dependencies = [ - "rand_core 0.6.3", + "rand_core 0.6.4", "subtle", ] @@ -198,9 +282,9 @@ checksum = "c8cbd1169bd7b4a0a20d92b9af7a7e0422888bd38a6f5ec29c1fd8c1558a272e" [[package]] name = "generic-array" -version = "0.14.5" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -208,35 +292,33 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.1.16" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "wasi", ] [[package]] -name = "getrandom" -version = "0.2.7" +name = "group" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7" dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "ff", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "group" -version = "0.11.0" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5ac374b108929de78460075f3dc439fa66df9d8fc77e8f12caa5165fcf0c89" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ff", - "rand_core 0.6.3", - "subtle", + "ahash", ] [[package]] @@ -247,38 +329,42 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hmac" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "crypto-mac", - "digest", + "digest 0.10.6", ] [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "k256" -version = "0.10.4" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19c3a5e0a0b8450278feda242592512e09f61c72e018b8cd5c859482802daf2d" +checksum = "72c1e0b51e7ec0a97369623508396067a486bd0cbed95a2659a4b863d28cfc8b" dependencies = [ "cfg-if", "ecdsa", "elliptic-curve", - "sec1", - "sha2", + "sha2 0.10.6", ] [[package]] name = "libc" -version = "0.2.126" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -288,29 +374,28 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "pkcs8" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" dependencies = [ "der", "spki", - "zeroize", ] [[package]] name = "proc-macro2" -version = "1.0.42" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.20" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -320,24 +405,21 @@ name = "rand_core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", -] [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.7", + "getrandom", ] [[package]] name = "rfc6979" -version = "0.1.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96ef608575f6392792f9ecf7890c00086591d29a83910939d430753f7c050525" +checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb" dependencies = [ "crypto-bigint", "hmac", @@ -346,15 +428,15 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.10" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "schemars" -version = "0.8.10" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1847b767a3d62d95cbf3d8a9f0e421cf57a0d8aa4f411d4b16525afb0284d4ed" +checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f" dependencies = [ "dyn-clone", "schemars_derive", @@ -364,22 +446,23 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.10" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4d7e1b012cb3d9129567661a63755ea4b8a7386d339dc945ae187e403c6743" +checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 1.0.109", ] [[package]] name = "sec1" -version = "0.2.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08da66b8b0965a5555b6bd6639e68ccba85e1e2506f5fbb089e93f8a04e1a2d1" +checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ + "base16ct", "der", "generic-array", "pkcs8", @@ -405,48 +488,11 @@ dependencies = [ "cc", ] -[[package]] -name = "secret-cosmwasm-crypto" -version = "1.0.0" -source = "git+https://github.com/scrtlabs/cosmwasm?branch=secret#ca0cbb1b7813594822b6993cf7c6b09ffb04acae" -dependencies = [ - "digest", - "ed25519-zebra", - "k256", - "rand_core 0.6.3", - "thiserror", -] - -[[package]] -name = "secret-cosmwasm-std" -version = "1.0.0" -source = "git+https://github.com/scrtlabs/cosmwasm?branch=secret#ca0cbb1b7813594822b6993cf7c6b09ffb04acae" -dependencies = [ - "base64", - "cosmwasm-derive", - "forward_ref", - "schemars", - "secret-cosmwasm-crypto", - "serde", - "serde-json-wasm 0.4.1", - "thiserror", - "uint", -] - -[[package]] -name = "secret-cosmwasm-storage" -version = "1.0.0" -source = "git+https://github.com/scrtlabs/cosmwasm?branch=secret#ca0cbb1b7813594822b6993cf7c6b09ffb04acae" -dependencies = [ - "secret-cosmwasm-std", - "serde", -] - [[package]] name = "serde" -version = "1.0.140" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] @@ -471,13 +517,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.140" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -488,14 +534,14 @@ checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -508,28 +554,39 @@ version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest", + "digest 0.9.0", "opaque-debug", ] +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.6", +] + [[package]] name = "signature" -version = "1.4.0" +version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02658e48d89f2bec991f9a78e69cfa4c316f8d6a6c4ec12fae1aeb263d486788" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest", - "rand_core 0.6.3", + "digest 0.10.6", + "rand_core 0.6.4", ] [[package]] name = "spki" -version = "0.5.4" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ "base64ct", "der", @@ -549,9 +606,20 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" dependencies = [ "proc-macro2", "quote", @@ -560,35 +628,35 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.31" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "uint" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" dependencies = [ "byteorder", "crunchy", @@ -598,18 +666,18 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.2" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "v1-sanity-contract" version = "0.0.1" dependencies = [ + "cosmwasm-std", + "cosmwasm-storage", "schemars", "secp256k1", - "secret-cosmwasm-std", - "secret-cosmwasm-storage", "serde", "serde-json-wasm 0.2.3", ] @@ -620,12 +688,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -634,6 +696,6 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" diff --git a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.toml b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.toml index 29311035e..e8287a0bc 100644 --- a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.toml +++ b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.toml @@ -31,8 +31,8 @@ backtraces = ["cosmwasm-std/backtraces"] with_floats = [] [dependencies] -cosmwasm-std = { git = "https://github.com/scrtlabs/cosmwasm", branch = "secret", package = "secret-cosmwasm-std" } -cosmwasm-storage = { git = "https://github.com/scrtlabs/cosmwasm", branch = "secret", package = "secret-cosmwasm-storage" } +cosmwasm-std = { git = "https://github.com/scrtlabs/cosmwasm", rev = "20c9294e03f9c65327f889822738cd822a7317eb", package = "cosmwasm-std" } +cosmwasm-storage = { git = "https://github.com/scrtlabs/cosmwasm", rev = "20c9294e03f9c65327f889822738cd822a7317eb", package = "cosmwasm-storage" } schemars = "0.8.1" serde = { version = "1.0.114", default-features = false, features = [ diff --git a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/contract.rs b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/contract.rs index 5d081339e..7a0d5a096 100644 --- a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/contract.rs +++ b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/contract.rs @@ -342,6 +342,55 @@ pub fn wasm_msg(ty: String) -> StdResult { #[entry_point] pub fn execute(deps: DepsMut, env: Env, info: MessageInfo, msg: ExecuteMsg) -> StdResult { match msg { + ExecuteMsg::IncrementTimes { times } => { + let mut res = Response::default(); + for _ in 0..times { + res = res.add_message(CosmosMsg::Wasm(WasmMsg::Execute { + code_hash: env.contract.code_hash.clone(), + contract_addr: env.contract.address.clone().into_string(), + msg: Binary::from("{\"increment\":{\"addition\":1}}".as_bytes().to_vec()), + funds: vec![], + })); + } + Ok(res) + } + ExecuteMsg::LastMsgMarkerNop {} => { + Ok(Response::new().add_message(CosmosMsg::LastMsgMark(Empty {}))) + } + ExecuteMsg::LastMsgMarker {} => { + let increment_msg = SubMsg { + id: 0, + msg: CosmosMsg::Wasm(WasmMsg::Execute { + code_hash: env.contract.code_hash, + contract_addr: env.contract.address.into_string(), + msg: Binary::from("{\"increment\":{\"addition\":1}}".as_bytes().to_vec()), + funds: vec![], + }) + .into(), + reply_on: ReplyOn::Never, + gas_limit: None, + }; + + let bank_msg = SubMsg { + id: 0, + msg: CosmosMsg::Bank(BankMsg::Send { + to_address: "".to_string(), + amount: coins(1u128, "ust"), + }) + .into(), + reply_on: ReplyOn::Never, + gas_limit: None, + }; + Ok(Response::new() + .add_submessages(vec![ + increment_msg.clone(), + increment_msg.clone(), + increment_msg.clone(), + increment_msg.clone(), + ]) + .add_message(CosmosMsg::LastMsgMark(Empty {})) + .add_submessages(vec![increment_msg.clone(), bank_msg.clone()])) + } ExecuteMsg::WasmMsg { ty } => wasm_msg(ty), ExecuteMsg::Increment { addition } => increment(env, deps, addition), ExecuteMsg::SendFundsWithErrorWithReply {} => Ok(Response::new() diff --git a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/msg.rs b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/msg.rs index eb1c4b601..41ffb1647 100644 --- a/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/msg.rs +++ b/cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/msg.rs @@ -114,6 +114,11 @@ pub enum InstantiateMsg { #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[serde(rename_all = "snake_case")] pub enum ExecuteMsg { + IncrementTimes { + times: u64, + }, + LastMsgMarkerNop {}, + LastMsgMarker {}, WasmMsg { ty: String, }, diff --git a/cosmwasm/enclaves/shared/cosmwasm-types/v1.0/src/results/cosmos_msg.rs b/cosmwasm/enclaves/shared/cosmwasm-types/v1.0/src/results/cosmos_msg.rs index dfe5d4f76..0556348a1 100644 --- a/cosmwasm/enclaves/shared/cosmwasm-types/v1.0/src/results/cosmos_msg.rs +++ b/cosmwasm/enclaves/shared/cosmwasm-types/v1.0/src/results/cosmos_msg.rs @@ -29,6 +29,7 @@ where Ibc(IbcMsg), Wasm(WasmMsg), Gov(GovMsg), + LastMsgMark(T), } /// The message types of the bank module. diff --git a/go-cosmwasm/types/v1/msg_v1.go b/go-cosmwasm/types/v1/msg_v1.go index 57109eaa6..9fa91f466 100644 --- a/go-cosmwasm/types/v1/msg_v1.go +++ b/go-cosmwasm/types/v1/msg_v1.go @@ -78,6 +78,7 @@ type CosmosMsg struct { Staking *StakingMsg `json:"staking,omitempty"` Stargate *StargateMsg `json:"stargate,omitempty"` Wasm *WasmMsg `json:"wasm,omitempty"` + LastMsgMark json.RawMessage `json:"last_msg_mark,omitempty"` } type BankMsg struct { diff --git a/go.mod b/go.mod index 464f6af9d..6c9bf4aee 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,8 @@ go 1.19 replace ( // dragonberry github.com/confio/ics23/go => github.com/cosmos/cosmos-sdk/ics23/go v0.8.0 - github.com/cosmos/cosmos-sdk => github.com/scrtlabs/cosmos-sdk v0.45.12-secret-1.7 + // last-marker-in-baseapp branch + github.com/cosmos/cosmos-sdk => github.com/scrtlabs/cosmos-sdk v0.45.13-0.20230409144936-ac748ac472c2 // Fix OSX Ledger Connection Issues - Premerged https://github.com/cosmos/ledger-cosmos-go/pull/36/files github.com/cosmos/ledger-cosmos-go => github.com/chillyvee/ledger-cosmos-go v0.12.2 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index 3b1d81f52..45d339120 100644 --- a/go.sum +++ b/go.sum @@ -683,8 +683,8 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/scrtlabs/cosmos-sdk v0.45.12-secret-1.7 h1:817+U5L2eb3jO7eQ565cpx2r8PIAeDNv27a4iLgTRvA= -github.com/scrtlabs/cosmos-sdk v0.45.12-secret-1.7/go.mod h1:6n46SDUlhsl+a3+CaO1Xqb35CFxMqMdiouXnhZU2vvQ= +github.com/scrtlabs/cosmos-sdk v0.45.13-0.20230409144936-ac748ac472c2 h1:qkBemXVTX140G4uBbqrkXioG0uU5gWns6F79As7V7gk= +github.com/scrtlabs/cosmos-sdk v0.45.13-0.20230409144936-ac748ac472c2/go.mod h1:6n46SDUlhsl+a3+CaO1Xqb35CFxMqMdiouXnhZU2vvQ= github.com/scrtlabs/tendermint v1.7.1-secret h1:ESBUNKAe6ZUqlXr+AFXnXWbdUt2A1duXd+ekzgkfve4= github.com/scrtlabs/tendermint v1.7.1-secret/go.mod h1:BbUUE0SOvsNFRXQYgY88eo2wyHjbeWweoEG7vd90BaI= github.com/scrtlabs/tm-secret-enclave v1.7.1 h1:TkeF/1rGl1/UwM0AHTmhZhm3uO4edQsAq64Kr/1K22M= diff --git a/x/compute/internal/keeper/ante.go b/x/compute/internal/keeper/ante.go index 40e684ab0..629c9a06b 100644 --- a/x/compute/internal/keeper/ante.go +++ b/x/compute/internal/keeper/ante.go @@ -2,7 +2,6 @@ package keeper import ( "encoding/binary" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/scrtlabs/SecretNetwork/x/compute/internal/types" ) diff --git a/x/compute/internal/keeper/keeper.go b/x/compute/internal/keeper/keeper.go index fe282cfbb..03179524e 100644 --- a/x/compute/internal/keeper/keeper.go +++ b/x/compute/internal/keeper/keeper.go @@ -75,6 +75,7 @@ type Keeper struct { HomeDir string // authZPolicy AuthorizationPolicy // paramSpace subspace.Subspace + LastMsgManager *baseapp.LastMsgMarkerContainer } func moduleLogger(ctx sdk.Context) log.Logger { @@ -108,6 +109,7 @@ func NewKeeper( supportedFeatures string, customEncoders *MessageEncoders, customPlugins *QueryPlugins, + LastMsgManager *baseapp.LastMsgMarkerContainer, ) Keeper { wasmer, err := wasm.NewWasmer(filepath.Join(homeDir, "wasm"), supportedFeatures, wasmConfig.CacheSize, wasmConfig.EnclaveCacheSize) if err != nil { @@ -126,12 +128,17 @@ func NewKeeper( messenger: NewMessageHandler(msgRouter, legacyMsgRouter, customEncoders, channelKeeper, capabilityKeeper, portSource, cdc), queryGasLimit: wasmConfig.SmartQueryGasLimit, HomeDir: homeDir, + LastMsgManager: LastMsgManager, } keeper.queryPlugins = DefaultQueryPlugins(govKeeper, distKeeper, mintKeeper, bankKeeper, stakingKeeper, queryRouter, &keeper, channelKeeper).Merge(customPlugins) return keeper } +func (k Keeper) GetLastMsgMarkerContainer() *baseapp.LastMsgMarkerContainer { + return k.LastMsgManager +} + // Create uploads and compiles a WASM contract, returning a short identifier for the contract func (k Keeper) Create(ctx sdk.Context, creator sdk.AccAddress, wasmCode []byte, source string, builder string) (codeID uint64, err error) { wasmCode, err = uncompress(wasmCode) @@ -1073,3 +1080,7 @@ func (k Keeper) reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply v1w return nil, sdkerrors.Wrap(types.ErrReplyFailed, fmt.Sprintf("cannot detect response type: %+v", res)) } } + +func (k Keeper) GetStoreKey() sdk.StoreKey { + return k.storeKey +} diff --git a/x/compute/internal/keeper/keeper_test.go b/x/compute/internal/keeper/keeper_test.go index b292f9a8f..e4d800513 100644 --- a/x/compute/internal/keeper/keeper_test.go +++ b/x/compute/internal/keeper/keeper_test.go @@ -590,7 +590,7 @@ func TestExecuteWithDeposit(t *testing.T) { } // when - _, _, _, _, _, err = execHelperImpl(t, keeper, ctx, contractAddr, bob, bobPriv, `{"release":{}}`, false, false, defaultGasForTests, deposit, wasmCalls) + _, _, _, _, _, err = execHelperCustomWasmCount(t, keeper, ctx, contractAddr, bob, bobPriv, `{"release":{}}`, false, false, defaultGasForTests, deposit, wasmCalls) // then if spec.expError { diff --git a/x/compute/internal/keeper/msg_dispatcher.go b/x/compute/internal/keeper/msg_dispatcher.go index 9af8845e1..95cb4468d 100644 --- a/x/compute/internal/keeper/msg_dispatcher.go +++ b/x/compute/internal/keeper/msg_dispatcher.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "fmt" + "github.com/cosmos/cosmos-sdk/baseapp" "os" "sort" "strings" @@ -27,6 +28,7 @@ type Messenger interface { // Replyer is a subset of keeper that can handle replies to submessages type Replyer interface { reply(ctx sdk.Context, contractAddress sdk.AccAddress, reply v1wasmTypes.Reply, ogTx []byte, ogSigInfo wasmTypes.VerificationInfo) ([]byte, error) + GetLastMsgMarkerContainer() *baseapp.LastMsgMarkerContainer } // MessageDispatcher coordinates message sending and submessage reply/ state commits @@ -186,6 +188,18 @@ func redactError(err error) (bool, error) { func (d MessageDispatcher) DispatchSubmessages(ctx sdk.Context, contractAddr sdk.AccAddress, ibcPort string, msgs []v1wasmTypes.SubMsg, ogTx []byte, ogSigInfo wasmTypes.VerificationInfo, ogCosmosMessageVersion wasmTypes.CosmosMsgVersion) ([]byte, error) { var rsp []byte for _, msg := range msgs { + + if d.keeper.GetLastMsgMarkerContainer().GetMarker() { + return nil, sdkerrors.Wrap(sdkerrors.ErrLastTx, "Cannot send messages or submessages after last tx marker was set") + } + + if msg.Msg.LastMsgMark != nil { + d.keeper.GetLastMsgMarkerContainer().SetMarker(true) + + // no handler is defined for marker - it's just to get here + break + } + // Check replyOn validity switch msg.ReplyOn { case v1wasmTypes.ReplySuccess, v1wasmTypes.ReplyError, v1wasmTypes.ReplyAlways, v1wasmTypes.ReplyNever: diff --git a/x/compute/internal/keeper/secret_contracts_exec_test.go b/x/compute/internal/keeper/secret_contracts_exec_test.go index a4663e382..d299ab684 100644 --- a/x/compute/internal/keeper/secret_contracts_exec_test.go +++ b/x/compute/internal/keeper/secret_contracts_exec_test.go @@ -1297,7 +1297,7 @@ func TestSendFunds(t *testing.T) { } else if originType == "exec" { _, _, originAddress, _, _ = initHelper(t, keeper, ctx, originCodeId, helperWallet, helperPrivKey, `{"nop":{}}`, false, originVersion.IsCosmWasmV1, defaultGasForTests) - _, _, _, wasmEvents, _, err = execHelperMultipleCoins(t, keeper, ctx, originAddress, fundingWallet, fundingWalletPrivKey, msg, false, originVersion.IsCosmWasmV1, math.MaxUint64, stringToCoins(test.balancesBefore)) + _, _, _, wasmEvents, _, err = execHelperMultipleCoins(t, keeper, ctx, originAddress, fundingWallet, fundingWalletPrivKey, msg, false, originVersion.IsCosmWasmV1, math.MaxUint64, stringToCoins(test.balancesBefore), -1) } else { // user sends directly to contract originAddress = fundingWallet @@ -1306,7 +1306,7 @@ func TestSendFunds(t *testing.T) { wasmCount = 0 } if destinationType == "exec" { - _, _, _, _, _, err = execHelperMultipleCoinsImpl(t, keeper, ctx, destinationAddr, fundingWallet, fundingWalletPrivKey, `{"no_data":{}}`, false, destinationVersion.IsCosmWasmV1, math.MaxUint64, stringToCoins(test.coinsToSend), wasmCount) + _, _, _, _, _, err = execHelperMultipleCoins(t, keeper, ctx, destinationAddr, fundingWallet, fundingWalletPrivKey, `{"no_data":{}}`, false, destinationVersion.IsCosmWasmV1, math.MaxUint64, stringToCoins(test.coinsToSend), wasmCount) } else { _, _, destinationAddr, _, err = initHelperImpl(t, keeper, ctx, destinationCodeId, fundingWallet, fundingWalletPrivKey, `{"nop":{}}`, false, destinationVersion.IsCosmWasmV1, math.MaxUint64, wasmCount, stringToCoins(test.coinsToSend)) } @@ -1632,7 +1632,7 @@ func TestGasIsChargedForExecCallbackToExec(t *testing.T) { require.Empty(t, initErr) // exec callback to exec - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"a":{"contract_addr":"%s","code_hash":"%s","x":1,"y":2}}`, addr, codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 3) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"a":{"contract_addr":"%s","code_hash":"%s","x":1,"y":2}}`, addr, codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 3) require.Empty(t, err) }) } @@ -2281,3 +2281,17 @@ func TestConsumeExact(t *testing.T) { }) } } + +func TestLastMsgMarkerMultipleMsgsInATx(t *testing.T) { + ctx, keeper, codeID, _, walletA, privKeyA, _, _ := setupTest(t, TestContractPaths[v1Contract], sdk.NewCoins()) + + _, _, contractAddress, _, _ := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{"nop": {}}`, true, true, defaultGasForTests) + + msgs := []string{`{"last_msg_marker_nop":{}}`, `{"last_msg_marker_nop":{}}`} + + results, err := execHelperMultipleMsgs(t, keeper, ctx, contractAddress, walletA, privKeyA, msgs, true, true, math.MaxUint64, 0) + require.NotEqual(t, nil, err) + println("Error: ", err) + + require.Equal(t, 1, len(results)) +} diff --git a/x/compute/internal/keeper/secret_contracts_init_test.go b/x/compute/internal/keeper/secret_contracts_init_test.go index b47e41b7a..3bcc321d1 100644 --- a/x/compute/internal/keeper/secret_contracts_init_test.go +++ b/x/compute/internal/keeper/secret_contracts_init_test.go @@ -499,7 +499,7 @@ func TestGasIsChargedForExecCallbackToInit(t *testing.T) { require.Empty(t, initErr) // exec callback to init - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"callback_to_init":{"code_id":%d,"code_hash":"%s"}}`, codeID, codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"callback_to_init":{"code_id":%d,"code_hash":"%s"}}`, codeID, codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.Empty(t, err) }) } @@ -857,7 +857,7 @@ func TestCodeHashExecCallInit(t *testing.T) { require.Empty(t, err) t.Run("GoodCodeHash", func(t *testing.T) { - _, _, _, events, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, events, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.Empty(t, err) @@ -885,7 +885,7 @@ func TestCodeHashExecCallInit(t *testing.T) { ) }) t.Run("EmptyCodeHash", func(t *testing.T) { - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"","msg":"%s","label":"2"}}`, codeID, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"","msg":"%s","label":"2"}}`, codeID, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.NotEmpty(t, err) require.Contains(t, @@ -894,7 +894,7 @@ func TestCodeHashExecCallInit(t *testing.T) { ) }) t.Run("TooBigCodeHash", func(t *testing.T) { - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%sa","msg":"%s","label":"3"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%sa","msg":"%s","label":"3"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.NotEmpty(t, err) if testContract.IsCosmWasmV1 { @@ -910,7 +910,7 @@ func TestCodeHashExecCallInit(t *testing.T) { } }) t.Run("TooSmallCodeHash", func(t *testing.T) { - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"4"}}`, codeID, codeHash[0:63], `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"4"}}`, codeID, codeHash[0:63], `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.NotEmpty(t, err) require.Contains(t, @@ -919,7 +919,7 @@ func TestCodeHashExecCallInit(t *testing.T) { ) }) t.Run("IncorrectCodeHash", func(t *testing.T) { - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","msg":"%s","label":"5"}}`, codeID, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","msg":"%s","label":"5"}}`, codeID, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.NotEmpty(t, err) require.Contains(t, @@ -939,10 +939,10 @@ func TestLabelCollisionWhenMultipleCallbacksToInitFromSameContract(t *testing.T) _, _, addr, _, err := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{"nop":{}}`, true, testContract.IsCosmWasmV1, defaultGasForTests) require.Empty(t, err) - _, _, _, _, _, err = execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) + _, _, _, _, _, err = execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 2) require.Empty(t, err) - _, _, _, _, _, err = execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 1) + _, _, _, _, _, err = execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"call_to_init":{"code_id":%d,"code_hash":"%s","msg":"%s","label":"1"}}`, codeID, codeHash, `{\"nop\":{}}`), false, testContract.IsCosmWasmV1, defaultGasForTests, 0, 1) require.NotEmpty(t, err) require.NotNil(t, err.GenericErr) require.Contains(t, err.GenericErr.Msg, "contract account already exists") diff --git a/x/compute/internal/keeper/secret_contracts_query_test.go b/x/compute/internal/keeper/secret_contracts_query_test.go index c7b45c6b3..c8345ea5f 100644 --- a/x/compute/internal/keeper/secret_contracts_query_test.go +++ b/x/compute/internal/keeper/secret_contracts_query_test.go @@ -392,7 +392,7 @@ func TestGasIsChargedForExecExternalQuery(t *testing.T) { _, _, addr, _, initErr := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{"nop":{}}`, true, testContract.IsCosmWasmV1, defaultGasForTests) require.Empty(t, initErr) - _, _, _, _, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"send_external_query_depth_counter":{"to":"%s","depth":2,"code_hash":"%s"}}`, addr.String(), codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 3) + _, _, _, _, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, fmt.Sprintf(`{"send_external_query_depth_counter":{"to":"%s","depth":2,"code_hash":"%s"}}`, addr.String(), codeHash), true, testContract.IsCosmWasmV1, defaultGasForTests, 0, 3) require.Empty(t, err) }) } @@ -598,6 +598,45 @@ func TestV1EndpointsSanity(t *testing.T) { require.Equal(t, uint32(23), resp.Get.Count) } +func TestLastMsgMarker(t *testing.T) { + ctx, keeper, codeID, _, walletA, privKeyA, _, _ := setupTest(t, TestContractPaths[v1Contract], sdk.NewCoins()) + + _, _, contractAddress, _, _ := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{"counter":{"counter":10, "expires":100}}`, true, true, defaultGasForTests) + + _, err := execHelperMultipleMsgs(t, keeper, ctx, contractAddress, walletA, privKeyA, []string{`{"last_msg_marker":{}}`}, true, true, math.MaxUint64, 0) + require.Empty(t, err) + + queryRes, qErr := queryHelper(t, keeper, ctx, contractAddress, `{"get":{}}`, true, true, math.MaxUint64) + require.Empty(t, qErr) + + var resp v1QueryResponse + e := json.Unmarshal([]byte(queryRes), &resp) + require.NoError(t, e) + + require.Equal(t, uint32(14), resp.Get.Count) +} + +func TestLastMsgMarkerWithMoreThanOneTx(t *testing.T) { + ctx, keeper, codeID, _, walletA, privKeyA, _, _ := setupTest(t, TestContractPaths[v1Contract], sdk.NewCoins()) + + _, _, contractAddress, _, _ := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{"counter":{"counter":10, "expires":100}}`, true, true, defaultGasForTests) + + _, _, _, _, _, err := execHelper(t, keeper, ctx, contractAddress, walletA, privKeyA, `{"last_msg_marker":{}}`, true, true, math.MaxUint64, 0) + require.Empty(t, err) + + _, _, _, _, _, err = execHelper(t, keeper, ctx, contractAddress, walletA, privKeyA, `{"increment_times":{"times": 5}}`, true, true, math.MaxUint64, 0) + require.Empty(t, err) + + queryRes, qErr := queryHelper(t, keeper, ctx, contractAddress, `{"get":{}}`, true, true, math.MaxUint64) + require.Empty(t, qErr) + + var resp v1QueryResponse + e := json.Unmarshal([]byte(queryRes), &resp) + require.NoError(t, e) + + require.Equal(t, uint32(19), resp.Get.Count) +} + func TestV1QueryWorksWithEnv(t *testing.T) { ctx, keeper, codeID, _, walletA, privKeyA, _, _ := setupTest(t, TestContractPaths[v1Contract], sdk.NewCoins()) diff --git a/x/compute/internal/keeper/secret_contracts_utils_test.go b/x/compute/internal/keeper/secret_contracts_utils_test.go index a22c1ceeb..39ed9f9b9 100644 --- a/x/compute/internal/keeper/secret_contracts_utils_test.go +++ b/x/compute/internal/keeper/secret_contracts_utils_test.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "os" "regexp" "strings" @@ -25,8 +26,6 @@ import ( "github.com/scrtlabs/SecretNetwork/x/compute/internal/types" ) -type ContractEvent []v010cosmwasm.LogAttribute - type TestContract struct { CosmWasmVersion string IsCosmWasmV1 bool @@ -317,7 +316,7 @@ type WasmCounterGasMeter struct { gasMeter sdk.GasMeter } -func (wasmGasMeter *WasmCounterGasMeter) RefundGas(amount stypes.Gas, descriptor string) {} +func (wasmGasMeter *WasmCounterGasMeter) RefundGas(_ stypes.Gas, _ string) {} func (wasmGasMeter *WasmCounterGasMeter) GasConsumed() sdk.Gas { return wasmGasMeter.gasMeter.GasConsumed() @@ -416,12 +415,49 @@ func queryHelperImpl( return string(resultBz), cosmwasm.StdError{} } +//func execHelperImpl( +// t *testing.T, keeper Keeper, ctx sdk.Context, +// contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, +// isErrorEncrypted bool, isV1Contract bool, gas uint64, coin int64, wasmCallCount int64, shouldSkipAttributes ...bool, +//) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { +// return execHelperMultipleCoinsImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, execMsg, isErrorEncrypted, isV1Contract, gas, sdk.NewCoins(sdk.NewInt64Coin("denom", coin)), wasmCallCount, shouldSkipAttributes...) +//} + +func execHelperCustomWasmCount( + t *testing.T, keeper Keeper, ctx sdk.Context, + contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, + isErrorEncrypted bool, isV1Contract bool, gas uint64, coin int64, wasmCallCount int64, shouldSkipAttributes ...bool, +) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { + results, err := execTxBuilderImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, []string{execMsg}, isErrorEncrypted, isV1Contract, gas, sdk.NewCoins(sdk.NewCoin("denom", sdk.NewInt(coin))), wasmCallCount, shouldSkipAttributes...) + + if len(results) != 1 { + panic("Single msg test somehow returned multiple results") + } + + if err != nil { + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, *err.CosmWasm + } + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, cosmwasm.StdError{} + // todo: lol refactor tests to use the struct + +} + func execHelperMultipleCoins( t *testing.T, keeper Keeper, ctx sdk.Context, contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, - isErrorEncrypted bool, isV1Contract bool, gas uint64, coins sdk.Coins, shouldSkipAttributes ...bool, + isErrorEncrypted bool, isV1Contract bool, gas uint64, coins sdk.Coins, wasmCount int64, shouldSkipAttributes ...bool, ) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { - return execHelperMultipleCoinsImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, execMsg, isErrorEncrypted, isV1Contract, gas, coins, -1, shouldSkipAttributes...) + results, err := execTxBuilderImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, []string{execMsg}, isErrorEncrypted, isV1Contract, gas, coins, wasmCount, shouldSkipAttributes...) + + if len(results) != 1 { + panic("Single msg test somehow returned multiple results") + } + + // todo: lol refactor tests to use the struct + if err != nil { + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, *err.CosmWasm + } + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, cosmwasm.StdError{} } func execHelper( @@ -429,35 +465,53 @@ func execHelper( contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, isErrorEncrypted bool, isV1Contract bool, gas uint64, coin int64, shouldSkipAttributes ...bool, ) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { - return execHelperImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, execMsg, isErrorEncrypted, isV1Contract, gas, coin, -1, shouldSkipAttributes...) + results, err := execTxBuilderImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, []string{execMsg}, isErrorEncrypted, isV1Contract, gas, sdk.NewCoins(sdk.NewInt64Coin("denom", coin)), -1, shouldSkipAttributes...) + + if len(results) != 1 { + panic(fmt.Sprintf("Single msg test somehow returned multiple results: %d", len(results))) + } + + if err != nil { + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, *err.CosmWasm + } + return results[0].Nonce, results[0].Ctx, results[0].Data, results[0].WasmEvents, results[0].GasUsed, cosmwasm.StdError{} } -func execHelperImpl( +func execHelperMultipleMsgs( t *testing.T, keeper Keeper, ctx sdk.Context, - contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, - isErrorEncrypted bool, isV1Contract bool, gas uint64, coin int64, wasmCallCount int64, shouldSkipAttributes ...bool, -) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { - return execHelperMultipleCoinsImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, execMsg, isErrorEncrypted, isV1Contract, gas, sdk.NewCoins(sdk.NewInt64Coin("denom", coin)), wasmCallCount, shouldSkipAttributes...) + contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg []string, + isErrorEncrypted bool, isV1Contract bool, gas uint64, coin int64, shouldSkipAttributes ...bool, +) ([]ExecResult, *ErrorResult) { + return execTxBuilderImpl(t, keeper, ctx, contractAddress, txSender, senderPrivKey, execMsg, isErrorEncrypted, isV1Contract, gas, sdk.NewCoins(sdk.NewInt64Coin("denom", coin)), -1, shouldSkipAttributes...) } -func execHelperMultipleCoinsImpl( +func execTxBuilderImpl( t *testing.T, keeper Keeper, ctx sdk.Context, - contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsg string, + contractAddress sdk.AccAddress, txSender sdk.AccAddress, senderPrivKey crypto.PrivKey, execMsgs []string, isErrorEncrypted bool, isV1Contract bool, gas uint64, coins sdk.Coins, wasmCallCount int64, shouldSkipAttributes ...bool, -) ([]byte, sdk.Context, []byte, []ContractEvent, uint64, cosmwasm.StdError) { +) ([]ExecResult, *ErrorResult) { hash, err := keeper.GetContractHash(ctx, contractAddress) require.NoError(t, err) hashStr := hex.EncodeToString(hash) - msg := types.SecretMsg{ - CodeHash: []byte(hashStr), - Msg: []byte(execMsg), + var secretMsgs []types.SecretMsg + for _, execMsg := range execMsgs { + secretMsg := types.SecretMsg{ + CodeHash: []byte(hashStr), + Msg: []byte(execMsg), + } + secretMsgs = append(secretMsgs, secretMsg) } - execMsgBz, err := wasmCtx.Encrypt(msg.Serialize()) - require.NoError(t, err) - nonce := execMsgBz[0:32] + var secretMsgsBz [][]byte + for _, msg := range secretMsgs { + execMsgBz, err := wasmCtx.Encrypt(msg.Serialize()) + require.NoError(t, err) + + secretMsgsBz = append(secretMsgsBz, execMsgBz) + // nonce := execMsgBz[0:32] + } // create new ctx with the same storage and a gas limit // this is to reset the event manager, so we won't get @@ -470,33 +524,70 @@ func execHelperMultipleCoinsImpl( log.NewNopLogger(), ).WithGasMeter(gasMeter) - ctx = PrepareExecSignedTx(t, keeper, ctx, txSender, senderPrivKey, execMsgBz, contractAddress, coins) + ctx = PrepareExecSignedTxWithMultipleMsgs(t, keeper, ctx, txSender, senderPrivKey, secretMsgsBz, contractAddress, coins) - gasBefore := ctx.GasMeter().GasConsumed() - execResult, err := keeper.Execute(ctx, contractAddress, txSender, execMsgBz, coins, nil) - gasAfter := ctx.GasMeter().GasConsumed() - gasUsed := gasAfter - gasBefore + // reset value before test + keeper.LastMsgManager.SetMarker(false) - if wasmCallCount < 0 { - // default, just check that at least 1 call happened - require.NotZero(t, gasMeter.GetWasmCounter(), err) - } else { - require.Equal(t, uint64(wasmCallCount), gasMeter.GetWasmCounter(), err) - } + var results []ExecResult + for _, msg := range secretMsgsBz { - if err != nil { - return nil, ctx, nil, nil, 0, extractInnerError(t, err, nonce, isErrorEncrypted, isV1Contract) - } + // simulate the check in baseapp + if keeper.LastMsgManager.GetMarker() { + errResult := ErrorResult{ + Generic: sdkerrors.Wrap(sdkerrors.ErrLastTx, "Error"), + } + return results, &errResult + } - // wasmEvents comes from all the callbacks as well - wasmEvents := tryDecryptWasmEvents(ctx, nonce, shouldSkipAttributes...) + nonce := msg[0:32] - // TODO check if we can extract the messages from ctx + gasBefore := ctx.GasMeter().GasConsumed() + execResult, err := keeper.Execute(ctx, contractAddress, txSender, msg, coins, nil) + gasAfter := ctx.GasMeter().GasConsumed() + gasUsed := gasAfter - gasBefore + + if wasmCallCount < 0 { + // default, just check that at least 1 call happened + require.NotZero(t, gasMeter.GetWasmCounter(), err) + } else { + require.Equal(t, uint64(wasmCallCount), gasMeter.GetWasmCounter(), err) + } - // Data is the output of only the first call - data := getDecryptedData(t, execResult.Data, nonce) + if err != nil { + results = append(results, ExecResult{ + Nonce: nil, + Ctx: ctx, + Data: nil, + WasmEvents: nil, + GasUsed: gasUsed, + }) + + errResult := ErrorResult{ + Generic: err, + } + cwErr := extractInnerError(t, err, nonce, isErrorEncrypted, isV1Contract) + errResult.CosmWasm = &cwErr + + return results, &errResult + } + + // wasmEvents comes from all the callbacks as well + wasmEvents := tryDecryptWasmEvents(ctx, nonce, shouldSkipAttributes...) + + // Data is the output of only the first call + data := getDecryptedData(t, execResult.Data, nonce) + + results = append(results, ExecResult{ + Nonce: nonce, + Ctx: ctx, + Data: data, + WasmEvents: wasmEvents, + GasUsed: gasUsed, + }) + } - return nonce, ctx, data, wasmEvents, gasUsed, cosmwasm.StdError{} + return results, nil } func initHelper( diff --git a/x/compute/internal/keeper/secret_contracts_v010_test.go b/x/compute/internal/keeper/secret_contracts_v010_test.go index fb4c09463..6f5cacac7 100644 --- a/x/compute/internal/keeper/secret_contracts_v010_test.go +++ b/x/compute/internal/keeper/secret_contracts_v010_test.go @@ -65,7 +65,7 @@ func TestEncryptedAndPlaintextLogs(t *testing.T) { _, _, addr, _, err := initHelper(t, keeper, ctx, codeID, walletA, privKeyA, `{}`, true, false, defaultGasForTests) require.Empty(t, err) - _, _, _, events, _, err := execHelperImpl(t, keeper, ctx, addr, walletA, privKeyA, "{}", true, false, defaultGasForTests, 0, 1) + _, _, _, events, _, err := execHelperCustomWasmCount(t, keeper, ctx, addr, walletA, privKeyA, "{}", true, false, defaultGasForTests, 0, 1) require.Empty(t, err) requireEvents(t, diff --git a/x/compute/internal/keeper/test_common.go b/x/compute/internal/keeper/test_common.go index a8e0b2f6a..39729f28f 100644 --- a/x/compute/internal/keeper/test_common.go +++ b/x/compute/internal/keeper/test_common.go @@ -4,6 +4,9 @@ import ( "encoding/binary" "encoding/json" "fmt" + cosmwasm "github.com/scrtlabs/SecretNetwork/go-cosmwasm/types" + + v010cosmwasm "github.com/scrtlabs/SecretNetwork/go-cosmwasm/types/v010" "os" "path/filepath" "testing" @@ -20,8 +23,6 @@ import ( ibchost "github.com/cosmos/ibc-go/v3/modules/core/24-host" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" - "github.com/cosmos/cosmos-sdk/client" - "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/libs/log" @@ -93,10 +94,10 @@ import ( "github.com/scrtlabs/SecretNetwork/x/registration" ) -const ( - flagLRUCacheSize = "lru_size" - flagQueryGasLimit = "query_gas_limit" -) +//const ( +// flagLRUCacheSize = "lru_size" +// flagQueryGasLimit = "query_gas_limit" +//) const ( hackAtomContract = "hackatom.wasm" @@ -128,10 +129,25 @@ var TestContractPaths = map[string]string{ } var ( - outOfGasError = sdkerrors.Wrap(wasmtypes.ErrExecuteFailed, "Out of gas") - _ wasmtypes.ICS20TransferPortSource = &MockIBCTransferKeeper{} + // _ = sdkerrors.Wrap(wasmtypes.ErrExecuteFailed, "Out of gas") + _ wasmtypes.ICS20TransferPortSource = &MockIBCTransferKeeper{} ) +type ContractEvent []v010cosmwasm.LogAttribute + +type ExecResult struct { + Nonce []byte + Ctx sdk.Context + Data []byte + WasmEvents []ContractEvent + GasUsed uint64 +} + +type ErrorResult struct { + CosmWasm *cosmwasm.StdError + Generic error +} + type MockIBCTransferKeeper struct { GetPortFn func(ctx sdk.Context) string } @@ -475,6 +491,8 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc msgRouter := baseapp.NewMsgServiceRouter() msgRouter.SetInterfaceRegistry(encodingConfig.InterfaceRegistry) + bappTxMngr := baseapp.LastMsgMarkerContainer{} + keeper := NewKeeper( encodingConfig.Marshaler, *encodingConfig.Amino, @@ -498,6 +516,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc supportedFeatures, encoders, queriers, + &bappTxMngr, ) // keeper.setParams(ctx, wasmtypes.DefaultParams()) // add wasm handler so we can loop-back (contracts calling contracts) @@ -532,6 +551,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc // TestHandler returns a wasm handler for tests (to avoid circular imports) func TestHandler(k Keeper) sdk.Handler { + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { ctx = ctx.WithEventManager(sdk.NewEventManager()) @@ -590,6 +610,41 @@ func PrepareIBCOpenAck(t *testing.T, keeper Keeper, ctx sdk.Context, ibcOpenAck return ctx.WithTxBytes(txBytes) } +func PrepareExecSignedTxWithMultipleMsgs( + t *testing.T, keeper Keeper, ctx sdk.Context, + sender sdk.AccAddress, senderPrivKey crypto.PrivKey, secretMsgs [][]byte, contractAddress sdk.AccAddress, coins sdk.Coins, +) sdk.Context { + + creatorAcc, err := ante.GetSignerAcc(ctx, keeper.accountKeeper, sender) + require.NoError(t, err) + + var encryptedMsgs []sdk.Msg + for _, msg := range secretMsgs { + executeMsg := wasmtypes.MsgExecuteContract{ + Sender: sender, + Contract: contractAddress, + Msg: msg, + SentFunds: coins, + } + encryptedMsgs = append(encryptedMsgs, &executeMsg) + } + + creatorAccs := make([]authtypes.AccountI, len(encryptedMsgs)) + senderPrivKeys := make([]crypto.PrivKey, len(encryptedMsgs)) + + for i := range encryptedMsgs { + creatorAccs[i] = creatorAcc + senderPrivKeys[i] = senderPrivKey + } + + preparedTx := NewTestTxMultiple(encryptedMsgs, creatorAccs, senderPrivKeys) + + txBytes, err := preparedTx.Marshal() + require.NoError(t, err) + + return ctx.WithTxBytes(txBytes) +} + func PrepareExecSignedTx(t *testing.T, keeper Keeper, ctx sdk.Context, sender sdk.AccAddress, privKey crypto.PrivKey, encMsg []byte, contract sdk.AccAddress, funds sdk.Coins) sdk.Context { creatorAcc, err := ante.GetSignerAcc(ctx, keeper.accountKeeper, sender) require.NoError(t, err) @@ -600,9 +655,9 @@ func PrepareExecSignedTx(t *testing.T, keeper Keeper, ctx sdk.Context, sender sd Msg: encMsg, SentFunds: funds, } - tx := NewTestTx(&executeMsg, creatorAcc, privKey) + newTx := NewTestTx(&executeMsg, creatorAcc, privKey) - txBytes, err := tx.Marshal() + txBytes, err := newTx.Marshal() require.NoError(t, err) return ctx.WithTxBytes(txBytes) @@ -619,9 +674,9 @@ func PrepareInitSignedTx(t *testing.T, keeper Keeper, ctx sdk.Context, creator s InitMsg: encMsg, InitFunds: funds, } - tx := NewTestTx(&initMsg, creatorAcc, privKey) + newTx := NewTestTx(&initMsg, creatorAcc, privKey) - txBytes, err := tx.Marshal() + txBytes, err := newTx.Marshal() require.NoError(t, err) return ctx.WithTxBytes(txBytes) @@ -726,11 +781,11 @@ func NewTestTxMultiple(msgs []sdk.Msg, creatorAccs []authtypes.AccountI, privKey panic(err) } - tx, ok := builder.(protoTxProvider) + newTx, ok := builder.(protoTxProvider) if !ok { panic("failed to unwrap tx builder to protobuf tx") } - return tx.GetProtoTx() + return newTx.GetProtoTx() } func CreateFakeFundedAccount(ctx sdk.Context, am authkeeper.AccountKeeper, bk bankkeeper.Keeper, coins sdk.Coins) (sdk.AccAddress, crypto.PrivKey) { @@ -783,11 +838,11 @@ type protoTxProvider interface { GetProtoTx() *tx.Tx } -func txBuilderToProtoTx(txBuilder client.TxBuilder) (*tx.Tx, error) { - protoProvider, ok := txBuilder.(protoTxProvider) - if !ok { - return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "expected proto tx builder, got %T", txBuilder) - } - - return protoProvider.GetProtoTx(), nil -} +//func txBuilderToProtoTx(txBuilder client.TxBuilder) (*tx.Tx, error) { +// protoProvider, ok := txBuilder.(protoTxProvider) +// if !ok { +// return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "expected proto tx builder, got %T", txBuilder) +// } +// +// return protoProvider.GetProtoTx(), nil +//} diff --git a/x/compute/internal/types/keys.go b/x/compute/internal/types/keys.go index 511634ef3..fd0bbbf4a 100644 --- a/x/compute/internal/types/keys.go +++ b/x/compute/internal/types/keys.go @@ -31,6 +31,7 @@ var ( ContractEnclaveIdPrefix = []byte{0x06} ContractLabelPrefix = []byte{0x07} TXCounterPrefix = []byte{0x08} + // RandomPrefix = []byte{0xFF} KeyLastCodeID = append(SequenceKeyPrefix, []byte("lastCodeId")...) KeyLastInstanceID = append(SequenceKeyPrefix, []byte("lastContractId")...)