diff --git a/Cargo.lock b/Cargo.lock index 81378608b2..65d73c4d42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,7 +78,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ - "gimli 0.27.1", + "gimli 0.27.2", ] [[package]] @@ -125,7 +125,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ "getrandom 0.2.8", - "once_cell 1.17.0", + "once_cell 1.17.1", "version_check", ] @@ -463,9 +463,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7f0778972c64420fdedc63f09919c8a88bda7b25135357fd25a5d9f3257e832" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr 2.5.0", "serde 1.0.152", @@ -554,9 +554,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "camino" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77df041dc383319cc661b428b6961a005db4d6808d5e12536931b1ca9556055" +checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" dependencies = [ "serde 1.0.152", ] @@ -669,7 +669,7 @@ dependencies = [ [[package]] name = "claims-primitives" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "parity-scale-codec", "rustc-hex", @@ -682,9 +682,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.4.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", @@ -718,7 +718,7 @@ dependencies = [ "clap_derive", "clap_lex", "indexmap 1.9.2", - "once_cell 1.17.0", + "once_cell 1.17.1", "strsim 0.10.0", "termcolor", "textwrap 0.16.0", @@ -764,7 +764,7 @@ checksum = "76d0a7a42b9c13f2b2a1a7e64b949a19bcb56a49b190076e60261001ceaa5304" dependencies = [ "bytes 1.4.0", "futures 0.3.26", - "http 0.2.8", + "http 0.2.9", "mime", "mime_guess", "rand 0.8.5", @@ -774,7 +774,7 @@ dependencies = [ [[package]] name = "common-primitives" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "sp-std", ] @@ -977,9 +977,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc831ee6a32dd495436e317595e639a587aa9907bef96fe6e6abc290ab6204e9" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -989,13 +989,13 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94331d54f1b1a8895cd81049f7eaaaef9d05a7dcb4d1fd08bf3ff0806246789d" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", - "once_cell 1.17.0", + "once_cell 1.17.1", "proc-macro2", "quote", "scratch", @@ -1004,15 +1004,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dcd35ba14ca9b40d6e4b4b39961f23d835dbb8eed74565ded361d93e1feb8a" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bbeb29798b407ccd82a3324ade1a7286e0d29851475990b612670f6f5124d2" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", @@ -1440,9 +1440,9 @@ checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[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", ] @@ -1652,7 +1652,7 @@ dependencies = [ "impl-trait-for-tuples", "k256", "log 0.4.17", - "once_cell 1.17.0", + "once_cell 1.17.1", "parity-scale-codec", "paste", "scale-info", @@ -1963,7 +1963,7 @@ dependencies = [ "memchr 2.5.0", "pin-project-lite", "pin-utils", - "slab 0.4.7", + "slab 0.4.8", ] [[package]] @@ -2039,9 +2039,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.1" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "221996f774192f0f718773def8201c4ae31f02616a54ccfc2d358bb0e5cefdec" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" [[package]] name = "glob" @@ -2084,11 +2084,11 @@ dependencies = [ "futures-core 0.3.26", "futures-sink 0.3.26", "futures-util 0.3.26", - "http 0.2.8", + "http 0.2.9", "indexmap 1.9.2", - "slab 0.4.7", + "slab 0.4.8", "tokio", - "tokio-util 0.7.6", + "tokio-util 0.7.7", "tracing", ] @@ -2157,7 +2157,7 @@ dependencies = [ "bitflags", "bytes 1.4.0", "headers-core", - "http 0.2.8", + "http 0.2.9", "httpdate", "mime", "sha1 0.10.5", @@ -2169,7 +2169,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" dependencies = [ - "http 0.2.8", + "http 0.2.9", ] [[package]] @@ -2267,9 +2267,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes 1.4.0", "fnv 1.0.7", @@ -2283,7 +2283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes 1.4.0", - "http 0.2.8", + "http 0.2.9", "pin-project-lite", ] @@ -2349,7 +2349,7 @@ dependencies = [ "futures-core 0.3.26", "futures-util 0.3.26", "h2", - "http 0.2.8", + "http 0.2.9", "http-body", "httparse 1.8.0", "httpdate", @@ -2371,7 +2371,7 @@ dependencies = [ "bytes 1.4.0", "common-multipart-rfc7578", "futures 0.3.26", - "http 0.2.8", + "http 0.2.9", "hyper", ] @@ -2632,6 +2632,7 @@ dependencies = [ "ipfs-api", "itc-parentchain", "itc-parentchain-test", + "itc-rest-client", "itc-rpc-client", "itc-rpc-server", "itp-enclave-api", @@ -2656,9 +2657,11 @@ dependencies = [ "parse_duration", "primitive-types", "prometheus", + "scale-info", "serde 1.0.152", "serde_derive 1.0.152", "serde_json 1.0.93", + "sgx-verify", "sgx_crypto_helper", "sgx_types", "sgx_urts", @@ -2717,7 +2720,7 @@ dependencies = [ "dirs", "failure", "futures 0.3.26", - "http 0.2.8", + "http 0.2.9", "hyper", "hyper-multipart-rfc7578", "hyper-tls", @@ -3013,7 +3016,7 @@ version = "0.9.0" dependencies = [ "base64 0.13.1", "http 0.2.1", - "http 0.2.8", + "http 0.2.9", "http_req 0.8.1 (git+https://github.com/integritee-network/http_req?branch=master)", "http_req 0.8.1 (git+https://github.com/integritee-network/http_req)", "log 0.4.17", @@ -4501,20 +4504,20 @@ dependencies = [ "log 0.4.17", "miow", "net2 0.2.38", - "slab 0.4.7", + "slab 0.4.8", "winapi 0.2.8", ] [[package]] name = "mio" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" dependencies = [ "libc", "log 0.4.17", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -4526,7 +4529,7 @@ dependencies = [ "lazycell", "log 0.4.17", "mio 0.6.23", - "slab 0.4.7", + "slab 0.4.8", ] [[package]] @@ -4540,7 +4543,7 @@ dependencies = [ "mio 0.6.23", "sgx_tstd", "sgx_types", - "slab 0.4.7", + "slab 0.4.8", ] [[package]] @@ -5000,9 +5003,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -5026,7 +5029,7 @@ dependencies = [ "cfg-if 1.0.0", "foreign-types", "libc", - "once_cell 1.17.0", + "once_cell 1.17.1", "openssl-macros", "openssl-sys", ] @@ -5116,7 +5119,7 @@ dependencies = [ [[package]] name = "pallet-claims" version = "0.9.12" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "claims-primitives", "frame-support", @@ -5196,7 +5199,7 @@ dependencies = [ [[package]] name = "pallet-parentchain" version = "0.9.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "frame-support", "frame-system", @@ -5295,7 +5298,7 @@ dependencies = [ [[package]] name = "pallet-sidechain" version = "0.9.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "frame-support", "frame-system", @@ -5330,7 +5333,7 @@ dependencies = [ [[package]] name = "pallet-teeracle" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "frame-support", "frame-system", @@ -5349,7 +5352,7 @@ dependencies = [ [[package]] name = "pallet-teerex" version = "0.9.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "frame-support", "frame-system", @@ -5780,7 +5783,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" dependencies = [ - "once_cell 1.17.0", + "once_cell 1.17.1", "toml_edit", ] @@ -6216,7 +6219,7 @@ checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" dependencies = [ "cc", "libc", - "once_cell 1.17.0", + "once_cell 1.17.1", "spin", "untrusted", "web-sys", @@ -6231,7 +6234,7 @@ dependencies = [ "cc", "libc", "log 0.4.17", - "once_cell 1.17.0", + "once_cell 1.17.1", "rkyv", "spin", "untrusted", @@ -6805,7 +6808,7 @@ dependencies = [ [[package]] name = "sgx-verify" version = "0.1.4" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "base64 0.13.1", "chrono 0.4.23", @@ -7101,7 +7104,7 @@ checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" [[package]] name = "sidechain-primitives" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "parity-scale-codec", "scale-info", @@ -7114,9 +7117,9 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] @@ -7153,9 +7156,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg 1.1.0", ] @@ -8042,14 +8045,14 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "target-lexicon" -version = "0.12.5" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9410d0f6853b1d94f0e519fb95df60f29d2c1eff2d921ffdf01a4c8a3b54f12d" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "teeracle-primitives" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "common-primitives", "sp-std", @@ -8059,7 +8062,7 @@ dependencies = [ [[package]] name = "teerex-primitives" version = "0.1.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "common-primitives", "parity-scale-codec", @@ -8161,11 +8164,12 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ - "once_cell 1.17.0", + "cfg-if 1.0.0", + "once_cell 1.17.1", ] [[package]] @@ -8187,7 +8191,7 @@ checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" dependencies = [ "anyhow", "hmac 0.12.1", - "once_cell 1.17.0", + "once_cell 1.17.1", "pbkdf2 0.11.0", "rand 0.8.5", "rustc-hash", @@ -8232,7 +8236,7 @@ dependencies = [ "bytes 1.4.0", "libc", "memchr 2.5.0", - "mio 0.8.5", + "mio 0.8.6", "num_cpus", "parking_lot 0.12.1", "pin-project-lite", @@ -8276,9 +8280,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce" +checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313" dependencies = [ "futures-core 0.3.26", "pin-project-lite", @@ -8314,9 +8318,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6a3b08b64e6dfad376fa2432c7b1f01522e37a623c3050bc95db2d3ff21583" +checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" dependencies = [ "bytes 1.4.0", "futures-core 0.3.26", @@ -8388,7 +8392,7 @@ version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ - "once_cell 1.17.0", + "once_cell 1.17.1", "valuable", ] @@ -8510,7 +8514,7 @@ dependencies = [ "base64 0.13.1", "byteorder 1.4.3", "bytes 1.4.0", - "http 0.2.8", + "http 0.2.9", "httparse 1.8.0", "log 0.4.17", "rand 0.8.5", @@ -8532,7 +8536,7 @@ dependencies = [ "base64 0.13.1", "byteorder 1.4.3", "bytes 1.4.0", - "http 0.2.8", + "http 0.2.9", "httparse 1.8.0", "log 0.4.17", "rand 0.8.5", @@ -8778,7 +8782,7 @@ dependencies = [ "futures-channel 0.3.26", "futures-util 0.3.26", "headers", - "http 0.2.8", + "http 0.2.9", "hyper", "log 0.4.17", "mime", @@ -8794,7 +8798,7 @@ dependencies = [ "tokio", "tokio-stream", "tokio-tungstenite", - "tokio-util 0.7.6", + "tokio-util 0.7.7", "tower-service", "tracing", ] @@ -8835,7 +8839,7 @@ checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" dependencies = [ "bumpalo", "log 0.4.17", - "once_cell 1.17.0", + "once_cell 1.17.1", "proc-macro2", "quote", "syn", @@ -8967,7 +8971,7 @@ dependencies = [ "libc", "log 0.4.17", "object 0.29.0", - "once_cell 1.17.0", + "once_cell 1.17.1", "paste", "psm", "serde 1.0.152", @@ -9037,7 +9041,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f671b588486f5ccec8c5a3dba6b4c07eac2e66ab8c60e6f4e53717c77f709731" dependencies = [ - "once_cell 1.17.0", + "once_cell 1.17.1", ] [[package]] @@ -9325,7 +9329,7 @@ dependencies = [ "openssl", "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)", "sha-1 0.8.2", - "slab 0.4.7", + "slab 0.4.8", "url 2.3.1", ] diff --git a/app-libs/stf/Cargo.toml b/app-libs/stf/Cargo.toml index bf36b5ea29..5bc93fcef5 100644 --- a/app-libs/stf/Cargo.toml +++ b/app-libs/stf/Cargo.toml @@ -49,10 +49,7 @@ sp-keyring = { git = "https://github.com/paritytech/substrate.git", branch = "po [features] default = ["std"] evm = ["ita-sgx-runtime/evm"] -evm_std = [ - "evm", - "ita-sgx-runtime/evm_std", -] +evm_std = ["evm", "ita-sgx-runtime/evm_std"] sgx = [ "sgx_tstd", "itp-sgx-externalities/sgx", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index df15685ed2..667b77ca2b 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -51,10 +51,7 @@ itp-utils = { path = "../core-primitives/utils" } [features] default = [] -evm = [ - "ita-stf/evm_std", - "pallet-evm", -] +evm = ["ita-stf/evm_std", "pallet-evm"] teeracle = [] sidechain = [] offchain-worker = [] diff --git a/core-primitives/enclave-api/ffi/src/lib.rs b/core-primitives/enclave-api/ffi/src/lib.rs index 5dcf464324..5e14b7b904 100644 --- a/core-primitives/enclave-api/ffi/src/lib.rs +++ b/core-primitives/enclave-api/ffi/src/lib.rs @@ -7,6 +7,17 @@ use sgx_types::{ extern "C" { + pub fn generate_dcap_ra_extrinsic_from_quote( + eid: sgx_enclave_id_t, + retval: *mut sgx_status_t, + w_url: *const u8, + w_url_size: u32, + quote: *const u8, + quote_size: u32, + unchecked_extrinsic: *mut u8, + unchecked_extrinsic_size: u32, + ) -> sgx_status_t; + pub fn init( eid: sgx_enclave_id_t, retval: *mut sgx_status_t, @@ -115,6 +126,16 @@ extern "C" { quote_size: u32, ) -> sgx_status_t; + pub fn generate_dcap_ra_quote( + eid: sgx_enclave_id_t, + retval: *mut sgx_status_t, + skip_ra: c_int, + quoting_enclave_target_info: &sgx_target_info_t, + quote_size: u32, + dcap_quote_p: *mut u8, + dcap_quote_size: u32, + ) -> sgx_status_t; + pub fn generate_register_quoting_enclave_extrinsic( eid: sgx_enclave_id_t, retval: *mut sgx_status_t, @@ -199,4 +220,5 @@ extern "C" { shard_size: u32, skip_ra: c_int, ) -> sgx_status_t; + } diff --git a/core-primitives/enclave-api/src/remote_attestation.rs b/core-primitives/enclave-api/src/remote_attestation.rs index 92cb68a0e0..fd087682d2 100644 --- a/core-primitives/enclave-api/src/remote_attestation.rs +++ b/core-primitives/enclave-api/src/remote_attestation.rs @@ -48,6 +48,12 @@ pub trait RemoteAttestation { fn generate_ias_ra_extrinsic(&self, w_url: &str, skip_ra: bool) -> EnclaveResult>; fn generate_dcap_ra_extrinsic(&self, w_url: &str, skip_ra: bool) -> EnclaveResult>; + fn generate_dcap_ra_extrinsic_from_quote( + &self, + url: String, + quote: &[u8], + ) -> EnclaveResult>; + fn generate_dcap_ra_quote(&self, skip_ra: bool) -> EnclaveResult>; fn generate_register_quoting_enclave_extrinsic(&self, fmspc: Fmspc) -> EnclaveResult>; @@ -145,6 +151,60 @@ impl RemoteAttestation for Enclave { Ok(unchecked_extrinsic) } + fn generate_dcap_ra_extrinsic_from_quote( + &self, + url: String, + quote: &[u8], + ) -> EnclaveResult> { + let mut retval = sgx_status_t::SGX_SUCCESS; + let mut unchecked_extrinsic: Vec = vec![0u8; EXTRINSIC_MAX_SIZE]; + let url = url.encode(); + + let result = unsafe { + ffi::generate_dcap_ra_extrinsic_from_quote( + self.eid, + &mut retval, + url.as_ptr(), + url.len() as u32, + quote.as_ptr(), + quote.len() as u32, + unchecked_extrinsic.as_mut_ptr(), + unchecked_extrinsic.len() as u32, + ) + }; + + ensure!(result == sgx_status_t::SGX_SUCCESS, Error::Sgx(result)); + ensure!(retval == sgx_status_t::SGX_SUCCESS, Error::Sgx(retval)); + + Ok(unchecked_extrinsic.to_vec()) + } + + fn generate_dcap_ra_quote(&self, skip_ra: bool) -> EnclaveResult> { + let mut retval = sgx_status_t::SGX_SUCCESS; + let quoting_enclave_target_info = self.qe_get_target_info()?; + let quote_size = self.qe_get_quote_size()?; + + let mut dcap_quote_vec: Vec = vec![0; quote_size as usize]; + let (dcap_quote_p, dcap_quote_size) = + (dcap_quote_vec.as_mut_ptr(), dcap_quote_vec.len() as u32); + + let result = unsafe { + ffi::generate_dcap_ra_quote( + self.eid, + &mut retval, + skip_ra.into(), + "ing_enclave_target_info, + quote_size, + dcap_quote_p, + dcap_quote_size, + ) + }; + + ensure!(result == sgx_status_t::SGX_SUCCESS, Error::Sgx(result)); + ensure!(retval == sgx_status_t::SGX_SUCCESS, Error::Sgx(retval)); + + Ok(dcap_quote_vec) + } fn generate_dcap_ra_extrinsic(&self, w_url: &str, skip_ra: bool) -> EnclaveResult> { let mut retval = sgx_status_t::SGX_SUCCESS; @@ -587,7 +647,32 @@ impl TlsRemoteAttestation for Enclave { } fn create_system_path(file_name: &str) -> String { - format!("{}{}{}", OS_SYSTEM_PATH, file_name, C_STRING_ENDING) + info!("create_system_path:: file_name={}", &file_name); + let default_path = format!("{}{}", OS_SYSTEM_PATH, file_name); + + let full_path = find_library_by_name(file_name).unwrap_or(default_path); + + let c_terminated_path = format!("{}{}", full_path, C_STRING_ENDING); + info!("create_system_path:: created path={}", &c_terminated_path); + c_terminated_path +} +fn find_library_by_name(lib_name: &str) -> Option { + use std::process::Command; + // ldconfig -p | grep libsgx_pce_logic.so.1 + + let ldconfig_output = Command::new("ldconfig").args(["-p"]).output().ok()?; + let possible_path = String::from_utf8(ldconfig_output.stdout) + .ok()? + .lines() + .filter(|line| line.contains(lib_name)) + .map(|lib_name_and_path| { + lib_name_and_path + .rsplit_once("=>") + .map(|(_, lib_path)| lib_path.trim().to_owned()) + }) + .next()?; + + possible_path } fn set_ql_path(path_type: sgx_ql_path_type_t, path: &str) -> EnclaveResult<()> { diff --git a/core/rest-client/src/rest_client.rs b/core/rest-client/src/rest_client.rs index 36309331f4..187553abc6 100644 --- a/core/rest-client/src/rest_client.rs +++ b/core/rest-client/src/rest_client.rs @@ -18,14 +18,16 @@ #[cfg(all(not(feature = "std"), feature = "sgx"))] use crate::sgx_reexport_prelude::*; +pub use http_req::{request::Method, response::Headers}; +pub use url::Url; + use crate::{ error::Error, http_client::SendHttpRequest, Query, RestDelete, RestGet, RestPatch, RestPath, RestPost, RestPut, }; -use http_req::{request::Method, response::Headers}; + use log::*; use std::string::{String, ToString}; -use url::Url; /// REST client to make HTTP GET and POST requests. pub struct RestClient { diff --git a/enclave-runtime/Cargo.lock b/enclave-runtime/Cargo.lock index 76816a220c..e8fa72ab05 100644 --- a/enclave-runtime/Cargo.lock +++ b/enclave-runtime/Cargo.lock @@ -101,7 +101,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ "getrandom 0.2.3", - "once_cell 1.17.0", + "once_cell 1.17.1", "version_check", ] @@ -2556,7 +2556,7 @@ dependencies = [ "mio", "sgx_tstd", "sgx_types", - "slab 0.4.7", + "slab 0.4.8", ] [[package]] @@ -2715,9 +2715,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "opaque-debug" @@ -2822,7 +2822,7 @@ dependencies = [ [[package]] name = "pallet-parentchain" version = "0.9.0" -source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#50cac490de02a6484751c193da9f8080477b885c" +source = "git+https://github.com/integritee-network/pallets.git?branch=polkadot-v0.9.37#824c9a50dd8902697bd3e75ab6b5f7c3d663167f" dependencies = [ "frame-support", "frame-system", @@ -3028,7 +3028,7 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34" dependencies = [ - "once_cell 1.17.0", + "once_cell 1.17.1", "toml_edit", ] @@ -3838,9 +3838,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" dependencies = [ "autocfg 1.1.0", ] diff --git a/enclave-runtime/Enclave.edl b/enclave-runtime/Enclave.edl index dffd2dd139..924c002c5e 100644 --- a/enclave-runtime/Enclave.edl +++ b/enclave-runtime/Enclave.edl @@ -88,6 +88,18 @@ enclave { [out, size=unchecked_extrinsic_size] uint8_t* unchecked_extrinsic, uint32_t unchecked_extrinsic_size, int skip_ra ); + public sgx_status_t generate_dcap_ra_quote( + int skip_ra, + [in] const sgx_target_info_t* quoting_enclave_target_info, + uint32_t quote_size, + [out, size=dcap_quote_size] uint8_t* dcap_quote_p, uint32_t dcap_quote_size + ); + + public sgx_status_t generate_dcap_ra_extrinsic_from_quote( + [in, size=w_url_size] uint8_t* w_url, uint32_t w_url_size, + [in, size=quote_size] uint8_t* quote, uint32_t quote_size, + [out, size=unchecked_extrinsic_size] uint8_t* unchecked_extrinsic, uint32_t unchecked_extrinsic_size + ); public sgx_status_t generate_dcap_ra_extrinsic( [in, size=w_url_size] uint8_t* w_url, uint32_t w_url_size, diff --git a/enclave-runtime/src/attestation.rs b/enclave-runtime/src/attestation.rs index 116885c9fd..ddca4b958f 100644 --- a/enclave-runtime/src/attestation.rs +++ b/enclave-runtime/src/attestation.rs @@ -163,7 +163,7 @@ pub unsafe extern "C" fn generate_dcap_ra_extrinsic( sgx_status_t::SGX_SUCCESS } -fn generate_dcap_ra_extrinsic_internal( +pub fn generate_dcap_ra_extrinsic_internal( url: String, skip_ra: bool, quoting_enclave_target_info: &sgx_target_info_t, @@ -177,7 +177,6 @@ fn generate_dcap_ra_extrinsic_internal( skip_ra, )?; - // TODO Need to send this to the teerex pallet (something similar to perform_ra_internal) let extrinsics_factory = get_extrinsic_factory_from_solo_or_parachain()?; let node_metadata_repo = get_node_metadata_repository_from_solo_or_parachain()?; @@ -191,6 +190,102 @@ fn generate_dcap_ra_extrinsic_internal( Ok(extrinsic[0].clone()) } +#[no_mangle] +pub unsafe extern "C" fn generate_dcap_ra_quote( + skip_ra: c_int, + quoting_enclave_target_info: &sgx_target_info_t, + quote_size: u32, + dcap_quote_p: *mut u8, + dcap_quote_size: u32, +) -> sgx_status_t { + if dcap_quote_p.is_null() { + return sgx_status_t::SGX_ERROR_INVALID_PARAMETER + } + let dcap_quote = match generate_dcap_ra_quote_internal( + skip_ra == 1, + quoting_enclave_target_info, + quote_size, + ) { + Ok(dcap_quote) => dcap_quote, + Err(e) => return e.into(), + }; + + let dcap_quote_slice = slice::from_raw_parts_mut(dcap_quote_p, dcap_quote_size as usize); + + if let Err(e) = write_slice_and_whitespace_pad(dcap_quote_slice, dcap_quote) { + return EnclaveError::Other(Box::new(e)).into() + }; + + sgx_status_t::SGX_SUCCESS +} + +pub fn generate_dcap_ra_quote_internal( + skip_ra: bool, + quoting_enclave_target_info: &sgx_target_info_t, + quote_size: u32, +) -> EnclaveResult> { + let attestation_handler = GLOBAL_ATTESTATION_HANDLER_COMPONENT.get()?; + + let (_, dcap_quote) = attestation_handler.generate_dcap_ra_cert( + quoting_enclave_target_info, + quote_size, + skip_ra, + )?; + + Ok(dcap_quote) +} + +#[no_mangle] +pub unsafe extern "C" fn generate_dcap_ra_extrinsic_from_quote( + w_url: *const u8, + w_url_size: u32, + quote: *const u8, + quote_size: u32, + unchecked_extrinsic: *mut u8, + unchecked_extrinsic_size: u32, +) -> sgx_status_t { + if w_url.is_null() || unchecked_extrinsic.is_null() { + return sgx_status_t::SGX_ERROR_INVALID_PARAMETER + } + let mut url_slice = slice::from_raw_parts(w_url, w_url_size as usize); + let url = String::decode(&mut url_slice).expect("Could not decode url slice to a valid String"); + + let extrinsic_slice = + slice::from_raw_parts_mut(unchecked_extrinsic, unchecked_extrinsic_size as usize); + + let quote_slice = slice::from_raw_parts(quote, quote_size as usize); + + let extrinsic = match generate_dcap_ra_extrinsic_from_quote_internal(url, quote_slice) { + Ok(xt) => xt, + Err(e) => return e.into(), + }; + + if let Err(e) = write_slice_and_whitespace_pad(extrinsic_slice, extrinsic.encode()) { + return EnclaveError::Other(Box::new(e)).into() + }; + sgx_status_t::SGX_SUCCESS +} + +pub fn generate_dcap_ra_extrinsic_from_quote_internal( + url: String, + quote: &[u8], +) -> EnclaveResult { + let extrinsics_factory = get_extrinsic_factory_from_solo_or_parachain()?; + let node_metadata_repo = get_node_metadata_repository_from_solo_or_parachain()?; + info!(" [Enclave] Compose register enclave gettins callIDs:"); + + let call_ids = node_metadata_repo + .get_from_metadata(|m| m.register_dcap_enclave_call_indexes())? + .map_err(MetadataProviderError::MetadataError)?; + info!(" [Enclave] Compose register enclave call DCAP IDs: {:?}", call_ids); + let call = OpaqueCall::from_tuple(&(call_ids, quote, url)); + info!(" [Enclave] Compose register enclave got call: {:#?}", &call); + + let extrinsic = extrinsics_factory.create_extrinsics(&[call], None)?; + info!(" [Enclave] Compose register enclave got extrinsic, returning"); + Ok(extrinsic[0].clone()) +} + fn generate_ias_ra_extrinsic_internal( url: String, skip_ra: bool, diff --git a/service/Cargo.toml b/service/Cargo.toml index cefe4a72da..e0bcf4fd53 100644 --- a/service/Cargo.toml +++ b/service/Cargo.toml @@ -19,6 +19,7 @@ log = "0.4" parking_lot = "0.12.1" parse_duration = "2.1.1" prometheus = { version = "0.13.0", features = ["process"] } +scale-info = { version = "2.0.1", default-features = false, features = ["derive"] } serde = "1.0" serde_derive = "1.0" serde_json = "1.0" @@ -26,6 +27,7 @@ thiserror = "1.0" tokio = { version = "1.6.1", features = ["full"] } warp = "0.3" + # ipfs ipfs-api = "0.11.0" sha2 = { version = "0.7", default-features = false } @@ -39,6 +41,7 @@ sgx_urts = { branch = "master", git = "https://github.com/apache/teaclave-sgx-sd # local itc-parentchain = { path = "../core/parentchain/parentchain-crate" } +itc-rest-client = { path = "../core/rest-client" } itc-rpc-client = { path = "../core/rpc-client" } itc-rpc-server = { path = "../core/rpc-server" } itp-enclave-api = { path = "../core-primitives/enclave-api" } @@ -54,7 +57,9 @@ its-rpc-handler = { path = "../sidechain/rpc-handler" } its-storage = { path = "../sidechain/storage" } # scs / integritee + my-node-runtime = { package = "integritee-node-runtime", git = "https://github.com/integritee-network/integritee-node.git", branch = "polkadot-v0.9.37" } +sgx-verify = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.37" } substrate-api-client = { git = "https://github.com/scs/substrate-api-client.git", branch = "polkadot-v0.9.37-tag-v0.7.0" } teerex-primitives = { git = "https://github.com/integritee-network/pallets.git", branch = "polkadot-v0.9.37" } diff --git a/service/src/config.rs b/service/src/config.rs index 36365fd5d9..51eb076c6f 100644 --- a/service/src/config.rs +++ b/service/src/config.rs @@ -16,6 +16,7 @@ */ use clap::ArgMatches; +use itc_rest_client::rest_client::Url; use parse_duration::parse; use serde::{Deserialize, Serialize}; use std::time::Duration; @@ -183,6 +184,8 @@ pub struct RunConfig { pub shard: Option, /// Optional teeracle update interval pub teeracle_update_interval: Option, + /// Marblerun's Prometheus endpoint base URL + pub marblerun_base_url: Option, } impl From<&ArgMatches<'_>> for RunConfig { @@ -194,8 +197,13 @@ impl From<&ArgMatches<'_>> for RunConfig { let teeracle_update_interval = m.value_of("teeracle-interval").map(|i| { parse(i).unwrap_or_else(|e| panic!("teeracle-interval parsing error {:?}", e)) }); + let marblerun_base_url = m.value_of("marblerun-url").map(|i| { + Url::parse(i) + .unwrap_or_else(|e| panic!("marblerun-url parsing error: {:?}", e)) + .to_string() + }); - Self { skip_ra, dev, request_state, shard, teeracle_update_interval } + Self { skip_ra, dev, request_state, shard, teeracle_update_interval, marblerun_base_url } } } diff --git a/service/src/main.rs b/service/src/main.rs index 742937344d..1598d802d8 100644 --- a/service/src/main.rs +++ b/service/src/main.rs @@ -20,6 +20,9 @@ #[cfg(feature = "teeracle")] use crate::teeracle::start_interval_market_update; +#[cfg(not(feature = "dcap"))] +use crate::utils::check_files; + use crate::{ account_funding::{setup_account_funding, EnclaveAccountInfoProvider}, error::Error, @@ -34,7 +37,7 @@ use crate::{ prometheus_metrics::{start_metrics_server, EnclaveMetricsReceiver, MetricsHandler}, sidechain_setup::{sidechain_init_block_production, sidechain_start_untrusted_rpc_server}, sync_block_broadcaster::SyncBlockBroadcaster, - utils::{check_files, extract_shard}, + utils::extract_shard, worker::Worker, worker_peers_updater::WorkerPeersUpdater, }; @@ -72,6 +75,10 @@ use its_storage::{interface::FetchBlocks, BlockPruner, SidechainStorageLock}; use log::*; use my_node_runtime::{Hash, Header, RuntimeEvent}; use sgx_types::*; + +#[cfg(feature = "dcap")] +use sgx_verify::extract_tcb_info_from_raw_dcap_quote; + use sp_core::crypto::{AccountId32, Ss58Codec}; use sp_keyring::AccountKeyring; use std::{ @@ -224,10 +231,9 @@ fn main() { enclave.dump_ias_ra_cert_to_disk().unwrap(); #[cfg(feature = "dcap")] { - // Hard coded 6-byte FMSPC that represents the state of devsgx03 - // TODO: either fetch this value from a list of pre-configured FMSPC values or - // extract the information out of the RA certificate - let fmspc = [00u8, 0x90, 0x6E, 0xA1, 00, 00]; + let skip_ra = false; + let dcap_quote = enclave.generate_dcap_ra_quote(skip_ra).unwrap(); + let (fmspc, _tcb_info) = extract_tcb_info_from_raw_dcap_quote(&dcap_quote).unwrap(); enclave.dump_dcap_collateral_to_disk(fmspc).unwrap(); enclave.dump_dcap_ra_cert_to_disk().unwrap(); } @@ -302,6 +308,7 @@ fn start_worker( // ------------------------------------------------------------------------ // check for required files if !skip_ra { + #[cfg(not(feature = "dcap"))] check_files(); } // ------------------------------------------------------------------------ @@ -424,11 +431,26 @@ fn start_worker( .expect("Could not set the node metadata in the enclave"); #[cfg(feature = "dcap")] - register_collateral(&node_api, &*enclave, &tee_accountid, is_development_mode); + register_collateral(&node_api, &*enclave, &tee_accountid, is_development_mode, skip_ra); + + let trusted_url = config.trusted_worker_url_external(); + #[cfg(feature = "dcap")] + let marblerun_base_url = + run_config.marblerun_base_url.unwrap_or("http://localhost:9944".to_owned()); + + #[cfg(feature = "dcap")] + fetch_marblerun_events_every_hour( + node_api.clone(), + enclave.clone(), + tee_accountid.clone(), + is_development_mode, + trusted_url.clone(), + marblerun_base_url.clone(), + ); // ------------------------------------------------------------------------ // Perform a remote attestation and get an unchecked extrinsic back. - let trusted_url = config.trusted_worker_url_external(); + if skip_ra { println!( "[!] skipping remote attestation. Registering enclave without attestation report." @@ -694,14 +716,71 @@ fn print_events(events: Events, _sender: Sender) { } } +#[cfg(feature = "dcap")] +fn fetch_marblerun_events_every_hour( + api: ParentchainApi, + enclave: Arc, + accountid: AccountId32, + is_development_mode: bool, + url: String, + marblerun_base_url: String, +) where + E: RemoteAttestation + Clone + Sync + Send + 'static, +{ + let enclave = enclave.clone(); + let handle = thread::spawn(move || { + const POLL_INTERVAL_1_HOUR_IN_SECS: u64 = 1 * 30; + loop { + info!("Polling marblerun events for quotes to register"); + register_quotes_from_marblerun( + &api, + enclave.clone(), + &accountid, + is_development_mode, + url.clone(), + marblerun_base_url.clone(), + ); + + thread::sleep(Duration::from_secs(POLL_INTERVAL_1_HOUR_IN_SECS)); + } + }); + + handle.join().unwrap() +} +#[cfg(feature = "dcap")] +fn register_quotes_from_marblerun( + api: &ParentchainApi, + enclave: Arc, + accountid: &AccountId32, + is_development_mode: bool, + url: String, + marblerun_base_url: String, +) { + let enclave = enclave.as_ref(); + let events = prometheus_metrics::fetch_marblerun_events(&marblerun_base_url).unwrap(); + let quotes: Vec<&[u8]> = + events.iter().map(|event| event.get_quote_without_prepended_bytes()).collect(); + + for quote in quotes { + match enclave.generate_dcap_ra_extrinsic_from_quote(url.clone(), "e) { + Ok(xts) => send_extrinsic(&xts, api, accountid, is_development_mode), + Err(e) => { + error!("Extracting information from quote failed: {}", e.into()) + }, + } + } +} #[cfg(feature = "dcap")] fn register_collateral( api: &ParentchainApi, enclave: &dyn RemoteAttestation, accountid: &AccountId32, is_development_mode: bool, + skip_ra: bool, ) { - let fmspc = [00u8, 0x90, 0x6E, 0xA1, 00, 00]; + let dcap_quote = enclave.generate_dcap_ra_quote(skip_ra).unwrap(); + let (fmspc, _tcb_info) = extract_tcb_info_from_raw_dcap_quote(&dcap_quote).unwrap(); + let uxt = enclave.generate_register_quoting_enclave_extrinsic(fmspc).unwrap(); send_extrinsic(&uxt, api, accountid, is_development_mode); diff --git a/service/src/prometheus_metrics.rs b/service/src/prometheus_metrics.rs index 6d41e120f0..63a70bc83d 100644 --- a/service/src/prometheus_metrics.rs +++ b/service/src/prometheus_metrics.rs @@ -25,10 +25,21 @@ use crate::{ error::{Error, ServiceResult}, }; use async_trait::async_trait; +use codec::{Decode, Encode}; +#[cfg(feature = "dcap")] +use core::time::Duration; +use frame_support::scale_info::TypeInfo; +#[cfg(feature = "dcap")] +use itc_rest_client::{ + http_client::{DefaultSend, HttpClient}, + rest_client::{RestClient, Url as URL}, + RestGet, RestPath, +}; use itp_enclave_metrics::EnclaveMetric; use lazy_static::lazy_static; use log::*; use prometheus::{proto::MetricFamily, register_int_gauge, IntGauge}; +use serde::{Deserialize, Serialize}; use std::{net::SocketAddr, sync::Arc}; use warp::{Filter, Rejection, Reply}; @@ -170,3 +181,58 @@ impl ReceiveEnclaveMetrics for EnclaveMetricsReceiver { Ok(()) } } + +// Data structure that matches with REST API JSON + +#[derive(Serialize, Deserialize, Debug)] +struct PrometheusMarblerunEvents(pub Vec); + +#[cfg(feature = "dcap")] +impl RestPath<&str> for PrometheusMarblerunEvents { + fn get_path(path: &str) -> Result { + Ok(format!("{}", path)) + } +} + +#[cfg(feature = "dcap")] +pub fn fetch_marblerun_events(base_url: &str) -> Result, Error> { + let base_url = URL::parse(&base_url).map_err(|e| { + Error::Custom( + format!("Failed to parse marblerun prometheus endpoint base URL: {:?}", e).into(), + ) + })?; + let timeout = 3u64; + let http_client = + HttpClient::new(DefaultSend {}, true, Some(Duration::from_secs(timeout)), None, None); + + let mut rest_client = RestClient::new(http_client, base_url.clone()); + let events: PrometheusMarblerunEvents = rest_client.get("events").map_err(|e| { + Error::Custom( + format!("Failed to fetch marblerun prometheus events from: {}, error: {}", base_url, e) + .into(), + ) + })?; + + Ok(events.0) +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] +pub struct PrometheusMarblerunEvent { + pub time: String, + pub activation: PrometheusMarblerunEventActivation, +} + +#[cfg(feature = "dcap")] +impl PrometheusMarblerunEvent { + pub fn get_quote_without_prepended_bytes(&self) -> &[u8] { + let marblerun_magic_prepended_header_size = 16usize; + &self.activation.quote.as_bytes()[marblerun_magic_prepended_header_size..] + } +} +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] +#[serde(rename_all = "camelCase")] +pub struct PrometheusMarblerunEventActivation { + pub marble_type: String, + pub uuid: String, + pub quote: String, +} diff --git a/service/src/utils.rs b/service/src/utils.rs index e5e83cb9ae..350c63214d 100644 --- a/service/src/utils.rs +++ b/service/src/utils.rs @@ -19,8 +19,7 @@ use base58::{FromBase58, ToBase58}; use itp_enclave_api::enclave_base::EnclaveBase; use itp_types::ShardIdentifier; -use log::{debug, info}; -use std::path::Path; +use log::info; pub fn extract_shard( maybe_shard_str: &Option, @@ -41,8 +40,11 @@ pub fn extract_shard( } } +#[cfg(not(feature = "dcap"))] pub fn check_files() { use itp_settings::files::{ENCLAVE_FILE, RA_API_KEY_FILE, RA_SPID_FILE}; + use log::debug; + use std::path::Path; debug!("*** Check files"); let files = [ENCLAVE_FILE, RA_SPID_FILE, RA_API_KEY_FILE]; for f in files.iter() {