diff --git a/tee-worker/Cargo.lock b/tee-worker/Cargo.lock index c451a09d88..1346839226 100644 --- a/tee-worker/Cargo.lock +++ b/tee-worker/Cargo.lock @@ -328,7 +328,7 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "sp-api", "sp-beefy", @@ -1576,7 +1576,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa" [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -1589,7 +1589,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-runtime-interface", "sp-std 5.0.0", @@ -1599,14 +1599,14 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", "parity-scale-codec", "scale-info", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", "sp-tracing", @@ -1638,7 +1638,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "bitflags", "frame-metadata 15.0.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1657,7 +1657,7 @@ dependencies = [ "sp-core", "sp-core-hashing-proc-macro", "sp-inherents", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-staking", "sp-state-machine", @@ -1670,7 +1670,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "Inflector", "cfg-expr", @@ -1684,7 +1684,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1696,7 +1696,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "proc-macro2", "quote", @@ -1706,7 +1706,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "log 0.4.17", @@ -1714,7 +1714,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", "sp-version", @@ -1724,7 +1724,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-benchmarking", "frame-support", @@ -1739,7 +1739,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "sp-api", @@ -2988,7 +2988,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -3760,9 +3760,12 @@ dependencies = [ name = "its-consensus-common" version = "0.9.0" dependencies = [ + "itc-parentchain-indirect-calls-executor", "itc-parentchain-light-client", "itc-parentchain-test", "itp-block-import-queue", + "itp-component-container", + "itp-enclave-scheduled", "itp-extrinsics-factory", "itp-node-api-metadata", "itp-node-api-metadata-provider", @@ -3795,7 +3798,10 @@ dependencies = [ "futures-timer", "itc-parentchain-test", "itp-settings", + "itp-sgx-externalities", "itp-sgx-io", + "itp-stf-state-handler", + "itp-test", "itp-time-utils", "itp-types", "its-block-verification", @@ -3841,7 +3847,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -4238,7 +4244,7 @@ dependencies = [ "serde_json 1.0.94", "sgx_tstd", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", "thiserror 1.0.38", @@ -4346,7 +4352,7 @@ dependencies = [ "serde_json 1.0.94", "sgx_tstd", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-std 5.0.0", "thiserror 1.0.38", "thiserror 1.0.9", @@ -5379,7 +5385,7 @@ checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "pallet-aura" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -5395,7 +5401,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -5410,7 +5416,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-benchmarking", "frame-support", @@ -5440,7 +5446,7 @@ dependencies = [ "rlp", "scale-info", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -5448,7 +5454,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-benchmarking", "frame-support", @@ -5461,7 +5467,7 @@ dependencies = [ "sp-application-crypto", "sp-core", "sp-finality-grandpa", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-session", "sp-staking", @@ -5504,7 +5510,7 @@ dependencies = [ "serde_derive 1.0.156", "serde_json 1.0.94", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -5520,7 +5526,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -5528,7 +5534,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -5542,7 +5548,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -5552,7 +5558,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-session", "sp-staking", @@ -5563,13 +5569,13 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", "parity-scale-codec", "scale-info", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -5587,7 +5593,7 @@ dependencies = [ "serde 1.0.156", "sgx-verify", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", "teerex-primitives", @@ -5596,7 +5602,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-benchmarking", "frame-support", @@ -5605,7 +5611,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-inherents", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", "sp-timestamp", @@ -5614,7 +5620,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "frame-support", "frame-system", @@ -5622,7 +5628,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-runtime", "sp-std 5.0.0", ] @@ -5630,7 +5636,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -6750,7 +6756,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "array-bytes", "async-trait", @@ -7106,7 +7112,7 @@ dependencies = [ "serde 1.0.156", "serde_json 1.0.94", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-std 5.0.0", "teerex-primitives", "webpki 0.21.0", @@ -7476,7 +7482,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "hash-db", "log 0.4.17", @@ -7494,7 +7500,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "blake2", "proc-macro-crate", @@ -7506,20 +7512,20 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-std 5.0.0", ] [[package]] name = "sp-arithmetic" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "integer-sqrt", "num-traits 0.2.15", @@ -7533,7 +7539,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "parity-scale-codec", @@ -7545,7 +7551,7 @@ dependencies = [ [[package]] name = "sp-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", @@ -7553,7 +7559,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-mmr-primitives", "sp-runtime", "sp-std 5.0.0", @@ -7562,7 +7568,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "sp-api", @@ -7574,7 +7580,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "futures 0.3.26", @@ -7592,7 +7598,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "parity-scale-codec", @@ -7610,7 +7616,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", @@ -7622,7 +7628,7 @@ dependencies = [ [[package]] name = "sp-core" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "array-bytes", "base58", @@ -7664,7 +7670,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "blake2", "byteorder 1.4.3", @@ -7693,7 +7699,7 @@ dependencies = [ [[package]] name = "sp-core-hashing-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "proc-macro2", "quote", @@ -7704,7 +7710,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "proc-macro2", "quote", @@ -7714,7 +7720,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "environmental 1.1.4", "parity-scale-codec", @@ -7725,7 +7731,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "finality-grandpa", "log 0.4.17", @@ -7743,7 +7749,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -7780,7 +7786,7 @@ dependencies = [ [[package]] name = "sp-io" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "bytes 1.4.0", "ed25519", @@ -7805,7 +7811,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "lazy_static", "sp-core", @@ -7816,7 +7822,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "futures 0.3.26", @@ -7833,7 +7839,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "ckb-merkle-mountain-range", "log 0.4.17", @@ -7851,7 +7857,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "sp-api", "sp-core", @@ -7861,7 +7867,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "backtrace", "lazy_static", @@ -7871,7 +7877,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "rustc-hash", "serde 1.0.156", @@ -7881,7 +7887,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "either", "hash256-std-hasher", @@ -7895,7 +7901,7 @@ dependencies = [ "sp-application-crypto", "sp-arithmetic", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-std 5.0.0", "sp-weights", ] @@ -7903,7 +7909,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "bytes 1.4.0", "impl-trait-for-tuples", @@ -7921,7 +7927,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "Inflector", "proc-macro-crate", @@ -7933,7 +7939,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", @@ -7947,7 +7953,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", @@ -7959,7 +7965,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.13.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "hash-db", "log 0.4.17", @@ -7979,7 +7985,7 @@ dependencies = [ [[package]] name = "sp-std" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" [[package]] name = "sp-std" @@ -7990,7 +7996,7 @@ checksum = "af0ee286f98455272f64ac5bb1384ff21ac029fbb669afbaf48477faff12760e" [[package]] name = "sp-storage" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8003,7 +8009,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "async-trait", "futures-timer", @@ -8018,7 +8024,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "6.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "sp-std 5.0.0", @@ -8030,7 +8036,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "sp-api", "sp-runtime", @@ -8039,7 +8045,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "ahash", "hash-db", @@ -8062,7 +8068,7 @@ dependencies = [ [[package]] name = "sp-version" version = "5.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "impl-serde", "parity-scale-codec", @@ -8079,7 +8085,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -8090,7 +8096,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "7.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "impl-trait-for-tuples", "log 0.4.17", @@ -8103,7 +8109,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "4.0.0" -source = "git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" +source = "git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37#f38bd6671d460293c93062cc1e4fe9e9e490cb29" dependencies = [ "parity-scale-codec", "scale-info", @@ -8324,7 +8330,7 @@ dependencies = [ "scale-info", "serde 1.0.156", "sp-core", - "sp-io 7.0.0 (git+https://github.com/paritytech/substrate?branch=polkadot-v0.9.37)", + "sp-io 7.0.0 (git+https://github.com/paritytech/substrate.git?branch=polkadot-v0.9.37)", "sp-std 5.0.0", ] diff --git a/tee-worker/core-primitives/sgx/enclave-scheduled/src/lib.rs b/tee-worker/core-primitives/sgx/enclave-scheduled/src/lib.rs index 6cf2278c8f..6371d5f786 100644 --- a/tee-worker/core-primitives/sgx/enclave-scheduled/src/lib.rs +++ b/tee-worker/core-primitives/sgx/enclave-scheduled/src/lib.rs @@ -71,14 +71,23 @@ pub trait ScheduledEnclaveHandle { &mut self, scheduled_enclave: ScheduledEnclaveInfo, ) -> IOResult>; + fn remove_scheduled_enclave( &mut self, sidechain_block_number: SidechainBlockNumber, ) -> IOResult>; + + /// give the current sidechain block number + /// return the next scheduled mr_enclave info that will be used fn get_next_scheduled_enclave( &self, current_side_chain_number: SidechainBlockNumber, ) -> Option; + + fn get_current_scheduled_enclave( + &self, + current_side_chain_number: SidechainBlockNumber, + ) -> Option; } impl ScheduledEnclaveHandle for ScheduledEnclaves { @@ -120,7 +129,6 @@ impl ScheduledEnclaveHandle for ScheduledEnclaves { Ok(enclave_info) } - /// get the next scheduled enclave fn get_next_scheduled_enclave( &self, current_side_chain_number: SidechainBlockNumber, @@ -138,4 +146,33 @@ impl ScheduledEnclaveHandle for ScheduledEnclaves { ) .min_by_key(|v| v.sidechain_block_number) } + + /// given current side chain number, returns mrenclave info that currently should be used + /// for example, if the scheduled mr enclaves like: + /// | block_number | mr_enclave | + /// | --- | --- | + /// | 1 | mr_enclave_A | + /// | 10 | mr_enclave_B | + /// | 20 | mr_enclave_C | + /// given current sidechain number 5, returns mr_enclave_A + /// given current sidechain number 10, returns mr_enclave_B + /// given current sidechain number 11, return mr_enclave_B + /// given current sidechain number 22, return mr_enclave_C + fn get_current_scheduled_enclave( + &self, + current_side_chain_number: SidechainBlockNumber, + ) -> Option { + self.scheduled_enclaves + .iter() + .filter_map( + |(k, v)| { + if k <= ¤t_side_chain_number { + Some(v.clone()) + } else { + None + } + }, + ) + .max_by_key(|v| v.sidechain_block_number) + } } diff --git a/tee-worker/core/parentchain/indirect-calls-executor/src/executor/litentry/get_scheduled_enclave.rs b/tee-worker/core/parentchain/indirect-calls-executor/src/executor/litentry/get_scheduled_enclave.rs index 5c5a4a6bbc..24a4939d21 100644 --- a/tee-worker/core/parentchain/indirect-calls-executor/src/executor/litentry/get_scheduled_enclave.rs +++ b/tee-worker/core/parentchain/indirect-calls-executor/src/executor/litentry/get_scheduled_enclave.rs @@ -56,7 +56,7 @@ impl ScheduledEnclaveUpdate { sidechain_block_number, mr_enclave, }; - let old_enclaves = GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES.get()?; + let old_enclaves = GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES.get().unwrap_or_default(); // unwrap is safe here, because GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES is initialized in `init_enclave()` let mut scheduled_enclaves = Arc::::try_unwrap(old_enclaves).unwrap(); scheduled_enclaves.add_scheduled_enclave(scheduled_enclave)?; diff --git a/tee-worker/enclave-runtime/Cargo.toml b/tee-worker/enclave-runtime/Cargo.toml index 57dea7f4b2..7bd33f9b9d 100644 --- a/tee-worker/enclave-runtime/Cargo.toml +++ b/tee-worker/enclave-runtime/Cargo.toml @@ -126,6 +126,7 @@ itp-top-pool-author = { path = "../core-primitives/top-pool-author", default-fea itp-types = { path = "../core-primitives/types", default-features = false } itp-utils = { path = "../core-primitives/utils", default-features = false, features = ["sgx"] } its-block-verification = { path = "../sidechain/block-verification", default-features = false } +its-consensus-common = { path = "../sidechain/consensus/common", default-features = false, features = ["sgx"] } its-primitives = { path = "../sidechain/primitives", default-features = false } its-sidechain = { path = "../sidechain/sidechain-crate", default-features = false, features = ["sgx"] } diff --git a/tee-worker/enclave-runtime/src/initialization/global_components.rs b/tee-worker/enclave-runtime/src/initialization/global_components.rs index 252948f651..fe0917427b 100644 --- a/tee-worker/enclave-runtime/src/initialization/global_components.rs +++ b/tee-worker/enclave-runtime/src/initialization/global_components.rs @@ -72,6 +72,7 @@ use itp_top_pool_author::{ author::{Author, AuthorTopFilter}, }; use itp_types::{Block as ParentchainBlock, SignedBlock as SignedParentchainBlock}; +use its_consensus_common::Updater; use its_primitives::{ traits::{Block as SidechainBlockTrait, SignedBlock as SignedSidechainBlockTrait}, types::block::SignedBlock as SignedSidechainBlock, @@ -282,3 +283,7 @@ pub static GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT: ComponentContainer< pub static GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT: ComponentContainer< EnclaveSidechainBlockSyncer, > = ComponentContainer::new("sidechain_block_syncer"); + +/// Sidechain mr_enclave +pub static GLOBAL_SIDECHAIN_UPDATER: ComponentContainer = + ComponentContainer::new("sidechain_updater"); diff --git a/tee-worker/enclave-runtime/src/initialization/mod.rs b/tee-worker/enclave-runtime/src/initialization/mod.rs index 559b40491b..859c93918c 100644 --- a/tee-worker/enclave-runtime/src/initialization/mod.rs +++ b/tee-worker/enclave-runtime/src/initialization/mod.rs @@ -32,9 +32,9 @@ use crate::{ GLOBAL_RPC_WS_HANDLER_COMPONENT, GLOBAL_SHIELDING_KEY_REPOSITORY_COMPONENT, GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT, GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT, GLOBAL_SIDECHAIN_IMPORT_QUEUE_COMPONENT, GLOBAL_SIDECHAIN_IMPORT_QUEUE_WORKER_COMPONENT, - GLOBAL_STATE_HANDLER_COMPONENT, GLOBAL_STATE_KEY_REPOSITORY_COMPONENT, - GLOBAL_STATE_OBSERVER_COMPONENT, GLOBAL_TOP_POOL_AUTHOR_COMPONENT, - GLOBAL_WEB_SOCKET_SERVER_COMPONENT, + GLOBAL_SIDECHAIN_UPDATER, GLOBAL_STATE_HANDLER_COMPONENT, + GLOBAL_STATE_KEY_REPOSITORY_COMPONENT, GLOBAL_STATE_OBSERVER_COMPONENT, + GLOBAL_TOP_POOL_AUTHOR_COMPONENT, GLOBAL_WEB_SOCKET_SERVER_COMPONENT, }, ocall::OcallApi, rpc::{rpc_response_channel::RpcResponseChannel, worker_api_direct::public_api_rpc_handler}, @@ -60,6 +60,7 @@ use itc_tls_websocket_server::{ use itp_attestation_handler::IntelAttestationHandler; use itp_component_container::{ComponentGetter, ComponentInitializer}; use itp_enclave_scheduled::{ScheduledEnclaveHandle, ScheduledEnclaves}; +use itp_ocall_api::EnclaveAttestationOCallApi; use itp_primitives_cache::GLOBAL_PRIMITIVES_CACHE; use itp_settings::files::STATE_SNAPSHOTS_CACHE_SIZE; use itp_sgx_crypto::{aes, ed25519, rsa3072, AesSeal, Ed25519Seal, Rsa3072Seal}; @@ -72,6 +73,7 @@ use itp_stf_state_handler::{ use itp_top_pool::pool::Options as PoolOptions; use itp_top_pool_author::author::AuthorTopFilter; use itp_types::ShardIdentifier; +use its_consensus_common::Updater; use its_sidechain::block_composer::BlockComposer; use log::*; use sp_core::crypto::Pair; @@ -225,7 +227,7 @@ pub(crate) fn init_enclave_sidechain_components() -> EnclaveResult<()> { let sidechain_block_syncer = Arc::new(EnclaveSidechainBlockSyncer::new( sidechain_block_importer, - ocall_api, + ocall_api.clone(), sidechain_block_import_confirmation_handler, )); GLOBAL_SIDECHAIN_BLOCK_SYNCER_COMPONENT.initialize(sidechain_block_syncer.clone()); @@ -240,6 +242,10 @@ pub(crate) fn init_enclave_sidechain_components() -> EnclaveResult<()> { let block_composer = Arc::new(BlockComposer::new(signer, state_key_repository)); GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT.initialize(block_composer); + let enclave = ocall_api.get_mrenclave_of_self()?; + let updater = Updater::new(enclave.m); + GLOBAL_SIDECHAIN_UPDATER.initialize(Arc::new(updater)); + Ok(()) } diff --git a/tee-worker/enclave-runtime/src/test/mocks/types.rs b/tee-worker/enclave-runtime/src/test/mocks/types.rs index 99e14e95a4..0f6c91f4f0 100644 --- a/tee-worker/enclave-runtime/src/test/mocks/types.rs +++ b/tee-worker/enclave-runtime/src/test/mocks/types.rs @@ -33,6 +33,7 @@ use itp_test::mock::{ use itp_top_pool::basic_pool::BasicPool; use itp_top_pool_author::{api::SidechainApi, author::Author, top_filter::AllowAllTopsFilter}; use itp_types::{Block as ParentchainBlock, SignedBlock as SignedParentchainBlock}; +use its_consensus_common::UpdaterTrait; use its_primitives::types::SignedBlock as SignedSidechainBlock; use its_sidechain::{aura::block_importer::BlockImporter, block_composer::BlockComposer}; use primitive_types::H256; @@ -89,3 +90,7 @@ pub type TestBlockImporter = BlockImporter< TestTopPoolAuthor, TestParentchainBlockImportTrigger, >; + +#[derive(Default)] +pub struct UpdaterMock; +impl UpdaterTrait for UpdaterMock {} diff --git a/tee-worker/enclave-runtime/src/test/sidechain_aura_tests.rs b/tee-worker/enclave-runtime/src/test/sidechain_aura_tests.rs index 082b82802d..d705df076a 100644 --- a/tee-worker/enclave-runtime/src/test/sidechain_aura_tests.rs +++ b/tee-worker/enclave-runtime/src/test/sidechain_aura_tests.rs @@ -162,14 +162,17 @@ pub fn produce_sidechain_block_and_import_it() { let state_hash_before_block_production = get_state_hash(state_handler.as_ref(), &shard_id); info!("Executing AURA on slot.."); + let updater = Arc::new(UpdaterMock); let (blocks, opaque_calls) = - exec_aura_on_slot::<_, ParentchainBlock, SignedSidechainBlock, _, _, _>( + exec_aura_on_slot::<_, ParentchainBlock, SignedSidechainBlock, _, _, _, _, _>( slot_info, signer, ocall_api.clone(), parentchain_block_import_trigger.clone(), proposer_environment, shards, + updater, + state_handler.clone(), ) .unwrap(); diff --git a/tee-worker/enclave-runtime/src/test/sidechain_event_tests.rs b/tee-worker/enclave-runtime/src/test/sidechain_event_tests.rs index 54a58e67ba..1efbbc1b8f 100644 --- a/tee-worker/enclave-runtime/src/test/sidechain_event_tests.rs +++ b/tee-worker/enclave-runtime/src/test/sidechain_event_tests.rs @@ -137,14 +137,17 @@ pub fn ensure_events_get_reset_upon_block_proposal() { SlotInfo::new(slot, timestamp, SLOT_DURATION, ends_at, parentchain_header.clone()); info!("Executing AURA on slot.."); + let updater = Arc::new(UpdaterMock); let (blocks, opaque_calls) = - exec_aura_on_slot::<_, ParentchainBlock, SignedSidechainBlock, _, _, _>( + exec_aura_on_slot::<_, ParentchainBlock, SignedSidechainBlock, _, _, _, _, _>( slot_info, signer, ocall_api.clone(), parentchain_block_import_trigger.clone(), proposer_environment, shards, + updater, + state_handler.clone(), ) .unwrap(); diff --git a/tee-worker/enclave-runtime/src/top_pool_execution.rs b/tee-worker/enclave-runtime/src/top_pool_execution.rs index d11fc4d8d7..62926158b7 100644 --- a/tee-worker/enclave-runtime/src/top_pool_execution.rs +++ b/tee-worker/enclave-runtime/src/top_pool_execution.rs @@ -19,8 +19,8 @@ use crate::{ error::Result, initialization::global_components::{ GLOBAL_OCALL_API_COMPONENT, GLOBAL_SIDECHAIN_BLOCK_COMPOSER_COMPONENT, - GLOBAL_SIDECHAIN_IMPORT_QUEUE_WORKER_COMPONENT, GLOBAL_STATE_HANDLER_COMPONENT, - GLOBAL_TOP_POOL_AUTHOR_COMPONENT, + GLOBAL_SIDECHAIN_IMPORT_QUEUE_WORKER_COMPONENT, GLOBAL_SIDECHAIN_UPDATER, + GLOBAL_STATE_HANDLER_COMPONENT, GLOBAL_TOP_POOL_AUTHOR_COMPONENT, }, sync::{EnclaveLock, EnclaveStateRWLock}, utils::{ @@ -38,12 +38,15 @@ use itc_parentchain::{ }, }; use itp_component_container::ComponentGetter; +use itp_sgx_externalities::SgxExternalities; +use its_consensus_common::UpdaterTrait; +// use itp_stf_state_handler::StateHandler; use itp_extrinsics_factory::CreateExtrinsics; use itp_ocall_api::{EnclaveOnChainOCallApi, EnclaveSidechainOCallApi}; use itp_settings::sidechain::SLOT_DURATION; use itp_sgx_crypto::Ed25519Seal; use itp_sgx_io::StaticSealedIO; -use itp_stf_state_handler::query_shard_state::QueryShardState; +use itp_stf_state_handler::{handle_state::HandleState, query_shard_state::QueryShardState}; use itp_time_utils::duration_now; use itp_types::{Block, OpaqueCall, H256}; use its_primitives::{ @@ -128,6 +131,8 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> { let state_handler = GLOBAL_STATE_HANDLER_COMPONENT.get()?; + let updater = GLOBAL_SIDECHAIN_UPDATER.get()?; + let ocall_api = GLOBAL_OCALL_API_COMPONENT.get()?; let authority = Ed25519Seal::unseal_from_static_file()?; @@ -153,14 +158,17 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> { block_composer, ); - let (blocks, opaque_calls) = exec_aura_on_slot::<_, _, SignedSidechainBlock, _, _, _>( - slot.clone(), - authority, - ocall_api.clone(), - parentchain_import_dispatcher, - env, - shards, - )?; + let (blocks, opaque_calls) = + exec_aura_on_slot::<_, _, SignedSidechainBlock, _, _, _, _, _>( + slot.clone(), + authority, + ocall_api.clone(), + parentchain_import_dispatcher, + env, + shards, + updater, + state_handler, + )?; debug!("Aura executed successfully"); @@ -190,6 +198,7 @@ fn execute_top_pool_trusted_calls_internal() -> Result<()> { } /// Executes aura for the given `slot`. +#[allow(clippy::too_many_arguments)] pub(crate) fn exec_aura_on_slot< Authority, ParentchainBlock, @@ -197,6 +206,8 @@ pub(crate) fn exec_aura_on_slot< OCallApi, PEnvironment, BlockImportTrigger, + Updater, + StateHandler, >( slot: SlotInfo, authority: Authority, @@ -204,6 +215,8 @@ pub(crate) fn exec_aura_on_slot< block_import_trigger: Arc, proposer_environment: PEnvironment, shards: Vec>, + updater: Arc, + state_handler: Arc, ) -> Result<(Vec, Vec)> where ParentchainBlock: BlockTrait, @@ -221,16 +234,21 @@ where Environment + Send + Sync, BlockImportTrigger: TriggerParentchainBlockImport>, + Updater: UpdaterTrait, + StateHandler: HandleState, { debug!("[Aura] Executing aura for slot: {:?}", slot); - let mut aura = Aura::<_, ParentchainBlock, SignedSidechainBlock, PEnvironment, _, _>::new( - authority, - ocall_api.as_ref().clone(), - block_import_trigger, - proposer_environment, - ) - .with_claim_strategy(SlotClaimStrategy::RoundRobin); + let mut aura = + Aura::<_, ParentchainBlock, SignedSidechainBlock, PEnvironment, _, _, _, _>::new( + authority, + ocall_api.as_ref().clone(), + block_import_trigger, + proposer_environment, + updater, + state_handler, + ) + .with_claim_strategy(SlotClaimStrategy::RoundRobin); let (blocks, xts): (Vec<_>, Vec<_>) = PerShardSlotWorkerScheduler::on_slot(&mut aura, slot, shards) diff --git a/tee-worker/litentry/pallets/identity-management/src/tests.rs b/tee-worker/litentry/pallets/identity-management/src/tests.rs index 4b918c698f..9c436ed135 100644 --- a/tee-worker/litentry/pallets/identity-management/src/tests.rs +++ b/tee-worker/litentry/pallets/identity-management/src/tests.rs @@ -18,7 +18,7 @@ use crate::{ identity_context::IdentityContext, mock::*, Error, MetadataOf, ParentchainBlockNumber, UserShieldingKeyType, }; -use frame_support::{assert_err, assert_noop, assert_ok}; +use frame_support::{assert_noop, assert_ok}; use litentry_primitives::{Identity, IdentityString, Web2Network, USER_SHIELDING_KEY_LEN}; use sp_runtime::AccountId32; diff --git a/tee-worker/service/src/setup.rs b/tee-worker/service/src/setup.rs index 0408eca281..5ffadcbb38 100644 --- a/tee-worker/service/src/setup.rs +++ b/tee-worker/service/src/setup.rs @@ -20,8 +20,8 @@ use crate::error::{Error, ServiceResult}; use codec::Encode; use itp_enclave_api::{enclave_base::EnclaveBase, Enclave}; use itp_settings::files::{ - LAST_SLOT_BIN, LIGHT_CLIENT_DB, SHARDS_PATH, SHIELDING_KEY_FILE, SIDECHAIN_STORAGE_PATH, - SIGNING_KEY_FILE, + LAST_SLOT_BIN, LIGHT_CLIENT_DB, SCHEDULED_ENCLAVE_FILE, SHARDS_PATH, SHIELDING_KEY_FILE, + SIDECHAIN_STORAGE_PATH, SIGNING_KEY_FILE, }; use itp_types::ShardIdentifier; use log::*; @@ -49,6 +49,7 @@ pub(crate) fn initialize_shard_and_keys( println!("[+] Generate key files"); generate_signing_key_file(enclave); generate_shielding_key_file(enclave); + generate_scheduled_enclave_file(); Ok(()) } @@ -96,6 +97,14 @@ pub(crate) fn generate_signing_key_file(enclave: &Enclave) { } } +pub(crate) fn generate_scheduled_enclave_file() { + info!("*** Get scheduled enclaves from the TEE\n"); + let path = Path::new(SCHEDULED_ENCLAVE_FILE); + if !path.exists() { + let _file = File::create(SCHEDULED_ENCLAVE_FILE).unwrap(); + } +} + pub(crate) fn generate_shielding_key_file(enclave: &Enclave) { info!("*** Get the public key from the TEE\n"); let pubkey = enclave.get_rsa_shielding_pubkey().unwrap(); @@ -117,6 +126,7 @@ fn purge_files(root_directory: &Path) -> ServiceResult<()> { remove_file_if_it_exists(root_directory, LAST_SLOT_BIN)?; remove_file_if_it_exists(root_directory, LIGHT_CLIENT_DB)?; + remove_file_if_it_exists(root_directory, SCHEDULED_ENCLAVE_FILE)?; remove_file_if_it_exists(root_directory, light_client_backup_file().as_str())?; Ok(()) diff --git a/tee-worker/sidechain/consensus/aura/src/lib.rs b/tee-worker/sidechain/consensus/aura/src/lib.rs index d8677e6aeb..05552cb09e 100644 --- a/tee-worker/sidechain/consensus/aura/src/lib.rs +++ b/tee-worker/sidechain/consensus/aura/src/lib.rs @@ -32,9 +32,11 @@ extern crate sgx_tstd as std; use core::marker::PhantomData; use itc_parentchain_block_import_dispatcher::triggered_dispatcher::TriggerParentchainBlockImport; use itp_ocall_api::EnclaveOnChainOCallApi; +use itp_sgx_externalities::SgxExternalities; +use itp_stf_state_handler::handle_state::HandleState; use itp_time_utils::duration_now; use its_block_verification::slot::slot_author; -use its_consensus_common::{Environment, Error as ConsensusError, Proposer}; +use its_consensus_common::{Environment, Error as ConsensusError, Proposer, UpdaterTrait}; use its_consensus_slots::{SimpleSlotWorker, Slot, SlotInfo}; use its_primitives::{ traits::{Block as SidechainBlockTrait, Header as HeaderTrait, SignedBlock}, @@ -67,23 +69,47 @@ pub struct Aura< Environment, OcallApi, ImportTrigger, + Updater, + StateHandler, > { authority_pair: AuthorityPair, ocall_api: OcallApi, parentchain_import_trigger: Arc, environment: Environment, claim_strategy: SlotClaimStrategy, + updater: Arc, + state_handler: Arc, _phantom: PhantomData<(AuthorityPair, ParentchainBlock, SidechainBlock)>, } -impl - Aura +impl< + AuthorityPair, + ParentchainBlock, + SidechainBlock, + Environment, + OcallApi, + ImportTrigger, + Updater, + StateHandler, + > + Aura< + AuthorityPair, + ParentchainBlock, + SidechainBlock, + Environment, + OcallApi, + ImportTrigger, + Updater, + StateHandler, + > { pub fn new( authority_pair: AuthorityPair, ocall_api: OcallApi, parentchain_import_trigger: Arc, environment: Environment, + updater: Arc, + state_handler: Arc, ) -> Self { Self { authority_pair, @@ -91,6 +117,8 @@ impl =

::Public; type ShardIdentifierFor = <<::Block as SidechainBlockTrait>::HeaderType as HeaderTrait>::ShardIdentifier; -impl - SimpleSlotWorker - for Aura -where +impl< + AuthorityPair, + ParentchainBlock, + SignedSidechainBlock, + E, + OcallApi, + ImportTrigger, + Updater, + StateHandler, + > SimpleSlotWorker + for Aura< + AuthorityPair, + ParentchainBlock, + SignedSidechainBlock, + E, + OcallApi, + ImportTrigger, + Updater, + StateHandler, + > where AuthorityPair: Pair, // todo: Relax hash trait bound, but this needs a change to some other parts in the code. ParentchainBlock: ParentchainBlockTrait, @@ -132,11 +176,15 @@ where OcallApi: ValidateerFetch + EnclaveOnChainOCallApi + Send + 'static, ImportTrigger: TriggerParentchainBlockImport>, + Updater: UpdaterTrait, + StateHandler: HandleState, { type Proposer = E::Proposer; type Claim = AuthorityPair::Public; type EpochData = Vec>; type Output = SignedSidechainBlock; + type Updater = Updater; + type StateHandler = StateHandler; fn logging_target(&self) -> &'static str { "aura" @@ -187,6 +235,14 @@ where self.environment.init(header, shard) } + fn updater(&mut self) -> Arc { + self.updater.clone() + } + + fn state_handler(&mut self) -> Arc { + self.state_handler.clone() + } + fn proposing_remaining_duration(&self, slot_info: &SlotInfo) -> Duration { proposing_remaining_duration(slot_info, duration_now()) } @@ -256,7 +312,10 @@ where mod tests { use super::*; use crate::test::{ - fixtures::{types::TestAura, validateer, SLOT_DURATION}, + fixtures::{ + types::{TestAura, UpdaterMock}, + validateer, SLOT_DURATION, + }, mocks::environment_mock::EnvironmentMock, }; use itc_parentchain_block_import_dispatcher::trigger_parentchain_block_import_mock::TriggerParentchainBlockImportMock; @@ -264,7 +323,7 @@ mod tests { parentchain_block_builder::ParentchainBlockBuilder, parentchain_header_builder::ParentchainHeaderBuilder, }; - use itp_test::mock::onchain_mock::OnchainMock; + use itp_test::mock::{handle_state_mock::HandleStateMock, onchain_mock::OnchainMock}; use itp_types::{ Block as ParentchainBlock, Enclave, Header as ParentchainHeader, SignedBlock as SignedParentchainBlock, @@ -277,7 +336,14 @@ mod tests { onchain_mock: OnchainMock, trigger_parentchain_import: Arc>, ) -> TestAura { - Aura::new(Keyring::Alice.pair(), onchain_mock, trigger_parentchain_import, EnvironmentMock) + Aura::new( + Keyring::Alice.pair(), + onchain_mock, + trigger_parentchain_import, + EnvironmentMock, + Arc::new(UpdaterMock), + Arc::new(HandleStateMock::default()), + ) } fn get_default_aura() -> TestAura { diff --git a/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs b/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs index 39aa4ef3f4..f5885cba4c 100644 --- a/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs +++ b/tee-worker/sidechain/consensus/aura/src/test/fixtures/types.rs @@ -17,8 +17,9 @@ use crate::{test::mocks::environment_mock::EnvironmentMock, Aura}; use itc_parentchain_block_import_dispatcher::trigger_parentchain_block_import_mock::TriggerParentchainBlockImportMock; -use itp_test::mock::onchain_mock::OnchainMock; +use itp_test::mock::{handle_state_mock::HandleStateMock, onchain_mock::OnchainMock}; use itp_types::Block as ParentchainBlock; +use its_consensus_common::UpdaterTrait; use its_primitives::{ traits::{ Block as SidechainBlockTrait, Header as SidechainHeaderTrait, @@ -33,6 +34,10 @@ type AuthorityPair = ed25519::Pair; pub type ShardIdentifierFor = <<::Block as SidechainBlockTrait>::HeaderType as SidechainHeaderTrait>::ShardIdentifier; +#[derive(Default)] +pub struct UpdaterMock; +impl UpdaterTrait for UpdaterMock {} + pub type TestAura = Aura< AuthorityPair, ParentchainBlock, @@ -40,4 +45,6 @@ pub type TestAura = Aura< EnvironmentMock, OnchainMock, TriggerParentchainBlockImportMock>, + UpdaterMock, + HandleStateMock, >; diff --git a/tee-worker/sidechain/consensus/common/Cargo.toml b/tee-worker/sidechain/consensus/common/Cargo.toml index e703b5b709..023bb6628d 100644 --- a/tee-worker/sidechain/consensus/common/Cargo.toml +++ b/tee-worker/sidechain/consensus/common/Cargo.toml @@ -10,8 +10,11 @@ log = { version = "0.4", default-features = false } thiserror = { version = "1.0.26", optional = true } # local deps +itc-parentchain-indirect-calls-executor = { path = "../../../core/parentchain/indirect-calls-executor", default-features = false } itc-parentchain-light-client = { path = "../../../core/parentchain/light-client", default-features = false } itp-block-import-queue = { path = "../../../core-primitives/block-import-queue", default-features = false } +itp-component-container = { path = "../../../core-primitives/component-container", default-features = false } +itp-enclave-scheduled = { path = "../../../core-primitives/sgx/enclave-scheduled", default-features = false } itp-extrinsics-factory = { path = "../../../core-primitives/extrinsics-factory", default-features = false } itp-node-api-metadata = { path = "../../../core-primitives/node-api/metadata", default-features = false } itp-node-api-metadata-provider = { path = "../../../core-primitives/node-api/metadata-provider", default-features = false } @@ -50,10 +53,13 @@ sgx = [ "itc-parentchain-light-client/sgx", "itp-block-import-queue/sgx", "itp-extrinsics-factory/sgx", + #"itp-component-container/sgx", + "itp-enclave-scheduled/sgx", "itp-node-api-metadata-provider/sgx", "itp-sgx-crypto/sgx", "itp-sgx-externalities/sgx", "its-state/sgx", + "itc-parentchain-indirect-calls-executor/sgx", # scs "its-block-verification/sgx", ] @@ -63,10 +69,13 @@ std = [ "thiserror", # local "itc-parentchain-light-client/std", + "itp-component-container/std", "itp-block-import-queue/std", "itp-extrinsics-factory/std", "itp-node-api-metadata/std", "itp-node-api-metadata-provider/std", + "itp-enclave-scheduled/std", + "itc-parentchain-indirect-calls-executor/std", "itp-ocall-api/std", "itp-sgx-crypto/std", "itp-sgx-externalities/std", diff --git a/tee-worker/sidechain/consensus/common/src/error.rs b/tee-worker/sidechain/consensus/common/src/error.rs index 1f1b1f21f8..77aec1c32c 100644 --- a/tee-worker/sidechain/consensus/common/src/error.rs +++ b/tee-worker/sidechain/consensus/common/src/error.rs @@ -66,6 +66,8 @@ pub enum Error { FailedToPopBlockImportQueue(#[from] itp_block_import_queue::error::Error), #[error("Verification Error: {0}")] VerificationError(its_block_verification::error::Error), + #[error("Can't get scheduled enclaves")] + GetScheduledEnclavesFailed, } impl core::convert::From for Error { diff --git a/tee-worker/sidechain/consensus/common/src/lib.rs b/tee-worker/sidechain/consensus/common/src/lib.rs index 60ce5d17e3..07b9299074 100644 --- a/tee-worker/sidechain/consensus/common/src/lib.rs +++ b/tee-worker/sidechain/consensus/common/src/lib.rs @@ -37,6 +37,7 @@ mod block_import_confirmation_handler; mod block_import_queue_worker; mod error; mod peer_block_sync; +mod updater; #[cfg(test)] mod test; @@ -46,6 +47,7 @@ pub use block_import_confirmation_handler::*; pub use block_import_queue_worker::*; pub use error::*; pub use peer_block_sync::*; +pub use updater::{Updater, UpdaterTrait}; pub trait Verifier: Send + Sync where diff --git a/tee-worker/sidechain/consensus/common/src/updater.rs b/tee-worker/sidechain/consensus/common/src/updater.rs new file mode 100644 index 0000000000..3d8fbcd864 --- /dev/null +++ b/tee-worker/sidechain/consensus/common/src/updater.rs @@ -0,0 +1,95 @@ +// Copyright 2020-2023 Litentry Technologies GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +use crate::error::{Error, Result}; +use itc_parentchain_indirect_calls_executor::executor::litentry::get_scheduled_enclave::GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES; +use itp_component_container::ComponentGetter; +use itp_enclave_scheduled::ScheduledEnclaveHandle; +use itp_types::{MrEnclave, SidechainBlockNumber}; + +/// Trait to suspend the production of sidechain blocks. +pub trait UpdaterTrait { + /// current mr enclave + fn current_mr_enclave(&self) -> MrEnclave { + MrEnclave::default() + } + + /// Trait to query if sidechain block production is suspended. + fn is_block_suspended(&self, _current_sidechain_num: SidechainBlockNumber) -> Result { + Ok(false) + } + + /// check if need to merge return next mrenclave + fn get_merge_mr_enclave( + &self, + _current_sidechain_num: SidechainBlockNumber, + ) -> Result> { + Ok(None) + } +} + +/// Implementation for suspending and resuming sidechain block production. +#[derive(Default, Clone)] +pub struct Updater { + current_mr_enclave: MrEnclave, +} + +impl Updater { + pub fn new(current_mr_enclave: MrEnclave) -> Self { + Updater { current_mr_enclave } + } +} + +impl UpdaterTrait for Updater { + fn current_mr_enclave(&self) -> MrEnclave { + self.current_mr_enclave + } + + fn is_block_suspended(&self, current_sidechain_num: SidechainBlockNumber) -> Result { + let scheduled_enclaves = GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES + .get() + .map_err(|_| Error::GetScheduledEnclavesFailed)?; + if let Some(mr_enclave_should_used) = + scheduled_enclaves.get_current_scheduled_enclave(current_sidechain_num) + { + Ok(self.current_mr_enclave == mr_enclave_should_used.mr_enclave) + } else { + // by default, if the all the scheduled mr_enclaves is empty + // we assume that current mr_enclave is ok + Ok(false) + } + } + + /// return the next MrEnclave + fn get_merge_mr_enclave( + &self, + current_sidechain_num: SidechainBlockNumber, + ) -> Result> { + let scheduled_enclaves = GLOBAL_SIDECHAIN_SCHEDULED_ENCLABES + .get() + .map_err(|_| Error::GetScheduledEnclavesFailed)?; + if let Some(scheduled_enclave) = + scheduled_enclaves.get_next_scheduled_enclave(current_sidechain_num) + { + if current_sidechain_num + 1 == scheduled_enclave.sidechain_block_number + && self.current_mr_enclave != scheduled_enclave.mr_enclave + { + return Ok(Some(scheduled_enclave.mr_enclave)) + } + } + Ok(None) + } +} diff --git a/tee-worker/sidechain/consensus/slots/Cargo.toml b/tee-worker/sidechain/consensus/slots/Cargo.toml index e40311d8db..7eff2938c7 100644 --- a/tee-worker/sidechain/consensus/slots/Cargo.toml +++ b/tee-worker/sidechain/consensus/slots/Cargo.toml @@ -29,13 +29,16 @@ sp-runtime = { default-features = false, git = "https://github.com/paritytech/su # local deps itp-settings = { path = "../../../core-primitives/settings" } +itp-sgx-externalities = { path = "../../../core-primitives/substrate-sgx/externalities", default-features = false } itp-sgx-io = { path = "../../../core-primitives/sgx/io", default-features = false } +itp-stf-state-handler = { path = "../../../core-primitives/stf-state-handler", default-features = false } itp-time-utils = { path = "../../../core-primitives/time-utils", default-features = false } its-consensus-common = { path = "../common", default-features = false } [dev-dependencies] itc-parentchain-test = { path = "../../../core/parentchain/test" } its-test = { path = "../../test" } +itp-test = { path = "../../../core-primitives/test" } sp-keyring = { git = "https://github.com/paritytech/substrate.git", branch = "polkadot-v0.9.37" } tokio = { version = "1.6.1", features = ["full"] } @@ -46,6 +49,8 @@ sgx = [ "itp-sgx-io/sgx", "itp-time-utils/sgx", "its-consensus-common/sgx", + "itp-stf-state-handler/sgx", + "itp-sgx-externalities/sgx", "sgx_tstd", ] std = [ @@ -55,6 +60,8 @@ std = [ "futures", "futures-timer", # substrate + "itp-stf-state-handler/std", + "itp-sgx-externalities/std", "sp-consensus-slots/std", "sp-runtime/std", # local diff --git a/tee-worker/sidechain/consensus/slots/src/lib.rs b/tee-worker/sidechain/consensus/slots/src/lib.rs index e78bc16b82..e3aaa83337 100644 --- a/tee-worker/sidechain/consensus/slots/src/lib.rs +++ b/tee-worker/sidechain/consensus/slots/src/lib.rs @@ -33,9 +33,11 @@ extern crate sgx_tstd as std; use codec::Encode; use derive_more::From; +use itp_sgx_externalities::SgxExternalities; +use itp_stf_state_handler::handle_state::HandleState; use itp_time_utils::{duration_difference, duration_now}; -use itp_types::OpaqueCall; -use its_consensus_common::{Error as ConsensusError, Proposer}; +use itp_types::{OpaqueCall, ShardIdentifier}; +use its_consensus_common::{Error as ConsensusError, Proposer, UpdaterTrait}; use its_primitives::traits::{ Block as SidechainBlockTrait, Header as HeaderTrait, ShardIdentifierFor, SignedBlock as SignedSidechainBlockTrait, @@ -43,14 +45,14 @@ use its_primitives::traits::{ use log::*; pub use slots::*; use sp_runtime::traits::{Block as ParentchainBlockTrait, Header as ParentchainHeaderTrait}; -use std::{fmt::Debug, time::Duration, vec::Vec}; +use std::{fmt::Debug, sync::Arc, time::Duration, vec::Vec}; #[cfg(feature = "std")] mod slot_stream; mod slots; #[cfg(test)] -mod mocks; +pub mod mocks; #[cfg(test)] mod per_shard_slot_worker_tests; @@ -129,6 +131,12 @@ pub trait SimpleSlotWorker { /// Output generated after a slot type Output: SignedSidechainBlockTrait + Send + 'static; + /// updater trait + type Updater: UpdaterTrait; + + /// state handler + type StateHandler: HandleState; + /// The logging target to use when logging messages. fn logging_target(&self) -> &'static str; @@ -159,6 +167,10 @@ pub trait SimpleSlotWorker { shard: ShardIdentifierFor, ) -> Result; + fn updater(&mut self) -> Arc; + + fn state_handler(&mut self) -> Arc; + /// Remaining duration for proposing. fn proposing_remaining_duration(&self, slot_info: &SlotInfo) -> Duration; @@ -201,7 +213,6 @@ pub trait SimpleSlotWorker { return None } - // TODO: check schedule enclave matches let latest_parentchain_header = match self.peek_latest_parentchain_header() { Ok(Some(peeked_header)) => peeked_header, @@ -214,6 +225,44 @@ pub trait SimpleSlotWorker { return None }, }; + let block_number: u64 = + format!("{:?}", latest_parentchain_header.number()).parse().unwrap(); + let updater = self.updater(); + let state_handler = self.state_handler(); + // migration and return + match updater.get_merge_mr_enclave(block_number) { + Ok(Some(next_mr_enclave)) => { + let current_mr_enclave = updater.current_mr_enclave(); + let old_id = ShardIdentifier::from_slice(¤t_mr_enclave[..]); + let new_id = ShardIdentifier::from_slice(&next_mr_enclave[..]); + if let Err(e) = state_handler.migrate_shard(old_id, new_id) { + error!("migrate shard failed: {e:?}"); + } + return None + }, + Err(e) => { + error!("get merge mr enclave failed: {e:?}"); + return None + }, + Ok(None) => {}, + } + match updater.is_block_suspended(block_number) { + Ok(suspended) => + if suspended { + warn!( + target: logging_target, + "block produce is suspended, maybe you need to update to latest version and check the enclave" + ); + return None + }, + Err(e) => { + error!( + target: logging_target, + "inner error when check block is suspended or not: {e:?}" + ); + return None + }, + } let epoch_data = match self.epoch_data(&latest_parentchain_header, slot) { Ok(epoch_data) => epoch_data, diff --git a/tee-worker/sidechain/consensus/slots/src/mocks.rs b/tee-worker/sidechain/consensus/slots/src/mocks.rs index ea6e4d4d6c..d80999ac9a 100644 --- a/tee-worker/sidechain/consensus/slots/src/mocks.rs +++ b/tee-worker/sidechain/consensus/slots/src/mocks.rs @@ -16,10 +16,11 @@ */ use crate::{slots::Slot, SimpleSlotWorker, SlotInfo, SlotResult}; -use its_consensus_common::{Proposal, Proposer, Result}; +pub use itp_test::mock::handle_state_mock::HandleStateMock; +use its_consensus_common::{Proposal, Proposer, Result, UpdaterTrait}; use its_primitives::{traits::ShardIdentifierFor, types::SignedBlock as SignedSidechainBlock}; use sp_runtime::traits::{Block as ParentchainBlockTrait, Header as ParentchainHeaderTrait}; -use std::{marker::PhantomData, thread, time::Duration}; +use std::{marker::PhantomData, sync::Arc, thread, time::Duration}; #[derive(Default)] pub(crate) struct ProposerMock { @@ -35,6 +36,11 @@ where } } +#[derive(Default)] +pub struct UpdaterMock; + +impl UpdaterTrait for UpdaterMock {} + #[derive(Default)] pub(crate) struct SimpleSlotWorkerMock where @@ -42,6 +48,8 @@ where { pub slot_infos: Vec>, pub slot_time_spent: Option, + pub state_handler: Arc, + pub updater: Arc, } impl SimpleSlotWorker for SimpleSlotWorkerMock @@ -50,6 +58,10 @@ where { type Proposer = ProposerMock; + type Updater = UpdaterMock; + + type StateHandler = HandleStateMock; + type Claim = u64; type EpochData = u64; @@ -85,6 +97,14 @@ where todo!() } + fn updater(&mut self) -> Arc { + self.updater.clone() + } + + fn state_handler(&mut self) -> Arc { + self.state_handler.clone() + } + fn proposing_remaining_duration(&self, _slot_info: &SlotInfo) -> Duration { todo!() } diff --git a/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs b/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs index a043277801..f54aea248b 100644 --- a/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs +++ b/tee-worker/sidechain/consensus/slots/src/per_shard_slot_worker_tests.rs @@ -15,20 +15,29 @@ */ -use crate::{mocks::SimpleSlotWorkerMock, PerShardSlotWorkerScheduler, SlotInfo}; +use crate::{ + mocks::{SimpleSlotWorkerMock, UpdaterMock}, + PerShardSlotWorkerScheduler, SlotInfo, +}; use itc_parentchain_test::parentchain_header_builder::ParentchainHeaderBuilder; use itp_settings::sidechain::SLOT_DURATION; +use itp_test::mock::handle_state_mock::HandleStateMock; use itp_time_utils::duration_now; use itp_types::{Block as ParentchainBlock, ShardIdentifier}; use its_block_verification::slot::slot_from_timestamp_and_duration; +use std::sync::Arc; type TestSlotWorker = SimpleSlotWorkerMock; #[test] fn slot_timings_are_correct_with_multiple_shards() { let slot_info = slot_info_from_now(); - let mut slot_worker = - TestSlotWorker { slot_infos: Vec::new(), slot_time_spent: Some(SLOT_DURATION / 10) }; + let mut slot_worker = TestSlotWorker { + slot_infos: Vec::new(), + slot_time_spent: Some(SLOT_DURATION / 10), + state_handler: Arc::new(HandleStateMock::default()), + updater: Arc::new(UpdaterMock::default()), + }; let shards = vec![ShardIdentifier::default(), ShardIdentifier::default(), ShardIdentifier::default()]; @@ -64,8 +73,12 @@ fn slot_timings_are_correct_with_multiple_shards() { #[test] fn if_shard_takes_up_all_slot_time_subsequent_shards_are_not_served() { let slot_info = slot_info_from_now(); - let mut slot_worker = - TestSlotWorker { slot_infos: Vec::new(), slot_time_spent: Some(SLOT_DURATION) }; + let mut slot_worker = TestSlotWorker { + slot_infos: Vec::new(), + slot_time_spent: Some(SLOT_DURATION), + updater: Arc::new(UpdaterMock), + state_handler: Arc::new(HandleStateMock::default()), + }; let shards = vec![ShardIdentifier::default(), ShardIdentifier::default(), ShardIdentifier::default()];