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")
-}