diff --git a/crates/builder/op-rbuilder/src/args/op.rs b/crates/builder/op-rbuilder/src/args/op.rs index 9d9696ef..082b3644 100644 --- a/crates/builder/op-rbuilder/src/args/op.rs +++ b/crates/builder/op-rbuilder/src/args/op.rs @@ -12,10 +12,7 @@ use clap::Parser; use reth_optimism_cli::commands::Commands; use reth_optimism_node::args::RollupArgs; -use crate::{ - flashtestations::args::FlashtestationsArgs, gas_limiter::args::GasLimiterArgs, - tx_signer::Signer, -}; +use crate::{gas_limiter::args::GasLimiterArgs, tx_signer::Signer}; /// Parameters for rollup configuration #[derive(Debug, Clone, PartialEq, Eq, clap::Args)] @@ -62,8 +59,6 @@ pub struct OpRbuilderArgs { #[command(flatten)] pub telemetry: TelemetryArgs, #[command(flatten)] - pub flashtestations: FlashtestationsArgs, - #[command(flatten)] pub gas_limiter: GasLimiterArgs, } @@ -139,15 +134,6 @@ pub struct FlashblocksArgs { env = "FLASHBLOCK_NUMBER_CONTRACT_ADDRESS" )] pub flashblocks_number_contract_address: Option
, - - /// Use permit signatures if flashtestations is enabled with the flashtestation key - /// to increment the flashblocks number - #[arg( - long = "flashblocks.number-contract-use-permit", - env = "FLASHBLOCK_NUMBER_CONTRACT_USE_PERMIT", - default_value = "false" - )] - pub flashblocks_number_contract_use_permit: bool, } impl Default for FlashblocksArgs { diff --git a/crates/builder/op-rbuilder/src/builders/builder_tx.rs b/crates/builder/op-rbuilder/src/builders/builder_tx.rs index 19170a3e..23dfb6d4 100644 --- a/crates/builder/op-rbuilder/src/builders/builder_tx.rs +++ b/crates/builder/op-rbuilder/src/builders/builder_tx.rs @@ -145,23 +145,18 @@ pub trait BuilderTransactions, ctx: &OpPayloadBuilderCtx, db: &mut State, - top_of_block: bool, ) -> Result, BuilderTransactionError>; fn simulate_builder_txs_with_state_copy( &self, state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, db: &State, - top_of_block: bool, ) -> Result, BuilderTransactionError> { - let mut simulation_state = self.new_simulation_state(state_provider.clone(), db); - self.simulate_builder_txs(state_provider, info, ctx, &mut simulation_state, top_of_block) + let mut simulation_state = self.new_simulation_state(state_provider, db); + self.simulate_builder_txs(ctx, &mut simulation_state) } fn add_builder_txs( @@ -173,13 +168,8 @@ pub trait BuilderTransactions Result, BuilderTransactionError> { { - let builder_txs = self.simulate_builder_txs_with_state_copy( - state_provider, - info, - builder_ctx, - db, - top_of_block, - )?; + let builder_txs = + self.simulate_builder_txs_with_state_copy(state_provider, builder_ctx, db)?; let mut evm = builder_ctx.evm_config.evm_with_env(&mut *db, builder_ctx.evm_env.clone()); diff --git a/crates/builder/op-rbuilder/src/builders/flashblocks/builder_tx.rs b/crates/builder/op-rbuilder/src/builders/flashblocks/builder_tx.rs index dea1f08d..cb1835e6 100644 --- a/crates/builder/op-rbuilder/src/builders/flashblocks/builder_tx.rs +++ b/crates/builder/op-rbuilder/src/builders/flashblocks/builder_tx.rs @@ -3,12 +3,11 @@ use core::fmt::Debug; use alloy_eips::Encodable2718; use alloy_evm::{Database, Evm}; use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, B256, Signature, U256}; +use alloy_primitives::{Address, B256}; use alloy_rpc_types_eth::TransactionInput; use alloy_sol_types::{SolCall, SolEvent, sol}; use op_alloy_rpc_types::OpTransactionRequest; use reth_evm::{ConfigureEvm, precompiles::PrecompilesMap}; -use reth_provider::StateProvider; use reth_revm::State; use revm::{DatabaseRef, inspector::NoOpInspector}; use tracing::warn; @@ -22,8 +21,6 @@ use crate::{ flashblocks::payload::{FlashblocksExecutionInfo, FlashblocksExtraCtx}, get_nonce, }, - flashtestations::builder_tx::FlashtestationsBuilderTx, - primitives::reth::ExecutionInfo, tx_signer::Signer, }; @@ -59,30 +56,20 @@ sol!( #[derive(Debug, Clone)] pub(super) struct FlashblocksBuilderTx { pub base_builder_tx: BuilderTxBase, - pub flashtestations_builder_tx: - Option>, } impl FlashblocksBuilderTx { - pub(super) const fn new( - signer: Option, - flashtestations_builder_tx: Option< - FlashtestationsBuilderTx, - >, - ) -> Self { + pub(super) const fn new(signer: Option) -> Self { let base_builder_tx = BuilderTxBase::new(signer); - Self { base_builder_tx, flashtestations_builder_tx } + Self { base_builder_tx } } } impl BuilderTransactions for FlashblocksBuilderTx { fn simulate_builder_txs( &self, - state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, db: &mut State, - top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); @@ -93,29 +80,7 @@ impl BuilderTransactions for Flas if ctx.is_last_flashblock() { let base_tx = self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?; - builder_txs.extend(base_tx.clone()); - - if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { - // Commit state that is included to get the correct nonce - if let Some(builder_tx) = base_tx { - self.commit_txs(vec![builder_tx.signed_tx], ctx, &mut *db)?; - } - // We only include flashtestations txs in the last flashblock - match flashtestations_builder_tx.simulate_builder_txs( - state_provider, - info, - ctx, - db, - top_of_block, - ) { - Ok(flashtestations_builder_txs) => { - builder_txs.extend(flashtestations_builder_txs) - } - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") - } - } - } + builder_txs.extend(base_tx); } Ok(builder_txs) } @@ -126,29 +91,13 @@ impl BuilderTransactions for Flas pub(super) struct FlashblocksNumberBuilderTx { pub signer: Signer, pub flashblock_number_address: Address, - pub use_permit: bool, pub base_builder_tx: BuilderTxBase, - pub flashtestations_builder_tx: - Option>, } impl FlashblocksNumberBuilderTx { - pub(super) const fn new( - signer: Signer, - flashblock_number_address: Address, - use_permit: bool, - flashtestations_builder_tx: Option< - FlashtestationsBuilderTx, - >, - ) -> Self { + pub(super) const fn new(signer: Signer, flashblock_number_address: Address) -> Self { let base_builder_tx = BuilderTxBase::new(Some(signer)); - Self { - signer, - flashblock_number_address, - use_permit, - base_builder_tx, - flashtestations_builder_tx, - } + Self { signer, flashblock_number_address, base_builder_tx } } fn signed_increment_flashblocks_tx( @@ -160,44 +109,6 @@ impl FlashblocksNumberBuilderTx { self.increment_flashblocks_tx(calldata, ctx, evm) } - fn increment_flashblocks_permit_signature( - &self, - flashtestations_signer: &Signer, - current_flashblock_number: U256, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let struct_hash_calldata = IFlashblockNumber::computeStructHashCall { - currentFlashblockNumber: current_flashblock_number, - }; - let SimulationSuccessResult { output, .. } = - self.simulate_flashblocks_readonly_call(struct_hash_calldata, ctx, evm)?; - let typed_data_hash_calldata = - IFlashblockNumber::hashTypedDataV4Call { structHash: output }; - let SimulationSuccessResult { output, .. } = - self.simulate_flashblocks_readonly_call(typed_data_hash_calldata, ctx, evm)?; - let signature = flashtestations_signer.sign_message(output)?; - Ok(signature) - } - - fn signed_increment_flashblocks_permit_tx( - &self, - flashtestations_signer: &Signer, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let current_flashblock_calldata = IFlashblockNumber::flashblockNumberCall {}; - let SimulationSuccessResult { output, .. } = - self.simulate_flashblocks_readonly_call(current_flashblock_calldata, ctx, evm)?; - let signature = - self.increment_flashblocks_permit_signature(flashtestations_signer, output, ctx, evm)?; - let calldata = IFlashblockNumber::permitIncrementFlashblockNumberCall { - currentFlashblockNumber: output, - signature: signature.as_bytes().into(), - }; - self.increment_flashblocks_tx(calldata, ctx, evm) - } - fn increment_flashblocks_tx( &self, calldata: T, @@ -223,15 +134,6 @@ impl FlashblocksNumberBuilderTx { Ok(BuilderTransactionCtx { signed_tx, gas_used, da_size, is_top_of_block: true }) } - fn simulate_flashblocks_readonly_call( - &self, - calldata: T, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result, BuilderTransactionError> { - self.simulate_flashblocks_call(calldata, vec![], ctx, evm) - } - fn simulate_flashblocks_call( &self, calldata: T, @@ -243,7 +145,7 @@ impl FlashblocksNumberBuilderTx { .gas_limit(ctx.block_gas_limit()) .max_fee_per_gas(ctx.base_fee().into()) .to(self.flashblock_number_address) - .from(self.signer.address) // use tee key as signer for simulations + .from(self.signer.address) .nonce(get_nonce(evm.db(), self.signer.address)?) .input(TransactionInput::new(calldata.abi_encode().into())); self.simulate_call::( @@ -259,11 +161,8 @@ impl BuilderTransactions { fn simulate_builder_txs( &self, - state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, db: &mut State, - top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); @@ -278,17 +177,7 @@ impl BuilderTransactions cfg.disable_block_gas_limit = true; }); - let flashblocks_num_tx = if let Some(flashtestations) = &self.flashtestations_builder_tx - && self.use_permit - { - self.signed_increment_flashblocks_permit_tx( - flashtestations.tee_signer(), - ctx, - &mut evm, - ) - } else { - self.signed_increment_flashblocks_tx(ctx, &mut evm) - }; + let flashblocks_num_tx = self.signed_increment_flashblocks_tx(ctx, &mut evm); let tx = match flashblocks_num_tx { Ok(tx) => Some(tx), @@ -303,32 +192,6 @@ impl BuilderTransactions builder_txs.extend(tx); } - if ctx.is_last_flashblock() - && let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx - { - // Commit state that should be included to compute the correct nonce - let flashblocks_builder_txs = builder_txs - .iter() - .filter(|tx| tx.is_top_of_block == top_of_block) - .map(|tx| tx.signed_tx.clone()) - .collect(); - self.commit_txs(flashblocks_builder_txs, ctx, &mut *db)?; - - // We only include flashtestations txs in the last flashblock - match flashtestations_builder_tx.simulate_builder_txs( - state_provider, - info, - ctx, - db, - top_of_block, - ) { - Ok(flashtestations_builder_txs) => builder_txs.extend(flashtestations_builder_txs), - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") - } - } - } - Ok(builder_txs) } } diff --git a/crates/builder/op-rbuilder/src/builders/flashblocks/config.rs b/crates/builder/op-rbuilder/src/builders/flashblocks/config.rs index 32a08559..00904d60 100644 --- a/crates/builder/op-rbuilder/src/builders/flashblocks/config.rs +++ b/crates/builder/op-rbuilder/src/builders/flashblocks/config.rs @@ -40,9 +40,6 @@ pub struct FlashblocksConfig { /// /// If set a builder tx will be added to the start of every flashblock instead of the regular builder tx. pub flashblocks_number_contract_address: Option
, - - /// whether to use permit signatures for the contract calls - pub flashblocks_number_contract_use_permit: bool, } impl Default for FlashblocksConfig { @@ -54,7 +51,6 @@ impl Default for FlashblocksConfig { fixed: false, disable_state_root: false, flashblocks_number_contract_address: None, - flashblocks_number_contract_use_permit: false, } } } @@ -79,9 +75,6 @@ impl TryFrom for FlashblocksConfig { let flashblocks_number_contract_address = args.flashblocks.flashblocks_number_contract_address; - let flashblocks_number_contract_use_permit = - args.flashblocks.flashblocks_number_contract_use_permit; - Ok(Self { ws_addr, interval, @@ -89,7 +82,6 @@ impl TryFrom for FlashblocksConfig { fixed, disable_state_root, flashblocks_number_contract_address, - flashblocks_number_contract_use_permit, }) } } diff --git a/crates/builder/op-rbuilder/src/builders/flashblocks/service.rs b/crates/builder/op-rbuilder/src/builders/flashblocks/service.rs index 6280c38a..3c96566e 100644 --- a/crates/builder/op-rbuilder/src/builders/flashblocks/service.rs +++ b/crates/builder/op-rbuilder/src/builders/flashblocks/service.rs @@ -21,7 +21,6 @@ use crate::{ }, generator::BlockPayloadJobGenerator, }, - flashtestations::service::bootstrap_flashtestations, metrics::OpRBuilderMetrics, traits::{NodeBounds, PoolBounds}, }; @@ -120,43 +119,21 @@ where _: OpEvmConfig, ) -> eyre::Result::Payload>> { let signer = self.0.builder_signer; - let flashtestations_builder_tx = if let Some(builder_key) = signer - && self.0.flashtestations_config.flashtestations_enabled - { - match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key) - .await - { - Ok(builder_tx) => Some(builder_tx), - Err(e) => { - tracing::warn!(error = %e, "Failed to bootstrap flashtestations, builder will not include flashtestations txs"); - None - } - } - } else { - None - }; if let Some(builder_signer) = signer && let Some(flashblocks_number_contract_address) = self.0.specific.flashblocks_number_contract_address { - let use_permit = self.0.specific.flashblocks_number_contract_use_permit; self.spawn_payload_builder_service( ctx, pool, FlashblocksNumberBuilderTx::new( builder_signer, flashblocks_number_contract_address, - use_permit, - flashtestations_builder_tx, ), ) } else { - self.spawn_payload_builder_service( - ctx, - pool, - FlashblocksBuilderTx::new(signer, flashtestations_builder_tx), - ) + self.spawn_payload_builder_service(ctx, pool, FlashblocksBuilderTx::new(signer)) } } } diff --git a/crates/builder/op-rbuilder/src/builders/mod.rs b/crates/builder/op-rbuilder/src/builders/mod.rs index b9227bd4..8fdb6026 100644 --- a/crates/builder/op-rbuilder/src/builders/mod.rs +++ b/crates/builder/op-rbuilder/src/builders/mod.rs @@ -10,7 +10,6 @@ use reth_optimism_payload_builder::config::{OpDAConfig, OpGasLimitConfig}; use crate::{ args::OpRbuilderArgs, - flashtestations::args::FlashtestationsArgs, gas_limiter::args::GasLimiterArgs, traits::{NodeBounds, PoolBounds}, tx_signer::Signer, @@ -79,10 +78,6 @@ pub struct BuilderConfig { /// Secret key of the builder that is used to sign the end of block transaction. pub builder_signer: Option, - /// When enabled, this will invoke the flashtestions workflow. This involves a - /// bootstrapping step that generates a new pubkey for the TEE service - pub flashtestations_config: FlashtestationsArgs, - /// The interval at which blocks are added to the chain. /// This is also the frequency at which the builder will be receiving FCU requests from the /// sequencer. @@ -139,7 +134,6 @@ impl core::fmt::Debug for BuilderConfig { .as_ref() .map_or_else(|| "None".into(), |signer| signer.address.to_string()), ) - .field("flashtestations", &self.flashtestations_config) .field("block_time", &self.block_time) .field("block_time_leeway", &self.block_time_leeway) .field("da_config", &self.da_config) @@ -157,7 +151,6 @@ impl Default for BuilderConfig { fn default() -> Self { Self { builder_signer: None, - flashtestations_config: FlashtestationsArgs::default(), block_time: Duration::from_secs(2), block_time_leeway: Duration::from_millis(500), da_config: OpDAConfig::default(), @@ -180,7 +173,6 @@ where fn try_from(args: OpRbuilderArgs) -> Result { Ok(Self { builder_signer: args.builder_signer, - flashtestations_config: args.flashtestations.clone(), block_time: Duration::from_millis(args.chain_block_time), block_time_leeway: Duration::from_secs(args.extra_block_deadline_secs), da_config: Default::default(), diff --git a/crates/builder/op-rbuilder/src/builders/standard/builder_tx.rs b/crates/builder/op-rbuilder/src/builders/standard/builder_tx.rs index e623e37e..501defd5 100644 --- a/crates/builder/op-rbuilder/src/builders/standard/builder_tx.rs +++ b/crates/builder/op-rbuilder/src/builders/standard/builder_tx.rs @@ -1,18 +1,14 @@ use core::fmt::Debug; use alloy_evm::Database; -use reth_provider::StateProvider; use reth_revm::State; use revm::DatabaseRef; -use tracing::warn; use crate::{ builders::{ BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, builder_tx::BuilderTxBase, context::OpPayloadBuilderCtx, }, - flashtestations::builder_tx::FlashtestationsBuilderTx, - primitives::reth::ExecutionInfo, tx_signer::Signer, }; @@ -20,50 +16,24 @@ use crate::{ #[derive(Debug, Clone)] pub(super) struct StandardBuilderTx { pub base_builder_tx: BuilderTxBase, - pub flashtestations_builder_tx: Option, } impl StandardBuilderTx { - pub(super) const fn new( - signer: Option, - flashtestations_builder_tx: Option, - ) -> Self { + pub(super) const fn new(signer: Option) -> Self { let base_builder_tx = BuilderTxBase::new(signer); - Self { base_builder_tx, flashtestations_builder_tx } + Self { base_builder_tx } } } impl BuilderTransactions for StandardBuilderTx { fn simulate_builder_txs( &self, - state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, ctx: &OpPayloadBuilderCtx, db: &mut State, - top_of_block: bool, ) -> Result, BuilderTransactionError> { let mut builder_txs = Vec::::new(); let standard_builder_tx = self.base_builder_tx.simulate_builder_tx(ctx, &mut *db)?; - if let Some(flashtestations_builder_tx) = &self.flashtestations_builder_tx { - if let Some(ref builder_tx) = standard_builder_tx { - self.commit_txs(vec![builder_tx.signed_tx.clone()], ctx, db)?; - } - builder_txs.extend(standard_builder_tx); - match flashtestations_builder_tx.simulate_builder_txs( - state_provider, - info, - ctx, - db, - top_of_block, - ) { - Ok(flashtestations_builder_txs) => builder_txs.extend(flashtestations_builder_txs), - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add flashtestations builder tx") - } - } - } else { - builder_txs.extend(standard_builder_tx); - } + builder_txs.extend(standard_builder_tx); Ok(builder_txs) } } diff --git a/crates/builder/op-rbuilder/src/builders/standard/service.rs b/crates/builder/op-rbuilder/src/builders/standard/service.rs index 155afde8..d6ea9817 100644 --- a/crates/builder/op-rbuilder/src/builders/standard/service.rs +++ b/crates/builder/op-rbuilder/src/builders/standard/service.rs @@ -10,7 +10,6 @@ use crate::{ BuilderConfig, BuilderTransactions, standard::{builder_tx::StandardBuilderTx, payload::StandardOpPayloadBuilder}, }, - flashtestations::service::bootstrap_flashtestations, traits::{NodeBounds, PoolBounds}, }; @@ -73,27 +72,7 @@ where evm_config: OpEvmConfig, ) -> eyre::Result::Payload>> { let signer = self.0.builder_signer; - let flashtestations_builder_tx = if let Some(builder_key) = signer - && self.0.flashtestations_config.flashtestations_enabled - { - match bootstrap_flashtestations(self.0.flashtestations_config.clone(), builder_key) - .await - { - Ok(builder_tx) => Some(builder_tx), - Err(e) => { - tracing::warn!(error = %e, "Failed to bootstrap flashtestations, builderb will not include flashtestations txs"); - None - } - } - } else { - None - }; - self.spawn_payload_builder_service( - evm_config, - ctx, - pool, - StandardBuilderTx::new(signer, flashtestations_builder_tx), - ) + self.spawn_payload_builder_service(evm_config, ctx, pool, StandardBuilderTx::new(signer)) } } diff --git a/crates/builder/op-rbuilder/src/flashtestations/args.rs b/crates/builder/op-rbuilder/src/flashtestations/args.rs deleted file mode 100644 index 732917c8..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/args.rs +++ /dev/null @@ -1,87 +0,0 @@ -use alloy_primitives::Address; -use clap::Parser; -use reth_optimism_cli::commands::Commands; - -use crate::args::Cli; - -/// Parameters for Flashtestations configuration -/// The names in the struct are prefixed with `flashtestations` -#[derive(Debug, Clone, PartialEq, Eq, clap::Args)] -pub struct FlashtestationsArgs { - /// When set to true, the builder will initiate the flashtestations - /// workflow within the bootstrapping and block building process. - #[arg( - long = "flashtestations.enabled", - default_value = "false", - env = "ENABLE_FLASHTESTATIONS" - )] - pub flashtestations_enabled: bool, - - /// Whether to use the debug HTTP service for quotes - #[arg(long = "flashtestations.debug", default_value = "false", env = "FLASHTESTATIONS_DEBUG")] - pub debug: bool, - - // Debug static key for the tee key. DO NOT USE IN PRODUCTION - #[arg( - long = "flashtestations.debug-tee-key-seed", - env = "FLASHTESTATIONS_DEBUG_TEE_KEY_SEED", - default_value = "debug" - )] - pub debug_tee_key_seed: String, - - /// Path to save ephemeral TEE key between restarts - #[arg( - long = "flashtestations.tee-key-path", - env = "FLASHTESTATIONS_TEE_KEY_PATH", - default_value = "/run/flashtestation.key" - )] - pub flashtestations_key_path: String, - - // Remote url for attestations - #[arg(long = "flashtestations.quote-provider", env = "FLASHTESTATIONS_QUOTE_PROVIDER")] - pub quote_provider: Option, - - /// The rpc url to post the onchain attestation requests to - #[arg(long = "flashtestations.rpc-url", env = "FLASHTESTATIONS_RPC_URL")] - pub rpc_url: Option, - - /// Enable end of block TEE proof - #[arg( - long = "flashtestations.enable-block-proofs", - env = "FLASHTESTATIONS_ENABLE_BLOCK_PROOFS", - default_value = "false" - )] - pub enable_block_proofs: bool, - - /// The address of the flashtestations registry contract - #[arg( - long = "flashtestations.registry-address", - env = "FLASHTESTATIONS_REGISTRY_ADDRESS", - required_if_eq("flashtestations_enabled", "true") - )] - pub registry_address: Option
, - - /// The address of the builder policy contract - #[arg( - long = "flashtestations.builder-policy-address", - env = "FLASHTESTATIONS_BUILDER_POLICY_ADDRESS", - required_if_eq("flashtestations_enabled", "true") - )] - pub builder_policy_address: Option
, - - /// The version of the block builder verification proof - #[arg( - long = "flashtestations.builder-proof-version", - env = "FLASHTESTATIONS_BUILDER_PROOF_VERSION", - default_value = "1" - )] - pub builder_proof_version: u8, -} - -impl Default for FlashtestationsArgs { - fn default() -> Self { - let args = Cli::parse_from(["dummy", "node"]); - let Commands::Node(node_command) = args.command else { unreachable!() }; - node_command.ext.flashtestations - } -} diff --git a/crates/builder/op-rbuilder/src/flashtestations/attestation.rs b/crates/builder/op-rbuilder/src/flashtestations/attestation.rs deleted file mode 100644 index 1f8bc192..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/attestation.rs +++ /dev/null @@ -1,222 +0,0 @@ -use reqwest::Client; -use sha3::{Digest, Keccak256}; -use tracing::info; - -const DEBUG_QUOTE_SERVICE_URL: &str = "http://ns31695324.ip-141-94-163.eu:10080/attest"; - -// Raw TDX v4 quote structure constants -// Raw quote has a 48-byte header before the TD10ReportBody -const HEADER_LENGTH: usize = 48; -const TD_REPORT10_LENGTH: usize = 584; - -// TD10ReportBody field offsets -// These offsets correspond to the Solidity parseRawReportBody implementation -const OFFSET_TD_ATTRIBUTES: usize = 120; -const OFFSET_XFAM: usize = 128; -const OFFSET_MR_TD: usize = 136; -const OFFSET_MR_CONFIG_ID: usize = 184; -const OFFSET_MR_OWNER: usize = 232; -const OFFSET_MR_OWNER_CONFIG: usize = 280; -const OFFSET_RT_MR0: usize = 328; -const OFFSET_RT_MR1: usize = 376; -const OFFSET_RT_MR2: usize = 424; -const OFFSET_RT_MR3: usize = 472; - -// Field lengths -const MEASUREMENT_REGISTER_LENGTH: usize = 48; -const ATTRIBUTE_LENGTH: usize = 8; - -/// Parsed TDX quote report body containing measurement registers and attributes -#[derive(Debug, Clone)] -pub struct ParsedQuote { - pub mr_td: [u8; 48], - pub rt_mr0: [u8; 48], - pub rt_mr1: [u8; 48], - pub rt_mr2: [u8; 48], - pub rt_mr3: [u8; 48], - pub mr_config_id: [u8; 48], - pub mr_owner: [u8; 48], - pub mr_owner_config: [u8; 48], - pub xfam: u64, - pub td_attributes: u64, -} - -/// Configuration for attestation -#[derive(Default, Debug)] -pub struct AttestationConfig { - /// If true, uses the debug HTTP service instead of real TDX hardware - pub debug: bool, - /// The URL of the quote provider - pub quote_provider: Option, -} -/// Remote attestation provider -#[derive(Debug, Clone)] -pub struct RemoteAttestationProvider { - client: Client, - service_url: String, -} - -impl RemoteAttestationProvider { - pub fn new(service_url: String) -> Self { - let client = Client::new(); - Self { client, service_url } - } -} - -impl RemoteAttestationProvider { - pub async fn get_attestation(&self, report_data: [u8; 64]) -> eyre::Result> { - let report_data_hex = hex::encode(report_data); - let url = format!("{}/{}", self.service_url, report_data_hex); - - info!(target: "flashtestations", url = url, "fetching quote from remote attestation provider"); - - let response = self - .client - .get(&url) - .timeout(std::time::Duration::from_secs(10)) - .send() - .await? - .error_for_status()?; - let body = response.bytes().await?.to_vec(); - - Ok(body) - } -} - -pub fn get_attestation_provider(config: AttestationConfig) -> RemoteAttestationProvider { - if config.debug { - RemoteAttestationProvider::new( - config.quote_provider.unwrap_or(DEBUG_QUOTE_SERVICE_URL.to_string()), - ) - } else { - RemoteAttestationProvider::new( - config - .quote_provider - .expect("remote quote provider must be specified when not in debug mode"), - ) - } -} - -/// Parse the TDX report body from a raw quote -/// Extracts measurement registers and attributes according to TD10ReportBody specification -/// https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 -pub fn parse_report_body(raw_quote: &[u8]) -> eyre::Result { - // Validate quote length - if raw_quote.len() < HEADER_LENGTH + TD_REPORT10_LENGTH { - eyre::bail!( - "invalid quote length: {}, expected at least {}", - raw_quote.len(), - HEADER_LENGTH + TD_REPORT10_LENGTH - ); - } - - // Skip the 48-byte header to get to the TD10ReportBody - let report_body = &raw_quote[HEADER_LENGTH..]; - - // Extract fields exactly as parseRawReportBody does in Solidity - // Using named offset constants to match Solidity implementation exactly - let mr_td: [u8; 48] = report_body[OFFSET_MR_TD..OFFSET_MR_TD + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract mr_td"))?; - let rt_mr0: [u8; 48] = report_body[OFFSET_RT_MR0..OFFSET_RT_MR0 + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract rt_mr0"))?; - let rt_mr1: [u8; 48] = report_body[OFFSET_RT_MR1..OFFSET_RT_MR1 + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract rt_mr1"))?; - let rt_mr2: [u8; 48] = report_body[OFFSET_RT_MR2..OFFSET_RT_MR2 + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract rt_mr2"))?; - let rt_mr3: [u8; 48] = report_body[OFFSET_RT_MR3..OFFSET_RT_MR3 + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract rt_mr3"))?; - let mr_config_id: [u8; 48] = report_body - [OFFSET_MR_CONFIG_ID..OFFSET_MR_CONFIG_ID + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract mr_config_id"))?; - let mr_owner: [u8; 48] = report_body - [OFFSET_MR_OWNER..OFFSET_MR_OWNER + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract mr_owner"))?; - let mr_owner_config: [u8; 48] = report_body - [OFFSET_MR_OWNER_CONFIG..OFFSET_MR_OWNER_CONFIG + MEASUREMENT_REGISTER_LENGTH] - .try_into() - .map_err(|_| eyre::eyre!("failed to extract mr_owner_config"))?; - - // Extract xFAM and tdAttributes (8 bytes each) - // In Solidity, bytes8 is treated as big-endian for bitwise operations - let xfam = u64::from_be_bytes( - report_body[OFFSET_XFAM..OFFSET_XFAM + ATTRIBUTE_LENGTH] - .try_into() - .map_err(|e| eyre::eyre!("failed to parse xfam: {}", e))?, - ); - let td_attributes = u64::from_be_bytes( - report_body[OFFSET_TD_ATTRIBUTES..OFFSET_TD_ATTRIBUTES + ATTRIBUTE_LENGTH] - .try_into() - .map_err(|e| eyre::eyre!("failed to parse td_attributes: {}", e))?, - ); - - Ok(ParsedQuote { - mr_td, - rt_mr0, - rt_mr1, - rt_mr2, - rt_mr3, - mr_config_id, - mr_owner, - mr_owner_config, - xfam, - td_attributes, - }) -} - -/// Compute workload ID from parsed quote data -/// This corresponds to QuoteParser.parseV4VerifierOutput in Solidity implementation -/// The workload ID uniquely identifies a TEE workload based on its measurement registers -pub fn compute_workload_id_from_parsed(parsed: &ParsedQuote) -> [u8; 32] { - // Concatenate all fields - let mut concatenated = Vec::new(); - concatenated.extend_from_slice(&parsed.mr_td); - concatenated.extend_from_slice(&parsed.rt_mr0); - concatenated.extend_from_slice(&parsed.rt_mr1); - concatenated.extend_from_slice(&parsed.rt_mr2); - concatenated.extend_from_slice(&parsed.rt_mr3); - concatenated.extend_from_slice(&parsed.mr_config_id); - concatenated.extend_from_slice(&parsed.xfam.to_be_bytes()); - concatenated.extend_from_slice(&parsed.td_attributes.to_be_bytes()); - - // Compute keccak256 hash - let mut hasher = Keccak256::new(); - hasher.update(&concatenated); - let result = hasher.finalize(); - - let mut workload_id = [0u8; 32]; - workload_id.copy_from_slice(&result); - - workload_id -} - -/// Compute workload ID from raw quote bytes -/// This is a convenience function that combines parsing and computation -pub fn compute_workload_id(raw_quote: &[u8]) -> eyre::Result<[u8; 32]> { - let parsed = parse_report_body(raw_quote)?; - Ok(compute_workload_id_from_parsed(&parsed)) -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::tests::WORKLOAD_ID; - - #[test] - fn test_compute_workload_id_from_test_quote() { - // Load the test quote output used in integration tests - let quote_output = include_bytes!("../tests/framework/artifacts/test-quote.bin"); - - // Compute the workload ID - let workload_id = compute_workload_id(quote_output) - .expect("failed to compute workload ID from test quote"); - - assert_eq!(workload_id, WORKLOAD_ID, "workload ID mismatch for test quote"); - } -} diff --git a/crates/builder/op-rbuilder/src/flashtestations/builder_tx.rs b/crates/builder/op-rbuilder/src/flashtestations/builder_tx.rs deleted file mode 100644 index 03fe213d..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/builder_tx.rs +++ /dev/null @@ -1,391 +0,0 @@ -use core::fmt::Debug; -use std::sync::{Arc, atomic::AtomicBool}; - -use alloy_eips::Encodable2718; -use alloy_evm::Database; -use alloy_op_evm::OpEvm; -use alloy_primitives::{Address, B256, Bytes, Signature, U256, keccak256}; -use alloy_rpc_types_eth::TransactionInput; -use alloy_sol_types::{SolCall, SolEvent, SolValue}; -use op_alloy_rpc_types::OpTransactionRequest; -use reth_evm::{ConfigureEvm, Evm, precompiles::PrecompilesMap}; -use reth_optimism_primitives::OpTransactionSigned; -use reth_provider::StateProvider; -use reth_revm::{State, database::StateProviderDatabase}; -use revm::{DatabaseCommit, DatabaseRef, inspector::NoOpInspector}; -use tracing::{debug, info, warn}; - -use crate::{ - builders::{ - BuilderTransactionCtx, BuilderTransactionError, BuilderTransactions, OpPayloadBuilderCtx, - SimulationSuccessResult, get_nonce, - }, - flashtestations::{ - BlockData, - IBlockBuilderPolicy::{self, BlockBuilderProofVerified}, - IERC20Permit, - IFlashtestationRegistry::{self, TEEServiceRegistered}, - }, - primitives::reth::ExecutionInfo, - tx_signer::Signer, -}; - -#[derive(Debug)] -pub struct FlashtestationsBuilderTxArgs { - pub attestation: Vec, - pub extra_registration_data: Bytes, - pub tee_service_signer: Signer, - pub registry_address: Address, - pub builder_policy_address: Address, - pub builder_proof_version: u8, - pub enable_block_proofs: bool, - pub registered: bool, - pub builder_key: Signer, -} - -#[derive(Debug, Clone)] -pub struct FlashtestationsBuilderTx -where - ExtraCtx: Debug + Default, - Extra: Debug + Default, -{ - // Attestation for the builder - attestation: Vec, - // Extra registration data for the builder - extra_registration_data: Bytes, - // TEE service generated key - tee_service_signer: Signer, - // Registry address for the attestation - registry_address: Address, - // Builder policy address for the block builder proof - builder_policy_address: Address, - // Builder proof version - builder_proof_version: u8, - // Whether the workload and address has been registered - registered: Arc, - // Whether block proofs are enabled - enable_block_proofs: bool, - // Builder key for the flashtestation permit tx - builder_signer: Signer, - // Extra context and data - _marker: std::marker::PhantomData<(ExtraCtx, Extra)>, -} - -impl FlashtestationsBuilderTx -where - ExtraCtx: Debug + Default, - Extra: Debug + Default, -{ - pub fn new(args: FlashtestationsBuilderTxArgs) -> Self { - Self { - attestation: args.attestation, - extra_registration_data: args.extra_registration_data, - tee_service_signer: args.tee_service_signer, - registry_address: args.registry_address, - builder_policy_address: args.builder_policy_address, - builder_proof_version: args.builder_proof_version, - registered: Arc::new(AtomicBool::new(args.registered)), - enable_block_proofs: args.enable_block_proofs, - builder_signer: args.builder_key, - _marker: std::marker::PhantomData, - } - } - - pub const fn tee_signer(&self) -> &Signer { - &self.tee_service_signer - } - - /// Computes the block content hash according to the formula: - /// keccak256(abi.encode(parentHash, blockNumber, timestamp, transactionHashes)) - /// https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md#block-building-process - fn compute_block_content_hash( - transactions: &[OpTransactionSigned], - parent_hash: B256, - block_number: u64, - timestamp: u64, - ) -> B256 { - // Create ordered list of transaction hashes - let transaction_hashes: Vec = transactions - .iter() - .map(|tx| { - // RLP encode the transaction and hash it - let mut encoded = Vec::new(); - tx.encode_2718(&mut encoded); - keccak256(&encoded) - }) - .collect(); - - // Create struct and ABI encode - let block_data = BlockData { - parentHash: parent_hash, - blockNumber: U256::from(block_number), - timestamp: U256::from(timestamp), - transactionHashes: transaction_hashes, - }; - - let encoded = block_data.abi_encode(); - keccak256(&encoded) - } - - fn set_registered( - &self, - state_provider: impl StateProvider + Clone, - ctx: &OpPayloadBuilderCtx, - ) -> Result<(), BuilderTransactionError> { - let state = StateProviderDatabase::new(state_provider); - let mut simulation_state = - State::builder().with_database(state).with_bundle_update().build(); - let mut evm = ctx.evm_config.evm_with_env(&mut simulation_state, ctx.evm_env.clone()); - evm.modify_cfg(|cfg| { - cfg.disable_balance_check = true; - cfg.disable_nonce_check = true; - }); - let calldata = IFlashtestationRegistry::getRegistrationStatusCall { - teeAddress: self.tee_service_signer.address, - }; - let SimulationSuccessResult { output, .. } = - self.flashtestations_contract_read(self.registry_address, calldata, ctx, &mut evm)?; - if output.isValid { - self.registered.store(true, std::sync::atomic::Ordering::SeqCst); - } - Ok(()) - } - - fn get_permit_nonce( - &self, - contract_address: Address, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let calldata = IERC20Permit::noncesCall { owner: self.tee_service_signer.address }; - let SimulationSuccessResult { output, .. } = - self.flashtestations_contract_read(contract_address, calldata, ctx, evm)?; - Ok(output) - } - - fn registration_permit_signature( - &self, - permit_nonce: U256, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let struct_hash_calldata = IFlashtestationRegistry::computeStructHashCall { - rawQuote: self.attestation.clone().into(), - extendedRegistrationData: self.extra_registration_data.clone(), - nonce: permit_nonce, - deadline: U256::from(ctx.timestamp()), - }; - let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( - self.registry_address, - struct_hash_calldata, - ctx, - evm, - )?; - let typed_data_hash_calldata = - IFlashtestationRegistry::hashTypedDataV4Call { structHash: output }; - let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( - self.registry_address, - typed_data_hash_calldata, - ctx, - evm, - )?; - let signature = self.tee_service_signer.sign_message(output)?; - Ok(signature) - } - - fn signed_registration_permit_tx( - &self, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm<&mut State, NoOpInspector, PrecompilesMap>, - ) -> Result { - let permit_nonce = self.get_permit_nonce(self.registry_address, ctx, evm)?; - let signature = self.registration_permit_signature(permit_nonce, ctx, evm)?; - let calldata = IFlashtestationRegistry::permitRegisterTEEServiceCall { - rawQuote: self.attestation.clone().into(), - extendedRegistrationData: self.extra_registration_data.clone(), - nonce: permit_nonce, - deadline: U256::from(ctx.timestamp()), - signature: signature.as_bytes().into(), - }; - let SimulationSuccessResult { gas_used, state_changes, .. } = self.flashtestations_call( - self.registry_address, - calldata.clone(), - vec![TEEServiceRegistered::SIGNATURE_HASH], - ctx, - evm, - )?; - let signed_tx = self.sign_tx( - self.registry_address, - self.builder_signer, - gas_used, - calldata.abi_encode().into(), - ctx, - evm.db(), - )?; - let da_size = - op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); - // commit the register transaction state so the block proof transaction can succeed - evm.db_mut().commit(state_changes); - Ok(BuilderTransactionCtx { gas_used, da_size, signed_tx, is_top_of_block: false }) - } - - fn block_proof_permit_signature( - &self, - permit_nonce: U256, - block_content_hash: B256, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let struct_hash_calldata = IBlockBuilderPolicy::computeStructHashCall { - version: self.builder_proof_version, - blockContentHash: block_content_hash, - nonce: permit_nonce, - }; - let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( - self.builder_policy_address, - struct_hash_calldata, - ctx, - evm, - )?; - let typed_data_hash_calldata = - IBlockBuilderPolicy::getHashedTypeDataV4Call { structHash: output }; - let SimulationSuccessResult { output, .. } = self.flashtestations_contract_read( - self.builder_policy_address, - typed_data_hash_calldata, - ctx, - evm, - )?; - let signature = self.tee_service_signer.sign_message(output)?; - Ok(signature) - } - - fn signed_block_proof_permit_tx( - &self, - transactions: &[OpTransactionSigned], - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result { - let permit_nonce = self.get_permit_nonce(self.builder_policy_address, ctx, evm)?; - let block_content_hash = Self::compute_block_content_hash( - transactions, - ctx.parent_hash(), - ctx.block_number(), - ctx.timestamp(), - ); - let signature = - self.block_proof_permit_signature(permit_nonce, block_content_hash, ctx, evm)?; - let calldata = IBlockBuilderPolicy::permitVerifyBlockBuilderProofCall { - blockContentHash: block_content_hash, - nonce: permit_nonce, - version: self.builder_proof_version, - eip712Sig: signature.as_bytes().into(), - }; - let SimulationSuccessResult { gas_used, .. } = self.flashtestations_call( - self.builder_policy_address, - calldata.clone(), - vec![BlockBuilderProofVerified::SIGNATURE_HASH], - ctx, - evm, - )?; - let signed_tx = self.sign_tx( - self.builder_policy_address, - self.builder_signer, - gas_used, - calldata.abi_encode().into(), - ctx, - evm.db(), - )?; - let da_size = - op_alloy_flz::tx_estimated_size_fjord_bytes(signed_tx.encoded_2718().as_slice()); - Ok(BuilderTransactionCtx { gas_used, da_size, signed_tx, is_top_of_block: false }) - } - - fn flashtestations_contract_read( - &self, - contract_address: Address, - calldata: T, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result, BuilderTransactionError> { - self.flashtestations_call(contract_address, calldata, vec![], ctx, evm) - } - - fn flashtestations_call( - &self, - contract_address: Address, - calldata: T, - expected_topics: Vec, - ctx: &OpPayloadBuilderCtx, - evm: &mut OpEvm, - ) -> Result, BuilderTransactionError> { - let tx_req = OpTransactionRequest::default() - .gas_limit(ctx.block_gas_limit()) - .max_fee_per_gas(ctx.base_fee().into()) - .to(contract_address) - .from(self.builder_signer.address) - .nonce(get_nonce(evm.db(), self.builder_signer.address)?) - .input(TransactionInput::new(calldata.abi_encode().into())); - if contract_address == self.registry_address { - self.simulate_call::( - tx_req, - expected_topics, - evm, - ) - } else if contract_address == self.builder_policy_address { - self.simulate_call::( - tx_req, - expected_topics, - evm, - ) - } else { - Err(BuilderTransactionError::msg("invalid contract address for flashtestations")) - } - } -} - -impl BuilderTransactions - for FlashtestationsBuilderTx -where - ExtraCtx: Debug + Default, - Extra: Debug + Default, -{ - fn simulate_builder_txs( - &self, - state_provider: impl StateProvider + Clone, - info: &mut ExecutionInfo, - ctx: &OpPayloadBuilderCtx, - db: &mut State, - _top_of_block: bool, - ) -> Result, BuilderTransactionError> { - // set registered by simulating against the committed state - if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { - self.set_registered(state_provider, ctx)?; - } - - let mut evm = ctx.evm_config.evm_with_env(&mut *db, ctx.evm_env.clone()); - evm.modify_cfg(|cfg| { - cfg.disable_balance_check = true; - cfg.disable_block_gas_limit = true; - }); - - let mut builder_txs = Vec::::new(); - - if !self.registered.load(std::sync::atomic::Ordering::SeqCst) { - info!(target: "flashtestations", "tee service not registered yet, attempting to register"); - let register_tx = self.signed_registration_permit_tx(ctx, &mut evm)?; - builder_txs.push(register_tx); - } - - // don't return on error for block proof as previous txs in builder_txs will not be returned - if self.enable_block_proofs { - debug!(target: "flashtestations", "adding permit verify block proof tx"); - match self.signed_block_proof_permit_tx(&info.executed_transactions, ctx, &mut evm) { - Ok(block_proof_tx) => builder_txs.push(block_proof_tx), - Err(e) => { - warn!(target: "flashtestations", error = ?e, "failed to add permit block proof transaction") - } - } - } - Ok(builder_txs) - } -} diff --git a/crates/builder/op-rbuilder/src/flashtestations/mod.rs b/crates/builder/op-rbuilder/src/flashtestations/mod.rs deleted file mode 100644 index f80a2e0c..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/mod.rs +++ /dev/null @@ -1,124 +0,0 @@ -use alloy_sol_types::sol; - -// https://github.com/flashbots/flashtestations/commit/7cc7f68492fe672a823dd2dead649793aac1f216 -sol!( - #[sol(rpc, abi)] - #[derive(Debug)] - interface IFlashtestationRegistry { - function registerTEEService(bytes calldata rawQuote, bytes calldata extendedRegistrationData) external; - - function permitRegisterTEEService( - bytes calldata rawQuote, - bytes calldata extendedRegistrationData, - uint256 nonce, - uint256 deadline, - bytes calldata signature - ) external payable; - - function computeStructHash( - bytes calldata rawQuote, - bytes calldata extendedRegistrationData, - uint256 nonce, - uint256 deadline - ) external pure returns (bytes32); - - function hashTypedDataV4(bytes32 structHash) external view returns (bytes32); - - function getRegistrationStatus(address teeAddress) external view returns (bool isValid, bytes32 quoteHash); - - /// @notice Emitted when a TEE service is registered - /// @param teeAddress The address of the TEE service - /// @param rawQuote The raw quote from the TEE device - /// @param alreadyExists Whether the TEE service is already registered - event TEEServiceRegistered(address indexed teeAddress, bytes rawQuote, bool alreadyExists); - - /// @notice Emitted when the attestation contract is the 0x0 address - error InvalidAttestationContract(); - /// @notice Emitted when the signature is expired because the deadline has passed - error ExpiredSignature(uint256 deadline); - /// @notice Emitted when the quote is invalid according to the Automata DCAP Attestation contract - error InvalidQuote(bytes output); - /// @notice Emitted when the report data length is too short - error InvalidReportDataLength(uint256 length); - /// @notice Emitted when the registration data hash does not match the expected hash - error InvalidRegistrationDataHash(bytes32 expected, bytes32 received); - /// @notice Emitted when the byte size is exceeded - error ByteSizeExceeded(uint256 size); - /// @notice Emitted when the TEE service is already registered when registering - error TEEServiceAlreadyRegistered(address teeAddress); - /// @notice Emitted when the signer doesn't match the TEE address - error SignerMustMatchTEEAddress(address signer, address teeAddress); - /// @notice Emitted when the TEE service is not registered - error TEEServiceNotRegistered(address teeAddress); - /// @notice Emitted when the TEE service is already invalid when trying to invalidate a TEE registration - error TEEServiceAlreadyInvalid(address teeAddress); - /// @notice Emitted when the TEE service is still valid when trying to invalidate a TEE registration - error TEEIsStillValid(address teeAddress); - /// @notice Emitted when the nonce is invalid when verifying a signature - error InvalidNonce(uint256 expected, uint256 provided); - } - - #[sol(rpc, abi)] - #[derive(Debug)] - interface IBlockBuilderPolicy { - function verifyBlockBuilderProof(uint8 version, bytes32 blockContentHash) external; - - function permitVerifyBlockBuilderProof( - uint8 version, - bytes32 blockContentHash, - uint256 nonce, - bytes calldata eip712Sig - ) external; - - function computeStructHash(uint8 version, bytes32 blockContentHash, uint256 nonce) - external - pure - returns (bytes32); - - function getHashedTypeDataV4(bytes32 structHash) external view returns (bytes32); - - /// @notice Emitted when a block builder proof is successfully verified - /// @param caller The address that called the verification function (TEE address) - /// @param workloadId The workload identifier of the TEE - /// @param version The flashtestation protocol version used - /// @param blockContentHash The hash of the block content - /// @param commitHash The git commit hash associated with the workload - event BlockBuilderProofVerified( - address caller, bytes32 workloadId, uint8 version, bytes32 blockContentHash, string commitHash - ); - - /// @notice Emitted when the registry is the 0x0 address - error InvalidRegistry(); - /// @notice Emitted when a workload to be added is already in the policy - error WorkloadAlreadyInPolicy(); - /// @notice Emitted when a workload to be removed is not in the policy - error WorkloadNotInPolicy(); - /// @notice Emitted when the address is not in the approvedWorkloads mapping - error UnauthorizedBlockBuilder(address caller); - /// @notice Emitted when the nonce is invalid - error InvalidNonce(uint256 expected, uint256 provided); - /// @notice Emitted when the commit hash is empty - error EmptyCommitHash(); - /// @notice Emitted when the source locators array is empty - error EmptySourceLocators(); - } - - interface IERC20Permit { - function nonces(address owner) external view returns (uint256); - } - - struct BlockData { - bytes32 parentHash; - uint256 blockNumber; - uint256 timestamp; - bytes32[] transactionHashes; - } - - type WorkloadId is bytes32; -); - -pub mod args; -pub mod attestation; -pub mod builder_tx; -pub mod service; -pub mod tx_manager; diff --git a/crates/builder/op-rbuilder/src/flashtestations/service.rs b/crates/builder/op-rbuilder/src/flashtestations/service.rs deleted file mode 100644 index 5ae0c148..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/service.rs +++ /dev/null @@ -1,164 +0,0 @@ -use std::{ - fmt::Debug, - fs::{self, OpenOptions}, - io::Write, - os::unix::fs::OpenOptionsExt, - path::Path, -}; - -use alloy_primitives::{B256, Bytes, keccak256}; -use tracing::{info, warn}; - -use super::{ - args::FlashtestationsArgs, - attestation::{AttestationConfig, get_attestation_provider}, - tx_manager::TxManager, -}; -use crate::{ - flashtestations::builder_tx::{FlashtestationsBuilderTx, FlashtestationsBuilderTxArgs}, - metrics::record_tee_metrics, - tx_signer::{Signer, generate_key_from_seed, generate_signer}, -}; - -pub async fn bootstrap_flashtestations( - args: FlashtestationsArgs, - builder_key: Signer, -) -> eyre::Result> -where - ExtraCtx: Debug + Default, - Extra: Debug + Default, -{ - let tee_service_signer = load_or_generate_tee_key( - &args.flashtestations_key_path, - args.debug, - &args.debug_tee_key_seed, - )?; - - info!("Flashtestations TEE address: {}", tee_service_signer.address); - - let registry_address = - args.registry_address.expect("registry address required when flashtestations enabled"); - let builder_policy_address = args - .builder_policy_address - .expect("builder policy address required when flashtestations enabled"); - - let attestation_provider = get_attestation_provider(AttestationConfig { - debug: args.debug, - quote_provider: args.quote_provider, - }); - - // Prepare report data: - // - TEE address (20 bytes) at reportData[0:20] - // - Extended registration data hash (32 bytes) at reportData[20:52] - // - Total: 52 bytes, padded to 64 bytes with zeros - - // Extract TEE address as 20 bytes - let tee_address_bytes: [u8; 20] = tee_service_signer.address.into(); - - // Calculate keccak256 hash of empty bytes (32 bytes) - let ext_data = Bytes::from(b""); - let ext_data_hash = keccak256(&ext_data); - - // Create 64-byte report data array - let mut report_data = [0u8; 64]; - - // Copy TEE address (20 bytes) to positions 0-19 - report_data[0..20].copy_from_slice(&tee_address_bytes); - - // Copy extended registration data hash (32 bytes) to positions 20-51 - report_data[20..52].copy_from_slice(ext_data_hash.as_ref()); - - // Request TDX attestation - info!(target: "flashtestations", "requesting TDX attestation"); - let attestation = attestation_provider.get_attestation(report_data).await?; - - // Record TEE metrics (workload ID, MRTD, RTMR0) - record_tee_metrics(&attestation, &tee_service_signer.address)?; - - // Use an external rpc when the builder is not the same as the builder actively building blocks onchain - let registered = if let Some(rpc_url) = args.rpc_url { - let tx_manager = - TxManager::new(tee_service_signer, builder_key, rpc_url.clone(), registry_address); - // Submit report onchain by registering the key of the tee service - match tx_manager.register_tee_service(attestation.clone(), ext_data.clone()).await { - Ok(_) => true, - Err(e) => { - warn!(error = %e, "Failed to register tee service via rpc"); - false - } - } - } else { - false - }; - - let flashtestations_builder_tx = FlashtestationsBuilderTx::new(FlashtestationsBuilderTxArgs { - attestation, - extra_registration_data: ext_data, - tee_service_signer, - registry_address, - builder_policy_address, - builder_proof_version: args.builder_proof_version, - enable_block_proofs: args.enable_block_proofs, - registered, - builder_key, - }); - - Ok(flashtestations_builder_tx) -} - -/// Load ephemeral TEE key from file, or generate and save a new one -fn load_or_generate_tee_key(key_path: &str, debug: bool, debug_seed: &str) -> eyre::Result { - if debug { - info!("Flashtestations debug mode enabled, generating debug key from seed"); - return Ok(generate_key_from_seed(debug_seed)); - } - - let path = Path::new(key_path); - - if let Some(signer) = load_tee_key(path) { - return Ok(signer); - } - - // Generate new key - info!("Generating new ephemeral TEE key"); - let signer = generate_signer(); - - let key_hex = hex::encode(signer.secret.secret_bytes()); - - // Create file with 0600 permissions atomically - OpenOptions::new() - .write(true) - .create(true) - .truncate(true) - .mode(0o600) - .open(path) - .and_then(|mut file| file.write_all(key_hex.as_bytes())) - .inspect_err(|e| warn!("Failed to write key to {}: {:?}", key_path, e)) - .ok(); - - Ok(signer) -} - -fn load_tee_key(path: &Path) -> Option { - // Try to load existing key - if !path.exists() { - return None; - } - - info!("Loading TEE key from {:?}", path); - let key_hex = - fs::read_to_string(path).inspect_err(|e| warn!("failed to read key file: {:?}", e)).ok()?; - - let secret_bytes = B256::try_from( - hex::decode(key_hex.trim()) - .inspect_err(|e| warn!("failed to decode hex from file {:?}", e)) - .ok()? - .as_slice(), - ) - .inspect_err(|e| warn!("failed to parse key from file: {:?}", e)) - .ok()?; - - Signer::try_from_secret(secret_bytes) - .inspect_err(|e| warn!("failed to create signer from key: {:?}", e)) - .ok() -} diff --git a/crates/builder/op-rbuilder/src/flashtestations/tx_manager.rs b/crates/builder/op-rbuilder/src/flashtestations/tx_manager.rs deleted file mode 100644 index 98adaa57..00000000 --- a/crates/builder/op-rbuilder/src/flashtestations/tx_manager.rs +++ /dev/null @@ -1,176 +0,0 @@ -use std::time::Duration; - -use alloy_json_rpc::RpcError; -use alloy_network::ReceiptResponse; -use alloy_primitives::{Address, B256, Bytes, TxHash, TxKind, U256}; -use alloy_provider::{ - PendingTransactionBuilder, PendingTransactionError, Provider, ProviderBuilder, -}; -use alloy_rpc_types_eth::TransactionRequest; -use alloy_signer_local::PrivateKeySigner; -use alloy_sol_types::SolCall; -use alloy_transport::{TransportError, TransportErrorKind, TransportResult}; -use k256::ecdsa; -use op_alloy_network::Optimism; -use tracing::{debug, info, warn}; - -use crate::{ - flashtestations::{ - IERC20Permit::{self}, - IFlashtestationRegistry, - }, - tx_signer::Signer, -}; - -#[derive(Debug, thiserror::Error)] -pub enum TxManagerError { - #[error("rpc error: {0}")] - RpcError(#[from] TransportError), - #[error("tx reverted: {0}")] - TxReverted(TxHash), - #[error("error checking tx confirmation: {0}")] - TxConfirmationError(PendingTransactionError), - #[error("tx rpc error: {0}")] - TxRpcError(RpcError), - #[error("signer error: {0}")] - SignerError(ecdsa::Error), - #[error("error signing message: {0}")] - SignatureError(secp256k1::Error), -} - -#[derive(Debug, Clone)] -pub struct TxManager { - tee_service_signer: Signer, - builder_signer: Signer, - rpc_url: String, - registry_address: Address, -} - -impl TxManager { - pub const fn new( - tee_service_signer: Signer, - builder_signer: Signer, - rpc_url: String, - registry_address: Address, - ) -> Self { - Self { tee_service_signer, builder_signer, rpc_url, registry_address } - } - - pub async fn register_tee_service( - &self, - attestation: Vec, - extra_registration_data: Bytes, - ) -> Result<(), TxManagerError> { - info!(target: "flashtestations", "funding TEE address at {}", self.tee_service_signer.address); - let quote_bytes = Bytes::from(attestation); - let wallet = - PrivateKeySigner::from_bytes(&self.builder_signer.secret.secret_bytes().into()) - .map_err(TxManagerError::SignerError)?; - let provider = ProviderBuilder::new() - .disable_recommended_fillers() - .fetch_chain_id() - .with_gas_estimation() - .with_cached_nonce_management() - .wallet(wallet) - .network::() - .connect(self.rpc_url.as_str()) - .await?; - - info!(target: "flashtestations", "submitting quote to registry at {}", self.registry_address); - - // Get permit nonce - let nonce_call = IERC20Permit::noncesCall { owner: self.tee_service_signer.address }; - let nonce_tx = TransactionRequest { - to: Some(TxKind::Call(self.registry_address)), - input: nonce_call.abi_encode().into(), - ..Default::default() - }; - let nonce = U256::from_be_slice(provider.call(nonce_tx.into()).await?.as_ref()); - - // Set deadline 1 hour from now - let deadline = U256::from( - std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs() - + 3600, - ); - - // Call computeStructHash to get the struct hash - let struct_hash_call = IFlashtestationRegistry::computeStructHashCall { - rawQuote: quote_bytes.clone(), - extendedRegistrationData: extra_registration_data.clone(), - nonce, - deadline, - }; - let struct_hash_tx = TransactionRequest { - to: Some(TxKind::Call(self.registry_address)), - input: struct_hash_call.abi_encode().into(), - ..Default::default() - }; - let struct_hash = B256::from_slice(provider.call(struct_hash_tx.into()).await?.as_ref()); - - // Get typed data hash - let typed_hash_call = - IFlashtestationRegistry::hashTypedDataV4Call { structHash: struct_hash }; - let typed_hash_tx = TransactionRequest { - to: Some(TxKind::Call(self.registry_address)), - input: typed_hash_call.abi_encode().into(), - ..Default::default() - }; - let message_hash = B256::from_slice(provider.call(typed_hash_tx.into()).await?.as_ref()); - - // Sign the hash - let signature = self - .tee_service_signer - .sign_message(message_hash) - .map_err(TxManagerError::SignatureError)?; - - let calldata = IFlashtestationRegistry::permitRegisterTEEServiceCall { - rawQuote: quote_bytes, - extendedRegistrationData: extra_registration_data, - nonce, - deadline, - signature: signature.as_bytes().into(), - } - .abi_encode(); - let tx = TransactionRequest { - from: Some(self.tee_service_signer.address), - to: Some(TxKind::Call(self.registry_address)), - input: calldata.into(), - ..Default::default() - }; - match Self::process_pending_tx(provider.send_transaction(tx.into()).await).await { - Ok(tx_hash) => { - info!(target: "flashtestations", tx_hash = %tx_hash, "attestation transaction confirmed successfully"); - Ok(()) - } - Err(e) => { - warn!(target: "flashtestations", error = %e, "attestation transaction failed to be sent"); - Err(e) - } - } - } - - /// Processes a pending transaction and logs whether the transaction succeeded or not - async fn process_pending_tx( - pending_tx_result: TransportResult>, - ) -> Result { - match pending_tx_result { - Ok(pending_tx) => { - let tx_hash = *pending_tx.tx_hash(); - debug!(target: "flashtestations", tx_hash = %tx_hash, "transaction submitted"); - - // Wait for funding transaction confirmation - match pending_tx.with_timeout(Some(Duration::from_secs(30))).get_receipt().await { - Ok(receipt) => { - if receipt.status() { - Ok(receipt.transaction_hash()) - } else { - Err(TxManagerError::TxReverted(tx_hash)) - } - } - Err(e) => Err(TxManagerError::TxConfirmationError(e)), - } - } - Err(e) => Err(TxManagerError::TxRpcError(e)), - } - } -} diff --git a/crates/builder/op-rbuilder/src/lib.rs b/crates/builder/op-rbuilder/src/lib.rs index 10717fa0..31b985d7 100644 --- a/crates/builder/op-rbuilder/src/lib.rs +++ b/crates/builder/op-rbuilder/src/lib.rs @@ -2,7 +2,6 @@ pub mod args; pub mod builders; -pub mod flashtestations; pub mod gas_limiter; pub mod launcher; pub mod metrics; diff --git a/crates/builder/op-rbuilder/src/metrics.rs b/crates/builder/op-rbuilder/src/metrics.rs index 6da9a8c0..389dca8a 100644 --- a/crates/builder/op-rbuilder/src/metrics.rs +++ b/crates/builder/op-rbuilder/src/metrics.rs @@ -1,14 +1,10 @@ -use alloy_primitives::{Address, hex}; use metrics::IntoF64; use reth_metrics::{ Metrics, metrics::{Counter, Gauge, Histogram, gauge}, }; -use crate::{ - args::OpRbuilderArgs, - flashtestations::attestation::{compute_workload_id_from_parsed, parse_report_body}, -}; +use crate::args::OpRbuilderArgs; /// The latest version from Cargo.toml. pub const CARGO_PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -217,43 +213,6 @@ impl OpRBuilderMetrics { /// and which ones aren't. pub fn record_flag_gauge_metrics(builder_args: &OpRbuilderArgs) { gauge!("op_rbuilder_flags_flashblocks_enabled").set(builder_args.flashblocks.enabled as i32); - gauge!("op_rbuilder_flags_flashtestations_enabled") - .set(builder_args.flashtestations.flashtestations_enabled as i32); -} - -/// Record TEE workload ID and measurement metrics -/// Parses the quote, computes workload ID, and records workload_id, mr_td (TEE measurement), and rt_mr0 (runtime measurement register 0) -/// These identify the trusted execution environment configuration provided by GCP -pub fn record_tee_metrics(raw_quote: &[u8], tee_address: &Address) -> eyre::Result<()> { - let parsed_quote = parse_report_body(raw_quote)?; - let workload_id = compute_workload_id_from_parsed(&parsed_quote); - - let workload_id_hex = hex::encode(workload_id); - let mr_td_hex = hex::encode(parsed_quote.mr_td); - let rt_mr0_hex = hex::encode(parsed_quote.rt_mr0); - - let tee_address_static: &'static str = Box::leak(tee_address.to_string().into_boxed_str()); - let workload_id_static: &'static str = Box::leak(workload_id_hex.into_boxed_str()); - let mr_td_static: &'static str = Box::leak(mr_td_hex.into_boxed_str()); - let rt_mr0_static: &'static str = Box::leak(rt_mr0_hex.into_boxed_str()); - - // Record TEE address - let tee_address_labels: [(&str, &str); 1] = [("tee_address", tee_address_static)]; - gauge!("op_rbuilder_tee_address", &tee_address_labels).set(1); - - // Record workload ID - let workload_labels: [(&str, &str); 1] = [("workload_id", workload_id_static)]; - gauge!("op_rbuilder_tee_workload_id", &workload_labels).set(1); - - // Record MRTD (TEE measurement) - let mr_td_labels: [(&str, &str); 1] = [("mr_td", mr_td_static)]; - gauge!("op_rbuilder_tee_mr_td", &mr_td_labels).set(1); - - // Record RTMR0 (runtime measurement register 0) - let rt_mr0_labels: [(&str, &str); 1] = [("rt_mr0", rt_mr0_static)]; - gauge!("op_rbuilder_tee_rt_mr0", &rt_mr0_labels).set(1); - - Ok(()) } /// Contains version information for the application. diff --git a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json b/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json deleted file mode 100644 index b661a1b2..00000000 --- a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json +++ /dev/null @@ -1,10910 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "UPGRADE_INTERFACE_VERSION", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addWorkloadToPolicy", - "inputs": [ - { - "name": "workloadId", - "type": "bytes32", - "internalType": "WorkloadId" - }, - { - "name": "commitHash", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceLocators", - "type": "string[]", - "internalType": "string[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "computeStructHash", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "blockContentHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "nonce", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "domainSeparator", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eip712Domain", - "inputs": [], - "outputs": [ - { - "name": "fields", - "type": "bytes1", - "internalType": "bytes1" - }, - { - "name": "name", - "type": "string", - "internalType": "string" - }, - { - "name": "version", - "type": "string", - "internalType": "string" - }, - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "verifyingContract", - "type": "address", - "internalType": "address" - }, - { - "name": "salt", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "extensions", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getHashedTypeDataV4", - "inputs": [ - { - "name": "structHash", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getWorkloadMetadata", - "inputs": [ - { - "name": "workloadId", - "type": "bytes32", - "internalType": "WorkloadId" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IBlockBuilderPolicy.WorkloadMetadata", - "components": [ - { - "name": "commitHash", - "type": "string", - "internalType": "string" - }, - { - "name": "sourceLocators", - "type": "string[]", - "internalType": "string[]" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "_initialOwner", - "type": "address", - "internalType": "address" - }, - { - "name": "_registry", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isAllowedPolicy", - "inputs": [ - { - "name": "teeAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "allowed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "", - "type": "bytes32", - "internalType": "WorkloadId" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nonces", - "inputs": [ - { - "name": "teeAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "permitNonce", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "permitVerifyBlockBuilderProof", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "blockContentHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "nonce", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "eip712Sig", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proxiableUUID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registry", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "removeWorkloadFromPolicy", - "inputs": [ - { - "name": "workloadId", - "type": "bytes32", - "internalType": "WorkloadId" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "upgradeToAndCall", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "verifyBlockBuilderProof", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "blockContentHash", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "workloadIdForTDRegistration", - "inputs": [ - { - "name": "registration", - "type": "tuple", - "internalType": "struct IFlashtestationRegistry.RegisteredTEE", - "components": [ - { - "name": "isValid", - "type": "bool", - "internalType": "bool" - }, - { - "name": "rawQuote", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "parsedReportBody", - "type": "tuple", - "internalType": "struct TD10ReportBody", - "components": [ - { - "name": "teeTcbSvn", - "type": "bytes16", - "internalType": "bytes16" - }, - { - "name": "mrSeam", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "mrsignerSeam", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "seamAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { - "name": "tdAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { - "name": "xFAM", - "type": "bytes8", - "internalType": "bytes8" - }, - { - "name": "mrTd", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "mrConfigId", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "mrOwner", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "mrOwnerConfig", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "rtMr0", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "rtMr1", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "rtMr2", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "rtMr3", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "reportData", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "quoteHash", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "WorkloadId" - } - ], - "stateMutability": "pure" - }, - { - "type": "event", - "name": "BlockBuilderProofVerified", - "inputs": [ - { - "name": "caller", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "workloadId", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "version", - "type": "uint8", - "indexed": false, - "internalType": "uint8" - }, - { - "name": "blockContentHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "commitHash", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EIP712DomainChanged", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RegistrySet", - "inputs": [ - { - "name": "registry", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Upgraded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WorkloadAddedToPolicy", - "inputs": [ - { - "name": "workloadId", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WorkloadRemovedFromPolicy", - "inputs": [ - { - "name": "workloadId", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AddressEmptyCode", - "inputs": [ - { - "name": "target", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ECDSAInvalidSignature", - "inputs": [] - }, - { - "type": "error", - "name": "ECDSAInvalidSignatureLength", - "inputs": [ - { - "name": "length", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ECDSAInvalidSignatureS", - "inputs": [ - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "ERC1967InvalidImplementation", - "inputs": [ - { - "name": "implementation", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "ERC1967NonPayable", - "inputs": [] - }, - { - "type": "error", - "name": "EmptyCommitHash", - "inputs": [] - }, - { - "type": "error", - "name": "EmptySourceLocators", - "inputs": [] - }, - { - "type": "error", - "name": "FailedCall", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidNonce", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "provided", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "InvalidRegistry", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "UUPSUnauthorizedCallContext", - "inputs": [] - }, - { - "type": "error", - "name": "UUPSUnsupportedProxiableUUID", - "inputs": [ - { - "name": "slot", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "UnauthorizedBlockBuilder", - "inputs": [ - { - "name": "caller", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "error", - "name": "WorkloadAlreadyInPolicy", - "inputs": [] - }, - { - "type": "error", - "name": "WorkloadNotInPolicy", - "inputs": [] - } - ], - "bytecode": { - "object": "0x60a0806040523460295730608052613226908161002e8239608051818181610a3801526110790152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206101386130d1565b61014061313b565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612cef565b612b2d565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b612794565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c1a565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612658565b83520180546103738161230c565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612658565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b3610558612474565b610560612585565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612426565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612cef565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742600435612389565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612cef565b805f525f60205261095760405f20546122bb565b156109cb57805f525f602052600160405f206109728161233a565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c560019261233a565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612cef565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122bb565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b968361230c565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122bb565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122bb565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612324565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e7460019261233a565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612324565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612cef565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e613180565b606091613180565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9612feb565b6101e1612feb565b6117c9612feb565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842612feb565b61184a612feb565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122bb565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122bb565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612324565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612324565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612426565b612389565b9236916120de565b90612d5b565b90959195612d95565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c1a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001693608001517fffffffffffffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e019182526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122b59082612063565b51902090565b90600182811c92168015612302575b60208310146122d557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916122ca565b67ffffffffffffffff8111610e205760051b60200190565b81811061232f575050565b5f8155600101612324565b61234481546122bb565b908161234e575050565b81601f5f93116001146123605750555b565b8183526020832061237c91601f0160051c810190600101612324565b8082528160208120915555565b6042906123946130d1565b61239c61313b565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526123ed60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122b560a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124a6836122bb565b808352926001811690811561254857506001146124ca575b61235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061252c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612514565b6020925061235e9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124be565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125b7836122bb565b808352926001811690811561254857506001146125da5761235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061263c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612624565b9060405191825f82549261266b846122bb565b80845293600181169081156126d45750600114612690575b5061235e92500383612063565b90505f9291925260205f20905f915b8183106126b857505090602061235e928201015f612683565b602091935080600191548385890101520191019091849261269f565b6020935061235e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612683565b5190811515820361019b57565b81601f8201121561019b57805190612738826120a4565b926127466040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b22575f9161282f575b5080511561282857612804906121a2565b805f525f60205261281860405f20546122bb565b61282357505f905f90565b600191565b505f905f90565b90503d805f833e6128408183612063565b81019060408183031261019b5761285681612714565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128858361200e565b61288e81612714565b8352602081015167ffffffffffffffff811161019b57826128b0918301612721565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906128e38261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b5784612930918301612721565b6020830152604081015167ffffffffffffffff811161019b5784612955918301612721565b604083015261296660608201612767565b606083015261297760808201612767565b608083015261298860a08201612767565b60a083015260c081015167ffffffffffffffff811161019b57846129ad918301612721565b60c083015260e081015167ffffffffffffffff811161019b57846129d2918301612721565b60e083015261010081015167ffffffffffffffff811161019b57846129f8918301612721565b61010083015261012081015167ffffffffffffffff811161019b5784612a1f918301612721565b61012083015261014081015167ffffffffffffffff811161019b5784612a46918301612721565b61014083015261016081015167ffffffffffffffff811161019b5784612a6d918301612721565b61016083015261018081015167ffffffffffffffff811161019b5784612a94918301612721565b6101808301526101a081015167ffffffffffffffff811161019b5784612abb918301612721565b6101a08301526101c08101519067ffffffffffffffff821161019b57612ae391859101612721565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b10918301612721565b6060840152015160808201525f6127f3565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612bee5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c2483612e6d565b929015612cad57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ca89373ffffffffffffffffffffffffffffffffffffffff965f525f602052612c7d60405f20612658565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d2f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612d8b57612d849250602082015190606060408401519301515f1a90613042565b9192909190565b50505f9160029190565b6004811015612e405780612da7575050565b60018103612dd7577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e0b57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e155750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b22575f905f92612faa575b5015612fa157815f52600360205260405f209160405193612f0285612047565b60018454948587520154806020870152838515159182612f97575b505015612f45575050505f525f602052612f3a60405f20546122bb565b156128285751600191565b909250612f5491949350612794565b93819291612f63575b50509190565b60019060405192612f7384612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f5d565b149050835f612f1d565b5050505f905f90565b9150506040813d604011612fe3575b81612fc660409383612063565b8101031261019b576020612fd982612714565b910151905f612ee2565b3d9150612fb9565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561301a57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116130c6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b22575f5173ffffffffffffffffffffffffffffffffffffffff8116156130bc57905f905f90565b505f906001905f90565b5050505f9160039190565b6130d9612474565b80519081156130e9576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131165790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613143612585565b8051908115613153576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131165790565b906131bd575080511561319557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613210575b6131ce575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156131c656fea164736f6c634300081c000a", - "sourceMap": "2021:11391:71:-:0;;;;;;;1171:4:32;1163:13;;2021:11391:71;;;;;;1163:13:32;2021:11391:71;;;;;;;;;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x60806040526004361015610011575f80fd5b5f3560e01c80632dd8abfe14611e4c578063485cc955146116b05780634d37fc7a146113365780634f1ef286146110105780634f3a415a14610ab057806352d1902d146109f35780635c40e542146109095780636931164e146108cd578063715018a6146107f3578063730169231461079b5780637b1039991461074a5780637dec71a9146106f95780637ecebe001461069657806384b0196e146104f15780638da5cb5b14610481578063abd45d21146102fc578063ad3cb1cc1461027b578063b33d59da14610237578063d2753561146101e8578063f2fde38b1461019f5763f698da2514610100575f80fd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206101386130d1565b61014061313b565b60405190838201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261019060c082612063565b519020604051908152f35b5f80fd5b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e66101d9611feb565b6101e1612cef565b612b2d565b005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576040610229610224611feb565b612794565b825191151582526020820152f35b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576101e6610271611fad565b6024359033612c1a565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576102f86040516102ba604082612063565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061215f565b0390f35b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576060602060405161033b81612047565b82815201526004355f525f60205260405f2060016040519161035c83612047565b61036581612658565b83520180546103738161230c565b916103816040519384612063565b81835260208301905f5260205f205f915b838310610464576103c1868660208201908152604051928392602084525160406020850152606084019061215f565b9051907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838203016040840152815180825260208201916020808360051b8301019401925f915b8383106104155786860387f35b919395509193602080610452837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161215f565b97019301930190928695949293610408565b60016020819261047385612658565b815201920192019190610392565b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054158061066d575b1561060f576105b3610558612474565b610560612585565b60206105c1604051926105738385612063565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e087019061215f565b90858203604087015261215f565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b8281106105f857505050500390f35b8351855286955093810193928101926001016105e9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610548565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff6106e2611feb565b165f526002602052602060405f2054604051908152f35b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742610735611fad565b6044359060243590612426565b604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760206040517f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc8152f35b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57610829612cef565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576020610742600435612389565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57600435610943612cef565b805f525f60205261095760405f20546122bb565b156109cb57805f525f602052600160405f206109728161233a565b018054905f8155816109a6575b827f56c387a9be1bf0e0e4f852c577a225db98e8253ad401d1b4ea73926f27d6af095f80a2005b5f5260205f20908101905b8181101561097f57806109c560019261233a565b016109b1565b7f22faf042000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610a885760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043560243567ffffffffffffffff811161019b57610b02903690600401611fbd565b919060443567ffffffffffffffff811161019b573660238201121561019b5780600401359167ffffffffffffffff831161019b5760248360051b8301019036821161019b57610b4f612cef565b8515610fe8578315610fc057845f525f602052610b6f60405f20546122bb565b610f9857610b8b9060405196610b8488612047565b36916120de565b8552610b968361230c565b92610ba46040519485612063565b83526024820191602084015b828410610f57575050505060208301908152815f525f60205260405f20925192835167ffffffffffffffff8111610e2057610beb82546122bb565b601f8111610f27575b506020601f8211600114610e85579080610c469260019596975f92610e7a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b81555b019051805190680100000000000000008211610e20578254828455808310610e4d575b50602001915f5260205f20915f905b828210610ca957847fcbb92e241e191fed6d0b0da0a918c7dcf595e77d868e2e3bf9e6b0b91589c7ad5f80a2005b805180519067ffffffffffffffff8211610e2057610cc786546122bb565b601f8111610de5575b50602090601f8311600114610d3f5792610d25836001959460209487965f92610d345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b87555b01940191019092610c7b565b015190508b80610c14565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691875f52815f20925f5b818110610dcd5750936020936001969387969383889510610d96575b505050811b018755610d28565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558a8080610d89565b92936020600181928786015181550195019301610d6d565b610e1090875f5260205f20601f850160051c81019160208610610e16575b601f0160051c0190612324565b87610cd0565b9091508190610e03565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b835f528260205f2091820191015b818110610e685750610c6c565b80610e7460019261233a565b01610e5b565b015190508780610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695835f52815f20965f5b818110610f0f5750916001959697918487959410610ed8575b505050811b018155610c49565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080610ecb565b83830151895560019098019760209384019301610eb2565b610f5190835f5260205f20601f840160051c81019160208510610e1657601f0160051c0190612324565b85610bf4565b833567ffffffffffffffff811161019b5782013660438201121561019b57602091610f8d839236906044602482013591016120de565b815201930192610bb0565b7f72477348000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f6890d9d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8423f262000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611042611feb565b60243567ffffffffffffffff811161019b57611062903690600401612114565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156112f4575b50610a88576110b1612cef565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f91816112c0575b5061113157837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036112955750813b1561126a57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611239575f808360206101e695519101845af43d15611231573d91611215836120a4565b926112236040519485612063565b83523d5f602085013e613180565b606091613180565b50503461124257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116112ec575b816112dc60209383612063565b8101031261019b57519085611100565b3d91506112cf565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54161415836110a4565b3461019b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b5760043567ffffffffffffffff811161019b5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906113b08261200e565b8060040135801515810361019b578252602481013567ffffffffffffffff811161019b576113e49060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b5781016101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261019b57604051906114398261202a565b60048101357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602481013567ffffffffffffffff811161019b5761148d9060043691840101612114565b6020830152604481013567ffffffffffffffff811161019b576114b69060043691840101612114565b60408301526114c760648201612132565b60608301526114d860848201612132565b60808301526114e960a48201612132565b60a083015260c481013567ffffffffffffffff811161019b576115129060043691840101612114565b60c083015260e481013567ffffffffffffffff811161019b5761153b9060043691840101612114565b60e083015261010481013567ffffffffffffffff811161019b576115659060043691840101612114565b61010083015261012481013567ffffffffffffffff811161019b576115909060043691840101612114565b61012083015261014481013567ffffffffffffffff811161019b576115bb9060043691840101612114565b61014083015261016481013567ffffffffffffffff811161019b576115e69060043691840101612114565b61016083015261018481013567ffffffffffffffff811161019b576116119060043691840101612114565b6101808301526101a481013567ffffffffffffffff811161019b5761163c9060043691840101612114565b6101a08301526101c48101359067ffffffffffffffff821161019b5760046116679236920101612114565b6101c0820152604083015260648101359167ffffffffffffffff831161019b5760846107429261169f60209560043691840101612114565b6060840152013560808201526121a2565b3461019b5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b576116e7611feb565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361019b577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081611e44575b6001149081611e3a575b159081611e31575b50611e0957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006117c19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611db4575b506117b9612feb565b6101e1612feb565b6117c9612feb565b6040918251926117d98185612063565b601284527f426c6f636b4275696c646572506f6c696379000000000000000000000000000060208501528051936118108286612063565b600185527f31000000000000000000000000000000000000000000000000000000000000006020860152611842612feb565b61184a612feb565b80519067ffffffffffffffff8211610e20576118867fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546122bb565b601f8111611d47575b50602090601f8311600114611c67576118dc92915f9183610e7a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102555b835167ffffffffffffffff8111610e205761193a7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546122bb565b601f8111611bfa575b50602094601f8211600114611b1c576119939293949582915f92611b115750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101558215611ae957827fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015551917f27fe5f0c1c3b1ed427cc63d0f05759ffdecf9aec9e18d31ef366fc8a6cb5dc3b5f80a2611a5857005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a1005b7f11a1e697000000000000000000000000000000000000000000000000000000005f5260045ffd5b015190508680610c14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52805f20915f5b888110611be257508360019596979810611bab575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103556119b6565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080611b7e565b91926020600181928685015181550194019201611b69565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f52611c61907f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510610e1657601f0160051c0190612324565b85611943565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52815f20925f5b818110611d2f5750908460019594939210611cf8575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102556118ff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055868080611ccb565b92936020600181928786015181550195019301611cb5565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f52611dae907f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f850160051c81019160208610610e1657601f0160051c0190612324565b8661188f565b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846117b0565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501585611759565b303b159150611751565b859150611747565b3461019b5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019b57611e83611fad565b602435604435916064359267ffffffffffffffff841161019b57611ed7611ed1611eb4611ee0963690600401611fbd565b9190611ec9611ec4868989612426565b612389565b9236916120de565b90612d5b565b90959195612d95565b73ffffffffffffffffffffffffffffffffffffffff841690815f52600260205260405f2054808203611f7f5750505f52600260205260405f20928354937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8514611f525760016101e695019055612c1a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6004359060ff8216820361019b57565b9181601f8401121561019b5782359167ffffffffffffffff831161019b576020838186019501011161019b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019b57565b60a0810190811067ffffffffffffffff821117610e2057604052565b6101e0810190811067ffffffffffffffff821117610e2057604052565b6040810190811067ffffffffffffffff821117610e2057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610e2057604052565b67ffffffffffffffff8111610e2057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926120ea826120a4565b916120f86040519384612063565b82948184528183011161019b578281602093845f960137010152565b9080601f8301121561019b5781602061212f933591016120de565b90565b35907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040015160c081015190610140810151610160820151916101808101516101a082015160e08301519060a08401517fffffffffffffffff0000000000000000000000000000000000000000000000001693608001517fffffffffffffffff00000000000000000000000000000000000000000000000016926040519687966020880199805160208192018c5e880160208101915f83528051926020849201905e016020015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e015f815281516020819301825e019182526008820152037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0810182526010016122b59082612063565b51902090565b90600182811c92168015612302575b60208310146122d557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916122ca565b67ffffffffffffffff8111610e205760051b60200190565b81811061232f575050565b5f8155600101612324565b61234481546122bb565b908161234e575050565b81601f5f93116001146123605750555b565b8183526020832061237c91601f0160051c810190600101612324565b8082528160208120915555565b6042906123946130d1565b61239c61313b565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526123ed60c082612063565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b916040519160ff60208401947f93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc865216604084015260608301526080820152608081526122b560a082612063565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254916124a6836122bb565b808352926001811690811561254857506001146124ca575b61235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b81831061252c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612514565b6020925061235e9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016124be565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354916125b7836122bb565b808352926001811690811561254857506001146125da5761235e92500383612063565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b81831061263c57505090602061235e928201016124be565b6020919350806001915483858901015201910190918492612624565b9060405191825f82549261266b846122bb565b80845293600181169081156126d45750600114612690575b5061235e92500383612063565b90505f9291925260205f20905f915b8183106126b857505090602061235e928201015f612683565b602091935080600191548385890101520191019091849261269f565b6020935061235e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612683565b5190811515820361019b57565b81601f8201121561019b57805190612738826120a4565b926127466040519485612063565b8284526020838301011161019b57815f9260208093018386015e8301015290565b51907fffffffffffffffff0000000000000000000000000000000000000000000000008216820361019b57565b5f73ffffffffffffffffffffffffffffffffffffffff602481600154169360405194859384927f727310620000000000000000000000000000000000000000000000000000000084521660048301525afa908115612b22575f9161282f575b5080511561282857612804906121a2565b805f525f60205261281860405f20546122bb565b61282357505f905f90565b600191565b505f905f90565b90503d805f833e6128408183612063565b81019060408183031261019b5761285681612714565b5060208101519067ffffffffffffffff821161019b57019060a08282031261019b57604051916128858361200e565b61288e81612714565b8352602081015167ffffffffffffffff811161019b57826128b0918301612721565b6020840152604081015167ffffffffffffffff811161019b5781016101e08184031261019b57604051906128e38261202a565b80517fffffffffffffffffffffffffffffffff000000000000000000000000000000008116810361019b578252602081015167ffffffffffffffff811161019b5784612930918301612721565b6020830152604081015167ffffffffffffffff811161019b5784612955918301612721565b604083015261296660608201612767565b606083015261297760808201612767565b608083015261298860a08201612767565b60a083015260c081015167ffffffffffffffff811161019b57846129ad918301612721565b60c083015260e081015167ffffffffffffffff811161019b57846129d2918301612721565b60e083015261010081015167ffffffffffffffff811161019b57846129f8918301612721565b61010083015261012081015167ffffffffffffffff811161019b5784612a1f918301612721565b61012083015261014081015167ffffffffffffffff811161019b5784612a46918301612721565b61014083015261016081015167ffffffffffffffff811161019b5784612a6d918301612721565b61016083015261018081015167ffffffffffffffff811161019b5784612a94918301612721565b6101808301526101a081015167ffffffffffffffff811161019b5784612abb918301612721565b6101a08301526101c08101519067ffffffffffffffff821161019b57612ae391859101612721565b6101c08201526040840152606081015167ffffffffffffffff811161019b57608092612b10918301612721565b6060840152015160808201525f6127f3565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff168015612bee5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b91612c2483612e6d565b929015612cad57827f3fa039a23466a52e08acb25376ac7d81de184fa6549ffffb2fc920c47cb623ed949260ff612ca89373ffffffffffffffffffffffffffffffffffffffff965f525f602052612c7d60405f20612658565b936040519788971687526020870152166040850152606084015260a0608084015260a083019061215f565b0390a1565b73ffffffffffffffffffffffffffffffffffffffff847f4c547670000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612d2f57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b8151919060418303612d8b57612d849250602082015190606060408401519301515f1a90613042565b9192909190565b50505f9160029190565b6004811015612e405780612da7575050565b60018103612dd7577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612e0b57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612e155750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600154166040517fa8af4ff500000000000000000000000000000000000000000000000000000000815260408160248173ffffffffffffffffffffffffffffffffffffffff8716958660048301525afa908115612b22575f905f92612faa575b5015612fa157815f52600360205260405f209160405193612f0285612047565b60018454948587520154806020870152838515159182612f97575b505015612f45575050505f525f602052612f3a60405f20546122bb565b156128285751600191565b909250612f5491949350612794565b93819291612f63575b50509190565b60019060405192612f7384612047565b868452602084019182525f52600360205260405f2092518355519101555f80612f5d565b149050835f612f1d565b5050505f905f90565b9150506040813d604011612fe3575b81612fc660409383612063565b8101031261019b576020612fd982612714565b910151905f612ee2565b3d9150612fb9565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561301a57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116130c6579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612b22575f5173ffffffffffffffffffffffffffffffffffffffff8116156130bc57905f905f90565b505f906001905f90565b5050505f9160039190565b6130d9612474565b80519081156130e9576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156131165790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613143612585565b8051908115613153576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015480156131165790565b906131bd575080511561319557602081519101fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613210575b6131ce575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156131c656fea164736f6c634300081c000a", - "sourceMap": "2021:11391:71:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4107:92:35;4129:17;;:::i;:::-;4148:20;;:::i;:::-;2021:11391:71;;4107:92:35;;;;2021:11391:71;1959:95:35;2021:11391:71;;;1959:95:35;;2021:11391:71;1959:95:35;;;2021:11391:71;4170:13:35;1959:95;;;2021:11391:71;4193:4:35;1959:95;;;2021:11391:71;1959:95:35;4107:92;;;;;;:::i;:::-;2021:11391:71;4097:103:35;;2021:11391:71;;;;;;;;;;;;;;;;;;;;;2357:1:30;2021:11391:71;;:::i;:::-;2303:62:30;;:::i;:::-;2357:1;:::i;:::-;2021:11391:71;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;4428:16;2021:11391;;:::i;:::-;;;4407:10;;4428:16;:::i;2021:11391::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1280:65:30;2021:11391:71;;;;;;;;;;;;;;;;;;;2692:64:35;2021:11391:71;5647:18:35;:43;;;2021:11391:71;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5835:13:35;2021:11391:71;;;;5870:4:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5647:43:35;2021:11391:71;5669:16:35;2021:11391:71;5669:21:35;5647:43;;2021:11391:71;;;;;;;;;;;;;;:::i;:::-;;;;3077:64;2021:11391;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;3007:23;2021:11391;;;;;;;;;;;;;;;;;;;;;;2361:90;2021:11391;;;;;;;;;;;;;;2303:62:30;;:::i;:::-;2021:11391:71;;1280:65:30;2021:11391:71;;;;1280:65:30;2021:11391:71;;3975:40:30;;;;2021:11391:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2303:62:30;;:::i;:::-;2021:11391:71;;;;;;;;;;;;:::i;:::-;12350:59;2021:11391;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;12537:38;;2021:11391;12537:38;;2021:11391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5090:6:32;2021:11391:71;5081:4:32;5073:23;5069:145;;2021:11391:71;;;811:66:41;2021:11391:71;;;5069:145:32;5174:29;2021:11391:71;5174:29:32;2021:11391:71;;5174:29:32;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2303:62:30;;:::i;:::-;11561:28:71;;2021:11391;;11627:25;;2021:11391;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11972:74;;;;2021:11391;11972:74;;2021:11391;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12062:34;;2021:11391;12062:34;;2021:11391;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;4667:6:32;2021:11391:71;4658:4:32;;4650:23;:120;;;;;2021:11391:71;4633:251:32;;;2303:62:30;;:::i;:::-;2021:11391:71;;;;;;;6131:52:32;;2021:11391:71;6131:52:32;2021:11391:71;6131:52:32;;;;2021:11391:71;;6131:52:32;;;2021:11391:71;-1:-1:-1;6127:437:32;;6493:60;;2021:11391:71;6493:60:32;2021:11391:71;;;;6493:60:32;6127:437;6225:40;811:66:41;6225:40:32;;;6221:120;;1748:29:41;;;:34;1744:119;;2021:11391:71;;811:66:41;2021:11391:71;;;811:66:41;2021:11391:71;2407:36:41;2021:11391:71;2407:36:41;;2021:11391:71;;2458:15:41;:11;;2021:11391:71;4065:25:48;;2021:11391:71;4107:55:48;4065:25;;;;;;;2021:11391:71;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;4107:55:48;:::i;2021:11391:71:-;;;4107:55:48;:::i;2454:148:41:-;6163:9;;;6159:70;;2021:11391:71;6159:70:41;6199:19;2021:11391:71;6199:19:41;2021:11391:71;;6199:19:41;1744:119;1805:47;2021:11391:71;1805:47:41;2021:11391:71;;;;1805:47:41;6221:120:32;6292:34;2021:11391:71;6292:34:32;2021:11391:71;;;;6292:34:32;6131:52;;;;2021:11391:71;6131:52:32;;2021:11391:71;6131:52:32;;;;;;2021:11391:71;6131:52:32;;;:::i;:::-;;;2021:11391:71;;;;;6131:52:32;;;;;;;-1:-1:-1;6131:52:32;;4650:120;2021:11391:71;;;811:66:41;2021:11391:71;;4728:42:32;;4650:120;;;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;3147:66:31;2021:11391:71;;;;;;4301:16:31;2021:11391:71;;;;4724:16:31;;:34;;;;2021:11391:71;4803:1:31;4788:16;:50;;;;2021:11391:71;4853:13:31;:30;;;;2021:11391:71;4849:91:31;;;2021:11391:71;;4803:1:31;2021:11391:71;6959:1:31;2021:11391:71;;;3147:66:31;2021:11391:71;4977:67:31;;2021:11391:71;6891:76:31;;;:::i;:::-;;;:::i;6959:1::-;6891:76;;:::i;:::-;2021:11391:71;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;4803:1:31;2021:11391:71;;;;;;;6891:76:31;;:::i;:::-;;;:::i;:::-;2021:11391:71;;;;;;;;;3652:7:35;2021:11391:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;3676:10:35;2021:11391:71;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;2692:64:35;2021:11391:71;;3788:16:35;2021:11391:71;3897:23;;2021:11391;;;;4803:1:31;2021:11391:71;;;4803:1:31;2021:11391:71;;3986:22;;2021:11391;3986:22;;5064:101:31;;2021:11391:71;5064:101:31;2021:11391:71;5140:14:31;2021:11391:71;;3147:66:31;2021:11391:71;;3147:66:31;2021:11391:71;4803:1:31;2021:11391:71;;5140:14:31;2021:11391:71;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;;;3676:10:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;4803:1:31;2021:11391:71;;;;;;;;;;;;;;;;3652:7:35;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;4977:67:31;2021:11391:71;;;;3147:66:31;2021:11391:71;4977:67:31;;;4849:91;4906:23;2021:11391:71;4906:23:31;2021:11391:71;;4906:23:31;4853:30;4870:13;;;4853:30;;;4788:50;4816:4;4808:25;:30;;-1:-1:-1;4788:50:31;;4724:34;;;-1:-1:-1;4724:34:31;;2021:11391:71;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;3871:27:55;2021:11391:71;;3927:8:55;2021:11391:71;;;;;;:::i;:::-;4772:51;;4752:72;4772:51;;;;;:::i;:::-;4752:72;:::i;:::-;2021:11391;;;;:::i;:::-;3871:27:55;;:::i;:::-;3927:8;;;;;:::i;:::-;2021:11391:71;;;;;;;4943:6;2021:11391;;;;;;4979:22;;;2021:11391;;;;;;4943:6;2021:11391;;;;;;;;;;;;;;;5199:16;2021:11391;;;;5199:16;:::i;2021:11391::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;:::o;10512:815::-;10793:29;;;:34;;;;10849:35;;;;;10906;;;;10963;;;;;11020;;;;11118:40;;;;11180:34;;;;2021:11391;;;11236:42;;;2021:11391;;;;10793:29;2021:11391;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10732:578;;10512:815;:::o;2021:11391::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::o;:::-;;;-1:-1:-1;2021:11391:71;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;12855:131::-;3993:249:56;12855:131:71;4129:17:35;;:::i;:::-;4148:20;;:::i;:::-;2021:11391:71;;4107:92:35;;;;2021:11391:71;1959:95:35;2021:11391:71;;;1959:95:35;;2021:11391:71;1959:95:35;;;2021:11391:71;4170:13:35;1959:95;;;2021:11391:71;4193:4:35;1959:95;;;2021:11391:71;1959:95:35;4107:92;;;;;;:::i;:::-;2021:11391:71;4097:103:35;;3993:249:56;2021:11391:71;3993:249:56;;;;;;;;;;;;;;12855:131:71;:::o;13032:229::-;;2021:11391;;13172:81;2021:11391;13172:81;;;2021:11391;2361:90;2021:11391;;;;;;;;;;;;;;;;13172:81;;;;;;:::i;2021:11391::-;;;;-1:-1:-1;2021:11391:71;6311:7:35;2021:11391:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6311:7:35;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;6696:10:35;2021:11391:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;6696:10:35;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2021:11391:71;;;;;-1:-1:-1;2021:11391:71;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;6750:906::-;-1:-1:-1;2021:11391:71;6999:60;2021:11391;7022:8;2021:11391;;;;;6999:60;;;;;2021:11391;6999:60;;2021:11391;6999:60;;;2021:11391;6999:60;;;;;;;-1:-1:-1;6999:60:71;;;6750:906;2021:11391;;;;7226:86;;7346:41;;;:::i;:::-;2021:11391;-1:-1:-1;2021:11391:71;-1:-1:-1;2021:11391:71;;;;-1:-1:-1;2021:11391:71;;;:::i;:::-;7472:133;;7615:34;-1:-1:-1;7615:34:71;-1:-1:-1;6750:906:71;:::o;7472:133::-;7022:8;;7569:25::o;7226:86::-;7267:34;-1:-1:-1;7267:34:71;-1:-1:-1;7267:34:71;:::o;6999:60::-;;;;;-1:-1:-1;6999:60:71;;;;;;:::i;:::-;;;2021:11391;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;6999:60;;;;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;3405:215:30;2021:11391:71;;3489:22:30;;3485:91;;2021:11391:71;1280:65:30;2021:11391:71;;;;;;1280:65:30;2021:11391:71;;3975:40:30;3509:1;3975:40;;3405:215::o;3485:91::-;3534:31;3509:1;3534:31;3509:1;3534:31;2021:11391:71;;3509:1:30;3534:31;5648:1056:71;;5900:34;;;:::i;:::-;2021:11391;;;;;;6608:89;2021:11391;;;;;;;6552:17;2021:11391;6552:17;2021:11391;;;;6552:17;2021:11391;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6608:89;;;5648:1056::o;2021:11391::-;;;;;;;;;;;;2658:162:30;2021:11391:71;1280:65:30;2021:11391:71;;966:10:33;2717:23:30;2713:101;;2658:162::o;2713:101::-;2763:40;-1:-1:-1;2763:40:30;966:10:33;2763:40:30;2021:11391:71;;-1:-1:-1;2763:40:30;2129:778:55;2021:11391:71;;;2129:778:55;2319:2;2299:22;;2319:2;;2751:25;2535:196;;;;;;;;;;;;;;;-1:-1:-1;2535:196:55;2751:25;;:::i;:::-;2744:32;;;;;:::o;2295:606::-;2807:83;;2823:1;2807:83;2827:35;2807:83;;:::o;7280:532::-;2021:11391:71;;;;;;7366:29:55;;;7411:7;;:::o;7362:444::-;2021:11391:71;7462:38:55;;2021:11391:71;;7523:23:55;7375:20;7523:23;2021:11391:71;7375:20:55;7523:23;7458:348;7576:35;7567:44;;7576:35;;7634:46;;7375:20;7634:46;2021:11391:71;;;7375:20:55;7634:46;7563:243;7710:30;7701:39;7697:109;;7563:243;7280:532::o;7697:109::-;7763:32;7375:20;7763:32;2021:11391:71;;;7375:20:55;7763:32;2021:11391:71;;7375:20:55;2021:11391:71;;;;;7375:20:55;2021:11391:71;8892:1574;2021:11391;9107:8;2021:11391;;;;;9084:66;;2021:11391;;9084:66;2021:11391;;;;9084:66;;;;;2021:11391;9084:66;;;;;;;-1:-1:-1;;;9084:66:71;;;8892:1574;9164:8;;9160:73;;2021:11391;-1:-1:-1;2021:11391:71;9338:15;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;;;;:::i;:::-;9107:8;2021:11391;;;;;;;;;;;;;9536:21;;;;:54;;;;8892:1574;-1:-1:-1;;9532:928:71;;;2021:11391;;;-1:-1:-1;2021:11391:71;-1:-1:-1;2021:11391:71;;;;-1:-1:-1;2021:11391:71;;;:::i;:::-;9709:64;2021:11391;;;9107:8;;9793:32::o;9532:928::-;10170:27;;;;;;;;;:::i;:::-;10212:195;;;;;;9532:928;10421:28;;;;:::o;10212:195::-;9107:8;2021:11391;;;;;;;:::i;:::-;;;;;10330:62;;2021:11391;;;-1:-1:-1;2021:11391:71;9338:15;2021:11391;;;-1:-1:-1;2021:11391:71;;;;;;;;;10212:195;;;;9536:54;9561:29;;-1:-1:-1;9536:54:71;;;;9160:73;9188:34;;;-1:-1:-1;9188:34:71;-1:-1:-1;9188:34:71;:::o;9084:66::-;;;;2021:11391;9084:66;;2021:11391;9084:66;;;;;;2021:11391;9084:66;;;:::i;:::-;;;2021:11391;;;;;;;;:::i;:::-;;;;9084:66;;;;;;;-1:-1:-1;9084:66:71;;7082:141:31;2021:11391:71;3147:66:31;2021:11391:71;;;;7148:18:31;7144:73;;7082:141::o;7144:73::-;7189:17;-1:-1:-1;7189:17:31;;-1:-1:-1;7189:17:31;5203:1551:55;;;6283:66;6270:79;;6266:164;;2021:11391:71;;;;;;-1:-1:-1;2021:11391:71;;;;;;;;;;;;;;;;;;;6541:24:55;;;;;;;;;-1:-1:-1;6541:24:55;2021:11391:71;;;6579:20:55;6575:113;;6698:49;-1:-1:-1;6698:49:55;-1:-1:-1;5203:1551:55;:::o;6575:113::-;6615:62;-1:-1:-1;6615:62:55;6541:24;6615:62;-1:-1:-1;6615:62:55;:::o;6266:164::-;6365:54;;;6381:1;6365:54;6385:30;6365:54;;:::o;6928:687:35:-;2021:11391:71;;:::i;:::-;;;;7100:22:35;;;;2021:11391:71;;7145:22:35;7138:29;:::o;7096:513::-;-1:-1:-1;;2692:64:35;2021:11391:71;7473:15:35;;;;7508:17;:::o;7469:130::-;7564:20;7571:13;7564:20;:::o;7836:723::-;2021:11391:71;;:::i;:::-;;;;8017:25:35;;;;2021:11391:71;;8065:25:35;8058:32;:::o;8013:540::-;-1:-1:-1;;8377:16:35;2021:11391:71;8411:18:35;;;;8449:20;:::o;4437:582:48:-;;4609:8;;-1:-1:-1;2021:11391:71;;5690:21:48;:17;;5815:105;;;;;;5686:301;5957:19;5710:1;5957:19;;5710:1;5957:19;4605:408;2021:11391:71;;4857:22:48;:49;;;4605:408;4853:119;;4985:17;;:::o;4853:119::-;2021:11391:71;4933:24:48;;4878:1;4933:24;2021:11391:71;4933:24:48;2021:11391:71;;4878:1:48;4933:24;4857:49;4883:18;;;:23;4857:49;", - "linkReferences": {}, - "immutableReferences": { - "48412": [ - { - "start": 2616, - "length": 32 - }, - { - "start": 4217, - "length": 32 - } - ] - } - }, - "methodIdentifiers": { - "UPGRADE_INTERFACE_VERSION()": "ad3cb1cc", - "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()": "73016923", - "addWorkloadToPolicy(bytes32,string,string[])": "4f3a415a", - "computeStructHash(uint8,bytes32,uint256)": "7dec71a9", - "domainSeparator()": "f698da25", - "eip712Domain()": "84b0196e", - "getHashedTypeDataV4(bytes32)": "6931164e", - "getWorkloadMetadata(bytes32)": "abd45d21", - "initialize(address,address)": "485cc955", - "isAllowedPolicy(address)": "d2753561", - "nonces(address)": "7ecebe00", - "owner()": "8da5cb5b", - "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": "2dd8abfe", - "proxiableUUID()": "52d1902d", - "registry()": "7b103999", - "removeWorkloadFromPolicy(bytes32)": "5c40e542", - "renounceOwnership()": "715018a6", - "transferOwnership(address)": "f2fde38b", - "upgradeToAndCall(address,bytes)": "4f1ef286", - "verifyBlockBuilderProof(uint8,bytes32)": "b33d59da", - "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": "4d37fc7a" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyCommitHash\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySourceLocators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"provided\",\"type\":\"uint256\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedBlockBuilder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WorkloadAlreadyInPolicy\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WorkloadNotInPolicy\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"}],\"name\":\"BlockBuilderProofVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"registry\",\"type\":\"address\"}],\"name\":\"RegistrySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"WorkloadAddedToPolicy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"WorkloadRemovedFromPolicy\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"sourceLocators\",\"type\":\"string[]\"}],\"name\":\"addWorkloadToPolicy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeStructHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"domainSeparator\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"structHash\",\"type\":\"bytes32\"}],\"name\":\"getHashedTypeDataV4\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"getWorkloadMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"commitHash\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"sourceLocators\",\"type\":\"string[]\"}],\"internalType\":\"struct IBlockBuilderPolicy.WorkloadMetadata\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teeAddress\",\"type\":\"address\"}],\"name\":\"isAllowedPolicy\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"WorkloadId\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"teeAddress\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"permitNonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"eip712Sig\",\"type\":\"bytes\"}],\"name\":\"permitVerifyBlockBuilderProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"workloadId\",\"type\":\"bytes32\"}],\"name\":\"removeWorkloadFromPolicy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"blockContentHash\",\"type\":\"bytes32\"}],\"name\":\"verifyBlockBuilderProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"rawQuote\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes16\",\"name\":\"teeTcbSvn\",\"type\":\"bytes16\"},{\"internalType\":\"bytes\",\"name\":\"mrSeam\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrsignerSeam\",\"type\":\"bytes\"},{\"internalType\":\"bytes8\",\"name\":\"seamAttributes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"tdAttributes\",\"type\":\"bytes8\"},{\"internalType\":\"bytes8\",\"name\":\"xFAM\",\"type\":\"bytes8\"},{\"internalType\":\"bytes\",\"name\":\"mrTd\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrConfigId\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrOwner\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"mrOwnerConfig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr0\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr1\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr2\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rtMr3\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"reportData\",\"type\":\"bytes\"}],\"internalType\":\"struct TD10ReportBody\",\"name\":\"parsedReportBody\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"extendedRegistrationData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"quoteHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct IFlashtestationRegistry.RegisteredTEE\",\"name\":\"registration\",\"type\":\"tuple\"}],\"name\":\"workloadIdForTDRegistration\",\"outputs\":[{\"internalType\":\"WorkloadId\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"BlockBuilderProofVerified(address,bytes32,uint8,bytes32,string)\":{\"params\":{\"blockContentHash\":\"The hash of the block content\",\"caller\":\"The address that called the verification function (TEE address)\",\"commitHash\":\"The git commit hash associated with the workload\",\"version\":\"The flashtestation protocol version used\",\"workloadId\":\"The workload identifier of the TEE\"}},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RegistrySet(address)\":{\"params\":{\"registry\":\"The address of the registry\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"WorkloadAddedToPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}},\"WorkloadRemovedFromPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}}},\"kind\":\"dev\",\"methods\":{\"addWorkloadToPolicy(bytes32,string,string[])\":{\"details\":\"The commitHash solves the following problem; The only way for a smart contract like BlockBuilderPolicy to verify that a TEE (identified by its workloadId) is running a specific piece of code (for instance, op-rbuilder) is to reproducibly build that workload onchain. This is prohibitively expensive, so instead we rely on a permissioned multisig (the owner of this contract) to add a commit hash to the policy whenever it adds a new workloadId. We're already relying on the owner to verify that the workloadId is valid, so we can also assume the owner will not add a commit hash that is not associated with the workloadId. If the owner did act maliciously, this can easily be determined offchain by an honest actor building the TEE image from the given commit hash, deriving the image's workloadId, and then comparing it to the workloadId stored on the policy that is associated with the commit hash. If the workloadId is different, this can be used to prove that the owner acted maliciously. In the honest case, this Policy serves as a source of truth for which source code of build software (i.e. the commit hash) is used to build the TEE image identified by the workloadId.\",\"params\":{\"commitHash\":\"The 40-character hexadecimal commit hash of the git repository whose source code is used to build the TEE image identified by the workloadId\",\"sourceLocators\":\"An array of URIs pointing to the source code\",\"workloadId\":\"The workload identifier\"}},\"computeStructHash(uint8,bytes32,uint256)\":{\"params\":{\"blockContentHash\":\"The hash of the block content\",\"nonce\":\"The nonce to use for the EIP-712 signature\",\"version\":\"The version of the flashtestation's protocol\"},\"returns\":{\"_0\":\"The struct hash for the EIP-712 signature\"}},\"domainSeparator()\":{\"details\":\"This is useful for when both onchain and offchain users want to compute the domain separator for the EIP-712 signature, and then use it to verify the signature\",\"returns\":{\"_0\":\"The domain separator for the EIP-712 signature\"}},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"getHashedTypeDataV4(bytes32)\":{\"params\":{\"structHash\":\"The struct hash for the EIP-712 signature\"},\"returns\":{\"_0\":\"The digest for the EIP-712 signature\"}},\"getWorkloadMetadata(bytes32)\":{\"details\":\"This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1)\",\"params\":{\"workloadId\":\"The workload identifier to query\"},\"returns\":{\"_0\":\"The metadata associated with the workload\"}},\"initialize(address,address)\":{\"params\":{\"_initialOwner\":\"The address of the initial owner of the contract\",\"_registry\":\"The address of the registry contract\"}},\"isAllowedPolicy(address)\":{\"params\":{\"teeAddress\":\"The TEE-controlled address\"},\"returns\":{\"_1\":\"The workloadId of the TEE that is using an approved workload in the policy, or 0 if the TEE is not using an approved workload in the policy\",\"allowed\":\"True if the TEE is using an approved workload in the policy\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)\":{\"details\":\"This function is useful if you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, but note that because of the larger number of function arguments, will cost more gas than the non-EIP-712 verifyBlockBuilderProof function\",\"params\":{\"blockContentHash\":\"The hash of the block content\",\"eip712Sig\":\"The EIP-712 signature of the verification message\",\"nonce\":\"The nonce to use for the EIP-712 signature\",\"version\":\"The version of the flashtestation's protocol used to generate the block builder proof\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"removeWorkloadFromPolicy(bytes32)\":{\"params\":{\"workloadId\":\"The workload identifier\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"verifyBlockBuilderProof(uint8,bytes32)\":{\"details\":\"If you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, you can use the permitVerifyBlockBuilderProof function instead which costs more gas, but allows any EOA to submit a block builder proof on behalf of a TEE\",\"params\":{\"blockContentHash\":\"The hash of the block content\",\"version\":\"The version of the flashtestation's protocol used to generate the block builder proof\"}},\"workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))\":{\"details\":\"Think of the workload identifier as the version of the application for governance. The workloadId verifiably maps to a version of source code that builds the TEE VM image\",\"params\":{\"registration\":\"The registration data from a TEE device\"},\"returns\":{\"_0\":\"workloadId The computed workload identifier\"}}},\"stateVariables\":{\"__gap\":{\"details\":\"Storage gap to allow for future storage variable additions in upgradesThis reserves 46 storage slots (out of 50 total - 4 used for approvedWorkloads, registry, nonces, and cachedWorkloads)\"},\"approvedWorkloads\":{\"details\":\"This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1). This means the critical `_cachedIsAllowedPolicy` function is O(1) since we can directly check if a workloadId exists in the mapping\"},\"cachedWorkloads\":{\"details\":\"Maps teeAddress to cached workload information for gas optimization\"}},\"title\":\"BlockBuilderPolicy\",\"version\":1},\"userdoc\":{\"errors\":{\"EmptyCommitHash()\":[{\"notice\":\"Emitted when the commit hash is empty\"}],\"EmptySourceLocators()\":[{\"notice\":\"Emitted when the source locators array is empty\"}],\"InvalidNonce(uint256,uint256)\":[{\"notice\":\"Emitted when the nonce is invalid\"}],\"InvalidRegistry()\":[{\"notice\":\"Emitted when the registry is the 0x0 address\"}],\"UnauthorizedBlockBuilder(address)\":[{\"notice\":\"Emitted when the address is not in the approvedWorkloads mapping\"}],\"WorkloadAlreadyInPolicy()\":[{\"notice\":\"Emitted when a workload to be added is already in the policy\"}],\"WorkloadNotInPolicy()\":[{\"notice\":\"Emitted when a workload to be removed is not in the policy\"}]},\"events\":{\"BlockBuilderProofVerified(address,bytes32,uint8,bytes32,string)\":{\"notice\":\"Emitted when a block builder proof is successfully verified\"},\"RegistrySet(address)\":{\"notice\":\"Emitted when the registry is set in the initializer\"},\"WorkloadAddedToPolicy(bytes32)\":{\"notice\":\"Emitted when a workload is added to the policy\"},\"WorkloadRemovedFromPolicy(bytes32)\":{\"notice\":\"Emitted when a workload is removed from the policy\"}},\"kind\":\"user\",\"methods\":{\"VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()\":{\"notice\":\"EIP-712 Typehash, used in the permitVerifyBlockBuilderProof function\"},\"addWorkloadToPolicy(bytes32,string,string[])\":{\"notice\":\"Add a workload to a policy (governance only)Only the owner of this contract can add workloads to the policy and it is the responsibility of the owner to ensure that the workload is valid otherwise the address associated with this workload has full power to do anything who's authorization is based on this policy\"},\"computeStructHash(uint8,bytes32,uint256)\":{\"notice\":\"Computes the struct hash for the EIP-712 signature\"},\"domainSeparator()\":{\"notice\":\"Returns the domain separator for the EIP-712 signature\"},\"getHashedTypeDataV4(bytes32)\":{\"notice\":\"Computes the digest for the EIP-712 signature\"},\"getWorkloadMetadata(bytes32)\":{\"notice\":\"Mapping from workloadId to its metadata (commit hash and source locators)\"},\"initialize(address,address)\":{\"notice\":\"Initializer to set the FlashtestationRegistry contract which verifies TEE quotes and the initial owner of the contract\"},\"isAllowedPolicy(address)\":{\"notice\":\"Check if this TEE-controlled address has registered a valid TEE workload with the registry, and if the workload is approved under this policy\"},\"nonces(address)\":{\"notice\":\"Tracks nonces for EIP-712 signatures to prevent replay attacks\"},\"permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)\":{\"notice\":\"Verify a block builder proof with a Flashtestation Transaction using EIP-712 signaturesThis function allows any EOA to submit a block builder proof on behalf of a TEEThe TEE must sign a proper EIP-712-formatted message, and the signer must match a TEE-controlled address whose associated workload is approved under this policy\"},\"registry()\":{\"notice\":\"Address of the FlashtestationRegistry contract that verifies TEE quotes\"},\"removeWorkloadFromPolicy(bytes32)\":{\"notice\":\"Remove a workload from a policy (governance only)\"},\"verifyBlockBuilderProof(uint8,bytes32)\":{\"notice\":\"Verify a block builder proof with a Flashtestation TransactionThis function will only succeed if the caller is a registered TEE-controlled address from an attested TEE and the TEE is running an approved block builder workload (see `addWorkloadToPolicy`)The blockContentHash is a keccak256 hash of a subset of the block header, as specified by the version. See the [flashtestations spec](https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md) for more details\"},\"workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))\":{\"notice\":\"Application specific mapping of registration data to a workload identifier\"}},\"notice\":\"A reference implementation of a policy contract for the FlashtestationRegistryA Policy is a collection of related WorkloadIds. A Policy exists to specify which WorkloadIds are valid for a particular purpose, in this case for remote block building. It also exists to handle the problem that TEE workloads will need to change multiple times a year, either because of Intel DCAP Endorsement updates or updates to the TEE configuration (and thus its WorkloadId). Without Policies, consumer contracts that makes use of Flashtestations would need to be updated every time a TEE workload changes, which is a costly and error-prone process. Instead, consumer contracts need only check if a TEE address is allowed under any workload in a Policy, and the FlashtestationRegistry will handle the rest\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/BlockBuilderPolicy.sol\":\"BlockBuilderPolicy\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":44444444},\"remappings\":[\":@automata-network/on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":@sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/src/\",\":automata-dcap-attestation/=lib/automata-dcap-attestation/evm/\",\":automata-on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/\",\":ds-test/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":risc0-ethereum/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/\",\":risc0/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/contracts/src/\",\":solady/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/\",\":solmate/=lib/solmate/\",\":sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/\"],\"viaIR\":true},\"sources\":{\"lib/automata-dcap-attestation/evm/contracts/types/CommonStruct.sol\":{\"keccak256\":\"0xc1968270cffd0b96268c9695d81647e707a6e1e7c1b851c1d6b1f9af6a88d4f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d4e56c233fbb8e448961f5b847b92a8e725cc56ed9e0ad764d790f1cd4896245\",\"dweb:/ipfs/QmVoUKR62HT6DKaR3rNnNr5w1CmDSbrDriX41ycTAzKodz\"]},\"lib/automata-dcap-attestation/evm/contracts/types/Constants.sol\":{\"keccak256\":\"0xcfaac1552ee9277f6b0e4e38bdee7d2e07d1bdfe188c294c5c3f37f152b1d099\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89a8a55be811abd8cc8af234d489c64a84f08023061ade4e67dbbaf11468cdc4\",\"dweb:/ipfs/QmR1TWqBcAEFbtteg2xjVG4VJXeFVWoAQidR3jyWuaGpUf\"]},\"lib/automata-dcap-attestation/evm/contracts/types/V4Structs.sol\":{\"keccak256\":\"0x39726e2cc0de02e8b34c0da2e6885fa9d18b7905970b9745e5310fb12cde9dd4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddf5ab4f4188de35bb9c03137b207d56d69629283b9cb683eebdfafe7ff015ee\",\"dweb:/ipfs/QmTmYBmBEUbxMESjeaF6cSPMSK5P8hv16tDXTk78LXiKpz\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/DateTimeLib.sol\":{\"keccak256\":\"0x3945a985a34bc905beb149f7196f1dba021a60abc2f178ab2eb3a28ed4f94741\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://828a14ebcf4bd777c73ecbedd726819ac37c3b2e4fab7c8fe263f860db725f72\",\"dweb:/ipfs/QmNW32zDLCVjbGecmZvxAaSdmDudHQSsdrFfpMYX6baGAv\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/JSONParserLib.sol\":{\"keccak256\":\"0x8d4aeacf0459b28b40b63c9d331dc95cf7d751ca9961c83c89c1ad73b9b3cd81\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42cc6de802e8c17668ae82518caa4c053e82f1884329d1d924fa7b9fccf5041f\",\"dweb:/ipfs/QmPGLfqWXDCjjcZ2VEG8kRwasGFxR4u62RpLLBuLqXy9wP\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/LibString.sol\":{\"keccak256\":\"0x74ec81acbea6db4afe149ab51e26961bcb801af42f7af98242be71b866066200\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://16bb49824fcfa9667aeed0eb515fdefda1016225085cf78ed852078c67168229\",\"dweb:/ipfs/QmZ59xrx5QLSx5N5CiTLrfwsPKR7kpK4RRpiEWSMEpvDzQ\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/FmspcTcbHelper.sol\":{\"keccak256\":\"0x3041391dfb9e2dcb6ed27e9b89445a9206c5348da3f2753785c22c832878f226\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://883bd1cb7d425828b8b9c92052f16fbcc893e6cdd175e3616a99b857b723a808\",\"dweb:/ipfs/QmZWqGm2D9AFrxzAsad7xkLSKuH1NQb7VEdFKwJbumj8EU\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/X509Helper.sol\":{\"keccak256\":\"0x4b4a56e80792b64604975e52d1aad2e075bd49c94b36814aa6461fbd69b6a03e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7ea019efcc3904401a694b5704d7cb219b20f7cc11a5d4268b0015628fb71713\",\"dweb:/ipfs/QmezJCskd9hVoERyUNk6Y9qK8oQxmen5HqasNgz8diyk6V\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/Asn1Decode.sol\":{\"keccak256\":\"0xc7a6f959ce3d98244e28ff140c0f3eb5fae6349d93e250a49cbf9fdd0e7ac8e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c0760856218edc38ead344bd2587118a2a72a23d0d410e57c7e48251f313e3c\",\"dweb:/ipfs/QmdNu9g5GWgEuS1ShgCqHckE1cSjfpt9LJb2t1A2CKAFfB\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/BytesUtils.sol\":{\"keccak256\":\"0x9a9028cd3bc73fb8ff9404907c980df141fd06351f9ea79b32754d05cae25f85\",\"license\":\"BSD 2-Clause License\",\"urls\":[\"bzz-raw://eaf5b855f3013a40e5d6b62fd9a7b7077a06b1750fabc53b8514ba4cf0006bed\",\"dweb:/ipfs/QmXKHL2zH51od64bYa8pifwEQF8UzccPBE2x7K5uvq4JeQ\"]},\"lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/DateTimeUtils.sol\":{\"keccak256\":\"0xee25670c66115185f0f0ab6070ade945faff8f75b502b70c2597a02868a02a4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c08c26dbd2e3196b3e16f7b8d2daa29c472997a845d5dc731f3bf17b7784d02\",\"dweb:/ipfs/QmUMwg7SvYQpgwcnDkGM9vnau2SqoYzwsGcB8CM2MLZueP\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec\",\"dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol\":{\"keccak256\":\"0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c\",\"dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13\",\"dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c\",\"dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae\",\"dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422\",\"dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a\",\"dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d\",\"dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f\",\"dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol\":{\"keccak256\":\"0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de\",\"dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]},\"src/BlockBuilderPolicy.sol\":{\"keccak256\":\"0x7c3d3ba04441108b91651c8b9c4dee65b2c3bb7e71fc0a55f1d3bd08ad8635cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://48d897893c99de682f4a44c3158f7bdf489c5d8557800906142cc300e2318806\",\"dweb:/ipfs/QmSjnpDXmwHcHei6dX6gQzMWUz3cZFF2JfKFH2yXnGQu3c\"]},\"src/FlashtestationRegistry.sol\":{\"keccak256\":\"0x7409a55e63172d86293b538b0dc0c55ff69c00b541f9b7a26709c8309cb194c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e35b2e23522c9dcd0bfa45e5ea70d623f7a9fb61a353e00492f64a140a31eeab\",\"dweb:/ipfs/QmbaPWPRsrd42C79hgS4Nrx2mAba4rEzRqz8guFUAVM6js\"]},\"src/interfaces/IAttestation.sol\":{\"keccak256\":\"0x2171e821adc778a1d451e06df44f8efd56648425489f1032c52bb90dd2adedb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://887140a9dfb7384d1dd7ae58001cc2e36fba193493ca89376b91be41b788b79a\",\"dweb:/ipfs/QmVH8KdzFFDtLipA3WvojpRMc2uSmGjKnCAdgwkLHVq6Lf\"]},\"src/interfaces/IBlockBuilderPolicy.sol\":{\"keccak256\":\"0x54a5fd427b7e2b926ff3f6eb361211f2a84a2c52fa8c641471e53b6bbe859d97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a8ca0f86c046fa571befee3dc0c8a839ec83d932d999c09fa3a701c8e842901\",\"dweb:/ipfs/QmP2pbZ1Xwhg2avcBxpsjL6vLGcS5vyoeqUDRq4xWNDKXw\"]},\"src/interfaces/IFlashtestationRegistry.sol\":{\"keccak256\":\"0xe21137526212ed0946cd655935b1d1efb214520047dfb84053ecc1bc00095db8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://589ad601f708e5e8b0c66760ea18b08fb028c61919f5d5222cf8916f1c283365\",\"dweb:/ipfs/QmPGsofEZJigrAcSwawQ8EyUtyv15RmRZ36L2j97H1G6tK\"]},\"src/utils/QuoteParser.sol\":{\"keccak256\":\"0xf8462661ddcf40037053c2f1527e8f56b12211ee2311fd6c3b8979ed392df702\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20a30b5ea00b46fff0d3624d5a4a04cad774457775ea362ed0d17cf1f454deeb\",\"dweb:/ipfs/QmbFB8yZdRj9j7id9ShHb7cxFFnKiaygLa6Abexa1b5tRG\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.28+commit.7893614a" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - } - ], - "type": "error", - "name": "AddressEmptyCode" - }, - { - "inputs": [], - "type": "error", - "name": "ECDSAInvalidSignature" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "type": "error", - "name": "ECDSAInvalidSignatureLength" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "type": "error", - "name": "ECDSAInvalidSignatureS" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "type": "error", - "name": "ERC1967InvalidImplementation" - }, - { - "inputs": [], - "type": "error", - "name": "ERC1967NonPayable" - }, - { - "inputs": [], - "type": "error", - "name": "EmptyCommitHash" - }, - { - "inputs": [], - "type": "error", - "name": "EmptySourceLocators" - }, - { - "inputs": [], - "type": "error", - "name": "FailedCall" - }, - { - "inputs": [], - "type": "error", - "name": "InvalidInitialization" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "provided", - "type": "uint256" - } - ], - "type": "error", - "name": "InvalidNonce" - }, - { - "inputs": [], - "type": "error", - "name": "InvalidRegistry" - }, - { - "inputs": [], - "type": "error", - "name": "NotInitializing" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "type": "error", - "name": "OwnableInvalidOwner" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "type": "error", - "name": "OwnableUnauthorizedAccount" - }, - { - "inputs": [], - "type": "error", - "name": "UUPSUnauthorizedCallContext" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slot", - "type": "bytes32" - } - ], - "type": "error", - "name": "UUPSUnsupportedProxiableUUID" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "type": "error", - "name": "UnauthorizedBlockBuilder" - }, - { - "inputs": [], - "type": "error", - "name": "WorkloadAlreadyInPolicy" - }, - { - "inputs": [], - "type": "error", - "name": "WorkloadNotInPolicy" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "caller", - "type": "address", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "workloadId", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "uint8", - "name": "version", - "type": "uint8", - "indexed": false - }, - { - "internalType": "bytes32", - "name": "blockContentHash", - "type": "bytes32", - "indexed": false - }, - { - "internalType": "string", - "name": "commitHash", - "type": "string", - "indexed": false - } - ], - "type": "event", - "name": "BlockBuilderProofVerified", - "anonymous": false - }, - { - "inputs": [], - "type": "event", - "name": "EIP712DomainChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "version", - "type": "uint64", - "indexed": false - } - ], - "type": "event", - "name": "Initialized", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "previousOwner", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "OwnershipTransferred", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "registry", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RegistrySet", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "address", - "name": "implementation", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "Upgraded", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "workloadId", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "WorkloadAddedToPolicy", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "workloadId", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "WorkloadRemovedFromPolicy", - "anonymous": false - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "UPGRADE_INTERFACE_VERSION", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "WorkloadId", - "name": "workloadId", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "commitHash", - "type": "string" - }, - { - "internalType": "string[]", - "name": "sourceLocators", - "type": "string[]" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "addWorkloadToPolicy" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "blockContentHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function", - "name": "computeStructHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "domainSeparator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "eip712Domain", - "outputs": [ - { - "internalType": "bytes1", - "name": "fields", - "type": "bytes1" - }, - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "version", - "type": "string" - }, - { - "internalType": "uint256", - "name": "chainId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "verifyingContract", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "salt", - "type": "bytes32" - }, - { - "internalType": "uint256[]", - "name": "extensions", - "type": "uint256[]" - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "structHash", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getHashedTypeDataV4", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "WorkloadId", - "name": "workloadId", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getWorkloadMetadata", - "outputs": [ - { - "internalType": "struct IBlockBuilderPolicy.WorkloadMetadata", - "name": "", - "type": "tuple", - "components": [ - { - "internalType": "string", - "name": "commitHash", - "type": "string" - }, - { - "internalType": "string[]", - "name": "sourceLocators", - "type": "string[]" - } - ] - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_initialOwner", - "type": "address" - }, - { - "internalType": "address", - "name": "_registry", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "teeAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "isAllowedPolicy", - "outputs": [ - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - }, - { - "internalType": "WorkloadId", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "teeAddress", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "permitNonce", - "type": "uint256" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "blockContentHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "eip712Sig", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "permitVerifyBlockBuilderProof" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "registry", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ] - }, - { - "inputs": [ - { - "internalType": "WorkloadId", - "name": "workloadId", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeWorkloadFromPolicy" - }, - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function", - "name": "upgradeToAndCall" - }, - { - "inputs": [ - { - "internalType": "uint8", - "name": "version", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "blockContentHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "verifyBlockBuilderProof" - }, - { - "inputs": [ - { - "internalType": "struct IFlashtestationRegistry.RegisteredTEE", - "name": "registration", - "type": "tuple", - "components": [ - { - "internalType": "bool", - "name": "isValid", - "type": "bool" - }, - { - "internalType": "bytes", - "name": "rawQuote", - "type": "bytes" - }, - { - "internalType": "struct TD10ReportBody", - "name": "parsedReportBody", - "type": "tuple", - "components": [ - { - "internalType": "bytes16", - "name": "teeTcbSvn", - "type": "bytes16" - }, - { - "internalType": "bytes", - "name": "mrSeam", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "mrsignerSeam", - "type": "bytes" - }, - { - "internalType": "bytes8", - "name": "seamAttributes", - "type": "bytes8" - }, - { - "internalType": "bytes8", - "name": "tdAttributes", - "type": "bytes8" - }, - { - "internalType": "bytes8", - "name": "xFAM", - "type": "bytes8" - }, - { - "internalType": "bytes", - "name": "mrTd", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "mrConfigId", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "mrOwner", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "mrOwnerConfig", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "rtMr0", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "rtMr1", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "rtMr2", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "rtMr3", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "reportData", - "type": "bytes" - } - ] - }, - { - "internalType": "bytes", - "name": "extendedRegistrationData", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "quoteHash", - "type": "bytes32" - } - ] - } - ], - "stateMutability": "pure", - "type": "function", - "name": "workloadIdForTDRegistration", - "outputs": [ - { - "internalType": "WorkloadId", - "name": "", - "type": "bytes32" - } - ] - } - ], - "devdoc": { - "kind": "dev", - "methods": { - "addWorkloadToPolicy(bytes32,string,string[])": { - "details": "The commitHash solves the following problem; The only way for a smart contract like BlockBuilderPolicy to verify that a TEE (identified by its workloadId) is running a specific piece of code (for instance, op-rbuilder) is to reproducibly build that workload onchain. This is prohibitively expensive, so instead we rely on a permissioned multisig (the owner of this contract) to add a commit hash to the policy whenever it adds a new workloadId. We're already relying on the owner to verify that the workloadId is valid, so we can also assume the owner will not add a commit hash that is not associated with the workloadId. If the owner did act maliciously, this can easily be determined offchain by an honest actor building the TEE image from the given commit hash, deriving the image's workloadId, and then comparing it to the workloadId stored on the policy that is associated with the commit hash. If the workloadId is different, this can be used to prove that the owner acted maliciously. In the honest case, this Policy serves as a source of truth for which source code of build software (i.e. the commit hash) is used to build the TEE image identified by the workloadId.", - "params": { - "commitHash": "The 40-character hexadecimal commit hash of the git repository whose source code is used to build the TEE image identified by the workloadId", - "sourceLocators": "An array of URIs pointing to the source code", - "workloadId": "The workload identifier" - } - }, - "computeStructHash(uint8,bytes32,uint256)": { - "params": { - "blockContentHash": "The hash of the block content", - "nonce": "The nonce to use for the EIP-712 signature", - "version": "The version of the flashtestation's protocol" - }, - "returns": { - "_0": "The struct hash for the EIP-712 signature" - } - }, - "domainSeparator()": { - "details": "This is useful for when both onchain and offchain users want to compute the domain separator for the EIP-712 signature, and then use it to verify the signature", - "returns": { - "_0": "The domain separator for the EIP-712 signature" - } - }, - "eip712Domain()": { - "details": "returns the fields and values that describe the domain separator used by this contract for EIP-712 signature." - }, - "getHashedTypeDataV4(bytes32)": { - "params": { - "structHash": "The struct hash for the EIP-712 signature" - }, - "returns": { - "_0": "The digest for the EIP-712 signature" - } - }, - "getWorkloadMetadata(bytes32)": { - "details": "This is only updateable by governance (i.e. the owner) of the Policy contract Adding and removing a workload is O(1)", - "params": { - "workloadId": "The workload identifier to query" - }, - "returns": { - "_0": "The metadata associated with the workload" - } - }, - "initialize(address,address)": { - "params": { - "_initialOwner": "The address of the initial owner of the contract", - "_registry": "The address of the registry contract" - } - }, - "isAllowedPolicy(address)": { - "params": { - "teeAddress": "The TEE-controlled address" - }, - "returns": { - "_1": "The workloadId of the TEE that is using an approved workload in the policy, or 0 if the TEE is not using an approved workload in the policy", - "allowed": "True if the TEE is using an approved workload in the policy" - } - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": { - "details": "This function is useful if you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, but note that because of the larger number of function arguments, will cost more gas than the non-EIP-712 verifyBlockBuilderProof function", - "params": { - "blockContentHash": "The hash of the block content", - "eip712Sig": "The EIP-712 signature of the verification message", - "nonce": "The nonce to use for the EIP-712 signature", - "version": "The version of the flashtestation's protocol used to generate the block builder proof" - } - }, - "proxiableUUID()": { - "details": "Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier." - }, - "removeWorkloadFromPolicy(bytes32)": { - "params": { - "workloadId": "The workload identifier" - } - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeToAndCall(address,bytes)": { - "custom:oz-upgrades-unsafe-allow-reachable": "delegatecall", - "details": "Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event." - }, - "verifyBlockBuilderProof(uint8,bytes32)": { - "details": "If you do not want to deal with the operational difficulties of keeping your TEE-controlled addresses funded, you can use the permitVerifyBlockBuilderProof function instead which costs more gas, but allows any EOA to submit a block builder proof on behalf of a TEE", - "params": { - "blockContentHash": "The hash of the block content", - "version": "The version of the flashtestation's protocol used to generate the block builder proof" - } - }, - "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": { - "details": "Think of the workload identifier as the version of the application for governance. The workloadId verifiably maps to a version of source code that builds the TEE VM image", - "params": { - "registration": "The registration data from a TEE device" - }, - "returns": { - "_0": "workloadId The computed workload identifier" - } - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH()": { - "notice": "EIP-712 Typehash, used in the permitVerifyBlockBuilderProof function" - }, - "addWorkloadToPolicy(bytes32,string,string[])": { - "notice": "Add a workload to a policy (governance only)Only the owner of this contract can add workloads to the policy and it is the responsibility of the owner to ensure that the workload is valid otherwise the address associated with this workload has full power to do anything who's authorization is based on this policy" - }, - "computeStructHash(uint8,bytes32,uint256)": { - "notice": "Computes the struct hash for the EIP-712 signature" - }, - "domainSeparator()": { - "notice": "Returns the domain separator for the EIP-712 signature" - }, - "getHashedTypeDataV4(bytes32)": { - "notice": "Computes the digest for the EIP-712 signature" - }, - "getWorkloadMetadata(bytes32)": { - "notice": "Mapping from workloadId to its metadata (commit hash and source locators)" - }, - "initialize(address,address)": { - "notice": "Initializer to set the FlashtestationRegistry contract which verifies TEE quotes and the initial owner of the contract" - }, - "isAllowedPolicy(address)": { - "notice": "Check if this TEE-controlled address has registered a valid TEE workload with the registry, and if the workload is approved under this policy" - }, - "nonces(address)": { - "notice": "Tracks nonces for EIP-712 signatures to prevent replay attacks" - }, - "permitVerifyBlockBuilderProof(uint8,bytes32,uint256,bytes)": { - "notice": "Verify a block builder proof with a Flashtestation Transaction using EIP-712 signaturesThis function allows any EOA to submit a block builder proof on behalf of a TEEThe TEE must sign a proper EIP-712-formatted message, and the signer must match a TEE-controlled address whose associated workload is approved under this policy" - }, - "registry()": { - "notice": "Address of the FlashtestationRegistry contract that verifies TEE quotes" - }, - "removeWorkloadFromPolicy(bytes32)": { - "notice": "Remove a workload from a policy (governance only)" - }, - "verifyBlockBuilderProof(uint8,bytes32)": { - "notice": "Verify a block builder proof with a Flashtestation TransactionThis function will only succeed if the caller is a registered TEE-controlled address from an attested TEE and the TEE is running an approved block builder workload (see `addWorkloadToPolicy`)The blockContentHash is a keccak256 hash of a subset of the block header, as specified by the version. See the [flashtestations spec](https://github.com/flashbots/rollup-boost/blob/main/specs/flashtestations.md) for more details" - }, - "workloadIdForTDRegistration((bool,bytes,(bytes16,bytes,bytes,bytes8,bytes8,bytes8,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes,bytes),bytes,bytes32))": { - "notice": "Application specific mapping of registration data to a workload identifier" - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@automata-network/on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/", - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/", - "@sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/src/", - "automata-dcap-attestation/=lib/automata-dcap-attestation/evm/", - "automata-on-chain-pccs/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/", - "ds-test/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", - "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "risc0-ethereum/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/", - "risc0/=lib/automata-dcap-attestation/evm/lib/risc0-ethereum/contracts/src/", - "solady/=lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/", - "solmate/=lib/solmate/", - "sp1-contracts/=lib/automata-dcap-attestation/evm/lib/sp1-contracts/contracts/" - ], - "optimizer": { - "enabled": true, - "runs": 44444444 - }, - "metadata": { - "bytecodeHash": "none" - }, - "compilationTarget": { - "src/BlockBuilderPolicy.sol": "BlockBuilderPolicy" - }, - "evmVersion": "prague", - "libraries": {}, - "viaIR": true - }, - "sources": { - "lib/automata-dcap-attestation/evm/contracts/types/CommonStruct.sol": { - "keccak256": "0xc1968270cffd0b96268c9695d81647e707a6e1e7c1b851c1d6b1f9af6a88d4f2", - "urls": [ - "bzz-raw://d4e56c233fbb8e448961f5b847b92a8e725cc56ed9e0ad764d790f1cd4896245", - "dweb:/ipfs/QmVoUKR62HT6DKaR3rNnNr5w1CmDSbrDriX41ycTAzKodz" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/contracts/types/Constants.sol": { - "keccak256": "0xcfaac1552ee9277f6b0e4e38bdee7d2e07d1bdfe188c294c5c3f37f152b1d099", - "urls": [ - "bzz-raw://89a8a55be811abd8cc8af234d489c64a84f08023061ade4e67dbbaf11468cdc4", - "dweb:/ipfs/QmR1TWqBcAEFbtteg2xjVG4VJXeFVWoAQidR3jyWuaGpUf" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/contracts/types/V4Structs.sol": { - "keccak256": "0x39726e2cc0de02e8b34c0da2e6885fa9d18b7905970b9745e5310fb12cde9dd4", - "urls": [ - "bzz-raw://ddf5ab4f4188de35bb9c03137b207d56d69629283b9cb683eebdfafe7ff015ee", - "dweb:/ipfs/QmTmYBmBEUbxMESjeaF6cSPMSK5P8hv16tDXTk78LXiKpz" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/DateTimeLib.sol": { - "keccak256": "0x3945a985a34bc905beb149f7196f1dba021a60abc2f178ab2eb3a28ed4f94741", - "urls": [ - "bzz-raw://828a14ebcf4bd777c73ecbedd726819ac37c3b2e4fab7c8fe263f860db725f72", - "dweb:/ipfs/QmNW32zDLCVjbGecmZvxAaSdmDudHQSsdrFfpMYX6baGAv" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/JSONParserLib.sol": { - "keccak256": "0x8d4aeacf0459b28b40b63c9d331dc95cf7d751ca9961c83c89c1ad73b9b3cd81", - "urls": [ - "bzz-raw://42cc6de802e8c17668ae82518caa4c053e82f1884329d1d924fa7b9fccf5041f", - "dweb:/ipfs/QmPGLfqWXDCjjcZ2VEG8kRwasGFxR4u62RpLLBuLqXy9wP" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/lib/solady/src/utils/LibString.sol": { - "keccak256": "0x74ec81acbea6db4afe149ab51e26961bcb801af42f7af98242be71b866066200", - "urls": [ - "bzz-raw://16bb49824fcfa9667aeed0eb515fdefda1016225085cf78ed852078c67168229", - "dweb:/ipfs/QmZ59xrx5QLSx5N5CiTLrfwsPKR7kpK4RRpiEWSMEpvDzQ" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/FmspcTcbHelper.sol": { - "keccak256": "0x3041391dfb9e2dcb6ed27e9b89445a9206c5348da3f2753785c22c832878f226", - "urls": [ - "bzz-raw://883bd1cb7d425828b8b9c92052f16fbcc893e6cdd175e3616a99b857b723a808", - "dweb:/ipfs/QmZWqGm2D9AFrxzAsad7xkLSKuH1NQb7VEdFKwJbumj8EU" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/helpers/X509Helper.sol": { - "keccak256": "0x4b4a56e80792b64604975e52d1aad2e075bd49c94b36814aa6461fbd69b6a03e", - "urls": [ - "bzz-raw://7ea019efcc3904401a694b5704d7cb219b20f7cc11a5d4268b0015628fb71713", - "dweb:/ipfs/QmezJCskd9hVoERyUNk6Y9qK8oQxmen5HqasNgz8diyk6V" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/Asn1Decode.sol": { - "keccak256": "0xc7a6f959ce3d98244e28ff140c0f3eb5fae6349d93e250a49cbf9fdd0e7ac8e6", - "urls": [ - "bzz-raw://7c0760856218edc38ead344bd2587118a2a72a23d0d410e57c7e48251f313e3c", - "dweb:/ipfs/QmdNu9g5GWgEuS1ShgCqHckE1cSjfpt9LJb2t1A2CKAFfB" - ], - "license": "MIT" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/BytesUtils.sol": { - "keccak256": "0x9a9028cd3bc73fb8ff9404907c980df141fd06351f9ea79b32754d05cae25f85", - "urls": [ - "bzz-raw://eaf5b855f3013a40e5d6b62fd9a7b7077a06b1750fabc53b8514ba4cf0006bed", - "dweb:/ipfs/QmXKHL2zH51od64bYa8pifwEQF8UzccPBE2x7K5uvq4JeQ" - ], - "license": "BSD 2-Clause License" - }, - "lib/automata-dcap-attestation/evm/lib/automata-on-chain-pccs/src/utils/DateTimeUtils.sol": { - "keccak256": "0xee25670c66115185f0f0ab6070ade945faff8f75b502b70c2597a02868a02a4f", - "urls": [ - "bzz-raw://5c08c26dbd2e3196b3e16f7b8d2daa29c472997a845d5dc731f3bf17b7784d02", - "dweb:/ipfs/QmUMwg7SvYQpgwcnDkGM9vnau2SqoYzwsGcB8CM2MLZueP" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { - "keccak256": "0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a", - "urls": [ - "bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6", - "dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { - "keccak256": "0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05", - "urls": [ - "bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08", - "dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol": { - "keccak256": "0x574a7451e42724f7de29e2855c392a8a5020acd695169466a18459467d719d63", - "urls": [ - "bzz-raw://5bc189f63b639ee173dd7b6fecc39baf7113bf161776aea22b34c57fdd1872ec", - "dweb:/ipfs/QmZAf2VtjDLRULqjJkde6LNsxAg12tUqpPqgUQQZbAjgtZ" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { - "keccak256": "0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397", - "urls": [ - "bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9", - "dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/ReentrancyGuardTransientUpgradeable.sol": { - "keccak256": "0x391a52a14dfcbe1a9ca16f1c052481de32242cf45714d92dab81be2a987e4bba", - "urls": [ - "bzz-raw://248b69f99e0452696ce5a2c90aac5602f496e2a697dacd5510d050f0dc833a3c", - "dweb:/ipfs/QmcYkMiFQhTs2AW5fmcV5a3XQAGdQBUz1Y2NQD4RvBrNTM" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol": { - "keccak256": "0x89374b2a634f0a9c08f5891b6ecce0179bc2e0577819c787ed3268ca428c2459", - "urls": [ - "bzz-raw://f13d2572e5bdd55e483dfac069aac47603644071616a41fce699e94368e38c13", - "dweb:/ipfs/QmfKeyNT6vyb99vJQatPZ88UyZgXNmAiHUXSWnaR1TPE11" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol": { - "keccak256": "0xbf2aefe54b76d7f7bcd4f6da1080b7b1662611937d870b880db584d09cea56b5", - "urls": [ - "bzz-raw://f5e7e2f12e0feec75296e57f51f82fdaa8bd1551f4b8cc6560442c0bf60f818c", - "dweb:/ipfs/QmcW9wDMaQ8RbQibMarfp17a3bABzY5KraWe2YDwuUrUoz" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol": { - "keccak256": "0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee", - "urls": [ - "bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae", - "dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { - "keccak256": "0x82f757819bf2429a0d4db141b99a4bbe5039e4ef86dfb94e2e6d40577ed5b28b", - "urls": [ - "bzz-raw://37c30ed931e19fb71fdb806bb504cfdb9913b7127545001b64d4487783374422", - "dweb:/ipfs/QmUBHpv4hm3ZmwJ4GH8BeVzK4mv41Q6vBbWXxn8HExPXza" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol": { - "keccak256": "0xa1ad192cd45317c788618bef5cb1fb3ca4ce8b230f6433ac68cc1d850fb81618", - "urls": [ - "bzz-raw://b43447bb85a53679d269a403c693b9d88d6c74177dfb35eddca63abaf7cf110a", - "dweb:/ipfs/QmXSDmpd4bNZj1PDgegr6C4w1jDaWHXCconC3rYiw9TSkQ" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { - "keccak256": "0x20462ddb2665e9521372c76b001d0ce196e59dbbd989de9af5576cad0bd5628b", - "urls": [ - "bzz-raw://f417fd12aeec8fbfaceaa30e3a08a0724c0bc39de363e2acf6773c897abbaf6d", - "dweb:/ipfs/QmU4Hko6sApdweVM92CsiuLKkCk8HfyBeutF89PCTz5Tye" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol": { - "keccak256": "0x6d0ae6e206645341fd122d278c2cb643dea260c190531f2f3f6a0426e77b00c0", - "urls": [ - "bzz-raw://032d1201d839435be2c85b72e33206b3ea980c569d6ebf7fa57d811ab580a82f", - "dweb:/ipfs/QmeqQjAtMvdZT2tG7zm39itcRJkuwu8AEReK6WRnLJ18DD" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol": { - "keccak256": "0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123", - "urls": [ - "bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf", - "dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Panic.sol": { - "keccak256": "0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a", - "urls": [ - "bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a", - "dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { - "keccak256": "0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97", - "urls": [ - "bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b", - "dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "keccak256": "0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4", - "urls": [ - "bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e", - "dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/TransientSlot.sol": { - "keccak256": "0xac673fa1e374d9e6107504af363333e3e5f6344d2e83faf57d9bfd41d77cc946", - "urls": [ - "bzz-raw://5982478dbbb218e9dd5a6e83f5c0e8d1654ddf20178484b43ef21dd2246809de", - "dweb:/ipfs/QmaB1hS68n2kG8vTbt7EPEzmrGhkUbfiFyykGGLsAr9X22" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84", - "urls": [ - "bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9", - "dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": { - "keccak256": "0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631", - "urls": [ - "bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59", - "dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "keccak256": "0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6", - "urls": [ - "bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3", - "dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": { - "keccak256": "0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54", - "urls": [ - "bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8", - "dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { - "keccak256": "0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3", - "urls": [ - "bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03", - "dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ" - ], - "license": "MIT" - }, - "src/BlockBuilderPolicy.sol": { - "keccak256": "0x7c3d3ba04441108b91651c8b9c4dee65b2c3bb7e71fc0a55f1d3bd08ad8635cb", - "urls": [ - "bzz-raw://48d897893c99de682f4a44c3158f7bdf489c5d8557800906142cc300e2318806", - "dweb:/ipfs/QmSjnpDXmwHcHei6dX6gQzMWUz3cZFF2JfKFH2yXnGQu3c" - ], - "license": "MIT" - }, - "src/FlashtestationRegistry.sol": { - "keccak256": "0x7409a55e63172d86293b538b0dc0c55ff69c00b541f9b7a26709c8309cb194c2", - "urls": [ - "bzz-raw://e35b2e23522c9dcd0bfa45e5ea70d623f7a9fb61a353e00492f64a140a31eeab", - "dweb:/ipfs/QmbaPWPRsrd42C79hgS4Nrx2mAba4rEzRqz8guFUAVM6js" - ], - "license": "MIT" - }, - "src/interfaces/IAttestation.sol": { - "keccak256": "0x2171e821adc778a1d451e06df44f8efd56648425489f1032c52bb90dd2adedb8", - "urls": [ - "bzz-raw://887140a9dfb7384d1dd7ae58001cc2e36fba193493ca89376b91be41b788b79a", - "dweb:/ipfs/QmVH8KdzFFDtLipA3WvojpRMc2uSmGjKnCAdgwkLHVq6Lf" - ], - "license": "MIT" - }, - "src/interfaces/IBlockBuilderPolicy.sol": { - "keccak256": "0x54a5fd427b7e2b926ff3f6eb361211f2a84a2c52fa8c641471e53b6bbe859d97", - "urls": [ - "bzz-raw://4a8ca0f86c046fa571befee3dc0c8a839ec83d932d999c09fa3a701c8e842901", - "dweb:/ipfs/QmP2pbZ1Xwhg2avcBxpsjL6vLGcS5vyoeqUDRq4xWNDKXw" - ], - "license": "MIT" - }, - "src/interfaces/IFlashtestationRegistry.sol": { - "keccak256": "0xe21137526212ed0946cd655935b1d1efb214520047dfb84053ecc1bc00095db8", - "urls": [ - "bzz-raw://589ad601f708e5e8b0c66760ea18b08fb028c61919f5d5222cf8916f1c283365", - "dweb:/ipfs/QmPGsofEZJigrAcSwawQ8EyUtyv15RmRZ36L2j97H1G6tK" - ], - "license": "MIT" - }, - "src/utils/QuoteParser.sol": { - "keccak256": "0xf8462661ddcf40037053c2f1527e8f56b12211ee2311fd6c3b8979ed392df702", - "urls": [ - "bzz-raw://20a30b5ea00b46fff0d3624d5a4a04cad774457775ea362ed0d17cf1f454deeb", - "dweb:/ipfs/QmbFB8yZdRj9j7id9ShHb7cxFFnKiaygLa6Abexa1b5tRG" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 60637, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "approvedWorkloads", - "offset": 0, - "slot": "0", - "type": "t_mapping(t_bytes32,t_struct(WorkloadMetadata)61869_storage)" - }, - { - "astId": 60640, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "registry", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 60645, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "nonces", - "offset": 0, - "slot": "2", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 60651, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "cachedWorkloads", - "offset": 0, - "slot": "3", - "type": "t_mapping(t_address,t_struct(CachedWorkload)60611_storage)" - }, - { - "astId": 60656, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "__gap", - "offset": 0, - "slot": "4", - "type": "t_array(t_uint256)46_storage" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_string_storage)dyn_storage": { - "encoding": "dynamic_array", - "label": "string[]", - "numberOfBytes": "32", - "base": "t_string_storage" - }, - "t_array(t_uint256)46_storage": { - "encoding": "inplace", - "label": "uint256[46]", - "numberOfBytes": "1472", - "base": "t_uint256" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_struct(CachedWorkload)60611_storage)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => struct CachedWorkload)", - "numberOfBytes": "32", - "value": "t_struct(CachedWorkload)60611_storage" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_struct(WorkloadMetadata)61869_storage)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)", - "numberOfBytes": "32", - "value": "t_struct(WorkloadMetadata)61869_storage" - }, - "t_string_storage": { - "encoding": "bytes", - "label": "string", - "numberOfBytes": "32" - }, - "t_struct(CachedWorkload)60611_storage": { - "encoding": "inplace", - "label": "struct CachedWorkload", - "numberOfBytes": "64", - "members": [ - { - "astId": 60607, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "workloadId", - "offset": 0, - "slot": "0", - "type": "t_userDefinedValueType(WorkloadId)61861" - }, - { - "astId": 60610, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "quoteHash", - "offset": 0, - "slot": "1", - "type": "t_bytes32" - } - ] - }, - "t_struct(WorkloadMetadata)61869_storage": { - "encoding": "inplace", - "label": "struct IBlockBuilderPolicy.WorkloadMetadata", - "numberOfBytes": "64", - "members": [ - { - "astId": 61865, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "commitHash", - "offset": 0, - "slot": "0", - "type": "t_string_storage" - }, - { - "astId": 61868, - "contract": "src/BlockBuilderPolicy.sol:BlockBuilderPolicy", - "label": "sourceLocators", - "offset": 0, - "slot": "1", - "type": "t_array(t_string_storage)dyn_storage" - } - ] - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_userDefinedValueType(WorkloadId)61861": { - "encoding": "inplace", - "label": "WorkloadId", - "numberOfBytes": "32" - } - } - }, - "ast": { - "absolutePath": "src/BlockBuilderPolicy.sol", - "id": 61240, - "exportedSymbols": { - "BlockBuilderPolicy": [ - 61239 - ], - "CachedWorkload": [ - 60611 - ], - "ECDSA": [ - 52398 - ], - "EIP712Upgradeable": [ - 49049 - ], - "FlashtestationRegistry": [ - 61842 - ], - "IBlockBuilderPolicy": [ - 62049 - ], - "IFlashtestationRegistry": [ - 62267 - ], - "Initializable": [ - 48392 - ], - "OwnableUpgradeable": [ - 48124 - ], - "UUPSUpgradeable": [ - 48574 - ], - "WorkloadId": [ - 61861 - ] - }, - "nodeType": "SourceUnit", - "src": "32:13381:71", - "nodes": [ - { - "id": 60585, - "nodeType": "PragmaDirective", - "src": "32:23:71", - "nodes": [], - "literals": [ - "solidity", - "0.8", - ".28" - ] - }, - { - "id": 60587, - "nodeType": "ImportDirective", - "src": "57:96:71", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 48393, - "symbolAliases": [ - { - "foreign": { - "id": 60586, - "name": "Initializable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48392, - "src": "65:13:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60589, - "nodeType": "ImportDirective", - "src": "154:100:71", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 48575, - "symbolAliases": [ - { - "foreign": { - "id": 60588, - "name": "UUPSUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48574, - "src": "162:15:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60591, - "nodeType": "ImportDirective", - "src": "255:101:71", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 48125, - "symbolAliases": [ - { - "foreign": { - "id": 60590, - "name": "OwnableUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48124, - "src": "263:18:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60593, - "nodeType": "ImportDirective", - "src": "357:111:71", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/utils/cryptography/EIP712Upgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 49050, - "symbolAliases": [ - { - "foreign": { - "id": 60592, - "name": "EIP712Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 49049, - "src": "365:17:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60595, - "nodeType": "ImportDirective", - "src": "469:75:71", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol", - "file": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 52399, - "symbolAliases": [ - { - "foreign": { - "id": 60594, - "name": "ECDSA", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 52398, - "src": "477:5:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60597, - "nodeType": "ImportDirective", - "src": "545:68:71", - "nodes": [], - "absolutePath": "src/FlashtestationRegistry.sol", - "file": "./FlashtestationRegistry.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 61843, - "symbolAliases": [ - { - "foreign": { - "id": 60596, - "name": "FlashtestationRegistry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61842, - "src": "553:22:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60599, - "nodeType": "ImportDirective", - "src": "614:81:71", - "nodes": [], - "absolutePath": "src/interfaces/IFlashtestationRegistry.sol", - "file": "./interfaces/IFlashtestationRegistry.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 62268, - "symbolAliases": [ - { - "foreign": { - "id": 60598, - "name": "IFlashtestationRegistry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62267, - "src": "622:23:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60602, - "nodeType": "ImportDirective", - "src": "696:85:71", - "nodes": [], - "absolutePath": "src/interfaces/IBlockBuilderPolicy.sol", - "file": "./interfaces/IBlockBuilderPolicy.sol", - "nameLocation": "-1:-1:-1", - "scope": 61240, - "sourceUnit": 62050, - "symbolAliases": [ - { - "foreign": { - "id": 60600, - "name": "IBlockBuilderPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62049, - "src": "704:19:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - }, - { - "foreign": { - "id": 60601, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "725:10:71", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 60611, - "nodeType": "StructDefinition", - "src": "944:208:71", - "nodes": [], - "canonicalName": "CachedWorkload", - "documentation": { - "id": 60603, - "nodeType": "StructuredDocumentation", - "src": "783:160:71", - "text": " @notice Cached workload information for gas optimization\n @dev Stores computed workloadId and associated quoteHash to avoid expensive recomputation" - }, - "members": [ - { - "constant": false, - "id": 60607, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "1032:10:71", - "nodeType": "VariableDeclaration", - "scope": 60611, - "src": "1021:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60606, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60605, - "name": "WorkloadId", - "nameLocations": [ - "1021:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "1021:10:71" - }, - "referencedDeclaration": 61861, - "src": "1021:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60610, - "mutability": "mutable", - "name": "quoteHash", - "nameLocation": "1140:9:71", - "nodeType": "VariableDeclaration", - "scope": 60611, - "src": "1132:17:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60609, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1132:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "name": "CachedWorkload", - "nameLocation": "951:14:71", - "scope": 61240, - "visibility": "public" - }, - { - "id": 61239, - "nodeType": "ContractDefinition", - "src": "2021:11391:71", - "nodes": [ - { - "id": 60625, - "nodeType": "UsingForDirective", - "src": "2169:24:71", - "nodes": [], - "global": false, - "libraryName": { - "id": 60623, - "name": "ECDSA", - "nameLocations": [ - "2175:5:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 52398, - "src": "2175:5:71" - }, - "typeName": { - "id": 60624, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2185:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - }, - { - "id": 60631, - "nodeType": "VariableDeclaration", - "src": "2291:160:71", - "nodes": [], - "baseFunctions": [ - 62048 - ], - "constant": true, - "documentation": { - "id": 60626, - "nodeType": "StructuredDocumentation", - "src": "2251:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "73016923", - "mutability": "constant", - "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", - "nameLocation": "2315:35:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60627, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2291:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": { - "arguments": [ - { - "hexValue": "566572696679426c6f636b4275696c64657250726f6f662875696e74382076657273696f6e2c6279746573333220626c6f636b436f6e74656e74486173682c75696e74323536206e6f6e636529", - "id": 60629, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2371:79:71", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc", - "typeString": "literal_string \"VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)\"" - }, - "value": "VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_93b3c192de39a93da71b94fb9fadb8e913f752a2e9ea950a33266a81fcbf2ffc", - "typeString": "literal_string \"VerifyBlockBuilderProof(uint8 version,bytes32 blockContentHash,uint256 nonce)\"" - } - ], - "id": 60628, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "2361:9:71", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 60630, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2361:90:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "public" - }, - { - "id": 60637, - "nodeType": "VariableDeclaration", - "src": "2887:73:71", - "nodes": [], - "constant": false, - "documentation": { - "id": 60632, - "nodeType": "StructuredDocumentation", - "src": "2510:372:71", - "text": "@notice Mapping from workloadId to its metadata (commit hash and source locators)\n @dev This is only updateable by governance (i.e. the owner) of the Policy contract\n Adding and removing a workload is O(1).\n This means the critical `_cachedIsAllowedPolicy` function is O(1) since we can directly check if a workloadId exists\n in the mapping" - }, - "mutability": "mutable", - "name": "approvedWorkloads", - "nameLocation": "2943:17:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)" - }, - "typeName": { - "id": 60636, - "keyName": "workloadId", - "keyNameLocation": "2903:10:71", - "keyType": { - "id": 60633, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "2895:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Mapping", - "src": "2887:47:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 60635, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60634, - "name": "WorkloadMetadata", - "nameLocations": [ - "2917:16:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61869, - "src": "2917:16:71" - }, - "referencedDeclaration": 61869, - "src": "2917:16:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage_ptr", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" - } - } - }, - "visibility": "private" - }, - { - "id": 60640, - "nodeType": "VariableDeclaration", - "src": "3007:23:71", - "nodes": [], - "baseFunctions": [ - 62034 - ], - "constant": false, - "documentation": { - "id": 60638, - "nodeType": "StructuredDocumentation", - "src": "2967:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "7b103999", - "mutability": "mutable", - "name": "registry", - "nameLocation": "3022:8:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60639, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3007:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "public" - }, - { - "id": 60645, - "nodeType": "VariableDeclaration", - "src": "3077:64:71", - "nodes": [], - "baseFunctions": [ - 62042 - ], - "constant": false, - "documentation": { - "id": 60641, - "nodeType": "StructuredDocumentation", - "src": "3037:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "7ecebe00", - "mutability": "mutable", - "name": "nonces", - "nameLocation": "3135:6:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "typeName": { - "id": 60644, - "keyName": "teeAddress", - "keyNameLocation": "3093:10:71", - "keyType": { - "id": 60642, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3085:7:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3077:50:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - }, - "valueName": "permitNonce", - "valueNameLocation": "3115:11:71", - "valueType": { - "id": 60643, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3107:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "visibility": "public" - }, - { - "id": 60651, - "nodeType": "VariableDeclaration", - "src": "3308:69:71", - "nodes": [], - "constant": false, - "documentation": { - "id": 60646, - "nodeType": "StructuredDocumentation", - "src": "3148:155:71", - "text": "@notice Cache of computed workloadIds to avoid expensive recomputation\n @dev Maps teeAddress to cached workload information for gas optimization" - }, - "mutability": "mutable", - "name": "cachedWorkloads", - "nameLocation": "3362:15:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", - "typeString": "mapping(address => struct CachedWorkload)" - }, - "typeName": { - "id": 60650, - "keyName": "teeAddress", - "keyNameLocation": "3324:10:71", - "keyType": { - "id": 60647, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3316:7:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Mapping", - "src": "3308:45:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", - "typeString": "mapping(address => struct CachedWorkload)" - }, - "valueName": "", - "valueNameLocation": "-1:-1:-1", - "valueType": { - "id": 60649, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60648, - "name": "CachedWorkload", - "nameLocations": [ - "3338:14:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 60611, - "src": "3338:14:71" - }, - "referencedDeclaration": 60611, - "src": "3338:14:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage_ptr", - "typeString": "struct CachedWorkload" - } - } - }, - "visibility": "private" - }, - { - "id": 60656, - "nodeType": "VariableDeclaration", - "src": "3600:17:71", - "nodes": [], - "constant": false, - "documentation": { - "id": 60652, - "nodeType": "StructuredDocumentation", - "src": "3384:211:71", - "text": "@dev Storage gap to allow for future storage variable additions in upgrades\n @dev This reserves 46 storage slots (out of 50 total - 4 used for approvedWorkloads, registry, nonces, and cachedWorkloads)" - }, - "mutability": "mutable", - "name": "__gap", - "nameLocation": "3612:5:71", - "scope": 61239, - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$46_storage", - "typeString": "uint256[46]" - }, - "typeName": { - "baseType": { - "id": 60653, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "3600:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 60655, - "length": { - "hexValue": "3436", - "id": 60654, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3608:2:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_46_by_1", - "typeString": "int_const 46" - }, - "value": "46" - }, - "nodeType": "ArrayTypeName", - "src": "3600:11:71", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_uint256_$46_storage_ptr", - "typeString": "uint256[46]" - } - }, - "visibility": "internal" - }, - { - "id": 60699, - "nodeType": "FunctionDefinition", - "src": "3664:351:71", - "nodes": [], - "body": { - "id": 60698, - "nodeType": "Block", - "src": "3756:259:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 60668, - "name": "_initialOwner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60659, - "src": "3781:13:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60667, - "name": "__Ownable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 47984, - "src": "3766:14:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 60669, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3766:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60670, - "nodeType": "ExpressionStatement", - "src": "3766:29:71" - }, - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 60671, - "name": "__UUPSUpgradeable_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48446, - "src": "3805:22:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 60672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3805:24:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60673, - "nodeType": "ExpressionStatement", - "src": "3805:24:71" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "426c6f636b4275696c646572506f6c696379", - "id": 60675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3853:20:71", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_cbeb49ca47be8803ce2a0d04c03e1532e2fe91bbb42a2a5d9922693dc31e4646", - "typeString": "literal_string \"BlockBuilderPolicy\"" - }, - "value": "BlockBuilderPolicy" - }, - { - "hexValue": "31", - "id": 60676, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3875:3:71", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_cbeb49ca47be8803ce2a0d04c03e1532e2fe91bbb42a2a5d9922693dc31e4646", - "typeString": "literal_string \"BlockBuilderPolicy\"" - }, - { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - } - ], - "id": 60674, - "name": "__EIP712_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48762, - "src": "3839:13:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 60677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3839:40:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60678, - "nodeType": "ExpressionStatement", - "src": "3839:40:71" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 60685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 60680, - "name": "_registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60661, - "src": "3897:9:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 60683, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3918:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 60682, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3910:7:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 60681, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3910:7:71", - "typeDescriptions": {} - } - }, - "id": 60684, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3910:10:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3897:23:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 60686, - "name": "InvalidRegistry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61900, - "src": "3922:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 60687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3922:17:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 60679, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "3889:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 60688, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3889:51:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60689, - "nodeType": "ExpressionStatement", - "src": "3889:51:71" - }, - { - "expression": { - "id": 60692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "id": 60690, - "name": "registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60640, - "src": "3951:8:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 60691, - "name": "_registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60661, - "src": "3962:9:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "3951:20:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 60693, - "nodeType": "ExpressionStatement", - "src": "3951:20:71" - }, - { - "eventCall": { - "arguments": [ - { - "id": 60695, - "name": "_registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60661, - "src": "3998:9:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60694, - "name": "RegistrySet", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61884, - "src": "3986:11:71", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 60696, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3986:22:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60697, - "nodeType": "EmitStatement", - "src": "3981:27:71" - } - ] - }, - "baseFunctions": [ - 61932 - ], - "documentation": { - "id": 60657, - "nodeType": "StructuredDocumentation", - "src": "3624:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "485cc955", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 60665, - "kind": "modifierInvocation", - "modifierName": { - "id": 60664, - "name": "initializer", - "nameLocations": [ - "3744:11:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48232, - "src": "3744:11:71" - }, - "nodeType": "ModifierInvocation", - "src": "3744:11:71" - } - ], - "name": "initialize", - "nameLocation": "3673:10:71", - "overrides": { - "id": 60663, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "3735:8:71" - }, - "parameters": { - "id": 60662, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60659, - "mutability": "mutable", - "name": "_initialOwner", - "nameLocation": "3692:13:71", - "nodeType": "VariableDeclaration", - "scope": 60699, - "src": "3684:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60658, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3684:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60661, - "mutability": "mutable", - "name": "_registry", - "nameLocation": "3715:9:71", - "nodeType": "VariableDeclaration", - "scope": 60699, - "src": "3707:17:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60660, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "3707:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "3683:42:71" - }, - "returnParameters": { - "id": 60666, - "nodeType": "ParameterList", - "parameters": [], - "src": "3756:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 60709, - "nodeType": "FunctionDefinition", - "src": "4150:84:71", - "nodes": [], - "body": { - "id": 60708, - "nodeType": "Block", - "src": "4232:2:71", - "nodes": [], - "statements": [] - }, - "baseFunctions": [ - 48528 - ], - "documentation": { - "id": 60700, - "nodeType": "StructuredDocumentation", - "src": "4021:124:71", - "text": "@notice Restricts upgrades to owner only\n @param newImplementation The address of the new implementation contract" - }, - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 60706, - "kind": "modifierInvocation", - "modifierName": { - "id": 60705, - "name": "onlyOwner", - "nameLocations": [ - "4222:9:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48019, - "src": "4222:9:71" - }, - "nodeType": "ModifierInvocation", - "src": "4222:9:71" - } - ], - "name": "_authorizeUpgrade", - "nameLocation": "4159:17:71", - "overrides": { - "id": 60704, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4213:8:71" - }, - "parameters": { - "id": 60703, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60702, - "mutability": "mutable", - "name": "newImplementation", - "nameLocation": "4185:17:71", - "nodeType": "VariableDeclaration", - "scope": 60709, - "src": "4177:25:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60701, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4177:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "4176:27:71" - }, - "returnParameters": { - "id": 60707, - "nodeType": "ParameterList", - "parameters": [], - "src": "4232:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 60726, - "nodeType": "FunctionDefinition", - "src": "4280:172:71", - "nodes": [], - "body": { - "id": 60725, - "nodeType": "Block", - "src": "4372:80:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "expression": { - "id": 60719, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "4407:3:71", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 60720, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4411:6:71", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "4407:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 60721, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60712, - "src": "4419:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 60722, - "name": "blockContentHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60714, - "src": "4428:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 60718, - "name": "_verifyBlockBuilderProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60833, - "src": "4382:24:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$returns$__$", - "typeString": "function (address,uint8,bytes32)" - } - }, - "id": 60723, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4382:63:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60724, - "nodeType": "ExpressionStatement", - "src": "4382:63:71" - } - ] - }, - "baseFunctions": [ - 61940 - ], - "documentation": { - "id": 60710, - "nodeType": "StructuredDocumentation", - "src": "4240:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "b33d59da", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "verifyBlockBuilderProof", - "nameLocation": "4289:23:71", - "overrides": { - "id": 60716, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4363:8:71" - }, - "parameters": { - "id": 60715, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60712, - "mutability": "mutable", - "name": "version", - "nameLocation": "4319:7:71", - "nodeType": "VariableDeclaration", - "scope": 60726, - "src": "4313:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 60711, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4313:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60714, - "mutability": "mutable", - "name": "blockContentHash", - "nameLocation": "4336:16:71", - "nodeType": "VariableDeclaration", - "scope": 60726, - "src": "4328:24:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60713, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4328:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "4312:41:71" - }, - "returnParameters": { - "id": 60717, - "nodeType": "ParameterList", - "parameters": [], - "src": "4372:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 60784, - "nodeType": "FunctionDefinition", - "src": "4498:725:71", - "nodes": [], - "body": { - "id": 60783, - "nodeType": "Block", - "src": "4675:548:71", - "nodes": [], - "statements": [ - { - "assignments": [ - 60740 - ], - "declarations": [ - { - "constant": false, - "id": 60740, - "mutability": "mutable", - "name": "digest", - "nameLocation": "4743:6:71", - "nodeType": "VariableDeclaration", - "scope": 60783, - "src": "4735:14:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60739, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4735:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 60748, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "id": 60743, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60729, - "src": "4790:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 60744, - "name": "blockContentHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60731, - "src": "4799:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 60745, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60733, - "src": "4817:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 60742, - "name": "computeStructHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61228, - "src": "4772:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint8_$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$", - "typeString": "function (uint8,bytes32,uint256) pure returns (bytes32)" - } - }, - "id": 60746, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4772:51:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 60741, - "name": "getHashedTypeDataV4", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61205, - "src": "4752:19:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - "id": 60747, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4752:72:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4735:89:71" - }, - { - "assignments": [ - 60750 - ], - "declarations": [ - { - "constant": false, - "id": 60750, - "mutability": "mutable", - "name": "teeAddress", - "nameLocation": "4842:10:71", - "nodeType": "VariableDeclaration", - "scope": 60783, - "src": "4834:18:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60749, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "4834:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 60755, - "initialValue": { - "arguments": [ - { - "id": 60753, - "name": "eip712Sig", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60735, - "src": "4870:9:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - ], - "expression": { - "id": 60751, - "name": "digest", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60740, - "src": "4855:6:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 60752, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4862:7:71", - "memberName": "recover", - "nodeType": "MemberAccess", - "referencedDeclaration": 52154, - "src": "4855:14:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$attached_to$_t_bytes32_$", - "typeString": "function (bytes32,bytes memory) pure returns (address)" - } - }, - "id": 60754, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4855:25:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4834:46:71" - }, - { - "assignments": [ - 60757 - ], - "declarations": [ - { - "constant": false, - "id": 60757, - "mutability": "mutable", - "name": "expectedNonce", - "nameLocation": "4927:13:71", - "nodeType": "VariableDeclaration", - "scope": 60783, - "src": "4919:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 60756, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4919:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "id": 60761, - "initialValue": { - "baseExpression": { - "id": 60758, - "name": "nonces", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60645, - "src": "4943:6:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 60760, - "indexExpression": { - "id": 60759, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60750, - "src": "4950:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "4943:18:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "4919:42:71" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 60765, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 60763, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60733, - "src": "4979:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 60764, - "name": "expectedNonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60757, - "src": "4988:13:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "4979:22:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 60767, - "name": "expectedNonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60757, - "src": "5016:13:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "id": 60768, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60733, - "src": "5031:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 60766, - "name": "InvalidNonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61918, - "src": "5003:12:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$", - "typeString": "function (uint256,uint256) pure returns (error)" - } - }, - "id": 60769, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5003:34:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 60762, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "4971:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 60770, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4971:67:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60771, - "nodeType": "ExpressionStatement", - "src": "4971:67:71" - }, - { - "expression": { - "id": 60775, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "++", - "prefix": false, - "src": "5080:20:71", - "subExpression": { - "baseExpression": { - "id": 60772, - "name": "nonces", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60645, - "src": "5080:6:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$", - "typeString": "mapping(address => uint256)" - } - }, - "id": 60774, - "indexExpression": { - "id": 60773, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60750, - "src": "5087:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "5080:18:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 60776, - "nodeType": "ExpressionStatement", - "src": "5080:20:71" - }, - { - "expression": { - "arguments": [ - { - "id": 60778, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60750, - "src": "5178:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 60779, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60729, - "src": "5190:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 60780, - "name": "blockContentHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60731, - "src": "5199:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 60777, - "name": "_verifyBlockBuilderProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60833, - "src": "5153:24:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint8_$_t_bytes32_$returns$__$", - "typeString": "function (address,uint8,bytes32)" - } - }, - "id": 60781, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5153:63:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60782, - "nodeType": "ExpressionStatement", - "src": "5153:63:71" - } - ] - }, - "baseFunctions": [ - 61952 - ], - "documentation": { - "id": 60727, - "nodeType": "StructuredDocumentation", - "src": "4458:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "2dd8abfe", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "permitVerifyBlockBuilderProof", - "nameLocation": "4507:29:71", - "overrides": { - "id": 60737, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "4666:8:71" - }, - "parameters": { - "id": 60736, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60729, - "mutability": "mutable", - "name": "version", - "nameLocation": "4552:7:71", - "nodeType": "VariableDeclaration", - "scope": 60784, - "src": "4546:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 60728, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "4546:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60731, - "mutability": "mutable", - "name": "blockContentHash", - "nameLocation": "4577:16:71", - "nodeType": "VariableDeclaration", - "scope": 60784, - "src": "4569:24:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60730, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "4569:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60733, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "4611:5:71", - "nodeType": "VariableDeclaration", - "scope": 60784, - "src": "4603:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 60732, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "4603:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60735, - "mutability": "mutable", - "name": "eip712Sig", - "nameLocation": "4641:9:71", - "nodeType": "VariableDeclaration", - "scope": 60784, - "src": "4626:24:71", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 60734, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "4626:5:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "4536:120:71" - }, - "returnParameters": { - "id": 60738, - "nodeType": "ParameterList", - "parameters": [], - "src": "4675:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 60833, - "nodeType": "FunctionDefinition", - "src": "5648:1056:71", - "nodes": [], - "body": { - "id": 60832, - "nodeType": "Block", - "src": "5752:952:71", - "nodes": [], - "statements": [ - { - "assignments": [ - 60795, - 60798 - ], - "declarations": [ - { - "constant": false, - "id": 60795, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "5866:7:71", - "nodeType": "VariableDeclaration", - "scope": 60832, - "src": "5861:12:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 60794, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "5861:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60798, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "5886:10:71", - "nodeType": "VariableDeclaration", - "scope": 60832, - "src": "5875:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60797, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60796, - "name": "WorkloadId", - "nameLocations": [ - "5875:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "5875:10:71" - }, - "referencedDeclaration": 61861, - "src": "5875:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "id": 60802, - "initialValue": { - "arguments": [ - { - "id": 60800, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60787, - "src": "5923:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60799, - "name": "_cachedIsAllowedPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61013, - "src": "5900:22:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (address) returns (bool,WorkloadId)" - } - }, - "id": 60801, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5900:34:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "5860:74:71" - }, - { - "expression": { - "arguments": [ - { - "id": 60804, - "name": "allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60795, - "src": "5952:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [ - { - "id": 60806, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60787, - "src": "5986:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60805, - "name": "UnauthorizedBlockBuilder", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61911, - "src": "5961:24:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$_t_address_$returns$_t_error_$", - "typeString": "function (address) pure returns (error)" - } - }, - "id": 60807, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5961:36:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 60803, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "5944:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 60808, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "5944:54:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60809, - "nodeType": "ExpressionStatement", - "src": "5944:54:71" - }, - { - "assignments": [ - 60811 - ], - "declarations": [ - { - "constant": false, - "id": 60811, - "mutability": "mutable", - "name": "workloadKey", - "nameLocation": "6472:11:71", - "nodeType": "VariableDeclaration", - "scope": 60832, - "src": "6464:19:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60810, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "6464:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 60816, - "initialValue": { - "arguments": [ - { - "id": 60814, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60798, - "src": "6504:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 60812, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "6486:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60813, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "6497:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "6486:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 60815, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6486:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6464:51:71" - }, - { - "assignments": [ - 60818 - ], - "declarations": [ - { - "constant": false, - "id": 60818, - "mutability": "mutable", - "name": "commitHash", - "nameLocation": "6539:10:71", - "nodeType": "VariableDeclaration", - "scope": 60832, - "src": "6525:24:71", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 60817, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "6525:6:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - } - ], - "id": 60823, - "initialValue": { - "expression": { - "baseExpression": { - "id": 60819, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "6552:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 60821, - "indexExpression": { - "id": 60820, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60811, - "src": "6570:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "6552:30:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 60822, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "6583:10:71", - "memberName": "commitHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 61865, - "src": "6552:41:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6525:68:71" - }, - { - "eventCall": { - "arguments": [ - { - "id": 60825, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60787, - "src": "6634:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "id": 60826, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60811, - "src": "6646:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 60827, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60789, - "src": "6659:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 60828, - "name": "blockContentHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60791, - "src": "6668:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 60829, - "name": "commitHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60818, - "src": "6686:10:71", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - ], - "id": 60824, - "name": "BlockBuilderProofVerified", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61897, - "src": "6608:25:71", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (address,bytes32,uint8,bytes32,string memory)" - } - }, - "id": 60830, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6608:89:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 60831, - "nodeType": "EmitStatement", - "src": "6603:94:71" - } - ] - }, - "documentation": { - "id": 60785, - "nodeType": "StructuredDocumentation", - "src": "5229:414:71", - "text": "@notice Internal function to verify a block builder proof\n @dev This function is internal because it is only used by the permitVerifyBlockBuilderProof function\n and it is not needed to be called by other contracts\n @param teeAddress The TEE-controlled address\n @param version The version of the flashtestation's protocol\n @param blockContentHash The hash of the block content" - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_verifyBlockBuilderProof", - "nameLocation": "5657:24:71", - "parameters": { - "id": 60792, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60787, - "mutability": "mutable", - "name": "teeAddress", - "nameLocation": "5690:10:71", - "nodeType": "VariableDeclaration", - "scope": 60833, - "src": "5682:18:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60786, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "5682:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60789, - "mutability": "mutable", - "name": "version", - "nameLocation": "5708:7:71", - "nodeType": "VariableDeclaration", - "scope": 60833, - "src": "5702:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 60788, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "5702:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60791, - "mutability": "mutable", - "name": "blockContentHash", - "nameLocation": "5725:16:71", - "nodeType": "VariableDeclaration", - "scope": 60833, - "src": "5717:24:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60790, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "5717:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "5681:61:71" - }, - "returnParameters": { - "id": 60793, - "nodeType": "ParameterList", - "parameters": [], - "src": "5752:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "internal" - }, - { - "id": 60903, - "nodeType": "FunctionDefinition", - "src": "6750:906:71", - "nodes": [], - "body": { - "id": 60902, - "nodeType": "Block", - "src": "6851:805:71", - "nodes": [], - "statements": [ - { - "assignments": [ - null, - 60849 - ], - "declarations": [ - null, - { - "constant": false, - "id": 60849, - "mutability": "mutable", - "name": "registration", - "nameLocation": "6971:12:71", - "nodeType": "VariableDeclaration", - "scope": 60902, - "src": "6926:57:71", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE" - }, - "typeName": { - "id": 60848, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60847, - "name": "IFlashtestationRegistry.RegisteredTEE", - "nameLocations": [ - "6926:23:71", - "6950:13:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 62069, - "src": "6926:37:71" - }, - "referencedDeclaration": 62069, - "src": "6926:37:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_storage_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE" - } - }, - "visibility": "internal" - } - ], - "id": 60856, - "initialValue": { - "arguments": [ - { - "id": 60854, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60836, - "src": "7048:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 60851, - "name": "registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60640, - "src": "7022:8:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60850, - "name": "FlashtestationRegistry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61842, - "src": "6999:22:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_FlashtestationRegistry_$61842_$", - "typeString": "type(contract FlashtestationRegistry)" - } - }, - "id": 60852, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6999:32:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_FlashtestationRegistry_$61842", - "typeString": "contract FlashtestationRegistry" - } - }, - "id": 60853, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7032:15:71", - "memberName": "getRegistration", - "nodeType": "MemberAccess", - "referencedDeclaration": 61657, - "src": "6999:48:71", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$_t_struct$_RegisteredTEE_$62069_memory_ptr_$", - "typeString": "function (address) view external returns (bool,struct IFlashtestationRegistry.RegisteredTEE memory)" - } - }, - "id": 60855, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "6999:60:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_struct$_RegisteredTEE_$62069_memory_ptr_$", - "typeString": "tuple(bool,struct IFlashtestationRegistry.RegisteredTEE memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "6923:136:71" - }, - { - "condition": { - "id": 60859, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "7230:21:71", - "subExpression": { - "expression": { - "id": 60857, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60849, - "src": "7231:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 60858, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7244:7:71", - "memberName": "isValid", - "nodeType": "MemberAccess", - "referencedDeclaration": 62059, - "src": "7231:20:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 60868, - "nodeType": "IfStatement", - "src": "7226:86:71", - "trueBody": { - "id": 60867, - "nodeType": "Block", - "src": "7253:59:71", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 60860, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7275:5:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 60863, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7298:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "id": 60861, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "7282:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60862, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7293:4:71", - "memberName": "wrap", - "nodeType": "MemberAccess", - "src": "7282:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (bytes32) pure returns (WorkloadId)" - } - }, - "id": 60864, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7282:18:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60865, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7274:27:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60844, - "id": 60866, - "nodeType": "Return", - "src": "7267:34:71" - } - ] - } - }, - { - "assignments": [ - 60871 - ], - "declarations": [ - { - "constant": false, - "id": 60871, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "7333:10:71", - "nodeType": "VariableDeclaration", - "scope": 60902, - "src": "7322:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60870, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60869, - "name": "WorkloadId", - "nameLocations": [ - "7322:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "7322:10:71" - }, - "referencedDeclaration": 61861, - "src": "7322:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "id": 60875, - "initialValue": { - "arguments": [ - { - "id": 60873, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60849, - "src": "7374:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - ], - "id": 60872, - "name": "workloadIdForTDRegistration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61059, - "src": "7346:27:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_struct$_RegisteredTEE_$62069_memory_ptr_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (struct IFlashtestationRegistry.RegisteredTEE memory) pure returns (WorkloadId)" - } - }, - "id": 60874, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7346:41:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "7322:65:71" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 60888, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 60878, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "7482:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 60883, - "indexExpression": { - "arguments": [ - { - "id": 60881, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60871, - "src": "7518:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 60879, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "7500:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60880, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7511:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "7500:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 60882, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7500:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7482:48:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 60884, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7531:10:71", - "memberName": "commitHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 61865, - "src": "7482:59:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - ], - "id": 60877, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "7476:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 60876, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "7476:5:71", - "typeDescriptions": {} - } - }, - "id": 60885, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7476:66:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes storage pointer" - } - }, - "id": 60886, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "7543:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "7476:73:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 60887, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7552:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "7476:77:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 60894, - "nodeType": "IfStatement", - "src": "7472:133:71", - "trueBody": { - "id": 60893, - "nodeType": "Block", - "src": "7555:50:71", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 60889, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7577:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "id": 60890, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60871, - "src": "7583:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60891, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7576:18:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60844, - "id": 60892, - "nodeType": "Return", - "src": "7569:25:71" - } - ] - } - }, - { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 60895, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7623:5:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 60898, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "7646:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "id": 60896, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "7630:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60897, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "7641:4:71", - "memberName": "wrap", - "nodeType": "MemberAccess", - "src": "7630:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (bytes32) pure returns (WorkloadId)" - } - }, - "id": 60899, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "7630:18:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60900, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "7622:27:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60844, - "id": 60901, - "nodeType": "Return", - "src": "7615:34:71" - } - ] - }, - "baseFunctions": [ - 61963 - ], - "documentation": { - "id": 60834, - "nodeType": "StructuredDocumentation", - "src": "6710:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "d2753561", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isAllowedPolicy", - "nameLocation": "6759:15:71", - "overrides": { - "id": 60838, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "6807:8:71" - }, - "parameters": { - "id": 60837, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60836, - "mutability": "mutable", - "name": "teeAddress", - "nameLocation": "6783:10:71", - "nodeType": "VariableDeclaration", - "scope": 60903, - "src": "6775:18:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60835, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "6775:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "6774:20:71" - }, - "returnParameters": { - "id": 60844, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60840, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "6830:7:71", - "nodeType": "VariableDeclaration", - "scope": 60903, - "src": "6825:12:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 60839, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "6825:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60843, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 60903, - "src": "6839:10:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60842, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60841, - "name": "WorkloadId", - "nameLocations": [ - "6839:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "6839:10:71" - }, - "referencedDeclaration": 61861, - "src": "6839:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "src": "6824:26:71" - }, - "scope": 61239, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 61013, - "nodeType": "FunctionDefinition", - "src": "8892:1574:71", - "nodes": [], - "body": { - "id": 61012, - "nodeType": "Block", - "src": "8979:1487:71", - "nodes": [], - "statements": [ - { - "assignments": [ - 60915, - 60917 - ], - "declarations": [ - { - "constant": false, - "id": 60915, - "mutability": "mutable", - "name": "isValid", - "nameLocation": "9054:7:71", - "nodeType": "VariableDeclaration", - "scope": 61012, - "src": "9049:12:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 60914, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "9049:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60917, - "mutability": "mutable", - "name": "quoteHash", - "nameLocation": "9071:9:71", - "nodeType": "VariableDeclaration", - "scope": 61012, - "src": "9063:17:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60916, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "9063:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 60924, - "initialValue": { - "arguments": [ - { - "id": 60922, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60906, - "src": "9139:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "arguments": [ - { - "id": 60919, - "name": "registry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60640, - "src": "9107:8:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60918, - "name": "FlashtestationRegistry", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61842, - "src": "9084:22:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_FlashtestationRegistry_$61842_$", - "typeString": "type(contract FlashtestationRegistry)" - } - }, - "id": 60920, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9084:32:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_FlashtestationRegistry_$61842", - "typeString": "contract FlashtestationRegistry" - } - }, - "id": 60921, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9117:21:71", - "memberName": "getRegistrationStatus", - "nodeType": "MemberAccess", - "referencedDeclaration": 61682, - "src": "9084:54:71", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$_t_bytes32_$", - "typeString": "function (address) view external returns (bool,bytes32)" - } - }, - "id": 60923, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9084:66:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes32_$", - "typeString": "tuple(bool,bytes32)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9048:102:71" - }, - { - "condition": { - "id": 60926, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "9164:8:71", - "subExpression": { - "id": 60925, - "name": "isValid", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60915, - "src": "9165:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 60935, - "nodeType": "IfStatement", - "src": "9160:73:71", - "trueBody": { - "id": 60934, - "nodeType": "Block", - "src": "9174:59:71", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 60927, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9196:5:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 60930, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9219:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "id": 60928, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "9203:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60929, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9214:4:71", - "memberName": "wrap", - "nodeType": "MemberAccess", - "src": "9203:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (bytes32) pure returns (WorkloadId)" - } - }, - "id": 60931, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9203:18:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60932, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9195:27:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60913, - "id": 60933, - "nodeType": "Return", - "src": "9188:34:71" - } - ] - } - }, - { - "assignments": [ - 60938 - ], - "declarations": [ - { - "constant": false, - "id": 60938, - "mutability": "mutable", - "name": "cached", - "nameLocation": "9329:6:71", - "nodeType": "VariableDeclaration", - "scope": 61012, - "src": "9307:28:71", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", - "typeString": "struct CachedWorkload" - }, - "typeName": { - "id": 60937, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60936, - "name": "CachedWorkload", - "nameLocations": [ - "9307:14:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 60611, - "src": "9307:14:71" - }, - "referencedDeclaration": 60611, - "src": "9307:14:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage_ptr", - "typeString": "struct CachedWorkload" - } - }, - "visibility": "internal" - } - ], - "id": 60942, - "initialValue": { - "baseExpression": { - "id": 60939, - "name": "cachedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60651, - "src": "9338:15:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", - "typeString": "mapping(address => struct CachedWorkload storage ref)" - } - }, - "id": 60941, - "indexExpression": { - "id": 60940, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60906, - "src": "9354:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9338:27:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", - "typeString": "struct CachedWorkload storage ref" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9307:58:71" - }, - { - "assignments": [ - 60944 - ], - "declarations": [ - { - "constant": false, - "id": 60944, - "mutability": "mutable", - "name": "cachedWorkloadId", - "nameLocation": "9467:16:71", - "nodeType": "VariableDeclaration", - "scope": 61012, - "src": "9459:24:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 60943, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "9459:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 60950, - "initialValue": { - "arguments": [ - { - "expression": { - "id": 60947, - "name": "cached", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60938, - "src": "9504:6:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", - "typeString": "struct CachedWorkload memory" - } - }, - "id": 60948, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9511:10:71", - "memberName": "workloadId", - "nodeType": "MemberAccess", - "referencedDeclaration": 60607, - "src": "9504:17:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 60945, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "9486:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60946, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9497:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "9486:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 60949, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9486:36:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "9459:63:71" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 60958, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 60953, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 60951, - "name": "cachedWorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60944, - "src": "9536:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "hexValue": "30", - "id": 60952, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9556:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9536:21:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 60957, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 60954, - "name": "cached", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60938, - "src": "9561:6:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", - "typeString": "struct CachedWorkload memory" - } - }, - "id": 60955, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9568:9:71", - "memberName": "quoteHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 60610, - "src": "9561:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "id": 60956, - "name": "quoteHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60917, - "src": "9581:9:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "9561:29:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "9536:54:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 61010, - "nodeType": "Block", - "src": "10031:429:71", - "statements": [ - { - "assignments": [ - 60986, - 60989 - ], - "declarations": [ - { - "constant": false, - "id": 60986, - "mutability": "mutable", - "name": "allowed", - "nameLocation": "10136:7:71", - "nodeType": "VariableDeclaration", - "scope": 61010, - "src": "10131:12:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 60985, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "10131:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60989, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "10156:10:71", - "nodeType": "VariableDeclaration", - "scope": 61010, - "src": "10145:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60988, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60987, - "name": "WorkloadId", - "nameLocations": [ - "10145:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "10145:10:71" - }, - "referencedDeclaration": 61861, - "src": "10145:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "id": 60993, - "initialValue": { - "arguments": [ - { - "id": 60991, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60906, - "src": "10186:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 60990, - "name": "isAllowedPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60903, - "src": "10170:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (address) view returns (bool,WorkloadId)" - } - }, - "id": 60992, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10170:27:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "10130:67:71" - }, - { - "condition": { - "id": 60994, - "name": "allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60986, - "src": "10216:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 61005, - "nodeType": "IfStatement", - "src": "10212:195:71", - "trueBody": { - "id": 61004, - "nodeType": "Block", - "src": "10225:182:71", - "statements": [ - { - "expression": { - "id": 61002, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 60995, - "name": "cachedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60651, - "src": "10300:15:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_CachedWorkload_$60611_storage_$", - "typeString": "mapping(address => struct CachedWorkload storage ref)" - } - }, - "id": 60997, - "indexExpression": { - "id": 60996, - "name": "teeAddress", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60906, - "src": "10316:10:71", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "10300:27:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", - "typeString": "struct CachedWorkload storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 60999, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60989, - "src": "10358:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - { - "id": 61000, - "name": "quoteHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60917, - "src": "10381:9:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 60998, - "name": "CachedWorkload", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60611, - "src": "10330:14:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_CachedWorkload_$60611_storage_ptr_$", - "typeString": "type(struct CachedWorkload storage pointer)" - } - }, - "id": 61001, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "10346:10:71", - "10370:9:71" - ], - "names": [ - "workloadId", - "quoteHash" - ], - "nodeType": "FunctionCall", - "src": "10330:62:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", - "typeString": "struct CachedWorkload memory" - } - }, - "src": "10300:92:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_storage", - "typeString": "struct CachedWorkload storage ref" - } - }, - "id": 61003, - "nodeType": "ExpressionStatement", - "src": "10300:92:71" - } - ] - } - }, - { - "expression": { - "components": [ - { - "id": 61006, - "name": "allowed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60986, - "src": "10429:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "id": 61007, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60989, - "src": "10438:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 61008, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "10428:21:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60913, - "id": 61009, - "nodeType": "Return", - "src": "10421:28:71" - } - ] - }, - "id": 61011, - "nodeType": "IfStatement", - "src": "9532:928:71", - "trueBody": { - "id": 60984, - "nodeType": "Block", - "src": "9592:433:71", - "statements": [ - { - "condition": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 60968, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 60961, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "9715:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 60963, - "indexExpression": { - "id": 60962, - "name": "cachedWorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60944, - "src": "9733:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9715:35:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 60964, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9751:10:71", - "memberName": "commitHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 61865, - "src": "9715:46:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - ], - "id": 60960, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "9709:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 60959, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "9709:5:71", - "typeDescriptions": {} - } - }, - "id": 60965, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9709:53:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes storage pointer" - } - }, - "id": 60966, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9763:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "9709:60:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 60967, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9772:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "9709:64:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 60982, - "nodeType": "Block", - "src": "9846:169:71", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "66616c7365", - "id": 60975, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9974:5:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "false" - }, - { - "arguments": [ - { - "hexValue": "30", - "id": 60978, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9997:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "expression": { - "id": 60976, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "9981:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 60977, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "9992:4:71", - "memberName": "wrap", - "nodeType": "MemberAccess", - "src": "9981:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (bytes32) pure returns (WorkloadId)" - } - }, - "id": 60979, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "9981:18:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60980, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9973:27:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60913, - "id": 60981, - "nodeType": "Return", - "src": "9966:34:71" - } - ] - }, - "id": 60983, - "nodeType": "IfStatement", - "src": "9705:310:71", - "trueBody": { - "id": 60974, - "nodeType": "Block", - "src": "9775:65:71", - "statements": [ - { - "expression": { - "components": [ - { - "hexValue": "74727565", - "id": 60969, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "bool", - "lValueRequested": false, - "nodeType": "Literal", - "src": "9801:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "value": "true" - }, - { - "expression": { - "id": 60970, - "name": "cached", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60938, - "src": "9807:6:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_CachedWorkload_$60611_memory_ptr", - "typeString": "struct CachedWorkload memory" - } - }, - "id": 60971, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "9814:10:71", - "memberName": "workloadId", - "nodeType": "MemberAccess", - "referencedDeclaration": 60607, - "src": "9807:17:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "id": 60972, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "9800:25:71", - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "tuple(bool,WorkloadId)" - } - }, - "functionReturnParameters": 60913, - "id": 60973, - "nodeType": "Return", - "src": "9793:32:71" - } - ] - } - } - ] - } - } - ] - }, - "documentation": { - "id": 60904, - "nodeType": "StructuredDocumentation", - "src": "7662:1225:71", - "text": "@notice isAllowedPolicy but with caching to reduce gas costs\n @dev This function is only used by the verifyBlockBuilderProof function, which needs to be as efficient as possible\n because it is called onchain for every flashblock. The workloadId is cached to avoid expensive recomputation\n @dev A careful reader will notice that this function does not delete stale cache entries. It overwrites them\n if the underlying TEE registration is still valid. But for stale cache entries in every other scenario, the\n cache entry persists indefinitely. This is because every other instance results in a return value of (false, 0)\n to the caller (which is always the verifyBlockBuilderProof function) and it immediately reverts. This is an unfortunate\n consequence of our need to make this function as gas-efficient as possible, otherwise we would try to cleanup\n stale cache entries\n @param teeAddress The TEE-controlled address\n @return True if the TEE is using an approved workload in the policy\n @return The workloadId of the TEE that is using an approved workload in the policy, or 0 if\n the TEE is not using an approved workload in the policy" - }, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_cachedIsAllowedPolicy", - "nameLocation": "8901:22:71", - "parameters": { - "id": 60907, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60906, - "mutability": "mutable", - "name": "teeAddress", - "nameLocation": "8932:10:71", - "nodeType": "VariableDeclaration", - "scope": 61013, - "src": "8924:18:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 60905, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "8924:7:71", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "8923:20:71" - }, - "returnParameters": { - "id": 60913, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 60909, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61013, - "src": "8961:4:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 60908, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "8961:4:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 60912, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61013, - "src": "8967:10:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 60911, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 60910, - "name": "WorkloadId", - "nameLocations": [ - "8967:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "8967:10:71" - }, - "referencedDeclaration": 61861, - "src": "8967:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "src": "8960:18:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "id": 61059, - "nodeType": "FunctionDefinition", - "src": "10512:815:71", - "nodes": [], - "body": { - "id": 61058, - "nodeType": "Block", - "src": "10686:641:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "expression": { - "expression": { - "id": 61030, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "10793:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61031, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10806:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "10793:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61032, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10823:4:71", - "memberName": "mrTd", - "nodeType": "MemberAccess", - "referencedDeclaration": 146, - "src": "10793:34:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61033, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "10849:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61034, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10862:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "10849:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61035, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10879:5:71", - "memberName": "rtMr0", - "nodeType": "MemberAccess", - "referencedDeclaration": 154, - "src": "10849:35:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61036, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "10906:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61037, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10919:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "10906:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61038, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10936:5:71", - "memberName": "rtMr1", - "nodeType": "MemberAccess", - "referencedDeclaration": 156, - "src": "10906:35:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61039, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "10963:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61040, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10976:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "10963:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61041, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10993:5:71", - "memberName": "rtMr2", - "nodeType": "MemberAccess", - "referencedDeclaration": 158, - "src": "10963:35:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61042, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "11020:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61043, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11033:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "11020:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61044, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11050:5:71", - "memberName": "rtMr3", - "nodeType": "MemberAccess", - "referencedDeclaration": 160, - "src": "11020:35:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61045, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "11118:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61046, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11131:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "11118:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61047, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11148:10:71", - "memberName": "mrConfigId", - "nodeType": "MemberAccess", - "referencedDeclaration": 148, - "src": "11118:40:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "expression": { - "expression": { - "id": 61048, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "11180:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61049, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11193:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "11180:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61050, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11210:4:71", - "memberName": "xFAM", - "nodeType": "MemberAccess", - "referencedDeclaration": 144, - "src": "11180:34:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - }, - { - "expression": { - "expression": { - "id": 61051, - "name": "registration", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61017, - "src": "11236:12:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE memory" - } - }, - "id": 61052, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11249:16:71", - "memberName": "parsedReportBody", - "nodeType": "MemberAccess", - "referencedDeclaration": 62064, - "src": "11236:29:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_TD10ReportBody_$163_memory_ptr", - "typeString": "struct TD10ReportBody memory" - } - }, - "id": 61053, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11266:12:71", - "memberName": "tdAttributes", - "nodeType": "MemberAccess", - "referencedDeclaration": 142, - "src": "11236:42:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - }, - { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - }, - { - "typeIdentifier": "t_bytes8", - "typeString": "bytes8" - } - ], - "expression": { - "id": 61028, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "10759:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 61027, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "10759:5:71", - "typeDescriptions": {} - } - }, - "id": 61029, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "10765:6:71", - "memberName": "concat", - "nodeType": "MemberAccess", - "src": "10759:12:71", - "typeDescriptions": { - "typeIdentifier": "t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 61054, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10759:537:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 61026, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "10732:9:71", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 61055, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10732:578:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "id": 61024, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "10703:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 61025, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "10714:4:71", - "memberName": "wrap", - "nodeType": "MemberAccess", - "src": "10703:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "function (bytes32) pure returns (WorkloadId)" - } - }, - "id": 61056, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "10703:617:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "functionReturnParameters": 61023, - "id": 61057, - "nodeType": "Return", - "src": "10696:624:71" - } - ] - }, - "baseFunctions": [ - 61973 - ], - "documentation": { - "id": 61014, - "nodeType": "StructuredDocumentation", - "src": "10472:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "4d37fc7a", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "workloadIdForTDRegistration", - "nameLocation": "10521:27:71", - "overrides": { - "id": 61019, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "10644:8:71" - }, - "parameters": { - "id": 61018, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61017, - "mutability": "mutable", - "name": "registration", - "nameLocation": "10594:12:71", - "nodeType": "VariableDeclaration", - "scope": 61059, - "src": "10549:57:71", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_memory_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE" - }, - "typeName": { - "id": 61016, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61015, - "name": "IFlashtestationRegistry.RegisteredTEE", - "nameLocations": [ - "10549:23:71", - "10573:13:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 62069, - "src": "10549:37:71" - }, - "referencedDeclaration": 62069, - "src": "10549:37:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_RegisteredTEE_$62069_storage_ptr", - "typeString": "struct IFlashtestationRegistry.RegisteredTEE" - } - }, - "visibility": "internal" - } - ], - "src": "10548:59:71" - }, - "returnParameters": { - "id": 61023, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61022, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61059, - "src": "10670:10:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 61021, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61020, - "name": "WorkloadId", - "nameLocations": [ - "10670:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "10670:10:71" - }, - "referencedDeclaration": 61861, - "src": "10670:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "src": "10669:12:71" - }, - "scope": 61239, - "stateMutability": "pure", - "virtual": false, - "visibility": "public" - }, - { - "id": 61131, - "nodeType": "FunctionDefinition", - "src": "11373:730:71", - "nodes": [], - "body": { - "id": 61130, - "nodeType": "Block", - "src": "11543:560:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 61081, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "id": 61077, - "name": "commitHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61065, - "src": "11567:10:71", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - ], - "id": 61076, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11561:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 61075, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "11561:5:71", - "typeDescriptions": {} - } - }, - "id": 61078, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11561:17:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_calldata_ptr", - "typeString": "bytes calldata" - } - }, - "id": 61079, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11579:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "11561:24:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 61080, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11588:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11561:28:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 61082, - "name": "EmptyCommitHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61921, - "src": "11591:15:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 61083, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11591:17:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 61074, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11553:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 61084, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11553:56:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61085, - "nodeType": "ExpressionStatement", - "src": "11553:56:71" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 61090, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "id": 61087, - "name": "sourceLocators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61068, - "src": "11627:14:71", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", - "typeString": "string calldata[] calldata" - } - }, - "id": 61088, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11642:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "11627:21:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 61089, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11651:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11627:25:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 61091, - "name": "EmptySourceLocators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61924, - "src": "11654:19:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 61092, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11654:21:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 61086, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11619:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 61093, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11619:57:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61094, - "nodeType": "ExpressionStatement", - "src": "11619:57:71" - }, - { - "assignments": [ - 61096 - ], - "declarations": [ - { - "constant": false, - "id": 61096, - "mutability": "mutable", - "name": "workloadKey", - "nameLocation": "11695:11:71", - "nodeType": "VariableDeclaration", - "scope": 61130, - "src": "11687:19:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61095, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "11687:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 61101, - "initialValue": { - "arguments": [ - { - "id": 61099, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61063, - "src": "11727:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 61097, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "11709:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 61098, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "11720:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "11709:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 61100, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11709:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "11687:51:71" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 61112, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 61105, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "11807:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 61107, - "indexExpression": { - "id": 61106, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61096, - "src": "11825:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "11807:30:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 61108, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11838:10:71", - "memberName": "commitHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 61865, - "src": "11807:41:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - ], - "id": 61104, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "11801:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 61103, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "11801:5:71", - "typeDescriptions": {} - } - }, - "id": 61109, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11801:48:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes storage pointer" - } - }, - "id": 61110, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "11850:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "11801:55:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "hexValue": "30", - "id": 61111, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "11860:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "11801:60:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 61113, - "name": "WorkloadAlreadyInPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61903, - "src": "11863:23:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 61114, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11863:25:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 61102, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "11793:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 61115, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "11793:96:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61116, - "nodeType": "ExpressionStatement", - "src": "11793:96:71" - }, - { - "expression": { - "id": 61124, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "baseExpression": { - "id": 61117, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "11939:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 61119, - "indexExpression": { - "id": 61118, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61096, - "src": "11957:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "11939:30:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "arguments": [ - { - "id": 61121, - "name": "commitHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61065, - "src": "12002:10:71", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - } - }, - { - "id": 61122, - "name": "sourceLocators", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61068, - "src": "12030:14:71", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", - "typeString": "string calldata[] calldata" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string calldata" - }, - { - "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", - "typeString": "string calldata[] calldata" - } - ], - "id": 61120, - "name": "WorkloadMetadata", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61869, - "src": "11972:16:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_struct$_WorkloadMetadata_$61869_storage_ptr_$", - "typeString": "type(struct IBlockBuilderPolicy.WorkloadMetadata storage pointer)" - } - }, - "id": 61123, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "structConstructorCall", - "lValueRequested": false, - "nameLocations": [ - "11990:10:71", - "12014:14:71" - ], - "names": [ - "commitHash", - "sourceLocators" - ], - "nodeType": "FunctionCall", - "src": "11972:74:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_memory_ptr", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata memory" - } - }, - "src": "11939:107:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 61125, - "nodeType": "ExpressionStatement", - "src": "11939:107:71" - }, - { - "eventCall": { - "arguments": [ - { - "id": 61127, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61096, - "src": "12084:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 61126, - "name": "WorkloadAddedToPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61874, - "src": "12062:21:71", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 61128, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12062:34:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61129, - "nodeType": "EmitStatement", - "src": "12057:39:71" - } - ] - }, - "baseFunctions": [ - 61985 - ], - "documentation": { - "id": 61060, - "nodeType": "StructuredDocumentation", - "src": "11333:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "4f3a415a", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 61072, - "kind": "modifierInvocation", - "modifierName": { - "id": 61071, - "name": "onlyOwner", - "nameLocations": [ - "11529:9:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48019, - "src": "11529:9:71" - }, - "nodeType": "ModifierInvocation", - "src": "11529:9:71" - } - ], - "name": "addWorkloadToPolicy", - "nameLocation": "11382:19:71", - "overrides": { - "id": 61070, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "11512:8:71" - }, - "parameters": { - "id": 61069, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61063, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "11413:10:71", - "nodeType": "VariableDeclaration", - "scope": 61131, - "src": "11402:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 61062, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61061, - "name": "WorkloadId", - "nameLocations": [ - "11402:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "11402:10:71" - }, - "referencedDeclaration": 61861, - "src": "11402:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 61065, - "mutability": "mutable", - "name": "commitHash", - "nameLocation": "11441:10:71", - "nodeType": "VariableDeclaration", - "scope": 61131, - "src": "11425:26:71", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_string_calldata_ptr", - "typeString": "string" - }, - "typeName": { - "id": 61064, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "11425:6:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 61068, - "mutability": "mutable", - "name": "sourceLocators", - "nameLocation": "11471:14:71", - "nodeType": "VariableDeclaration", - "scope": 61131, - "src": "11453:32:71", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr", - "typeString": "string[]" - }, - "typeName": { - "baseType": { - "id": 61066, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "11453:6:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "id": 61067, - "nodeType": "ArrayTypeName", - "src": "11453:8:71", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr", - "typeString": "string[]" - } - }, - "visibility": "internal" - } - ], - "src": "11401:85:71" - }, - "returnParameters": { - "id": 61073, - "nodeType": "ParameterList", - "parameters": [], - "src": "11543:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 61173, - "nodeType": "FunctionDefinition", - "src": "12149:433:71", - "nodes": [], - "body": { - "id": 61172, - "nodeType": "Block", - "src": "12234:348:71", - "nodes": [], - "statements": [ - { - "assignments": [ - 61142 - ], - "declarations": [ - { - "constant": false, - "id": 61142, - "mutability": "mutable", - "name": "workloadKey", - "nameLocation": "12252:11:71", - "nodeType": "VariableDeclaration", - "scope": 61172, - "src": "12244:19:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61141, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12244:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "id": 61147, - "initialValue": { - "arguments": [ - { - "id": 61145, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61135, - "src": "12284:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 61143, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "12266:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 61144, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12277:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "12266:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 61146, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12266:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "12244:51:71" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 61158, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "expression": { - "arguments": [ - { - "expression": { - "baseExpression": { - "id": 61151, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "12356:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 61153, - "indexExpression": { - "id": 61152, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61142, - "src": "12374:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12356:30:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "id": 61154, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12387:10:71", - "memberName": "commitHash", - "nodeType": "MemberAccess", - "referencedDeclaration": 61865, - "src": "12356:41:71", - "typeDescriptions": { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_string_storage", - "typeString": "string storage ref" - } - ], - "id": 61150, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "12350:5:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bytes_storage_ptr_$", - "typeString": "type(bytes storage pointer)" - }, - "typeName": { - "id": 61149, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "12350:5:71", - "typeDescriptions": {} - } - }, - "id": 61155, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12350:48:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes storage pointer" - } - }, - "id": 61156, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "12399:6:71", - "memberName": "length", - "nodeType": "MemberAccess", - "src": "12350:55:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": ">", - "rightExpression": { - "hexValue": "30", - "id": 61157, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "12408:1:71", - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - }, - "src": "12350:59:71", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 61159, - "name": "WorkloadNotInPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61906, - "src": "12411:19:71", - "typeDescriptions": { - "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$", - "typeString": "function () pure returns (error)" - } - }, - "id": 61160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12411:21:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_error", - "typeString": "error" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_error", - "typeString": "error" - } - ], - "id": 61148, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "12342:7:71", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_error_$returns$__$", - "typeString": "function (bool,error) pure" - } - }, - "id": 61161, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12342:91:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61162, - "nodeType": "ExpressionStatement", - "src": "12342:91:71" - }, - { - "expression": { - "id": 61166, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "delete", - "prefix": true, - "src": "12484:37:71", - "subExpression": { - "baseExpression": { - "id": 61163, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "12491:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 61165, - "indexExpression": { - "id": 61164, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61142, - "src": "12509:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "12491:30:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61167, - "nodeType": "ExpressionStatement", - "src": "12484:37:71" - }, - { - "eventCall": { - "arguments": [ - { - "id": 61169, - "name": "workloadKey", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61142, - "src": "12563:11:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 61168, - "name": "WorkloadRemovedFromPolicy", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61879, - "src": "12537:25:71", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$", - "typeString": "function (bytes32)" - } - }, - "id": 61170, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12537:38:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 61171, - "nodeType": "EmitStatement", - "src": "12532:43:71" - } - ] - }, - "baseFunctions": [ - 61992 - ], - "documentation": { - "id": 61132, - "nodeType": "StructuredDocumentation", - "src": "12109:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "5c40e542", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 61139, - "kind": "modifierInvocation", - "modifierName": { - "id": 61138, - "name": "onlyOwner", - "nameLocations": [ - "12224:9:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48019, - "src": "12224:9:71" - }, - "nodeType": "ModifierInvocation", - "src": "12224:9:71" - } - ], - "name": "removeWorkloadFromPolicy", - "nameLocation": "12158:24:71", - "overrides": { - "id": 61137, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12215:8:71" - }, - "parameters": { - "id": 61136, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61135, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "12194:10:71", - "nodeType": "VariableDeclaration", - "scope": 61173, - "src": "12183:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 61134, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61133, - "name": "WorkloadId", - "nameLocations": [ - "12183:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "12183:10:71" - }, - "referencedDeclaration": 61861, - "src": "12183:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "src": "12182:23:71" - }, - "returnParameters": { - "id": 61140, - "nodeType": "ParameterList", - "parameters": [], - "src": "12234:0:71" - }, - "scope": 61239, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "id": 61192, - "nodeType": "FunctionDefinition", - "src": "12628:181:71", - "nodes": [], - "body": { - "id": 61191, - "nodeType": "Block", - "src": "12737:72:71", - "nodes": [], - "statements": [ - { - "expression": { - "baseExpression": { - "id": 61184, - "name": "approvedWorkloads", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60637, - "src": "12754:17:71", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_WorkloadMetadata_$61869_storage_$", - "typeString": "mapping(bytes32 => struct IBlockBuilderPolicy.WorkloadMetadata storage ref)" - } - }, - "id": 61189, - "indexExpression": { - "arguments": [ - { - "id": 61187, - "name": "workloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61177, - "src": "12790:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - ], - "expression": { - "id": 61185, - "name": "WorkloadId", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61861, - "src": "12772:10:71", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_userDefinedValueType$_WorkloadId_$61861_$", - "typeString": "type(WorkloadId)" - } - }, - "id": 61186, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "12783:6:71", - "memberName": "unwrap", - "nodeType": "MemberAccess", - "src": "12772:17:71", - "typeDescriptions": { - "typeIdentifier": "t_function_unwrap_pure$_t_userDefinedValueType$_WorkloadId_$61861_$returns$_t_bytes32_$", - "typeString": "function (WorkloadId) pure returns (bytes32)" - } - }, - "id": 61188, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12772:29:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "12754:48:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata storage ref" - } - }, - "functionReturnParameters": 61183, - "id": 61190, - "nodeType": "Return", - "src": "12747:55:71" - } - ] - }, - "baseFunctions": [ - 62002 - ], - "documentation": { - "id": 61174, - "nodeType": "StructuredDocumentation", - "src": "12588:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "abd45d21", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getWorkloadMetadata", - "nameLocation": "12637:19:71", - "overrides": { - "id": 61179, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "12694:8:71" - }, - "parameters": { - "id": 61178, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61177, - "mutability": "mutable", - "name": "workloadId", - "nameLocation": "12668:10:71", - "nodeType": "VariableDeclaration", - "scope": 61192, - "src": "12657:21:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - }, - "typeName": { - "id": 61176, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61175, - "name": "WorkloadId", - "nameLocations": [ - "12657:10:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61861, - "src": "12657:10:71" - }, - "referencedDeclaration": 61861, - "src": "12657:10:71", - "typeDescriptions": { - "typeIdentifier": "t_userDefinedValueType$_WorkloadId_$61861", - "typeString": "WorkloadId" - } - }, - "visibility": "internal" - } - ], - "src": "12656:23:71" - }, - "returnParameters": { - "id": 61183, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61182, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61192, - "src": "12712:23:71", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_memory_ptr", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" - }, - "typeName": { - "id": 61181, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 61180, - "name": "WorkloadMetadata", - "nameLocations": [ - "12712:16:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 61869, - "src": "12712:16:71" - }, - "referencedDeclaration": 61869, - "src": "12712:16:71", - "typeDescriptions": { - "typeIdentifier": "t_struct$_WorkloadMetadata_$61869_storage_ptr", - "typeString": "struct IBlockBuilderPolicy.WorkloadMetadata" - } - }, - "visibility": "internal" - } - ], - "src": "12711:25:71" - }, - "scope": 61239, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - }, - { - "id": 61205, - "nodeType": "FunctionDefinition", - "src": "12855:131:71", - "nodes": [], - "body": { - "id": 61204, - "nodeType": "Block", - "src": "12934:52:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 61201, - "name": "structHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61195, - "src": "12968:10:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "id": 61200, - "name": "_hashTypedDataV4", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48851, - "src": "12951:16:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$", - "typeString": "function (bytes32) view returns (bytes32)" - } - }, - "id": 61202, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "12951:28:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 61199, - "id": 61203, - "nodeType": "Return", - "src": "12944:35:71" - } - ] - }, - "baseFunctions": [ - 62010 - ], - "documentation": { - "id": 61193, - "nodeType": "StructuredDocumentation", - "src": "12815:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "6931164e", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "getHashedTypeDataV4", - "nameLocation": "12864:19:71", - "parameters": { - "id": 61196, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61195, - "mutability": "mutable", - "name": "structHash", - "nameLocation": "12892:10:71", - "nodeType": "VariableDeclaration", - "scope": 61205, - "src": "12884:18:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61194, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12884:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "12883:20:71" - }, - "returnParameters": { - "id": 61199, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61198, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61205, - "src": "12925:7:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61197, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "12925:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "12924:9:71" - }, - "scope": 61239, - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "id": 61228, - "nodeType": "FunctionDefinition", - "src": "13032:229:71", - "nodes": [], - "body": { - "id": 61227, - "nodeType": "Block", - "src": "13145:116:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 61220, - "name": "VERIFY_BLOCK_BUILDER_PROOF_TYPEHASH", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60631, - "src": "13183:35:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 61221, - "name": "version", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61208, - "src": "13220:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - { - "id": 61222, - "name": "blockContentHash", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61210, - "src": "13229:16:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 61223, - "name": "nonce", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 61212, - "src": "13247:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "id": 61218, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "13172:3:71", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 61219, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "13176:6:71", - "memberName": "encode", - "nodeType": "MemberAccess", - "src": "13172:10:71", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 61224, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13172:81:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 61217, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "13162:9:71", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 61225, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13162:92:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 61216, - "id": 61226, - "nodeType": "Return", - "src": "13155:99:71" - } - ] - }, - "baseFunctions": [ - 62022 - ], - "documentation": { - "id": 61206, - "nodeType": "StructuredDocumentation", - "src": "12992:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "7dec71a9", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "computeStructHash", - "nameLocation": "13041:17:71", - "parameters": { - "id": 61213, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61208, - "mutability": "mutable", - "name": "version", - "nameLocation": "13065:7:71", - "nodeType": "VariableDeclaration", - "scope": 61228, - "src": "13059:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 61207, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "13059:5:71", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 61210, - "mutability": "mutable", - "name": "blockContentHash", - "nameLocation": "13082:16:71", - "nodeType": "VariableDeclaration", - "scope": 61228, - "src": "13074:24:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61209, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "13074:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 61212, - "mutability": "mutable", - "name": "nonce", - "nameLocation": "13108:5:71", - "nodeType": "VariableDeclaration", - "scope": 61228, - "src": "13100:13:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 61211, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "13100:7:71", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "visibility": "internal" - } - ], - "src": "13058:56:71" - }, - "returnParameters": { - "id": 61216, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61215, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61228, - "src": "13136:7:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61214, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "13136:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "13135:9:71" - }, - "scope": 61239, - "stateMutability": "pure", - "virtual": false, - "visibility": "public" - }, - { - "id": 61238, - "nodeType": "FunctionDefinition", - "src": "13307:103:71", - "nodes": [], - "body": { - "id": 61237, - "nodeType": "Block", - "src": "13366:44:71", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 61234, - "name": "_domainSeparatorV4", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48812, - "src": "13383:18:71", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$", - "typeString": "function () view returns (bytes32)" - } - }, - "id": 61235, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "13383:20:71", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "functionReturnParameters": 61233, - "id": 61236, - "nodeType": "Return", - "src": "13376:27:71" - } - ] - }, - "baseFunctions": [ - 62028 - ], - "documentation": { - "id": 61229, - "nodeType": "StructuredDocumentation", - "src": "13267:35:71", - "text": "@inheritdoc IBlockBuilderPolicy" - }, - "functionSelector": "f698da25", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "domainSeparator", - "nameLocation": "13316:15:71", - "parameters": { - "id": 61230, - "nodeType": "ParameterList", - "parameters": [], - "src": "13331:2:71" - }, - "returnParameters": { - "id": 61233, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 61232, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 61238, - "src": "13357:7:71", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 61231, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "13357:7:71", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "visibility": "internal" - } - ], - "src": "13356:9:71" - }, - "scope": 61239, - "stateMutability": "view", - "virtual": false, - "visibility": "external" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 60613, - "name": "Initializable", - "nameLocations": [ - "2056:13:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48392, - "src": "2056:13:71" - }, - "id": 60614, - "nodeType": "InheritanceSpecifier", - "src": "2056:13:71" - }, - { - "baseName": { - "id": 60615, - "name": "UUPSUpgradeable", - "nameLocations": [ - "2075:15:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48574, - "src": "2075:15:71" - }, - "id": 60616, - "nodeType": "InheritanceSpecifier", - "src": "2075:15:71" - }, - { - "baseName": { - "id": 60617, - "name": "OwnableUpgradeable", - "nameLocations": [ - "2096:18:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 48124, - "src": "2096:18:71" - }, - "id": 60618, - "nodeType": "InheritanceSpecifier", - "src": "2096:18:71" - }, - { - "baseName": { - "id": 60619, - "name": "EIP712Upgradeable", - "nameLocations": [ - "2120:17:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 49049, - "src": "2120:17:71" - }, - "id": 60620, - "nodeType": "InheritanceSpecifier", - "src": "2120:17:71" - }, - { - "baseName": { - "id": 60621, - "name": "IBlockBuilderPolicy", - "nameLocations": [ - "2143:19:71" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 62049, - "src": "2143:19:71" - }, - "id": 60622, - "nodeType": "InheritanceSpecifier", - "src": "2143:19:71" - } - ], - "canonicalName": "BlockBuilderPolicy", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 60612, - "nodeType": "StructuredDocumentation", - "src": "1154:866:71", - "text": " @title BlockBuilderPolicy\n @notice A reference implementation of a policy contract for the FlashtestationRegistry\n @notice A Policy is a collection of related WorkloadIds. A Policy exists to specify which\n WorkloadIds are valid for a particular purpose, in this case for remote block building. It also\n exists to handle the problem that TEE workloads will need to change multiple times a year, either because\n of Intel DCAP Endorsement updates or updates to the TEE configuration (and thus its WorkloadId). Without\n Policies, consumer contracts that makes use of Flashtestations would need to be updated every time a TEE workload\n changes, which is a costly and error-prone process. Instead, consumer contracts need only check if a TEE address\n is allowed under any workload in a Policy, and the FlashtestationRegistry will handle the rest" - }, - "fullyImplemented": true, - "linearizedBaseContracts": [ - 61239, - 62049, - 49049, - 49243, - 48124, - 48620, - 48574, - 49253, - 48392 - ], - "name": "BlockBuilderPolicy", - "nameLocation": "2030:18:71", - "scope": 61240, - "usedErrors": [ - 47960, - 47965, - 48141, - 48144, - 48419, - 48424, - 49311, - 49324, - 49971, - 50264, - 52061, - 52066, - 52071, - 61900, - 61903, - 61906, - 61911, - 61918, - 61921, - 61924 - ], - "usedEvents": [ - 47971, - 48149, - 49205, - 49223, - 61874, - 61879, - 61884, - 61897 - ] - } - ], - "license": "MIT" - }, - "id": 71 -} \ No newline at end of file diff --git a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json b/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json deleted file mode 100644 index d823e0c3..00000000 --- a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/FlashtestationRegistry.json +++ /dev/null @@ -1,641 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "MAX_BYTES_SIZE", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "REGISTER_TYPEHASH", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TD_REPORTDATA_LENGTH", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "UPGRADE_INTERFACE_VERSION", - "inputs": [], - "outputs": [{ "name": "", "type": "string", "internalType": "string" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "attestationContract", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IAttestation" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "computeStructHash", - "inputs": [ - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "deadline", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "domainSeparator", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eip712Domain", - "inputs": [], - "outputs": [ - { "name": "fields", "type": "bytes1", "internalType": "bytes1" }, - { "name": "name", "type": "string", "internalType": "string" }, - { "name": "version", "type": "string", "internalType": "string" }, - { "name": "chainId", "type": "uint256", "internalType": "uint256" }, - { - "name": "verifyingContract", - "type": "address", - "internalType": "address" - }, - { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, - { - "name": "extensions", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegistration", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "", "type": "bool", "internalType": "bool" }, - { - "name": "", - "type": "tuple", - "internalType": "struct IFlashtestationRegistry.RegisteredTEE", - "components": [ - { "name": "isValid", "type": "bool", "internalType": "bool" }, - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, - { - "name": "parsedReportBody", - "type": "tuple", - "internalType": "struct TD10ReportBody", - "components": [ - { - "name": "teeTcbSvn", - "type": "bytes16", - "internalType": "bytes16" - }, - { "name": "mrSeam", "type": "bytes", "internalType": "bytes" }, - { - "name": "mrsignerSeam", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "seamAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { - "name": "tdAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { "name": "xFAM", "type": "bytes8", "internalType": "bytes8" }, - { "name": "mrTd", "type": "bytes", "internalType": "bytes" }, - { - "name": "mrConfigId", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "mrOwner", "type": "bytes", "internalType": "bytes" }, - { - "name": "mrOwnerConfig", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "rtMr0", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr1", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr2", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr3", "type": "bytes", "internalType": "bytes" }, - { - "name": "reportData", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "quoteHash", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRegistrationStatus", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "isValid", "type": "bool", "internalType": "bool" }, - { "name": "quoteHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashTypedDataV4", - "inputs": [ - { "name": "structHash", "type": "bytes32", "internalType": "bytes32" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { - "name": "_attestationContract", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "invalidateAttestation", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "invalidatePreviousSignature", - "inputs": [ - { "name": "_nonce", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "nonces", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "permitNonce", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "permitRegisterTEEService", - "inputs": [ - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "deadline", "type": "uint256", "internalType": "uint256" }, - { "name": "signature", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "proxiableUUID", - "inputs": [], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "registerTEEService", - "inputs": [ - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "registeredTEEs", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ], - "outputs": [ - { "name": "isValid", "type": "bool", "internalType": "bool" }, - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" }, - { - "name": "parsedReportBody", - "type": "tuple", - "internalType": "struct TD10ReportBody", - "components": [ - { - "name": "teeTcbSvn", - "type": "bytes16", - "internalType": "bytes16" - }, - { "name": "mrSeam", "type": "bytes", "internalType": "bytes" }, - { - "name": "mrsignerSeam", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "seamAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { - "name": "tdAttributes", - "type": "bytes8", - "internalType": "bytes8" - }, - { "name": "xFAM", "type": "bytes8", "internalType": "bytes8" }, - { "name": "mrTd", "type": "bytes", "internalType": "bytes" }, - { "name": "mrConfigId", "type": "bytes", "internalType": "bytes" }, - { "name": "mrOwner", "type": "bytes", "internalType": "bytes" }, - { - "name": "mrOwnerConfig", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "rtMr0", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr1", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr2", "type": "bytes", "internalType": "bytes" }, - { "name": "rtMr3", "type": "bytes", "internalType": "bytes" }, - { "name": "reportData", "type": "bytes", "internalType": "bytes" } - ] - }, - { - "name": "extendedRegistrationData", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "quoteHash", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { "name": "newOwner", "type": "address", "internalType": "address" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "upgradeToAndCall", - "inputs": [ - { - "name": "newImplementation", - "type": "address", - "internalType": "address" - }, - { "name": "data", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "event", - "name": "EIP712DomainChanged", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PreviousSignatureInvalidated", - "inputs": [ - { - "name": "teeAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "invalidatedNonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TEEServiceInvalidated", - "inputs": [ - { - "name": "teeAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TEEServiceRegistered", - "inputs": [ - { - "name": "teeAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "rawQuote", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "alreadyExists", - "type": "bool", - "indexed": false, - "internalType": "bool" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Upgraded", - "inputs": [ - { - "name": "implementation", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AddressEmptyCode", - "inputs": [ - { "name": "target", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "ByteSizeExceeded", - "inputs": [ - { "name": "size", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "ECDSAInvalidSignature", "inputs": [] }, - { - "type": "error", - "name": "ECDSAInvalidSignatureLength", - "inputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "ECDSAInvalidSignatureS", - "inputs": [{ "name": "s", "type": "bytes32", "internalType": "bytes32" }] - }, - { - "type": "error", - "name": "ERC1967InvalidImplementation", - "inputs": [ - { - "name": "implementation", - "type": "address", - "internalType": "address" - } - ] - }, - { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, - { - "type": "error", - "name": "ExpiredSignature", - "inputs": [ - { "name": "deadline", "type": "uint256", "internalType": "uint256" } - ] - }, - { "type": "error", "name": "FailedCall", "inputs": [] }, - { "type": "error", "name": "InvalidAttestationContract", "inputs": [] }, - { "type": "error", "name": "InvalidInitialization", "inputs": [] }, - { - "type": "error", - "name": "InvalidNonce", - "inputs": [ - { "name": "expected", "type": "uint256", "internalType": "uint256" }, - { "name": "provided", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "InvalidQuote", - "inputs": [{ "name": "output", "type": "bytes", "internalType": "bytes" }] - }, - { - "type": "error", - "name": "InvalidQuoteLength", - "inputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "InvalidRegistrationDataHash", - "inputs": [ - { "name": "expected", "type": "bytes32", "internalType": "bytes32" }, - { "name": "received", "type": "bytes32", "internalType": "bytes32" } - ] - }, - { - "type": "error", - "name": "InvalidReportDataLength", - "inputs": [ - { "name": "length", "type": "uint256", "internalType": "uint256" } - ] - }, - { - "type": "error", - "name": "InvalidTEEType", - "inputs": [ - { "name": "teeType", "type": "bytes4", "internalType": "bytes4" } - ] - }, - { - "type": "error", - "name": "InvalidTEEVersion", - "inputs": [ - { "name": "version", "type": "uint16", "internalType": "uint16" } - ] - }, - { "type": "error", "name": "NotInitializing", "inputs": [] }, - { - "type": "error", - "name": "OwnableInvalidOwner", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "OwnableUnauthorizedAccount", - "inputs": [ - { "name": "account", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "ReentrancyGuardReentrantCall", "inputs": [] }, - { - "type": "error", - "name": "SignerMustMatchTEEAddress", - "inputs": [ - { "name": "signer", "type": "address", "internalType": "address" }, - { "name": "teeAddress", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "TEEIsStillValid", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "TEEServiceAlreadyInvalid", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "TEEServiceAlreadyRegistered", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ] - }, - { - "type": "error", - "name": "TEEServiceNotRegistered", - "inputs": [ - { "name": "teeAddress", "type": "address", "internalType": "address" } - ] - }, - { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] }, - { - "type": "error", - "name": "UUPSUnsupportedProxiableUUID", - "inputs": [ - { "name": "slot", "type": "bytes32", "internalType": "bytes32" } - ] - } - ], - "bytecode": { - "object": "0x60a0806040523460295730608052614e62908161002e8239608051818181610a320152610c3e0152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630634434a146101845780630ac3302b1461017f57806322ba2bbf1461017a578063485cc955146101755780634980f288146101705780634f1ef2861461016b57806352d1902d146101665780636a5306a314610161578063715018a61461015c57806372731062146101575780637ecebe001461015257806384b0196e1461014d578063878111121461014857806387be6d4e146101435780638da5cb5b1461013e578063a8af4ff514610139578063aaae748e14610134578063ad3cb1cc1461012f578063e41689521461012a578063f2fde38b14610125578063f698da2514610120578063f745cb301461011b5763f9b68b3114610116575f80fd5b611ac7565b611a11565b61163a565b6115f3565b6115ba565b61153d565b611503565b611492565b611422565b6113d2565b611340565b611221565b611110565b61105d565b610ce6565b610c8e565b610bf9565b6109b7565b61083e565b6105bd565b6102e9565b610248565b6101bb565b9181601f840112156101b75782359167ffffffffffffffff83116101b757602083818601950101116101b757565b5f80fd5b346101b75760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b75761020a903690600401610189565b906024359067ffffffffffffffff82116101b757602092610232610240933690600401610189565b906044359260643594611c82565b604051908152f35b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b757610292903690600401610189565b60243567ffffffffffffffff81116101b7576102b2903690600401610189565b6084359391606435916044359167ffffffffffffffff87116101b7576102df6102e7973690600401610189565b969095611d01565b005b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760043567ffffffffffffffff81116101b757610333903690600401610189565b60243567ffffffffffffffff81116101b757610353903690600401610189565b91909261035e612781565b61037861036c368484610981565b5161500081111561281a565b61038661036c368587610981565b6103c06103a75f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a00000000000000000000000000000000000000000000000000000000825281806103f988886004840161288b565b039134905af1908115610572575f905f9261054b575b508161041a9161289c565b61042390613349565b6101c081018051516104399060348110156128e5565b5161044390613526565b73ffffffffffffffffffffffffffffffffffffffff821696906104698333808b14612918565b610474368884610981565b805190602001208181149161048892612969565b610493368686610981565b80519060200120906104a582846136e1565b966104ae610926565b60018152946104be368989610981565b6020870152604086015236906104d392610981565b606084015260808301526105059073ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b9061050f91612dce565b60405192839261051f9284612f62565b037f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b997891a26102e76127f5565b61041a925061056c91503d805f833e61056481836108e5565b8101906126a7565b9161040f565b61272c565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b757565b346101b75760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576105f4610577565b6105fc61059a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054919067ffffffffffffffff61064360ff604086901c16159467ffffffffffffffff1690565b1680159081610836575b600114908161082c575b159081610823575b506107fb576106e091836106d760017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61078057612071565b6106e657005b6107517fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6107f6680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612071565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61065f565b303b159150610657565b84915061064d565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206102406004356123af565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff8211176108c357604052565b61087a565b6101e0810190811067ffffffffffffffff8211176108c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108c357604052565b6040519061093560a0836108e5565b565b604051906109356101e0836108e5565b67ffffffffffffffff81116108c357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261098d82610947565b9161099b60405193846108e5565b8294818452818301116101b7578281602093845f960137010152565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576109e9610577565b60243567ffffffffffffffff81116101b757366023820112156101b757610a1a903690602481600401359101610981565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610bb7575b50610b8f57610a6a612f92565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b5e575b50610aff577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610b31576102e79250613964565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b8191945060203d602011610b88575b610b7981836108e5565b810190612f83565b925f610ab8565b503d610b6f565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a5d565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b8f5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206040517f95b0f36aa3383d49f247995a06db7a3bd7d07a2e7fe943cfdfc72b826979736a8152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757610d1c612f92565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b816101c0610fa0610f8c610f78610f64610f50610f3c610f28610f16610e80610e6d610fb29d6101e060208f8190610e5d8582517fffffffffffffffffffffffffffffffff00000000000000000000000000000000169052565b01519201526101e08d0190610dc0565b60408d01518c6040818403910152610dc0565b60608c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260808c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260a08c8101517fffffffffffffffff00000000000000000000000000000000000000000000000016908c015260c08c01518b820360c08d0152610dc0565b60e08b01518a820360e08c0152610dc0565b6101008a01518982036101008b0152610dc0565b6101208901518882036101208a0152610dc0565b610140880151878203610140890152610dc0565b610160870151868203610160880152610dc0565b610180860151858203610180870152610dc0565b6101a08501518482036101a0860152610dc0565b920151906101c0818403910152610dc0565b90565b90151581526040602082015281511515604082015260c06080611054611020610fed602087015160a0606088015260e0870190610dc0565b60408701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08783030185880152610e03565b60608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08683030160a0870152610dc0565b93015191015290565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff6110a9610577565b5f60806040516110b8816108a7565b828152606060208201526110ca61244c565b6040820152606080820152015216805f52600160205260ff60405f205416905f5260016020526110fc60405f206124b9565b9061110c60405192839283610fb5565b0390f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff61115c610577565b165f526002602052602060405f2054604051908152f35b92939073ffffffffffffffffffffffffffffffffffffffff926111c76111d5927f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e0870190610dc0565b908582036040870152610dc0565b9360608401521660808201525f60a082015260c0818303910152602080835192838152019201905f5b81811061120b5750505090565b82518452602093840193909201916001016111fe565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580611317575b156112b957611285612ffe565b61128d61310d565b9061110c60405161129f6020826108e5565b5f8082523660208301376040519384933091469186611173565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415611278565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757600435335f52600260205261138c60405f20549182808214611fac565b335f52600260205260405f206113a28154612010565b90556040519081527faba960b001cf41ae7d1278e08bf0afa5081bfad043326cfe1e1d5ee266c9ac5260203392a2005b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff6114de610577565b165f5260016020526040805f20601060ff825416910154825191151582526020820152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75760206040516150008152f35b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75761110c60405161157c6040826108e5565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610dc0565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757602060405160348152f35b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b7576102e761162d610577565b611635612f92565b612526565b346101b7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757611670614cc3565b611678614d2d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526116c960c0826108e5565b519020604051908152602090f35b90600182811c9216801561171e575b60208310146116f157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916116e6565b5f9291815491611737836116d7565b808352926001811690811561178c575060011461175357505050565b5f9081526020812093945091925b838310611772575060209250010190565b600181602092949394548385870101520191019190611761565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b906109356117dc9260405193848092611728565b03836108e5565b906119c1600c6117f1610937565b93611826611800825460801b90565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168652565b611832600182016117c8565b6020860152611843600282016117c8565b604086015261192d61190460038301546118896118608260c01b90565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660608a0152565b6118dc608082901b7fffffffffffffffff000000000000000000000000000000000000000000000000167fffffffffffffffff0000000000000000000000000000000000000000000000001660808a0152565b60401b7fffffffffffffffff0000000000000000000000000000000000000000000000001690565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0870152565b611939600482016117c8565b60c086015261194a600582016117c8565b60e086015261195b600682016117c8565b61010086015261196d600782016117c8565b61012086015261197f600882016117c8565b610140860152611991600982016117c8565b6101608601526119a3600a82016117c8565b6101808601526119b5600b82016117c8565b6101a0860152016117c8565b6101c0830152565b959493906080936119f0611a0c946119fe9315158a5260a060208b015260a08a0190610dc0565b9088820360408a0152610e03565b908682036060880152610dc0565b930152565b346101b75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b75773ffffffffffffffffffffffffffffffffffffffff611a5d610577565b165f52600160205260405f2060ff81541661110c60405192611a8d84611a868160018501611728565b03856108e5565b611a99600282016117e3565b90601060405191611ab883611ab181600f8501611728565b03846108e5565b015491604051958695866119c9565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b757611bb2611afc610577565b611b04612781565b5f611b35611b308373ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b6124b9565b611b5a83611b556020840193611b4f838651511515612613565b51151590565b61265d565b611b7b6103a7835473ffffffffffffffffffffffffffffffffffffffff1690565b90519060405180809681947f38d8480a0000000000000000000000000000000000000000000000000000000083526004830161271b565b039134905af180156105725781611be79173ffffffffffffffffffffffffffffffffffffffff945f91611c67575b5015612737565b611c3a611c128273ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b167f5bb0bbb0993a623e10dd3579bf5b9403deba943e0bfe950b740d60209c9135ef5f80a26102e76127f5565b611c7b91503d805f833e61056481836108e5565b505f611be0565b611c9590611ca493929694963691610981565b60208151910120943691610981565b60208151910120916040519260208401947f95b0f36aa3383d49f247995a06db7a3bd7d07a2e7fe943cfdfc72b826979736a865260408501526060840152608083015260a082015260a08152611cfb60c0826108e5565b51902090565b9396611d3e90611d388598611d30611d2b8a8d899a611d479a8a9e9a8e611d26612781565b611c82565b6123af565b923691610981565b906131de565b9093919361324f565b611d7773ffffffffffffffffffffffffffffffffffffffff831697885f52600260205260405f2054808214611fac565b804211611f815750855f52600260205260405f20611d958154612010565b9055611da561036c368686610981565b611db361036c368785610981565b611dd46103a75f5473ffffffffffffffffffffffffffffffffffffffff1690565b5f60405180927f38d8480a0000000000000000000000000000000000000000000000000000000082528180611e0d8a8a6004840161288b565b039134905af1908115610572575f905f92611f62575b5081611e2e9161289c565b611e3790613349565b916101c08301805151603481101590611e4f916128e5565b51611e5990613526565b90928373ffffffffffffffffffffffffffffffffffffffff8116809a1491611e8092612918565b611e8b368884610981565b8051906020012081811491611e9f92612969565b611eaa368686610981565b8051906020012090611ebc82846136e1565b96611ec5610926565b6001815294611ed5368989610981565b602087015260408601523690611eea92610981565b60608401526080830152611f1c9073ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b90611f2691612dce565b604051928392611f369284612f62565b037f206fdb1a74851a8542447b8b6704db24a36b906a7297cc23c2b984dc357b997891a26109356127f5565b611e2e9250611f7b91503d805f833e61056481836108e5565b91611e23565b7fbd2a913c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b15611fb5575050565b7f06427aeb000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461203d5760010190565b611fe3565b1561204957565b7f72cd95d7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6120889092919261208061373f565b61163561373f565b60409182519261209881856108e5565b601684527f466c617368746573746174696f6e52656769737472790000000000000000000060208501526120ce815191826108e5565b600181527f3100000000000000000000000000000000000000000000000000000000000000602082015261210061373f565b61210861373f565b835167ffffffffffffffff81116108c35761214c816121477fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102546116d7565b6129b6565b6020601f821160011461229457916121b7826121de9373ffffffffffffffffffffffffffffffffffffffff969561093598995f92612289575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613796565b6122065f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b61222e5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b61223661373f565b61223e61373f565b1661224a811515612042565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55565b015190505f80612185565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216957f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d965f5b818110612397575092610935969773ffffffffffffffffffffffffffffffffffffffff969593600193836121de9710612360575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10255613796565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612333565b838301518955600190980197602093840193016122ff565b6042906123ba614cc3565b6123c2614d2d565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261241360c0826108e5565b51902090604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b60405190612459826108c8565b60606101c0835f81528260208201528260408201525f838201525f60808201525f60a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a08201520152565b906040516124c6816108a7565b60806010829460ff815416151584526040516124f0816124e98160018601611728565b03826108e5565b6020850152612501600282016117e3565b604085015260405161251a816124e981600f8601611728565b60608501520154910152565b73ffffffffffffffffffffffffffffffffffffffff1680156125e75773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b1561261b5750565b73ffffffffffffffffffffffffffffffffffffffff907fbb527454000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b156126655750565b73ffffffffffffffffffffffffffffffffffffffff907f138c0ee8000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91906040838203126101b757825180151581036101b7579260208101519067ffffffffffffffff82116101b7570181601f820112156101b7578051906126ec82610947565b926126fa60405194856108e5565b828452602083830101116101b757815f9260208093018386015e8301015290565b906020610fb2928181520190610dc0565b6040513d5f823e3d90fd5b1561273f5750565b73ffffffffffffffffffffffffffffffffffffffff907f927b3443000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6127cd5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b156128225750565b7f9e24c2f6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b916020610fb293818152019161284d565b156128a45750565b6128e1906040519182917f64d10cb10000000000000000000000000000000000000000000000000000000083526020600484018181520190610dc0565b0390fd5b156128ed5750565b7f4fe16298000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b15612921575050565b9073ffffffffffffffffffffffffffffffffffffffff80927f38e0a7e5000000000000000000000000000000000000000000000000000000005f52166004521660245260445ffd5b15612972575050565b7fcc14da59000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b8181106129ab575050565b5f81556001016129a0565b90601f82116129c3575050565b610935917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f5260205f20906020601f840160051c83019310612a0e575b601f0160051c01906129a0565b9091508190612a01565b9190601f8111612a2757505050565b610935925f5260205f20906020601f840160051c83019310612a0e57601f0160051c01906129a0565b919091825167ffffffffffffffff81116108c357612a7881612a7284546116d7565b84612a18565b6020601f8211600114612ac9578190612ac59394955f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821690612afa845f5260205f2090565b915f5b818110612b5357509583600195969710612b1c575b505050811b019055565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612b12565b9192602060018192868b015181550194019201612afd565b600c6101c061093593612bcf612ba182517fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b859060801c7fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b612be0602082015160018601612a50565b612bf1604082015160028601612a50565b612d3760038501612c56612c2860608501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b829060c01c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b612cc7612c8660808501517fffffffffffffffff0000000000000000000000000000000000000000000000001690565b82547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff1660809190911c6fffffffffffffffff000000000000000016178255565b60a08301517fffffffffffffffff0000000000000000000000000000000000000000000000001681547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660409190911c77ffffffffffffffff0000000000000000000000000000000016179055565b612d4860c082015160048601612a50565b612d5960e082015160058601612a50565b612d6b61010082015160068601612a50565b612d7d61012082015160078601612a50565b612d8f61014082015160088601612a50565b612da161016082015160098601612a50565b612db3610180820151600a8601612a50565b612dc56101a0820151600b8601612a50565b01519101612a50565b90612e0781511515839060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60018201602082015180519067ffffffffffffffff82116108c357612e3682612e3085546116d7565b85612a18565b602090601f8311600114612eb557826010959360809593612e89935f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b90555b612e9d604082015160028601612b6b565b612eae6060820151600f8601612a50565b0151910155565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691612ee7855f5260205f2090565b925f5b818110612f4a5750926001928592601098966080989610612f13575b505050811b019055612e8c565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612f06565b92936020600181928786015181550195019301612eea565b91602091612f7b9195949560408552604085019161284d565b931515910152565b908160209103126101b7575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612fd257565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10254815f61302e836116d7565b80835292600181169081156130d05750600114613052575b610fb2925003826108e5565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106130b4575050906020610fb292820101613046565b602091935080600191548385880101520191019091839261309c565b60209250610fb29491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101613046565b6040517fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10354815f61313d836116d7565b80835292600181169081156130d0575060011461316057610fb2925003826108e5565b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106131c2575050906020610fb292820101613046565b60209193508060019154838588010152019101909183926131aa565b815191906041830361320e576132079250602082015190606060408401519301515f1a90613a95565b9192909190565b50505f9160029190565b6004111561322257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b61325881613218565b80613261575050565b61326a81613218565b6001810361329a577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6132a381613218565b600281036132d757507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b806132e3600392613218565b146132eb5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b1561331e5750565b7fd915602a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61335161244c565b5080516002116101b7576133656002610947565b61337260405191826108e5565b600281526133806002610947565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602082019201368337816020840160025b60208110156134d857806134b957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffff00000000000000000000000000000000000000000000000000000000000081169160028110613484575b505060f01c6004810361345957506134548161343e610fb293613b24565b805161344f90610255811015613316565b613cc9565b614af4565b7f940a5ec6000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fffff0000000000000000000000000000000000000000000000000000000000009250829060020360031b1b16165f80613420565b6134cd6134c86134d292614d72565b614dad565b614d80565b906133e5565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156133b357611fe3565b80516014116101b7576135396014610947565b9161354760405193846108e5565b601483526135556014610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501910136823760149381602085015b60208710156136945761360994959680155f1461367f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116916014811061364a575b505060601c92613dd1565b60208151910151906020811061361d575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060200360031b1b1690565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009250829060140360031b1b16165f806135fe565b6134cd6134c861368e92614d72565b906135c3565b90815181526020810180911161203d57906020810180911161203d57957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161203d5795613588565b73ffffffffffffffffffffffffffffffffffffffff16805f526001602052601060405f2001548092146137145750151590565b7ffb5bab5b000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561376e57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90815167ffffffffffffffff81116108c3576137fc816137d67fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103546116d7565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103612a18565b602092601f821160011461386d57613849929382915f926122895750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216937f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75915f5b86811061394c5750836001959610613915575b505050811b017fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10355565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806138eb565b919260206001819286850151815501940192016138d8565b90813b15613a535773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115613a2257613a1f91614c7f565b50565b505034613a2b57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613b19579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610572575f5173ffffffffffffffffffffffffffffffffffffffff811615613b0f57905f905f90565b505f906001905f90565b5050505f9160039190565b9081516006116101b757613b386004610947565b613b4560405191826108e5565b60048152613b536004610947565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208201920136833760226004940182905b6020861015613c7c577fffffffff00000000000000000000000000000000000000000000000000000000949580155f14613c6757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b51825182169119161790525190518281169160048110613c52575b5050167f81000000000000000000000000000000000000000000000000000000000000008103613c275750565b7fea75591a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b839250829060040360031b1b16165f80613bfa565b6134cd6134c8613c7692614d72565b90613bdf565b90815181526020810180911161203d57906020810180911161203d57947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811161203d5794613b87565b8051610255116101b757613cde610248610947565b90613cec60405192836108e5565b6102488252613cfc610248610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208401910136823790602d016102485b6020811015613d835780613d6e57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905b518251821691191617905290565b6134cd6134c8613d7d92614d72565b90613d60565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613d2e57611fe3565b80516034116101b757613de46020610947565b90613df260405192836108e5565b60208252613e006020610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060340160205b6020811015613e475780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613e3157611fe3565b80516010116101b757613ea86010610947565b90613eb660405192836108e5565b60108252613ec46010610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060200160105b6020811015613f0b5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613ef557611fe3565b80516040116101b757613f6c6030610947565b90613f7a60405192836108e5565b60308252613f886030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237603080920190915b6020811015613fd05780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115613fba57611fe3565b80516070116101b7576140316030610947565b9061403f60405192836108e5565b6030825261404d6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060600160305b60208110156140945780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561407e57611fe3565b80516078116101b7576140f56008610947565b9061410360405192836108e5565b600882526141116008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060900160085b60208110156141585780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561414257611fe3565b80516080116101b7576141b96008610947565b906141c760405192836108e5565b600882526141d56008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060980160085b602081101561421c5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561420657611fe3565b80516088116101b75761427d6008610947565b9061428b60405192836108e5565b600882526142996008610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a00160085b60208110156142e05780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156142ca57611fe3565b805160b8116101b7576143416030610947565b9061434f60405192836108e5565b6030825261435d6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060a80160305b60208110156143a45780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561438e57611fe3565b805160e8116101b7576144056030610947565b9061441360405192836108e5565b603082526144216030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06020840191013682379060d80160305b60208110156144685780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561445257611fe3565b8051610118116101b7576144ca6030610947565b906144d860405192836108e5565b603082526144e66030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101080160305b602081101561452e5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561451857611fe3565b8051610148116101b7576145906030610947565b9061459e60405192836108e5565b603082526145ac6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101380160305b60208110156145f45780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156145de57611fe3565b8051610178116101b7576146566030610947565b9061466460405192836108e5565b603082526146726030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101680160305b60208110156146ba5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156146a457611fe3565b80516101a8116101b75761471c6030610947565b9061472a60405192836108e5565b603082526147386030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101980160305b60208110156147805780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561476a57611fe3565b80516101d8116101b7576147e26030610947565b906147f060405192836108e5565b603082526147fe6030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101c80160305b60208110156148465780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081111561483057611fe3565b8051610208116101b7576148a86030610947565b906148b660405192836108e5565b603082526148c46030610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906101f80160305b602081101561490c5780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156148f657611fe3565b8051610248116101b75761496e6040610947565b9061497c60405192836108e5565b6040825261498a6040610947565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237906102280160405b60208110156149d25780613d6e57509192915050565b9091825181526020810180911161203d57916020810180911161203d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101908111156149bc57611fe3565b90602082519201517fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169260108110614a58575050565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000929350829060100360031b1b161690565b90602082519201517fffffffffffffffff00000000000000000000000000000000000000000000000081169260088110614ac2575050565b7fffffffffffffffff000000000000000000000000000000000000000000000000929350829060080360031b1b161690565b906119c1614b0061244c565b92614b3b614b15614b1083613e95565b614a20565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000168552565b614b4481613f59565b6020850152614b528161401e565b6040850152614b94614b6b614b66836140e2565b614a8a565b7fffffffffffffffff000000000000000000000000000000000000000000000000166060860152565b614bcc614ba3614b66836141a6565b7fffffffffffffffff000000000000000000000000000000000000000000000000166080860152565b614c04614bdb614b668361426a565b7fffffffffffffffff0000000000000000000000000000000000000000000000001660a0860152565b614c0d8161432e565b60c0850152614c1b816143f2565b60e0850152614c29816144b6565b610100850152614c388161457c565b610120850152614c4781614642565b610140850152614c5681614708565b610160850152614c65816147ce565b610180850152614c7481614894565b6101a085015261495a565b5f80610fb293602081519101845af43d15614cbb573d91614c9f83610947565b92614cad60405194856108e5565b83523d5f602085013e614dbc565b606091614dbc565b614ccb612ffe565b8051908115614cdb576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100548015614d085790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b614d3561310d565b8051908115614d45576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614d085790565b602003906020821161203d57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161203d57565b601f811161203d576101000a90565b90614df95750805115614dd157805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580614e4c575b614e0a575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614e0256fea164736f6c634300081c000a", - "sourceMap": "1080:11972:97:-:0;;;;;;;1171:4:51;1163:13;;1080:11972:97;;;;;;1163:13:51;1080:11972:97;;;;;;;;;;;;;;", - "linkReferences": {} - } -} diff --git a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json b/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json deleted file mode 100644 index 1ccf04a5..00000000 --- a/crates/builder/op-rbuilder/src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "abi": [ - { - "type": "function", - "name": "baseFee", - "inputs": [], - "outputs": [ - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "quoteResults", - "inputs": [ - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "success", "type": "bool", "internalType": "bool" }, - { "name": "output", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setBaseFee", - "inputs": [ - { - "name": "_baseFee", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setQuoteResult", - "inputs": [ - { - "name": "rawQuote", - "type": "bytes", - "internalType": "bytes" - }, - { "name": "_success", "type": "bool", "internalType": "bool" }, - { "name": "_output", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "verifyAndAttestOnChain", - "inputs": [ - { "name": "rawQuote", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "bool", "internalType": "bool" }, - { "name": "", "type": "bytes", "internalType": "bytes" } - ], - "stateMutability": "payable" - }, - { - "type": "error", - "name": "InsufficientFee", - "inputs": [ - { - "name": "required", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "provided", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "bytecode": { - "object": "0x608080604052346015576106fa908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806338d8480a146103b957806346860698146103825780636ef25c3a1461034757806389e7a16d146102b957639321d73e14610050575f80fd5b346102b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b55761009f90369060040161048d565b6024358015158091036102b5576044359167ffffffffffffffff83116102b55760206100d1600194369060040161056a565b94604051936100df8561050d565b845281840195865282604051938492833781015f8152030190209051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911617815501905190815167ffffffffffffffff81116102885761014782546105de565b601f8111610243575b50602092601f82116001146101aa57928192935f9261019f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555f80f35b015190505f8061016a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821693835f52805f20915f5b86811061022b57508360019596106101f4575b505050811b019055005b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f80806101ea565b919260206001819286850151815501940192016101d7565b825f5260205f20601f830160051c8101916020841061027e575b601f0160051c01905b8181106102735750610150565b5f8155600101610266565b909150819061025d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346102b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b557602061030b8192369060040161056a565b604051928184925191829101835e81015f815203019020610333600160ff835416920161062f565b90610343604051928392836104bb565b0390f35b346102b5575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b5576020600154604051908152f35b346102b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b557600435600155005b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102b55760043567ffffffffffffffff81116102b55761040390369060040161048d565b9060015480341061045e575060209082604051938492833781015f8152030190206104456001604051926104368461050d565b60ff815416151584520161062f565b90816020820152511515610343604051928392836104bb565b7fa458261b000000000000000000000000000000000000000000000000000000005f526004523460245260445ffd5b9181601f840112156102b55782359167ffffffffffffffff83116102b557602083818601950101116102b557565b90601f60206060947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093151585526040828601528051918291826040880152018686015e5f8582860101520116010190565b6040810190811067ffffffffffffffff82111761028857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028857604052565b81601f820112156102b55780359067ffffffffffffffff821161028857604051926105bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610529565b828452602083830101116102b557815f926020809301838601378301015290565b90600182811c92168015610625575b60208310146105f857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916105ed565b9060405191825f825492610642846105de565b80845293600181169081156106ad5750600114610669575b5061066792500383610529565b565b90505f9291925260205f20905f915b818310610691575050906020610667928201015f61065a565b6020919350806001915483858901015201910190918492610678565b602093506106679592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61065a56fea164736f6c634300081c000a", - "sourceMap": "865:844:109:-:0;;;;;;;;;;;;;;;;;", - "linkReferences": {} - } -} diff --git a/crates/builder/op-rbuilder/src/tests/framework/artifacts/quote-output.bin b/crates/builder/op-rbuilder/src/tests/framework/artifacts/quote-output.bin deleted file mode 100644 index 70a42bbf..00000000 Binary files a/crates/builder/op-rbuilder/src/tests/framework/artifacts/quote-output.bin and /dev/null differ diff --git a/crates/builder/op-rbuilder/src/tests/framework/artifacts/test-quote.bin b/crates/builder/op-rbuilder/src/tests/framework/artifacts/test-quote.bin deleted file mode 100644 index aea0077d..00000000 Binary files a/crates/builder/op-rbuilder/src/tests/framework/artifacts/test-quote.bin and /dev/null differ diff --git a/crates/builder/op-rbuilder/src/tests/framework/contracts.rs b/crates/builder/op-rbuilder/src/tests/framework/contracts.rs index bfc792ca..70576da4 100644 --- a/crates/builder/op-rbuilder/src/tests/framework/contracts.rs +++ b/crates/builder/op-rbuilder/src/tests/framework/contracts.rs @@ -1,29 +1,3 @@ -pub mod flashtestation_registry { - use alloy_sol_types::sol; - - use crate::tests::framework::contracts::block_builder_policy::BlockBuilderPolicy::TD10ReportBody; - - sol!( - // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 - #[sol(rpc, abi)] - FlashtestationRegistry, - "src/tests/framework/artifacts/contracts/FlashtestationRegistry.json", - ); -} - -pub mod block_builder_policy { - use alloy_sol_types::sol; - - use crate::tests::framework::contracts::block_builder_policy::BlockBuilderPolicy::TD10ReportBody; - - sol!( - // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 - #[sol(rpc, abi)] - BlockBuilderPolicy, - "src/tests/framework/artifacts/contracts/BlockBuilderPolicy.json", - ); -} - pub mod flashblocks_number_contract { use alloy_sol_types::sol; sol!( @@ -33,13 +7,3 @@ pub mod flashblocks_number_contract { "src/tests/framework/artifacts/contracts/FlashblocksNumberContract.json", ); } - -pub mod mock_dcap_attestation { - use alloy_sol_types::sol; - sol!( - // https://github.com/flashbots/flashtestations/tree/7cc7f68492fe672a823dd2dead649793aac1f216 - #[sol(rpc, abi)] - MockAutomataDcapAttestationFee, - "src/tests/framework/artifacts/contracts/MockAutomataDcapAttestationFee.json", - ); -} diff --git a/crates/builder/op-rbuilder/src/tests/framework/instance.rs b/crates/builder/op-rbuilder/src/tests/framework/instance.rs index b3d2c0c3..fdd44045 100644 --- a/crates/builder/op-rbuilder/src/tests/framework/instance.rs +++ b/crates/builder/op-rbuilder/src/tests/framework/instance.rs @@ -6,20 +6,13 @@ use core::{ task::{Context, Poll}, time::Duration, }; -use std::{ - net::SocketAddr, - sync::{Arc, LazyLock}, -}; +use std::sync::{Arc, LazyLock}; -use alloy_primitives::{Address, B256, Bytes, hex, keccak256}; +use alloy_primitives::B256; use alloy_provider::{Identity, ProviderBuilder, RootProvider}; use base_flashtypes::FlashblocksPayloadV1; use clap::Parser; use futures::{FutureExt, StreamExt}; -use http::{Request, Response, StatusCode}; -use http_body_util::Full; -use hyper::{body::Bytes as HyperBytes, server::conn::http1, service::service_fn}; -use hyper_util::rt::TokioIo; use nanoid::nanoid; use op_alloy_network::Optimism; use parking_lot::Mutex; @@ -38,7 +31,7 @@ use reth_optimism_rpc::OpEthApiBuilder; use reth_optimism_txpool::OpPooledTransaction; use reth_tasks::TaskManager; use reth_transaction_pool::{AllTransactionsEvents, TransactionPool}; -use tokio::{net::TcpListener, sync::oneshot, task::JoinHandle}; +use tokio::{sync::oneshot, task::JoinHandle}; use tokio_tungstenite::{connect_async, tungstenite::Message}; use tokio_util::sync::CancellationToken; @@ -47,8 +40,8 @@ use crate::{ builders::{BuilderConfig, FlashblocksBuilder, PayloadBuilder, StandardBuilder}, primitives::reth::engine_api_builder::OpEngineApiBuilder, tests::{ - EngineApi, Ipc, TEE_DEBUG_ADDRESS, TransactionPoolObserver, builder_signer, create_test_db, - framework::driver::ChainDriver, get_available_port, + EngineApi, Ipc, TransactionPoolObserver, builder_signer, create_test_db, + framework::driver::ChainDriver, }, tx_data_store::TxDataStore, tx_signer::Signer, @@ -84,7 +77,6 @@ pub struct LocalInstance { exit_future: NodeExitFuture, _node_handle: Box, pool_observer: TransactionPoolObserver, - attestation_server: Option, tx_data_store: TxDataStore, } @@ -119,15 +111,6 @@ impl LocalInstance { let signer = args.builder_signer.unwrap_or(builder_signer()); args.builder_signer = Some(signer); - let attestation_server = if args.flashtestations.flashtestations_enabled { - let server = spawn_attestation_provider().await?; - args.flashtestations.quote_provider = Some(server.url()); - tracing::info!("Started attestation server at {}", server.url()); - Some(server) - } else { - None - }; - let builder_config = BuilderConfig::::try_from(args.clone()) .expect("Failed to convert rollup args to builder config"); let da_config = builder_config.da_config.clone(); @@ -186,7 +169,6 @@ impl LocalInstance { _node_handle: node_handle, task_manager: Some(task_manager), pool_observer: TransactionPoolObserver::new(pool_monitor), - attestation_server, tx_data_store, }) } @@ -258,10 +240,6 @@ impl LocalInstance { &self.pool_observer } - pub const fn attestation_server(&self) -> &Option { - &self.attestation_server - } - pub const fn tx_data_store(&self) -> &TxDataStore { &self.tx_data_store } @@ -352,13 +330,6 @@ fn pool_component(args: &OpRbuilderArgs) -> OpPoolBuilder { .with_supervisor(rollup_args.supervisor_http.clone(), rollup_args.supervisor_safety_level) } -async fn spawn_attestation_provider() -> eyre::Result { - let quote = include_bytes!("./artifacts/test-quote.bin"); - let mut service = AttestationServer::new(TEE_DEBUG_ADDRESS, Bytes::new(), quote.into()); - service.start().await?; - Ok(service) -} - /// A utility for listening to flashblocks WebSocket messages during tests. /// /// This provides a reusable way to capture and inspect flashblocks that are produced @@ -444,120 +415,3 @@ impl FlashblocksListener { self.handle.await? } } - -/// A utility service to spawn a server that returns a mock quote for an attestation request -#[derive(Debug)] -pub struct AttestationServer { - tee_address: Address, - extra_registration_data: Bytes, - mock_attestation: Bytes, - server_handle: Option>, - shutdown_tx: Option>, - port: u16, - error_on_request: bool, -} - -impl AttestationServer { - pub const fn new( - tee_address: Address, - extra_registration_data: Bytes, - mock_attestation: Bytes, - ) -> Self { - Self { - tee_address, - extra_registration_data, - mock_attestation, - server_handle: None, - shutdown_tx: None, - port: 0, - error_on_request: false, - } - } - - pub const fn set_error(&mut self, error: bool) { - self.error_on_request = error; - } - - pub async fn start(&mut self) -> eyre::Result { - self.port = get_available_port(); - let addr = SocketAddr::from(([127, 0, 0, 1], self.port)); - let listener = TcpListener::bind(addr).await?; - - let mock_attestation = self.mock_attestation.clone(); - // Concatenate tee_address bytes and extra_registration_data bytes, then hex encode - let combined = [ - self.tee_address.as_slice(), // 20 bytes address - keccak256(self.extra_registration_data.clone()).as_slice(), // 32 byte hash - &[0u8; 12], // padding to 64 bytes - ] - .concat(); - let set_error = self.error_on_request; - - let (shutdown_tx, mut shutdown_rx) = oneshot::channel::<()>(); - self.shutdown_tx = Some(shutdown_tx); - - // Create the service - self.server_handle = Some(tokio::spawn(async move { - loop { - let mock_attestation = mock_attestation.clone(); - let expected_path = format!("/{}", hex::encode(&combined)); - tokio::select! { - // Handle shutdown signal - _ = &mut shutdown_rx => { - break; - } - result = listener.accept() => { - let (stream, _) = result.expect("failed to accept attestation request"); - - tokio::task::spawn(async move { - let service = service_fn(move |req: Request| { - let response = - if set_error { - Response::builder() - .status(StatusCode::INTERNAL_SERVER_ERROR) - .body(Full::new(HyperBytes::new())) - .unwrap() - } - else if req.uri().path() == expected_path { - Response::builder() - .header("content-type", "application/octet-stream") - .body(Full::new(mock_attestation.clone().into())) - .unwrap() - } else { - Response::builder() - .status(StatusCode::NOT_FOUND) - .body(Full::new(HyperBytes::new())) - .unwrap() - }; - async { Ok::<_, hyper::Error>(response) } - }); - - let io = TokioIo::new(stream); - if let Err(err) = http1::Builder::new().serve_connection(io, service).await { - tracing::error!(message = "Error serving attestations", error = %err); - } - }); - } - } - } - })); - - // Give the spawned task a chance to start - tokio::task::yield_now().await; - - Ok(self.port) - } - - pub fn url(&self) -> String { - format!("http://127.0.0.1:{}", self.port) - } -} - -impl Drop for AttestationServer { - fn drop(&mut self) { - if let Some(tx) = self.shutdown_tx.take() { - let _ = tx.send(()); - } - tracing::info!("AttestationServer dropped, terminating server"); - } -} diff --git a/crates/builder/op-rbuilder/src/tests/framework/mod.rs b/crates/builder/op-rbuilder/src/tests/framework/mod.rs index 6c60ef3e..3f6907f7 100644 --- a/crates/builder/op-rbuilder/src/tests/framework/mod.rs +++ b/crates/builder/op-rbuilder/src/tests/framework/mod.rs @@ -6,7 +6,6 @@ mod instance; mod txs; mod utils; -use alloy_primitives::{B256, b256}; pub use apis::*; pub use contracts::*; pub use driver::*; @@ -24,9 +23,6 @@ pub const FUNDED_PRIVATE_KEY: &str = // anvil default key[8] pub const FLASHBLOCKS_DEPLOY_KEY: &str = "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97"; -// anvil default key[9] -pub const FLASHTESTATION_DEPLOY_KEY: &str = - "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6"; pub const DEFAULT_GAS_LIMIT: u64 = 10_000_000; @@ -38,19 +34,6 @@ pub const DEFAULT_JWT_TOKEN: &str = pub const ONE_ETH: u128 = 1_000_000_000_000_000_000; -// flashtestations constants -pub const TEE_DEBUG_ADDRESS: alloy_primitives::Address = - alloy_primitives::address!("6Af149F267e1e62dFc431F2de6deeEC7224746f4"); - -pub const WORKLOAD_ID: B256 = - b256!("952569f637f3f7e36cd8f5a7578ae4d03a1cb05ddaf33b35d3054464bb1c862e"); - -pub const SOURCE_LOCATORS: &[&str] = &[ - "https://github.com/flashbots/flashbots-images/commit/53d431f58a0d1a76f6711518ef8d876ce8181fc2", -]; - -pub const COMMIT_HASH: &str = "53d431f58a0d1a76f6711518ef8d876ce8181fc2"; - /// This gets invoked before any tests, when the cargo test framework loads the test library. /// It injects itself into #[ctor::ctor] diff --git a/crates/builder/op-rbuilder/src/tests/framework/utils.rs b/crates/builder/op-rbuilder/src/tests/framework/utils.rs index 8d7ed65a..975991e6 100644 --- a/crates/builder/op-rbuilder/src/tests/framework/utils.rs +++ b/crates/builder/op-rbuilder/src/tests/framework/utils.rs @@ -18,11 +18,8 @@ use reth_optimism_chainspec::OpChainSpec; use super::{FUNDED_PRIVATE_KEY, TransactionBuilder}; use crate::{ tests::{ - BUILDER_PRIVATE_KEY, COMMIT_HASH, FLASHBLOCKS_DEPLOY_KEY, FLASHTESTATION_DEPLOY_KEY, - Protocol, SOURCE_LOCATORS, WORKLOAD_ID, block_builder_policy::BlockBuilderPolicy, - flashblocks_number_contract::FlashblocksNumber, - flashtestation_registry::FlashtestationRegistry, framework::driver::ChainDriver, - mock_dcap_attestation::MockAutomataDcapAttestationFee, + BUILDER_PRIVATE_KEY, FLASHBLOCKS_DEPLOY_KEY, Protocol, + flashblocks_number_contract::FlashblocksNumber, framework::driver::ChainDriver, }, tx_signer::Signer, }; @@ -35,14 +32,6 @@ pub trait TransactionBuilderExt { fn deploy_flashblock_number_contract(self) -> Self; fn init_flashblock_number_contract(self, register_builder: bool) -> Self; fn add_authorized_builder(self, builder: Address) -> Self; - // flashtestations methods - fn deploy_flashtestation_registry_contract(self) -> Self; - fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self; - fn deploy_builder_policy_contract(self) -> Self; - fn init_builder_policy_contract(self, registry_address: Address) -> Self; - fn add_workload_to_policy(self) -> Self; - fn deploy_mock_dcap_contract(self) -> Self; - fn add_mock_quote(self) -> Self; } impl TransactionBuilderExt for TransactionBuilder { @@ -87,75 +76,6 @@ impl TransactionBuilderExt for TransactionBuilder { self.with_input(calldata.into()).with_signer(flashblocks_number_signer()) } - - fn deploy_flashtestation_registry_contract(self) -> Self { - self.with_create() - .with_input(FlashtestationRegistry::BYTECODE.clone()) - .with_gas_limit(5_000_000) - .with_signer(flashtestations_signer()) - } - - fn init_flashtestation_registry_contract(self, dcap_address: Address) -> Self { - let owner = flashtestations_signer(); - - let init_data = FlashtestationRegistry::initializeCall { - owner: owner.address, - _attestationContract: dcap_address, - } - .abi_encode(); - - self.with_input(init_data.into()).with_signer(owner) - } - - fn deploy_builder_policy_contract(self) -> Self { - self.with_create() - .with_input(BlockBuilderPolicy::BYTECODE.clone()) - .with_gas_limit(3_000_000) - .with_signer(flashtestations_signer()) - } - - fn init_builder_policy_contract(self, registry_address: Address) -> Self { - let owner = flashtestations_signer(); - - let init_data = BlockBuilderPolicy::initializeCall { - _initialOwner: owner.address, - _registry: registry_address, - } - .abi_encode(); - - self.with_input(init_data.into()).with_signer(flashtestations_signer()) - } - - fn add_workload_to_policy(self) -> Self { - let workload = BlockBuilderPolicy::addWorkloadToPolicyCall { - workloadId: WORKLOAD_ID, - commitHash: COMMIT_HASH.to_string(), - sourceLocators: SOURCE_LOCATORS.iter().map(|source| source.to_string()).collect(), - } - .abi_encode(); - - self.with_input(workload.into()).with_signer(flashtestations_signer()) - } - - fn deploy_mock_dcap_contract(self) -> Self { - self.with_create() - .with_input(MockAutomataDcapAttestationFee::BYTECODE.clone()) - .with_gas_limit(1_000_000) - .with_signer(flashtestations_signer()) - } - - fn add_mock_quote(self) -> Self { - let quote = MockAutomataDcapAttestationFee::setQuoteResultCall { - // quote from http://ns31695324.ip-141-94-163.eu:10080/attest for builder key - rawQuote: include_bytes!("./artifacts/test-quote.bin").into(), - _success: true, - // response from verifyAndAttestOnChain from the real automata dcap contract on - // unichain sepolia 0x95175096a9B74165BE0ac84260cc14Fc1c0EF5FF - _output: include_bytes!("./artifacts/quote-output.bin").into(), - } - .abi_encode(); - self.with_input(quote.into()).with_gas_limit(500_000).with_signer(flashtestations_signer()) - } } pub trait ChainDriverExt { @@ -344,12 +264,3 @@ pub fn flashblocks_number_signer() -> Signer { ) .expect("Failed to create signer from hardcoded flashblocks number deployer private key") } - -pub fn flashtestations_signer() -> Signer { - Signer::try_from_secret( - FLASHTESTATION_DEPLOY_KEY - .parse() - .expect("invalid hardcoded flashtestations deployer private key"), - ) - .expect("Failed to create signer from hardcoded flashtestations deployer private key") -}