diff --git a/.vscode/settings.json b/.vscode/settings.json index a38db357c..9cf700a0c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,10 +18,12 @@ "integration-tests/contract-v0.10/Cargo.toml", "cosmwasm/contracts/v1/compute-tests/random-test/Cargo.toml", "go-cosmwasm/Cargo.toml", + "integration-tests/contract-v0.10/Cargo.toml", + "check-hw/Cargo.toml", + "./cosmwasm/enclaves/shared/block-verifier/Cargo.toml", "cosmwasm/enclaves/shared/cosmos-proto/Cargo.toml", "cosmwasm/enclaves/shared/contract-engine/Cargo.toml", "cosmwasm/enclaves/shared/utils/Cargo.toml", - "cosmwasm/enclaves/shared/block-verifier/Cargo.toml" ], "rust-analyzer.diagnostics.experimental.enable": true, "rust-analyzer.rustfmt.rangeFormatting.enable": true, diff --git a/app/app.go b/app/app.go index cbb172b5b..00829c3da 100644 --- a/app/app.go +++ b/app/app.go @@ -1,14 +1,17 @@ package app import ( + "encoding/binary" "fmt" "io" "net/http" "os" "path/filepath" + "sort" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v4/router/types" ibcfeetypes "github.com/cosmos/ibc-go/v4/modules/apps/29-fee/types" + gocosmwasm "github.com/scrtlabs/SecretNetwork/go-cosmwasm/api" ibcswitchtypes "github.com/scrtlabs/SecretNetwork/x/emergencybutton/types" "github.com/cosmos/cosmos-sdk/baseapp" @@ -22,7 +25,9 @@ import ( "github.com/cosmos/cosmos-sdk/server/config" servertypes "github.com/cosmos/cosmos-sdk/server/types" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/store/rootmulti" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/kv" "github.com/cosmos/cosmos-sdk/types/module" vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" "github.com/cosmos/cosmos-sdk/x/authz" @@ -72,6 +77,7 @@ import ( reg "github.com/scrtlabs/SecretNetwork/x/registration" "github.com/spf13/cast" abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/crypto/tmhash" tmjson "github.com/tendermint/tendermint/libs/json" tmlog "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" @@ -316,9 +322,71 @@ func (app *SecretNetworkApp) Name() string { return app.BaseApp.Name() } // BeginBlocker application updates every begin block func (app *SecretNetworkApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { + multiStore := app.BaseApp.CommitMultiStore() + rootMulti, ok := multiStore.(*rootmulti.Store) + if !ok { + panic("app's multi store is not of type *rootmulti.Store") + } else { + storeRoots := storesRootsFromMultiStore(rootMulti) + rootsBytes, err := storeRoots.Marshal() + if err != nil { + panic(err) + } + + computeKv := rootMulti.GetCommitKVStore(sdk.NewKVStoreKey(compute.StoreKey)) + computeRoot := computeKv.LastCommitID().Hash + + err = gocosmwasm.SubmitModulesStoreRoots(rootsBytes, computeRoot) + if err != nil { + panic(err) + } + } + return app.mm.BeginBlock(ctx, req) } +func storesRootsFromMultiStore(rootMulti *rootmulti.Store) kv.Pairs { //[][]byte { + stores := rootMulti.GetStores() + kvs := kv.Pairs{} + + for k, v := range stores { + // Stores of type StoreTypeTransient don't participate in AppHash calculation + if v.GetStoreType() == sdk.StoreTypeTransient { + continue + } + + kvs.Pairs = append(kvs.Pairs, kv.Pair{Key: []byte(k.Name()), Value: tmhash.Sum(v.LastCommitID().Hash)}) + } + + // Have to sort in order to calculate the correct AppHash + sort.Sort(kvs) + + return kvs +} + +// This is a copy of an internal cosmos-sdk function: https://github.com/scrtlabs/cosmos-sdk/blob/1b9278476b3ac897d8ebb90241008476850bf212/store/internal/maps/maps.go#LL152C1-L152C1 +// pairBytes returns key || value, with both the +// key and value length prefixed. +func pairBytes(kv kv.Pair) []byte { + // In the worst case: + // * 8 bytes to Uvarint encode the length of the key + // * 8 bytes to Uvarint encode the length of the value + // So preallocate for the worst case, which will in total + // be a maximum of 14 bytes wasted, if len(key)=1, len(value)=1, + // but that's going to rare. + buf := make([]byte, 8+len(kv.Key)+8+len(kv.Value)) + + // Encode the key, prefixed with its length. + nlk := binary.PutUvarint(buf, uint64(len(kv.Key))) + nk := copy(buf[nlk:], kv.Key) + + // Encode the value, prefixing with its length. + nlv := binary.PutUvarint(buf[nlk+nk:], uint64(len(kv.Value))) + nv := copy(buf[nlk+nk+nlv:], kv.Value) + + return buf[:nlk+nk+nlv+nv] +} + // EndBlocker application updates every end block func (app *SecretNetworkApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { return app.mm.EndBlock(ctx, req) diff --git a/cosmwasm/enclaves/Cargo.lock b/cosmwasm/enclaves/Cargo.lock index e4b9a3776..44d25e209 100644 --- a/cosmwasm/enclaves/Cargo.lock +++ b/cosmwasm/enclaves/Cargo.lock @@ -8,7 +8,7 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -41,9 +41,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -64,9 +64,9 @@ source = "git+https://github.com/mesalock-linux/anyhow-sgx#9b7763f58b5dedc11f388 [[package]] name = "anyhow" -version = "1.0.66" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" +checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" [[package]] name = "atty" @@ -74,7 +74,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] @@ -190,16 +190,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -216,10 +216,12 @@ name = "block-verifier" version = "0.1.0" dependencies = [ "base64 0.21.1", + "cosmos-sdk-proto", "cosmos_proto", "enclave_crypto", "enclave_utils", "hex", + "integer-encoding", "lazy_static", "log", "protobuf", @@ -228,7 +230,7 @@ dependencies = [ "sgx_types", "tendermint", "tendermint-light-client-verifier", - "tendermint-proto", + "tendermint-proto 0.28.0", ] [[package]] @@ -257,7 +259,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" dependencies = [ - "serde 1.0.147", + "serde 1.0.164", ] [[package]] @@ -270,18 +272,18 @@ dependencies = [ "log", "proc-macro2", "quote", - "serde 1.0.147", - "serde_json 1.0.87", - "syn", + "serde 1.0.164", + "serde_json 1.0.96", + "syn 1.0.109", "tempfile", "toml", ] [[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 = "cexpr" @@ -320,14 +322,14 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" dependencies = [ "glob", "libc", @@ -365,6 +367,17 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cosmos-sdk-proto" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4776e787b24d9568dd61d3237eeb4eb321d622fb881b858c7b82806420e87d4" +dependencies = [ + "prost 0.11.9", + "prost-types", + "tendermint-proto 0.27.0", +] + [[package]] name = "cosmos_proto" version = "1.11.0" @@ -376,9 +389,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" dependencies = [ "libc", ] @@ -395,7 +408,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", "typenum", ] @@ -406,7 +419,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ "cipher", - "generic-array 0.14.6", + "generic-array 0.14.7", "subtle", ] @@ -417,7 +430,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -499,7 +512,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd2735a791158376708f9347fe8faba9667589d82427ef3aed6794a8981de3d9" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] @@ -512,7 +525,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 1.0.109", ] [[package]] @@ -530,16 +543,16 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.6", + "generic-array 0.14.7", ] [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", ] @@ -605,9 +618,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" [[package]] name = "enclave-ffi-types" @@ -645,7 +658,7 @@ dependencies = [ "pwasm-utils", "rand_chacha", "rand_core", - "secp256k1 0.24.2", + "secp256k1 0.24.3", "serde 1.0.118", "serde_json 1.0.60", "sgx_rand", @@ -729,6 +742,27 @@ dependencies = [ "termcolor", ] +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "fake-simd" version = "0.1.2" @@ -737,9 +771,9 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] name = "fastrand" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ "instant", ] @@ -755,9 +789,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -769,9 +803,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -779,33 +813,33 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", "futures-sink", @@ -825,9 +859,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -846,9 +880,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if 1.0.0", "libc", @@ -857,9 +891,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "hashbrown_tstd" @@ -883,6 +917,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + [[package]] name = "hex" version = "0.4.3" @@ -914,7 +954,7 @@ source = "git+https://github.com/scrtlabs/impl-trait-for-tuples?tag=v0.2.2-secre dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -926,6 +966,23 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.1", + "libc", + "windows-sys", +] + [[package]] name = "itertools" version = "0.8.2" @@ -954,15 +1011,18 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "keccak" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] [[package]] name = "lazy_static" @@ -984,9 +1044,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.137" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "libloading" @@ -1004,20 +1064,23 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "lru" -version = "0.7.1" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469898e909a1774d844793b347135a0cd344ca2f69d082013ecb8061a2229a3a" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" [[package]] name = "memchr" @@ -1033,9 +1096,9 @@ checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" [[package]] name = "nom" -version = "5.1.2" +version = "5.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b" dependencies = [ "memchr", "version_check", @@ -1060,7 +1123,7 @@ checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1114,29 +1177,29 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.7" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "once_cell" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -1164,9 +1227,9 @@ checksum = "e1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304" [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "peeking_take_while" @@ -1188,15 +1251,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" dependencies = [ "unicode-ident", ] @@ -1212,12 +1275,12 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dc42e00223fc37204bd4aa177e69420c604ca4a183209a8f9de30c6d934698" +checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" dependencies = [ "bytes 1.4.0", - "prost-derive 0.11.6", + "prost-derive 0.11.9", ] [[package]] @@ -1229,30 +1292,29 @@ dependencies = [ "itertools 0.8.2", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "prost-derive" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda8c0881ea9f722eb9629376db3d0b903b462477c1aafcb0566610ac28ac5d" +checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" dependencies = [ - "anyhow 1.0.66", + "anyhow 1.0.71", "itertools 0.10.5", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "prost-types" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e0526209433e96d83d750dd81a99118edbc55739e7e61a46764fd2ad537788" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" dependencies = [ - "bytes 1.4.0", - "prost 0.11.6", + "prost 0.11.9", ] [[package]] @@ -1277,7 +1339,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ac70cfc8935f5db2a29c0929db697035d02284011a9b78a5ef5d48092ce9673" dependencies = [ "log", - "which 4.3.0", + "which 4.4.0", ] [[package]] @@ -1305,9 +1367,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -1340,22 +1402,31 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.8", - "redox_syscall", + "getrandom 0.2.10", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.8.1" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", @@ -1364,18 +1435,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "ring" @@ -1414,6 +1476,20 @@ dependencies = [ "semver", ] +[[package]] +name = "rustix" +version = "0.37.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls" version = "0.19.0" @@ -1428,9 +1504,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "sct" @@ -1444,9 +1520,9 @@ dependencies = [ [[package]] name = "secp256k1" -version = "0.24.2" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9512ffd81e3a3503ed401f79c33168b9148c75038956039166cd750eaa037c3" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" dependencies = [ "secp256k1-sys 0.6.1", ] @@ -1457,7 +1533,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4124a35fe33ae14259c490fd70fa199a32b9ce9502f2ee6bc4f81ec06fa65894" dependencies = [ - "secp256k1-sys 0.8.0", + "secp256k1-sys 0.8.1", ] [[package]] @@ -1471,9 +1547,9 @@ dependencies = [ [[package]] name = "secp256k1-sys" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642a62736682fdd8c71da0eb273e453c8ac74e33b9fb310e22ba5b03ec7651ff" +checksum = "70a129b9e9efbfb223753b9163c4ab3b13cff7fd9c7f010fbac25ab4099fa07e" dependencies = [ "cc", ] @@ -1486,6 +1562,7 @@ dependencies = [ "bit-vec", "block-verifier", "chrono", + "cosmos-sdk-proto", "ctor", "derive_more", "enclave-ffi-types", @@ -1495,6 +1572,7 @@ dependencies = [ "enclave_utils", "hex", "httparse", + "integer-encoding", "itertools 0.8.2", "lazy_static", "log", @@ -1510,6 +1588,7 @@ dependencies = [ "sgx_tstd", "sgx_types", "simple_logger", + "tendermint", "time", "uuid", "webpki", @@ -1519,9 +1598,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" [[package]] name = "serde" @@ -1534,11 +1613,11 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.147" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" dependencies = [ - "serde_derive 1.0.147", + "serde_derive 1.0.164", ] [[package]] @@ -1547,7 +1626,7 @@ version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" dependencies = [ - "serde 1.0.147", + "serde 1.0.164", ] [[package]] @@ -1557,18 +1636,18 @@ source = "git+https://github.com/mesalock-linux/serde-sgx#db0226f1d5d70fca6b96af dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "serde_derive" -version = "1.0.147" +version = "1.0.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -1584,24 +1663,24 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.87" +version = "1.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" +checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" dependencies = [ - "itoa 1.0.4", + "itoa 1.0.6", "ryu", - "serde 1.0.147", + "serde 1.0.164", ] [[package]] name = "serde_repr" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -1730,16 +1809,16 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.6", + "digest 0.10.7", ] [[package]] name = "sha3" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "digest 0.10.6", + "digest 0.10.7", "keccak", ] @@ -1807,9 +1886,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.103" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", @@ -1817,35 +1896,34 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "syn" +version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" dependencies = [ "proc-macro2", "quote", - "syn", - "unicode-xid", + "unicode-ident", ] [[package]] name = "tempfile" -version = "3.3.0" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" dependencies = [ + "autocfg 1.1.0", "cfg-if 1.0.0", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "redox_syscall 0.3.5", + "rustix", + "windows-sys", ] [[package]] name = "tendermint" version = "0.28.0" -source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#4019839ff894e531fbe4187f8461e4395d203220" +source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#b75754a49981f8e52fa12b8c17a38ebda575f807" dependencies = [ "bytes 1.4.0", "ed25519", @@ -1854,17 +1932,17 @@ dependencies = [ "futures", "num-traits 0.2.15", "once_cell", - "prost 0.11.6", + "prost 0.11.9", "prost-types", - "serde 1.0.147", + "serde 1.0.164", "serde_bytes", - "serde_json 1.0.87", + "serde_json 1.0.96", "serde_repr", "sha2 0.9.9", "signature", "subtle", "subtle-encoding", - "tendermint-proto", + "tendermint-proto 0.28.0", "time", "zeroize", ] @@ -1872,27 +1950,45 @@ dependencies = [ [[package]] name = "tendermint-light-client-verifier" version = "0.28.0" -source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#4019839ff894e531fbe4187f8461e4395d203220" +source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#b75754a49981f8e52fa12b8c17a38ebda575f807" dependencies = [ "derive_more", "flex-error", - "serde 1.0.147", + "serde 1.0.164", "tendermint", "time", ] +[[package]] +name = "tendermint-proto" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5895470f28c530f8ae8c4071bf8190304ce00bd131d25e81730453124a3375c" +dependencies = [ + "bytes 1.4.0", + "flex-error", + "num-derive", + "num-traits 0.2.15", + "prost 0.11.9", + "prost-types", + "serde 1.0.164", + "serde_bytes", + "subtle-encoding", + "time", +] + [[package]] name = "tendermint-proto" version = "0.28.0" -source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#4019839ff894e531fbe4187f8461e4395d203220" +source = "git+https://github.com/scrtlabs/tendermint-rs?branch=fix-val-set-parsing#b75754a49981f8e52fa12b8c17a38ebda575f807" dependencies = [ "bytes 1.4.0", "flex-error", "num-derive", "num-traits 0.2.15", - "prost 0.11.6", + "prost 0.11.9", "prost-types", - "serde 1.0.147", + "serde 1.0.164", "serde_bytes", "subtle-encoding", "time", @@ -1900,9 +1996,9 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.1.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" dependencies = [ "winapi-util", ] @@ -1918,22 +2014,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.18", ] [[package]] @@ -1942,7 +2038,7 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ - "serde 1.0.147", + "serde 1.0.164", "time-core", "time-macros", ] @@ -1964,18 +2060,18 @@ dependencies = [ [[package]] name = "toml" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ - "serde 1.0.147", + "serde 1.0.164", ] [[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" @@ -1991,15 +2087,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.5" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-segmentation" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" @@ -2007,12 +2103,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "untrusted" version = "0.7.1" @@ -2042,7 +2132,7 @@ name = "walrus" version = "0.19.0" source = "git+https://github.com/scrtlabs/walrus?rev=c5777d4#c5777d43d78b437cef94aaa939d3be115dfeee6a" dependencies = [ - "anyhow 1.0.66", + "anyhow 1.0.71", "id-arena", "leb128", "log", @@ -2058,7 +2148,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2147,9 +2237,9 @@ dependencies = [ [[package]] name = "which" -version = "4.3.0" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" dependencies = [ "either", "libc", @@ -2187,6 +2277,72 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + [[package]] name = "x25519-dalek" version = "1.2.0" @@ -2220,12 +2376,11 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", - "synstructure", + "syn 2.0.18", ] diff --git a/cosmwasm/enclaves/execute/Cargo.toml b/cosmwasm/enclaves/execute/Cargo.toml index c65850fb5..7122f6870 100644 --- a/cosmwasm/enclaves/execute/Cargo.toml +++ b/cosmwasm/enclaves/execute/Cargo.toml @@ -21,25 +21,25 @@ production = [ "log/max_level_warn", "log/release_max_level_warn", "block-verifier/production", - "block-verifier/verify-validator-whitelist" + "block-verifier/verify-validator-whitelist", ] debug-print = ["enclave_contract_engine/debug-print"] test = [ "enclave_contract_engine/test", "enclave_crypto/test", "enclave_cosmos_types/test", - "block-verifier/test" + "block-verifier/test", ] use_seed_service_on_bootstrap = [] epid_whitelist_disabled = [] light-client-validation = [ "enclave_contract_engine/light-client-validation", - "block-verifier" + "block-verifier", ] random = ["enclave_contract_engine/random", "enclave_crypto/random"] verify-validator-whitelist = [ "block-verifier/verify-validator-whitelist", - "light-client-validation" + "light-client-validation", ] go-tests = [] check-hw = [] @@ -50,7 +50,7 @@ check-hw = [] [target.'cfg(not(target_env = "sgx"))'.dependencies] sgx_tstd = { rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git", features = [ "backtrace", - "untrusted_time" + "untrusted_time", ] } sgx_types = { rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git" } @@ -64,14 +64,14 @@ enclave_crypto = { path = "../shared/crypto" } enclave_utils = { path = "../shared/utils" } enclave_cosmos_types = { path = "../shared/cosmos-types", optional = true } serde = { git = "https://github.com/mesalock-linux/serde-sgx", features = [ - "derive" + "derive", ] } serde_json = { git = "https://github.com/mesalock-linux/serde-json-sgx" } ctor = "0.1.13" derive_more = "0.99" pwasm-utils = { version = "0.12.0", default-features = false } parity-wasm = { version = "0.45.0", default-features = false, features = [ - "sign_ext" + "sign_ext", ] } base64 = { rev = "dc7389e10817b078f289386b3b6a852ab6c4c021", git = "https://github.com/mesalock-linux/rust-base64-sgx" } # for attestation @@ -85,10 +85,13 @@ lazy_static = "1.4" hex = "0.4.2" log = "0.4.17" simple_logger = { version = "2.3.0", default-features = false, features = [ - "stderr" + "stderr", ] } block-verifier = { path = "../shared/block-verifier", optional = true } time = "=0.3.17" +tendermint = { git = "https://github.com/scrtlabs/tendermint-rs", branch = "fix-val-set-parsing", default-features = false } +cosmos-sdk-proto = { version = "0.16.0", default-features = false } +integer-encoding = "3.0.4" [dependencies.webpki] git = "https://github.com/mesalock-linux/webpki" diff --git a/cosmwasm/enclaves/execute/Enclave.edl b/cosmwasm/enclaves/execute/Enclave.edl index f41fe33b6..2244bbd76 100644 --- a/cosmwasm/enclaves/execute/Enclave.edl +++ b/cosmwasm/enclaves/execute/Enclave.edl @@ -160,6 +160,14 @@ enclave { // [in, count=in_next_validator_set_len] const uint8_t* in_next_validator_set, // uintptr_t in_next_validator_set_len ); + + public sgx_status_t ecall_submit_store_roots( + [in, count=in_roots_len] const uint8_t* in_roots, + uintptr_t in_roots_len, + [in, count=in_compute_root_len] const uint8_t* in_compute_root, + uintptr_t in_compute_root_len + ); + }; untrusted { diff --git a/cosmwasm/enclaves/execute/src/ecalls.rs b/cosmwasm/enclaves/execute/src/ecalls.rs index 40db781d6..266515c95 100644 --- a/cosmwasm/enclaves/execute/src/ecalls.rs +++ b/cosmwasm/enclaves/execute/src/ecalls.rs @@ -1,4 +1,14 @@ +use cosmos_sdk_proto::cosmos::base::kv::v1beta1::{Pair, Pairs}; +use cosmos_sdk_proto::traits::Message; +use enclave_utils::{validate_const_ptr, validate_input_length}; +use integer_encoding::VarInt; +use log::{debug, error}; use sgx_types::sgx_status_t; +use std::slice; +use tendermint::merkle; + +const MAX_MERKLE_ROOT_LENGTH: u32 = 32; +const MAX_ROOTS_LENGTH: u32 = 20 * MAX_MERKLE_ROOT_LENGTH; /// # Safety /// This function reads buffers which must be correctly initialized by the caller, @@ -45,3 +55,71 @@ pub unsafe extern "C" fn ecall_submit_block_signatures( sgx_status_t::SGX_ERROR_ECALL_NOT_ALLOWED } } + +#[no_mangle] +#[allow(unused_variables)] +pub unsafe extern "C" fn ecall_submit_store_roots( + in_roots: *const u8, + in_roots_len: u32, + in_compute_root: *const u8, + in_compute_root_len: u32, +) -> sgx_status_t { + let failed_call = || sgx_status_t::SGX_ERROR_INVALID_PARAMETER; + + validate_input_length!(in_roots_len, "roots", MAX_ROOTS_LENGTH, failed_call()); + validate_const_ptr!( + in_roots, + in_roots_len as usize, + sgx_status_t::SGX_ERROR_INVALID_PARAMETER + ); + validate_input_length!( + in_compute_root_len, + "compute_root", + MAX_MERKLE_ROOT_LENGTH, + failed_call() + ); + validate_const_ptr!( + in_compute_root, + in_compute_root_len as usize, + sgx_status_t::SGX_ERROR_INVALID_PARAMETER + ); + + let store_roots_slice = slice::from_raw_parts(in_roots, in_roots_len as usize); + let compute_root_slice = slice::from_raw_parts(in_compute_root, in_compute_root_len as usize); + + let store_roots: Pairs = Pairs::decode(store_roots_slice).unwrap(); + let mut store_roots_bytes = vec![]; + + // Encode all key-value pairs to bytes + for root in store_roots.pairs { + store_roots_bytes.push(pair_to_bytes(root)); + } + + let h = merkle::simple_hash_from_byte_vectors(store_roots_bytes); + debug!("received app_hash: {:?}", h); + debug!("received compute_root: {:?}", compute_root_slice); + + sgx_status_t::SGX_SUCCESS +} + +// This is a copy of a cosmos-sdk function: https://github.com/scrtlabs/cosmos-sdk/blob/1b9278476b3ac897d8ebb90241008476850bf212/store/internal/maps/maps.go#LL152C1-L152C1 +// Returns key || value, with both the key and value length prefixed. +fn pair_to_bytes(kv: Pair) -> Vec { + // In the worst case: + // * 8 bytes to Uvarint encode the length of the key + // * 8 bytes to Uvarint encode the length of the value + // So preallocate for the worst case, which will in total + // be a maximum of 14 bytes wasted, if len(key)=1, len(value)=1, + // but that's going to rare. + let mut buf = vec![]; + + // Encode the key, prefixed with its length. + buf.extend_from_slice(&(kv.key.len()).encode_var_vec()); + buf.extend_from_slice(&kv.key); + + // Encode the value, prefixing with its length. + buf.extend_from_slice(&(kv.value.len()).encode_var_vec()); + buf.extend_from_slice(&kv.value); + + buf +} diff --git a/cosmwasm/enclaves/shared/block-verifier/Cargo.toml b/cosmwasm/enclaves/shared/block-verifier/Cargo.toml index aea4ea30b..f55b297af 100644 --- a/cosmwasm/enclaves/shared/block-verifier/Cargo.toml +++ b/cosmwasm/enclaves/shared/block-verifier/Cargo.toml @@ -14,7 +14,7 @@ verify-validator-whitelist = [] [target.'cfg(not(target_env = "sgx"))'.dependencies] sgx_tstd = { rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git", features = [ ] } -sgx_trts = {rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git" } +sgx_trts = { rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git" } sgx_types = { rev = "d2d339cbb005f676bb700059bd51dc689c025f6b", git = "https://github.com/apache/teaclave-sgx-sdk.git" } [dependencies] @@ -23,18 +23,13 @@ tendermint-proto = { git = "https://github.com/scrtlabs/tendermint-rs", branch = tendermint-light-client-verifier = { git = "https://github.com/scrtlabs/tendermint-rs", branch = "fix-val-set-parsing", default-features = false } lazy_static = "1.4.0" log = "0.4.17" - -enclave_crypto = {path ="../crypto"} -enclave_utils = {path ="../utils"} - -cosmos_proto = {path="../cosmos-proto"} - +enclave_crypto = { path = "../crypto" } +enclave_utils = { path = "../utils" } +cosmos_proto = { path = "../cosmos-proto" } protobuf = { version = "2.25.2" } hex = { version = "0.4.3" } - +cosmos-sdk-proto = { version = "0.16.0", default-features = false } +integer-encoding = "3.0.4" base64 = { version = "0.21.0", optional = true } # cosmrs = { version = "0.11.0", default-features = false } - - - diff --git a/cosmwasm/enclaves/shared/contract-engine/src/contract_operations.rs b/cosmwasm/enclaves/shared/contract-engine/src/contract_operations.rs index 7fd98cc58..3c5affd3f 100644 --- a/cosmwasm/enclaves/shared/contract-engine/src/contract_operations.rs +++ b/cosmwasm/enclaves/shared/contract-engine/src/contract_operations.rs @@ -370,6 +370,7 @@ pub fn migrate( query_depth, secret_msg.nonce, secret_msg.user_public_key, + block_height, base_env.0.block.time, )?; // let duration = start.elapsed(); diff --git a/cosmwasm/enclaves/shared/contract-engine/src/db.rs b/cosmwasm/enclaves/shared/contract-engine/src/db.rs index b5ee210b8..739f91e11 100644 --- a/cosmwasm/enclaves/shared/contract-engine/src/db.rs +++ b/cosmwasm/enclaves/shared/contract-engine/src/db.rs @@ -177,17 +177,21 @@ pub fn read_from_encrypted_state( Ok((maybe_encrypted_value_bytes, maybe_proof, maybe_mp_key, gas_used)) => { debug!("merkle proof returned from read_db(): {:?}", maybe_proof); debug!("full key returned from read_db(): {:?}", maybe_mp_key); + debug!( + "enc value returned from read_db(): {:?}", + maybe_encrypted_value_bytes + ); match maybe_encrypted_value_bytes { Some(encrypted_value_bytes) => { let encrypted_value: EncryptedValue = bincode2::deserialize(&encrypted_value_bytes).map_err(|err| { - warn!( - "read_db() got an error while trying to read_from_encrypted_state the value {:?} for key {:?}, stopping wasm: {:?}", - encrypted_value_bytes, - encrypted_key_bytes, - err.to_string() - ); - WasmEngineError::DecryptionError - })?; + warn!( + "read_db() got an error while trying to read_from_encrypted_state the value {:?} for key {:?}, stopping wasm: {:?}", + encrypted_value_bytes, + encrypted_key_bytes, + err.to_string() + ); + WasmEngineError::DecryptionError + })?; match decrypt_value_new( &encrypted_key.data, diff --git a/cosmwasm/packages/sgx-vm/src/lib.rs b/cosmwasm/packages/sgx-vm/src/lib.rs index 61ae81bf5..7a9ad2c32 100644 --- a/cosmwasm/packages/sgx-vm/src/lib.rs +++ b/cosmwasm/packages/sgx-vm/src/lib.rs @@ -8,11 +8,7 @@ mod conversion; mod errors; mod features; mod ffi; -// mod imports; mod instance; -// mod memory; -// mod middleware; -// mod modules; mod serde; pub mod testing; mod traits; @@ -21,6 +17,7 @@ mod traits; mod attestation; mod enclave; mod enclave_config; +mod proofs; mod seed; mod wasmi; @@ -38,10 +35,6 @@ pub use crate::errors::{ pub use crate::features::features_from_csv; pub use crate::ffi::{FfiError, FfiResult, GasInfo}; pub use crate::instance::{GasReport, Instance}; -pub use enclave_config::{configure_enclave, EnclaveRuntimeConfig}; -/* -pub use crate::modules::FileSystemCache; -*/ pub use crate::serde::{from_slice, to_vec}; pub use crate::traits::{Api, Extern, Querier, Storage}; @@ -52,8 +45,10 @@ pub use crate::traits::StorageIterator; pub use crate::attestation::{ create_attestation_report_u, untrusted_get_encrypted_genesis_seed, untrusted_get_encrypted_seed, }; +pub use crate::proofs::untrusted_submit_store_roots; +pub use crate::random::untrusted_submit_block_signatures; pub use crate::seed::{ untrusted_health_check, untrusted_init_bootstrap, untrusted_init_node, untrusted_key_gen, }; -pub use crate::random::untrusted_submit_block_signatures; +pub use enclave_config::{configure_enclave, EnclaveRuntimeConfig}; diff --git a/cosmwasm/packages/sgx-vm/src/proofs.rs b/cosmwasm/packages/sgx-vm/src/proofs.rs new file mode 100644 index 000000000..3a9968cae --- /dev/null +++ b/cosmwasm/packages/sgx-vm/src/proofs.rs @@ -0,0 +1,78 @@ +use sgx_types::*; + +use log::{debug, error, warn}; + +use crate::enclave::ENCLAVE_DOORBELL; + +extern "C" { + pub fn ecall_submit_store_roots( + eid: sgx_enclave_id_t, + retval: *mut sgx_status_t, + in_roots: *const u8, + in_roots_len: u32, + in_compute_root: *const u8, + in_compute_root_len: u32, + ) -> sgx_status_t; +} + +pub fn untrusted_submit_store_roots(roots: &[u8], compute_root: &[u8]) -> SgxResult<()> { + debug!("Hello from just before - untrusted_submit_store_roots"); + + const RETRY_LIMIT: i32 = 3; + + let mut retry_count = 0; + + // this is here so we can + loop { + let (retval, status) = submit_store_roots_impl(roots, compute_root)?; + if status != sgx_status_t::SGX_SUCCESS { + return Err(status); + } else if retval != sgx_status_t::SGX_SUCCESS { + if retval == sgx_status_t::SGX_ERROR_FILE_RECOVERY_NEEDED { + warn!( + "Validator set read by enclave was mismatched with current height.. retrying" + ); + // retry with + std::thread::sleep(std::time::Duration::from_millis(500)); + retry_count += 1; + + if retry_count == RETRY_LIMIT { + error!("Validator timed out while waiting for correct validator set"); + return Err(retval); + } + } else { + return Err(retval); + } + } else { + return Ok(()); + } + } +} + +fn submit_store_roots_impl( + roots: &[u8], + compute_root: &[u8], +) -> SgxResult<(sgx_status_t, sgx_status_t)> { + // Bind the token to a local variable to ensure its + // destructor runs in the end of the function + let enclave_access_token = ENCLAVE_DOORBELL + .get_access(1) // This can never be recursive + .ok_or(sgx_status_t::SGX_ERROR_BUSY)?; + let enclave = (*enclave_access_token)?; + + let eid = enclave.geteid(); + let mut retval = sgx_status_t::SGX_SUCCESS; + + // let status = unsafe { ecall_get_encrypted_seed(eid, &mut retval, cert, cert_len, & mut seed) }; + let status = unsafe { + ecall_submit_store_roots( + eid, + &mut retval, + roots.as_ptr(), + roots.len() as u32, + compute_root.as_ptr(), + compute_root.len() as u32, + ) + }; + Ok((retval, status)) +} diff --git a/go-cosmwasm/api/bindings.h b/go-cosmwasm/api/bindings.h index ed8cdb7ec..99b2135d7 100644 --- a/go-cosmwasm/api/bindings.h +++ b/go-cosmwasm/api/bindings.h @@ -238,6 +238,8 @@ Buffer submit_block_signatures(Buffer header, Buffer random, Buffer *err); +bool submit_store_roots(Buffer roots, Buffer compute_root, Buffer *err); + Buffer update_admin(cache_t *cache, Buffer contract_id, Buffer params, diff --git a/go-cosmwasm/api/lib.go b/go-cosmwasm/api/lib.go index d4031b3fc..87430479e 100644 --- a/go-cosmwasm/api/lib.go +++ b/go-cosmwasm/api/lib.go @@ -64,6 +64,20 @@ func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, encRandom [ return receiveVector(res), nil } +func SubmitModulesStoreRoots(roots []byte, computeRoot []byte) error { + errmsg := C.Buffer{} + rootsSlice := sendSlice(roots) + defer freeAfterSend(rootsSlice) + computeRootSlice := sendSlice(computeRoot) + defer freeAfterSend(computeRootSlice) + + _, err := C.submit_store_roots(rootsSlice, computeRootSlice, &errmsg) + if err != nil { + return errorWithMessage(err, errmsg) + } + return nil +} + func InitBootstrap(spid []byte, apiKey []byte) ([]byte, error) { errmsg := C.Buffer{} spidSlice := sendSlice(spid) diff --git a/go-cosmwasm/api/lib_mock.go b/go-cosmwasm/api/lib_mock.go index 25352f3c5..354e5c92f 100644 --- a/go-cosmwasm/api/lib_mock.go +++ b/go-cosmwasm/api/lib_mock.go @@ -43,6 +43,10 @@ func SubmitBlockSignatures(header []byte, commit []byte, txs []byte, random []by return nil, nil } +func SubmitModulesStoreRoots(roots []byte, computeRoot []byte) error { + return nil +} + func LoadSeedToEnclave(masterKey []byte, seed []byte, apiKey []byte) (bool, error) { return true, nil } diff --git a/go-cosmwasm/src/lib.rs b/go-cosmwasm/src/lib.rs index 97fb284bd..2ab87ad62 100644 --- a/go-cosmwasm/src/lib.rs +++ b/go-cosmwasm/src/lib.rs @@ -242,6 +242,39 @@ pub extern "C" fn init_cache( } } +#[no_mangle] +pub extern "C" fn submit_store_roots( + roots: Buffer, + compute_root: Buffer, + err: Option<&mut Buffer>, +) -> bool { + let roots_slice = match unsafe { roots.read() } { + None => { + set_error(Error::empty_arg("roots"), err); + return false; + } + Some(r) => r, + }; + let compute_root_slice = match unsafe { compute_root.read() } { + None => { + set_error(Error::empty_arg("compute_root"), err); + return false; + } + Some(r) => r, + }; + + match cosmwasm_sgx_vm::untrusted_submit_store_roots(roots_slice, compute_root_slice) { + Err(e) => { + set_error(Error::enclave_err(e.to_string()), err); + false + } + Ok(()) => { + clear_error(); + true + } + } +} + #[no_mangle] pub extern "C" fn submit_block_signatures( header: Buffer,