diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80bb26afae..78f5a72cd1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -410,6 +410,8 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: ${{ env.RUST_TOOLCHAIN }} + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 - name: 'Install the dependencies' run: 'pnpm install --frozen-lockfile' - name: 'Download build artifacts' diff --git a/crates/evm-helpers/src/retry.rs b/crates/evm-helpers/src/retry.rs index f0e5c3e993..8774a27735 100644 --- a/crates/evm-helpers/src/retry.rs +++ b/crates/evm-helpers/src/retry.rs @@ -11,11 +11,13 @@ use tracing::info; const RETRY_MAX_ATTEMPTS: u32 = 3; const RETRY_INITIAL_DELAY_MS: u64 = 2000; -fn should_retry_error(error: &str, retry_on_errors: &[&str]) -> bool { +fn should_retry_error(error: &str, decoded_error: Option<&str>, retry_on_errors: &[&str]) -> bool { if retry_on_errors.is_empty() { return true; } - retry_on_errors.iter().any(|code| error.contains(code)) + retry_on_errors.iter().any(|code| { + error.contains(code) || decoded_error.map_or(false, |decoded| decoded.contains(code)) + }) } pub async fn call_with_retry( @@ -26,6 +28,24 @@ pub async fn call_with_retry( where F: Fn() -> Fut, Fut: Future>, +{ + call_with_retry_and_decoder(operation_name, retry_on_errors, operation_fn, |_| None).await +} + +/// Like `call_with_retry`, but accepts an error decoder function that can +/// translate raw error strings (containing hex revert data) into human-readable +/// error names. The decoded name is used both for logging and for matching +/// against `retry_on_errors`. +pub async fn call_with_retry_and_decoder( + operation_name: &str, + retry_on_errors: &[&str], + operation_fn: F, + decode_error: D, +) -> anyhow::Result +where + F: Fn() -> Fut, + Fut: Future>, + D: Fn(&str) -> Option, { let op_name = operation_name.to_string(); let retry_codes: Vec = retry_on_errors.iter().map(|s| s.to_string()).collect(); @@ -35,17 +55,22 @@ where let op_name = op_name.clone(); let retry_codes = retry_codes.clone(); let fut = operation_fn(); + // Decode before entering the async block to avoid moving the closure + let decode_fn = &decode_error; async move { match fut.await { Ok(value) => Ok(value), Err(e) => { - let error_str = format!("{}", e); + let error_str = format!("{e:#}"); + let decoded = decode_fn(&error_str); + let display_error = decoded.as_deref().unwrap_or(&error_str); let retry_refs: Vec<&str> = retry_codes.iter().map(|s| s.as_str()).collect(); - if should_retry_error(&error_str, &retry_refs) { - info!("{}: error, will retry: {}", op_name, e); + if should_retry_error(&error_str, decoded.as_deref(), &retry_refs) { + info!("{}: error, will retry: {}", op_name, display_error); Err(RetryError::Retry(e)) } else { + info!("{}: error: {}", op_name, display_error); Err(RetryError::Failure(e)) } } diff --git a/crates/evm/src/ciphernode_registry_sol.rs b/crates/evm/src/ciphernode_registry_sol.rs index 41c6e9a9eb..686c71c40d 100644 --- a/crates/evm/src/ciphernode_registry_sol.rs +++ b/crates/evm/src/ciphernode_registry_sol.rs @@ -5,6 +5,7 @@ // or FITNESS FOR A PARTICULAR PURPOSE. use crate::{ + error_decoder::format_evm_error, events::{EnclaveEvmEvent, EvmEventProcessor}, evm_parser::EvmParser, helpers::{send_tx_with_retry, EthProvider}, @@ -388,7 +389,7 @@ impl Handler info!(tx=%receipt.transaction_hash, "Ticket submitted to registry"); } Err(err) => { - error!("Failed to submit ticket: {:?}", err); + error!("Failed to submit ticket: {}", format_evm_error(&err)); bus.err(EType::Evm, err); } } @@ -418,7 +419,7 @@ impl Handler { - error!("Failed to finalize committee: {:?}", err); + error!("Failed to finalize committee: {}", format_evm_error(&err)); bus.err(EType::Evm, err); } } @@ -454,7 +455,10 @@ impl Handler { info!(tx=%receipt.transaction_hash, "Committee published to registry"); } - Err(err) => bus.err(EType::Evm, err), + Err(err) => { + error!("Failed to publish committee: {}", format_evm_error(&err)); + bus.err(EType::Evm, err); + } } }) } @@ -479,8 +483,7 @@ pub async fn submit_ticket_to_registry Result { let e3_id_u256: U256 = e3_id.try_into()?; - // 0x5e043d1a = SubmissionWindowNotClosed(), - // 0xd4c1d970 = CommitteeNotRequested() - // 0x59fa4a93 = ThresholdNotMet() send_tx_with_retry( "finalizeCommittee", - &["0x5e043d1a", "0xd4c1d970", "0x59fa4a93"], + &[ + "SubmissionWindowNotClosed", + "CommitteeNotRequested", + "ThresholdNotMet", + ], || { let provider = provider.clone(); async move { @@ -550,8 +554,8 @@ pub async fn publish_committee_to_registry Handler { bus.err( EType::Evm, - anyhow::anyhow!("Error publishing plaintext output: {:?}", err), + anyhow::anyhow!( + "Error publishing plaintext output: {}", + format_evm_error(&err) + ), ); } } @@ -217,21 +221,25 @@ async fn publish_plaintext_output( .pending() .await?; - // 0x0cb083bc = CiphertextOutputNotPublished() - RPC may not have synced ciphertext output being published yet - send_tx_with_retry("publishPlaintextOutput", &["0x0cb083bc"], || { - info!("publishPlaintextOutput() e3_id={:?}", e3_id); - let proof = Bytes::from(vec![1]); - let decrypted_output = Bytes::from(decrypted_output.clone()); - let contract = IEnclave::new(contract_address, provider.provider()); + // RPC may not have synced ciphertext output being published yet + send_tx_with_retry( + "publishPlaintextOutput", + &["CiphertextOutputNotPublished"], + || { + info!("publishPlaintextOutput() e3_id={:?}", e3_id); + let proof = Bytes::from(vec![1]); + let decrypted_output = Bytes::from(decrypted_output.clone()); + let contract = IEnclave::new(contract_address, provider.provider()); - async move { - let builder = contract - .publishPlaintextOutput(e3_id, decrypted_output, proof) - .nonce(current_nonce); - let receipt = builder.send().await?.get_receipt().await?; - Ok(receipt) - } - }) + async move { + let builder = contract + .publishPlaintextOutput(e3_id, decrypted_output, proof) + .nonce(current_nonce); + let receipt = builder.send().await?.get_receipt().await?; + Ok(receipt) + } + }, + ) .await } diff --git a/crates/evm/src/error_decoder.rs b/crates/evm/src/error_decoder.rs new file mode 100644 index 0000000000..a41307e21d --- /dev/null +++ b/crates/evm/src/error_decoder.rs @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: LGPL-3.0-only +// +// This file is provided WITHOUT ANY WARRANTY; +// without even the implied warranty of MERCHANTABILITY +// or FITNESS FOR A PARTICULAR PURPOSE. + +use alloy::sol; +use alloy::sol_types::SolInterface; + +sol!( + #[derive(Debug)] + Enclave, + "../../packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json" +); + +sol!( + #[derive(Debug)] + #[sol(ignore_unlinked)] + CiphernodeRegistryOwnable, + "../../packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json" +); + +sol!( + #[derive(Debug)] + SlashingManager, + "../../packages/enclave-contracts/artifacts/contracts/interfaces/ISlashingManager.sol/ISlashingManager.json" +); + +/// Try to decode raw revert data into a human-readable error string. +pub fn decode_error(data: &[u8]) -> Option { + if data.len() < 4 { + return None; + } + + if let Ok(err) = Enclave::EnclaveErrors::abi_decode(data) { + return Some(format!("{err:?}")); + } + if let Ok(err) = CiphernodeRegistryOwnable::CiphernodeRegistryOwnableErrors::abi_decode(data) { + return Some(format!("{err:?}")); + } + if let Ok(err) = SlashingManager::SlashingManagerErrors::abi_decode(data) { + return Some(format!("{err:?}")); + } + + None +} + +/// Extract hex revert data from an error string and try to decode it. +/// Tries all hex blobs found in the string, returning the first that decodes +/// as a known contract error. +pub fn decode_error_from_str(error_str: &str) -> Option { + for data in extract_all_hex_blobs(error_str) { + if let Some(decoded) = decode_error(&data) { + return Some(decoded); + } + } + None +} + +/// Format an anyhow error, replacing raw hex revert data with decoded error if possible. +/// Returns the decoded error string if decoding succeeds, otherwise the original error. +pub fn format_evm_error(err: &anyhow::Error) -> String { + let error_str = format!("{err:?}"); + decode_error_from_str(&error_str).unwrap_or(error_str) +} + +/// Extract all hex blobs (0x...) with at least 4 bytes (8 hex chars) from a string. +fn extract_all_hex_blobs(error_str: &str) -> Vec> { + error_str + .match_indices("0x") + .filter_map(|(idx, _)| { + let rest = &error_str[idx + 2..]; + let hex_end = rest + .find(|c: char| !c.is_ascii_hexdigit()) + .unwrap_or(rest.len()); + let hex_str = &rest[..hex_end]; + if hex_str.len() >= 8 { + hex::decode(hex_str).ok() + } else { + None + } + }) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + use alloy::sol_types::SolError; + + #[test] + fn test_decode_known_errors() { + // CiphertextOutputNotPublished(uint256 e3Id) with e3Id = 1 + let mut data = Enclave::CiphertextOutputNotPublished::SELECTOR.to_vec(); + data.extend_from_slice(&[0u8; 31]); + data.push(1); // e3Id = 1 + let decoded = decode_error(&data).unwrap(); + assert!( + decoded.contains("CiphertextOutputNotPublished"), + "got: {decoded}" + ); + } + + #[test] + fn test_decode_parameterless_error() { + // CommitteeNotRequested() + let data = CiphernodeRegistryOwnable::CommitteeNotRequested::SELECTOR.to_vec(); + let decoded = decode_error(&data).unwrap(); + assert!(decoded.contains("CommitteeNotRequested"), "got: {decoded}"); + } + + #[test] + fn test_decode_from_error_string() { + // Simulate an alloy error string containing hex revert data + let selector = hex::encode(Enclave::CiphertextOutputNotPublished::SELECTOR); + let param = "0000000000000000000000000000000000000000000000000000000000000001"; + let error_str = format!( + "server returned an error response: error code 3: execution reverted, data: \"0x{selector}{param}\"" + ); + let decoded = decode_error_from_str(&error_str).unwrap(); + assert!( + decoded.contains("CiphertextOutputNotPublished"), + "got: {decoded}" + ); + } + + #[test] + fn test_decode_unknown_error() { + let data = vec![0xde, 0xad, 0xbe, 0xef]; + assert!(decode_error(&data).is_none()); + } + + #[test] + fn test_extract_hex_blobs_too_short() { + assert!(extract_all_hex_blobs("0x1234").is_empty()); + } + + #[test] + fn test_short_selector_found_despite_longer_hex() { + // Error string contains a tx hash (32 bytes) AND a short 4-byte selector. + // The decoder must find the selector even though the tx hash is longer. + let selector = hex::encode(CiphernodeRegistryOwnable::CommitteeNotRequested::SELECTOR); + let tx_hash = "aabbccddee11223344556677889900aabbccddee11223344556677889900aabb"; + let error_str = format!("tx 0x{tx_hash} reverted with data: 0x{selector}"); + let decoded = decode_error_from_str(&error_str).unwrap(); + assert!(decoded.contains("CommitteeNotRequested"), "got: {decoded}"); + } +} diff --git a/crates/evm/src/evm_read_interface.rs b/crates/evm/src/evm_read_interface.rs index a7bafb47d2..cc5b3d8e9c 100644 --- a/crates/evm/src/evm_read_interface.rs +++ b/crates/evm/src/evm_read_interface.rs @@ -35,11 +35,6 @@ const PROVIDER_RECREATE_MAX_ATTEMPTS: u32 = 3; const PROVIDER_RECREATE_INITIAL_DELAY_MS: u64 = 2000; /// Consecutive failures before we assume the provider is dead and recreate it. const MAX_RETRIES_BEFORE_RECREATE: u32 = 3; -/// How often to check if the subscription is still delivering events (seconds). -/// If the chain head has advanced beyond our last received block and no events -/// arrive within this window, we assume the subscription is stale and -/// resubscribe. -const SUBSCRIPTION_STALENESS_CHECK_SECS: u64 = 30; #[derive(Default, serde::Serialize, serde::Deserialize, Clone)] pub struct EvmReadInterfaceState { @@ -409,18 +404,11 @@ async fn stream_from_evm( let mut stream = subscription.into_stream(); info!(chain_id, "Live event subscription active"); - let mut staleness_check = - tokio::time::interval(Duration::from_secs(SUBSCRIPTION_STALENESS_CHECK_SECS)); - // Skip the immediate first tick - staleness_check.tick().await; - loop { select! { maybe_log = stream.next() => { match maybe_log { Some(log) => { - // Reset staleness timer on every received event - staleness_check.reset(); if let Some(bn) = log.block_number { last_block = last_block.max(bn); } @@ -437,29 +425,6 @@ async fn stream_from_evm( } } } - _ = staleness_check.tick() => { - // Periodically check if chain has advanced past our last block. - // If so, the subscription may be stale (server stopped pushing). - match current_provider.provider().get_block_number().await { - Ok(head) if head > last_block => { - warn!( - chain_id, - last_block, - head, - "Subscription appears stale (chain advanced but no events received), resubscribing" - ); - let _ = current_provider.provider().unsubscribe(sub_id).await; - break; - } - Err(e) => { - warn!(chain_id, error = %e, "Staleness check failed, resubscribing"); - break; - } - _ => { - // Chain hasn't advanced, subscription is fine - } - } - } _ = &mut shutdown => { info!("Shutdown signal received, stopping EVM stream"); let _ = current_provider.provider().unsubscribe(sub_id).await; diff --git a/crates/evm/src/helpers.rs b/crates/evm/src/helpers.rs index 7807ad37c5..7c14c184ab 100644 --- a/crates/evm/src/helpers.rs +++ b/crates/evm/src/helpers.rs @@ -4,6 +4,7 @@ // without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. +use crate::error_decoder::decode_error_from_str; use alloy::{ network::EthereumWallet, providers::{ @@ -233,11 +234,13 @@ pub async fn get_current_timestamp() -> Result { const TX_RETRY_MAX_ATTEMPTS: u32 = 3; const TX_RETRY_INITIAL_DELAY_MS: u64 = 2000; -fn should_retry_error(error: &str, retry_on_errors: &[&str]) -> bool { +fn should_retry_error(error: &str, decoded_error: Option<&str>, retry_on_errors: &[&str]) -> bool { if retry_on_errors.is_empty() { return true; } - retry_on_errors.iter().any(|code| error.contains(code)) + retry_on_errors.iter().any(|code| { + error.contains(code) || decoded_error.map_or(false, |decoded| decoded.contains(code)) + }) } pub async fn send_tx_with_retry( @@ -261,13 +264,16 @@ where match fut.await { Ok(receipt) => Ok(receipt), Err(e) => { - let error_str = format!("{}", e); + let error_str = format!("{e:#}"); + let decoded = decode_error_from_str(&error_str); + let display_error = decoded.as_deref().unwrap_or(&error_str); let retry_refs: Vec<&str> = retry_codes.iter().map(|s| s.as_str()).collect(); - if should_retry_error(&error_str, &retry_refs) { - info!("{}: error, will retry: {}", op_name, e); + if should_retry_error(&error_str, decoded.as_deref(), &retry_refs) { + info!("{}: error, will retry: {}", op_name, display_error); Err(RetryError::Retry(e)) } else { + info!("{}: error: {}", op_name, display_error); Err(RetryError::Failure(e)) } } diff --git a/crates/evm/src/lib.rs b/crates/evm/src/lib.rs index a7eb3533ad..d30c1b9a4f 100644 --- a/crates/evm/src/lib.rs +++ b/crates/evm/src/lib.rs @@ -8,6 +8,7 @@ mod bonding_registry_sol; mod ciphernode_registry_sol; mod enclave_sol_reader; mod enclave_sol_writer; +pub mod error_decoder; mod events; mod evm_chain_gateway; mod evm_hub; diff --git a/crates/evm/src/slashing_manager_sol_writer.rs b/crates/evm/src/slashing_manager_sol_writer.rs index 99447afe1d..7a67b5277a 100644 --- a/crates/evm/src/slashing_manager_sol_writer.rs +++ b/crates/evm/src/slashing_manager_sol_writer.rs @@ -7,6 +7,7 @@ //! Subscribes to `AccusationQuorumReached` events and submits `proposeSlash` //! transactions on the SlashingManager contract with committee attestation evidence. +use crate::error_decoder::format_evm_error; use crate::helpers::EthProvider; use crate::send_tx_with_retry; use actix::prelude::*; @@ -158,17 +159,18 @@ impl Handler { + let decoded = format_evm_error(&err); if rank > 0 { // Fallback submitters expect DuplicateEvidence reverts // when the primary submitter has already landed the tx. warn!( "Fallback submitter (rank {rank}): slash submission failed \ - (likely already submitted by primary): {err:?}" + (likely already submitted by primary): {decoded}" ); } else { bus.err( EType::Evm, - anyhow::anyhow!("Error submitting slash proposal: {:?}", err), + anyhow::anyhow!("Error submitting slash proposal: {decoded}"), ); } } diff --git a/packages/enclave-contracts/.gitignore b/packages/enclave-contracts/.gitignore index 5e78485eb5..16125844fb 100644 --- a/packages/enclave-contracts/.gitignore +++ b/packages/enclave-contracts/.gitignore @@ -11,6 +11,10 @@ /artifacts/** !/artifacts/contracts/ +# Contracts +!/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json +!/artifacts/contracts/Enclave.sol/Enclave.json + # Interfaces # Interfaces diff --git a/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json b/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json new file mode 100644 index 0000000000..63a70af0a7 --- /dev/null +++ b/packages/enclave-contracts/artifacts/contracts/Enclave.sol/Enclave.json @@ -0,0 +1,2049 @@ +{ + "_format": "hh3-artifact-1", + "contractName": "Enclave", + "sourceName": "contracts/Enclave.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "CiphertextOutputAlreadyPublished", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "CiphertextOutputNotPublished", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiration", + "type": "uint256" + } + ], + "name": "CommitteeDutiesCompleted", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeSelectionFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + } + ], + "name": "CommitteeSizeNotConfigured", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "E3AlreadyComplete", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "E3AlreadyFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "E3DoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3ProgramNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "FailureConditionNotMet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "inputDeadline", + "type": "uint256" + } + ], + "name": "InputDeadlineNotReached", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IBondingRegistry", + "name": "bondingRegistry", + "type": "address" + } + ], + "name": "InvalidBondingRegistry", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract ICiphernodeRegistry", + "name": "ciphernodeRegistry", + "type": "address" + } + ], + "name": "InvalidCiphernodeRegistry", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "InvalidDuration", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "InvalidEncryptionScheme", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "feeToken", + "type": "address" + } + ], + "name": "InvalidFeeToken", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "InvalidInputDeadline", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + } + ], + "name": "InvalidInputDeadlineEnd", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + } + ], + "name": "InvalidInputDeadlineStart", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "output", + "type": "bytes" + } + ], + "name": "InvalidOutput", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "enum IEnclave.E3Stage", + "name": "expected", + "type": "uint8" + }, + { + "internalType": "enum IEnclave.E3Stage", + "name": "actual", + "type": "uint8" + } + ], + "name": "InvalidStage", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleAlreadyEnabled", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ModuleNotEnabled", + "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": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "PaymentRequired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "PlaintextOutputAlreadyPublished", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "SafeERC20FailedOperation", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes[]", + "name": "e3ProgramParams", + "type": "bytes[]" + } + ], + "name": "AllowedE3ProgramsParamsSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "bondingRegistry", + "type": "address" + } + ], + "name": "BondingRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "ciphernodeRegistry", + "type": "address" + } + ], + "name": "CiphernodeRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "ciphertextOutput", + "type": "bytes" + } + ], + "name": "CiphertextOutputPublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "CommitteeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "CommitteeFormed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum IEnclave.CommitteeSize", + "name": "size", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "CommitteeThresholdsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum IEnclave.E3Stage", + "name": "failedAtStage", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "enum IEnclave.FailureReason", + "name": "reason", + "type": "uint8" + } + ], + "name": "E3Failed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "paymentAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "honestNodeCount", + "type": "uint256" + } + ], + "name": "E3FailureProcessed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3ProgramDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3ProgramEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes[]", + "name": "e3ProgramParams", + "type": "bytes[]" + } + ], + "name": "E3ProgramsParamsRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "e3RefundManager", + "type": "address" + } + ], + "name": "E3RefundManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "inputWindow", + "type": "uint256[2]" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" + } + ], + "indexed": false, + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + }, + { + "indexed": true, + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "E3Requested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "enum IEnclave.E3Stage", + "name": "previousStage", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "enum IEnclave.E3Stage", + "name": "newStage", + "type": "uint8" + } + ], + "name": "E3StageChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "EncryptionSchemeDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "EncryptionSchemeEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "feeToken", + "type": "address" + } + ], + "name": "FeeTokenSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "inputHash", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "InputPublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "maxDuration", + "type": "uint256" + } + ], + "name": "MaxDurationSet", + "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": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + } + ], + "name": "PlaintextOutputPublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "RewardsDistributed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "SlashedFundsEscrowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "slashingManager", + "type": "address" + } + ], + "name": "SlashingManagerSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "dkgWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "computeWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "decryptionWindow", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct IEnclave.E3TimeoutConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "TimeoutConfigUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "bondingRegistry", + "outputs": [ + { + "internalType": "contract IBondingRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "checkFailureCondition", + "outputs": [ + { + "internalType": "bool", + "name": "canFail", + "type": "bool" + }, + { + "internalType": "enum IEnclave.FailureReason", + "name": "reason", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ciphernodeRegistry", + "outputs": [ + { + "internalType": "contract ICiphernodeRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "committeeThresholds", + "outputs": [ + { + "internalType": "uint32", + "name": "threshold", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "decryptionVerifiers", + "outputs": [ + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "disableE3Program", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "disableEncryptionScheme", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "e3Payments", + "outputs": [ + { + "internalType": "uint256", + "name": "e3Payment", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "e3Programs", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + } + ], + "name": "e3ProgramsParams", + "outputs": [ + { + "internalType": "bool", + "name": "allowed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "e3RefundManager", + "outputs": [ + { + "internalType": "contract IE3RefundManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "e3s", + "outputs": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + } + ], + "name": "enableE3Program", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "escrowSlashedFunds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getDeadlines", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "dkgDeadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "computeDeadline", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "decryptionDeadline", + "type": "uint256" + } + ], + "internalType": "struct IEnclave.E3Deadlines", + "name": "deadlines", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + } + ], + "name": "getDecryptionVerifier", + "outputs": [ + { + "internalType": "contract IDecryptionVerifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getE3", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "inputWindow", + "type": "uint256[2]" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" + } + ], + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256[2]", + "name": "inputWindow", + "type": "uint256[2]" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "computeProviderParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + } + ], + "internalType": "struct IEnclave.E3RequestParams", + "name": "", + "type": "tuple" + } + ], + "name": "getE3Quote", + "outputs": [ + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getE3Stage", + "outputs": [ + { + "internalType": "enum IEnclave.E3Stage", + "name": "stage", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getFailureReason", + "outputs": [ + { + "internalType": "enum IEnclave.FailureReason", + "name": "reason", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getRequester", + "outputs": [ + { + "internalType": "address", + "name": "requester", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTimeoutConfig", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "dkgWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "computeWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "decryptionWindow", + "type": "uint256" + } + ], + "internalType": "struct IEnclave.E3TimeoutConfig", + "name": "config", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "contract ICiphernodeRegistry", + "name": "_ciphernodeRegistry", + "type": "address" + }, + { + "internalType": "contract IBondingRegistry", + "name": "_bondingRegistry", + "type": "address" + }, + { + "internalType": "contract IE3RefundManager", + "name": "_e3RefundManager", + "type": "address" + }, + { + "internalType": "contract IERC20", + "name": "_feeToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_maxDuration", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "dkgWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "computeWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "decryptionWindow", + "type": "uint256" + } + ], + "internalType": "struct IEnclave.E3TimeoutConfig", + "name": "config", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "_e3ProgramsParams", + "type": "bytes[]" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "markE3Failed", + "outputs": [ + { + "internalType": "enum IEnclave.FailureReason", + "name": "reason", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxDuration", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nexte3Id", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "onCommitteeFinalized", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "committeePublicKeyHash", + "type": "bytes32" + } + ], + "name": "onCommitteePublished", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "reason", + "type": "uint8" + } + ], + "name": "onE3Failed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "processE3Failure", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "ciphertextOutput", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "publishCiphertextOutput", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "proof", + "type": "bytes" + } + ], + "name": "publishPlaintextOutput", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_e3ProgramsParams", + "type": "bytes[]" + } + ], + "name": "removeE3ProgramsParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256[2]", + "name": "inputWindow", + "type": "uint256[2]" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "computeProviderParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + } + ], + "internalType": "struct IEnclave.E3RequestParams", + "name": "requestParams", + "type": "tuple" + } + ], + "name": "request", + "outputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "committeeSize", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "internalType": "uint256[2]", + "name": "inputWindow", + "type": "uint256[2]" + }, + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IE3Program", + "name": "e3Program", + "type": "address" + }, + { + "internalType": "bytes", + "name": "e3ProgramParams", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "customParams", + "type": "bytes" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "committeePublicKey", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "ciphertextOutput", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "plaintextOutput", + "type": "bytes" + }, + { + "internalType": "address", + "name": "requester", + "type": "address" + } + ], + "internalType": "struct E3", + "name": "e3", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IBondingRegistry", + "name": "_bondingRegistry", + "type": "address" + } + ], + "name": "setBondingRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICiphernodeRegistry", + "name": "_ciphernodeRegistry", + "type": "address" + } + ], + "name": "setCiphernodeRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum IEnclave.CommitteeSize", + "name": "size", + "type": "uint8" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "setCommitteeThresholds", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "encryptionSchemeId", + "type": "bytes32" + }, + { + "internalType": "contract IDecryptionVerifier", + "name": "decryptionVerifier", + "type": "address" + } + ], + "name": "setDecryptionVerifier", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_e3ProgramsParams", + "type": "bytes[]" + } + ], + "name": "setE3ProgramsParams", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IE3RefundManager", + "name": "_e3RefundManager", + "type": "address" + } + ], + "name": "setE3RefundManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "_feeToken", + "type": "address" + } + ], + "name": "setFeeToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxDuration", + "type": "uint256" + } + ], + "name": "setMaxDuration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ISlashingManager", + "name": "_slashingManager", + "type": "address" + } + ], + "name": "setSlashingManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "dkgWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "computeWindow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "decryptionWindow", + "type": "uint256" + } + ], + "internalType": "struct IEnclave.E3TimeoutConfig", + "name": "config", + "type": "tuple" + } + ], + "name": "setTimeoutConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashingManager", + "outputs": [ + { + "internalType": "contract ISlashingManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6146f2806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106102a2575f3560e01c80638da5cb5b1161016c578063c1ab0f1f116100d5578063e59e46951161008f578063e59e4695146106d4578063ea71aa57146106e7578063f0691cba146106fa578063f2fde38b1461070d578063f81b8ef614610720578063fad8e11114610733578063fd2f3d0114610746575f5ffd5b8063c1ab0f1f14610641578063c4ccafa214610654578063cb64961714610676578063cbd168721461067f578063cf0f34c414610692578063cfbdc98d146106a5575f5ffd5b8063929a8faf11610126578063929a8faf146105ac57806399c6679d146105cd5780639c8570c8146105f5578063b68fd1be14610608578063bb2d1b821461061b578063bff232c11461062e575f5ffd5b80638da5cb5b146105445780638dcdd86b1461054c5780638e5ce3ad1461055e57806390173a41146105715780639117173c146105865780639231238614610599575f5ffd5b80634147a3601161020e578063715018a6116101c8578063715018a6146104dd57806377868ae4146104e55780637cfa9d74146104f85780637edcd7ab1461050b57806381476ec21461051e5780638581424314610531575f5ffd5b80634147a3601461043e578063459d92941461045d5780634e92ec631461049b5780634fc77264146104ae578063647846a5146104c15780636db5c8fd146104d4575f5ffd5b806315cce2241161025f57806315cce2241461037d5780631ba7294514610390578063343d842d146103a357806336c5d38a146103c45780634017daf0146103f3578063406ed35c1461041e575f5ffd5b806301d12f1c146102a657806302a3a9c9146102bb5780630ef81b2f146102ce57806310bc62811461030c57806311bd61d914610334578063156e6c7d1461035c575b5f5ffd5b6102b96102b4366004613943565b610759565b005b6102b96102c93660046139f3565b6108bf565b6102f66102dc366004613a0e565b5f908152600960205260409020546001600160a01b031690565b6040516103039190613a25565b60405180910390f35b6102f661031a366004613a0e565b60096020525f90815260409020546001600160a01b031681565b610347610342366004613a4c565b61096b565b60405163ffffffff9091168152602001610303565b61036f61036a366004613a74565b6109a7565b604051908152602001610303565b6102b961038b3660046139f3565b6109b3565b6102b961039e366004613aaa565b610a58565b6103b66103b1366004613a74565b610a6c565b604051610303929190613c3b565b6103e66103d2366004613a0e565b5f908152600e602052604090205460ff1690565b6040516103039190613c6b565b610406610401366004613a0e565b6111ef565b6040516103039c9b9a99989796959493929190613c79565b61043161042c366004613a0e565b611403565b6040516103039190613d2a565b61036f61044c366004613a0e565b600b6020525f908152604090205481565b61048b61046b366004613d3c565b8051602081830181018051600a8252928201919093012091525460ff1681565b6040519015158152602001610303565b6102b96104a9366004613a0e565b6116db565b6102b96104bc3660046139f3565b61176a565b6004546102f6906001600160a01b031681565b61036f60055481565b6102b96117fd565b6102b96104f3366004613d6d565b611810565b6102b9610506366004613a0e565b6118a8565b61048b610519366004613ddb565b6119a6565b6102b961052c366004613e52565b611bce565b6001546102f6906001600160a01b031681565b6102f6611cbe565b5f546102f6906001600160a01b031681565b6003546102f6906001600160a01b031681565b610579611cec565b6040516103039190613e72565b6102b9610594366004613a0e565b611d32565b6105796105a7366004613a0e565b611eda565b6105bf6105ba366004613a0e565b611f33565b604051610303929190613e93565b6102f66105db366004613a0e565b5f908152600f60205260409020546001600160a01b031690565b61048b610603366004613ddb565b611f5a565b6102b9610616366004613d6d565b6121f2565b6102b9610629366004613ea9565b612289565b6102b961063c3660046139f3565b612374565b6102b961064f366004613e52565b61241b565b61048b6106623660046139f3565b60076020525f908152604090205460ff1681565b61036f60065481565b6102b961068d366004613edc565b6124fe565b6102b96106a0366004613a0e565b6125b1565b6106c76106b3366004613a0e565b5f908152600c602052604090205460ff1690565b6040516103039190613f0f565b6102b96106e23660046139f3565b6125ee565b6102b96106f5366004613f1d565b612688565b6002546102f6906001600160a01b031681565b6102b961071b3660046139f3565b61279b565b6103e661072e366004613a0e565b6127d5565b6102b96107413660046139f3565b612965565b6102b96107543660046139f3565b6129fd565b5f610762612a8c565b805490915060ff600160401b82041615906001600160401b03165f811580156107885750825b90505f826001600160401b031660011480156107a35750303b155b9050811580156107b1575080155b156107cf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107f957845460ff60401b1916600160401b1785555b61080233612ab6565b61080b886125b1565b6108148c612965565b61081d8b6125ee565b6108268a6108bf565b61082f896109b3565b61083887612ac7565b610841866121f2565b610849611cbe565b6001600160a01b03168d6001600160a01b03161461086a5761086a8d61279b565b83156108b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6108c7612bfb565b6001600160a01b0381166109225760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6011602052815f5260405f208160028110610984575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b620f4240805b50919050565b6109bb612bfb565b6001600160a01b038116158015906109e157506004546001600160a01b03828116911614155b8190610a015760405163eddf07f560e01b81526004016109199190613a25565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610a4d908390613a25565b60405180910390a150565b610a60612bfb565b610a6981612ac7565b50565b5f610a75613633565b5f601181610a866020870187613f54565b6003811115610a9757610a97613ac4565b6003811115610aa857610aa8613ac4565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610acf579050505050505090505f81600160028110610b2657610b26613f6d565b602002015163ffffffff1611845f016020810190610b449190613f54565b90610b635760405163286c068d60e11b81526004016109199190613f81565b50602084013542811015610b8d57604051630b99e87960e01b815260040161091991815260200190565b5060408401356020850135811015610bbb5760405163174b5a0760e21b815260040161091991815260200190565b506014546013545f9190610bd3426040890135613fa3565b610bdd9190613fb6565b610be79190613fb6565b905060055481108190610c10576040516313b783af60e21b815260040161091991815260200190565b5060075f610c2460808801606089016139f3565b6001600160a01b0316815260208101919091526040015f205460ff16610c5060808701606088016139f3565b90610c6f5760405163295a6a6f60e11b81526004016109199190613a25565b505f610c7a866109a7565b60068054965090915085905f610c8f83613fc9565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600b84528281208690556004546010855283822080546001600160a01b039092166001600160a01b0319928316179055600c8552838220805460ff19166001179055600f909452829020805433941693909317909255601354919250610d2e9190890135613fb6565b5f878152600d6020908152604090912060010191909155818652610d5490880188613f54565b85602001906003811115610d6a57610d6a613ac4565b90816003811115610d7d57610d7d613ac4565b905250436040808701919091528051808201825290602089019060029083908390808284375f920191909152505050606080870191909152610dc590608089019089016139f3565b6001600160a01b031660a0860152610de06080880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c080870191909152610e2890880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525060e08a0194909452505050610120860181905261014086018190526040805160208101909152908152610160860152336101808601819052600454610ea9916001600160a01b03909116903085612c2d565b5f610eba6080890160608a016139f3565b6001600160a01b031663fefd9a8b8884610ed760808d018d613fe1565b610ee460a08f018f613fe1565b8f8060c00190610ef49190613fe1565b6040518963ffffffff1660e01b8152600401610f1798979695949392919061404b565b6020604051808303815f875af1158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5791906140a1565b5f818152600960205260409020549091506001600160a01b03168181610f93576040516381c4951960e01b815260040161091991815260200190565b50608087018290526001600160a01b0381166101008801525f8881526008602090815260409091208851815590880151600180830180548b94939260ff199190911690836003811115610fe857610fe8613ac4565b02179055506040820151816002015560608201518160030190600261100e9291906136b5565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c082015160078201906110539082614149565b5060e082015160088201906110689082614149565b506101008201516009820180546001600160a01b0319166001600160a01b03909216919091179055610120820151600a820155610140820151600b820155610160820151600c8201906110bb9082614149565b506101809190910151600d90910180546001600160a01b0319166001600160a01b039283161790555f5460405163291a691b60e01b815291169063291a691b9061110d908b9087908b906004016141fe565b6020604051808303815f875af1158015611129573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114d9190614243565b61116a57604051630d8dbe2560e01b815260040160405180910390fd5b61117a60808a0160608b016139f3565b6001600160a01b03167fc82a56518b9f52a6515ea4c47357881d49ce5088a24cc1dc05c966f3a0f28b7189896040516111b4929190613c3b565b60405180910390a2875f5160206146c65f395f51905f525f60016040516111dc929190614262565b60405180910390a2505050505050915091565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b03909216929161123a906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906140b8565b80156112b15780601f10611288576101008083540402835291602001916112b1565b820191905f5260205f20905b81548152906001019060200180831161129457829003601f168201915b5050505050908060080180546112c6906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546112f2906140b8565b801561133d5780601f106113145761010080835404028352916020019161133d565b820191905f5260205f20905b81548152906001019060200180831161132057829003601f168201915b5050506009840154600a850154600b860154600c8701805496976001600160a01b039094169692955090935090611373906140b8565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906140b8565b80156113ea5780601f106113c1576101008083540402835291602001916113ea565b820191905f5260205f20905b8154815290600101906020018083116113cd57829003601f168201915b505050600d90930154919250506001600160a01b03168c565b61140b613633565b5f8281526008602090815260409182902082516101a08101909352805483526001810154909183019060ff16600381111561144857611448613ac4565b600381111561145957611459613ac4565b8152600282810154602083015260408051808201808352919093019291600385019182845b81548152602001906001019080831161147e5750505091835250506005820154602082015260068201546001600160a01b031660408201526007820180546060909201916114cb906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546114f7906140b8565b80156115425780601f1061151957610100808354040283529160200191611542565b820191905f5260205f20905b81548152906001019060200180831161152557829003601f168201915b5050505050815260200160088201805461155b906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906140b8565b80156115d25780601f106115a9576101008083540402835291602001916115d2565b820191905f5260205f20905b8154815290600101906020018083116115b557829003601f168201915b505050918352505060098201546001600160a01b03166020820152600a8201546040820152600b8201546060820152600c82018054608090920191611616906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906140b8565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050509183525050600d91909101546001600160a01b0390811660209092019190915260a08201519192508391166109ad5760405163cd6f4a4f60e01b815260040161091991815260200190565b6116e3612bfb565b5f8181526009602052604090205481906001600160a01b031661171c576040516381c4951960e01b815260040161091991815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610a4d9083815260200190565b611772612bfb565b6001600160a01b0381165f90815260076020526040902054819060ff166117ad576040516321ac7c5f60e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610a4d908390613a25565b611805612bfb565b61180e5f612c9a565b565b611818612bfb565b80515f5b8181101561186c57600a83828151811061183857611838613f6d565b602002602001015160405161184d919061427d565b908152604051908190036020019020805460ff1916905560010161181c565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db8260405161189c9190614293565b60405180910390a15050565b5f546001600160a01b031633146118d15760405162461bcd60e51b8152600401610919906142f6565b5f818152600c602052604090205460ff1660018160068111156118f6576118f6613ac4565b1461191b57816001826040516337e1404160e01b815260040161091993929190614327565b5f828152600c60205260409020805460ff191660021790556012546119409042613fb6565b5f838152600d602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f5160206146c65f395f51905f526001600260405161199a929190614262565b60405180910390a25050565b5f5f6119b187611403565b5f888152600c602052604090205490915060ff1660048160068111156119d9576119d9613ac4565b1488600483909192611a01576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611a64576040516308f3034360e31b815260048101929092526024820152604401610919565b50505f898152600860205260409020600c01611a81888a83614348565b505f898152600c6020526040902080546005919060ff191660018302179055508261010001516001600160a01b0316632f0e1bbf8a8a8a604051611ac69291906143fc565b6040519081900381206001600160e01b031960e085901b168252611af192918b908b9060040161440b565b602060405180830381865afa158015611b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b309190614243565b9350878785611b5457604051632f9f8ab960e01b815260040161091992919061442a565b5050611b5f89612d0a565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611b9192919061442a565b60405180910390a2885f5160206146c65f395f51905f5260046005604051611bba929190614262565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610919906142f6565b5f828152600c602052604090205460ff166002816006811115611c1c57611c1c613ac4565b14611c4157826002826040516337e1404160e01b815260040161091993929190614327565b5f838152600c60209081526040808320805460ff191660031790556008909152808220600a018490555184917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2825f5160206146c65f395f51905f5260026003604051611cb1929190614262565b60405180910390a2505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611d0d60405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601254815260135460208201526014549181019190915290565b5f818152600c602052604090205460ff166006816006811115611d5757611d57613ac4565b14611d945760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b6044820152606401610919565b5f828152600b602052604090205480611de65760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b6044820152606401610919565b5f838152600b60205260408120819055611dff846130b9565b5f858152601060205260409020546002549192506001600160a01b0390811691611e2c91839116856131ad565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b69790611e62908890879087908790600401614480565b5f604051808303815f87803b158015611e79575f5ffd5b505af1158015611e8b573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051611ecb929190918252602082015260400190565b60405180910390a25050505050565b611efb60405180606001604052805f81526020015f81526020015f81525090565b505f908152600d6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600c6020526040812054819060ff16611f5084826131d8565b9250925050915091565b5f5f611f6587611403565b5f888152600c602052604090205490915060ff166003816006811115611f8d57611f8d613ac4565b1488600383909192611fb5576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d6020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252899042811015612019576040516308f3034360e31b815260048101929092526024820152604401610919565b50506060830151602001518990428111156120505760405163017e35e560e71b815260048101929092526024820152604401610919565b505061014083015189901561207b57604051637eb9cea960e11b815260040161091991815260200190565b505f888860405161208d9291906143fc565b60408051918290039091205f8c815260086020908152838220600b01839055600c905291909120805460ff191660041790556014549091506120cf9042613fb6565b5f8b8152600d6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf9061211c908d9085908c908c9060040161440b565b6020604051808303815f875af1158015612138573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190614243565b945088888661218057604051632f9f8ab960e01b815260040161091992919061442a565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a6040516121b492919061442a565b60405180910390a2895f5160206146c65f395f51905f52600360046040516121dd929190614262565b60405180910390a25050505095945050505050565b6121fa612bfb565b80515f5b81811015612259576001600a84838151811061221c5761221c613f6d565b6020026020010151604051612231919061427d565b908152604051908190036020019020805491151560ff199092169190911790556001016121fe565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be818260405161189c9190614293565b5f546001600160a01b03163314806122ab57506003546001600160a01b031633145b6122f75760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d6772000000006044820152606401610919565b5f8160ff1611801561230d5750600d60ff821611155b6123525760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b6044820152606401610919565b612370828260ff16600d81111561236b5761236b613ac4565b613360565b5050565b61237c612bfb565b6001600160a01b0381166123d25760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e616765722061646472657373006044820152606401610919565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b0316331461246c5760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b6044820152606401610919565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b1580156124b6575f5ffd5b505af11580156124c8573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee5428260405161199a91815260200190565b612506612bfb565b6001600160a01b0381161580159061253757505f828152600960205260409020546001600160a01b03828116911614155b8290612559576040516381c4951960e01b815260040161091991815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb69910161189c565b6125b9612bfb565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610a4d565b6125f6612bfb565b6001600160a01b0381161580159061261c57506001546001600160a01b03828116911614155b819061263c576040516320252f0b60e01b81526004016109199190613a25565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610a4d908390613a25565b612690612bfb565b61269d60208201826144ca565b63ffffffff166126b360408301602084016144ca565b63ffffffff16101580156126d857505f6126d060208301836144ca565b63ffffffff16115b6127185760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610919565b8060115f84600381111561272e5761272e613ac4565b600381111561273f5761273f613ac4565b815260208101919091526040015f206127599160026136f3565b5081600381111561276c5761276c613ac4565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa8260405161199a91906144e3565b6127a3612bfb565b6001600160a01b0381166127cc575f604051631e4fbdf760e01b81526004016109199190613a25565b610a6981612c9a565b5f818152600c602052604081205460ff16818160068111156127f9576127f9613ac4565b0361281e57826001826040516337e1404160e01b815260040161091993929190614327565b600581600681111561283257612832613ac4565b036128535760405163462c7bed60e01b815260048101849052602401610919565b600681600681111561286757612867613ac4565b0361288857604051633de16e3560e11b815260048101849052602401610919565b5f61289384836131d8565b93509050806128b857604051639f65d93560e01b815260048101859052602401610919565b5f848152600c60209081526040808320805460ff19908116600617909155600e9092529091208054859216600183600d8111156128f7576128f7613ac4565b0217905550835f5160206146c65f395f51905f5283600660405161291c929190614262565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612956929190614521565b60405180910390a25050919050565b61296d612bfb565b6001600160a01b0381161580159061299257505f546001600160a01b03828116911614155b81906129b2576040516375ac4eb760e11b81526004016109199190613a25565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610a4d908390613a25565b6001600160a01b0381165f90815260076020526040902054819060ff1615612a395760405163b29d459560e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610a4d908390613a25565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612abe6134b1565b610a69816134d6565b8035612b0a5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b6044820152606401610919565b5f816020013511612b565760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b6044820152606401610919565b5f816040013511612ba55760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b6044820152606401610919565b80356012819055602080830135601381905560408085013560148190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610a4d565b33612c04611cbe565b6001600160a01b03161461180e573360405163118cdaa760e01b81526004016109199190613a25565b6040516001600160a01b038481166024830152838116604483015260648201839052612c949186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506134de565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612d4f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d76919081019061453c565b80515f848152600b60209081526040808320805490849055601090925282205493945091926001600160a01b031690829003612e14576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612de0908890889086906004016145cb565b5f604051808303815f87803b158015612df7575f5ffd5b505af1158015612e09573d5f5f3e3d5ffd5b505050505050505050565b825f03612eb5575f858152600f60205260409020546001600160a01b03168015612e4c57612e4c6001600160a01b03831682856131ad565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612e80908990899087906004016145cb565b5f604051808303815f87803b158015612e97575f5ffd5b505af1158015612ea9573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b03811115612ece57612ece6137e5565b604051908082528060200260200182016040528015612ef7578160200160208202803683370190505b5090505f612f0585856145fb565b90505f805b86811015612f445782848281518110612f2557612f25613f6d565b6020908102919091010152612f3a8383613fb6565b9150600101612f0a565b505f612f508287613fa3565b90508015612f8d578084612f6560018a613fa3565b81518110612f7557612f75613f6d565b60200260200101818151612f899190613fb6565b9052505b600154612fa7906001600160a01b03878116911688613541565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e90612fdb9088908c90899060040161464a565b5f604051808303815f87803b158015612ff2575f5ffd5b505af1158015613004573d5f5f3e3d5ffd5b505060015461302292506001600160a01b038881169250165f613541565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a898660405161305492919061467f565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f1590613090908c908c908a906004016145cb565b5f604051808303815f87803b1580156130a7575f5ffd5b505af11580156108b0573d5f5f3e3d5ffd5b5f818152600e602052604090205460609060ff16600181600d8111156130e1576130e1613ac4565b14806130fe5750600281600d8111156130fc576130fc613ac4565b145b15613136575f5b60405190808252806020026020018201604052801561312e578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561319c57506040513d5f823e601f3d908101601f19168201604052613199919081019061453c565b60015b6131a6575f613105565b9392505050565b6131d383846001600160a01b031663a9059cbb8585604051602401612c629291906146ac565b505050565b5f828152600d60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa158015613252573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061327691906140a1565b9050600185600681111561328c5761328c613ac4565b14801561329857508042115b156132ab57600180935093505050613359565b60028560068111156132bf576132bf613ac4565b1480156132cc5750815142115b156132e05760016003935093505050613359565b60038560068111156132f4576132f4613ac4565b1480156133045750816020015142115b156133185760016006935093505050613359565b600485600681111561332c5761332c613ac4565b14801561333c5750816040015142115b15613350576001600a935093505050613359565b5f5f9350935050505b9250929050565b5f828152600c602052604081205460ff169081600681111561338457613384613ac4565b036133a957826001826040516337e1404160e01b815260040161091993929190614327565b60058160068111156133bd576133bd613ac4565b036133de5760405163462c7bed60e01b815260048101849052602401610919565b60068160068111156133f2576133f2613ac4565b0361341357604051633de16e3560e11b815260048101849052602401610919565b5f838152600c60209081526040808320805460ff19908116600617909155600e9092529091208054849216600183600d81111561345257613452613ac4565b0217905550825f5160206146c65f395f51905f52826006604051613477929190614262565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051611cb1929190614521565b6134b96135d1565b61180e57604051631afcd79f60e31b815260040160405180910390fd5b6127a36134b1565b5f5f60205f8451602086015f885af1806134fd576040513d5f823e3d81fd5b50505f513d91508115613514578060011415613521565b6001600160a01b0384163b155b15612c945783604051635274afe760e01b81526004016109199190613a25565b5f836001600160a01b031663095ea7b384846040516024016135649291906146ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061359d84826135ea565b612c94576135c784856001600160a01b031663095ea7b3865f604051602401612c629291906146ac565b612c9484826134de565b5f6135da612a8c565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156136295750811561361b5780600114613629565b5f866001600160a01b03163b115b9695505050505050565b604080516101a081019091525f808252602082019081526020015f815260200161365b61378f565b81526020015f81526020015f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b82600281019282156136e3579160200282015b828111156136e35782518255916020019190600101906136c8565b506136ef9291506137ad565b5090565b6001830191839082156136e3579160200282015f5b8382111561375257833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613708565b80156137825782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613752565b50506136ef9291506137ad565b60405180604001604052806002906020820280368337509192915050565b5b808211156136ef575f81556001016137ae565b6001600160a01b0381168114610a69575f5ffd5b5f606082840312156109ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613821576138216137e5565b604052919050565b5f6001600160401b03821115613841576138416137e5565b5060051b60200190565b5f82601f83011261385a575f5ffd5b81356001600160401b03811115613873576138736137e5565b613886601f8201601f19166020016137f9565b81815284602083860101111561389a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f8301126138c5575f5ffd5b81356138d86138d382613829565b6137f9565b8082825260208201915060208360051b8601019250858311156138f9575f5ffd5b602085015b838110156139395780356001600160401b0381111561391b575f5ffd5b61392a886020838a010161384b565b845250602092830192016138fe565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b03121561395b575f5ffd5b8835613966816137c1565b97506020890135613976816137c1565b96506040890135613986816137c1565b95506060890135613996816137c1565b945060808901356139a6816137c1565b935060a089013592506139bc8a60c08b016137d5565b91506101208901356001600160401b038111156139d7575f5ffd5b6139e38b828c016138b6565b9150509295985092959890939650565b5f60208284031215613a03575f5ffd5b81356131a6816137c1565b5f60208284031215613a1e575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b803560048110613a47575f5ffd5b919050565b5f5f60408385031215613a5d575f5ffd5b613a6683613a39565b946020939093013593505050565b5f60208284031215613a84575f5ffd5b81356001600160401b03811115613a99575f5ffd5b820160e081850312156131a6575f5ffd5b5f60608284031215613aba575f5ffd5b6131a683836137d5565b634e487b7160e01b5f52602160045260245ffd5b60048110613ae857613ae8613ac4565b9052565b805f5b6002811015612c94578151845260209384019390910190600101613aef565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b805182525f6020820151613b536020850182613ad8565b50604082015160408401526060820151613b706060850182613aec565b50608082015160a084015260a0820151613b9560c08501826001600160a01b03169052565b5060c08201516101c060e0850152613bb16101c0850182613b0e565b905060e0830151848203610100860152613bcb8282613b0e565b915050610100830151613bea6101208601826001600160a01b03169052565b50610120830151610140850152610140830151610160850152610160830151848203610180860152613c1c8282613b0e565b91505061018083015161312e6101a08601826001600160a01b03169052565b828152604060208201525f613c536040830184613b3c565b949350505050565b600e8110613ae857613ae8613ac4565b60208101612ab08284613c5b565b8c8152613c89602082018d613ad8565b8a604082015289606082015260018060a01b038916608082015261018060a08201525f613cba61018083018a613b0e565b82810360c0840152613ccc818a613b0e565b6001600160a01b03891660e0850152610100840188905261012084018790528381036101408501529050613d008186613b0e565b915050613d196101608301846001600160a01b03169052565b9d9c50505050505050505050505050565b602081525f6131a66020830184613b3c565b5f60208284031215613d4c575f5ffd5b81356001600160401b03811115613d61575f5ffd5b613c538482850161384b565b5f60208284031215613d7d575f5ffd5b81356001600160401b03811115613d92575f5ffd5b613c53848285016138b6565b5f5f83601f840112613dae575f5ffd5b5081356001600160401b03811115613dc4575f5ffd5b602083019150836020828501011115613359575f5ffd5b5f5f5f5f5f60608688031215613def575f5ffd5b8535945060208601356001600160401b03811115613e0b575f5ffd5b613e1788828901613d9e565b90955093505060408601356001600160401b03811115613e35575f5ffd5b613e4188828901613d9e565b969995985093965092949392505050565b5f5f60408385031215613e63575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612ab0565b8215158152604081016131a66020830184613c5b565b5f5f60408385031215613eba575f5ffd5b82359150602083013560ff81168114613ed1575f5ffd5b809150509250929050565b5f5f60408385031215613eed575f5ffd5b823591506020830135613ed1816137c1565b60078110613ae857613ae8613ac4565b60208101612ab08284613eff565b5f5f60608385031215613f2e575f5ffd5b613f3783613a39565b915083606084011115613f48575f5ffd5b50926020919091019150565b5f60208284031215613f64575f5ffd5b6131a682613a39565b634e487b7160e01b5f52603260045260245ffd5b60208101612ab08284613ad8565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612ab057612ab0613f8f565b80820180821115612ab057612ab0613f8f565b5f60018201613fda57613fda613f8f565b5060010190565b5f5f8335601e19843603018112613ff6575f5ffd5b8301803591506001600160401b0382111561400f575f5ffd5b602001915036819003821315613359575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f61406a60a08301888a614023565b828103606084015261407d818789614023565b90508281036080840152614092818587614023565b9b9a5050505050505050505050565b5f602082840312156140b1575f5ffd5b5051919050565b600181811c908216806140cc57607f821691505b6020821081036109ad57634e487b7160e01b5f52602260045260245ffd5b601f8211156131d357805f5260205f20601f840160051c8101602085101561410f5750805b601f840160051c820191505b8181101561412e575f815560010161411b565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b03811115614162576141626137e5565b6141768161417084546140b8565b846140ea565b6020601f8211600181146141a3575f83156141915750848201515b61419b8482614135565b85555061412e565b5f84815260208120601f198516915b828110156141d257878501518255602094850194600190920191016141b2565b50848210156141ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561423857815163ffffffff16835260209283019290910190600101614213565b505050949350505050565b5f60208284031215614253575f5ffd5b815180151581146131a6575f5ffd5b604081016142708285613eff565b6131a66020830184613eff565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156142ea57603f198786030184526142d5858351613b0e565b945060209384019391909101906001016142b9565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b8381526060810161433b6020830185613eff565b613c536040830184613eff565b6001600160401b0383111561435f5761435f6137e5565b6143738361436d83546140b8565b836140ea565b5f601f84116001811461439f575f851561438d5750838201355b6143978682614135565b84555061412e565b5f83815260208120601f198716915b828110156143ce57868501358255602094850194600190920191016143ae565b50868210156143ea575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b848152836020820152606060408201525f613629606083018486614023565b602081525f613c53602083018486614023565b5f8151808452602084019350602083015f5b828110156144765781516001600160a01b031686526020958601959091019060010161444f565b5093949350505050565b848152836020820152608060408201525f61449e608083018561443d565b905060018060a01b038316606083015295945050505050565b803563ffffffff81168114613a47575f5ffd5b5f602082840312156144da575f5ffd5b6131a6826144b7565b6040810181835f5b60028110156145185763ffffffff614502836144b7565b16835260209283019291909101906001016144eb565b50505092915050565b6040810161452f8285613eff565b6131a66020830184613c5b565b5f6020828403121561454c575f5ffd5b81516001600160401b03811115614561575f5ffd5b8201601f81018413614571575f5ffd5b805161457f6138d382613829565b8082825260208201915060208360051b8501019250868311156145a0575f5ffd5b6020840193505b828410156136295783516145ba816137c1565b8252602093840193909101906145a7565b838152606060208201525f6145e3606083018561443d565b905060018060a01b0383166040830152949350505050565b5f8261461557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561447657815186526020958601959091019060010161462c565b6001600160a01b03841681526060602082018190525f9061466d9083018561443d565b8281036040840152613629818561461a565b604081525f614691604083018561443d565b82810360208401526146a3818561461a565b95945050505050565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b50600436106102a2575f3560e01c80638da5cb5b1161016c578063c1ab0f1f116100d5578063e59e46951161008f578063e59e4695146106d4578063ea71aa57146106e7578063f0691cba146106fa578063f2fde38b1461070d578063f81b8ef614610720578063fad8e11114610733578063fd2f3d0114610746575f5ffd5b8063c1ab0f1f14610641578063c4ccafa214610654578063cb64961714610676578063cbd168721461067f578063cf0f34c414610692578063cfbdc98d146106a5575f5ffd5b8063929a8faf11610126578063929a8faf146105ac57806399c6679d146105cd5780639c8570c8146105f5578063b68fd1be14610608578063bb2d1b821461061b578063bff232c11461062e575f5ffd5b80638da5cb5b146105445780638dcdd86b1461054c5780638e5ce3ad1461055e57806390173a41146105715780639117173c146105865780639231238614610599575f5ffd5b80634147a3601161020e578063715018a6116101c8578063715018a6146104dd57806377868ae4146104e55780637cfa9d74146104f85780637edcd7ab1461050b57806381476ec21461051e5780638581424314610531575f5ffd5b80634147a3601461043e578063459d92941461045d5780634e92ec631461049b5780634fc77264146104ae578063647846a5146104c15780636db5c8fd146104d4575f5ffd5b806315cce2241161025f57806315cce2241461037d5780631ba7294514610390578063343d842d146103a357806336c5d38a146103c45780634017daf0146103f3578063406ed35c1461041e575f5ffd5b806301d12f1c146102a657806302a3a9c9146102bb5780630ef81b2f146102ce57806310bc62811461030c57806311bd61d914610334578063156e6c7d1461035c575b5f5ffd5b6102b96102b4366004613943565b610759565b005b6102b96102c93660046139f3565b6108bf565b6102f66102dc366004613a0e565b5f908152600960205260409020546001600160a01b031690565b6040516103039190613a25565b60405180910390f35b6102f661031a366004613a0e565b60096020525f90815260409020546001600160a01b031681565b610347610342366004613a4c565b61096b565b60405163ffffffff9091168152602001610303565b61036f61036a366004613a74565b6109a7565b604051908152602001610303565b6102b961038b3660046139f3565b6109b3565b6102b961039e366004613aaa565b610a58565b6103b66103b1366004613a74565b610a6c565b604051610303929190613c3b565b6103e66103d2366004613a0e565b5f908152600e602052604090205460ff1690565b6040516103039190613c6b565b610406610401366004613a0e565b6111ef565b6040516103039c9b9a99989796959493929190613c79565b61043161042c366004613a0e565b611403565b6040516103039190613d2a565b61036f61044c366004613a0e565b600b6020525f908152604090205481565b61048b61046b366004613d3c565b8051602081830181018051600a8252928201919093012091525460ff1681565b6040519015158152602001610303565b6102b96104a9366004613a0e565b6116db565b6102b96104bc3660046139f3565b61176a565b6004546102f6906001600160a01b031681565b61036f60055481565b6102b96117fd565b6102b96104f3366004613d6d565b611810565b6102b9610506366004613a0e565b6118a8565b61048b610519366004613ddb565b6119a6565b6102b961052c366004613e52565b611bce565b6001546102f6906001600160a01b031681565b6102f6611cbe565b5f546102f6906001600160a01b031681565b6003546102f6906001600160a01b031681565b610579611cec565b6040516103039190613e72565b6102b9610594366004613a0e565b611d32565b6105796105a7366004613a0e565b611eda565b6105bf6105ba366004613a0e565b611f33565b604051610303929190613e93565b6102f66105db366004613a0e565b5f908152600f60205260409020546001600160a01b031690565b61048b610603366004613ddb565b611f5a565b6102b9610616366004613d6d565b6121f2565b6102b9610629366004613ea9565b612289565b6102b961063c3660046139f3565b612374565b6102b961064f366004613e52565b61241b565b61048b6106623660046139f3565b60076020525f908152604090205460ff1681565b61036f60065481565b6102b961068d366004613edc565b6124fe565b6102b96106a0366004613a0e565b6125b1565b6106c76106b3366004613a0e565b5f908152600c602052604090205460ff1690565b6040516103039190613f0f565b6102b96106e23660046139f3565b6125ee565b6102b96106f5366004613f1d565b612688565b6002546102f6906001600160a01b031681565b6102b961071b3660046139f3565b61279b565b6103e661072e366004613a0e565b6127d5565b6102b96107413660046139f3565b612965565b6102b96107543660046139f3565b6129fd565b5f610762612a8c565b805490915060ff600160401b82041615906001600160401b03165f811580156107885750825b90505f826001600160401b031660011480156107a35750303b155b9050811580156107b1575080155b156107cf5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156107f957845460ff60401b1916600160401b1785555b61080233612ab6565b61080b886125b1565b6108148c612965565b61081d8b6125ee565b6108268a6108bf565b61082f896109b3565b61083887612ac7565b610841866121f2565b610849611cbe565b6001600160a01b03168d6001600160a01b03161461086a5761086a8d61279b565b83156108b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6108c7612bfb565b6001600160a01b0381166109225760405162461bcd60e51b815260206004820152601f60248201527f496e76616c6964204533526566756e644d616e6167657220616464726573730060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9557d04c1c0b16f93f13b69aed23b3b6ab935bff3c53ac81d17896d3583542ed905f90a250565b6011602052815f5260405f208160028110610984575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b620f4240805b50919050565b6109bb612bfb565b6001600160a01b038116158015906109e157506004546001600160a01b03828116911614155b8190610a015760405163eddf07f560e01b81526004016109199190613a25565b50600480546001600160a01b0319166001600160a01b0383161790556040517f722ff84c1234b2482061def5c82c6b5080c117b3cbb69d686844a051e4b8e7f390610a4d908390613a25565b60405180910390a150565b610a60612bfb565b610a6981612ac7565b50565b5f610a75613633565b5f601181610a866020870187613f54565b6003811115610a9757610a97613ac4565b6003811115610aa857610aa8613ac4565b8152602081019190915260409081015f20815180830190925260028282826020028201915f905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610acf579050505050505090505f81600160028110610b2657610b26613f6d565b602002015163ffffffff1611845f016020810190610b449190613f54565b90610b635760405163286c068d60e11b81526004016109199190613f81565b50602084013542811015610b8d57604051630b99e87960e01b815260040161091991815260200190565b5060408401356020850135811015610bbb5760405163174b5a0760e21b815260040161091991815260200190565b506014546013545f9190610bd3426040890135613fa3565b610bdd9190613fb6565b610be79190613fb6565b905060055481108190610c10576040516313b783af60e21b815260040161091991815260200190565b5060075f610c2460808801606089016139f3565b6001600160a01b0316815260208101919091526040015f205460ff16610c5060808701606088016139f3565b90610c6f5760405163295a6a6f60e11b81526004016109199190613a25565b505f610c7a866109a7565b60068054965090915085905f610c8f83613fc9565b9091555050604080514460208201529081018690525f9060600160408051808303601f1901815291815281516020928301205f898152600b84528281208690556004546010855283822080546001600160a01b039092166001600160a01b0319928316179055600c8552838220805460ff19166001179055600f909452829020805433941693909317909255601354919250610d2e9190890135613fb6565b5f878152600d6020908152604090912060010191909155818652610d5490880188613f54565b85602001906003811115610d6a57610d6a613ac4565b90816003811115610d7d57610d7d613ac4565b905250436040808701919091528051808201825290602089019060029083908390808284375f920191909152505050606080870191909152610dc590608089019089016139f3565b6001600160a01b031660a0860152610de06080880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c080870191909152610e2890880188613fe1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525060e08a0194909452505050610120860181905261014086018190526040805160208101909152908152610160860152336101808601819052600454610ea9916001600160a01b03909116903085612c2d565b5f610eba6080890160608a016139f3565b6001600160a01b031663fefd9a8b8884610ed760808d018d613fe1565b610ee460a08f018f613fe1565b8f8060c00190610ef49190613fe1565b6040518963ffffffff1660e01b8152600401610f1798979695949392919061404b565b6020604051808303815f875af1158015610f33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5791906140a1565b5f818152600960205260409020549091506001600160a01b03168181610f93576040516381c4951960e01b815260040161091991815260200190565b50608087018290526001600160a01b0381166101008801525f8881526008602090815260409091208851815590880151600180830180548b94939260ff199190911690836003811115610fe857610fe8613ac4565b02179055506040820151816002015560608201518160030190600261100e9291906136b5565b506080820151600582015560a08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560c082015160078201906110539082614149565b5060e082015160088201906110689082614149565b506101008201516009820180546001600160a01b0319166001600160a01b03909216919091179055610120820151600a820155610140820151600b820155610160820151600c8201906110bb9082614149565b506101809190910151600d90910180546001600160a01b0319166001600160a01b039283161790555f5460405163291a691b60e01b815291169063291a691b9061110d908b9087908b906004016141fe565b6020604051808303815f875af1158015611129573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061114d9190614243565b61116a57604051630d8dbe2560e01b815260040160405180910390fd5b61117a60808a0160608b016139f3565b6001600160a01b03167fc82a56518b9f52a6515ea4c47357881d49ce5088a24cc1dc05c966f3a0f28b7189896040516111b4929190613c3b565b60405180910390a2875f5160206146c65f395f51905f525f60016040516111dc929190614262565b60405180910390a2505050505050915091565b60086020525f9081526040902080546001820154600283015460058401546006850154600786018054959660ff90951695939492936001600160a01b03909216929161123a906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611266906140b8565b80156112b15780601f10611288576101008083540402835291602001916112b1565b820191905f5260205f20905b81548152906001019060200180831161129457829003601f168201915b5050505050908060080180546112c6906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546112f2906140b8565b801561133d5780601f106113145761010080835404028352916020019161133d565b820191905f5260205f20905b81548152906001019060200180831161132057829003601f168201915b5050506009840154600a850154600b860154600c8701805496976001600160a01b039094169692955090935090611373906140b8565b80601f016020809104026020016040519081016040528092919081815260200182805461139f906140b8565b80156113ea5780601f106113c1576101008083540402835291602001916113ea565b820191905f5260205f20905b8154815290600101906020018083116113cd57829003601f168201915b505050600d90930154919250506001600160a01b03168c565b61140b613633565b5f8281526008602090815260409182902082516101a08101909352805483526001810154909183019060ff16600381111561144857611448613ac4565b600381111561145957611459613ac4565b8152600282810154602083015260408051808201808352919093019291600385019182845b81548152602001906001019080831161147e5750505091835250506005820154602082015260068201546001600160a01b031660408201526007820180546060909201916114cb906140b8565b80601f01602080910402602001604051908101604052809291908181526020018280546114f7906140b8565b80156115425780601f1061151957610100808354040283529160200191611542565b820191905f5260205f20905b81548152906001019060200180831161152557829003601f168201915b5050505050815260200160088201805461155b906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611587906140b8565b80156115d25780601f106115a9576101008083540402835291602001916115d2565b820191905f5260205f20905b8154815290600101906020018083116115b557829003601f168201915b505050918352505060098201546001600160a01b03166020820152600a8201546040820152600b8201546060820152600c82018054608090920191611616906140b8565b80601f0160208091040260200160405190810160405280929190818152602001828054611642906140b8565b801561168d5780601f106116645761010080835404028352916020019161168d565b820191905f5260205f20905b81548152906001019060200180831161167057829003601f168201915b5050509183525050600d91909101546001600160a01b0390811660209092019190915260a08201519192508391166109ad5760405163cd6f4a4f60e01b815260040161091991815260200190565b6116e3612bfb565b5f8181526009602052604090205481906001600160a01b031661171c576040516381c4951960e01b815260040161091991815260200190565b505f818152600960205260409081902080546001600160a01b0319169055517f104eb329a192aef26eddea07c2af5ad2587792e62b37ed4045b6ba59bc5540fc90610a4d9083815260200190565b611772612bfb565b6001600160a01b0381165f90815260076020526040902054819060ff166117ad576040516321ac7c5f60e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19169055517f56070b80bd617fcd2f7a284861edb488830a38f9dedcd77b2cb2f4eac17743e790610a4d908390613a25565b611805612bfb565b61180e5f612c9a565b565b611818612bfb565b80515f5b8181101561186c57600a83828151811061183857611838613f6d565b602002602001015160405161184d919061427d565b908152604051908190036020019020805460ff1916905560010161181c565b507fd1b46e030b48add7bc03225cc5a6f403970976b36983f99ec31d535d627fc7db8260405161189c9190614293565b60405180910390a15050565b5f546001600160a01b031633146118d15760405162461bcd60e51b8152600401610919906142f6565b5f818152600c602052604090205460ff1660018160068111156118f6576118f6613ac4565b1461191b57816001826040516337e1404160e01b815260040161091993929190614327565b5f828152600c60205260409020805460ff191660021790556012546119409042613fb6565b5f838152600d602052604080822092909255905183917fc44405af9078047712501f519e1fb900c2896c62b488336f84529c72ae16e6f191a2815f5160206146c65f395f51905f526001600260405161199a929190614262565b60405180910390a25050565b5f5f6119b187611403565b5f888152600c602052604090205490915060ff1660048160068111156119d9576119d9613ac4565b1488600483909192611a01576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d60209081526040918290208251606081018452815481526001820154928101929092526002015491810182905290899042811015611a64576040516308f3034360e31b815260048101929092526024820152604401610919565b50505f898152600860205260409020600c01611a81888a83614348565b505f898152600c6020526040902080546005919060ff191660018302179055508261010001516001600160a01b0316632f0e1bbf8a8a8a604051611ac69291906143fc565b6040519081900381206001600160e01b031960e085901b168252611af192918b908b9060040161440b565b602060405180830381865afa158015611b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b309190614243565b9350878785611b5457604051632f9f8ab960e01b815260040161091992919061442a565b5050611b5f89612d0a565b887f02a24c3402076671e129905ba4579d884b1f94ded1c07fc03d26d11b60bca1698989604051611b9192919061442a565b60405180910390a2885f5160206146c65f395f51905f5260046005604051611bba929190614262565b60405180910390a250505095945050505050565b5f546001600160a01b03163314611bf75760405162461bcd60e51b8152600401610919906142f6565b5f828152600c602052604090205460ff166002816006811115611c1c57611c1c613ac4565b14611c4157826002826040516337e1404160e01b815260040161091993929190614327565b5f838152600c60209081526040808320805460ff191660031790556008909152808220600a018490555184917f11df18edb9bc9cd90a79068e0e208b630202148643d797d6150e7bacb733e63c91a2825f5160206146c65f395f51905f5260026003604051611cb1929190614262565b60405180910390a2505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611d0d60405180606001604052805f81526020015f81526020015f81525090565b5060408051606081018252601254815260135460208201526014549181019190915290565b5f818152600c602052604090205460ff166006816006811115611d5757611d57613ac4565b14611d945760405162461bcd60e51b815260206004820152600d60248201526c114cc81b9bdd0819985a5b1959609a1b6044820152606401610919565b5f828152600b602052604090205480611de65760405162461bcd60e51b8152602060048201526014602482015273139bc81c185e5b595b9d081d1bc81c99599d5b9960621b6044820152606401610919565b5f838152600b60205260408120819055611dff846130b9565b5f858152601060205260409020546002549192506001600160a01b0390811691611e2c91839116856131ad565b60025460405163da19b69760e01b81526001600160a01b039091169063da19b69790611e62908890879087908790600401614480565b5f604051808303815f87803b158015611e79575f5ffd5b505af1158015611e8b573d5f5f3e3d5ffd5b50505050847f5297818f48a66292b8b3e2caab83eec531b669bb20807fd38cf006adb2a07317848451604051611ecb929190918252602082015260400190565b60405180910390a25050505050565b611efb60405180606001604052805f81526020015f81526020015f81525090565b505f908152600d6020908152604091829020825160608101845281548152600182015492810192909252600201549181019190915290565b5f818152600c6020526040812054819060ff16611f5084826131d8565b9250925050915091565b5f5f611f6587611403565b5f888152600c602052604090205490915060ff166003816006811115611f8d57611f8d613ac4565b1488600383909192611fb5576040516337e1404160e01b815260040161091993929190614327565b5050505f888152600d6020908152604091829020825160608101845281548152600182015492810183905260029091015492810192909252899042811015612019576040516308f3034360e31b815260048101929092526024820152604401610919565b50506060830151602001518990428111156120505760405163017e35e560e71b815260048101929092526024820152604401610919565b505061014083015189901561207b57604051637eb9cea960e11b815260040161091991815260200190565b505f888860405161208d9291906143fc565b60408051918290039091205f8c815260086020908152838220600b01839055600c905291909120805460ff191660041790556014549091506120cf9042613fb6565b5f8b8152600d6020526040908190206002019190915560a08501519051632f0e1bbf60e01b81526001600160a01b0390911690632f0e1bbf9061211c908d9085908c908c9060040161440b565b6020604051808303815f875af1158015612138573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215c9190614243565b945088888661218057604051632f9f8ab960e01b815260040161091992919061442a565b5050897f7cc27e4a5626cbc4f8ba1a927b0448de55e6a114bc87660331270c5109ade0718a8a6040516121b492919061442a565b60405180910390a2895f5160206146c65f395f51905f52600360046040516121dd929190614262565b60405180910390a25050505095945050505050565b6121fa612bfb565b80515f5b81811015612259576001600a84838151811061221c5761221c613f6d565b6020026020010151604051612231919061427d565b908152604051908190036020019020805491151560ff199092169190911790556001016121fe565b507f027b83cad653f54850fef6faa8c705f73a53e7f8de50a3a33ac1e0e3a5c0be818260405161189c9190614293565b5f546001600160a01b03163314806122ab57506003546001600160a01b031633145b6122f75760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79205265676973747279206f7220536c617368696e674d6772000000006044820152606401610919565b5f8160ff1611801561230d5750600d60ff821611155b6123525760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103330b4b63ab932903932b0b9b7b760511b6044820152606401610919565b612370828260ff16600d81111561236b5761236b613ac4565b613360565b5050565b61237c612bfb565b6001600160a01b0381166123d25760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420536c617368696e674d616e616765722061646472657373006044820152606401610919565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f4ccc8ed483c7c44c3602c3c38afc2c014a8f1d2dc210dfe58ebeeeead230f8e0905f90a250565b6003546001600160a01b0316331461246c5760405162461bcd60e51b815260206004820152601460248201527327b7363c9029b630b9b434b733a6b0b730b3b2b960611b6044820152606401610919565b60025460405163c1ab0f1f60e01b815260048101849052602481018390526001600160a01b039091169063c1ab0f1f906044015f604051808303815f87803b1580156124b6575f5ffd5b505af11580156124c8573d5f5f3e3d5ffd5b50505050817f4f41a3b0a032ebcae925f2ace77d507435840ca4b2dbaffdd7723fa8d72ee5428260405161199a91815260200190565b612506612bfb565b6001600160a01b0381161580159061253757505f828152600960205260409020546001600160a01b03828116911614155b8290612559576040516381c4951960e01b815260040161091991815260200190565b505f8281526009602090815260409182902080546001600160a01b0319166001600160a01b03851617905590518381527ff4041a3f914dac3bc9bf5f003ba41f28dbb84abe42f4e07c76266f5c8ceecb69910161189c565b6125b9612bfb565b60058190556040518181527fba0716ba1ee2ea8ecc4c64119b4537cdb42a99d82acf92af5b87607b8b52355290602001610a4d565b6125f6612bfb565b6001600160a01b0381161580159061261c57506001546001600160a01b03828116911614155b819061263c576040516320252f0b60e01b81526004016109199190613a25565b50600180546001600160a01b0319166001600160a01b0383161790556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a790610a4d908390613a25565b612690612bfb565b61269d60208201826144ca565b63ffffffff166126b360408301602084016144ca565b63ffffffff16101580156126d857505f6126d060208301836144ca565b63ffffffff16115b6127185760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081d1a1c995cda1bdb19607a1b6044820152606401610919565b8060115f84600381111561272e5761272e613ac4565b600381111561273f5761273f613ac4565b815260208101919091526040015f206127599160026136f3565b5081600381111561276c5761276c613ac4565b7f8b56fae526eee054f0849759a99fc7d4ff3823824ebf097a56f7d78adb6b34fa8260405161199a91906144e3565b6127a3612bfb565b6001600160a01b0381166127cc575f604051631e4fbdf760e01b81526004016109199190613a25565b610a6981612c9a565b5f818152600c602052604081205460ff16818160068111156127f9576127f9613ac4565b0361281e57826001826040516337e1404160e01b815260040161091993929190614327565b600581600681111561283257612832613ac4565b036128535760405163462c7bed60e01b815260048101849052602401610919565b600681600681111561286757612867613ac4565b0361288857604051633de16e3560e11b815260048101849052602401610919565b5f61289384836131d8565b93509050806128b857604051639f65d93560e01b815260048101859052602401610919565b5f848152600c60209081526040808320805460ff19908116600617909155600e9092529091208054859216600183600d8111156128f7576128f7613ac4565b0217905550835f5160206146c65f395f51905f5283600660405161291c929190614262565b60405180910390a2837fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8385604051612956929190614521565b60405180910390a25050919050565b61296d612bfb565b6001600160a01b0381161580159061299257505f546001600160a01b03828116911614155b81906129b2576040516375ac4eb760e11b81526004016109199190613a25565b505f80546001600160a01b0319166001600160a01b0383161790556040517f80052b810d39120cf6c976cca504a21703f585521dc7a41c6d241090e6c579b690610a4d908390613a25565b6001600160a01b0381165f90815260076020526040902054819060ff1615612a395760405163b29d459560e01b81526004016109199190613a25565b506001600160a01b0381165f9081526007602052604090819020805460ff19166001179055517fb8d368517268f297fff00825d67d098763117d061360d31027be5b2e1a59d46790610a4d908390613a25565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b612abe6134b1565b610a69816134d6565b8035612b0a5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420444b472077696e646f7760701b6044820152606401610919565b5f816020013511612b565760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420636f6d707574652077696e646f7760501b6044820152606401610919565b5f816040013511612ba55760405162461bcd60e51b8152602060048201526019602482015278496e76616c69642064656372797074696f6e2077696e646f7760381b6044820152606401610919565b80356012819055602080830135601381905560408085013560148190558151948552928401919091528201527f7e86ba16b805e2835af5c5b7aa5a942ced8bcc1fb95a05fbe42dae3862350a1690606001610a4d565b33612c04611cbe565b6001600160a01b03161461180e573360405163118cdaa760e01b81526004016109199190613a25565b6040516001600160a01b038481166024830152838116604483015260648201839052612c949186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506134de565b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f805460405162beb08960e51b8152600481018490526001600160a01b03909116906317d61120906024015f60405180830381865afa158015612d4f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d76919081019061453c565b80515f848152600b60209081526040808320805490849055601090925282205493945091926001600160a01b031690829003612e14576002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612de0908890889086906004016145cb565b5f604051808303815f87803b158015612df7575f5ffd5b505af1158015612e09573d5f5f3e3d5ffd5b505050505050505050565b825f03612eb5575f858152600f60205260409020546001600160a01b03168015612e4c57612e4c6001600160a01b03831682856131ad565b6002546040516341489f1560e01b81526001600160a01b03909116906341489f1590612e80908990899087906004016145cb565b5f604051808303815f87803b158015612e97575f5ffd5b505af1158015612ea9573d5f5f3e3d5ffd5b50505050505050505050565b5f836001600160401b03811115612ece57612ece6137e5565b604051908082528060200260200182016040528015612ef7578160200160208202803683370190505b5090505f612f0585856145fb565b90505f805b86811015612f445782848281518110612f2557612f25613f6d565b6020908102919091010152612f3a8383613fb6565b9150600101612f0a565b505f612f508287613fa3565b90508015612f8d578084612f6560018a613fa3565b81518110612f7557612f75613f6d565b60200260200101818151612f899190613fb6565b9052505b600154612fa7906001600160a01b03878116911688613541565b600154604051636ec640c760e11b81526001600160a01b039091169063dd8c818e90612fdb9088908c90899060040161464a565b5f604051808303815f87803b158015612ff2575f5ffd5b505af1158015613004573d5f5f3e3d5ffd5b505060015461302292506001600160a01b038881169250165f613541565b887fac9fe8ad7f55eac03284399116ecafc104f10459773f4cdf47063c46e5be335a898660405161305492919061467f565b60405180910390a26002546040516341489f1560e01b81526001600160a01b03909116906341489f1590613090908c908c908a906004016145cb565b5f604051808303815f87803b1580156130a7575f5ffd5b505af11580156108b0573d5f5f3e3d5ffd5b5f818152600e602052604090205460609060ff16600181600d8111156130e1576130e1613ac4565b14806130fe5750600281600d8111156130fc576130fc613ac4565b145b15613136575f5b60405190808252806020026020018201604052801561312e578160200160208202803683370190505b509392505050565b5f5460405162beb08960e51b8152600481018590526001600160a01b03909116906317d61120906024015f60405180830381865afa92505050801561319c57506040513d5f823e601f3d908101601f19168201604052613199919081019061453c565b60015b6131a6575f613105565b9392505050565b6131d383846001600160a01b031663a9059cbb8585604051602401612c629291906146ac565b505050565b5f828152600d60209081526040808320815160608101835281548152600182015493810193909352600201548282015282549051632800d82960e01b81526004810186905283929183916001600160a01b0390911690632800d82990602401602060405180830381865afa158015613252573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061327691906140a1565b9050600185600681111561328c5761328c613ac4565b14801561329857508042115b156132ab57600180935093505050613359565b60028560068111156132bf576132bf613ac4565b1480156132cc5750815142115b156132e05760016003935093505050613359565b60038560068111156132f4576132f4613ac4565b1480156133045750816020015142115b156133185760016006935093505050613359565b600485600681111561332c5761332c613ac4565b14801561333c5750816040015142115b15613350576001600a935093505050613359565b5f5f9350935050505b9250929050565b5f828152600c602052604081205460ff169081600681111561338457613384613ac4565b036133a957826001826040516337e1404160e01b815260040161091993929190614327565b60058160068111156133bd576133bd613ac4565b036133de5760405163462c7bed60e01b815260048101849052602401610919565b60068160068111156133f2576133f2613ac4565b0361341357604051633de16e3560e11b815260048101849052602401610919565b5f838152600c60209081526040808320805460ff19908116600617909155600e9092529091208054849216600183600d81111561345257613452613ac4565b0217905550825f5160206146c65f395f51905f52826006604051613477929190614262565b60405180910390a2827fe20209be7caae6e76291267cfa711353981274bf127e94f16eb9ec44b68582bb8284604051611cb1929190614521565b6134b96135d1565b61180e57604051631afcd79f60e31b815260040160405180910390fd5b6127a36134b1565b5f5f60205f8451602086015f885af1806134fd576040513d5f823e3d81fd5b50505f513d91508115613514578060011415613521565b6001600160a01b0384163b155b15612c945783604051635274afe760e01b81526004016109199190613a25565b5f836001600160a01b031663095ea7b384846040516024016135649291906146ac565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050905061359d84826135ea565b612c94576135c784856001600160a01b031663095ea7b3865f604051602401612c629291906146ac565b612c9484826134de565b5f6135da612a8c565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156136295750811561361b5780600114613629565b5f866001600160a01b03163b115b9695505050505050565b604080516101a081019091525f808252602082019081526020015f815260200161365b61378f565b81526020015f81526020015f6001600160a01b0316815260200160608152602001606081526020015f6001600160a01b031681526020015f81526020015f8152602001606081526020015f6001600160a01b031681525090565b82600281019282156136e3579160200282015b828111156136e35782518255916020019190600101906136c8565b506136ef9291506137ad565b5090565b6001830191839082156136e3579160200282015f5b8382111561375257833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302613708565b80156137825782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613752565b50506136ef9291506137ad565b60405180604001604052806002906020820280368337509192915050565b5b808211156136ef575f81556001016137ae565b6001600160a01b0381168114610a69575f5ffd5b5f606082840312156109ad575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613821576138216137e5565b604052919050565b5f6001600160401b03821115613841576138416137e5565b5060051b60200190565b5f82601f83011261385a575f5ffd5b81356001600160401b03811115613873576138736137e5565b613886601f8201601f19166020016137f9565b81815284602083860101111561389a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f82601f8301126138c5575f5ffd5b81356138d86138d382613829565b6137f9565b8082825260208201915060208360051b8601019250858311156138f9575f5ffd5b602085015b838110156139395780356001600160401b0381111561391b575f5ffd5b61392a886020838a010161384b565b845250602092830192016138fe565b5095945050505050565b5f5f5f5f5f5f5f5f610140898b03121561395b575f5ffd5b8835613966816137c1565b97506020890135613976816137c1565b96506040890135613986816137c1565b95506060890135613996816137c1565b945060808901356139a6816137c1565b935060a089013592506139bc8a60c08b016137d5565b91506101208901356001600160401b038111156139d7575f5ffd5b6139e38b828c016138b6565b9150509295985092959890939650565b5f60208284031215613a03575f5ffd5b81356131a6816137c1565b5f60208284031215613a1e575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b803560048110613a47575f5ffd5b919050565b5f5f60408385031215613a5d575f5ffd5b613a6683613a39565b946020939093013593505050565b5f60208284031215613a84575f5ffd5b81356001600160401b03811115613a99575f5ffd5b820160e081850312156131a6575f5ffd5b5f60608284031215613aba575f5ffd5b6131a683836137d5565b634e487b7160e01b5f52602160045260245ffd5b60048110613ae857613ae8613ac4565b9052565b805f5b6002811015612c94578151845260209384019390910190600101613aef565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b805182525f6020820151613b536020850182613ad8565b50604082015160408401526060820151613b706060850182613aec565b50608082015160a084015260a0820151613b9560c08501826001600160a01b03169052565b5060c08201516101c060e0850152613bb16101c0850182613b0e565b905060e0830151848203610100860152613bcb8282613b0e565b915050610100830151613bea6101208601826001600160a01b03169052565b50610120830151610140850152610140830151610160850152610160830151848203610180860152613c1c8282613b0e565b91505061018083015161312e6101a08601826001600160a01b03169052565b828152604060208201525f613c536040830184613b3c565b949350505050565b600e8110613ae857613ae8613ac4565b60208101612ab08284613c5b565b8c8152613c89602082018d613ad8565b8a604082015289606082015260018060a01b038916608082015261018060a08201525f613cba61018083018a613b0e565b82810360c0840152613ccc818a613b0e565b6001600160a01b03891660e0850152610100840188905261012084018790528381036101408501529050613d008186613b0e565b915050613d196101608301846001600160a01b03169052565b9d9c50505050505050505050505050565b602081525f6131a66020830184613b3c565b5f60208284031215613d4c575f5ffd5b81356001600160401b03811115613d61575f5ffd5b613c538482850161384b565b5f60208284031215613d7d575f5ffd5b81356001600160401b03811115613d92575f5ffd5b613c53848285016138b6565b5f5f83601f840112613dae575f5ffd5b5081356001600160401b03811115613dc4575f5ffd5b602083019150836020828501011115613359575f5ffd5b5f5f5f5f5f60608688031215613def575f5ffd5b8535945060208601356001600160401b03811115613e0b575f5ffd5b613e1788828901613d9e565b90955093505060408601356001600160401b03811115613e35575f5ffd5b613e4188828901613d9e565b969995985093965092949392505050565b5f5f60408385031215613e63575f5ffd5b50508035926020909101359150565b81518152602080830151908201526040808301519082015260608101612ab0565b8215158152604081016131a66020830184613c5b565b5f5f60408385031215613eba575f5ffd5b82359150602083013560ff81168114613ed1575f5ffd5b809150509250929050565b5f5f60408385031215613eed575f5ffd5b823591506020830135613ed1816137c1565b60078110613ae857613ae8613ac4565b60208101612ab08284613eff565b5f5f60608385031215613f2e575f5ffd5b613f3783613a39565b915083606084011115613f48575f5ffd5b50926020919091019150565b5f60208284031215613f64575f5ffd5b6131a682613a39565b634e487b7160e01b5f52603260045260245ffd5b60208101612ab08284613ad8565b634e487b7160e01b5f52601160045260245ffd5b81810381811115612ab057612ab0613f8f565b80820180821115612ab057612ab0613f8f565b5f60018201613fda57613fda613f8f565b5060010190565b5f5f8335601e19843603018112613ff6575f5ffd5b8301803591506001600160401b0382111561400f575f5ffd5b602001915036819003821315613359575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b88815287602082015260a060408201525f61406a60a08301888a614023565b828103606084015261407d818789614023565b90508281036080840152614092818587614023565b9b9a5050505050505050505050565b5f602082840312156140b1575f5ffd5b5051919050565b600181811c908216806140cc57607f821691505b6020821081036109ad57634e487b7160e01b5f52602260045260245ffd5b601f8211156131d357805f5260205f20601f840160051c8101602085101561410f5750805b601f840160051c820191505b8181101561412e575f815560010161411b565b5050505050565b5f19600383901b1c191660019190911b1790565b81516001600160401b03811115614162576141626137e5565b6141768161417084546140b8565b846140ea565b6020601f8211600181146141a3575f83156141915750848201515b61419b8482614135565b85555061412e565b5f84815260208120601f198516915b828110156141d257878501518255602094850194600190920191016141b2565b50848210156141ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b838152602081018390526080810160408201835f5b600281101561423857815163ffffffff16835260209283019290910190600101614213565b505050949350505050565b5f60208284031215614253575f5ffd5b815180151581146131a6575f5ffd5b604081016142708285613eff565b6131a66020830184613eff565b5f82518060208501845e5f920191825250919050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156142ea57603f198786030184526142d5858351613b0e565b945060209384019391909101906001016142b9565b50929695505050505050565b6020808252601790820152764f6e6c79204369706865726e6f6465526567697374727960481b604082015260600190565b8381526060810161433b6020830185613eff565b613c536040830184613eff565b6001600160401b0383111561435f5761435f6137e5565b6143738361436d83546140b8565b836140ea565b5f601f84116001811461439f575f851561438d5750838201355b6143978682614135565b84555061412e565b5f83815260208120601f198716915b828110156143ce57868501358255602094850194600190920191016143ae565b50868210156143ea575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b818382375f9101908152919050565b848152836020820152606060408201525f613629606083018486614023565b602081525f613c53602083018486614023565b5f8151808452602084019350602083015f5b828110156144765781516001600160a01b031686526020958601959091019060010161444f565b5093949350505050565b848152836020820152608060408201525f61449e608083018561443d565b905060018060a01b038316606083015295945050505050565b803563ffffffff81168114613a47575f5ffd5b5f602082840312156144da575f5ffd5b6131a6826144b7565b6040810181835f5b60028110156145185763ffffffff614502836144b7565b16835260209283019291909101906001016144eb565b50505092915050565b6040810161452f8285613eff565b6131a66020830184613c5b565b5f6020828403121561454c575f5ffd5b81516001600160401b03811115614561575f5ffd5b8201601f81018413614571575f5ffd5b805161457f6138d382613829565b8082825260208201915060208360051b8501019250868311156145a0575f5ffd5b6020840193505b828410156136295783516145ba816137c1565b8252602093840193909101906145a7565b838152606060208201525f6145e3606083018561443d565b905060018060a01b0383166040830152949350505050565b5f8261461557634e487b7160e01b5f52601260045260245ffd5b500490565b5f8151808452602084019350602083015f5b8281101561447657815186526020958601959091019060010161462c565b6001600160a01b03841681526060602082018190525f9061466d9083018561443d565b8281036040840152613629818561461a565b604081525f614691604083018561443d565b82810360208401526146a3818561461a565b95945050505050565b6001600160a01b0392909216825260208201526040019056fe1b418a230a21d37a078bf8f16decbde8ccceacd77159371f62f0d4ea00d19967a164736f6c634300081c000a", + "linkReferences": {}, + "deployedLinkReferences": {}, + "immutableReferences": {}, + "inputSourceName": "project/contracts/Enclave.sol", + "buildInfoId": "solc-0_8_28-dffd00520e201ac3c58c9a66fb0b3e5b1925a3e4" +} \ No newline at end of file diff --git a/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json b/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json new file mode 100644 index 0000000000..ed8c293754 --- /dev/null +++ b/packages/enclave-contracts/artifacts/contracts/registry/CiphernodeRegistryOwnable.sol/CiphernodeRegistryOwnable.json @@ -0,0 +1,1302 @@ +{ + "_format": "hh3-artifact-1", + "contractName": "CiphernodeRegistryOwnable", + "sourceName": "contracts/registry/CiphernodeRegistryOwnable.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BondingRegistryNotSet", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "CiphernodeNotEnabled", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeAlreadyFinalized", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeAlreadyPublished", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeAlreadyRequested", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeDeadlineReached", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeNotFinalized", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeNotInitializedOrFinalized", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeNotPublished", + "type": "error" + }, + { + "inputs": [], + "name": "CommitteeNotRequested", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requested", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "available", + "type": "uint256" + } + ], + "name": "InsufficientCiphernodes", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidTicketNumber", + "type": "error" + }, + { + "inputs": [], + "name": "NodeAlreadySubmitted", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "NodeNotBonded", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotEligible", + "type": "error" + }, + { + "inputs": [], + "name": "NodeNotSubmitted", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [], + "name": "NotOwnerOrBondingRegistry", + "type": "error" + }, + { + "inputs": [], + "name": "NotSlashingManager", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyBondingRegistry", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyEnclave", + "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": "SubmissionWindowClosed", + "type": "error" + }, + { + "inputs": [], + "name": "SubmissionWindowNotClosed", + "type": "error" + }, + { + "inputs": [], + "name": "ThresholdNotMet", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" + }, + { + "inputs": [], + "name": "ZeroAddress", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "bondingRegistry", + "type": "address" + } + ], + "name": "BondingRegistrySet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "numNodes", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "CiphernodeAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "numNodes", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "size", + "type": "uint256" + } + ], + "name": "CiphernodeRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "active", + "type": "bool" + } + ], + "name": "CommitteeActivationChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "committee", + "type": "address[]" + } + ], + "name": "CommitteeFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nodesSubmitted", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thresholdRequired", + "type": "uint256" + } + ], + "name": "CommitteeFormationFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "reason", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "activeCountAfter", + "type": "uint256" + } + ], + "name": "CommitteeMemberExpelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "CommitteePublished", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "requestBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "committeeDeadline", + "type": "uint256" + } + ], + "name": "CommitteeRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "activeCount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "thresholdM", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "viable", + "type": "bool" + } + ], + "name": "CommitteeViabilityUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "enclave", + "type": "address" + } + ], + "name": "EnclaveSet", + "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": false, + "internalType": "uint256", + "name": "sortitionSubmissionWindow", + "type": "uint256" + } + ], + "name": "SortitionSubmissionWindowSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "ticketId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "score", + "type": "uint256" + } + ], + "name": "TicketSubmitted", + "type": "event" + }, + { + "inputs": [], + "name": "TREE_DEPTH", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "addCiphernode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "bondingRegistry", + "outputs": [ + { + "internalType": "contract IBondingRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "ciphernodeEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "ciphernodeTreeIndex", + "outputs": [ + { + "internalType": "uint40", + "name": "index", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ciphernodes", + "outputs": [ + { + "internalType": "uint40", + "name": "maxIndex", + "type": "uint40" + }, + { + "internalType": "uint40", + "name": "numberOfLeaves", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "committeePublicKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "publicKeyHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "enclave", + "outputs": [ + { + "internalType": "contract IEnclave", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "node", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "reason", + "type": "bytes32" + } + ], + "name": "expelCommitteeMember", + "outputs": [ + { + "internalType": "uint256", + "name": "activeCount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "thresholdM", + "type": "uint32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "finalizeCommittee", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getActiveCommitteeNodes", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBondingRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getCommitteeDeadline", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getCommitteeNodes", + "outputs": [ + { + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "getCommitteeViability", + "outputs": [ + { + "internalType": "uint256", + "name": "activeCount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "thresholdM", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "thresholdN", + "type": "uint32" + }, + { + "internalType": "bool", + "name": "viable", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_submissionWindow", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "isCiphernodeEligible", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "isCommitteeMember", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "isCommitteeMemberActive", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "isEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "isOpen", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "numCiphernodes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "publicKeyHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "publicKeyHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "nodes", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "publicKeyHash", + "type": "bytes32" + } + ], + "name": "publishCommittee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "node", + "type": "address" + } + ], + "name": "removeCiphernode", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "seed", + "type": "uint256" + }, + { + "internalType": "uint32[2]", + "name": "threshold", + "type": "uint32[2]" + } + ], + "name": "requestCommittee", + "outputs": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "rootAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + } + ], + "name": "roots", + "outputs": [ + { + "internalType": "uint256", + "name": "root", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IBondingRegistry", + "name": "_bondingRegistry", + "type": "address" + } + ], + "name": "setBondingRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IEnclave", + "name": "_enclave", + "type": "address" + } + ], + "name": "setEnclave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ISlashingManager", + "name": "_slashingManager", + "type": "address" + } + ], + "name": "setSlashingManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_sortitionSubmissionWindow", + "type": "uint256" + } + ], + "name": "setSortitionSubmissionWindow", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slashingManager", + "outputs": [ + { + "internalType": "contract ISlashingManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sortitionSubmissionWindow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "e3Id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ticketNumber", + "type": "uint256" + } + ], + "name": "submitTicket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "treeSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613711806100d65f395ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b8063715018a6116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b8063715018a6146103465780637c92f5241461034e578063858142431461037b5780638a78bb151461039b5780638b530cb5146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d5047761461032057806370e36bbe14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461300d565b61064c565b005b610256610266366004613028565b610798565b61027e610279366004613028565b6107db565b60405161028b919061303f565b60405180910390f35b6102a76102a2366004613028565b61091d565b60405190815260200161028b565b6102c86102c336600461308a565b610969565b604051901515815260200161028b565b6102c86102e636600461300d565b610b43565b6102c86102f9366004613028565b610bf6565b6102c861030c36600461300d565b60066020525f908152604090205460ff1681565b6102c861032e3660046130c3565b610c35565b61025661034136600461300d565b610c79565b610256610cef565b61036161035c3660046130f1565b610d02565b6040805192835263ffffffff90911660208301520161028b565b60015461038e906001600160a01b031681565b60405161028b9190613126565b6102566103a936600461300d565b610ea9565b6102566103bc36600461317e565b610fe7565b6102a76103cf366004613028565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b61038e611159565b600b5461038e906001600160a01b031681565b6102c861041f36600461300d565b611187565b61044a61043236600461300d565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613028565b6111a4565b6102c861048a3660046130c3565b61123a565b61025661049d36600461300d565b61127e565b6102a76104b0366004613028565b60086020525f908152604090205481565b6001546001600160a01b031661038e565b6102a76104e0366004613028565b5f9081526008602052604090205490565b6102566104ff36600461322e565b6112cf565b6102c8610512366004613028565b61142c565b5f5461038e906001600160a01b031681565b61025661053736600461300d565b61165f565b61025661054a366004613258565b6116d7565b6102a761055d366004613028565b61189a565b6102a76118cb565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461300d565b6118dd565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613028565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b610654611159565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a381611187565b81906106cc576040516381e5828960e01b81526004016106c39190613126565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611917565b6001600160a01b0382165f908152600660205260408120805460ff1916905560028054916107278361328c565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611bb9565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b03811115610811576108116132a1565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f886006018481548110610864576108646132c9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c6132b5565b03610909578560060181815481106108b6576108b66132c9565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e36132c9565b6001600160a01b039092166020928302919091019091015281610905816132dd565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff166003811115610941576109416132b5565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b86132b5565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4191906132f5565b905080610a54604086016020870161331f565b63ffffffff161115610a6c604086016020870161331f565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac19042613338565b6003830155610ad560058301856002612f44565b50610ade6118cb565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a929161334b565b60405180910390a250600195945050505050565b5f610b4d82611187565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb1908590600401613126565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061339b565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b6132b5565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c716132b5565b149392505050565b610c81611bb9565b6001600160a01b038116610ca85760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610cf7611bb9565b610d005f611beb565b565b600b545f9081906001600160a01b03163314610d315760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff166003811115610d5657610d566132b5565b14610d7457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff166002811115610db457610db46132b5565b14610dc457600a01549150610ea1565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a8201805491610df88361328c565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051610e49929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b610eb1611159565b6001600160a01b0316336001600160a01b03161480610eda57506001546001600160a01b031633145b610ef757604051632864c4e160e01b815260040160405180910390fd5b610f0081611187565b610fe45760048054600160281b900464ffffffffff1690610f2a906001600160a01b038416611c5b565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff199091161790556002805491610f7b836132dd565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b610fef611bb9565b5f868152600a602052604090206002815460ff166003811115611014576110146132b5565b1461103257604051634f4b461f60e11b815260040160405180910390fd5b6004810154156110555760405163632a22bb60e01b815260040160405180910390fd5b6006810154851461109e5760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b60048181018390555f88815260096020526040808220859055905490516340a3b76160e11b8152918201899052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b1580156110fc575f5ffd5b505af115801561110e573d5f5f3e3d5ffd5b50505050867ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8787878760405161114894939291906133ba565b60405180910390a250505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a602052604090206004810154606091906111d7576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561122d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115611275576112756132b5565b14159392505050565b611286611bb9565b6001600160a01b0381166112ad5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6112d8611e31565b805490915060ff600160401b82041615906001600160401b03165f811580156112fe5750825b90505f826001600160401b031660011480156113195750303b155b905081158015611327575080155b156113455760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561136f57845460ff60401b1916600160401b1785555b6001600160a01b0387166113965760405163d92e233d60e01b815260040160405180910390fd5b61139f33611e59565b6113ab60046014611e6a565b6113b486610798565b6113bc611159565b6001600160a01b0316876001600160a01b0316146113dd576113dd876118dd565b831561142357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff166003811115611450576114506132b5565b0361146e57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611486576114866132b5565b146114a457604051631860f69960e31b815260040160405180910390fd5b806003015442116114c857604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff161115806115ad578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b15801561158e575f5ffd5b505af11580156115a0573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611604575f5ffd5b505af1158015611616573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e1328360060160405161164d9190613431565b60405180910390a25060019392505050565b611667611bb9565b6001600160a01b03811661168e5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff1660038111156116fb576116fb6132b5565b0361171957604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611731576117316132b5565b1461174f57604051631860f69960e31b815260040160405180910390fd5b806003015442111561177457604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156117a65760405163257309f160e11b815260040160405180910390fd5b6117af33610b43565b6117cc5760405163149fbcfd60e11b815260040160405180910390fd5b6117d7338385611ee9565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff19166001179055909150611856908390836120ba565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f81815260096020526040902054806118c6576040516322e679e360e11b815260040160405180910390fd5b919050565b5f6118d8600460146122bb565b905090565b6118e5611bb9565b6001600160a01b03811661190e575f604051631e4fbdf760e01b81526004016106c39190613126565b610fe481611beb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182106119565760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff600160281b909104811690821681116119b45760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f6119c784886123b4565b64ffffffffff1681526020019081526020015f20819055505f8160016119ed91906134be565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611a225750611bb1565b600185165f03611ae9575f611a4183611a3c8860016134d7565b6123b4565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611aa2916004016134f4565b602060405180830381865af4158015611abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae191906132f5565b935050611b9d565b5f611af983611a3c600189613524565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611b5a916004016134f4565b602060405180830381865af4158015611b75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9991906132f5565b9350505b50647fffffffff600194851c1693016119b7565b505050505050565b33611bc2611159565b6001600160a01b031614610d00573360405163118cdaa760e01b81526004016106c39190613126565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611caa5760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff90811690821610611cfd5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611d088160016134d7565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611d3f84876123b4565b64ffffffffff16815260208101919091526040015f20556001831615611e2a575f611d6f82611a3c600187613524565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611dd0916004016134f4565b602060405180830381865af4158015611deb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0f91906132f5565b647fffffffff600195861c1694909350919091019050611d2f565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611e616123d1565b610fe4816123f6565b602060ff82161115611eb85760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b611ec9600160ff831681901b613541565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f8211611f095760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b0316611f32576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd71918891611f6891613541565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611faf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd391906132f5565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204a91906132f5565b90505f811161206c5760405163aeaddff160e01b815260040160405180910390fd5b5f6120778284613554565b90505f81116120995760405163149fbcfd60e11b815260040160405180910390fd5b808611156114235760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff169081111561213857508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff19168217905590506122b4565b5f5f90505f876008015f855f81548110612154576121546132c9565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b84548110156121dc575f896008015f87848154811061219e5761219e6132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020549050828111156121d3578092508193505b5060010161217d565b508086106121f0575f9450505050506122b4565b5f886009015f868581548110612208576122086132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff19166001836002811115612245576122456132b5565b02179055508684838154811061225d5761225d6132c9565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161230e5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156123325760405162461bcd60e51b81526004016106c390613573565b8254600160281b900464ffffffffff168061235160ff851660026136c4565b64ffffffffff1610156123a15760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b6123ac8482856123fe565b949350505050565b5f816123c760ff851663ffffffff6136dd565b6122b491906134d7565b6123d96124c6565b610d0057604051631afcd79f60e31b815260040160405180910390fd5b6118e56123d1565b5f602060ff831611156124235760405162461bcd60e51b81526004016106c390613573565b8264ffffffffff165f036124415761243a826124df565b90506122b4565b5f61244d8360016134be565b60ff166001600160401b03811115612467576124676132a1565b604051908082528060200260200182016040528015612490578160200160208202803683370190505b50905061249f85858584612b79565b808360ff16815181106124b4576124b46132c9565b60200260200101519150509392505050565b5f6124cf611e31565b54600160401b900460ff16919050565b5f8160ff165f036124f157505f919050565b8160ff1660010361252357507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff1660020361255557507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff1660030361258757507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff166004036125b957507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff166005036125eb57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361261d57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff1660070361264f57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff1660080361268157507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff166009036126b357507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a036126e557507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361271757507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c0361274957507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d0361277b57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e036127ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f036127df57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361281157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff1660110361284357507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff1660120361287557507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff166013036128a757507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff166014036128d957507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff1660150361290b57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff1660160361293d57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff1660170361296f57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff166018036129a157507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff166019036129d357507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612a0557507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612a3757507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612a6957507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612a9b57507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612acd57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612aff57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612b3157507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612b9d5760405162461bcd60e51b81526004016106c390613573565b5f8364ffffffffff1611612c015760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612c0d600185613524565b9050600181165f03612c6057846001015f612c285f846123b4565b64ffffffffff1681526020019081526020015f2054825f81518110612c4f57612c4f6132c9565b602002602001018181525050612c88565b612c695f6124df565b825f81518110612c7b57612c7b6132c9565b6020026020010181815250505b5f5b8360ff168160ff161015611bb157600182165f03612d805773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612cdc57612cdc6132c9565b60200260200101518152602001612cf2856124df565b8152506040518263ffffffff1660e01b8152600401612d1191906134f4565b602060405180830381865af4158015612d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5091906132f5565b83612d5c8360016134be565b60ff1681518110612d6f57612d6f6132c9565b602002602001018181525050612f31565b5f612d8c8260016134be565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612e2e575f876001015f612de3856001612dd291906134be565b60018864ffffffffff16901c6123b4565b64ffffffffff1681526020019081526020015f205490508085846001612e0991906134be565b60ff1681518110612e1c57612e1c6132c9565b60200260200101818152505050612f2f565b5f876001015f612e4585600188611a3c9190613524565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff1681518110612e9c57612e9c6132c9565b60200260200101518152506040518263ffffffff1660e01b8152600401612ec391906134f4565b602060405180830381865af4158015612ede573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0291906132f5565b85612f0e8560016134be565b60ff1681518110612f2157612f216132c9565b602002602001018181525050505b505b647fffffffff600192831c169101612c8a565b600183019183908215612fd5579160200282015f5b83821115612fa357833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612f59565b8015612fd35782816101000a81549063ffffffff0219169055600401602081600301049283019260010302612fa3565b505b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b6001600160a01b0381168114610fe4575f5ffd5b5f6020828403121561301d575f5ffd5b81356122b481612ff9565b5f60208284031215613038575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561307f5783516001600160a01b0316835260209384019390920191600101613058565b509095945050505050565b5f5f5f6080848603121561309c575f5ffd5b8335925060208401359150608084018510156130b6575f5ffd5b6040840190509250925092565b5f5f604083850312156130d4575f5ffd5b8235915060208301356130e681612ff9565b809150509250929050565b5f5f5f60608486031215613103575f5ffd5b83359250602084013561311581612ff9565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f83601f84011261314a575f5ffd5b5081356001600160401b03811115613160575f5ffd5b602083019150836020828501011115613177575f5ffd5b9250929050565b5f5f5f5f5f5f60808789031215613193575f5ffd5b8635955060208701356001600160401b038111156131af575f5ffd5b8701601f810189136131bf575f5ffd5b80356001600160401b038111156131d4575f5ffd5b8960208260051b84010111156131e8575f5ffd5b6020919091019550935060408701356001600160401b0381111561320a575f5ffd5b61321689828a0161313a565b979a9699509497949695606090950135949350505050565b5f5f6040838503121561323f575f5ffd5b823561324a81612ff9565b946020939093013593505050565b5f5f60408385031215613269575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161329a5761329a613278565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016132ee576132ee613278565b5060010190565b5f60208284031215613305575f5ffd5b5051919050565b803563ffffffff811681146118c6575f5ffd5b5f6020828403121561332f575f5ffd5b6122b48261330c565b80820180821115610bf057610bf0613278565b84815260a0810160208201855f5b60028110156133865763ffffffff6133708361330c565b1683526020928301929190910190600101613359565b50505060608201939093526080015292915050565b5f602082840312156133ab575f5ffd5b815180151581146122b4575f5ffd5b604080825281018490525f8560608301825b878110156133fc5782356133df81612ff9565b6001600160a01b03168252602092830192909101906001016133cc565b508381036020850152848152848660208301375f602086830101526020601f19601f8701168201019250505095945050505050565b602080825282548282018190525f848152918220906040840190835b8181101561307f5783546001600160a01b031683526001938401936020909301920161344d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf0613278565b64ffffffffff8181168382160190811115610bf057610bf0613278565b6040810181835f5b600281101561351b5781518352602092830192909101906001016134fc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf0613278565b81810381811115610bf057610bf0613278565b5f8261356e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b6001841115610ea1578085048111156135d5576135d5613278565b60018416156135e357908102905b60019390931c9280026135ba565b5f826135ff57506001610bf0565b8161360b57505f610bf0565b8160018114613621576002811461362b5761365d565b6001915050610bf0565b60ff84111561363c5761363c613278565b6001841b915064ffffffffff82111561365757613657613278565b50610bf0565b5060208310610133831016604e8410600b8410161715613695575081810a64ffffffffff81111561369057613690613278565b610bf0565b6136a564ffffffffff84846135b6565b8064ffffffffff048211156136bc576136bc613278565b029392505050565b5f6122b464ffffffffff841664ffffffffff84166135f1565b64ffffffffff81811683821602908116908181146136fd576136fd613278565b509291505056fea164736f6c634300081c000a", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80639a7a2ffc11610135578063dbb06c93116100b4578063f165053611610079578063f16505361461056a578063f2fde38b14610584578063f379b0df14610597578063f52fd803146105d1578063f6fc05d514610643575f5ffd5b8063dbb06c9314610517578063e59e469514610529578063e6745e131461053c578063e82f3b701461054f578063ebf0c71714610562575f5ffd5b8063c2b40ae4116100fa578063c2b40ae4146104a2578063c3a0ec30146104c1578063ca2869a0146104d2578063cd6dc687146104f1578063da881e5a14610504575f5ffd5b80639a7a2ffc146104245780639f0f874a14610460578063a016493014610469578063a8a4d69b1461047c578063bff232c11461048f575f5ffd5b8063715018a6116101c15780638cb89ecb116101865780638cb89ecb146103c15780638d1ddfb1146103e05780638da5cb5b146103f65780638e5ce3ad146103fe5780639015d37114610411575f5ffd5b8063715018a6146103465780637c92f5241461034e578063858142431461037b5780638a78bb151461039b5780638b530cb5146103ae575f5ffd5b80632e7b716d116102075780632e7b716d146102d85780634d6861a6146102eb57806350e6d94c146102fe5780635d5047761461032057806370e36bbe14610333575f5ffd5b8063096b810a146102435780630f3e34121461025857806317d611201461026b5780632800d82914610294578063291a691b146102b5575b5f5ffd5b61025661025136600461300d565b61064c565b005b610256610266366004613028565b610798565b61027e610279366004613028565b6107db565b60405161028b919061303f565b60405180910390f35b6102a76102a2366004613028565b61091d565b60405190815260200161028b565b6102c86102c336600461308a565b610969565b604051901515815260200161028b565b6102c86102e636600461300d565b610b43565b6102c86102f9366004613028565b610bf6565b6102c861030c36600461300d565b60066020525f908152604090205460ff1681565b6102c861032e3660046130c3565b610c35565b61025661034136600461300d565b610c79565b610256610cef565b61036161035c3660046130f1565b610d02565b6040805192835263ffffffff90911660208301520161028b565b60015461038e906001600160a01b031681565b60405161028b9190613126565b6102566103a936600461300d565b610ea9565b6102566103bc36600461317e565b610fe7565b6102a76103cf366004613028565b60096020525f908152604090205481565b600454600160281b900464ffffffffff166102a7565b61038e611159565b600b5461038e906001600160a01b031681565b6102c861041f36600461300d565b611187565b61044a61043236600461300d565b60076020525f908152604090205464ffffffffff1681565b60405164ffffffffff909116815260200161028b565b6102a760035481565b61027e610477366004613028565b6111a4565b6102c861048a3660046130c3565b61123a565b61025661049d36600461300d565b61127e565b6102a76104b0366004613028565b60086020525f908152604090205481565b6001546001600160a01b031661038e565b6102a76104e0366004613028565b5f9081526008602052604090205490565b6102566104ff36600461322e565b6112cf565b6102c8610512366004613028565b61142c565b5f5461038e906001600160a01b031681565b61025661053736600461300d565b61165f565b61025661054a366004613258565b6116d7565b6102a761055d366004613028565b61189a565b6102a76118cb565b610572601481565b60405160ff909116815260200161028b565b61025661059236600461300d565b6118dd565b6004546105b39064ffffffffff80821691600160281b90041682565b6040805164ffffffffff93841681529290911660208301520161028b565b6106146105df366004613028565b5f908152600a6020819052604090912090810154600590910154909163ffffffff80831692600160201b900416908284101590565b60405161028b949392919093845263ffffffff9283166020850152911660408301521515606082015260800190565b6102a760025481565b610654611159565b6001600160a01b0316336001600160a01b0316148061067d57506001546001600160a01b031633145b61069a57604051632864c4e160e01b815260040160405180910390fd5b6106a381611187565b81906106cc576040516381e5828960e01b81526004016106c39190613126565b60405180910390fd5b506001600160a01b0381165f9081526007602052604081205464ffffffffff16906106fa9060049083611917565b6001600160a01b0382165f908152600660205260408120805460ff1916905560028054916107278361328c565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f8c008e3835f6c79bfcdb89f0f6ca8705e0b01049ee84a90b0e4da1c7ba9405d5906060015b60405180910390a25050565b6107a0611bb9565b60038190556040518181527fbe772dc189863d512fa01e489c8eac204975aef1a8662d8b5a333804b5207ab79060200160405180910390a150565b5f818152600a602081905260408220600681015491810154606093919291816001600160401b03811115610811576108116132a1565b60405190808252806020026020018201604052801561083a578160200160208202803683370190505b5090505f805b84811015610911576001866009015f886006018481548110610864576108646132c9565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16600281111561089c5761089c6132b5565b03610909578560060181815481106108b6576108b66132c9565b905f5260205f20015f9054906101000a90046001600160a01b03168383815181106108e3576108e36132c9565b6001600160a01b039092166020928302919091019091015281610905816132dd565b9250505b600101610840565b50909695505050505050565b5f818152600a6020526040812081815460ff166003811115610941576109416132b5565b0361095f57604051630d4c1d9760e41b815260040160405180910390fd5b6003015492915050565b5f80546001600160a01b031633146109945760405163e4c2a7eb60e01b815260040160405180910390fd5b5f848152600a6020526040812090815460ff1660038111156109b8576109b86132b5565b146109d6576040516374ff462560e11b815260040160405180910390fd5b60015460408051630cc37d8f60e11b815290515f926001600160a01b031691631986fb1e9160048083019260209291908290030181865afa158015610a1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4191906132f5565b905080610a54604086016020870161331f565b63ffffffff161115610a6c604086016020870161331f565b829091610a9a576040516344ec930f60e01b815263ffffffff909216600483015260248201526044016106c3565b5050815460ff1916600190811783558201859055436002830155600354610ac19042613338565b6003830155610ad560058301856002612f44565b50610ade6118cb565b5f87815260086020526040908190209190915560028301546003840154915188927f381d281d32f95ef8fe4e5f3b263ea6a32d03d331e1a141ae1da996dc02a7a17092610b2f928a928a929161334b565b60405180910390a250600195945050505050565b5f610b4d82611187565b610b5857505f919050565b6001546001600160a01b0316610b81576040516350ca893360e01b815260040160405180910390fd5b600154604051639f8a13d760e01b81526001600160a01b0390911690639f8a13d790610bb1908590600401613126565b602060405180830381865afa158015610bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bf0919061339b565b92915050565b5f818152600a602052604081206001815460ff166003811115610c1b57610c1b6132b5565b14610c2857505f92915050565b6003015442111592915050565b5f60015f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115610c7157610c716132b5565b149392505050565b610c81611bb9565b6001600160a01b038116610ca85760405163d92e233d60e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b038316908117825560405190917f2c8267accd82e977550ed2349c73311183cd22e306347be4453c8d130995e3c991a250565b610cf7611bb9565b610d005f611beb565b565b600b545f9081906001600160a01b03163314610d315760405163fcef374960e01b815260040160405180910390fd5b5f858152600a602052604090206002815460ff166003811115610d5657610d566132b5565b14610d7457604051634f4b461f60e11b815260040160405180910390fd5b60058101546001600160a01b0386165f90815260098301602052604090205463ffffffff909116925060019060ff166002811115610db457610db46132b5565b14610dc457600a01549150610ea1565b6001600160a01b0385165f9081526009820160205260408120805460ff19166002179055600a8201805491610df88361328c565b919050555080600a01549250846001600160a01b0316867f6c783b92374361b4d6efaf29673b89437ee969bb3c9d2d5d86b143ad5447b8498686604051610e49929190918252602082015260400190565b60405180910390a36040805184815263ffffffff84166020820181905285101591810182905287907f119cb11dd0a68c257d6dc9b06dcb37dd422ce276eb8bf3cd0b7079a116b8e2989060600160405180910390a250505b935093915050565b610eb1611159565b6001600160a01b0316336001600160a01b03161480610eda57506001546001600160a01b031633145b610ef757604051632864c4e160e01b815260040160405180910390fd5b610f0081611187565b610fe45760048054600160281b900464ffffffffff1690610f2a906001600160a01b038416611c5b565b6001600160a01b0382165f908152600660209081526040808320805460ff1916600117905560079091528120805464ffffffffff841664ffffffffff199091161790556002805491610f7b836132dd565b90915550506002546004546040805164ffffffffff80861682526020820194909452600160281b909204909216918101919091526001600160a01b038316907f3318d261fe14a5761d2d1e21555652f623d2134c430a9883c9ad6e958bb0db539060600161078c565b50565b610fef611bb9565b5f868152600a602052604090206002815460ff166003811115611014576110146132b5565b1461103257604051634f4b461f60e11b815260040160405180910390fd5b6004810154156110555760405163632a22bb60e01b815260040160405180910390fd5b6006810154851461109e5760405162461bcd60e51b815260206004820152601360248201527209cdec8ca40c6deeadce840dad2e6dac2e8c6d606b1b60448201526064016106c3565b60048181018390555f88815260096020526040808220859055905490516340a3b76160e11b8152918201899052602482018490526001600160a01b0316906381476ec2906044015f604051808303815f87803b1580156110fc575f5ffd5b505af115801561110e573d5f5f3e3d5ffd5b50505050867ff7472ea3a028fe8a86ab1c9a3e2176b284c8c3a22675c101e0fa21c140b6678d8787878760405161114894939291906133ba565b60405180910390a250505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03165f9081526006602052604090205460ff1690565b5f818152600a602052604090206004810154606091906111d7576040516322e679e360e11b815260040160405180910390fd5b8060060180548060200260200160405190810160405280929190818152602001828054801561122d57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161120f575b5050505050915050919050565b5f805f848152600a602090815260408083206001600160a01b038716845260090190915290205460ff166002811115611275576112756132b5565b14159392505050565b611286611bb9565b6001600160a01b0381166112ad5760405163d92e233d60e01b815260040160405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6112d8611e31565b805490915060ff600160401b82041615906001600160401b03165f811580156112fe5750825b90505f826001600160401b031660011480156113195750303b155b905081158015611327575080155b156113455760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561136f57845460ff60401b1916600160401b1785555b6001600160a01b0387166113965760405163d92e233d60e01b815260040160405180910390fd5b61139f33611e59565b6113ab60046014611e6a565b6113b486610798565b6113bc611159565b6001600160a01b0316876001600160a01b0316146113dd576113dd876118dd565b831561142357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f818152600a6020526040812081815460ff166003811115611450576114506132b5565b0361146e57604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611486576114866132b5565b146114a457604051631860f69960e31b815260040160405180910390fd5b806003015442116114c857604051632f021e8d60e11b815260040160405180910390fd5b60058101546006820154600160201b90910463ffffffff161115806115ad578154600360ff199091161782556006820154600583015460408051928352600160201b90910463ffffffff16602083015285917fecc4a9fb7e28d074cba7f5b227e9b5827823c850a385539b9a2f98a08f8c203d910160405180910390a25f54604051635d968dc160e11b815260048101869052600260248201526001600160a01b039091169063bb2d1b82906044015f604051808303815f87803b15801561158e575f5ffd5b505af11580156115a0573d5f5f3e3d5ffd5b505f979650505050505050565b815460ff191660021782556006820154600a8301555f54604051631f3ea75d60e21b8152600481018690526001600160a01b0390911690637cfa9d74906024015f604051808303815f87803b158015611604575f5ffd5b505af1158015611616573d5f5f3e3d5ffd5b50505050837fed38c6266ebed7c01d311349a7fa67e0ef0f1d2f4760d60dbb34ca4799a2e1328360060160405161164d9190613431565b60405180910390a25060019392505050565b611667611bb9565b6001600160a01b03811661168e5760405163d92e233d60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517fad4055f18cdad6f4bdd71afe3a72cbeee964217943e1bde38f138289e981a9a7905f90a250565b5f828152600a6020526040812090815460ff1660038111156116fb576116fb6132b5565b0361171957604051630d4c1d9760e41b815260040160405180910390fd5b6001815460ff166003811115611731576117316132b5565b1461174f57604051631860f69960e31b815260040160405180910390fd5b806003015442111561177457604051639a19114d60e01b815260040160405180910390fd5b335f90815260078201602052604090205460ff16156117a65760405163257309f160e11b815260040160405180910390fd5b6117af33610b43565b6117cc5760405163149fbcfd60e11b815260040160405180910390fd5b6117d7338385611ee9565b6001810154604080516bffffffffffffffffffffffff193360601b16602080830191909152603482018690526054820187905260748083019490945282518083039094018452609490910190915281519101205f90335f8181526007850160205260409020805460ff19166001179055909150611856908390836120ba565b506040805184815260208101839052339186917f52999628fb1cb05707e842278833b22e511f11746202cecdf221968b0b89e8bd910160405180910390a350505050565b5f81815260096020526040902054806118c6576040516322e679e360e11b815260040160405180910390fd5b919050565b5f6118d8600460146122bb565b905090565b6118e5611bb9565b6001600160a01b03811661190e575f604051631e4fbdf760e01b81526004016106c39190613126565b610fe481611beb565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182106119565760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff600160281b909104811690821681116119b45760405162461bcd60e51b815260206004820152601860248201527713185e9e5253550e881b195859881b5d5cdd08195e1a5cdd60421b60448201526064016106c3565b825f5b81866001015f6119c784886123b4565b64ffffffffff1681526020019081526020015f20819055505f8160016119ed91906134be565b60ff168464ffffffffff16901c64ffffffffff16905060018564ffffffffff16901c64ffffffffff168111611a225750611bb1565b600185165f03611ae9575f611a4183611a3c8860016134d7565b6123b4565b60408051808201825286815264ffffffffff83165f90815260018c0160209081529083902054908201529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611aa2916004016134f4565b602060405180830381865af4158015611abd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae191906132f5565b935050611b9d565b5f611af983611a3c600189613524565b60408051808201825264ffffffffff83165f90815260018c0160209081529083902054825281018790529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611b5a916004016134f4565b602060405180830381865af4158015611b75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9991906132f5565b9350505b50647fffffffff600194851c1693016119b7565b505050505050565b33611bc2611159565b6001600160a01b031614610d00573360405163118cdaa760e01b81526004016106c39190613126565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b8154600160281b900464ffffffffff167f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210611caa5760405162461bcd60e51b81526004016106c390613474565b825464ffffffffff90811690821610611cfd5760405162461bcd60e51b815260206004820152601560248201527413185e9e5253550e881d1c9959481a5cc8199d5b1b605a1b60448201526064016106c3565b611d088160016134d7565b835464ffffffffff91909116600160281b0269ffffffffff000000000019909116178355815f5b81856001015f611d3f84876123b4565b64ffffffffff16815260208101919091526040015f20556001831615611e2a575f611d6f82611a3c600187613524565b60408051808201825264ffffffffff83165f90815260018a0160209081529083902054825281018690529051632b0aac7f60e11b815291925073__$078c82ddf6c95d34ea184ef1dd6130d136$__9163561558fe91611dd0916004016134f4565b602060405180830381865af4158015611deb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0f91906132f5565b647fffffffff600195861c1694909350919091019050611d2f565b5050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bf0565b611e616123d1565b610fe4816123f6565b602060ff82161115611eb85760405162461bcd60e51b81526020600482015260176024820152764c617a79494d543a205472656520746f6f206c6172676560481b60448201526064016106c3565b611ec9600160ff831681901b613541565b825469ffffffffffffffffffff191664ffffffffff919091161790915550565b5f8211611f095760405163aeaddff160e01b815260040160405180910390fd5b6001546001600160a01b0316611f32576040516350ca893360e01b815260040160405180910390fd5b5f818152600a602052604081206001805460028301549293926001600160a01b039091169163bb03bd71918891611f6891613541565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015611faf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd391906132f5565b90505f60015f9054906101000a90046001600160a01b03166001600160a01b0316631209b1f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612026573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204a91906132f5565b90505f811161206c5760405163aeaddff160e01b815260040160405180910390fd5b5f6120778284613554565b90505f81116120995760405163149fbcfd60e11b815260040160405180910390fd5b808611156114235760405163aeaddff160e01b815260040160405180910390fd5b60058301546006840180545f92600160201b900463ffffffff169081111561213857508054600180820183555f928352602080842090920180546001600160a01b0319166001600160a01b03881690811790915583526008870182526040808420869055600988019092529120805460ff19168217905590506122b4565b5f5f90505f876008015f855f81548110612154576121546132c9565b5f9182526020808320909101546001600160a01b03168352820192909252604001902054905060015b84548110156121dc575f896008015f87848154811061219e5761219e6132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020549050828111156121d3578092508193505b5060010161217d565b508086106121f0575f9450505050506122b4565b5f886009015f868581548110612208576122086132c9565b5f9182526020808320909101546001600160a01b031683528201929092526040019020805460ff19166001836002811115612245576122456132b5565b02179055508684838154811061225d5761225d6132c9565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918916815260088a018252604080822089905560098b0190925220805460ff191660019081179091559450505050505b9392505050565b5f5f8260ff161161230e5760405162461bcd60e51b815260206004820152601a60248201527f4c617a79494d543a206465707468206d757374206265203e203000000000000060448201526064016106c3565b602060ff831611156123325760405162461bcd60e51b81526004016106c390613573565b8254600160281b900464ffffffffff168061235160ff851660026136c4565b64ffffffffff1610156123a15760405162461bcd60e51b8152602060048201526018602482015277098c2f4f2929aa87440c2dac4d2ceeadeeae640c8cae0e8d60431b60448201526064016106c3565b6123ac8482856123fe565b949350505050565b5f816123c760ff851663ffffffff6136dd565b6122b491906134d7565b6123d96124c6565b610d0057604051631afcd79f60e31b815260040160405180910390fd5b6118e56123d1565b5f602060ff831611156124235760405162461bcd60e51b81526004016106c390613573565b8264ffffffffff165f036124415761243a826124df565b90506122b4565b5f61244d8360016134be565b60ff166001600160401b03811115612467576124676132a1565b604051908082528060200260200182016040528015612490578160200160208202803683370190505b50905061249f85858584612b79565b808360ff16815181106124b4576124b46132c9565b60200260200101519150509392505050565b5f6124cf611e31565b54600160401b900460ff16919050565b5f8160ff165f036124f157505f919050565b8160ff1660010361252357507f2098f5fb9e239eab3ceac3f27b81e481dc3124d55ffed523a839ee8446b64864919050565b8160ff1660020361255557507f1069673dcdb12263df301a6ff584a7ec261a44cb9dc68df067a4774460b1f1e1919050565b8160ff1660030361258757507f18f43331537ee2af2e3d758d50f72106467c6eea50371dd528d57eb2b856d238919050565b8160ff166004036125b957507f07f9d837cb17b0d36320ffe93ba52345f1b728571a568265caac97559dbc952a919050565b8160ff166005036125eb57507f2b94cf5e8746b3f5c9631f4c5df32907a699c58c94b2ad4d7b5cec1639183f55919050565b8160ff1660060361261d57507f2dee93c5a666459646ea7d22cca9e1bcfed71e6951b953611d11dda32ea09d78919050565b8160ff1660070361264f57507f078295e5a22b84e982cf601eb639597b8b0515a88cb5ac7fa8a4aabe3c87349d919050565b8160ff1660080361268157507f2fa5e5f18f6027a6501bec864564472a616b2e274a41211a444cbe3a99f3cc61919050565b8160ff166009036126b357507f0e884376d0d8fd21ecb780389e941f66e45e7acce3e228ab3e2156a614fcd747919050565b8160ff16600a036126e557507f1b7201da72494f1e28717ad1a52eb469f95892f957713533de6175e5da190af2919050565b8160ff16600b0361271757507f1f8d8822725e36385200c0b201249819a6e6e1e4650808b5bebc6bface7d7636919050565b8160ff16600c0361274957507f2c5d82f66c914bafb9701589ba8cfcfb6162b0a12acf88a8d0879a0471b5f85a919050565b8160ff16600d0361277b57507f14c54148a0940bb820957f5adf3fa1134ef5c4aaa113f4646458f270e0bfbfd0919050565b8160ff16600e036127ad57507f190d33b12f986f961e10c0ee44d8b9af11be25588cad89d416118e4bf4ebe80c919050565b8160ff16600f036127df57507f22f98aa9ce704152ac17354914ad73ed1167ae6596af510aa5b3649325e06c92919050565b8160ff1660100361281157507f2a7c7c9b6ce5880b9f6f228d72bf6a575a526f29c66ecceef8b753d38bba7323919050565b8160ff1660110361284357507f2e8186e558698ec1c67af9c14d463ffc470043c9c2988b954d75dd643f36b992919050565b8160ff1660120361287557507f0f57c5571e9a4eab49e2c8cf050dae948aef6ead647392273546249d1c1ff10f919050565b8160ff166013036128a757507f1830ee67b5fb554ad5f63d4388800e1cfe78e310697d46e43c9ce36134f72cca919050565b8160ff166014036128d957507f2134e76ac5d21aab186c2be1dd8f84ee880a1e46eaf712f9d371b6df22191f3e919050565b8160ff1660150361290b57507f19df90ec844ebc4ffeebd866f33859b0c051d8c958ee3aa88f8f8df3db91a5b1919050565b8160ff1660160361293d57507f18cca2a66b5c0787981e69aefd84852d74af0e93ef4912b4648c05f722efe52b919050565b8160ff1660170361296f57507f2388909415230d1b4d1304d2d54f473a628338f2efad83fadf05644549d2538d919050565b8160ff166018036129a157507f27171fb4a97b6cc0e9e8f543b5294de866a2af2c9c8d0b1d96e673e4529ed540919050565b8160ff166019036129d357507f2ff6650540f629fd5711a0bc74fc0d28dcb230b9392583e5f8d59696dde6ae21919050565b8160ff16601a03612a0557507f120c58f143d491e95902f7f5277778a2e0ad5168f6add75669932630ce611518919050565b8160ff16601b03612a3757507f1f21feb70d3f21b07bf853d5e5db03071ec495a0a565a21da2d665d279483795919050565b8160ff16601c03612a6957507f24be905fa71335e14c638cc0f66a8623a826e768068a9e968bb1a1dde18a72d2919050565b8160ff16601d03612a9b57507f0f8666b62ed17491c50ceadead57d4cd597ef3821d65c328744c74e553dac26d919050565b8160ff16601e03612acd57507f0918d46bf52d98b034413f4a1a1c41594e7a7a3f6ae08cb43d1a2a230e1959ef919050565b8160ff16601f03612aff57507f1bbeb01b4c479ecde76917645e404dfa2e26f90d0afc5a65128513ad375c5ff2919050565b8160ff16602003612b3157507f2f68a1c58e257e42a17a6c61dff5551ed560b9922ab119d5ac8e184c9734ead9919050565b60405162461bcd60e51b815260206004820152601e60248201527f4c617a79494d543a2064656661756c745a65726f2062616420696e646578000060448201526064016106c3565b602060ff83161115612b9d5760405162461bcd60e51b81526004016106c390613573565b5f8364ffffffffff1611612c015760405162461bcd60e51b815260206004820152602560248201527f4c617a79494d543a206e756d626572206f66206c6561766573206d7573742062604482015264065203e20360dc1b60648201526084016106c3565b5f612c0d600185613524565b9050600181165f03612c6057846001015f612c285f846123b4565b64ffffffffff1681526020019081526020015f2054825f81518110612c4f57612c4f6132c9565b602002602001018181525050612c88565b612c695f6124df565b825f81518110612c7b57612c7b6132c9565b6020026020010181815250505b5f5b8360ff168160ff161015611bb157600182165f03612d805773__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280868560ff1681518110612cdc57612cdc6132c9565b60200260200101518152602001612cf2856124df565b8152506040518263ffffffff1660e01b8152600401612d1191906134f4565b602060405180830381865af4158015612d2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5091906132f5565b83612d5c8360016134be565b60ff1681518110612d6f57612d6f6132c9565b602002602001018181525050612f31565b5f612d8c8260016134be565b60ff168664ffffffffff16901c64ffffffffff16905060018364ffffffffff16901c64ffffffffff16811115612e2e575f876001015f612de3856001612dd291906134be565b60018864ffffffffff16901c6123b4565b64ffffffffff1681526020019081526020015f205490508085846001612e0991906134be565b60ff1681518110612e1c57612e1c6132c9565b60200260200101818152505050612f2f565b5f876001015f612e4585600188611a3c9190613524565b64ffffffffff1681526020019081526020015f2054905073__$078c82ddf6c95d34ea184ef1dd6130d136$__63561558fe6040518060400160405280848152602001888760ff1681518110612e9c57612e9c6132c9565b60200260200101518152506040518263ffffffff1660e01b8152600401612ec391906134f4565b602060405180830381865af4158015612ede573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f0291906132f5565b85612f0e8560016134be565b60ff1681518110612f2157612f216132c9565b602002602001018181525050505b505b647fffffffff600192831c169101612c8a565b600183019183908215612fd5579160200282015f5b83821115612fa357833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302612f59565b8015612fd35782816101000a81549063ffffffff0219169055600401602081600301049283019260010302612fa3565b505b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b6001600160a01b0381168114610fe4575f5ffd5b5f6020828403121561301d575f5ffd5b81356122b481612ff9565b5f60208284031215613038575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561307f5783516001600160a01b0316835260209384019390920191600101613058565b509095945050505050565b5f5f5f6080848603121561309c575f5ffd5b8335925060208401359150608084018510156130b6575f5ffd5b6040840190509250925092565b5f5f604083850312156130d4575f5ffd5b8235915060208301356130e681612ff9565b809150509250929050565b5f5f5f60608486031215613103575f5ffd5b83359250602084013561311581612ff9565b929592945050506040919091013590565b6001600160a01b0391909116815260200190565b5f5f83601f84011261314a575f5ffd5b5081356001600160401b03811115613160575f5ffd5b602083019150836020828501011115613177575f5ffd5b9250929050565b5f5f5f5f5f5f60808789031215613193575f5ffd5b8635955060208701356001600160401b038111156131af575f5ffd5b8701601f810189136131bf575f5ffd5b80356001600160401b038111156131d4575f5ffd5b8960208260051b84010111156131e8575f5ffd5b6020919091019550935060408701356001600160401b0381111561320a575f5ffd5b61321689828a0161313a565b979a9699509497949695606090950135949350505050565b5f5f6040838503121561323f575f5ffd5b823561324a81612ff9565b946020939093013593505050565b5f5f60408385031215613269575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f8161329a5761329a613278565b505f190190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016132ee576132ee613278565b5060010190565b5f60208284031215613305575f5ffd5b5051919050565b803563ffffffff811681146118c6575f5ffd5b5f6020828403121561332f575f5ffd5b6122b48261330c565b80820180821115610bf057610bf0613278565b84815260a0810160208201855f5b60028110156133865763ffffffff6133708361330c565b1683526020928301929190910190600101613359565b50505060608201939093526080015292915050565b5f602082840312156133ab575f5ffd5b815180151581146122b4575f5ffd5b604080825281018490525f8560608301825b878110156133fc5782356133df81612ff9565b6001600160a01b03168252602092830192909101906001016133cc565b508381036020850152848152848660208301375f602086830101526020601f19601f8701168201019250505095945050505050565b602080825282548282018190525f848152918220906040840190835b8181101561307f5783546001600160a01b031683526001938401936020909301920161344d565b6020808252602a908201527f4c617a79494d543a206c656166206d757374206265203c20534e41524b5f53436040820152691053105497d19251531160b21b606082015260800190565b60ff8181168382160190811115610bf057610bf0613278565b64ffffffffff8181168382160190811115610bf057610bf0613278565b6040810181835f5b600281101561351b5781518352602092830192909101906001016134fc565b50505092915050565b64ffffffffff8281168282160390811115610bf057610bf0613278565b81810381811115610bf057610bf0613278565b5f8261356e57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526023908201527f4c617a79494d543a206465707468206d757374206265203c3d204d41585f44456040820152620a0a8960eb1b606082015260800190565b6001815b6001841115610ea1578085048111156135d5576135d5613278565b60018416156135e357908102905b60019390931c9280026135ba565b5f826135ff57506001610bf0565b8161360b57505f610bf0565b8160018114613621576002811461362b5761365d565b6001915050610bf0565b60ff84111561363c5761363c613278565b6001841b915064ffffffffff82111561365757613657613278565b50610bf0565b5060208310610133831016604e8410600b8410161715613695575081810a64ffffffffff81111561369057613690613278565b610bf0565b6136a564ffffffffff84846135b6565b8064ffffffffff048211156136bc576136bc613278565b029392505050565b5f6122b464ffffffffff841664ffffffffff84166135f1565b64ffffffffff81811683821602908116908181146136fd576136fd613278565b509291505056fea164736f6c634300081c000a", + "linkReferences": { + "npm/poseidon-solidity@0.0.5/PoseidonT3.sol": { + "PoseidonT3": [ + { + "length": 20, + "start": 6994 + }, + { + "length": 20, + "start": 7178 + }, + { + "length": 20, + "start": 7808 + }, + { + "length": 20, + "start": 11642 + }, + { + "length": 20, + "start": 12084 + } + ] + } + }, + "deployedLinkReferences": { + "npm/poseidon-solidity@0.0.5/PoseidonT3.sol": { + "PoseidonT3": [ + { + "length": 20, + "start": 6780 + }, + { + "length": 20, + "start": 6964 + }, + { + "length": 20, + "start": 7594 + }, + { + "length": 20, + "start": 11428 + }, + { + "length": 20, + "start": 11870 + } + ] + } + }, + "immutableReferences": {}, + "inputSourceName": "project/contracts/registry/CiphernodeRegistryOwnable.sol", + "buildInfoId": "solc-0_8_28-dbd94fb7bf5c147a4effe4d89ec8d62bae78112f" +} \ No newline at end of file diff --git a/packages/enclave-contracts/deployed_contracts.json b/packages/enclave-contracts/deployed_contracts.json index f54919ff16..56b719a0ba 100644 --- a/packages/enclave-contracts/deployed_contracts.json +++ b/packages/enclave-contracts/deployed_contracts.json @@ -129,38 +129,38 @@ }, "localhost": { "PoseidonT3": { - "blockNumber": 3, + "blockNumber": 5, "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, "MockUSDC": { "constructorArgs": { "initialSupply": "1000000" }, - "blockNumber": 4, - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + "blockNumber": 6, + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" }, "EnclaveToken": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 5, - "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" + "blockNumber": 7, + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" }, "EnclaveTicketToken": { "constructorArgs": { - "baseToken": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "baseToken": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", "registry": "0x0000000000000000000000000000000000000001", "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 7, - "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" + "blockNumber": 9, + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" }, "SlashingManager": { "constructorArgs": { "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 8, - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F" + "blockNumber": 10, + "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" }, "CiphernodeRegistryOwnable": { "constructorArgs": { @@ -170,19 +170,19 @@ "proxyRecords": { "initData": "0xcd6dc687000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000000000000000000000000000000000000000000a", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", - "proxyAdminAddress": "0x94099942864EA81cCF197E9D71ac53310b1468D8", - "implementationAddress": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" + "proxyAddress": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "proxyAdminAddress": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5", + "implementationAddress": "0x0165878A594ca255338adfa4d48449f69242Eb8F" }, - "blockNumber": 9, - "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" + "blockNumber": 11, + "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "BondingRegistry": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "ticketToken": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", - "licenseToken": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", - "registry": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + "ticketToken": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "licenseToken": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "registry": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", "slashedFundsTreasury": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "ticketPrice": "10000000", "licenseRequiredBond": "100000000000000000000", @@ -190,22 +190,22 @@ "exitDelay": "604800" }, "proxyRecords": { - "initData": "0x7333fa82000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000005fc8d32690cc91d4c39d9d3abcbd16989f875707000000000000000000000000cf7ed3acca5a467e9e704c703e8d87f634fb0fc90000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000093a80", + "initData": "0x7333fa82000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000dc64a140aa3e981100a9beca4e685f962f0cf6c90000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e0000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c853000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000093a80", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "proxyAdminAddress": "0x6F1216D1BFe15c98520CA1434FC1d9D57AC95321", - "implementationAddress": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" + "proxyAddress": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + "proxyAdminAddress": "0x8aCd85898458400f7Db866d53FCFF6f0D49741FF", + "implementationAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" }, - "blockNumber": 10, - "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" + "blockNumber": 12, + "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "registry": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", - "bondingRegistry": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "registry": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "bondingRegistry": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", "e3RefundManager": "0x0000000000000000000000000000000000000001", - "feeToken": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "feeToken": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", "maxDuration": "2592000", "timeoutConfig": "{\"committeeFormationWindow\":3600,\"dkgWindow\":7200,\"computeWindow\":86400,\"decryptionWindow\":3600}", "params": [ @@ -213,50 +213,94 @@ ] }, "proxyRecords": { - "initData": "0x01d12f1c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb922660000000000000000000000002279b7a0a67db372996a5fab50d91eaa73d2ebe6000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad78800000000000000000000000000000000000000000000000000000000000000010000000000000000000000009fe46736679d2d9a65f0992f2272de9f3c7fa6e00000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000001c2000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000ffffee0010000000000000000000000000000000000000000000000000000000ffffc400100000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000", + "initData": "0x01d12f1c000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000a513e6e4b8f2a923d98304ec87f64353c4d5c8530000000000000000000000008a791620dd6260079bf849dc5567adc3f2fdc3180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e7f1725e7734ce288f8367e1bb143e90bb3f05120000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000001c2000000000000000000000000000000000000000000000000000000000000151800000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000ffffee0010000000000000000000000000000000000000000000000000000000ffffc400100000000000000000000000000000000000000000000000000000000000000013300000000000000000000000000000000000000000000000000000000000000", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", - "proxyAdminAddress": "0x1F708C24a0D3A740cD47cC0444E9480899f3dA7D", - "implementationAddress": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" + "proxyAddress": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "proxyAdminAddress": "0x8dAF17A20c9DBA35f005b6324F493785D239719d", + "implementationAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" }, - "blockNumber": 13, - "address": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + "blockNumber": 15, + "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "E3RefundManager": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "enclave": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0", + "enclave": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", "treasury": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, "proxyRecords": { - "initData": "0xc0c53b8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000a51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "initData": "0xc0c53b8b000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", "initialOwner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", - "proxyAddress": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "proxyAdminAddress": "0x8e80FFe6Dc044F4A766Afd6e5a8732Fe0977A493", - "implementationAddress": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" + "proxyAddress": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "proxyAdminAddress": "0x32467b43BFa67273FC7dDda0999Ee9A12F2AaA08", + "implementationAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" }, - "blockNumber": 15, - "address": "0x9A676e781A523b5d0C0e43731313A708CB607508" + "blockNumber": 17, + "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" }, "MockComputeProvider": { - "blockNumber": 33, - "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" + "blockNumber": 19, + "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E" }, "MockDecryptionVerifier": { - "blockNumber": 34, - "address": "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" + "blockNumber": 20, + "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" }, "MockE3Program": { - "blockNumber": 35, - "address": "0x9E545E3C0baAB3E08CdfD552C960A1050f373042" + "blockNumber": 21, + "address": "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" }, "ZKTranscriptLib": { - "blockNumber": 38, + "blockNumber": 24, + "address": "0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8" + }, + "DkgESmShareComputationVerifier": { + "blockNumber": 25, "address": "0x851356ae760d987E095750cCeb3bC6014560891C" }, - "DkgPkVerifier": { - "blockNumber": 39, + "DkgShareDecryptionVerifier": { + "blockNumber": 26, "address": "0xf5059a5D33d5853360D16C683c16e67980206f36" + }, + "DkgShareEncryptionVerifier": { + "blockNumber": 27, + "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778" + }, + "DkgSkShareComputationVerifier": { + "blockNumber": 28, + "address": "0x998abeb3E57409262aE5b751f60747921B33613E" + }, + "RecursiveAggregationFoldVerifier": { + "blockNumber": 29, + "address": "0x70e0bA845a1A0F2DA3359C97E0285013525FFC49" + }, + "ThresholdDecryptedSharesAggregationBnVerifier": { + "blockNumber": 30, + "address": "0x4826533B4897376654Bb4d4AD88B7faFD0C98528" + }, + "ThresholdDecryptedSharesAggregationModVerifier": { + "blockNumber": 31, + "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf" + }, + "ThresholdPkAggregationVerifier": { + "blockNumber": 32, + "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF" + }, + "ThresholdPkGenerationVerifier": { + "blockNumber": 33, + "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf" + }, + "ThresholdShareDecryptionVerifier": { + "blockNumber": 34, + "address": "0x9d4454B023096f34B160D6B654540c56A1F81688" + }, + "ThresholdUserDataEncryptionCt0Verifier": { + "blockNumber": 35, + "address": "0x5eb3Bc0a489C5A8288765d2336659EbCA68FCd00" + }, + "ThresholdUserDataEncryptionCt1Verifier": { + "blockNumber": 36, + "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570" } } } \ No newline at end of file diff --git a/templates/default/deployed_contracts.json b/templates/default/deployed_contracts.json index 571aa5234b..23c7494973 100644 --- a/templates/default/deployed_contracts.json +++ b/templates/default/deployed_contracts.json @@ -1,21 +1,21 @@ { "localhost": { "PoseidonT3": { - "blockNumber": 16, + "blockNumber": 5, "address": "0x3333333C0A88F9BE4fd23ed0536F9B6c427e3B93" }, "MockUSDC": { "constructorArgs": { "initialSupply": "1000000" }, - "blockNumber": 17, + "blockNumber": 6, "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" }, "EnclaveToken": { "constructorArgs": { "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 18, + "blockNumber": 7, "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" }, "EnclaveTicketToken": { @@ -24,14 +24,14 @@ "registry": "0x0000000000000000000000000000000000000001", "owner": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 20, + "blockNumber": 9, "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9" }, "SlashingManager": { "constructorArgs": { "admin": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" }, - "blockNumber": 21, + "blockNumber": 10, "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" }, "CiphernodeRegistryOwnable": { @@ -46,7 +46,7 @@ "proxyAdminAddress": "0x9bd03768a7DCc129555dE410FF8E85528A4F88b5", "implementationAddress": "0x0165878A594ca255338adfa4d48449f69242Eb8F" }, - "blockNumber": 22, + "blockNumber": 11, "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" }, "BondingRegistry": { @@ -68,7 +68,7 @@ "proxyAdminAddress": "0x8aCd85898458400f7Db866d53FCFF6f0D49741FF", "implementationAddress": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" }, - "blockNumber": 23, + "blockNumber": 12, "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" }, "Enclave": { @@ -91,7 +91,7 @@ "proxyAdminAddress": "0x8dAF17A20c9DBA35f005b6324F493785D239719d", "implementationAddress": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" }, - "blockNumber": 26, + "blockNumber": 15, "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" }, "E3RefundManager": { @@ -107,28 +107,28 @@ "proxyAdminAddress": "0x32467b43BFa67273FC7dDda0999Ee9A12F2AaA08", "implementationAddress": "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" }, - "blockNumber": 28, + "blockNumber": 17, "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82" }, "MockComputeProvider": { - "blockNumber": 30, + "blockNumber": 19, "address": "0xE6E340D132b5f46d1e472DebcD681B2aBc16e57E" }, "MockDecryptionVerifier": { - "blockNumber": 31, + "blockNumber": 20, "address": "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" }, "MockE3Program": { - "blockNumber": 32, + "blockNumber": 21, "address": "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" }, "ImageID": { "address": "0x851356ae760d987E095750cCeb3bC6014560891C", - "blockNumber": 36 + "blockNumber": 25 }, "MyProgram": { "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "blockNumber": 38 + "blockNumber": 27 } } } \ No newline at end of file diff --git a/templates/default/enclave.config.yaml b/templates/default/enclave.config.yaml index f801e278de..923e1c5f02 100644 --- a/templates/default/enclave.config.yaml +++ b/templates/default/enclave.config.yaml @@ -4,22 +4,22 @@ chains: contracts: enclave: address: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" - deploy_block: 26 + deploy_block: 15 ciphernode_registry: address: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" - deploy_block: 22 + deploy_block: 11 bonding_registry: address: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" - deploy_block: 23 + deploy_block: 12 slashing_manager: address: "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" deploy_block: 13 fee_token: address: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" - deploy_block: 17 + deploy_block: 6 e3_program: address: "0xf5059a5D33d5853360D16C683c16e67980206f36" - deploy_block: 38 + deploy_block: 27 program: dev: true nodes: diff --git a/templates/default/tests/integration.spec.ts b/templates/default/tests/integration.spec.ts index f6a2516eb2..369b42ab7e 100644 --- a/templates/default/tests/integration.spec.ts +++ b/templates/default/tests/integration.spec.ts @@ -189,7 +189,7 @@ describe('Integration', () => { const { waitForEvent } = await setupEventListeners(sdk, store) const committeeSize = CommitteeSize.Micro - const duration = 900 + const duration = 700 const inputWindow = await calculateInputWindow(publicClient, duration) const thresholdBfvParams = await sdk.getThresholdBfvParamsSet() const e3ProgramParams = encodeBfvParams(thresholdBfvParams) diff --git a/tests/integration/base.sh b/tests/integration/base.sh index 16da63c9c6..16b9c22548 100755 --- a/tests/integration/base.sh +++ b/tests/integration/base.sh @@ -13,7 +13,7 @@ heading "Start the EVM node" launch_evm -until curl -f -s "http://localhost:8545" > /dev/null; do +until curl -sf -X POST http://localhost:8545 -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' > /dev/null; do sleep 1 done diff --git a/tests/integration/enclave.config.yaml b/tests/integration/enclave.config.yaml index 056cef79cb..6e50b6d7c4 100644 --- a/tests/integration/enclave.config.yaml +++ b/tests/integration/enclave.config.yaml @@ -1,24 +1,24 @@ chains: - - name: "hardhat" + - name: "localhost" rpc_url: "ws://localhost:8545" contracts: e3_program: - address: "0xc3e53F4d16Ae77Db1c982e75a937B9f60FE63690" + address: "0x84eA74d481Ee0A5332c457a4d796187F6Ba67fEB" deploy_block: 1 # Set to actual deploy block enclave: - address: "0xA51c1fc2f0D1a1b8494Ed1FE312d7C3a78Ed91C0" + address: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e" deploy_block: 1 # Set to actual deploy block ciphernode_registry: - address: "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6" + address: "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853" deploy_block: 1 # Set to actual deploy block bonding_registry: - address: "0x610178dA211FEF7D417bC0e6FeD39F05609AD788" + address: "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318" deploy_block: 1 # Set to actual deploy block slashing_manager: - address: "0x0165878A594ca255338adfa4d48449f69242Eb8F" + address: "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" deploy_block: 1 # Set to actual deploy block fee_token: - address: "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0" + address: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" deploy_block: 1 # Set to actual deploy block program: diff --git a/tests/integration/fns.sh b/tests/integration/fns.sh index 765715ede4..d31511beb1 100644 --- a/tests/integration/fns.sh +++ b/tests/integration/fns.sh @@ -185,11 +185,7 @@ kill_em_all() { } launch_evm() { - if [ ! -z "${SILENT_EVM:-}" ]; then - pnpm evm:node &> /dev/null & - else - pnpm evm:node & - fi + anvil --host 0.0.0.0 --chain-id 31337 --block-time 1 --mnemonic 'test test test test test test test test test test test junk' --silent & } ensure_process_count_equals() { diff --git a/tests/integration/persist.sh b/tests/integration/persist.sh index 5cb592a01a..9deaed3b60 100755 --- a/tests/integration/persist.sh +++ b/tests/integration/persist.sh @@ -13,7 +13,7 @@ heading "Start the EVM node" launch_evm -until curl -f -s "http://localhost:8545" > /dev/null; do +until curl -sf -X POST http://localhost:8545 -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' > /dev/null; do sleep 1 done